c80_shared 0.1.68 → 0.1.69

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
  SHA256:
3
- metadata.gz: 3667af28c965c19676a043379c8a15b8520b3ce1e9e83aa4ef6cbbbfb70f0249
4
- data.tar.gz: 0a277eb1c4478fe49c9128e3a7b83e256859905adc07b2d9a6fff7f0b20712c2
3
+ metadata.gz: a51c1503139e06e27c0a6734a20c44bff15f5ba150c776ff4ad5be6739206004
4
+ data.tar.gz: 39343ca14d3ccb8817c2be53812529b7e00041e89f19d435bf2df6cd002139b8
5
5
  SHA512:
6
- metadata.gz: cdc3c04bf31a5f23c181f78ec8127b502f602e326515415833c2351b6379d57f17a37df9f7ac83929951434712c2dd8be49f2a0710dda2a49fc81802438776d4
7
- data.tar.gz: 9b9fad0a5d7a9a6518f0577397652e8430616e8c3e4f80e4828efd7d51aee560fa25afb05e89a6619caa294ef4701ae81286e4ee76fc3693eaf3c5dc3002e293
6
+ metadata.gz: 8a9eaf0707a2282394a2511fb25676b3c06708e0c0b4ae27039c7e7ae03ef486ade82b403647c42a7e5d22bf2a165f294cd650d5a403bbd867e99203f49cd858
7
+ data.tar.gz: 42287fcb2ab7e5d759951199508cd8ab564cecb1697dd19a482ae02d3c7aa4ddc04f056f80bc14b0e48c2606a439428c2400a0c8af8f7e6150ac9b482996d257
@@ -24,6 +24,7 @@ module Lease
24
24
  human_price
25
25
  human_price_vat_incl
26
26
  comments
27
+ extra
27
28
  ].freeze
28
29
  end
29
30
 
@@ -113,6 +114,29 @@ module Lease
113
114
  { comments: bid.comments }
114
115
  end
115
116
 
117
+ def extra(bid)
118
+ extra = %i[
119
+ extra_captain
120
+ extra_towels
121
+ extra_hostess
122
+ extra_cleaning
123
+ extra_chef
124
+ extra_fees
125
+ extra_apa
126
+ ].map do |attr|
127
+ [attr, bid.send(attr)]
128
+ end.to_h.select do |_, value|
129
+ !value.nil?
130
+ end.map do |a,v|
131
+ if a == :extra_apa
132
+ [a, '%s %' % v ]
133
+ else
134
+ [a, num_to_cur(v,bid.currency, @opts[:locale])]
135
+ end
136
+ end.to_h
137
+
138
+ { extra: extra }
139
+ end
116
140
  end
117
141
  end
118
142
  end
