invoicing_payments_processing 1.1.54 → 1.1.60

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: ed522b59c5d199f4304b6f8f0a67d53402653d0e
4
- data.tar.gz: b0e657864ba63e02298a5b867ca7b01c2093c721
3
+ metadata.gz: aa3e73d17b05d75e69025d7364460ee6045a46cb
4
+ data.tar.gz: 2579bdc5324a9288e41fa92c9f2f84048f0c27f2
5
5
  SHA512:
6
- metadata.gz: 1de7badcf5dc5d5f8065564b57369417a8510086de4f16904cfdd886f83d33ffdc59f26574adf0b352cec4f7b0d402bd46f716a6523799be81df2a9294e9e4f5
7
- data.tar.gz: da28758cc4d633a73fb9abf63cfe743a3f5dc4da7c0a633a2831e3c6f433d7ee1df225f70487afe23a0cfc7ecdee10dd475884d1cd8b1c86416287804384212d
6
+ metadata.gz: e3138f3c9a4721c504eba4376923717cf50af2382204020150d10fc480c3a6e536e6c09d7d56457d999aac9bcecf4b42388f2b686d91b5eb502291a4cbfed494
7
+ data.tar.gz: e3ef838af52b803608c1349a3e31b682afefb846716570e7fe38ee8070f73f96aaeecbf665b7b8d8641ae405b41859d60ccd43d1624c585ed5d2f6baa50e9074
@@ -9,15 +9,22 @@ module BlackStack
9
9
  self.calculate()
10
10
  end
11
11
 
12
- def calculate()
13
- q =
14
- "select cast(sum(cast(amount as numeric(18,12))) as numeric(18,6)) as amount, sum(credits) as credits " +
15
- "from movement with (nolock index(IX_movement__id_client__product_code)) " +
16
- "where id_client='#{self.client.id}' " +
17
- "and product_code='#{self.product_code}' "
18
-
19
- q += "and create_time < '#{self.up_time.to_time.to_sql}' " if !self.up_time.nil?
20
-
12
+ def calculate(use_stat_balance=true)
13
+ if !self.up_time.nil? || !use_stat_balance
14
+ q =
15
+ "select cast(sum(cast(amount as numeric(18,12))) as numeric(18,6)) as amount, sum(credits) as credits " +
16
+ "from movement with (nolock) " +
17
+ "where id_client='#{self.client.id}' " +
18
+ "and product_code='#{self.product_code}' " +
19
+ "and create_time < '#{self.up_time.to_time.to_sql}' "
20
+ else
21
+ q =
22
+ "select cast(sum(cast(amount as numeric(18,12))) as numeric(18,6)) as amount, sum(credits) as credits " +
23
+ "from stat_balance x with (nolock) " +
24
+ "where x.id_client='#{self.client.id}' " +
25
+ "and x.product_code='#{self.product_code}' "
26
+ end
27
+
21
28
  row = DB[q].first
22
29
  self.amount = row[:amount].to_f
23
30
  self.credits = row[:credits].to_f
@@ -8,6 +8,48 @@ 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
54
  def consume(product_code, number_of_credits=1, description=nil)
13
55
  # create the consumtion
@@ -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
@@ -246,7 +235,7 @@ module BlackStack
246
235
  end
247
236
 
248
237
  # return url
249
- "#{BlackStack::InvoicingPaymentsProcessing::PAYPAL_ORDERS_URL}/cgi-bin/webscr?" + URI.encode_www_form(values)
238
+ "#{BlackStack::InvoicingPaymentsProcessing::paypal_orders_url}/cgi-bin/webscr?" + URI.encode_www_form(values)
250
239
  end
251
240
 
252
241
  # retorna true si el estado de la factura sea NULL o UNPAID
@@ -13,10 +13,19 @@ module BlackStack
13
13
 
14
14
  # static attributes
15
15
  @@paypal_business_email = "sardi.leandro.daniel@gmail.com"
16
+ @@paypal_orders_url = BlackStack::InvoicingPaymentsProcessing::PAYPAL_ORDERS_URL
17
+ @@paypal_ipn_listener = "#{BlackStack::Pampa::api_url.to_s}/api1.3/accounting/paypal/notify_new_invoice.json"
18
+
16
19
  @@products_descriptor = []
17
20
  @@plans_descriptor = []
18
-
21
+
19
22
  # getters & setters
23
+ def self.set_config(h)
24
+ @@paypal_business_email = h[:paypal_business_email]
25
+ @@paypal_orders_url = h[:paypal_orders_url]
26
+ @@paypal_ipn_listener = h[:paypal_ipn_listener]
27
+ end
28
+
20
29
  def self.set_paypal_business_email(email)
21
30
  @@paypal_business_email = email
22
31
  end # def self.set_paypal_business_email
@@ -25,10 +34,14 @@ module BlackStack
25
34
  @@paypal_business_email
26
35
  end # def self.set_paypal_business_email
27
36
 
28
- def self.paypal_ipn_listener()
29
- "#{BlackStack::Pampa::api_url.to_s}/api1.3/accounting/paypal/notify_new_invoice.json"
37
+ def self.paypal_orders_url()
38
+ @@paypal_orders_url
30
39
  end
31
40
 
41
+ def self.paypal_ipn_listener()
42
+ @@paypal_ipn_listener
43
+ end
44
+
32
45
 
33
46
  def self.set_products(h)
34
47
  @@products_descriptor = h
@@ -190,8 +190,10 @@ module BlackStack
190
190
  self.expiration_tries = self.expiration_tries.to_i + 1
191
191
  self.save
192
192
  #
193
- total_credits = 0.to_f - BlackStack::Balance.new(self.client.id, self.product_code, registraton_time).credits.to_f
194
- total_amount = 0.to_f - BlackStack::Balance.new(self.client.id, self.product_code, registraton_time).amount.to_f
193
+ balance = BlackStack::Balance.new(self.client.id, self.product_code, registraton_time)
194
+ balance.calculate(false)
195
+ total_credits = 0.to_f - balance.credits.to_f
196
+ total_amount = 0.to_f - balance.amount.to_f
195
197
  #
196
198
  credits = 0.to_i - self.credits.to_i
197
199
  #
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.54
4
+ version: 1.1.60
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-01 00:00:00.000000000 Z
11
+ date: 2020-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: websocket