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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a51c1503139e06e27c0a6734a20c44bff15f5ba150c776ff4ad5be6739206004
|
4
|
+
data.tar.gz: 39343ca14d3ccb8817c2be53812529b7e00041e89f19d435bf2df6cd002139b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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'
|
data/lib/c80_shared/version.rb
CHANGED
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.
|
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-
|
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
|