invoicing_payments_processing 1.1.20 → 1.1.32
Sign up to get free protection for your applications and to get access to all the features.
- 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
|