torg_api 0.0.5 → 0.0.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 488581134aa036b0d5cda63dcf269bdbd222aec0
4
- data.tar.gz: d96799c73e1ff9c94ad4af630e7aad91d0d409e5
3
+ metadata.gz: efd006e0cb72f83fb2a1ccf7df3ab6bc00a78e8d
4
+ data.tar.gz: 92a1bc93d2874484f3c02c1893f79cdf42475ea9
5
5
  SHA512:
6
- metadata.gz: 1a86cc50448cddbff2896e54dc88ca560f13dfb3972ff70965cbd7efda08d93d09f9f9bd6b04e54b699e605e2a144249ac8deb96d477bd7b5aac916264b10e71
7
- data.tar.gz: d1bb738fa67ed620cbef2794aaba2430ac8c6acf20b3ea753355ba7cedc91c81ee87c601548e6ca2e857ab9cd0feb558f2b452ebb9a472c9552e9e2cead56189
6
+ metadata.gz: 8dc6704a2be054bdba3ec4b530b849589b095912e6fa5f653248a4f008362ca7c559fe9a704e311a15cba0b050f9af652a9a4216c7a1b2a88f2ee2b33ef4117d
7
+ data.tar.gz: d8348e65eee37b357dadf8cdcbeaa24b8110a5b9df2237bf35fdd548cf2d4083e35500c6e9ce4e0aa3ef80ee5601c69cf6cdb8784ef09a6674a5685a20890809
data/.rubocop.yml CHANGED
@@ -1,10 +1,19 @@
1
+ AllCops:
2
+ RunRailsCops: false
3
+
1
4
  AsciiComments:
2
5
  Enabled: false
3
6
 
4
- PercentLiteralDelimiters:
7
+ StringLiterals:
8
+ Enabled: false
9
+
10
+ ClassLength:
11
+ Enabled: false
12
+
13
+ MethodLength:
5
14
  Enabled: false
6
15
 
7
- UnneededPercentQ:
16
+ Documentation:
8
17
  Enabled: false
9
18
 
10
19
  LineLength:
@@ -2,6 +2,13 @@ module TorgApi
2
2
  module Api
3
3
  # Участник закупки
4
4
  class Bidder < TorgApi::Base
5
+ # @return [Integer] id
6
+ attr_accessor :id
7
+ # @return [Integer] ID участника
8
+ attr_accessor :contractor_id
9
+ # @return [Integer] ID закупки
10
+ attr_accessor :tender_id
11
+
5
12
  class << self
6
13
  # Создаёт участника в системе и возвращает его id
7
14
  # @param contractor_id [Integer] id контрагента
@@ -28,6 +35,26 @@ module TorgApi
28
35
  b.id
29
36
  end
30
37
  end
38
+
39
+ # Добавляет файл предложения участника к нему
40
+ # @param file [String] имя файла и путь к нему
41
+ # @param note [String] Комментарии
42
+ # @return Nothing
43
+ def add_file(file, note)
44
+ TorgApi::Models::BidderFile.transaction do
45
+ tender_file = TorgApi::Models::TenderFile.create(
46
+ area_id: TenderFileArea::BIDDER,
47
+ year: Date.current.year,
48
+ document: File.open(file),
49
+ user_id: EtpUsers::B2B_CENTER
50
+ )
51
+ TorgApi::Models::BidderFile.create!(
52
+ bidder_id: id,
53
+ tender_file_id: tender_file.id,
54
+ note: note
55
+ )
56
+ end
57
+ end
31
58
  end
32
59
  end
33
60
  end
@@ -35,6 +35,30 @@ module TorgApi
35
35
  o.id
36
36
  end
37
37
 
38
+ def save(bidder_id, lot_id, hash)
39
+ offer = TorgApi::Models::Offer.for_bid_lot_num(bidder_id, lot_id, hash[:alternate_num]) ||
40
+ TorgApi::Models::Offer.new(bidder_id: bidder_id, lot_id: lot_id, num: hash[:alternate_num], version: 0)
41
+ TorgApi::Models::Offer.transaction do
42
+ offer.type_id = CoverLabels::REQUEST
43
+ offer.status_id = hash[:result] == 'reject' ? OfferStatuses::REJECT : OfferStatuses::NEW
44
+ offer.rank = hash[:rank]
45
+ offer.conditions = hash[:essential]
46
+
47
+ TorgApi::Models::Specification.where(lot_id: lot_id).each_with_index do |spec, index|
48
+ offer_spec = offer.offer_specifications.for_offer_spec(offer.id, spec.id) ||
49
+ offer.offer_specifications.build(specification_id: spec.id)
50
+ offer_spec.cost = index == 0 ? hash[:price_notax] : 0
51
+ offer_spec.cost_nds = index == 0 ? hash[:price] : 0
52
+ offer_spec.final_cost = index == 0 ? hash[:final_price_notax] : 0
53
+ offer_spec.final_cost_nds = index == 0 ? hash[:final_price] : 0
54
+ end
55
+
56
+ offer.save
57
+ end
58
+
59
+ offer.id
60
+ end
61
+
38
62
  def extract_status(winner)
