b2b_center_api 0.0.2 → 0.0.3

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: 694ccdd29ca008be6e32204bdc43d51da76d0cb3
4
- data.tar.gz: 68838e4d378fa1b41fe998f02bbe72f50ac99d9f
3
+ metadata.gz: c01d388e69d03c7577e73443eb76e61709674a0e
4
+ data.tar.gz: 1fe96e984765447f9d45f4db55fdd577d71f906f
5
5
  SHA512:
6
- metadata.gz: 4f58a155d2bc68c7c10f1497bdc8086ead2595c9072bd30c387bab4a6bfa662af70620b1501df97685cea545b5ff41034e923007ebba3dabd9b65f905427495d
7
- data.tar.gz: efa817d70a9f13c340d22d6197a7036fbf6a6882db9c8b4f43e721935511caa20a50f86a5173b4c5642efe37e05f7aa7044bc7ebf1c86e303538b854f0df0b2c
6
+ metadata.gz: 8259a0e35dd79ecc5d02c6ecc4145a0cdca7c2da241bee710496a43584cfa43f8ef7215237bc609f37797c15565e25b43c3b87c8719979b8e2b838c0ed147210
7
+ data.tar.gz: 48108158f4e40b675df1e6ecaa91bbc9c4d4b250fb3a53a86e5cf068fb6f3fe9090856141e0ab24e83daa5c893aaf12af375950b5f85730dad4babf245489bbb
data/.rubocop.yml CHANGED
@@ -6,3 +6,6 @@ PercentLiteralDelimiters:
6
6
 
7
7
  UnneededPercentQ:
8
8
  Enabled: false
9
+
10
+ LineLength:
11
+ Max: 119
data/README.md CHANGED
@@ -18,7 +18,35 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
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
 
@@ -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
- # Soap Client
8
+ # Client for API
9
9
  class Client
10
- attr_accessor :remote_auction,
11
- :remote_market,
12
- :remote_tender
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(options = nil)
15
- options ||= Settings.soap_options
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
@@ -1,6 +1,7 @@
1
1
  require 'b2b_center_api/web_service'
2
2
 
3
3
  module B2bCenterApi
4
+ # Методы класса RemoteTender
4
5
  class RemoteTender
5
6
  def initialize(client)
6
7
  @client = client
@@ -1,3 +1,3 @@
1
1
  module B2bCenterApi
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  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.to_s
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
- attr_accessor :firm_id, :offers_nums
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
- def self.from_response(response, client)
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.firm_id = convert(p[:firm_id], :integer)
15
- ap.offers_nums = convert(p[:offers_nums][:string], :integer)
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
@@ -34,6 +34,10 @@ module B2bCenterApi
34
34
  def remote_tender
35
35
  B2bCenterApi::RemoteTender.new(@soap_client)
36
36
  end
37
+
38
+ def self.to_array(obj)
39
+ obj.is_a?(Hash) ? [obj] : obj
40
+ end
37
41
  end
38
42
  end
39
43
  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
- attr_accessor :date_lastedit,
8
- :org_name,
9
- :org_name_short,
10
- :code_okpo,
11
- :bank_name,
12
- :bank_inn,
13
- :ogrn,
14
- :ogrn_given,
15
- :ogrn_date_given,
16
- :bank_kpp,
17
- :bank_bik,
18
- :bank_r_account,
19
- :bank_c_account,
20
- :bank_comments,
21
- :jury_address,
22
- :post_address,
23
- :fact_address,
24
- :site_url,
25
- :certification,
26
- :org_details,
27
- :bank_details,
28
- :country,
29
- # :bosses,
30
- :is_smb
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
- def self.from_response(response, client)
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], :string)
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.2
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-06 00:00:00.000000000 Z
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: {}