invoicing_payments_processing 1.1.18 → 1.1.30

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
  SHA1:
3
- metadata.gz: 2ba80e4b1b4e72baf07ccb19207e125930eadf71
4
- data.tar.gz: 2df78c09cd1e6b9a467454ab886c484336c57391
3
+ metadata.gz: 212a2966346ed12f4de648a737a3ddeaea9b4886
4
+ data.tar.gz: 891852dc15b535c8eff5bfbdcc1f5b79b3f209b8
5
5
  SHA512:
6
- metadata.gz: 119752cad89e007e3a124144e0f27af20be2669867311a36c863227897c1b80108d2938e368aee0fd7f44b5816db05cc0f1aecfd31621997757a470e5c3b40f7
7
- data.tar.gz: 9e1bc580c20e46a192b1e549325f77a2bd1da9b059e4908bea40a62476f11ec4fb293f2241784c3b1803832d89a6443e6f5dd2e53807cd59f01e741286445cbb
6
+ metadata.gz: 1630c612e2036f822aa5d8540a86a9279f337b93fee1419899cd56c119d165474b765b9c75a52eee8b4b3d94ba4a5e8d1c61ba7c0a7ad9eac02b14d058604781
7
+ data.tar.gz: 9e26f1b23afa365b8a09aea64d166affab51e9d15cf9e3228fa121072c3869c18a6ac75d9714e5e10c74280cd4cc18b5a106767769393282ef5e1ae6ee94c781
@@ -16,7 +16,7 @@ module BlackStack
16
16
  "where id_client='#{self.client.id}' " +
17
17
  "and product_code='#{self.product_code}' "
18
18
 
19
- q += "and create_time < '#{self.up_time.to_sql}' " if !self.up_time.nil?
19
+ q += "and create_time < '#{self.up_time.to_time.to_sql}' " if !self.up_time.nil?
20
20
 
21
21
  row = DB[q].first
22
22
  self.amount = row[:amount].to_f
@@ -331,6 +331,12 @@ module BlackStack
331
331
  s.id_client = c.id
332
332
  s.active = true
333
333
  s.save
334
+
335
+ # obtengo la factura que se creo con esta suscripcion
336
+ i = BlackStack::Invoice.where(:id=>b.item_number).first
337
+
338
+ # vinculo esta suscripcion a la factura que la genero, y a todas las facturas siguientes
339
+ i.set_subscription(s)
334
340
  end
335
341
 
