effective_memberships 0.4.5 → 0.4.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 940bfa04e965ae36e054add85ac673260b5fa11f2ff3939ec0f00a3732b6bba1
4
- data.tar.gz: c3d94b16860a507b64e75bc7b156e6ce96f79845e5561a25a52ae48c57f3951b
3
+ metadata.gz: 52711c835dc479a8bc52e2c523d295999270b98eac479cfa8af855d12452466e
4
+ data.tar.gz: d5368da347ce46759fc6858b4c231788f91a0baf4ba70a8a8c9104c10e991c1d
5
5
  SHA512:
6
- metadata.gz: 81ba80b0314968331c9bc85a2a021be327780daf44854379f52f4f9f64d8e6c0a3b816871129610b953d2b6d29f8eca22aa4699cc5fc5aceee3fbf86b72e87e2
7
- data.tar.gz: 7671e32ba29f5540b90bbd250e5f78503033af257702a01caccfb93064c5e8a111e95cff7212f64c7b0ef2d0d8872131b76cef7ee10a800700f157fd3e8258d1
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
 
@@ -1,7 +1,12 @@
1
1
  module Admin
2
2
  class EffectiveOrganizationsDatatable < Effective::Datatable
3
- datatable do
3
+ filters do
4
+ scope :unarchived, label: 'All'
5
+ scope :members
6
+ scope :archived
7
+ end
4
8
 
9
+ datatable do
5
10
  col :updated_at, visible: false
6
11
  col :created_at, visible: false
7
12
 
@@ -11,16 +16,54 @@ module Admin
11
16
  col :category, search: categories
12
17
  end
13
18
 
14
- col :title
19
+ col(:to_s, label: 'Organization', sql_column: true, action: :edit)
20
+ .search do |collection, term|
21
+ collection.where(id: effective_resource.search_any(term))
22
+ end.sort do |collection, direction|
23
+ collection.order(title: direction)
24
+ end
25
+
26
+ col :title, visible: false
27
+
28
+ col 'membership.joined_on'
29
+ col 'membership.fees_paid_through_period', label: 'Fees Paid Through'
30
+ col 'membership.categories'
15
31
 
16
32
  col :representatives_count
17
33
  col :representatives
18
34
 
35
+ col :email, visible: false
36
+
37
+ col :address1, visible: false do |organization|
38
+ organization.billing_address&.address1
39
+ end
40
+ col :address2, visible: false do |organization|
41
+ organization.billing_address&.address2
42
+ end
43
+ col :city, visible: false do |organization|
44
+ organization.billing_address&.city
45
+ end
46
+ col :state_code, label: 'Prov', visible: false do |organization|
47
+ organization.billing_address&.state_code
48
+ end
49
+ col :postal_code, label: 'Postal', visible: false do |organization|
50
+ organization.billing_address&.postal_code
51
+ end
52
+ col :country_code, label: 'Country', visible: false do |organization|
53
+ organization.billing_address&.country_code
54
+ end
55
+
56
+ col :phone, visible: false
57
+ col :fax, visible: false
58
+ col :website, visible: false
59
+ col :category, visible: false
60
+ col :notes, visible: false
61
+
19
62
  actions_col
20
63
  end
21
64
 
22
65
  collection do
23
- EffectiveMemberships.Organization.deep.all
66
+ EffectiveMemberships.Organization.deep.left_joins(:membership).includes(:addresses, membership: :membership_categories)
24
67
  end
25
68
 
26
69
  def categories
@@ -23,6 +23,7 @@ module EffectiveMembershipsOrganization
23
23
  effective_memberships_owner
24
24
 
25
25
  acts_as_addressable :billing # effective_addresses
26
+ acts_as_archived unless respond_to?(:acts_as_archived?)
26
27
  log_changes(except: [:representatives, :users]) if respond_to?(:log_changes)
27
28
 
28
29
  # rich_text_body
@@ -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
 
@@ -2,5 +2,3 @@
2
2
 
3
3
  - if categories.present?
4
4
  = f.select :category, categories, required: true
5
-
6
- = f.text_field :title
@@ -5,7 +5,7 @@
5
5
  - if organization.persisted?
6
6
  - if can?(:index, Effective::Membership)
7
7
  = tab 'Membership' do
8
- = render 'admin/registrar_actions/form', owner: organization
8
+ = render 'admin/memberships/form', owner: organization
9
9
 
10
10
  = tab 'Representatives' do
11
11
  = render_datatable(Admin::EffectiveRepresentativesDatatable.new(organization: organization), inline: true, namespace: :admin)
@@ -18,10 +18,6 @@
18
18
  = tab 'Fee Payments' do
19
19
  = render_inline_datatable(Admin::EffectiveFeePaymentsDatatable.new(organization: organization))
20
20
 
21
- - if can?(:index, Effective::MembershipHistory)
22
- = tab 'History' do
23
- = render_datatable(Admin::EffectiveMembershipHistoriesDatatable.new(owner: organization))
24
-
25
21
  - if can?(:index, Effective::Order)
26
22
  = tab 'Orders' do
27
23
  = render_datatable(Admin::EffectiveOrdersDatatable.new(user: organization))
@@ -3,9 +3,7 @@
3
3
  .col-sm-6
4
4
  %h2 Demographics
5
5
  = render 'admin/organizations/fields', f: f
6
-
7
- %h2 Billing Address
8
- = effective_address_fields(f, :billing)
6
+ = render 'organizations/fields_demographics', f: f
9
7
 
10
8
  .col-sm-6
11
9
  %h2 Membership
@@ -1,3 +1,3 @@
1
1
  module EffectiveMemberships
2
- VERSION = '0.4.5'
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.5
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-03-30 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