effective_memberships 0.6.2 → 0.6.5

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: 4b5129f1448e268a4dd8977f9ad66e4d85f6ea9a2430f4ef5ac301a134f273fd
4
- data.tar.gz: cc623fb32179f8157d28d80260ab32733fec716afbcdc0b887f76f1106fca241
3
+ metadata.gz: 276edc8f53de07b32c2a6f5467727cda1ca37a4748dd6fccf37fd8657150e1b8
4
+ data.tar.gz: '097342ca3d781331f2d660e0e027016b34c67d0f13f24b535b2703c0d30cf212'
5
5
  SHA512:
6
- metadata.gz: 414b1c1c2b7a166fc214d35a62b6b7f5f19cddd6845852dfd0c1bc255720601673eb2607ba1456f1b5c28a92ca3092d92554577855965428e0eb2ffd7cd892b6
7
- data.tar.gz: c78a8ebee8e8e56493e89519242ebcec959603f87f877c55683fea709fc29d09c7ac3de5260124e58b1a69021ad6abb0716584826518207ef9722a5a746e98ac
6
+ metadata.gz: 87669cf4f1bc83980b9f915916a509d1580cb4ba14545c178bf344f9dfe9f0c9c8c7b45f6e350fc38d1ae4aa9f2ef0c1de93382e8e310fc368623b007b4a1a4e
7
+ data.tar.gz: 1c71acefad1595cc972e63399a4709c1d934f1f487c439bf593feb8cdb9d2167a7ea703f2d36ad78e010c727e128d7548a0b26847538ea3ba81ab48d69ba3ba4
@@ -195,7 +195,7 @@ module EffectiveMembershipsApplicant
195
195
  before_validation(if: -> { (new_record? || current_step == :select) && owner.present? }) do
196
196
  self.applicant_type ||= can_apply_applicant_types_collection().first
197
197
  self.from_category = owner.membership&.category
198
- self.from_status = owner.membership&.status
198
+ self.from_status = owner.membership&.status if reinstatement?
199
199
  end
200
200
 
201
201
  before_validation(if: -> { current_step == :experience }) do
@@ -559,7 +559,7 @@ module EffectiveMembershipsApplicant
559
559
  def can_apply_applicant_types_collection
560
560
  if owner.blank? || owner.membership.blank? || owner.membership.categories.blank?
561
561
  ['Apply to Join']
562
- elsif owner.membership.statuses.present?
562
+ elsif owner.membership.statuses.any?(&:reinstatable?)
563
563
  ['Apply for Reinstatement', 'Apply to Join']
564
564
  else
565
565
  ['Apply to Reclassify']
@@ -169,6 +169,10 @@ module EffectiveMembershipsCategory
169
169
  category_type == 'Organization'
170
170
  end
171
171
 
172
+ def membership_number_required?
173
+ true
174
+ end
175
+
172
176
  def prorated_fee(date:)
173
177
  send("prorated_#{date.strftime('%b').downcase}").to_i
174
178
  end
@@ -53,7 +53,6 @@ module EffectiveMembershipsRegistrar
53
53
 
54
54
  # Default Date and next number
55
55
  date ||= Time.zone.now
56
- number = next_membership_number(owner, to: categories.first) if number.blank?
57
56
  period = period(date: date)
58
57
  period_end_on = period_end_on(date: date)
59
58
 
@@ -63,7 +62,8 @@ module EffectiveMembershipsRegistrar
63
62
  # Assign Dates
64
63
  membership.joined_on ||= date # Only if not already present
65
64
 
66
- # Assign Number
65
+ # Assign Number (this could be nil)
66
+ number = next_membership_number(owner, to: categories.first) if number.blank?
67
67
  membership.number ||= number
68
68
  membership.number_as_integer ||= (Integer(number) rescue nil)
69
69
 
@@ -111,7 +111,6 @@ module EffectiveMembershipsRegistrar
111
111
 
112
112
  # Default Date and next number
113
113
  date ||= Time.zone.now
114
- number = next_membership_number(owner, to: to) if number.blank?
115
114
  period = period(date: date)
116
115
  period_end_on = period_end_on(date: date)
117
116
 
@@ -122,7 +121,8 @@ module EffectiveMembershipsRegistrar
122
121
  membership.joined_on ||= date # Only if not already present
123
122
  membership.registration_on = date # Always new registration_on
124
123
 
125
- # Assign Number
124
+ # Assign Number (this could be nil)
125
+ number = next_membership_number(owner, to: to) if number.blank?
126
126
  membership.number = number
127
127
  membership.number_as_integer = (Integer(number) rescue nil)
128
128
 
@@ -151,7 +151,7 @@ module EffectiveMembershipsRegistrar
151
151
  save!(owner, date: date)
152
152
  end
153
153
 
154
- def reclassify!(owner, to:, date: nil, skip_fees: false)
154
+ def reclassify!(owner, to:, status: nil, date: nil, skip_fees: false)
155
155
  raise('expecting a memberships owner') unless owner.class.respond_to?(:effective_memberships_owner?)