@@ -0,0 +1,120 @@
1
+ module Lease
2
+
3
+ class FindSuitsService
4
+
5
+ attr_reader :errors, # результат: ошибки
6
+ :log, # результат: лог работы сервиса
7
+ :emails, # результат: почта владельцев лодок
8
+ :aboats_ids # результат: айдишники лодок с хозяевами. Эти айдишники вписаны в таблицу suits
9
+
10
+ def initialize
11
+ _reset_ivars
12
+ end
13
+
14
+ def perform(inquiry, personal_boat_id = nil)
15
+ _reset_ivars
16
+ @inquiry = inquiry
17
+
18
+ locs1 = BoatLocation.near([inquiry.latitude, inquiry.longitude], 300, units: :km, order: false) # сначала ищем все лодки в Ш-радиусе (300км)
19
+ locs2 = locs1.select { |loc| loc.radius >= loc.distance } # потом выбираем только те лодки, которые охватывают эту точку заявки
20
+
21
+ boats_ids = locs2.map(&:boat_id).uniq
22
+ boats = Boat.where(id: boats_ids).where(boat_type_id: inquiry.boat_type_ids).where(for_rent: 1).where.not(state: ::Boat::STATE_REJECTED)
23
+ boats_ids = boats.map(&:id)
24
+
25
+ _log 'inquiry_id = ', inquiry.id
26
+ _log 'locs sql = ', locs1.to_sql
27
+ _log 'boats sql = ', boats.to_sql
28
+ _log 'result 1: boats_ids = ', boats_ids
29
+
30
+ find_users boats_ids, personal_boat_id # 3) фильтруем найденные лодки - выбираем только те, которые имеют хозяев
31
+ end
32
+
33
+ private
34
+
35
+ def find_users(boat_ids, personal_boat_id)
36
+ if boat_ids.count.zero?
37
+ errors << 'BOATS NOT FOUND: inquiry = %s' % @inquiry.attributes
38
+ _log 'BOATS NOT FOUND: inquiry =', @inquiry.attributes
39
+ return false
40
+ end
41
+
42
+ # находим те лодки, у которых есть явные хозяева
43
+ sql = '
44
+ SELECT
45
+ users.id,
46
+ boat_users.boat_id,
47
+ users.email,
48
+ users.is_notify
49
+ FROM users
50
+ INNER JOIN boat_users ON boat_users.user_id = users.id
51
+ WHERE boat_users.boat_id IN (%s)' % (boat_ids * ',')
52
+ result = ActiveRecord::Base.connection.execute(sql) # for example: [[2977, 4675, "diego.s@gmx.com", 1], [2978, 4676, "dohomota@yandex.ru", 1]]
53
+
54
+ # (22,55,509),(22,63,531),... - собираем значения для вставки в другой sql-запрос (создающий Suits)
55
+ # values = result.map { |record| '(%s)' % ([@inquiry.id, record[0], record[1]] * ',') } # 0-user_id, 1-boat_id
56
+ values = result.map do |record|
57
+ @aboats_ids << record[1]
58
+ '(%s)' % ([@inquiry.id, record[0], record[1]] * ',') # 0-user_id, 1-boat_id
59
+ end
60
+
61
+ _log 'boats with owners sql = ', sql
62
+ _log '(inq,user,boat) result = ', values
63
+
64
+ unless values.present?
65
+ errors << 'SUITS NOT FOUND: inquiry = %s, boat_ids = [%s]' % [@inquiry.attributes, boat_ids * ',']
66
+ _log 'SUITS NOT FOUND: inquiry = ', @inquiry.attributes
67
+ _log 'SUITS NOT FOUND: boat_ids = ', boat_ids * ','
68
+ return false
69
+ end
70
+
71
+ # пишем в таблицу Suits подходящие под Заявку варианты
72
+ sql2 = 'INSERT IGNORE INTO %s(inquiry_id, user_id, boat_id) VALUES%s' % [::Lease::Suit.table_name, values * ',']
73
+ ActiveRecord::Base.connection.execute(sql2)
74
+
75
+ @emails = if personal_boat_id.present?
76
+ # уведомляем только 1 хозяина лодки, на которую была оставлена персональная заявка
77
+ [result.select { |record| record[1] == personal_boat_id }.flatten[2]] # 2-users.email # for example: ['diego.s@gmx.com']
78
+ else
79
+ # уведомляем всех агентов, подходящих под заявку
80
+ result.map do |record|
81
+ record[3].zero? ? nil : record[2] # 3-is_notify, 2-email
82
+ end.compact.uniq
83
+ end
84
+
85
+ _log 'insert ignore into suits sql =', sql2
86
+ _log 'collect user emails = ', @emails
87
+
88
+ uc_values = if personal_boat_id.present?
89
+ # кружок рисуем только владельцу Целевой лодки, на которую была оставлена заявка
90
+ user_id = result.select { |record| record[1] == personal_boat_id }.flatten[0] # 0-user_id
91
+ ['(%s,%s)' % [user_id, @inquiry.id]]
92
+ else
93
+ # кружок рисуем всем подходящим под заявку агентам
94
+ result.map { |record| '(%s)' % ([record[0], @inquiry.id] * ',') } # 0-user_id
95
+ end
96
+
97
+ # запишем счётчики (те, кому надо, увидят кружки в интерфейсе)
98
+ sql3 = 'INSERT IGNORE INTO %s(user_id, inquiry_id) VALUES%s' % [::Lease::UsersInquiriesCounters.table_name, uc_values * ',']
99
+ ActiveRecord::Base.connection.execute sql3
100
+
101
+ _log 'insert counters = ', sql3
102
+
103
+ puts @log * "\n"
104
+ true
105
+ end
106
+
107
+ def _reset_ivars
108
+ @errors = []
109
+ @emails = []
110
+ @log = []
111
+ @aboats_ids = []
112
+ end
113
+
114
+ def _log(key, value)
115
+ @log << key
116
+ @log << value
117
+ @log << "\n"
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,12 @@
1
+ en:
2
+ activerecord:
3
+ labels:
4
+ lease/bid:
5
+ header_extra: 'Extra services'
6
+ extra_captain: 'Captain'
7
+ extra_towels: 'Bed sheets/towels'
8
+ extra_hostess: 'Hostess'
9
+ extra_chef: 'Chef'
10
+ extra_fees: 'Port fees'
11
+ extra_cleaning: 'Cleaning'
12
+ extra_apa: 'APA'
@@ -0,0 +1,12 @@
1
+ ru:
2
+ activerecord:
3
+ labels:
4
+ lease/bid:
5
+ header_extra: 'Дополнительные услуги'
6
+ extra_captain: 'Капитан'
7
+ extra_towels: 'Постельное бельё/полотенца'
8
+ extra_hostess: 'Хостес'
9
+ extra_chef: 'Повар'
10
+ extra_fees: 'Портовые сборы'
11
+ extra_cleaning: 'Уборка'
12
+ extra_apa: 'APA'
@@ -1,3 +1,3 @@
1
1
  module C80Shared
2
- VERSION = "0.1.68"
2
+ VERSION = "0.1.69"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: c80_shared
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.68
4
+ version: 0.1.69
5
5
  platform: ruby
6
6
  authors:
7
7
  - C80609A
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-28 00:00:00.000000000 Z
11
+ date: 2019-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,6 +100,7 @@ files:
100
100
  - app/services/central_agent/save_boat_service.rb
101
101
  - app/services/dimension_service.rb
102
102
  - app/services/lease/create_broadcast_inquiry_service.rb
103
+ - app/services/lease/find_suits_service.rb
103
104
  - app/services/users/find_or_generate_email_token_service.rb
104
105
  - app/services/users/generate_email_token_service.rb
105
106
  - bin/console
@@ -125,6 +126,8 @@ files:
125
126
  - config/locales/dicts/motor/ru.yml
126
127
  - config/locales/dicts/rental_type/en.yml
127
128
  - config/locales/dicts/rental_type/ru.yml
129
+ - config/locales/lease/bid.en.yml
130
+ - config/locales/lease/bid.ru.yml
128
131
  - config/locales/rent_skip_type/en.yml
129
132
  - config/locales/rent_skip_type/ru.yml
130
133
  - lib/c80_shared.rb