39
63
  winner ? OfferStatuses::WIN : OfferStatuses::NEW
40
64
  end
@@ -0,0 +1,38 @@
1
+ module TorgApi
2
+ module Api
3
+ # Файл
4
+ class TenderFile < TorgApi::Base
5
+ # @return [Integer] id
6
+ attr_accessor :id
7
+ # @return [Integer] Область использования
8
+ attr_accessor :area_id
9
+ # @return [Integer] Год
10
+ attr_accessor :year
11
+ # @return [String] Имя файла документа
12
+ attr_accessor :document
13
+ # @return [Integer] Владелец
14
+ attr_accessor :user_id
15
+ # @return [String] Имя файла во внешних системах
16
+ attr_accessor :external_filename
17
+ # @return [String] Content Type
18
+ attr_accessor :content_type
19
+ # @return [Integer] FileSize
20
+ attr_accessor :file_size
21
+ class << self
22
+ def create_from_b2b(hash, area, file_size, user_id)
23
+ mime_types = MIME::Types.type_for(hash[:name])
24
+ file = TenderFile.new
25
+ file.area_id = area
26
+ file.year = Date.current.year
27
+ file.document = hash[:title]
28
+ file.user_id = user_id
29
+ file.external_filename = hash[:name]
30
+ file.content_type = mime_types.empty? ? 'text/plain' : mime_types.first.content_type
31
+ file.file_size = file_size
32
+
33
+ TorgApi::Models::TenderFile.create!(file.to_h).id
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
data/lib/torg_api/base.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'carrierwave'
2
+ require 'carrierwave/orm/activerecord'
1
3
  require 'torg_api/models'
2
4
 
3
5
  module TorgApi
@@ -10,5 +10,14 @@ module TorgApi
10
10
  REJECT = 26_003 # Отклонена
11
11
  WIN = 26_004 # Победила
12
12
  end
13
+
14
+ module TenderFileArea
15
+ TENDER = 2
16
+ BIDDER = 3
17
+ end
18
+
19
+ module EtpUsers
20
+ B2B_CENTER = 411
21
+ end
13
22
  end
14
23
  end
@@ -1,6 +1,14 @@
1
1
  module TorgApi
2
2
  module Models
3
3
  class Bidder < ActiveRecord::Base
4
+ def to_api
5
+ bidder = TorgApi::Api::Bidder.new
6
+ bidder.id = id
7
+ bidder.contractor_id = contractor_id
8
+ bidder.tender_id = tender_id
9
+
10
+ bidder
11
+ end
4
12
  end
5
13
  end
6
14
  end
@@ -0,0 +1,6 @@
1
+ module TorgApi
2
+ module Models
3
+ class BidderFile < ActiveRecord::Base
4
+ end
5
+ end
6
+ end
@@ -1,6 +1,12 @@
1
1
  module TorgApi
2
2
  module Models
3
+ # TORG Offer model
3
4
  class Offer < ActiveRecord::Base
5
+ has_many :offer_specifications
6
+
7
+ def self.for_bid_lot_num(bidder_id, lot_id, num)
8
+ where(bidder_id: bidder_id).where(lot_id: lot_id).where(num: num).where(version: 0).take
9
+ end
4
10
  end
5
11
  end
6
12
  end
@@ -1,6 +1,9 @@
1
1
  module TorgApi
2
2
  module Models
3
3
  class OfferSpecification < ActiveRecord::Base
4
+ def self.for_offer_spec(offer_id, spec_id)
5
+ where(offer_id: offer_id).where(specification_id: spec_id).take
6
+ end
4
7
  end
5
8
  end
6
9
  end
@@ -0,0 +1,17 @@
1
+ module TorgApi
2
+ module Models
3
+ class TenderFile < ActiveRecord::Base
4
+ mount_uploader :document, TenderFileUploader
5
+
6
+ before_save :update_file_attributes
7
+
8
+ private
9
+
10
+ def update_file_attributes
11
+ return unless document.present? || document_changed?
12
+ self.content_type = document.file.content_type
13
+ self.file_size = document.file.size
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,58 @@
1
+ require 'carrierwave/processing/mime_types'
2
+
3
+ class TenderFileUploader < CarrierWave::Uploader::Base
4
+ include CarrierWave::MimeTypes
5
+
6
+ process :set_content_type
7
+
8
+ # Include RMagick or MiniMagick support:
9
+ # include CarrierWave::RMagick
10
+ # include CarrierWave::MiniMagick
11
+
12
+ # Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
13
+ # include Sprockets::Helpers::RailsHelper
14
+ # include Sprockets::Helpers::IsolatedHelper
15
+
16
+ # Choose what kind of storage to use for this uploader:
17
+ storage :file
18
+ # storage :fog
19
+
20
+ # Override the directory where uploaded files will be stored.
21
+ # This is a sensible default for uploaders that are meant to be mounted:
22
+ def store_dir
23
+ "uploads/#{model.year}/#{model.area_id}/#{model.id}"
24
+ end
25
+
26
+ # Provide a default URL as a default if there hasn't been a file uploaded:
27
+ # def default_url
28
+ # # For Rails 3.1+ asset pipeline compatibility:
29
+ # # asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
30
+ #
31
+ # "/images/fallback/" + [version_name, "default.png"].compact.join('_')
32
+ # end
33
+
34
+ # Process files as they are uploaded:
35
+ # process :scale => [200, 300]
36
+ #
37
+ # def scale(width, height)
38
+ # # do something
39
+ # end
40
+
41
+ # Create different versions of your uploaded files:
42
+ # version :thumb do
43
+ # process :scale => [50, 50]
44
+ # end
45
+
46
+ # Add a white list of extensions which are allowed to be uploaded.
47
+ # For images you might use something like this:
48
+ # def extension_white_list
49
+ # %w(docx doc rtf xlsx xls pdf jpg jpeg tif tiff eml rar zip txt 7z)
50
+ # # if update this, then update app/assets/javascripts/tender_files.js.coffee
51
+ # end
52
+
53
+ # Override the filename of the uploaded files:
54
+ # Avoid using model.id or version_name here, see uploader/store.rb for details.
55
+ # def filename
56
+ # "something.jpg" if original_filename
57
+ # end
58
+ end
@@ -1,3 +1,3 @@
1
1
  module TorgApi
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
data/lib/torg_api.rb CHANGED
@@ -4,6 +4,8 @@ require 'torg_api/constants'
4
4
  require 'torg_api/base'
5
5
  require 'torg_api/api'
6
6
 
7
+ CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/
8
+
7
9
  module TorgApi
8
10
  def self.establish_connection(spec = nil)
9
11
  ActiveRecord::Base.establish_connection(spec)
data/torg_api.gemspec CHANGED
@@ -22,4 +22,5 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency 'rake', '~> 10.4'
23
23
 
24
24
  spec.add_dependency 'activerecord', '~> 4.2'
25
+ spec.add_dependency 'carrierwave'
25
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: torg_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
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-06-05 00:00:00.000000000 Z
11
+ date: 2015-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '4.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: carrierwave
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: API for Torg system
56
70
  email:
57
71
  - archakov@gmail.com
@@ -72,10 +86,12 @@ files:
72
86
  - lib/torg_api/api/lot.rb
73
87
  - lib/torg_api/api/offer.rb
74
88
  - lib/torg_api/api/tender.rb
89
+ - lib/torg_api/api/tender_file.rb
75
90
  - lib/torg_api/base.rb
76
91
  - lib/torg_api/constants.rb
77
92
  - lib/torg_api/models.rb
78
93
  - lib/torg_api/models/bidder.rb
94
+ - lib/torg_api/models/bidder_file.rb
79
95
  - lib/torg_api/models/contractor.rb
80
96
  - lib/torg_api/models/cover.rb
81
97
  - lib/torg_api/models/lot.rb
@@ -83,6 +99,8 @@ files:
83
99
  - lib/torg_api/models/offer_specification.rb
84
100
  - lib/torg_api/models/specification.rb
85
101
  - lib/torg_api/models/tender.rb
102
+ - lib/torg_api/models/tender_file.rb
103
+ - lib/torg_api/models/tender_file_uploader.rb
86
104
  - lib/torg_api/version.rb
87
105
  - torg_api.gemspec
88
106
  homepage: https://github.com/kodram/torg_api