b2b_center_api 0.1.0 → 0.1.1

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: 421271391b2fd6ad46692438d753830aa293ff18
4
- data.tar.gz: f467f255e9a1e2dc880e103fcad550394a998afd
3
+ metadata.gz: f3527ecfb8c29fb58b6d225bc5f96f64eb3e5a1e
4
+ data.tar.gz: 14853b42a38be14c3104b24b20044078ab9f5efa
5
5
  SHA512:
6
- metadata.gz: 2b42e24f107747891efb69dd0dbb13f561b9f071a93d604aec829003795a4eaf386df2f593a3bbf907cf964f4fe1a7cd1c3d2a872d4eea0f2e71c21b19f4a789
7
- data.tar.gz: 5a32e5d627667bf8bfe43e36fac7d2f6f43dace9b0dc856e578e20b6034d92abb464d11b41459eef2beb342d9cf4c30ec89c7c2d4e35551e41d982eb5d613eb9
6
+ metadata.gz: '0709caded7ed7b3e8fd14212069441837168ba12884d0759c2763d4e111c182b8b62fc74de31a730f701a72b2c42d388125f8f222c0dad5f4e952805a51f31ec'
7
+ data.tar.gz: 729ba088ed41c8af95dbd2688675bf4c27fc94e1388bddab78e2abf845b4ff8d4670f0a9879abd67cc9d1118c3fc7a10b0589f72624c6524d76b80757e41dd46
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in b2b_center_api.gemspec
4
+ gem 'savon', git: 'git@github.com:dukaarpad/savon.git'
5
+
4
6
  gemspec
@@ -22,6 +22,5 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency 'rake'
23
23
  spec.add_development_dependency 'rspec'
24
24
 
25
- spec.add_dependency 'savon', '~> 2.10.0'
26
25
  spec.add_dependency 'socksify'
27
26
  end
@@ -8,6 +8,71 @@ module B2bCenterApi
8
8
  @client_web = WebService::RemoteAuction.new(client)
9
9
  end
10
10
 
