effective_memberships 0.4.7 → 0.4.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a59918a13a42cc9da99200ecfa61ed9b45ae8881ca7e9c0d4e2fd0117605003
4
- data.tar.gz: b1955f238384bbb8cfc4836ad06357b1b815c47c23a9e8ac11303e858feb8379
3
+ metadata.gz: 52711c835dc479a8bc52e2c523d295999270b98eac479cfa8af855d12452466e
4
+ data.tar.gz: d5368da347ce46759fc6858b4c231788f91a0baf4ba70a8a8c9104c10e991c1d
5
5
  SHA512:
6
- metadata.gz: e2ad995fdad088a4db63c1f98467330a1315deb55fe6c912e12662a1a66d017365fd2c379038d7422f9cf5a5b9b7338aa24c05e65f519360be075098ffc4628d
7
- data.tar.gz: de64346cc2ce1119672f925d2f60589b4e9e5cd0c5ab506438cee5e7ec2e31e36a79924ed26896c5e0bec639f6033401317e254adcdd03dc8ccf279d75f0a0c9
6
+ metadata.gz: 7a62bf9547cd039f6f9035c0e075328db83455173709a0dbd672db63be2a6c92cf10551d43962deddcafca76c828c53ff0df2cf374ebf26a8e960d443b71586b
7
+ data.tar.gz: 7d57abebdaffccdf19af9a1220e20cd244054f04e8807da1e2dc3a45bb40a6010758e4e8676ded2e6321f14d59e4ca488dd05ac391514403c0315464b21c5c86
@@ -5,7 +5,7 @@ module Admin
5
5
 
6
6
  include Effective::CrudController
7
7
 
8
- submit :save, 'Update Membership',
8
+ submit :revise, 'Update Membership',
9
9
  success: -> { "#{resource.owner} has been successfully updated. Please double check the membership history is correct" },
10
10
  redirect: -> { admin_owners_path(resource) }
11
11
 
@@ -181,8 +181,8 @@ module EffectiveMembershipsOwner
181
181
  # Build the renewal fee
182
182
  fee ||= fees.build()
183
183
 
184
- late_on ||= EffectiveMemberships.Registrar.late_fee_date(period: period)
185
- bad_standing_on ||= EffectiveMemberships.Registrar.bad_standing_date(period: period)
184
+ late_on ||= EffectiveMemberships.Registrar.late_fee_date(period: period) if category.create_late_fees?
185
+ bad_standing_on ||= EffectiveMemberships.Registrar.bad_standing_date(period: period) if category.create_bad_standing?
186
186
 
187
187
  fee.assign_attributes(
188
188
  fee_type: 'Renewal',
@@ -284,52 +284,53 @@ module EffectiveMembershipsRegistrar
284
284
  retval
285
285
  end
286
286
 
287
-
288
287
  # This is intended to be run once per day in a rake task
289
288
  # rake effective_memberships:create_fees
290
289
  # Create Renewal and Late fees
291
- def create_fees!(period: nil, late_on: nil, bad_standing_on: nil)
292
- # The current period, based on Time.zone.now
290
+ def create_fees!(period: nil)
293
291
  period ||= current_period
294
- late_on ||= late_fee_date(period: period)
295
- bad_standing_on ||= bad_standing_date(period: period)
292
+ memberships = Effective::Membership.deep.with_unpaid_fees_through(period)
296
293
 
297
294
  # Create Renewal Fees
298
- Effective::Membership.deep.with_unpaid_fees_through(period).find_each do |membership|
299
- membership.categories.select(&:create_renewal_fees?).map do |category|
300
- existing = membership.owner.membership_period_fee(category: category, period: period, except: 'Renewal')
301
- next if existing.present? # This might be an existing Prorated fee
295
+ memberships.find_each { |membership| create_renewal_fees!(membership, period: period) }
296
+ GC.start
302
297
 
303
- fee = membership.owner.build_renewal_fee(category: category, period: period, late_on: late_on, bad_standing_on: bad_standing_on)
304
- raise("expected build_renewal_fee to return a fee for period #{period}") unless fee.kind_of?(Effective::Fee)
305
- next if fee.purchased?
298
+ # Create Late Fees
299
+ memberships.find_each { |membership| create_late_fees!(membership, period: period) }
300
+ GC.start
306
301
 
307
- puts("Created renewal fee for #{membership.owner}") if fee.new_record? && !Rails.env.test?
302
+ # Update Membership Status - Assign In Bad Standing
303
+ memberships.find_each { |membership| update_membership_status!(membership, period: period) }
304
+ GC.start
308
305
 
309
- fee.save!
310
- end
311
- end
306
+ true
307
+ end
312
308
 
313
- GC.start
309
+ def create_renewal_fees!(membership, period:)
310
+ membership.categories.select(&:create_renewal_fees?).map do |category|
311
+ existing = membership.owner.membership_period_fee(category: category, period: period, except: 'Renewal')
312
+ next if existing.present? # This might be an existing Prorated fee
314
313
 
315
- # Create Late Fees
316
- Effective::Membership.deep.with_unpaid_fees_through(period).find_each do |membership|
317
- membership.categories.select(&:create_late_fees?).map do |category|
318
- fee = membership.owner.build_late_fee(category: category, period: period)
319
- next if fee.blank? || fee.purchased?
314
+ fee = membership.owner.build_renewal_fee(category: category, period: period)
315
+ raise("expected build_renewal_fee to return a fee for period #{period}") unless fee.kind_of?(Effective::Fee)
316
+ next if fee.purchased?
320
317
 
321
- fee.save!
322
- end
323
- end
318
+ puts("Created renewal fee for #{membership.owner}") if fee.new_record? && !Rails.env.test?
324
319
 
325
- GC.start
320
+ fee.save!
321
+ end
322
+ end
326
323
 
327
- # Update Membership Status - Assign In Bad Standing
328
- Effective::Membership.deep.with_unpaid_fees_through(period).find_each do |membership|
329
- membership.owner.update_membership_status!
324
+ def create_late_fees!(membership, period:)
325
+ membership.categories.select(&:create_late_fees?).map do |category|
326
+ fee = membership.owner.build_late_fee(category: category, period: period)
327
+ next if fee.blank? || fee.purchased?
328
+ fee.save!
330
329
  end
330
+ end
331
331
 
332
- true
332
+ def update_membership_status!(membership, period: nil)
333
+ membership.owner.update_membership_status!
333
334
  end
334
335
 
335
336
  # Called in the after_purchase of fee payment
@@ -38,8 +38,9 @@ module Effective
38
38
  }
