b2b_center_api 0.0.2 → 0.0.3
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/.rubocop.yml +3 -0
- data/README.md +29 -1
- data/b2b_center_api.gemspec +1 -1
- data/lib/b2b_center_api/client.rb +12 -7
- data/lib/b2b_center_api/remote_auction.rb +18 -1
- data/lib/b2b_center_api/remote_market.rb +4 -1
- data/lib/b2b_center_api/remote_tender.rb +1 -0
- data/lib/b2b_center_api/version.rb +1 -1
- data/lib/b2b_center_api/web_service/type_cast.rb +2 -1
- data/lib/b2b_center_api/web_service/types.rb +3 -0
- data/lib/b2b_center_api/web_service/types/array_of_ids.rb +16 -0
- data/lib/b2b_center_api/web_service/types/auction_offer.rb +47 -0
- data/lib/b2b_center_api/web_service/types/auction_participant.rb +25 -5
- data/lib/b2b_center_api/web_service/types/b2b_file.rb +34 -0
- data/lib/b2b_center_api/web_service/types/base.rb +4 -0
- data/lib/b2b_center_api/web_service/types/firm_info.rb +54 -26
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c01d388e69d03c7577e73443eb76e61709674a0e
|
4
|
+
data.tar.gz: 1fe96e984765447f9d45f4db55fdd577d71f906f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8259a0e35dd79ecc5d02c6ecc4145a0cdca7c2da241bee710496a43584cfa43f8ef7215237bc609f37797c15565e25b43c3b87c8719979b8e2b838c0ed147210
|
7
|
+
data.tar.gz: 48108158f4e40b675df1e6ecaa91bbc9c4d4b250fb3a53a86e5cf068fb6f3fe9090856141e0ab24e83daa5c893aaf12af375950b5f85730dad4babf245489bbb
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
@@ -18,7 +18,35 @@ Or install it yourself as:
|
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
21
|
-
|
21
|
+
```ruby
|
22
|
+
require 'b2b_center_api'
|
23
|
+
|
24
|
+
B2bCenterApi::Settings.soap_configure(
|
25
|
+
wsdl: 'http://demo.b2b-center.ru/market/remote.html?wsdl',
|
26
|
+
proxy: 'http://login:pass@address:port',
|
27
|
+
env_namespace: 'SOAP-ENV',
|
28
|
+
filters: [:password],
|
29
|
+
pretty_print_xml: true,
|
30
|
+
log: false
|
31
|
+
)
|
32
|
+
|
33
|
+
B2bCenterApi::Settings.auth_configure(
|
34
|
+
auth: { login: 'login', password: 'pass' }
|
35
|
+
)
|
36
|
+
|
37
|
+
b2b = B2bCenterApi::Client.new
|
38
|
+
|
39
|
+
ps = b2b.remote_auction.get_participants(18_501)
|
40
|
+
|
41
|
+
puts 'participants:'
|
42
|
+
puts ps
|
43
|
+
puts 'offers for first participant:'
|
44
|
+
puts ps[0].offers
|
45
|
+
```
|
46
|
+
|
47
|
+
## Documentation
|
48
|
+
|
49
|
+
http://www.rubydoc.info/gems/b2b_center_api
|
22
50
|
|
23
51
|
## Contributing
|
24
52
|
|
data/b2b_center_api.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ['archakov@gmail.com']
|
11
11
|
spec.description = %q{API for b2b-center.}
|
12
12
|
spec.summary = %q{B2B Center API}
|
13
|
-
spec.homepage = ''
|
13
|
+
spec.homepage = 'https://github.com/kodram/b2b_center_api'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($RS)
|
@@ -5,15 +5,20 @@ require 'b2b_center_api/remote_tender'
|
|
5
5
|
require 'savon'
|
6
6
|
|
7
7
|
module B2bCenterApi
|
8
|
-
#
|
8
|
+
# Client for API
|
9
9
|
class Client
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
# Методы класса RemoteAuction
|
11
|
+
# @return [RemoteAuction]
|
12
|
+
attr_accessor :remote_auction
|
13
|
+
# Методы класса RemoteMarket
|
14
|
+
# @return [RemoteMarket]
|
15
|
+
attr_accessor :remote_market
|
16
|
+
# Методы класса RemoteTender
|
17
|
+
# @return [RemoteTender]
|
18
|
+
attr_accessor :remote_tender
|
13
19
|
|
14
|
-
def initialize
|
15
|
-
|
16
|
-
@client = Savon.client(options)
|
20
|
+
def initialize
|
21
|
+
@client = Savon.client(Settings.soap_options)
|
17
22
|
@remote_auction = RemoteAuction.new(@client)
|
18
23
|
@remote_market = RemoteMarket.new(@client)
|
19
24
|
@remote_tender = RemoteTender.new(@client)
|
@@ -1,15 +1,32 @@
|
|
1
1
|
require 'b2b_center_api/web_service'
|
2
2
|
|
3
3
|
module B2bCenterApi
|
4
|
+
# Методы класса RemoteAuction
|
4
5
|
class RemoteAuction
|
5
6
|
def initialize(client)
|
6
7
|
@client = client
|
7
8
|
@client_web = WebService::RemoteAuction.new(client)
|
8
9
|
end
|
9
10
|
|
11
|
+
# Получить список участников
|
12
|
+
# @param auction_id [Integer] Номер аукциона/объявления
|
13
|
+
# @return [WebService::Types::AuctionParticipant[]]
|
10
14
|
def get_participants(auction_id)
|
11
15
|
response = @client_web.command :get_participants, auction_id: auction_id
|
12
|
-
WebService::Types::AuctionParticipant.from_response(response, @client)
|
16
|
+
WebService::Types::AuctionParticipant.from_response(response, @client, auction_id)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Получить предложение участника
|
20
|
+
# Метод возвращает информацию о предложении (альтернативном предложении) участника:
|
21
|
+
# последней ставке, имя файла с описанием предложения, информацию о том признан ли участник победителем.
|
22
|
+
# Возвращаемый методом файл доступен для скачивания из корневой FTP-папки организации.
|
23
|
+
# @param auction_id [Integer] Номер аукциона/объявления
|
24
|
+
# @param firm_id [Integer] ID организации (участник торговой процедуры)
|
25
|
+
# @param offer_num [Integer] = 0 — основное предложение = целое_число — альтернативное предложение №
|
26
|
+
# @return [WebService::Types::AuctionOffer]
|
27
|
+
def get_offer(auction_id, firm_id, offer_num)
|
28
|
+
response = @client_web.command :get_offer, auction_id: auction_id, firm_id: firm_id, offer_num: offer_num
|
29
|
+
WebService::Types::AuctionOffer.from_response(response, @client, auction_id, firm_id, offer_num)
|
13
30
|
end
|
14
31
|
end
|
15
32
|
end
|
@@ -8,9 +8,12 @@ module B2bCenterApi
|
|
8
8
|
@client_web = WebService::RemoteMarket.new(client)
|
9
9
|
end
|
10
10
|
|
11
|
+
# Получить информацию об организации
|
12
|
+
# @param firm_id [Integer] ID организации
|
13
|
+
# @return [WebService::Types::FirmInfo]
|
11
14
|
def get_firm_info(firm_id)
|
12
15
|
response = @client_web.command :get_firm_info, firm_id: firm_id
|
13
|
-
WebService::Types::FirmInfo.from_response(response, @client)
|
16
|
+
WebService::Types::FirmInfo.from_response(response, @client, firm_id)
|
14
17
|
end
|
15
18
|
end
|
16
19
|
end
|
@@ -9,7 +9,8 @@ module B2bCenterApi
|
|
9
9
|
return obj if obj.nil?
|
10
10
|
case obj_type
|
11
11
|
when :string then obj
|
12
|
-
when :integer then obj.
|
12
|
+
when :integer then obj.to_i
|
13
|
+
when :float then obj.to_f
|
13
14
|
when :date then Date.parse(obj)
|
14
15
|
when :time then Time.parse(obj)
|
15
16
|
when :boolean then to_boolean(obj)
|
@@ -1,2 +1,5 @@
|
|
1
1
|
require 'b2b_center_api/web_service/types/auction_participant'
|
2
2
|
require 'b2b_center_api/web_service/types/firm_info'
|
3
|
+
require 'b2b_center_api/web_service/types/auction_offer'
|
4
|
+
require 'b2b_center_api/web_service/types/b2b_file'
|
5
|
+
require 'b2b_center_api/web_service/types/array_of_ids'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'b2b_center_api/web_service/types/base'
|
2
|
+
|
3
|
+
module B2bCenterApi
|
4
|
+
module WebService
|
5
|
+
module Types
|
6
|
+
# Массив ID или других строк
|
7
|
+
class ArrayOfIds < Base
|
8
|
+
# @return [String[]]
|
9
|
+
def self.from_part_response(response)
|
10
|
+
return if response.nil?
|
11
|
+
to_array(response).map { |n| convert(n[:string], :string) }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'b2b_center_api/web_service/types/base'
|
2
|
+
|
3
|
+
module B2bCenterApi
|
4
|
+
module WebService
|
5
|
+
module Types
|
6
|
+
# Предложение
|
7
|
+
class AuctionOffer < Base
|
8
|
+
# @return [Integer] Номер аукциона/объявления
|
9
|
+
attr_accessor :auction_id
|
10
|
+
# @return [Integer] ID организации (участник торговой процедуры)
|
11
|
+
attr_accessor :firm_id
|
12
|
+
# @return [Integer] = 0 — основное предложение = целое_число — альтернативное предложение №
|
13
|
+
attr_accessor :offer_num
|
14
|
+
# @return [Float] Последняя ставка. Формат значения DECIMAL(15,2)
|
15
|
+
attr_accessor :final_price
|
16
|
+
# @return [Float] Последняя ставка без НДС. Формат значения DECIMAL(15,2)
|
17
|
+
attr_accessor :final_price_notax
|
18
|
+
# @return [Time] Дата последней ставки.
|
19
|
+
attr_accessor :final_bet_date
|
20
|
+
# @return [Boolean] 1 — победитель, 0 — не победитель. Формат значения INT(1)
|
21
|
+
attr_accessor :winner
|
22
|
+
# @return [Integer] Количество ставок
|
23
|
+
attr_accessor :bets
|
24
|
+
# Файлы предложения. Поле содержит список записей типа file, в случае если у текущего
|
25
|
+
# пользователя нет доступа к файлу, то поле file.name — не заполняется.
|
26
|
+
# @return [B2bCenterApi::WebService::Types::File[]]
|
27
|
+
attr_accessor :files
|
28
|
+
|
29
|
+
# @return [AuctionOffer]
|
30
|
+
def self.from_response(response, client, auction_id, firm_id, offer_num)
|
31
|
+
return if response.result.nil?
|
32
|
+
r = response.result
|
33
|
+
t = AuctionOffer.new
|
34
|
+
t.soap_client = client
|
35
|
+
t.final_price = convert(r[:final_price], :float)
|
36
|
+
t.final_price_notax = convert(r[:final_price_notax], :float)
|
37
|
+
t.final_bet_date = convert(r[:final_bet_date], :time)
|
38
|
+
t.winner = convert(r[:winner], :boolean)
|
39
|
+
t.bets = convert(r[:bets], :integer)
|
40
|
+
t.files = B2bFile.from_part_response(r[:files])
|
41
|
+
|
42
|
+
t
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -3,25 +3,45 @@ require 'b2b_center_api/web_service/types/base'
|
|
3
3
|
module B2bCenterApi
|
4
4
|
module WebService
|
5
5
|
module Types
|
6
|
+
# Участник аукциона
|
6
7
|
class AuctionParticipant < Base
|
7
|
-
|
8
|
+
# @return [Integer] Номер аукциона/объявления
|
9
|
+
attr_accessor :auction_id
|
10
|
+
# @return [String] ID организации участника, если имена участников доступны,
|
11
|
+
# либо строка вида "Participant N", где N — номер участника в списке участников, в противном случае.
|
12
|
+
attr_accessor :firm_id
|
13
|
+
# @return [Integer[]] Список отправленных заявок участником.
|
14
|
+
# Возможные значения:
|
15
|
+
# 0 — основное предложение
|
16
|
+
# целое_число — альтернативное предложение №
|
17
|
+
attr_accessor :offers_nums
|
8
18
|
|
9
|
-
|
19
|
+
# @return [Array] Массив {AuctionParticipant}
|
20
|
+
def self.from_response(response, client, auction_id)
|
21
|
+
return if response.result.nil?
|
10
22
|
r = response.result
|
11
|
-
mas = r[:participant].map do |p|
|
23
|
+
mas = to_array(r[:participant]).map do |p|
|
12
24
|
ap = AuctionParticipant.new
|
13
25
|
ap.soap_client = client
|
14
|
-
ap.
|
15
|
-
ap.
|
26
|
+
ap.auction_id = auction_id
|
27
|
+
ap.firm_id = convert(p[:firm_id], :string)
|
28
|
+
ap.offers_nums = ArrayOfIds.from_part_response(p[:offers_nums]).map(&:to_i)
|
16
29
|
ap
|
17
30
|
end
|
18
31
|
|
19
32
|
mas
|
20
33
|
end
|
21
34
|
|
35
|
+
# @return [FirmInfo] Информация об организации
|
22
36
|
def firm
|
37
|
+
return firm_id if firm_id.include? 'Participant'
|
23
38
|
remote_market.get_firm_info(firm_id)
|
24
39
|
end
|
40
|
+
|
41
|
+
# @return [AuctionOffer[]] Массив предложений
|
42
|
+
def offers
|
43
|
+
offers_nums.map { |offer_num| remote_auction.get_offer(auction_id, firm_id, offer_num) }
|
44
|
+
end
|
25
45
|
end
|
26
46
|
end
|
27
47
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'b2b_center_api/web_service/types/base'
|
2
|
+
|
3
|
+
module B2bCenterApi
|
4
|
+
module WebService
|
5
|
+
module Types
|
6
|
+
# Файл
|
7
|
+
class B2bFile < Base
|
8
|
+
# @return [String] Наименование файла. Формат значения VARCHAR(255)
|
9
|
+
attr_accessor :title
|
10
|
+
# @return [String] Описание файла
|
11
|
+
attr_accessor :description
|
12
|
+
# Имя файла, например zayavka.doc.
|
13
|
+
# Файл расположен в корневой папке пользователя (доступ по FTP).
|
14
|
+
# Если пользователь не имеет прав для скачивания файла, то поле отсутствует.
|
15
|
+
# Формат значения VARCHAR(255)
|
16
|
+
# @return [String]
|
17
|
+
attr_accessor :name
|
18
|
+
|
19
|
+
# @return [B2bFile[]]
|
20
|
+
def self.from_part_response(response)
|
21
|
+
return if response.nil?
|
22
|
+
files = to_array(response[:file]).map do |f|
|
23
|
+
file = B2bFile.new
|
24
|
+
file.title = convert(f[:title], :string)
|
25
|
+
file.description = convert(f[:description], :string)
|
26
|
+
file.name = convert(f[:name], :string)
|
27
|
+
file
|
28
|
+
end
|
29
|
+
files
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -3,36 +3,64 @@ require 'b2b_center_api/web_service/types/base'
|
|
3
3
|
module B2bCenterApi
|
4
4
|
module WebService
|
5
5
|
module Types
|
6
|
+
# Информация об организации
|
6
7
|
class FirmInfo < Base
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
8
|
+
# @return [Integer] ID организации
|
9
|
+
attr_accessor :firm_id
|
10
|
+
# @return [Time] Дата последнего изменения
|
11
|
+
attr_accessor :date_lastedit
|
12
|
+
# @return [String] Полное наименование организации. Формат значения VARCHAR(255)
|
13
|
+
attr_accessor :org_name
|
14
|
+
# @return [String] Краткое наименование организации. Формат значения VARCHAR(255)
|
15
|
+
attr_accessor :org_name_short
|
16
|
+
# @return [String] Код ОКПО. Формат значения VARCHAR (10)
|
17
|
+
attr_accessor :code_okpo
|
18
|
+
# @return [String] Название банка. Формат значения VARCHAR(255)
|
19
|
+
attr_accessor :bank_name
|
20
|
+
# @return [String] ИНН организации. Формат значения VARCHAR(30)
|
21
|
+
attr_accessor :bank_inn
|
22
|
+
# @return [String] ОГРН. Формат значения VARCHAR(15)
|
23
|
+
attr_accessor :ogrn
|
24
|
+
# @return [String] Кем выдан ОГРН. Формат значения VARCHAR(128)
|
25
|
+
attr_accessor :ogrn_given
|
26
|
+
# @return [Date] Дата выдачи ОГРН. Формат значения dd.mm.YYYY
|
27
|
+
attr_accessor :ogrn_date_given
|
28
|
+
# @return [String] КПП организации. Формат значения VARCHAR(12)
|
29
|
+
attr_accessor :bank_kpp
|
30
|
+
# @return [String] БИК. Формат значения VARCHAR(30)
|
31
|
+
attr_accessor :bank_bik
|
32
|
+
# @return [String] Расчетный счет. Формат значения VARCHAR(30)
|
33
|
+
attr_accessor :bank_r_account
|
34
|
+
# @return [String] Корреспондентский счет. Формат значения VARCHAR(30)
|
35
|
+
attr_accessor :bank_c_account
|
36
|
+
# @return [String] Комментарии к банковским реквизитам. Формат значения VARCHAR(255)
|
37
|
+
attr_accessor :bank_comments
|
38
|
+
# @return [String] Юридический адрес. Формат значения VARCHAR(255)
|
39
|
+
attr_accessor :jury_address
|
40
|
+
# @return [String] Почтовый адрес. Формат значения VARCHAR(255)
|
41
|
+
attr_accessor :post_address
|
42
|
+
# @return [String] Фактический адрес. Формат значения VARCHAR(255)
|
43
|
+
attr_accessor :fact_address
|
44
|
+
# @return [String] Адрес веб-сайта. Формат значения VARCHAR(255)
|
45
|
+
attr_accessor :site_url
|
46
|
+
# @return [String] Информация о сертификации продукции, работ и услуг
|
47
|
+
attr_accessor :certification
|
48
|
+
# @return [String] Регистрационные данные. Поле заполняется только для иностранных организаций.
|
49
|
+
attr_accessor :org_details
|
50
|
+
# @return [String] Банковские реквизиты. Поле заполняется только для иностранных организаций.
|
51
|
+
attr_accessor :bank_details
|
52
|
+
# @return [Integer] Код страны. Пример: код России = 643
|
53
|
+
attr_accessor :country
|
54
|
+
# @return [Boolean] Соответствует ли участник критериям СМП (среднего или малого предпринимательства)
|
55
|
+
attr_accessor :is_smb
|
31
56
|
|
32
|
-
|
57
|
+
# @return [FirmInfo]
|
58
|
+
def self.from_response(response, client, firm_id)
|
59
|
+
return if response.result.nil?
|
33
60
|
r = response.result
|
34
61
|
fi = FirmInfo.new
|
35
62
|
fi.soap_client = client
|
63
|
+
fi.firm_id = firm_id
|
36
64
|
fi.date_lastedit = convert(r[:date_lastedit], :time)
|
37
65
|
fi.org_name = convert(r[:org_name], :string)
|
38
66
|
fi.org_name_short = convert(r[:org_name_short], :string)
|
@@ -41,7 +69,7 @@ module B2bCenterApi
|
|
41
69
|
fi.bank_inn = convert(r[:bank_inn], :string)
|
42
70
|
fi.ogrn = convert(r[:ogrn], :string)
|
43
71
|
fi.ogrn_given = convert(r[:ogrn_given], :string)
|
44
|
-
fi.ogrn_date_given = convert(r[:ogrn_date_given], :
|
72
|
+
fi.ogrn_date_given = convert(r[:ogrn_date_given], :date)
|
45
73
|
fi.bank_kpp = convert(r[:bank_kpp], :string)
|
46
74
|
fi.bank_bik = convert(r[:bank_bik], :string)
|
47
75
|
fi.bank_r_account = convert(r[:bank_r_account], :string)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: b2b_center_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Archakov Aleksandr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -95,13 +95,16 @@ files:
|
|
95
95
|
- lib/b2b_center_api/web_service/response.rb
|
96
96
|
- lib/b2b_center_api/web_service/type_cast.rb
|
97
97
|
- lib/b2b_center_api/web_service/types.rb
|
98
|
+
- lib/b2b_center_api/web_service/types/array_of_ids.rb
|
99
|
+
- lib/b2b_center_api/web_service/types/auction_offer.rb
|
98
100
|
- lib/b2b_center_api/web_service/types/auction_participant.rb
|
101
|
+
- lib/b2b_center_api/web_service/types/b2b_file.rb
|
99
102
|
- lib/b2b_center_api/web_service/types/base.rb
|
100
103
|
- lib/b2b_center_api/web_service/types/firm_info.rb
|
101
104
|
- spec/b2b_center_api_spec.rb
|
102
105
|
- spec/spec_helper.rb
|
103
106
|
- wsdl/demo.remote.xml
|
104
|
-
homepage:
|
107
|
+
homepage: https://github.com/kodram/b2b_center_api
|
105
108
|
licenses:
|
106
109
|
- MIT
|
107
110
|
metadata: {}
|