invoicing_payments_processing 1.1.20 → 1.1.32
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/lib/bufferpaypalnotification.rb +7 -16
- data/lib/extend_client_by_invoicing_payments_processing.rb +58 -6
- data/lib/invoice.rb +92 -49
- data/lib/invoiceitem.rb +10 -0
- data/lib/paypalsubscription.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 767d1959445a933872a088246a96ce835a7aa1c1
|
4
|
+
data.tar.gz: a6d3dc28e802706eb1360daf4c5c16940e6a49c7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ce9bd86e5bc541e6887b48c86c1086b854b0640a3e106881241a4285d0b660251c6987d9157ad803b60b865924fa65417a876f789bba45cb6475f190831011b
|
7
|
+
data.tar.gz: 06758180d0eaa6004a541fe5eb89a13b9590357acdbe1ccb45b3d198f9cfb097002ff664420dca02594672eb53133fa4d84746d6879769e83f6d0be9085d211e
|
@@ -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
|
-
|
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
|
-
|
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
|
-
|
170
|
-
|
171
|
-
|
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
|
#
|
data/lib/invoice.rb
CHANGED
@@ -10,10 +10,16 @@ module BlackStack
|
|
10
10
|
|
11
11
|
many_to_one :buffer_paypal_notification, :class=>:'BlackStack::BufferPayPalNotification', :key=>:id_buffer_paypal_notification
|
12
12
|
many_to_one :client, :class=>:'BlackStack::Client', :key=>:id_client
|
13
|
-
many_to_one :paypal_subscription, :class=>:'BlackStack::PayPalSubscription', :key=>:id_paypal_subscription
|
13
|
+
#many_to_one :paypal_subscription, :class=>:'BlackStack::PayPalSubscription', :key=>:id_paypal_subscription
|
14
14
|
many_to_one :previous, :class=>:'BlackStack::Invoice', :key=>:id_previous_invoice
|
15
15
|
one_to_many :items, :class=>:'BlackStack::InvoiceItem', :key=>:id_invoice
|
16
16
|
|
17
|
+
def paypal_subscription
|
18
|
+
return nil if self.subscr_id.nil?
|
19
|
+
return nil if self.subscr_id.to_s.size == 0
|
20
|
+
return BlackStack::PayPalSubscription.where(:code=>self.subscr_id.to_s).first
|
21
|
+
end
|
22
|
+
|
17
23
|
# compara 2 planes, y retorna TRUE si ambos pueden coexistir en una misma facutra, con un mismo enlace de PayPal
|
18
24
|
def self.compatibility?(h, i)
|
19
25
|
return false if h[:type]!=i[:type]
|
@@ -56,7 +62,19 @@ module BlackStack
|
|
56
62
|
raise "Unknown Invoice Status (#{status.to_s})"
|
57
63
|
end
|
58
64
|
end
|
59
|
-
|
65
|
+
|
66
|
+
#
|
67
|
+
def set_subscription(s)
|
68
|
+
self.subscr_id = s.subscr_id
|
69
|
+
self.save
|
70
|
+
# aplico la mismam modificacion a todas las factuas que le siguieron a esta
|
71
|
+
BlackStack::Invoice.where(:id_previous_invoice=>self.id).all { |j|
|
72
|
+
j.set_subscription(s)
|
73
|
+
DB.disconnect
|
74
|
+
GC.start
|
75
|
+
}
|
76
|
+
end
|
77
|
+
|
60
78
|
#
|
61
79
|
def deserve_trial?
|
62
80
|
return self.disabled_for_trial_ssm == false || self.disabled_for_trial_ssm == nil
|
@@ -234,6 +252,15 @@ module BlackStack
|
|
234
252
|
def canBePaid?
|
235
253
|
self.status == nil || self.status == BlackStack::Invoice::STATUS_UNPAID
|
236
254
|
end
|
255
|
+
|
256
|
+
# retorna true si el estado de la factura sea NULL o UNPAID
|
257
|
+
def canBeDeleted?
|
258
|
+
if self.paypal_subscription.nil?
|
259
|
+
return self.status == nil || self.status == BlackStack::Invoice::STATUS_UNPAID
|
260
|
+
else # !self.paypal_subscription.nil?
|
261
|
+
return (self.status == nil || self.status == BlackStack::Invoice::STATUS_UNPAID) && !self.paypal_subscription.active
|
262
|
+
end # if self.paypal_subscription.nil?
|
263
|
+
end
|
237
264
|
|
238
265
|
# actualiza el registro en la tabla invoice segun los parametros.
|
239
266
|
# en este caso la factura se genera antes del pago.
|
@@ -286,6 +313,7 @@ module BlackStack
|
|
286
313
|
end
|
287
314
|
# marco la factura como pagada
|
288
315
|
self.status = BlackStack::Invoice::STATUS_PAID
|
316
|
+
self.delete_time = nil
|
289
317
|
self.save
|
290
318
|
# expiracion de creditos de la factura anterior
|
291
319
|
i = self.previous
|
@@ -313,19 +341,21 @@ module BlackStack
|
|
313
341
|
# registro el pago
|
314
342
|
BlackStack::Movement.new().parse(item, BlackStack::Movement::MOVEMENT_TYPE_ADD_PAYMENT, "Invoice Payment", payment_time, item.id).save()
|
315
343
|
# agrego los bonos de este plan
|
316
|
-
plan[:bonus_plans].
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
344
|
+
if !plan[:bonus_plans].nil?
|
345
|
+
plan[:bonus_plans].each { |h|
|
346
|
+
plan_bonus = BlackStack::InvoicingPaymentsProcessing.plan_descriptor(h[:item_number])
|
347
|
+
raise "bonus plan not found" if plan_bonus.nil?
|
348
|
+
bonus = BlackStack::InvoiceItem.new
|
349
|
+
bonus.id = guid()
|
350
|
+
bonus.id_invoice = self.id
|
351
|
+
bonus.product_code = plan_bonus[:product_code]
|
352
|
+
bonus.unit_price = 0
|
353
|
+
bonus.units = plan_bonus[:credits] * item.number_of_packages # agrego los creditos del bono, multiplicado por la cantiad de paquetes
|
354
|
+
bonus.amount = 0
|
355
|
+
bonus.item_number = plan_bonus[:item_number]
|
356
|
+
BlackStack::Movement.new().parse(bonus, BlackStack::Movement::MOVEMENT_TYPE_ADD_BONUS, 'Payment Bonus', payment_time, item.id).save()
|
357
|
+
}
|
358
|
+
end # if !plan[:bonus_plans].nil?
|
329
359
|
#
|
330
360
|
DB.disconnect
|
331
361
|
GC.start
|
@@ -371,62 +401,52 @@ module BlackStack
|
|
371
401
|
end
|
372
402
|
end
|
373
403
|
end
|
374
|
-
|
404
|
+
|
375
405
|
# 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
|
-
|
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
|
-
|
406
|
+
def create_item(item_number, n=1, validate_items_compatibility=true)
|
407
|
+
prev1 = self.previous
|
408
|
+
prev2 = prev1.nil? ? nil : prev1.previous
|
409
|
+
|
388
410
|
# encuentro el descriptor del plan
|
389
411
|
# el descriptor del plan tambien es necesario para la llamada a paypal_link
|
390
412
|
h = self.client.plans.select { |j| j[:item_number].to_s == item_number.to_s }.first
|
391
413
|
|
392
414
|
# mapeo variables
|
393
|
-
c = self.client
|
394
415
|
amount = 0.to_f
|
395
416
|
unit_price = 0.to_f
|
396
417
|
units = 0.to_i
|
397
|
-
|
398
|
-
# decido si se trata de una suscripcion
|
399
|
-
isSubscription = false
|
400
|
-
isSubscription = true if h[:type] == "S"
|
401
|
-
|
418
|
+
|
402
419
|
# le seteo la fecha de hoy
|
403
420
|
self.billing_period_from = now()
|
404
|
-
|
405
|
-
|
421
|
+
#puts
|
422
|
+
#puts
|
406
423
|
# si el plan tiene un primer trial, y
|
407
|
-
# es primer
|
408
|
-
# => se trata del primer pago por trial
|
409
|
-
if
|
424
|
+
# es la primer factura, entonces:
|
425
|
+
# => se trata del primer pago por trial
|
426
|
+
if h[:trial_fee] != nil && prev1.nil? && !self.disabled_for_trial_ssm
|
427
|
+
#puts 'a'
|
410
428
|
units = h[:trial_credits].to_i
|
411
429
|
unit_price = h[:trial_fee].to_f / h[:trial_credits].to_f
|
412
430
|
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
431
|
|
414
|
-
# si es una suscripcion, y
|
415
432
|
# si el plan tiene un segundo trial, y
|
416
|
-
# es
|
417
|
-
# => se trata del segundo pago por trial
|
418
|
-
elsif
|
433
|
+
# es la segunda factura, entonces:
|
434
|
+
# => se trata del segundo pago por segundo trial
|
435
|
+
elsif h[:trial2_fee] != nil && !prev1.nil? && prev2.nil?
|
436
|
+
#puts 'b'
|
419
437
|
units = h[:trial2_credits].to_i
|
420
438
|
unit_price = h[:trial2_fee].to_f / h[:trial2_credits].to_f
|
421
439
|
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
440
|
|
423
441
|
# si el plan tiene un fee, y
|
424
|
-
elsif
|
442
|
+
elsif h[:fee].to_f != nil && h[:type] == BlackStack::InvoicingPaymentsProcessing::BasePlan::PAYMENT_SUBSCRIPTION
|
443
|
+
#puts 'c'
|
425
444
|
units = n.to_i * h[:credits].to_i
|
426
445
|
unit_price = h[:fee].to_f / h[:credits].to_f
|
427
446
|
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
447
|
|
429
|
-
elsif
|
448
|
+
elsif h[:fee].to_f != nil && h[:type] == BlackStack::InvoicingPaymentsProcessing::BasePlan::PAYMENT_PAY_AS_YOU_GO
|
449
|
+
#puts 'd'
|
430
450
|
units = n.to_i * h[:credits].to_i
|
431
451
|
unit_price = h[:fee].to_f / h[:credits].to_f
|
432
452
|
billing_period_to = billing_period_from
|
@@ -435,7 +455,8 @@ module BlackStack
|
|
435
455
|
raise "Plan is specified wrong"
|
436
456
|
|
437
457
|
end
|
438
|
-
|
458
|
+
|
459
|
+
|
439
460
|
#
|
440
461
|
amount = units.to_f * unit_price.to_f
|
441
462
|
|
@@ -521,9 +542,9 @@ module BlackStack
|
|
521
542
|
self.id_previous_invoice = i.id
|
522
543
|
self.subscr_id = i.subscr_id
|
523
544
|
self.disabled_for_add_remove_items = true
|
524
|
-
|
545
|
+
|
525
546
|
i.items.each { |t|
|
526
|
-
self.add_item(t.item_number)
|
547
|
+
self.add_item(t.item_number, t.number_of_packages)
|
527
548
|
#
|
528
549
|
DB.disconnect
|
529
550
|
GC.start
|
@@ -657,6 +678,28 @@ module BlackStack
|
|
657
678
|
DB.disconnect
|
658
679
|
GC.start
|
659
680
|
end # def setup_refund
|
660
|
-
|
681
|
+
|
682
|
+
def refund(amount)
|
683
|
+
c = self.client
|
684
|
+
# creo la factura por el reembolso
|
685
|
+
j = BlackStack::Invoice.new()
|
686
|
+
j.id = guid()
|
687
|
+
j.id_client = c.id
|
688
|
+
j.create_time = now()
|
689
|
+
j.disabled_for_trial_ssm = c.disabled_for_trial_ssm
|
690
|
+
j.id_buffer_paypal_notification = nil
|
691
|
+
j.status = BlackStack::Invoice::STATUS_REFUNDED
|
692
|
+
j.billing_period_from = self.billing_period_from
|
693
|
+
j.billing_period_to = self.billing_period_to
|
694
|
+
j.paypal_url = nil
|
695
|
+
j.disabled_for_add_remove_items = true
|
696
|
+
j.subscr_id = self.subscr_id
|
697
|
+
j.id_previous_invoice = self.id
|
698
|
+
j.save()
|
699
|
+
|
700
|
+
# parseo el reeembolso - creo el registro contable
|
701
|
+
j.setup_refund(amount, self.id)
|
702
|
+
end # refund
|
703
|
+
|
661
704
|
end # class Invoice
|
662
705
|
end # module BlackStack
|
data/lib/invoiceitem.rb
CHANGED
@@ -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
|
data/lib/paypalsubscription.rb
CHANGED
@@ -116,7 +116,7 @@ module BlackStack
|
|
116
116
|
DB[
|
117
117
|
"SELECT DISTINCT i.id " +
|
118
118
|
"FROM invoice i WITH (NOLOCK) " +
|
119
|
-
"
|
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.
|
4
|
+
version: 1.1.32
|
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-
|
11
|
+
date: 2020-10-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: websocket
|