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 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