effective_memberships 0.3.6 → 0.3.7
Sign up to get free protection for your applications and to get access to all the features.
- 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')
|