spree_cm_commissioner 2.3.1.pre.pre2 → 2.3.1
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 +4 -4
- data/Gemfile.lock +1 -1
- data/app/controllers/spree/admin/product_completion_steps_controller.rb +1 -17
- data/app/controllers/spree/admin/tenants_controller.rb +1 -1
- data/app/controllers/spree/api/v2/storefront/intercity_taxi/draft_orders_controller.rb +1 -0
- data/app/interactors/spree_cm_commissioner/create_ticket.rb +0 -2
- data/app/interactors/spree_cm_commissioner/host_matcher.rb +1 -1
- data/app/interactors/spree_cm_commissioner/vendor_creation_telegram_alert_sender.rb +1 -1
- data/app/mailers/spree/order_mailer_decorator.rb +9 -8
- data/app/models/concerns/spree_cm_commissioner/service_recommendations.rb +2 -2
- data/app/models/concerns/spree_cm_commissioner/store_preference.rb +0 -1
- data/app/models/spree_cm_commissioner/product_completion_step.rb +1 -4
- data/app/models/spree_cm_commissioner/product_completion_steps/social_entry_url.rb +19 -86
- data/app/models/spree_cm_commissioner/tenant.rb +1 -10
- data/app/models/spree_cm_commissioner/vendor_place.rb +1 -10
- data/app/overrides/spree/admin/stores/_form/store_preferences.html.erb.deface +0 -9
- data/app/queries/spree_cm_commissioner/trip_query.rb +17 -23
- data/app/serializers/spree_cm_commissioner/v2/storefront/trip_vehicle_serializer.rb +1 -1
- data/app/services/spree_cm_commissioner/intercity_taxi_order/create.rb +0 -8
- data/app/services/spree_cm_commissioner/intercity_taxi_order/update.rb +45 -35
- data/app/views/shared/_asset_field.html.erb +0 -13
- data/app/views/spree/admin/product_completion_steps/_form.html.erb +2 -28
- data/app/views/spree/admin/tenants/_form.html.erb +1 -1
- data/config/initializers/spree_permitted_attributes.rb +0 -1
- data/config/locales/en.yml +0 -4
- data/config/locales/km.yml +61 -65
- data/config/routes.rb +0 -16
- data/lib/spree_cm_commissioner/version.rb +1 -1
- metadata +4 -12
- data/app/controllers/spree/api/v2/tenant/intercity_taxi/draft_orders_controller.rb +0 -41
- data/app/controllers/spree/api/v2/tenant/trip_places_controller.rb +0 -48
- data/app/controllers/spree/api/v2/tenant/trip_search_controller.rb +0 -103
- data/app/controllers/spree/api/v2/tenant/trips_controller.rb +0 -32
- data/app/models/spree_cm_commissioner/product_completion_step_banner.rb +0 -12
- data/app/views/spree/admin/product_completion_steps/_supported_fields.html.erb +0 -33
- data/db/migrate/20251119093000_add_tenant_id_to_cm_vendor_places.rb +0 -7
- data/lib/spree_cm_commissioner/test_helper/factories/product_completion_step_banner_factory.rb +0 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 87608fab14f473c498987cb8ecf0793926b031a1368d9a1d03f05fc3bf03e819
|
|
4
|
+
data.tar.gz: 9472eaf172e1346757684e9c2b69cec671053927d1a99739f13d0eea1fcb17ce
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b3da7fbad39575ce43d6b39e088c24ec878095d88a6652e4dd07d87ae0b474403ef368dba1233e0a2d3a2084a03c45d1932c20eee21ee6a65f99e0cb8e4d1e1d
|
|
7
|
+
data.tar.gz: 92f4f8a8a446c765568b23b8a1183f7f2f83a499a608a59a34ab315314bf4ea256fbb8264da0da2e80ad0dab527a9fed4c8498a9c77342e186f61386dfad735b
|
data/Gemfile.lock
CHANGED
|
@@ -4,7 +4,6 @@ module Spree
|
|
|
4
4
|
belongs_to 'spree/product', find_by: :slug
|
|
5
5
|
|
|
6
6
|
before_action :load_step_types, if: :member_action?
|
|
7
|
-
before_action :build_assets, only: %i[create update]
|
|
8
7
|
|
|
9
8
|
def load_step_types
|
|
10
9
|
@step_types = [
|
|
@@ -15,13 +14,10 @@ module Spree
|
|
|
15
14
|
|
|
16
15
|
# override
|
|
17
16
|
def permitted_resource_params
|
|
18
|
-
return @permitted_resource_params if defined?(@permitted_resource_params)
|
|
19
|
-
|
|
20
17
|
key = ActiveModel::Naming.param_key(@object)
|
|
21
18
|
permit_keys = params.require(key).keys
|
|
22
19
|
|
|
23
|
-
|
|
24
|
-
@permitted_resource_params
|
|
20
|
+
params.require(key).permit(permit_keys)
|
|
25
21
|
end
|
|
26
22
|
|
|
27
23
|
# @overrided
|
|
@@ -58,18 +54,6 @@ module Spree
|
|
|
58
54
|
def location_after_save
|
|
59
55
|
edit_object_url(@object)
|
|
60
56
|
end
|
|
61
|
-
|
|
62
|
-
def remove_banner
|
|
63
|
-
@object.banner&.destroy
|
|
64
|
-
flash[:success] = Spree.t(:successfully_removed)
|
|
65
|
-
redirect_to edit_object_url(@object)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
private
|
|
69
|
-
|
|
70
|
-
def build_assets
|
|
71
|
-
@object.build_banner(attachment: permitted_resource_params.delete(:banner)) if permitted_resource_params[:banner].present?
|
|
72
|
-
end
|
|
73
57
|
end
|
|
74
58
|
end
|
|
75
59
|
end
|
|
@@ -48,8 +48,6 @@ module SpreeCmCommissioner
|
|
|
48
48
|
name: 'ticket-type',
|
|
49
49
|
presentation: 'Ticket Type'
|
|
50
50
|
)
|
|
51
|
-
# auto assign the option type to the ticket
|
|
52
|
-
@ticket.option_types << @option_type unless @ticket.option_types.include?(@option_type)
|
|
53
51
|
|
|
54
52
|
@option_value = Spree::OptionValue.find_or_create_by!(
|
|
55
53
|
name: @ticket.name,
|
|
@@ -37,21 +37,22 @@ module Spree
|
|
|
37
37
|
|
|
38
38
|
def setup_tenant_and_store
|
|
39
39
|
@tenant = @order.tenant
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
40
|
+
if @tenant.present?
|
|
41
|
+
@brand_color = @tenant.preferences[:brand_primary_color]
|
|
42
|
+
@vendor_logo_url = @tenant.active_vendor&.logo&.original_url
|
|
43
|
+
@current_store = @tenant
|
|
44
|
+
else
|
|
45
|
+
@current_store = @order.store
|
|
46
|
+
end
|
|
45
47
|
end
|
|
46
48
|
|
|
47
49
|
def build_subject(resend)
|
|
48
50
|
prefix = resend ? "[#{Spree.t(:resend).upcase}] " : ''
|
|
49
|
-
|
|
50
|
-
"#{prefix}#{store_name} Booking Confirmation ##{@order.number}"
|
|
51
|
+
"#{prefix}#{@current_store&.name} Booking Confirmation ##{@order.number}"
|
|
51
52
|
end
|
|
52
53
|
|
|
53
54
|
def store_url
|
|
54
|
-
@tenant.present? ? @
|
|
55
|
+
@tenant.present? ? @current_store.host : @current_store.url
|
|
55
56
|
end
|
|
56
57
|
|
|
57
58
|
def ticket_email(guest, email)
|
|
@@ -50,9 +50,9 @@ module SpreeCmCommissioner
|
|
|
50
50
|
private
|
|
51
51
|
|
|
52
52
|
def tenant_link_or_default(tenant, default_link)
|
|
53
|
-
return default_link unless tenant.respond_to?(:
|
|
53
|
+
return default_link unless tenant.respond_to?(:host)
|
|
54
54
|
|
|
55
|
-
site = tenant.
|
|
55
|
+
site = tenant.host.to_s.strip
|
|
56
56
|
site.presence || default_link
|
|
57
57
|
rescue StandardError
|
|
58
58
|
default_link
|
|
@@ -6,7 +6,6 @@ module SpreeCmCommissioner
|
|
|
6
6
|
preference :sms_sender_id, :string
|
|
7
7
|
preference :telegram_order_alert_chat_id, :string
|
|
8
8
|
preference :telegram_order_request_alert_chat_id, :string
|
|
9
|
-
preference :telegram_new_vendor_alert_chat_id, :string
|
|
10
9
|
preference :assetlinks, :string, default: ''
|
|
11
10
|
preference :apple_app_site_association, :string, default: ''
|
|
12
11
|
end
|
|
@@ -4,8 +4,6 @@ module SpreeCmCommissioner
|
|
|
4
4
|
|
|
5
5
|
belongs_to :product, class_name: '::Spree::Product', optional: false
|
|
6
6
|
|
|
7
|
-
has_one :banner, as: :viewable, dependent: :destroy, class_name: 'SpreeCmCommissioner::ProductCompletionStepBanner'
|
|
8
|
-
|
|
9
7
|
# When a completion step is changed, regenerate completion steps for all line items
|
|
10
8
|
# of the product so they reflect the latest step configuration.
|
|
11
9
|
after_destroy :regenerate_line_items_completion_steps
|
|
@@ -30,8 +28,7 @@ module SpreeCmCommissioner
|
|
|
30
28
|
action_label: action_label,
|
|
31
29
|
action_url: action_url_for(line_item),
|
|
32
30
|
completed_at: existing_data&.dig('completed_at'),
|
|
33
|
-
completed: completed?(line_item)
|
|
34
|
-
banner_url: banner.present? ? banner.original_url : nil
|
|
31
|
+
completed: completed?(line_item)
|
|
35
32
|
}
|
|
36
33
|
end
|
|
37
34
|
|
|
@@ -5,7 +5,6 @@ module SpreeCmCommissioner
|
|
|
5
5
|
# - https://t.me/ThePlatformKHBot?start={order.number}
|
|
6
6
|
# - https://example.com?guest_name={guests[0].first_name}&phone={guests[0].phone_number}
|
|
7
7
|
# - https://example.com?line_item_id={line_item.id}&quantity={line_item.quantity}
|
|
8
|
-
# - https://example.com?bill_address.first_name={bill_address.first_name}&bill_address.lastname={bill_address.lastname}
|
|
9
8
|
preference :entry_point_link, :string
|
|
10
9
|
|
|
11
10
|
# Allowed fields per object (excludes private/reference fields like *_id, *_by_id, metadata, etc.)
|
|
@@ -15,11 +14,7 @@ module SpreeCmCommissioner
|
|
|
15
14
|
state
|
|
16
15
|
email
|
|
17
16
|
total
|
|
18
|
-
display_total
|
|
19
17
|
item_total
|
|
20
|
-
display_item_total
|
|
21
|
-
adjustment_total
|
|
22
|
-
display_adjustment_total
|
|
23
18
|
created_at
|
|
24
19
|
completed_at
|
|
25
20
|
token
|
|
@@ -28,31 +23,12 @@ module SpreeCmCommissioner
|
|
|
28
23
|
currency
|
|
29
24
|
item_count
|
|
30
25
|
channel
|
|
31
|
-
special_instructions
|
|
32
|
-
].freeze
|
|
33
|
-
|
|
34
|
-
BILL_ADDRESS_ALLOWED_FIELDS = %w[
|
|
35
|
-
first_name
|
|
36
|
-
last_name
|
|
37
|
-
full_name
|
|
38
|
-
address1
|
|
39
|
-
address2
|
|
40
|
-
city
|
|
41
|
-
zipcode
|
|
42
|
-
phone
|
|
43
|
-
state_name
|
|
44
|
-
alternative_phone
|
|
45
|
-
company
|
|
46
|
-
label
|
|
47
|
-
age
|
|
48
|
-
gender
|
|
49
26
|
].freeze
|
|
50
27
|
|
|
51
28
|
LINE_ITEM_ALLOWED_FIELDS = %w[
|
|
52
29
|
qr_data
|
|
53
30
|
quantity
|
|
54
31
|
price
|
|
55
|
-
display_price
|
|
56
32
|
from_date
|
|
57
33
|
to_date
|
|
58
34
|
number
|
|
@@ -69,6 +45,7 @@ module SpreeCmCommissioner
|
|
|
69
45
|
dob
|
|
70
46
|
gender
|
|
71
47
|
age
|
|
48
|
+
email
|
|
72
49
|
phone_number
|
|
73
50
|
address
|
|
74
51
|
seat_number
|
|
@@ -83,6 +60,9 @@ module SpreeCmCommissioner
|
|
|
83
60
|
expectation
|
|
84
61
|
other_occupation
|
|
85
62
|
other_organization
|
|
63
|
+
entry_type
|
|
64
|
+
upload_later
|
|
65
|
+
data_fill_stage_phase
|
|
86
66
|
created_at
|
|
87
67
|
updated_at
|
|
88
68
|
].freeze
|
|
@@ -92,79 +72,32 @@ module SpreeCmCommissioner
|
|
|
92
72
|
return nil if preferred_entry_point_link.blank?
|
|
93
73
|
|
|
94
74
|
url = preferred_entry_point_link.dup
|
|
95
|
-
url = replace_order_placeholders(url, line_item)
|
|
96
|
-
url = replace_bill_address_placeholders(url, line_item)
|
|
97
|
-
url = replace_line_item_placeholders(url, line_item)
|
|
98
|
-
|
|
99
|
-
replace_guest_placeholders(url, line_item)
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
def completed?(line_item)
|
|
103
|
-
return false if line_item.completion_steps.blank?
|
|
104
|
-
|
|
105
|
-
step_data = line_item.completion_steps.find { |step| step['position'].to_s == position.to_s }
|
|
106
|
-
step_data&.dig('completed_at').present?
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
# Returns a hash of all supported placeholder fields grouped by object type.
|
|
110
|
-
# Used by the admin UI to display available placeholders when configuring the entry_point_link template.
|
|
111
|
-
# Example usage in template: {order.number}, {bill_address.first_name}, {line_item.quantity}, {guests[0].email}
|
|
112
|
-
#
|
|
113
|
-
# @return [Hash] Hash with keys :order, :bill_address, :line_item, :guests
|
|
114
|
-
# Each key maps to an array of allowed field names for that object type
|
|
115
|
-
def supported_fields
|
|
116
|
-
{
|
|
117
|
-
order: ORDER_ALLOWED_FIELDS,
|
|
118
|
-
bill_address: BILL_ADDRESS_ALLOWED_FIELDS,
|
|
119
|
-
line_item: LINE_ITEM_ALLOWED_FIELDS,
|
|
120
|
-
guests: GUEST_ALLOWED_FIELDS
|
|
121
|
-
}
|
|
122
|
-
end
|
|
123
|
-
|
|
124
|
-
private
|
|
125
75
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
ORDER_ALLOWED_FIELDS.each do |field|
|
|
130
|
-
value = line_item.order.public_send(field)
|
|
131
|
-
url.gsub!("{order.#{field}}", value.to_s) if value.present?
|
|
76
|
+
# Replace order placeholders: {order.field_name}
|
|
77
|
+
line_item.order.attributes.each do |field, value|
|
|
78
|
+
url.gsub!("{order.#{field}}", value.to_s) if ORDER_ALLOWED_FIELDS.include?(field)
|
|
132
79
|
end
|
|
133
80
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
def replace_bill_address_placeholders(url, line_item)
|
|
138
|
-
return url if line_item.order&.bill_address.blank?
|
|
139
|
-
|
|
140
|
-
BILL_ADDRESS_ALLOWED_FIELDS.each do |field|
|
|
141
|
-
value = line_item.order.bill_address.public_send(field)
|
|
142
|
-
url.gsub!("{bill_address.#{field}}", value.to_s) if value.present?
|
|
81
|
+
# Replace line_item placeholders: {line_item.field_name}
|
|
82
|
+
line_item.attributes.each do |field, value|
|
|
83
|
+
url.gsub!("{line_item.#{field}}", value.to_s) if LINE_ITEM_ALLOWED_FIELDS.include?(field)
|
|
143
84
|
end
|
|
144
85
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
value = line_item.public_send(field)
|
|
151
|
-
url.gsub!("{line_item.#{field}}", value.to_s) if value.present?
|
|
86
|
+
# Replace guest placeholders: {guests[index].field_name}
|
|
87
|
+
line_item.guests.each_with_index do |guest, index|
|
|
88
|
+
guest.attributes.each do |field, value|
|
|
89
|
+
url.gsub!("{guests[#{index}].#{field}}", value.to_s) if GUEST_ALLOWED_FIELDS.include?(field)
|
|
90
|
+
end
|
|
152
91
|
end
|
|
153
92
|
|
|
154
93
|
url
|
|
155
94
|
end
|
|
156
95
|
|
|
157
|
-
def
|
|
158
|
-
return
|
|
159
|
-
|
|
160
|
-
line_item.guests.each_with_index do |guest, index|
|
|
161
|
-
GUEST_ALLOWED_FIELDS.each do |field|
|
|
162
|
-
value = guest.public_send(field)
|
|
163
|
-
url.gsub!("{guests[#{index}].#{field}}", value.to_s) if value.present?
|
|
164
|
-
end
|
|
165
|
-
end
|
|
96
|
+
def completed?(line_item)
|
|
97
|
+
return false if line_item.completion_steps.blank?
|
|
166
98
|
|
|
167
|
-
|
|
99
|
+
step_data = line_item.completion_steps.find { |step| step['position'].to_s == position.to_s }
|
|
100
|
+
step_data&.dig('completed_at').present?
|
|
168
101
|
end
|
|
169
102
|
end
|
|
170
103
|
end
|
|
@@ -12,10 +12,7 @@ module SpreeCmCommissioner
|
|
|
12
12
|
through: :vendors,
|
|
13
13
|
source: :payment_methods
|
|
14
14
|
|
|
15
|
-
validates :host,
|
|
16
|
-
format: { without: %r{\Ahttps?://},
|
|
17
|
-
message: :format
|
|
18
|
-
}
|
|
15
|
+
validates :host, uniqueness: true, presence: true
|
|
19
16
|
|
|
20
17
|
enum state: { enabled: 0, disabled: 1 }
|
|
21
18
|
|
|
@@ -25,12 +22,6 @@ module SpreeCmCommissioner
|
|
|
25
22
|
vendors.where(state: :active).first
|
|
26
23
|
end
|
|
27
24
|
|
|
28
|
-
def url
|
|
29
|
-
return if host.blank?
|
|
30
|
-
|
|
31
|
-
Rails.env.development? || Rails.env.test? ? "http://#{host}" : "https://#{host}"
|
|
32
|
-
end
|
|
33
|
-
|
|
34
25
|
private
|
|
35
26
|
|
|
36
27
|
def generate_slug
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
module SpreeCmCommissioner
|
|
2
2
|
class VendorPlace < Base
|
|
3
|
-
enum place_type: {
|
|
3
|
+
enum place_type: { location: 0, branch: 1, stop: 2 }
|
|
4
4
|
acts_as_list scope: :vendor
|
|
5
5
|
|
|
6
|
-
belongs_to :tenant, class_name: 'SpreeCmCommissioner::Tenant', optional: true
|
|
7
6
|
belongs_to :vendor, class_name: 'Spree::Vendor', optional: false
|
|
8
7
|
belongs_to :place, class_name: 'SpreeCmCommissioner::Place', optional: false
|
|
9
8
|
belongs_to :location, class_name: 'SpreeCmCommissioner::VendorPlace', optional: true
|
|
@@ -17,8 +16,6 @@ module SpreeCmCommissioner
|
|
|
17
16
|
|
|
18
17
|
accepts_nested_attributes_for :place, allow_destroy: true
|
|
19
18
|
|
|
20
|
-
before_save :set_tenant_id
|
|
21
|
-
|
|
22
19
|
# include place when using these delegate to avoid N+1
|
|
23
20
|
def display_name
|
|
24
21
|
place&.name
|
|
@@ -31,11 +28,5 @@ module SpreeCmCommissioner
|
|
|
31
28
|
def selected
|
|
32
29
|
vendor.selected_place_references.include?(place&.reference)
|
|
33
30
|
end
|
|
34
|
-
|
|
35
|
-
private
|
|
36
|
-
|
|
37
|
-
def set_tenant_id
|
|
38
|
-
self.tenant_id = vendor&.tenant_id
|
|
39
|
-
end
|
|
40
31
|
end
|
|
41
32
|
end
|
|
@@ -37,15 +37,6 @@
|
|
|
37
37
|
<% end %>
|
|
38
38
|
</div>
|
|
39
39
|
|
|
40
|
-
<!-- Telegram New Vendor Alert Chat ID -->
|
|
41
|
-
<div class="col-6">
|
|
42
|
-
<%= f.field_container :preferred_telegram_new_vendor_alert_chat_id do %>
|
|
43
|
-
<%= f.label :preferred_telegram_new_vendor_alert_chat_id, Spree.t(:telegram_new_vendor_alert_chat_id) %>
|
|
44
|
-
<%= f.text_field :preferred_telegram_new_vendor_alert_chat_id, class: 'form-control' %>
|
|
45
|
-
<%= f.error_message_on :preferred_telegram_new_vendor_alert_chat_id %>
|
|
46
|
-
<% end %>
|
|
47
|
-
</div>
|
|
48
|
-
|
|
49
40
|
<!-- Assetlinks -->
|
|
50
41
|
<div class="col-12">
|
|
51
42
|
<%= f.field_container :preferred_assetlinks do %>
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
module SpreeCmCommissioner
|
|
2
2
|
class TripQuery
|
|
3
|
-
attr_reader :origin_id, :destination_id, :date, :vendor_id, :
|
|
3
|
+
attr_reader :origin_id, :destination_id, :date, :vendor_id, :number_of_guests, :route_type, :params
|
|
4
4
|
|
|
5
|
-
def initialize(origin_id:, destination_id:, date:, route_type: nil, vendor_id: nil,
|
|
5
|
+
def initialize(origin_id:, destination_id:, date:, route_type: nil, vendor_id: nil, number_of_guests: nil, params: {}) # rubocop:disable Metrics/ParameterLists
|
|
6
6
|
@origin_id = origin_id
|
|
7
7
|
@destination_id = destination_id
|
|
8
8
|
@date = date.to_date == Time.zone.now.to_date ? Time.zone.now : Time.zone.parse(date.to_s)
|
|
9
9
|
@vendor_id = vendor_id
|
|
10
|
-
@tenant_id = tenant_id
|
|
11
10
|
@number_of_guests = number_of_guests || 1
|
|
12
11
|
@route_type = route_type
|
|
13
12
|
@params = params
|
|
@@ -37,9 +36,8 @@ module SpreeCmCommissioner
|
|
|
37
36
|
|
|
38
37
|
def direct_trips
|
|
39
38
|
result = trip_scope
|
|
40
|
-
result = result.where({ vendor_id: vendor_id }.compact)
|
|
39
|
+
result = result.where({ vendor_id: vendor_id }.compact)
|
|
41
40
|
result = result.where(route_type: route_type) if route_type.present?
|
|
42
|
-
result = result.where(spree_vendors: { tenant_id: tenant_id }) if tenant_id.present?
|
|
43
41
|
paginate(result)
|
|
44
42
|
end
|
|
45
43
|
|
|
@@ -58,24 +56,20 @@ module SpreeCmCommissioner
|
|
|
58
56
|
private
|
|
59
57
|
|
|
60
58
|
def trip_scope
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
scope = scope.joins(:vendor) if tenant_id.present?
|
|
77
|
-
|
|
78
|
-
scope
|
|
59
|
+
SpreeCmCommissioner::Trip
|
|
60
|
+
.select(<<~SQL.squish)
|
|
61
|
+
cm_trips.*,
|
|
62
|
+
boarding.departure_time AS boarding_departure_time,
|
|
63
|
+
boarding.stop_place_id AS boarding_stop_id, boarding.stop_name AS boarding_stop_name,
|
|
64
|
+
drop_off.stop_name AS drop_off_stop_name, drop_off.stop_place_id AS drop_off_stop_id,
|
|
65
|
+
drop_off.arrival_time AS drop_off_arrival_time,
|
|
66
|
+
COALESCE(iv.quantity_available, 0) AS quantity_available,
|
|
67
|
+
COALESCE(iv.max_capacity, 0) AS max_capacity,
|
|
68
|
+
origin_places.name AS origin_place_name, dest_places.name AS destination_place_name,
|
|
69
|
+
prices.amount AS amount, prices.compare_at_amount AS compare_at_amount,
|
|
70
|
+
prices.currency AS currency
|
|
71
|
+
SQL
|
|
72
|
+
.includes(vendor: :logo, vehicle: :option_values)
|
|
79
73
|
.joins(<<~SQL.squish)
|
|
80
74
|
INNER JOIN cm_trip_stops AS boarding ON boarding.trip_id = cm_trips.id AND boarding.stop_type = 0
|
|
81
75
|
INNER JOIN cm_trip_stops AS drop_off ON drop_off.trip_id = cm_trips.id AND drop_off.stop_type = 1
|
|
@@ -4,7 +4,7 @@ module SpreeCmCommissioner
|
|
|
4
4
|
class TripVehicleSerializer < BaseSerializer
|
|
5
5
|
set_type :vehicle
|
|
6
6
|
|
|
7
|
-
attributes :id, :code, :vehicle_type
|
|
7
|
+
attributes :id, :code, :vehicle_type
|
|
8
8
|
|
|
9
9
|
has_many :vehicle_photos, serializer: ::SpreeCmCommissioner::V2::Storefront::AssetSerializer
|
|
10
10
|
has_many :amenities, serializer: ::SpreeCmCommissioner::V2::Storefront::AmenitySerializer
|
|
@@ -42,7 +42,6 @@ module SpreeCmCommissioner
|
|
|
42
42
|
)
|
|
43
43
|
|
|
44
44
|
build_guests_for!(line_item, quantity)
|
|
45
|
-
assign_saved_guests_to_line_item(line_item)
|
|
46
45
|
|
|
47
46
|
order.save!
|
|
48
47
|
order.update_with_updater!
|
|
@@ -63,13 +62,6 @@ module SpreeCmCommissioner
|
|
|
63
62
|
def build_guests_for!(line_item, qty)
|
|
64
63
|
Array.new(qty) { line_item.guests.new }
|
|
65
64
|
end
|
|
66
|
-
|
|
67
|
-
def assign_saved_guests_to_line_item(line_item)
|
|
68
|
-
line_item.guests.each do |guest|
|
|
69
|
-
saved_guest = SpreeCmCommissioner::SavedGuest.new
|
|
70
|
-
guest.saved_guest = saved_guest
|
|
71
|
-
end
|
|
72
|
-
end
|
|
73
65
|
end
|
|
74
66
|
end
|
|
75
67
|
end
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
module SpreeCmCommissioner
|
|
2
2
|
module IntercityTaxiOrder
|
|
3
3
|
class Update
|
|
4
|
-
attr_reader :params
|
|
4
|
+
attr_reader :order_number, :params
|
|
5
5
|
|
|
6
|
-
def self.call(params:)
|
|
7
|
-
new(params: params).call
|
|
6
|
+
def self.call(order_number:, params:)
|
|
7
|
+
new(order_number: order_number, params: params).call
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def initialize(params:)
|
|
10
|
+
def initialize(order_number:, params:)
|
|
11
|
+
@order_number = order_number
|
|
11
12
|
@params = ensure_parameters(params)
|
|
12
13
|
end
|
|
13
14
|
|
|
14
15
|
def call
|
|
15
|
-
order =
|
|
16
|
+
order = Spree::Order.find_by!(number: order_number)
|
|
16
17
|
order.update!(order_params)
|
|
17
18
|
|
|
19
|
+
create_billing_address_if_missing(order)
|
|
20
|
+
|
|
18
21
|
order
|
|
19
22
|
end
|
|
20
23
|
|
|
@@ -26,41 +29,48 @@ module SpreeCmCommissioner
|
|
|
26
29
|
::ActionController::Parameters.new(params)
|
|
27
30
|
end
|
|
28
31
|
|
|
29
|
-
def
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
Spree::Order.find_by!(token: order_token)
|
|
33
|
-
end
|
|
32
|
+
def create_billing_address_if_missing(order)
|
|
33
|
+
return if order.bill_address.present?
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
params[:order_token]
|
|
35
|
+
SpreeCmCommissioner::BillingAddressCreator.call(order: order)
|
|
37
36
|
end
|
|
38
37
|
|
|
39
38
|
def order_params
|
|
40
39
|
params.require(:order).permit(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
40
|
+
:intel_phone_number,
|
|
41
|
+
:email,
|
|
42
|
+
line_items_attributes: [
|
|
43
|
+
:id,
|
|
44
|
+
:pickup_place_name,
|
|
45
|
+
:drop_off_place_name,
|
|
46
|
+
:from_date,
|
|
47
|
+
:pickup_lat,
|
|
48
|
+
:pickup_lng,
|
|
49
|
+
:pickup_oob_confirmed,
|
|
50
|
+
:drop_off_lat,
|
|
51
|
+
:drop_off_lng,
|
|
52
|
+
:drop_off_oob_confirmed,
|
|
53
|
+
:distance_km,
|
|
54
|
+
:ordered_points,
|
|
55
|
+
:base_km,
|
|
56
|
+
:detour_pickup_km,
|
|
57
|
+
:detour_dropoff_km,
|
|
58
|
+
:extra_pickup_km,
|
|
59
|
+
:extra_dropoff_km,
|
|
60
|
+
:extra_pickup_charge_usd,
|
|
61
|
+
:extra_dropoff_charge_usd,
|
|
62
|
+
:estimated_time_minutes,
|
|
63
|
+
:remark,
|
|
64
|
+
:passenger_count,
|
|
65
|
+
{ guests_attributes: %i[
|
|
66
|
+
id
|
|
67
|
+
first_name
|
|
68
|
+
last_name
|
|
69
|
+
gender
|
|
70
|
+
nationality_id
|
|
71
|
+
age
|
|
72
|
+
]
|
|
73
|
+
}
|
|
64
74
|
]
|
|
65
75
|
)
|
|
66
76
|
end
|
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
<%# :asset %>
|
|
4
4
|
<%# :remove_url, optional %>
|
|
5
5
|
<%# :classes, optional %>
|
|
6
|
-
<%# :aspect_ratio, optional %>
|
|
7
|
-
<%# :size_info, optional %>
|
|
8
6
|
<%# :form %>
|
|
9
7
|
<%# :required, optional, default: false %>
|
|
10
8
|
|
|
@@ -18,17 +16,6 @@
|
|
|
18
16
|
class: 'rounded border mb-4 mw-100',
|
|
19
17
|
style: 'max-height: 100px') if asset.present? && asset.attachment.present? %>
|
|
20
18
|
|
|
21
|
-
<% if defined?(aspect_ratio) || defined?(size_info) %>
|
|
22
|
-
<small class="mb-2 form-text text-muted d-block">
|
|
23
|
-
<% if defined?(aspect_ratio) && aspect_ratio.present? %>
|
|
24
|
-
<strong>Aspect Ratio:</strong> <%= aspect_ratio %><br>
|
|
25
|
-
<% end %>
|
|
26
|
-
<% if defined?(size_info) && size_info.present? %>
|
|
27
|
-
<strong>Recommended Size:</strong> <%= size_info %>
|
|
28
|
-
<% end %>
|
|
29
|
-
</small>
|
|
30
|
-
<% end %>
|
|
31
|
-
|
|
32
19
|
<div data-hook="file" class="form-group">
|
|
33
20
|
<%= form.label field, label || Spree.t(field) %>
|
|
34
21
|
<%= form.file_field field, required: required %>
|