11
+ # Поулчить данные о протоколе вскрытия конвертов с предложениями
12
+ # @param auction_id [Integer] Номер аукциона/объявления
13
+ # @param haggling_num [Integer] Номер этапа переторжки
14
+ # Допустимые значени:
15
+ # 0 - Основной этап (По умолчанию)
16
+ # >0 - Этап переторжки с указанным номером
17
+ # @return [AuctionParticipantsProtocol]
18
+ def get_participants_protocol(auction_id, haggling_num = 0)
19
+ response = @client_web.command :get_participants_protocol, auction_id: auction_id, haggling_num: haggling_num
20
+ WebService::Types::AuctionParticipantsProtocol.from_response(response)
21
+ end
22
+
23
+ # Загрузить документацию к аукциону/объявлению через url
24
+ # @param auction_id [Integer] Номер аукциона/объявления
25
+ # @param url [String] Путь к файлу
26
+ # @param type [String] Тип документации
27
+ # Возможные значения:
28
+ # 'docs' - Документация к основному этапу торговой процедуры
29
+ # 'pre_docs' - Документация к предварительному этапу торговой процедуры
30
+ # @param append_mode [Integer] Загружать файлы в режиме добавления
31
+ # Возможные значения:
32
+ # 0 - Режим замены (старые файлы документации будут удалены)
33
+ # 1 - Режим добавления (старые файлы документации не будут удалены, за исключением совпадающих имен)
34
+ # @return [String] Код ошибки (0 - если успешно)
35
+ def upload_doc_from_url(auction_id, url, type = 'docs', append_mode = 1)
36
+ response = @client_web.command :upload_doc, auction_id: auction_id, type: type, append_mode: append_mode, url: url
37
+ response.status[:error_code]
38
+ end
39
+
40
+ # Загрузить документацию к аукциону/объявлению
41
+ # @param auction_id [Integer] Номер аукциона/объявления
42
+ # @param file [String] Путь к файлу
43
+ # @param type [String] Тип документации
44
+ # Возможные значения:
45
+ # 'docs' - Документация к основному этапу торговой процедуры
46
+ # 'pre_docs' - Документация к предварительному этапу торговой процедуры
47
+ # @param append_mode [Integer] Загружать файлы в режиме добавления
48
+ # Возможные значения:
49
+ # 0 - Режим замены (старые файлы документации будут удалены)
50
+ # 1 - Режим добавления (старые файлы документации не будут удалены, за исключением совпадающих имен)
51
+ # @return [String] Код ошибки (0 - если успешно)
52
+ def upload_doc(auction_id, file, type = 'docs', append_mode = 1)
53
+ response = @client_web.command_with_attachments :upload_doc, [file], auction_id: auction_id, type: type, append_mode: append_mode, attachment_name: WebService::Types::AttachmentName.new(file).to_h
54
+ response.status[:error_code]
55
+ end
56
+
57
+ # Загрузить документацию из нескольких файлов к аукциону/объявлению
58
+ # !Загружает не более двух файлов за раз, иначе ошибка!
59
+ # @param auction_id [Integer] Номер аукциона/объявления
60
+ # @param file [Array] Массив файлов
61
+ # @param type [String] Тип документации
62
+ # Возможные значения:
63
+ # 'docs' - Документация к основному этапу торговой процедуры
64
+ # 'pre_docs' - Документация к предварительному этапу торговой процедуры
65
+ # @param append_mode [Integer] Загружать файлы в режиме добавления
66
+ # Возможные значения:
67
+ # 0 - Режим замены (старые файлы документации будут удалены)
68
+ # 1 - Режим добавления (старые файлы документации не будут удалены, за исключением совпадающих имен)
69
+ # @return [String] Код ошибки (0 - если успешно)
70
+ def upload_docs(auction_id, files, type = 'docs', append_mode = 1)
71
+ files = [files] unless files.is_a? Array
72
+ response = @client_web.command_with_attachments :upload_docs, files, auction_id: auction_id, type: type, append_mode: append_mode, attachment_names: WebService::Types::AttachmentName.from_array(files)
73
+ response.status[:error_code]
74
+ end
75
+
11
76
  # Создать новый аукцион
12
77
  # @param auction_data [WebService::Types::AuctionData, Hash] Данные для создания аукциона
13
78
  # @return [Integer] id созданной процедуры
@@ -8,6 +8,53 @@ module B2bCenterApi
8
8
  @client_web = WebService::RemoteMarket.new(client)
9
9
  end
10
10
 
11
+ # Получить категории классификатора организации
12
+ # @param firm_id [Integer] ID организации или 0 для своей организации
13
+ # @param type [Integer] Тип продукции и услуг
14
+ # Возможные значения:
15
+ # '0' - Потребляемая продукция и услуги
16
+ # '1' - Предлагаемая продукция и услуги
17
+ # @return [String[]]
18
+ def get_firm_classifier(firm_id, type)
19
+ response = @client_web.command :get_firm_classifier, firm_id: firm_id, type: type
20
+ WebService::Types::ArrayOfIds.from_response(response)
21
+ end
22
+
23
+ # Получить строки классификатора
24
+ # @param ids [String[]] ID категорий классификатора организации
25
+ # @return [String[]]
26
+ def get_classifier_rows(ids)
27
+ response = @client_web.command :get_classifier_rows, ids: ids
28
+ WebService::Types::OkdpRow.from_response(response)
29
+ end
30
+
31
+ # Получить список адресов организации
32
+ # @param firm_id [Integer] ID организации или 0 для своей организации
33
+ # @return [String[]]
34
+ def get_addresses_ids(firm_id = 0)
35
+ response = @client_web.command :get_addresses_ids, firm_id: firm_id
36
+ WebService::Types::ArrayOfIds.from_response(response)
37
+ end
38
+
39
+ # Получить адрес организации по ОКАТО
40
+ # @param okato [String] ОКАТО организации
41
+ # @param country [Integer] Код страны. Если значение равно = 0, то используется код России = 643
42
+ # @param address [String] Адрес (обязательно для заполнения)
43
+ # @param firm_id [Integer] ID своей или подчиненной организации. Если = 0, то получаем идентификатор адреса своей организации
44
+ # @return [String[]]
45
+ def get_address_id_by_okato(okato:, address:, country: 0, firm_id: 0)
46
+ response = @client_web.command :get_address_id_by_okato, okato: okato, address: address, country: country, firm_id: firm_id
47
+ WebService::Types::Id.from_response(response)
48
+ end
49
+
50
+ # Получить адрес
51
+ # @param address_id [Integer] ID адреса
52
+ # @return [String[]]
53
+ def get_address(address_id)
54
+ response = @client_web.command :get_address, address_id: address_id
55
+ WebService::Types::AddressData.from_response(response, @client)
56
+ end
57
+
11
58
  # Получить информацию об организации
12
59
  # @param firm_id [Integer] ID организации
13
60
  # @return [WebService::Types::FirmInfo]
@@ -23,5 +70,23 @@ module B2bCenterApi
23
70
  response = @client_web.command :find_firm, firm_request: { inn: inn }
24
71
  WebService::Types::FirmData.from_response(response, @client)
25
72
  end
73
+
74
+ # Получить список услуг
75
+ # @param
76
+ # @return [String[]]
77
+ def get_services
78
+ response = @client_web.command :get_services, {}
79
+ WebService::Types::ArrayOfServices.from_response(response)
80
+ end
81
+
82
+ # Создание/изменение адреса
83
+ # @param address_id [Integer] ID адреса. Чтобы создать новый адрес поле id должно быть = 0, либо отсутствовать
84
+ # firm_id [Integer] ID организации
85
+ #
86
+ # @return [Integer]
87
+ def update_address(address_data)
88
+ response = @client_web.command :update_address, data: address_data.to_h
89
+ WebService::Types::Id.from_response(response)
90
+ end
26
91
  end
27
92
  end
@@ -1,3 +1,3 @@
1
1
  module B2bCenterApi
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
@@ -11,6 +11,13 @@ module B2bCenterApi
11
11
  Response.new(res)
12
12
  end
13
13
 
14
+ def command_with_attachments(name, attachments, params)
15
+ auth = B2bCenterApi::Settings.auth_options
16
+ params = auth.merge(params)
17
+ res = @client.call(method_fullname(name), message: params, attachments: attachments)
18
+ Response.new(res)
19
+ end
20
+
14
21
  def initialize(client)
15
22
  @client = client
16
23
  end
@@ -0,0 +1,75 @@
1
+ module B2bCenterApi
2
+ module WebService
3
+ module Types
4
+ # Адрес
5
+ class AddressData < WebService::BaseType
6
+ # @return [Integer] id адреса
7
+ # Для добавления устанавливаем id=0
8
+ attr_accessor :id
9
+
10
+ # @return [Integer] id организации
11
+ attr_accessor :firm_id
12
+
13
+ # @return [Integer] Цифровой код страны ISO_3166-1
14
+ attr_accessor :country
15
+
16
+ # @return [Integer] Код региона по КЛАДРу
17
+ # В случае заполнения поля
18
+ # okato, в поле region можно передать "0", в этом
19
+ # случае оно заполняется автоматически по коду
20
+ # ОКАТО
21
+ attr_accessor :region
22
+
23
+ # @return [String] Код ОКАТО
24
+ attr_accessor :okato
25
+
26
+ # @return [String] Адрес
27
+ attr_accessor :address
28
+
29
+ # @return [String] Название адреса
30
+ attr_accessor :comment
31
+
32
+ # @return [String] Широта, в градусах
33
+ attr_accessor :lat
34
+
35
+ # @return [String] Долгота, в градусах
36
+ attr_accessor :lng
37
+
38
+ # @return [Integer] Тип задания адреса
39
+ # Указывается только при вызове
40
+ # RemoteMarket.updateAddress.
41
+ # Возможные значения:
42
+ # "0" — значения широты и долготы определятся
43
+ # автоматически на основании адреса;
44
+ # "32" — значения широты и долготы
45
+ attr_accessor :status
46
+
47
+ # @return [Integer] Является ли адрес неточным
48
+ # Возможные значения:
49
+ # "0" — адрес, заданный обычным способом;
50
+ # "1" — неточный адрес (может использоваться только в закупках по 223-ФЗ)
51
+ attr_accessor :is_fuzzy_address
52
+
53
+ # @return [AddressData]
54
+ def self.from_response(response, client)
55
+ r = response.result[:address_data]
56
+ return if r.nil?
57
+ ad = AddressData.new
58
+ ad.soap_client = client
59
+ ad.id = convert(r[:id], :integer)
60
+ ad.firm_id = convert(r[:firm_id], :integer)
61
+ ad.country = convert(r[:country], :integer)
62
+ ad.region = convert(r[:region], :integer)
63
+ ad.okato = convert(r[:okato], :string)
64
+ ad.address = convert(r[:address], :string)
65
+ ad.comment = convert(r[:comment], :string)
66
+ ad.lat = convert(r[:lat], :string)
67
+ ad.lng = convert(r[:lng], :string)
68
+ ad.status = convert(r[:status], :integer)
69
+ ad.is_fuzzy_address = convert(r[:is_fuzzy_address], :integer)
70
+ ad
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,17 @@
1
+ module B2bCenterApi
2
+ module WebService
3
+ module Types
4
+ # Список доступных услуг
5
+ class ArrayOfServices < WebService::BaseType
6
+ # @return [ServiceRow]
7
+ def self.from_response(response)
8
+ r = response.result
9
+ return if r.nil?
10
+ Array(r[:services]).map do |service|
11
+ ServiceRow.new(service)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,32 @@
1
+ require 'digest'
2
+
3
+ module B2bCenterApi
4
+ module WebService
5
+ module Types
6
+ # Файл для отправки
7
+ class AttachmentName < WebService::BaseType
8
+
9
+ # @return [String] Имя файла
10
+ attr_reader :filename
11
+
12
+ # @return [String] MD5 от содержимого файла
13
+ attr_reader :md5
14
+
15
+ def initialize(file_path)
16
+ file = File.new(file_path)
17
+ @filename = File.basename(file_path)
18
+ @md5 = Digest::MD5.hexdigest(file.read)
19
+ end
20
+
21
+ # Подготовка массива AttachmentName для отправки
22
+ # @param files_array [Array] Массив файлов
23
+ # @return [Array] Массив хешей для отправки по SOAP
24
+ def self.from_array(files_array)
25
+ files_array.map do |file|
26
+ { file: new(file).to_h }
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,42 @@
1
+ module B2bCenterApi
2
+ module WebService
3
+ module Types
4
+ # Участник аукциона
5
+ class AuctionParticipantsProtocol < WebService::BaseType
6
+
7
+ # @return [String] Номер протокола
8
+ attr_accessor :number
9
+
10
+ # @return [Date] Дата составления протокола
11
+ attr_accessor :date
12
+
13
+ # @return [String] Место составления протокола
14
+ attr_accessor :place
15
+
16
+ # @return [String] Ссылка на скачивание файла протокола, если организатор загрузил протокол
17
+ attr_accessor :file
18
+
19
+ # @return [Time] Дата и время проведения этапа процедуры
20
+ attr_accessor :procedure_stage_date
21
+
22
+ # @return [Date] Дата подписания протокола
23
+ attr_accessor :sign_protocol_date
24
+
25
+ # @return [ParticipantsProtocol]
26
+ def self.from_response(response)
27
+ r = response.result[:participants_protocol]
28
+ return if r.nil?
29
+
30
+ protocol = AuctionParticipantsProtocol.new
31
+ protocol.number = r[:number]
32
+ protocol.date = convert r[:date], :date
33
+ protocol.place = r[:place]
34
+ protocol.file = r[:file]
35
+ protocol.procedure_stage_date = convert r[:procedure_stage_date], :time
36
+ protocol.sign_protocol_date = convert r[:sign_protocol_date], :date
37
+ protocol
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -18,7 +18,7 @@ module B2bCenterApi
18
18
 
