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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 63bc67558cecd231d4c28c0622ed24c8ad22a59377a783d29bd7f020d3a8af00
4
- data.tar.gz: 9ffbb0be52b89c109cc52a81a66ca97fdaac70ad32eb9d94a64e79cfec68846a
3
+ metadata.gz: 735da58a1a6df3aed501dc23f1d03f01aad80b53c6e90d912a7e3ca245c31145
4
+ data.tar.gz: d8d83e2200d6b9e1f707bc157ef4338b94da585373473517912605eb2b2939cd
5
5
  SHA512:
6
- metadata.gz: e2ec3baf0a8d981571e4f0d9dc56bedbd0fe636fc396f2f93d8d5ed4d86e2b4945f3e5d600cdbe963e4a9728d825775ff6674ee0fad3eb301faf88e8f5edcd04
7
- data.tar.gz: 7d6848dc7fc893c432d24cafb18a3f235591cd67d0585a5c7ed617e7986542c1ebf4f7e9bbee8c8ae2551b50b060f0ca03352c9e37a162b8e76f02573186d985
6
+ metadata.gz: 472f5e747d7a7ebcacb8fbf1a3072ee82e158c2672482e0f404e4165b62dc8cafb7f66a380d5e0d625fec7b7cb25de970789332ebfd3d4aa832b269b134172e3
7
+ data.tar.gz: 69ade19ab5f49b8218795cefdc8b09fa53a4f53a2726907b5ed361d581f0fab6d2fe2e4ed17a69d202ad461208062a4fee6c4628ea88f94cbe9cc7063cb13c36
@@ -301,6 +301,7 @@ module EffectiveMembershipsApplicant
301
301
  fee_type: 'Applicant',
302
302
  category: category,
303
303
  price: category.applicant_fee,
304
+ tax_exempt: category.tax_exempt,
304
305
  qb_item_name: submit_fee_qb_item_name()
305
306
  )
306
307
 
@@ -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
- period: period
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
- period: period
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
- def build_title_fee(period:, title:, fee_type: nil, category: nil, price: nil, qb_item_name: nil, tax_exempt: nil)
189
- fee_type ||= 'Renewal'
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
- qb_item_name: qb_item_name,
204
+ price: price,
209
205
  tax_exempt: tax_exempt,
210
- late_on: nil,
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:, bad_standing_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
@@ -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 :string
17
+ fee_type :string
18
18
 
19
- title :string
19
+ title :string
20
20
 
21
- period :date
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 ||= default_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')
@@ -1,3 +1,3 @@
1
1
  module EffectiveMemberships
2
- VERSION = '0.3.6'
2
+ VERSION = '0.3.7'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_memberships
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect