invoicing_payments_processing 1.1.58 → 1.1.63
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/balance.rb +4 -4
- data/lib/extend_client_by_invoicing_payments_processing.rb +46 -2
- data/lib/invoice.rb +1 -12
- data/lib/movement.rb +29 -6
- 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: ff9dee57e2b7e6dc8635871fe89ec8dbe98278e8
|
4
|
+
data.tar.gz: dc3a121367f28260594a13f3996adec7b0335df9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 104338f6525e2c8b45a0b120cd6e5ac2ee71573b2c95f7885c6c6da11236ed25e89d766f8528ea19f6c92d89b0ce765b5f6eeb76579e69fc5507d33d6d6b9590
|
7
|
+
data.tar.gz: 0a8d4411793c7dc01c02cd0e642487193d35eca8f22ea27985da375d5f63a1f43e866206b80ff0ea1e30c9bd25d18805c3a7c0d359aafa16fa9a75fa54a1bf66
|
data/lib/balance.rb
CHANGED
@@ -9,14 +9,14 @@ module BlackStack
|
|
9
9
|
self.calculate()
|
10
10
|
end
|
11
11
|
|
12
|
-
def calculate()
|
13
|
-
if !self.up_time.nil?
|
12
|
+
def calculate(use_stat_balance=true)
|
13
|
+
if !self.up_time.nil? || !use_stat_balance
|
14
14
|
q =
|
15
15
|
"select cast(sum(cast(amount as numeric(18,12))) as numeric(18,6)) as amount, sum(credits) as credits " +
|
16
16
|
"from movement with (nolock) " +
|
17
17
|
"where id_client='#{self.client.id}' " +
|
18
18
|
"and product_code='#{self.product_code}' " +
|
19
|
-
"and create_time
|
19
|
+
"and create_time <= '#{self.up_time.to_time.to_sql}' "
|
20
20
|
else
|
21
21
|
q =
|
22
22
|
"select cast(sum(cast(amount as numeric(18,12))) as numeric(18,6)) as amount, sum(credits) as credits " +
|
@@ -24,7 +24,7 @@ module BlackStack
|
|
24
24
|
"where x.id_client='#{self.client.id}' " +
|
25
25
|
"and x.product_code='#{self.product_code}' "
|
26
26
|
end
|
27
|
-
|
27
|
+
#puts "Balance.calculate:q:#{q}:."
|
28
28
|
row = DB[q].first
|
29
29
|
self.amount = row[:amount].to_f
|
30
30
|
self.credits = row[:credits].to_f
|
@@ -8,8 +8,52 @@ module BlackStack
|
|
8
8
|
one_to_many :customplans, :class=>:'BlackStack::CustomPlan', :key=>:id_client
|
9
9
|
one_to_many :movements, :class=>:'BlackStack::Movement', :key=>:id_client
|
10
10
|
|
11
|
+
# how many minutes ago should have updated the table stat_balance with the amount and credits of this client, for each product.
|
12
|
+
def stat_balance_delay_minutes
|
13
|
+
row = DB[
|
14
|
+
"SELECT TOP 1 m.id " +
|
15
|
+
"FROM client c WITH (NOLOCK) " +
|
16
|
+
"JOIN movement m WITH (NOLOCK INDEX(IX_movement__id_client__create_time_desc)) ON ( c.id=m.id_client AND m.create_time > ISNULL(c.last_stat_balance_update_time, '1900-01-01') ) " +
|
17
|
+
"WHERE c.id = '#{self.id}' " +
|
18
|
+
"ORDER BY m.create_time DESC "
|
19
|
+
].first
|
20
|
+
|
21
|
+
if row.nil?
|
22
|
+
return 0
|
23
|
+
else
|
24
|
+
return DB["SELECT DATEDIFF(MI, m.create_time, GETDATE()) AS n FROM movement m WITH (NOLOCK) WHERE m.id='#{row[:id]}'"].first[:n]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# update the table stat_balance with the amount and credits of this client, for each product.
|
29
|
+
def update_stat_balance(product_code=nil)
|
30
|
+
c = self
|
31
|
+
product_descriptors = BlackStack::InvoicingPaymentsProcessing::products_descriptor.clone
|
32
|
+
product_descriptors.select! { |hprod| hprod[:code] == product_code } if !product_code.nil?
|
33
|
+
product_descriptors.each { |hprod|
|
34
|
+
row = DB[
|
35
|
+
"select isnull(sum(isnull(m.credits,0)),0) as credits, isnull(sum(isnull(m.amount,0)),0) as amount " +
|
36
|
+
# "from movement m with (nolock index(IX_movement__id_client__product_code)) " +
|
37
|
+
"from movement m with (nolock) " +
|
38
|
+
"where m.id_client='#{c.id}' " +
|
39
|
+
"and m.product_code='#{hprod[:code]}' "
|
40
|
+
].first
|
41
|
+
credits = row[:credits]
|
42
|
+
amount = row[:amount]
|
43
|
+
row = DB["SELECT * FROM stat_balance WHERE id_client='#{c.id}' AND product_code='#{hprod[:code]}'"].first
|
44
|
+
if row.nil?
|
45
|
+
DB.execute("INSERT INTO stat_balance (id_client, product_code, amount, credits) VALUES ('#{c.id}', '#{hprod[:code]}', #{amount.to_s}, #{credits.to_s})")
|
46
|
+
else
|
47
|
+
DB.execute("UPDATE stat_balance SET amount=#{amount.to_s}, credits=#{credits.to_s} WHERE id_client='#{c.id}' AND product_code='#{hprod[:code]}'")
|
48
|
+
end
|
49
|
+
DB.execute("UPDATE client SET last_stat_balance_update_time=GETDATE() WHERE [id]='#{c.id}'")
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
11
53
|
# crea/actualiza un registro en la tabla movment, reduciendo la cantidad de creditos y saldo que tiene el cliente, para el producto indicado en product_code.
|
12
|
-
def consume(product_code, number_of_credits=1, description=nil)
|
54
|
+
def consume(product_code, number_of_credits=1, description=nil, datetime=nil)
|
55
|
+
dt = datetime.nil? ? now() : datetime.to_time.to_sql
|
56
|
+
|
13
57
|
# create the consumtion
|
14
58
|
total_credits = 0.to_f - BlackStack::Balance.new(self.id, product_code).credits.to_f
|
15
59
|
total_amount = 0.to_f - BlackStack::Balance.new(self.id, product_code).amount.to_f
|
@@ -18,7 +62,7 @@ module BlackStack
|
|
18
62
|
cons = BlackStack::Movement.new
|
19
63
|
cons.id = guid()
|
20
64
|
cons.id_client = self.id
|
21
|
-
cons.create_time =
|
65
|
+
cons.create_time = dt
|
22
66
|
cons.type = BlackStack::Movement::MOVEMENT_TYPE_CANCELATION
|
23
67
|
cons.description = description.nil? ? 'Consumption' : description
|
24
68
|
cons.paypal1_amount = 0
|
data/lib/invoice.rb
CHANGED
@@ -85,18 +85,7 @@ module BlackStack
|
|
85
85
|
def allowedToAddRemoveItems?
|
86
86
|
return (self.status == STATUS_UNPAID || self.status == nil) && (self.disabled_for_add_remove_items == false || self.disabled_for_add_remove_items == nil)
|
87
87
|
end
|
88
|
-
|
89
|
-
# envia un email transaccional con informacion de facturacion, y pasos a seguir despues del pago
|
90
|
-
def notificationSubject()
|
91
|
-
"We Received Your Payment"
|
92
|
-
end
|
93
|
-
|
94
|
-
#
|
95
|
-
def notificationBody()
|
96
|
-
"<p>We received your payment for a total of $#{("%.2f" % self.total()).to_s}.</p>" +
|
97
|
-
"<p>You can find your invoice <a href='#{CS_HOME_PAGE}/member/invoice?iid=#{self.id.to_guid}'><b>here</b></a></p>"
|
98
|
-
end
|
99
|
-
|
88
|
+
|
100
89
|
#
|
101
90
|
def number()
|
102
91
|
self.id.to_guid
|
data/lib/movement.rb
CHANGED
@@ -121,7 +121,19 @@ module BlackStack
|
|
121
121
|
|
122
122
|
# Returns the number of credits assigned in the movement that have been consumed.
|
123
123
|
# The movment must be a payment or a bonus
|
124
|
-
|
124
|
+
#
|
125
|
+
# registraton_time: consider only movements before this time. If it is nil, this method will consider all the movements.
|
126
|
+
#
|
127
|
+
def credits_consumed(registraton_time=nil)
|
128
|
+
# le agrego 365 dias a la fecha actual, para abarcar todas las fechas ocurridas hasta hoy seguro
|
129
|
+
if registraton_time.nil?
|
130
|
+
registraton_time = (Time.now() + 365*24*60*60)
|
131
|
+
else
|
132
|
+
registraton_time = registraton_time.to_time if registraton_time.class != Time
|
133
|
+
end
|
134
|
+
# move time to the first second of the next day.
|
135
|
+
# example: '2020-11-12 15:49:43 -0300' will be converted to '2020-11-13 00:00:00 -0300'
|
136
|
+
registraton_time = (Date.strptime(registraton_time.strftime("%Y-%m-%d"), "%Y-%m-%d").to_time + 24*60*60)
|
125
137
|
# the movment must be a payment or a bonus
|
126
138
|
raise 'Movement must be either a payment or a bonus' if self.type != MOVEMENT_TYPE_ADD_PAYMENT && self.type != MOVEMENT_TYPE_ADD_BONUS
|
127
139
|
#puts
|
@@ -131,7 +143,8 @@ module BlackStack
|
|
131
143
|
self.client.movements.select { |o|
|
132
144
|
(o.type == MOVEMENT_TYPE_ADD_PAYMENT || o.type == MOVEMENT_TYPE_ADD_BONUS) &&
|
133
145
|
o.credits.to_f < 0 &&
|
134
|
-
o.product_code.upcase == self.product_code.upcase
|
146
|
+
o.product_code.upcase == self.product_code.upcase &&
|
147
|
+
o.create_time.to_time < registraton_time.to_time
|
135
148
|
}.sort_by { |o| o.create_time }.each { |o|
|
136
149
|
paid += (0.to_f - o.credits.to_f)
|
137
150
|
break if o.id.to_guid == self.id.to_guid
|
@@ -140,7 +153,8 @@ module BlackStack
|
|
140
153
|
# calculo los credito para este producto, desde el primer dia; incluyendo cosumo, expiraciones, ajustes.
|
141
154
|
consumed = self.client.movements.select { |o|
|
142
155
|
o.credits.to_f > 0 &&
|
143
|
-
o.product_code.upcase == self.product_code.upcase
|
156
|
+
o.product_code.upcase == self.product_code.upcase &&
|
157
|
+
o.create_time.to_time < registraton_time.to_time
|
144
158
|
}.inject(0) { |sum, o| sum.to_f + o.credits.to_f }.to_f
|
145
159
|
#puts "consumed:#{consumed.to_s}:."
|
146
160
|
# calculo los creditos de este movimiento que voy a cancelar
|
@@ -184,19 +198,28 @@ module BlackStack
|
|
184
198
|
|
185
199
|
# credits expiration
|
186
200
|
def expire(registraton_time=nil, desc='Expiration Because Allocation is Renewed')
|
187
|
-
|
201
|
+
#puts
|
202
|
+
#puts "registraton_time:#{registraton_time.to_s}:."
|
203
|
+
credits_consumed = self.credits_consumed(registraton_time)
|
204
|
+
#puts "credits_consumed:#{credits_consumed.to_s}:."
|
188
205
|
#
|
189
206
|
self.expiration_start_time = now()
|
190
207
|
self.expiration_tries = self.expiration_tries.to_i + 1
|
191
208
|
self.save
|
192
209
|
#
|
193
|
-
|
194
|
-
|
210
|
+
balance = BlackStack::Balance.new(self.client.id, self.product_code, registraton_time)
|
211
|
+
balance.calculate(false)
|
212
|
+
#puts "balance.credits.to_s:#{balance.credits.to_s}:."
|
213
|
+
#puts "balance.amount.to_s:#{balance.amount.to_s}:."
|
214
|
+
total_credits = 0.to_f - balance.credits.to_f
|
215
|
+
total_amount = 0.to_f - balance.amount.to_f
|
195
216
|
#
|
196
217
|
credits = 0.to_i - self.credits.to_i
|
197
218
|
#
|
198
219
|
credits_to_expire = credits - credits_consumed.to_i #- (0.to_f - self.credits.to_f)).to_i
|
199
220
|
amount_to_expire = total_credits.to_f == 0 ? 0 : credits_to_expire.to_f * ( total_amount.to_f / total_credits.to_f )
|
221
|
+
#puts "credits_to_expire.to_s:#{credits_to_expire.to_s}:."
|
222
|
+
#puts "amount_to_expire.to_s:#{amount_to_expire.to_s}:."
|
200
223
|
#
|
201
224
|
exp = BlackStack::Movement.new
|
202
225
|
exp.id = guid()
|
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.63
|
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-
|
11
|
+
date: 2020-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: websocket
|