156
156
  raise('owner must have an existing membership. use register! instead') if owner.membership.blank?
157
157
 
@@ -159,6 +159,7 @@ module EffectiveMembershipsRegistrar
159
159
 
160
160
  raise('expecting a to memberships category') unless to.class.respond_to?(:effective_memberships_category?)
161
161
  raise('expecting a from memberships category') unless from.class.respond_to?(:effective_memberships_category?)
162
+ raise('expecting a memberships status') unless status.nil? || status.class.respond_to?(:effective_memberships_status?)
162
163
  raise('expected to and from to be different') if from == to
163
164
 
164
165
  date ||= Time.zone.now
@@ -171,6 +172,9 @@ module EffectiveMembershipsRegistrar
171
172
  membership.build_membership_category(category: to)
172
173
  membership.membership_category(category: from).mark_for_destruction
173
174
 
175
+ # Assign Status
176
+ membership.build_membership_status(status: status) if status.present?
177
+
174
178
  unless skip_fees
175
179
  fee = owner.build_prorated_fee(date: date)
176
180
  raise('already has purchased prorated fee') if fee.purchased?
@@ -305,7 +309,11 @@ module EffectiveMembershipsRegistrar
305
309
 
306
310
  def next_membership_number(owner, to:)
307
311
  raise('expecting a memberships owner') unless owner.class.respond_to?(:effective_memberships_owner?)
308
- raise('expecting a membership category') unless Array(to).all? { |to| to.class.respond_to?(:effective_memberships_category?) }
312
+
313
+ categories = Array(to)
314
+ raise('expecting a membership category') unless categories.all? { |cat| cat.class.respond_to?(:effective_memberships_category?) }
315
+
316
+ return nil if categories.none?(&:membership_number_required?)
309
317
 
310
318
  # Just a simple number right now
311
319
  number = (Effective::Membership.all.max_number || 0) + 1
@@ -68,4 +68,9 @@ module EffectiveMembershipsStatus
68
68
  status_type == 'Organization'
69
69
  end
70
70
 
71
+ # Used for Apply to Join Reinstatement
72
+ def reinstatable?
73
+ true
74
+ end
75
+
71
76
  end
@@ -51,10 +51,12 @@ module Effective
51
51
  end
52
52
 
53
53
  before_validation(if: -> { number_changed? }) do
54
- self.number_as_integer = (Integer(number) rescue nil)
54
+ self.number_as_integer = (number.present? ? (Integer(number) rescue nil) : nil)
55
55
  end
56
56
 
57
- validates :number, presence: true, uniqueness: true
57
+ validates :number, uniqueness: { allow_blank: true }
58
+ validates :number, presence: true, if: -> { categories.any?(:membership_number_required?) }
59
+
58
60
  validates :joined_on, presence: true
59
61
  validates :registration_on, presence: true
60
62
  validates :membership_categories, presence: true
@@ -80,7 +82,7 @@ module Effective
80
82
  (statuses.to_sentence if statuses.present?),
81
83
  (categories.to_sentence if categories.present?),
82
84
  'member',
83
- "##{number_was}",
85
+ ("##{number_was}" if number_was.present?),
84
86
  "who joined #{joined_on&.strftime('%F') || '-'}",
85
87
  ("and last registered #{registration_on.strftime('%F')}" if registration_on > joined_on),
86
88
  (". Membership is Not In Good Standing because #{bad_standing_reason}" if bad_standing?)
@@ -3,7 +3,10 @@
3
3
 
4
4
  = card do
5
5
  - if resource.min_applicant_equivalences > 0
6
- .alert.alert-danger You must include #{resource.min_applicant_equivalences} or more equivalent memberships.
6
+ %p You must include #{resource.min_applicant_equivalences} or more equivalent memberships.
7
+
8
+ - if resource.min_applicant_equivalences == 0
9
+ %p Equivalent memberships are not required. Click the Remove button to skip adding memberships.
7
10
 
8
11
  = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
9
12
  = f.hidden_field :id
@@ -8,6 +8,9 @@
8
8
  - if resource.min_applicant_experiences_months > 0
9
9
  %p You must include #{resource.min_applicant_experiences_months} or more months of experience.
10
10
 
11
+ - if resource.min_applicant_educations == 0 && resource.min_applicant_experiences_months == 0
12
+ %p Work experience is not required. Click the Remove button to skip adding work experience.
13
+
11
14
  = effective_form_with(model: resource, url: wizard_path(step), method: :put) do |f|
12
15
  = f.hidden_field :id
13
16
  = f.error :applicant_experiences
@@ -1,3 +1,3 @@
1
1
  module EffectiveMemberships
2
- VERSION = '0.6.2'
2
+ VERSION = '0.6.5'
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.6.2
4
+ version: 0.6.5
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-08-30 00:00:00.000000000 Z
11
+ date: 2022-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails