c80_shared 0.1.68 → 0.1.69
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
|
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
|