336
342
  elsif (
@@ -384,22 +390,7 @@ module BlackStack
384
390
  k = BlackStack::Invoice.where(:id=>row[:id]).first
385
391
 
386
392
  # creo la factura por el reembolso
387
- i = BlackStack::Invoice.new()
388
- i.id = guid()
389
- i.id_client = c.id
390
- i.create_time = now()
391
- i.disabled_for_trial_ssm = c.disabled_for_trial_ssm
392
- i.id_buffer_paypal_notification = b.id
393
- i.status = BlackStack::Invoice::STATUS_REFUNDED
394
- i.billing_period_from = b.create_time
395
- i.billing_period_to = b.create_time
396
- i.paypal_url = nil
397
- i.disabled_for_add_remove_items = true
398
- i.save()
399
-
400
- # parseo el reeembolso - creo el registro contable
401
- i.setup_refund(payment_gross, k.id)
402
-
393
+ k.refund(payment_gross)
403
394
  end
404
395
  else
405
396
  # unknown
@@ -162,13 +162,65 @@ module BlackStack
162
162
  if from_time > to_time
163
163
  raise "From time must be earlier than To time"
164
164
  end
165
- if to_time.prev_year > from_time
166
- raise "There time frame cannot be longer than 1 year."
167
- end
165
+ #if to_time.prev_year > from_time
166
+ # raise "The time frame cannot be longer than 1 year."
167
+ #end
168
168
  to_time += 1
169
- ds = BlackStack::Movement.where(:id_client => self.id, :product_code=>product_code) if !product_code.nil?
170
- ds = BlackStack::Movement.where(:id_client => self.id) if product_code.nil?
171
- ds.where("create_time >= ? and create_time <= ?", from_time, to_time)
169
+ =begin
170
+ :id => movement.id,
171
+ :id_client => movement.id_client,
172
+ :product_code => movement.product_code,
173
+ :create_time => movement.create_time,
174
+ :type => movement.type.to_i,
175
+ :description => movement.description,
176
+ :paypal1_amount => movement.paypal1_amount.to_f,
177
+ :bonus_amount => movement.bonus_amount.to_f,
178
+ :amount => movement.amount.to_f,
179
+ :credits => movement.credits.to_f,
180
+ :profits_amount => movement.profits_amount.to_f,
181
+ :expiration_time => movement.expiration_time,
182
+ :expiration_description => movement.expiration_time.nil? ? '-' : ((movement.expiration_time - Time.now()).to_f / 60.to_f).to_i.to_time_spent
183
+ =end
184
+ q =
185
+ "SELECT " +
186
+ " m.id_client, " +
187
+ " YEAR(m.create_time) AS creation_year, " +
188
+ " MONTH(m.create_time) AS creation_month, " +
189
+ " DAY(m.create_time) AS creation_day, " +
190
+ " YEAR(m.expiration_time) AS expiration_year, " +
191
+ " MONTH(m.expiration_time) AS expiration_month, " +
192
+ " DAY(m.expiration_time) AS expiration_day, " +
193
+ " m.type, " +
194
+ " m.product_code, " +
195
+ " CAST(m.description AS VARCHAR(500)) AS description, " +
196
+ " CAST(m.expiration_description AS VARCHAR(500)) AS expiration_description, " +
197
+ " SUM(ISNULL(m.paypal1_amount,0)) AS paypal1_amount, " +
198
+ " SUM(ISNULL(m.bonus_amount,0)) AS bonus_amount, " +
199
+ " SUM(ISNULL(m.amount,0)) AS amount, " +
200
+ " SUM(ISNULL(m.credits,0)) AS credits, " +
201
+ " SUM(ISNULL(m.profits_amount,0)) AS profits_amount " +
202
+ "FROM movement m WITH (NOLOCK) " +
203
+ "WHERE m.id_client = '#{self.id}' "
204
+
205
+ q += "AND m.product_code = '#{product_code}' " if !product_code.nil?
206
+
207
+ q +=
208
+ "AND create_time >= '#{from_time.to_sql}' " +
209
+ "AND create_time <= '#{to_time.to_sql}' " +
210
+ "GROUP BY " +
211
+ " m.id_client, " +
212
+ " YEAR(m.create_time), " +
213
+ " MONTH(m.create_time), " +
214
+ " DAY(m.create_time), " +
215
+ " YEAR(m.expiration_time), " +
216
+ " MONTH(m.expiration_time), " +
217
+ " DAY(m.expiration_time), " +
218
+ " m.type, " +
219
+ " m.product_code, " +
220
+ " CAST(m.description AS VARCHAR(500)), " +
221
+ " CAST(m.expiration_description AS VARCHAR(500)) "
222
+
223
+ DB[q].all
172
224
  end
173
225
 
174
226
  #
@@ -56,7 +56,19 @@ module BlackStack
56
56
  raise "Unknown Invoice Status (#{status.to_s})"
57
57
  end
58
58
  end
59
-
59
+
60
+ #
61
+ def set_subscription(s)
62
+ self.subscr_id = s.subscr_id
63
+ self.save
64
+ # aplico la mismam modificacion a todas las factuas que le siguieron a esta
65
+ BlackStack::Invoice.where(:id_previous_invoice=>self.id).all { |j|
66
+ j.set_subscription(s)
67
+ DB.disconnect
68
+ GC.start
69
+ }
70
+ end
71
+
60
72
  #
61
73
  def deserve_trial?
62
74
  return self.disabled_for_trial_ssm == false || self.disabled_for_trial_ssm == nil
@@ -234,6 +246,11 @@ module BlackStack
234
246
  def canBePaid?
235
247
  self.status == nil || self.status == BlackStack::Invoice::STATUS_UNPAID
236
248
  end
249
+
250
+ # retorna true si el estado de la factura sea NULL o UNPAID
251
+ def canBeDeleted?
252
+ self.status == nil || self.status == BlackStack::Invoice::STATUS_UNPAID
253
+ end
237
254
 
238
255
  # actualiza el registro en la tabla invoice segun los parametros.
239
256
  # en este caso la factura se genera antes del pago.
@@ -286,6 +303,7 @@ module BlackStack
286
303
  end
287
304
  # marco la factura como pagada
288
305
  self.status = BlackStack::Invoice::STATUS_PAID
306
+ self.delete_time = nil
289
307
  self.save
290
308
  # expiracion de creditos de la factura anterior
291
309
  i = self.previous
@@ -313,19 +331,21 @@ module BlackStack
313
331
  # registro el pago
314
332
  BlackStack::Movement.new().parse(item, BlackStack::Movement::MOVEMENT_TYPE_ADD_PAYMENT, "Invoice Payment", payment_time, item.id).save()
315
333
  # agrego los bonos de este plan
316
- plan[:bonus_plans].each { |h|
317
- plan_bonus = BlackStack::InvoicingPaymentsProcessing.plan_descriptor(h[:item_number])
318
- raise "bonus plan not found" if plan_bonus.nil?
319
- bonus = BlackStack::InvoiceItem.new
320
- bonus.id = guid()
321
- bonus.id_invoice = self.id
322
- bonus.product_code = plan_bonus[:product_code]
323
- bonus.unit_price = 0
324
- bonus.units = plan_bonus[:credits]
325
- bonus.amount = 0
326
- bonus.item_number = plan_bonus[:item_number]
327
- BlackStack::Movement.new().parse(bonus, BlackStack::Movement::MOVEMENT_TYPE_ADD_BONUS, 'Payment Bonus', payment_time, item.id).save()
328
- }
334
+ if !plan[:bonus_plans].nil?
335
+ plan[:bonus_plans].each { |h|
336
+ plan_bonus = BlackStack::InvoicingPaymentsProcessing.plan_descriptor(h[:item_number])
337
+ raise "bonus plan not found" if plan_bonus.nil?
338
+ bonus = BlackStack::InvoiceItem.new
339
+ bonus.id = guid()
340
+ bonus.id_invoice = self.id
341
+ bonus.product_code = plan_bonus[:product_code]
342
+ bonus.unit_price = 0
343
+ bonus.units = plan_bonus[:credits] * item.number_of_packages # agrego los creditos del bono, multiplicado por la cantiad de paquetes
344
+ bonus.amount = 0
345
+ bonus.item_number = plan_bonus[:item_number]
346
+ BlackStack::Movement.new().parse(bonus, BlackStack::Movement::MOVEMENT_TYPE_ADD_BONUS, 'Payment Bonus', payment_time, item.id).save()
347
+ }
348
+ end # if !plan[:bonus_plans].nil?
329
349
  #
330
350
  DB.disconnect
331
351
  GC.start
@@ -371,62 +391,52 @@ module BlackStack
371
391
  end
372
392
  end
373
393
  end
374
-
394
+
375
395
  # configura la factura, segun el importe que pagara el cliente, la configuracion del plan en el descriptor h, y si el clietne merece un trial o no
376
- def create_item(item_number, n=1, validate_items_compatibility=true)
377
- #
378
- deserve_trial = self.deserve_trial?
379
-
380
- # busco el primer item de esta factura, si es que existe
381
- item0 = self.items.sort_by {|obj| obj.create_time}.first
382
-
383
- # numero de facturas previas a esta factura
384
- subs = BlackStack::PayPalSubscription.where(:subscr_id=>self.subscr_id).first
385
- nSubscriptionInvoices = 0 if subs.nil?
386
- nSubscriptionInvoices = subs.invoices.count if !subs.nil?
387
-
396
+ def create_item(item_number, n=1, validate_items_compatibility=true)
397
+ prev1 = self.previous
398
+ prev2 = prev1.nil? ? nil : prev1.previous
399
+
388
400
  # encuentro el descriptor del plan
389
401
  # el descriptor del plan tambien es necesario para la llamada a paypal_link
390
402
  h = self.client.plans.select { |j| j[:item_number].to_s == item_number.to_s }.first
391
403
 
392
404
  # mapeo variables
393
- c = self.client
394
405
  amount = 0.to_f
395
406
  unit_price = 0.to_f
396
407
  units = 0.to_i
397
-
398
- # decido si se trata de una suscripcion
399
- isSubscription = false
400
- isSubscription = true if h[:type] == "S"
401
-
408
+
402
409
  # le seteo la fecha de hoy
403
410
  self.billing_period_from = now()
404
-
405
- # si es una suscripcion, y
411
+ #puts
412
+ #puts
406
413
  # si el plan tiene un primer trial, y
407
- # es primer pago de esta suscripcion, entonces:
408
- # => se trata del primer pago por trial de esta suscripcion
409
- if (isSubscription && h[:trial_fee] != nil && deserve_trial)
414
+ # es la primer factura, entonces:
415
+ # => se trata del primer pago por trial
416
+ if h[:trial_fee] != nil && prev1.nil? && !self.disabled_for_trial_ssm
417
+ #puts 'a'
410
418
  units = h[:trial_credits].to_i
411
419
  unit_price = h[:trial_fee].to_f / h[:trial_credits].to_f
412
420
  billing_period_to = DB["SELECT DATEADD(#{h[:trial_period].to_s}, +#{h[:trial_units].to_s}, '#{self.billing_period_from.to_s}') AS [now]"].map(:now)[0].to_s
413
421
 
414
- # si es una suscripcion, y
415
422
  # si el plan tiene un segundo trial, y
416
- # es segundo pago de esta suscripcion, entonces:
417
- # => se trata del segundo pago por trial de esta suscripcion
418
- elsif (isSubscription && h[:trial2_fee] != nil && nSubscriptionInvoices == 1)
423
+ # es la segunda factura, entonces:
424
+ # => se trata del segundo pago por segundo trial
425
+ elsif h[:trial2_fee] != nil && !prev1.nil? && prev2.nil?
426
+ #puts 'b'
419
427
  units = h[:trial2_credits].to_i
420
428
  unit_price = h[:trial2_fee].to_f / h[:trial2_credits].to_f
421
429
  billing_period_to = DB["SELECT DATEADD(#{h[:trial2_period].to_s}, +#{h[:trial2_units].to_s}, '#{self.billing_period_from.to_s}') AS [now]"].map(:now)[0].to_s
422
430
 
423
431
  # si el plan tiene un fee, y
424
- elsif (isSubscription && h[:fee].to_f != nil)
432
+ elsif h[:fee].to_f != nil && h[:type] == BlackStack::InvoicingPaymentsProcessing::BasePlan::PAYMENT_SUBSCRIPTION
433
+ #puts 'c'
425
434
  units = n.to_i * h[:credits].to_i
426
435
  unit_price = h[:fee].to_f / h[:credits].to_f
427
436
  billing_period_to = DB["SELECT DATEADD(#{h[:period].to_s}, +#{h[:units].to_s}, '#{self.billing_period_from.to_s}') AS [now]"].map(:now)[0].to_s
428
437
 
429
- elsif (!isSubscription && h[:fee].to_f != nil)
438
+ elsif h[:fee].to_f != nil && h[:type] == BlackStack::InvoicingPaymentsProcessing::BasePlan::PAYMENT_PAY_AS_YOU_GO
439
+ #puts 'd'
430
440
  units = n.to_i * h[:credits].to_i
431
441
  unit_price = h[:fee].to_f / h[:credits].to_f
432
442
  billing_period_to = billing_period_from
@@ -435,7 +445,8 @@ module BlackStack
435
445
  raise "Plan is specified wrong"
436
446
 
437
447
  end
438
-
448
+
449
+
439
450
  #
440
451
  amount = units.to_f * unit_price.to_f
441
452
 
@@ -521,9 +532,9 @@ module BlackStack
521
532
  self.id_previous_invoice = i.id
522
533
  self.subscr_id = i.subscr_id
523
534
  self.disabled_for_add_remove_items = true
524
-
535
+
525
536
  i.items.each { |t|
526
- self.add_item(t.item_number)
537
+ self.add_item(t.item_number, t.number_of_packages)
527
538
  #
528
539
  DB.disconnect
529
540
  GC.start
@@ -657,6 +668,28 @@ module BlackStack
657
668
  DB.disconnect
658
669
  GC.start
659
670
  end # def setup_refund
660
-
671
+
672
+ def refund(amount)
673
+ c = self.client
674
+ # creo la factura por el reembolso
675
+ j = BlackStack::Invoice.new()
676
+ j.id = guid()
677
+ j.id_client = c.id
678
+ j.create_time = now()
679
+ j.disabled_for_trial_ssm = c.disabled_for_trial_ssm
680
+ j.id_buffer_paypal_notification = nil
681
+ j.status = BlackStack::Invoice::STATUS_REFUNDED
682
+ j.billing_period_from = self.billing_period_from
683
+ j.billing_period_to = self.billing_period_to
684
+ j.paypal_url = nil
685
+ j.disabled_for_add_remove_items = true
686
+ j.subscr_id = self.subscr_id
687
+ j.id_previous_invoice = self.id
688
+ j.save()
689
+
690
+ # parseo el reeembolso - creo el registro contable
691
+ j.setup_refund(amount, self.id)
692
+ end # refund
693
+
661
694
  end # class Invoice
662
695
  end # module BlackStack
@@ -7,5 +7,15 @@ module BlackStack
7
7
  BlackStack::InvoicingPaymentsProcessing::plan_descriptor(self.item_number)
8
8
  end
9
9
 
10
+ # Returns the number of plans ordered in this item
11
+ def number_of_packages()
12
+ plan = BlackStack::InvoicingPaymentsProcessing.plan_descriptor(self.item_number)
13
+ if self.amount.to_f == plan[:trial_fee].to_f || self.amount.to_f == plan[:trial2_fee].to_f
14
+ return 1.to_i
15
+ else
16
+ return (self.units.to_f / plan[:credits].to_f).to_i
17
+ end
18
+ end
19
+
10
20
  end # class LocalInvoiceItem
11
21
  end # module BlackStack
@@ -153,7 +153,7 @@ module BlackStack
153
153
  end
154
154
 
155
155
  # credits expiration
156
- def expire(registraton_time=nil)
156
+ def expire(registraton_time=nil, desc='Expiration Because Allocation is Renewed')
157
157
  credits_consumed = self.credits_consumed
158
158
  #
159
159
  self.expiration_start_time = now()
@@ -174,7 +174,7 @@ module BlackStack
174
174
  exp.create_time = registraton_time.nil? ? now() : registraton_time
175
175
  exp.type = BlackStack::Movement::MOVEMENT_TYPE_EXPIRATION
176
176
  exp.id_user_creator = self.id_user_creator
177
- exp.description = 'Expiration Because Allocation is Renewed'
177
+ exp.description = desc
178
178
  exp.paypal1_amount = 0
179
179
  exp.bonus_amount = 0
180
180
  exp.amount = amount_to_expire
@@ -116,7 +116,7 @@ module BlackStack
116
116
  DB[
117
117
  "SELECT DISTINCT i.id " +
118
118
  "FROM invoice i WITH (NOLOCK) " +
119
- "JOIN buffer_paypal_notification b WITH (NOLOCK) ON (b.id=i.id_buffer_paypal_notification AND b.subscr_id='#{self.subscr_id.to_s}') "
119
+ "WHERE i.subscr_id='#{self.subscr_id.to_s}' "
120
120
  ].all { |row|
121
121
  a << BlackStack::Invoice.where(:id=>row[:id]).first
122
122
  # release resources
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: invoicing_payments_processing
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.18
4
+ version: 1.1.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leandro Daniel Sardi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-01 00:00:00.000000000 Z
11
+ date: 2020-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: websocket