39
39
 
40
40
  scope :with_unpaid_fees_through, -> (period = nil) {
41
- where(arel_table[:fees_paid_period].lt(period || EffectiveMemberships.Registrar.current_period))
42
- .or(where(fees_paid_period: nil))
41
+ joined = where(arel_table[:joined_on].lt(period || EffectiveMemberships.Registrar.current_period))
42
+ unpaid = where(arel_table[:fees_paid_period].lt(period || EffectiveMemberships.Registrar.current_period)).or(where(fees_paid_period: nil))
43
+ joined.merge(unpaid)
43
44
  }
44
45
 
45
46
  before_validation do
@@ -119,7 +120,24 @@ module Effective
119
120
  end
120
121
 
121
122
  def fees_paid?
122
- fees_paid_period == EffectiveMemberships.Registrar.current_period
123
+ paid_fees_through?(EffectiveMemberships.Registrar.current_period)
124
+ end
125
+
126
+ def paid_fees_through?(period = nil)
127
+ period ||= EffectiveMemberships.Registrar.current_period
128
+
129
+ return false if fees_paid_period.blank?
130
+ fees_paid_period >= period
131
+ end
132
+
133
+ def unpaid_fees_through?(period = nil)
134
+ period ||= EffectiveMemberships.Registrar.current_period
135
+
136
+ return false if joined_on.blank?
137
+ return false unless joined_on < period
138
+
139
+ return true if fees_paid_period.blank?
140
+ fees_paid_period < period
123
141
  end
124
142
 
125
143
  def change_fees_paid_period
@@ -127,6 +145,10 @@ module Effective
127
145
  end
128
146
 
129
147
  def change_fees_paid_period=(date)
148
+ if date.blank?
149
+ return assign_attributes(fees_paid_period: nil, fees_paid_through_period: nil)
150
+ end
151
+
130
152
  date = (date.respond_to?(:strftime) ? date : Date.parse(date))
131
153
 
132
154
  period = EffectiveMemberships.Registrar.period(date: date)
@@ -135,5 +157,20 @@ module Effective
135
157
  assign_attributes(fees_paid_period: period, fees_paid_through_period: period_end_on)
136
158
  end
137
159
 
160
+ # Admin updating membership info
161
+ def revise!
162
+ save!
163
+
164
+ period = EffectiveMemberships.Registrar.current_period
165
+ return true if paid_fees_through?(period)
166
+
167
+ # Otherwise build fees right now
168
+ EffectiveMemberships.Registrar.create_renewal_fees!(self, period: period)
169
+ EffectiveMemberships.Registrar.create_late_fees!(self, period: period)
170
+ EffectiveMemberships.Registrar.update_membership_status!(self, period: period)
171
+
172
+ true
173
+ end
174
+
138
175
  end
139
176
  end
@@ -21,7 +21,7 @@
21
21
  - periods = registrar.periods(from: f.object.joined_on)
22
22
  - collection = periods.reverse.map { |period| [registrar.period_end_on(date: period), period] }
23
23
 
24
- = f.select :change_fees_paid_period, collection, label: 'Fees Paid Through', hint: 'Which period this user has fees paid through. Can change how renewal fees are created.'
24
+ = f.select :change_fees_paid_period, collection, label: 'Fees Paid Through', hint: 'Which period this user has fees paid through. Determines which renewal fees should be created. Setting this to a past or blank period may create a renewal fee in the current period.'
25
25
 
26
26
  %p.text-muted To update the current membership categories, use the 'Assign' or 'Reclassify' actions below
27
27
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveMemberships
2
- VERSION = '0.4.7'
2
+ VERSION = '0.4.8'
3
3
  end
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.4.7
4
+ version: 0.4.8
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: 2022-04-12 00:00:00.000000000 Z
11
+ date: 2022-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -178,6 +178,20 @@ dependencies:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: timecop
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
181
195
  - !ruby/object:Gem::Dependency
182
196
  name: effective_test_bot
183
197
  requirement: !ruby/object:Gem::Requirement