invoicing_payments_processing 1.1.63 → 1.1.64

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
  SHA1:
3
- metadata.gz: ff9dee57e2b7e6dc8635871fe89ec8dbe98278e8
4
- data.tar.gz: dc3a121367f28260594a13f3996adec7b0335df9
3
+ metadata.gz: 504ea9259de82ef1ffc339b33a7fca1a4273b6a9
4
+ data.tar.gz: be390eb676c4cd0eeb5398681e6a6d02d2bcd272
5
5
  SHA512:
6
- metadata.gz: 104338f6525e2c8b45a0b120cd6e5ac2ee71573b2c95f7885c6c6da11236ed25e89d766f8528ea19f6c92d89b0ce765b5f6eeb76579e69fc5507d33d6d6b9590
7
- data.tar.gz: 0a8d4411793c7dc01c02cd0e642487193d35eca8f22ea27985da375d5f63a1f43e866206b80ff0ea1e30c9bd25d18805c3a7c0d359aafa16fa9a75fa54a1bf66
6
+ metadata.gz: 49240d883710395e708b20b382f95eb3b9c1fc1c3a1f87abcfc2afb9cd6b0088c74fcc0413dd23213b07fbbdf10987681725b19f265f532e08b741f91cfc7997
7
+ data.tar.gz: 9d6a4fbbae677537d13699075debbebf4e5ffe54b2dba6fbc7b51c5f80c9dbb7ee6d2086c1e3d3e163a7d18a474e04e56b0bc3a51c62b6c000c66bee840a0322
@@ -6,7 +6,26 @@ module BlackStack
6
6
  class Client < Sequel::Model(:client)
7
7
  one_to_many :paypal_subscriptions, :class=>:'BlackStack::PayPalSubscription', :key=>:id_client
8
8
  one_to_many :customplans, :class=>:'BlackStack::CustomPlan', :key=>:id_client
9
- one_to_many :movements, :class=>:'BlackStack::Movement', :key=>:id_client
9
+
10
+ # This method replace the line:
11
+ # one_to_many :movements, :class=>:'BlackStack::Movement', :key=>:id_client
12
+ #
13
+ # Because when you have a large number of records in the table movement, for a client,
14
+ # then the call to this attribute client.movements can take too much time and generates
15
+ # a query timeout exception.
16
+ #
17
+ # The call to this method may take too much time, but ti won't raise a query timeout.
18
+ #
19
+ def movements
20
+ ret = []
21
+ BlackStack::Movement.where(:id_client=>self.id).each { |o|
22
+ ret << o
23
+ print '.'
24
+ GC.start
25
+ DB.disconnect
26
+ }
27
+ ret
28
+ end
10
29
 
11
30
  # how many minutes ago should have updated the table stat_balance with the amount and credits of this client, for each product.
12
31
  def stat_balance_delay_minutes
@@ -137,7 +156,7 @@ module BlackStack
137
156
  credits_paid = 0
138
157
 
139
158
  #total_credits = 0.to_f - BlackStack::Balance.new(self.id, product_code).credits.to_f
140
- #total_amount = 0.to_f - BlackStack::Balance.new(self.id, product_code).amount.to_f
159
+ #total_amount = 0.to_f - BlackStack::Balance.new(self.id, product_code).amount.to_f
141
160
 
142
161
  self.movements.select { |o|
143
162
  o.product_code.upcase == product_code.upcase
@@ -138,7 +138,9 @@ module BlackStack
138
138
  raise 'Movement must be either a payment or a bonus' if self.type != MOVEMENT_TYPE_ADD_PAYMENT && self.type != MOVEMENT_TYPE_ADD_BONUS
139
139
  #puts
140
140
  #puts "product_code:#{self.product_code}:."
141
+
141
142
  # itero los pagos y bonos hechos por este mismo producto, desde el primer dia hasta este movimiento.
143
+ =begin
142
144
  paid = 0
143
145
  self.client.movements.select { |o|
144
146
  (o.type == MOVEMENT_TYPE_ADD_PAYMENT || o.type == MOVEMENT_TYPE_ADD_BONUS) &&
@@ -149,14 +151,36 @@ module BlackStack
149
151
  paid += (0.to_f - o.credits.to_f)
150
152
  break if o.id.to_guid == self.id.to_guid
151
153
  }
154
+ =end
155
+ paid = 0 - DB[
156
+ "select ISNULL(SUM(ISNULL(m.credits,0)),0) AS n " +
157
+ "from movement m with (nolock) " +
158
+ "where isnull(m.type, #{BlackStack::Movement::MOVEMENT_TYPE_ADD_PAYMENT.to_s}) in (#{BlackStack::Movement::MOVEMENT_TYPE_ADD_PAYMENT.to_s}, #{BlackStack::Movement::MOVEMENT_TYPE_ADD_BONUS.to_s}) " +
159
+ "and m.id_client='#{self.client.id.to_guid}' " +
160
+ "and isnull(m.credits,0) < 0 " +
161
+ "and upper(isnull(m.product_code, '')) = '#{self.product_code.upcase}' " +
162
+ "and m.create_time < '#{registraton_time.to_time.strftime('%Y-%m-%d')}' "
163
+ ].first[:n]
152
164
  #puts "paid:#{paid.to_s}:."
165
+
166
+ =begin
153
167
  # calculo los credito para este producto, desde el primer dia; incluyendo cosumo, expiraciones, ajustes.
154
168
  consumed = self.client.movements.select { |o|
155
169
  o.credits.to_f > 0 &&
156
170
  o.product_code.upcase == self.product_code.upcase &&
157
171
  o.create_time.to_time < registraton_time.to_time
158
172
  }.inject(0) { |sum, o| sum.to_f + o.credits.to_f }.to_f
159
- #puts "consumed:#{consumed.to_s}:."
173
+ =end
174
+ consumed = DB[
175
+ "select ISNULL(SUM(ISNULL(m.credits,0)),0) AS n " +
176
+ "from movement m with (nolock) " +
177
+ "where m.id_client='#{self.client.id.to_guid}' " +
178
+ "and isnull(m.credits,0) > 0 " +
179
+ "and upper(isnull(m.product_code, '')) = '#{self.product_code.upcase}' " +
180
+ "and m.create_time < '#{registraton_time.to_time.strftime('%Y-%m-%d')}' "
181
+ ].first[:n]
182
+ #puts "consumed:#{consumed.to_s}:."
183
+
160
184
  # calculo los creditos de este movimiento que voy a cancelar
161
185
  credits = 0.to_f - self.credits.to_f
162
186
  #puts "credits:#{credits.to_s}:."
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.63
4
+ version: 1.1.64
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-12 00:00:00.000000000 Z
11
+ date: 2020-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: websocket