effective_memberships 0.3.6 → 0.3.7
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/models/concerns/effective_memberships_applicant.rb +1 -0
- data/app/models/concerns/effective_memberships_category.rb +4 -0
- data/app/models/concerns/effective_memberships_owner.rb +22 -20
- data/app/models/effective/fee.rb +8 -43
- data/db/seeds.rb +9 -3
- data/lib/effective_memberships/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 735da58a1a6df3aed501dc23f1d03f01aad80b53c6e90d912a7e3ca245c31145
|
4
|
+
data.tar.gz: d8d83e2200d6b9e1f707bc157ef4338b94da585373473517912605eb2b2939cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 472f5e747d7a7ebcacb8fbf1a3072ee82e158c2672482e0f404e4165b62dc8cafb7f66a380d5e0d625fec7b7cb25de970789332ebfd3d4aa832b269b134172e3
|
7
|
+
data.tar.gz: 69ade19ab5f49b8218795cefdc8b09fa53a4f53a2726907b5ed361d581f0fab6d2fe2e4ed17a69d202ad461208062a4fee6c4628ea88f94cbe9cc7063cb13c36
|
@@ -110,6 +110,7 @@ module EffectiveMembershipsCategory
|
|
110
110
|
scope :create_bad_standing, -> { where(create_bad_standing: true) }
|
111
111
|
|
112
112
|
validates :title, presence: true, uniqueness: true
|
113
|
+
|
113
114
|
validates :position, presence: true
|
114
115
|
|
115
116
|
after_initialize(if: -> { new_record? }) do
|
@@ -138,6 +139,9 @@ module EffectiveMembershipsCategory
|
|
138
139
|
validates :prorated_oct, presence: true, numericality: { greater_than_or_equal_to: 0 }
|
139
140
|
validates :prorated_nov, presence: true, numericality: { greater_than_or_equal_to: 0 }
|
140
141
|
validates :prorated_dec, presence: true, numericality: { greater_than_or_equal_to: 0 }
|
142
|
+
|
143
|
+
validates :qb_item_name, presence: true
|
144
|
+
validates :tax_exempt, inclusion: { in: [true, false] }
|
141
145
|
end
|
142
146
|
end
|
143
147
|
|
@@ -137,11 +137,6 @@ module EffectiveMembershipsOwner
|
|
137
137
|
end
|
138
138
|
|
139
139
|
# Instance Methods
|
140
|
-
def additional_fee_attributes(fee)
|
141
|
-
raise('expected an Effective::Fee') unless fee.kind_of?(Effective::Fee)
|
142
|
-
{}
|
143
|
-
end
|
144
|
-
|
145
140
|
def build_prorated_fee(date: nil)
|
146
141
|
raise('must have an existing membership') unless membership.present?
|
147
142
|
|
@@ -156,8 +151,10 @@ module EffectiveMembershipsOwner
|
|
156
151
|
fee.assign_attributes(
|
157
152
|
fee_type: 'Prorated',
|
158
153
|
category: category,
|
154
|
+
period: period,
|
159
155
|
price: price,
|
160
|
-
|
156
|
+
tax_exempt: category.tax_exempt,
|
157
|
+
qb_item_name: category.qb_item_name
|
161
158
|
)
|
162
159
|
|
163
160
|
fee
|
@@ -178,16 +175,17 @@ module EffectiveMembershipsOwner
|
|
178
175
|
fee.assign_attributes(
|
179
176
|
fee_type: 'Discount',
|
180
177
|
category: category,
|
178
|
+
period: period,
|
181
179
|
price: price,
|
182
|
-
|
180
|
+
tax_exempt: category.tax_exempt,
|
181
|
+
qb_item_name: category.qb_item_name
|
183
182
|
)
|
184
183
|
|
185
184
|
fee
|
186
185
|
end
|
187
186
|
|
188
|
-
|
189
|
-
|
190
|
-
|
187
|
+
# Only thing optional is category, late_on and bad_standing_on
|
188
|
+
def build_title_fee(title:, fee_type:, period:, price:, tax_exempt:, qb_item_name:, category: nil)
|
191
189
|
fee = fees.find do |fee|
|
192
190
|
fee.fee_type == fee_type && fee.period == period && fee.title == title &&
|
193
191
|
(category.blank? || fee.category_id == category.id && fee.category_type == category.class.name)
|
@@ -197,24 +195,21 @@ module EffectiveMembershipsOwner
|
|
197
195
|
|
198
196
|
# Build the title fee
|
199
197
|
fee ||= fees.build()
|
200
|
-
price ||= (category.renewal_fee.to_i if category.present? && fee_type == 'Renewal')
|
201
198
|
|
202
199
|
fee.assign_attributes(
|
203
|
-
fee_type: fee_type,
|
204
200
|
title: title,
|
201
|
+
fee_type: fee_type,
|
205
202
|
category: category,
|
206
|
-
price: price,
|
207
203
|
period: period,
|
208
|
-
|
204
|
+
price: price,
|
209
205
|
tax_exempt: tax_exempt,
|
210
|
-
|
211
|
-
bad_standing_on: nil
|
206
|
+
qb_item_name: qb_item_name
|
212
207
|
)
|
213
208
|
|
214
209
|
fee
|
215
210
|
end
|
216
211
|
|
217
|
-
def build_renewal_fee(category:, period:, late_on
|
212
|
+
def build_renewal_fee(category:, period:, late_on: nil, bad_standing_on: nil)
|
218
213
|
raise('must have an existing membership') unless membership.present?
|
219
214
|
|
220
215
|
fee = fees.find { |fee| fee.fee_type == 'Renewal' && fee.period == period && fee.category_id == category.id && fee.category_type == category.class.name }
|
@@ -223,13 +218,18 @@ module EffectiveMembershipsOwner
|
|
223
218
|
# Build the renewal fee
|
224
219
|
fee ||= fees.build()
|
225
220
|
|
221
|
+
late_on ||= EffectiveMemberships.Registrar.late_fee_date(period: period)
|
222
|
+
bad_standing_on ||= EffectiveMemberships.Registrar.bad_standing_date(period: period)
|
223
|
+
|
226
224
|
fee.assign_attributes(
|
227
225
|
fee_type: 'Renewal',
|
228
226
|
category: category,
|
229
|
-
price: category.renewal_fee.to_i,
|
230
227
|
period: period,
|
228
|
+
price: category.renewal_fee.to_i,
|
229
|
+
tax_exempt: category.tax_exempt,
|
230
|
+
qb_item_name: category.qb_item_name,
|
231
231
|
late_on: late_on,
|
232
|
-
bad_standing_on: bad_standing_on
|
232
|
+
bad_standing_on: bad_standing_on,
|
233
233
|
)
|
234
234
|
|
235
235
|
fee
|
@@ -252,8 +252,10 @@ module EffectiveMembershipsOwner
|
|
252
252
|
fee.assign_attributes(
|
253
253
|
fee_type: 'Late',
|
254
254
|
category: category,
|
255
|
-
price: category.late_fee.to_i,
|
256
255
|
period: period,
|
256
|
+
price: category.late_fee.to_i,
|
257
|
+
tax_exempt: category.tax_exempt,
|
258
|
+
qb_item_name: category.qb_item_name
|
257
259
|
)
|
258
260
|
|
259
261
|
fee
|
data/app/models/effective/fee.rb
CHANGED
@@ -14,11 +14,11 @@ module Effective
|
|
14
14
|
belongs_to :category, polymorphic: true, optional: true
|
15
15
|
|
16
16
|
effective_resource do
|
17
|
-
fee_type
|
17
|
+
fee_type :string
|
18
18
|
|
19
|
-
title
|
19
|
+
title :string
|
20
20
|
|
21
|
-
period
|
21
|
+
period :date
|
22
22
|
|
23
23
|
late_on :date
|
24
24
|
bad_standing_on :date
|
@@ -33,32 +33,22 @@ module Effective
|
|
33
33
|
scope :sorted, -> { order(:id) }
|
34
34
|
scope :deep, -> { includes(:owner, :parent, :category) }
|
35
35
|
|
36
|
-
before_validation(if: -> { owner.present? }) do
|
37
|
-
additional = owner.additional_fee_attributes(self)
|
38
|
-
raise('expected a Hash of attributes') unless additional.kind_of?(Hash)
|
39
|
-
assign_attributes(additional)
|
40
|
-
end
|
41
|
-
|
42
36
|
before_validation(if: -> { owner && owner.membership }) do
|
43
37
|
self.category ||= owner.membership.categories.first if owner.membership.categories.length == 1
|
44
38
|
end
|
45
39
|
|
46
40
|
before_validation do
|
47
|
-
self.period ||=
|
48
|
-
self.late_on ||= default_late_on()
|
49
|
-
self.bad_standing_on ||= default_bad_standing_on()
|
50
|
-
|
51
|
-
self.qb_item_name ||= default_qb_item_name()
|
52
|
-
self.tax_exempt = default_tax_exempt() if tax_exempt.nil?
|
53
|
-
|
41
|
+
self.period ||= EffectiveMemberships.Registrar.current_period
|
54
42
|
self.title ||= default_title()
|
55
43
|
end
|
56
44
|
|
57
45
|
validates :fee_type, presence: true
|
58
|
-
validates :price, presence: true
|
59
46
|
|
60
47
|
validates :title, presence: true
|
61
48
|
validates :period, presence: true
|
49
|
+
|
50
|
+
validates :price, presence: true
|
51
|
+
validates :tax_exempt, inclusion: { in: [true, false] }
|
62
52
|
validates :qb_item_name, presence: true
|
63
53
|
|
64
54
|
validate(if: -> { fee_type.present? }) do
|
@@ -107,33 +97,8 @@ module Effective
|
|
107
97
|
EffectiveMemberships.custom_fee_types.include?(fee_type)
|
108
98
|
end
|
109
99
|
|
110
|
-
def default_period
|
111
|
-
EffectiveMemberships.Registrar.current_period
|
112
|
-
end
|
113
|
-
|
114
|
-
def default_late_on
|
115
|
-
nil
|
116
|
-
end
|
117
|
-
|
118
|
-
def default_bad_standing_on
|
119
|
-
nil
|
120
|
-
end
|
121
|
-
|
122
100
|
def default_title
|
123
|
-
[
|
124
|
-
period&.strftime('%Y').presence,
|
125
|
-
category.to_s.presence,
|
126
|
-
fee_type.presence,
|
127
|
-
'Fee'
|
128
|
-
].join(' ')
|
129
|
-
end
|
130
|
-
|
131
|
-
def default_qb_item_name
|
132
|
-
category&.qb_item_name.presence || "#{fee_type}"
|
133
|
-
end
|
134
|
-
|
135
|
-
def default_tax_exempt
|
136
|
-
category.present? ? category.tax_exempt : false
|
101
|
+
[period&.strftime('%Y'), category, fee_type, 'Fee'].compact.join(' ')
|
137
102
|
end
|
138
103
|
|
139
104
|
end
|
data/db/seeds.rb
CHANGED
@@ -21,7 +21,9 @@ member = Effective::Category.create!(
|
|
21
21
|
renewal_fee: 250_00,
|
22
22
|
late_fee: 50_00,
|
23
23
|
prorated_jan: 120_00, prorated_feb: 110_00, prorated_mar: 100_00, prorated_apr: 90_00, prorated_may: 80_00, prorated_jun: 70_00,
|
24
|
-
prorated_jul: 60_00, prorated_aug: 50_00, prorated_sep: 40_00, prorated_oct: 30_00, prorated_nov: 20_00, prorated_dec: 10_00
|
24
|
+
prorated_jul: 60_00, prorated_aug: 50_00, prorated_sep: 40_00, prorated_oct: 30_00, prorated_nov: 20_00, prorated_dec: 10_00,
|
25
|
+
qb_item_name: 'Full Member Quickbooks Name',
|
26
|
+
tax_exempt: false
|
25
27
|
)
|
26
28
|
|
27
29
|
student = Effective::Category.create!(
|
@@ -35,7 +37,9 @@ student = Effective::Category.create!(
|
|
35
37
|
renewal_fee: 125_00,
|
36
38
|
late_fee: 25_00,
|
37
39
|
prorated_jan: 120_00, prorated_feb: 110_00, prorated_mar: 100_00, prorated_apr: 90_00, prorated_may: 80_00, prorated_jun: 70_00,
|
38
|
-
prorated_jul: 60_00, prorated_aug: 50_00, prorated_sep: 40_00, prorated_oct: 30_00, prorated_nov: 20_00, prorated_dec: 10_00
|
40
|
+
prorated_jul: 60_00, prorated_aug: 50_00, prorated_sep: 40_00, prorated_oct: 30_00, prorated_nov: 20_00, prorated_dec: 10_00,
|
41
|
+
qb_item_name: 'Student Quickbooks Name',
|
42
|
+
tax_exempt: false
|
39
43
|
)
|
40
44
|
|
41
45
|
retired = Effective::Category.create!(
|
@@ -47,7 +51,9 @@ retired = Effective::Category.create!(
|
|
47
51
|
applicant_fee: 0,
|
48
52
|
renewal_fee: 0,
|
49
53
|
prorated_jan: 120_00, prorated_feb: 110_00, prorated_mar: 100_00, prorated_apr: 90_00, prorated_may: 80_00, prorated_jun: 70_00,
|
50
|
-
prorated_jul: 60_00, prorated_aug: 50_00, prorated_sep: 40_00, prorated_oct: 30_00, prorated_nov: 20_00, prorated_dec: 10_00
|
54
|
+
prorated_jul: 60_00, prorated_aug: 50_00, prorated_sep: 40_00, prorated_oct: 30_00, prorated_nov: 20_00, prorated_dec: 10_00,
|
55
|
+
qb_item_name: 'Retired Quickbooks Name',
|
56
|
+
tax_exempt: false
|
51
57
|
)
|
52
58
|
|
53
59
|
area = Effective::ApplicantCourseArea.create!(title: 'Science')
|