19
19
  # @return [B2bFile[]]
20
20
  def self.from_part_response(response)
21
- return if response.nil?
21
+ return [] if response.nil?
22
22
  files = to_array(response[:file]).map do |f|
23
23
  file = B2bFile.new
24
24
  file.title = convert(f[:title], :string)
@@ -0,0 +1,15 @@
1
+ module B2bCenterApi
2
+ module WebService
3
+ module Types
4
+ # ID
5
+ class Id < WebService::BaseType
6
+
7
+ def self.from_response(response)
8
+ r = response.result
9
+ return if r.nil?
10
+ convert(r[:value], :Integer)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ module B2bCenterApi
2
+ module WebService
3
+ module Types
4
+ class OkdpRow < WebService::BaseType
5
+ # @return [Integer] ID
6
+ attr_accessor :id
7
+ # @return [Integer] родительский ID
8
+ attr_accessor :parent_id
9
+ # @return [String] Наименование
10
+ attr_accessor :name
11
+ # @return [OkdpRow]
12
+ def self.from_response(response)
13
+ r = response.result
14
+ return if r.nil?
15
+ Array(r[:okdp_rows]).map do |okdp|
16
+ o = OkdpRow.new
17
+ o.id = okdp[:id]
18
+ o.parent_id = okdp[:parent_id]
19
+ o.name = okdp[:name]
20
+ o
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ module B2bCenterApi
2
+ module WebService
3
+ module Types
4
+ # Список услуг
5
+ class ServiceRow < WebService::BaseType
6
+ # @return [Integer] Номер услуги
7
+ attr_reader :id
8
+ # @return [String] Название услуги
9
+ attr_reader :name
10
+
11
+ def initialize(args = {})
12
+ @id = args[:id]
13
+ @name = args[:name]
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
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.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Archakov Aleksandr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-06 00:00:00.000000000 Z
11
+ date: 2017-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,20 +52,6 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: savon
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: 2.10.0
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 2.10.0
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: socksify
71
57
  requirement: !ruby/object:Gem::Requirement
@@ -112,14 +98,21 @@ files:
112
98
  - lib/b2b_center_api/web_service/response.rb
113
99
  - lib/b2b_center_api/web_service/type_cast.rb
114
100
  - lib/b2b_center_api/web_service/types.rb
101
+ - lib/b2b_center_api/web_service/types/address_data.rb
115
102
  - lib/b2b_center_api/web_service/types/array_of_ids.rb
103
+ - lib/b2b_center_api/web_service/types/array_of_services.rb
104
+ - lib/b2b_center_api/web_service/types/attachment_name.rb
116
105
  - lib/b2b_center_api/web_service/types/auction_data.rb
117
106
  - lib/b2b_center_api/web_service/types/auction_offer.rb
118
107
  - lib/b2b_center_api/web_service/types/auction_participant.rb
108
+ - lib/b2b_center_api/web_service/types/auction_participants_protocol.rb
119
109
  - lib/b2b_center_api/web_service/types/b2b_file.rb
120
110
  - lib/b2b_center_api/web_service/types/firm_data.rb
121
111
  - lib/b2b_center_api/web_service/types/firm_info.rb
112
+ - lib/b2b_center_api/web_service/types/id.rb
122
113
  - lib/b2b_center_api/web_service/types/lot.rb
114
+ - lib/b2b_center_api/web_service/types/okdp_rows.rb
115
+ - lib/b2b_center_api/web_service/types/service_row.rb
123
116
  - lib/b2b_center_api/web_service/types/tender_data.rb
124
117
  - lib/b2b_center_api/web_service/types/tender_lot_result.rb
125
118
  - lib/b2b_center_api/web_service/types/tender_lot_results.rb
@@ -148,7 +141,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
148
141
  version: '0'
149
142
  requirements: []
150
143
  rubyforge_project:
151
- rubygems_version: 2.6.11
144
+ rubygems_version: 2.6.13
152
145
  signing_key:
153
146
  specification_version: 4
154
147
  summary: B2B Center API