spree_cm_commissioner 2.0.3.pre.pre5 → 2.0.3.pre.pre8
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/locations_controller.rb +62 -0
- data/app/controllers/spree/api/v2/operator/event_charts_controller.rb +2 -8
- data/app/controllers/spree/api/v2/platform/places_controller.rb +4 -1
- data/app/controllers/spree/api/v2/storefront/dynamic_fields_controller.rb +42 -0
- data/app/controllers/spree/api/v2/storefront/guests_controller.rb +2 -0
- data/app/controllers/spree/api/v2/storefront/trip_places_controller.rb +29 -0
- data/app/controllers/spree/api/v2/storefront/trip_search_controller.rb +3 -1
- data/app/controllers/spree/api/v2/storefront/trips_controller.rb +24 -0
- data/app/controllers/spree_cm_commissioner/admin/products_controller_decorator.rb +14 -0
- data/app/interactors/spree_cm_commissioner/billing_address_creator.rb +33 -0
- data/app/interactors/spree_cm_commissioner/create_vendor.rb +11 -1
- data/app/interactors/spree_cm_commissioner/google_places_fetcher.rb +1 -0
- data/app/interactors/spree_cm_commissioner/intercity_taxi_order_creator.rb +106 -0
- data/app/interactors/spree_cm_commissioner/transit/draft_order_creator.rb +17 -4
- data/app/models/concerns/spree_cm_commissioner/taxon_kind.rb +1 -1
- data/app/models/concerns/spree_cm_commissioner/variant_options_concern.rb +1 -0
- data/app/models/spree_cm_commissioner/address_decorator.rb +17 -3
- data/app/models/spree_cm_commissioner/guest.rb +105 -56
- data/app/models/spree_cm_commissioner/guest_dynamic_field.rb +37 -27
- data/app/models/spree_cm_commissioner/order/address_book_decorator.rb +30 -12
- data/app/models/spree_cm_commissioner/order_decorator.rb +8 -1
- data/app/models/spree_cm_commissioner/place.rb +2 -0
- data/app/models/spree_cm_commissioner/product_decorator.rb +29 -0
- data/app/models/spree_cm_commissioner/saved_guest.rb +2 -0
- data/app/models/spree_cm_commissioner/taxon_decorator.rb +7 -0
- data/app/models/spree_cm_commissioner/trip.rb +4 -2
- data/app/models/spree_cm_commissioner/user_decorator.rb +1 -1
- data/app/models/spree_cm_commissioner/variant_options.rb +4 -0
- data/app/models/spree_cm_commissioner/vehicle.rb +2 -0
- data/app/models/spree_cm_commissioner/vendor_decorator.rb +3 -0
- data/app/overrides/spree/admin/products/_form/industry_taxons.html.erb.deface +26 -0
- data/app/overrides/spree/admin/products/_form/taxons.html.erb.deface +26 -0
- data/app/overrides/spree/admin/shared/sub_menu/_configuration/locations_tab.html.erb.deface +5 -0
- data/app/queries/spree_cm_commissioner/trip_query.rb +18 -18
- data/app/serializers/spree/v2/storefront/product_serializer_decorator.rb +2 -0
- data/app/serializers/{spree → spree_cm_commissioner}/v2/storefront/amenity_serializer.rb +2 -2
- data/app/serializers/spree_cm_commissioner/v2/storefront/block_serializer.rb +9 -0
- data/app/serializers/spree_cm_commissioner/v2/storefront/guest_serializer.rb +1 -3
- data/app/serializers/spree_cm_commissioner/v2/storefront/seat_layout_serializer.rb +12 -0
- data/app/serializers/spree_cm_commissioner/v2/storefront/seat_section_serializer.rb +11 -0
- data/app/serializers/spree_cm_commissioner/v2/storefront/trip_place_serializer.rb +10 -0
- data/app/serializers/{spree → spree_cm_commissioner}/v2/storefront/trip_query_result_serializer.rb +2 -2
- data/app/serializers/spree_cm_commissioner/v2/storefront/trip_result_serializer.rb +17 -0
- data/app/serializers/spree_cm_commissioner/v2/storefront/trip_serializer.rb +17 -0
- data/app/serializers/spree_cm_commissioner/v2/storefront/trip_stop_serializer.rb +9 -0
- data/app/serializers/spree_cm_commissioner/v2/storefront/trip_variant_serializer.rb +12 -0
- data/app/serializers/spree_cm_commissioner/v2/storefront/trip_vehicle_serializer.rb +16 -0
- data/app/serializers/{spree → spree_cm_commissioner}/v2/storefront/trip_vendor_serializer.rb +4 -1
- data/app/serializers/spree_cm_commissioner/v2/storefront/variant_block_serializer.rb +9 -0
- data/app/views/shared/_map.html.erb +5 -4
- data/app/views/spree/admin/locations/_form.html.erb +133 -0
- data/app/views/spree/admin/locations/edit.html.erb +11 -0
- data/app/views/spree/admin/locations/index.html.erb +67 -0
- data/app/views/spree/admin/locations/new.html.erb +11 -0
- data/config/locales/en.yml +2 -0
- data/config/routes.rb +4 -0
- data/db/migrate/20250812015522_remove_unique_indexes_from_cm_user_identity_providers.rb +8 -0
- data/db/migrate/20250812121745_add_data_fill_stage_phase_to_cm_guests.rb +5 -0
- data/db/migrate/20250814073854_add_call_to_action_to_spree_products.rb +5 -0
- data/lib/spree_cm_commissioner/transit/leg.rb +14 -0
- data/lib/spree_cm_commissioner/transit/seat_selection.rb +9 -1
- data/lib/spree_cm_commissioner/trip_query_result.rb +34 -0
- data/lib/spree_cm_commissioner/trip_result.rb +8 -1
- data/lib/spree_cm_commissioner/version.rb +1 -1
- metadata +31 -7
- data/app/serializers/spree/v2/storefront/trip_result_serializer.rb +0 -16
- data/app/serializers/spree/v2/storefront/trip_vehicle_serializer.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a6380c1548ccc1bbd8756837c2a3d4fc629613fa39f4f4949580c62f3c6fd97
|
4
|
+
data.tar.gz: 30371e0f95da706ac53f81141745cd36d88a9c631feb9de813fd6c2a00c4d641
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 362e42693a4d2ef816db1a3465efe55f789753d1ee1ffa9a9795dbe727be4b03b0088f9c888274589ddb604b76cc6143c7119388f9094a6b66c185e9f8b6b8dc
|
7
|
+
data.tar.gz: ab28c8455539f16d82b0c7c24fc74ab9f1947679e296b4b849785820fba719ed09aadfb0338c570304b1c874d83d6d20743cd40f176801c6bf529a90f3401bee
|
data/Gemfile.lock
CHANGED
@@ -0,0 +1,62 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class LocationsController < Spree::Admin::ResourceController
|
4
|
+
def index
|
5
|
+
@search = model_class.ransack(params[:q])
|
6
|
+
@locations = @search.result.order(created_at: :desc).page(params[:page]).per(15)
|
7
|
+
end
|
8
|
+
|
9
|
+
def create
|
10
|
+
if location_exist?
|
11
|
+
flash[:error] = I18n.t('location.already_exist')
|
12
|
+
render :new, status: :unprocessable_entity and return
|
13
|
+
end
|
14
|
+
|
15
|
+
location = model_class.new(permitted_resource_params)
|
16
|
+
|
17
|
+
if location.save
|
18
|
+
flash[:success] = flash_message_for(location, :successfully_created)
|
19
|
+
redirect_to spree.admin_locations_path
|
20
|
+
else
|
21
|
+
flash.now[:error] = location.errors.full_messages.to_sentence
|
22
|
+
render :new, status: :unprocessable_entity
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def location_exist?
|
29
|
+
SpreeCmCommissioner::Place.find_by(reference: permitted_resource_params[:reference])
|
30
|
+
end
|
31
|
+
|
32
|
+
# overrided
|
33
|
+
def model_class
|
34
|
+
SpreeCmCommissioner::Place
|
35
|
+
end
|
36
|
+
|
37
|
+
# override
|
38
|
+
def object_name
|
39
|
+
'spree_cm_commissioner_location'
|
40
|
+
end
|
41
|
+
|
42
|
+
def collection_url(options = {})
|
43
|
+
admin_locations_url(options)
|
44
|
+
end
|
45
|
+
|
46
|
+
def edit_object_url(object = nil, options = {})
|
47
|
+
edit_admin_location_url(object || @object, options)
|
48
|
+
end
|
49
|
+
|
50
|
+
# overrided
|
51
|
+
def new_object_url(options = {})
|
52
|
+
new_admin_location_url(options)
|
53
|
+
end
|
54
|
+
|
55
|
+
def permitted_resource_params
|
56
|
+
params.require(:spree_cm_commissioner_place).permit(:name, :lat, :lon, :formatted_address, :types, :reference,
|
57
|
+
:vicinity, :icon, :rating
|
58
|
+
)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -11,17 +11,11 @@ module Spree
|
|
11
11
|
types = ADDITIONAL_FIELDS + kyc_fields
|
12
12
|
|
13
13
|
resources = types.map do |type|
|
14
|
-
event_chart = SpreeCmCommissioner::EventChartQueries.new(
|
15
|
-
taxon_id: params[:taxon_id],
|
16
|
-
chart_type: type,
|
17
|
-
refreshed: params[:refreshed] || false
|
18
|
-
).call
|
19
|
-
|
20
14
|
# Create unique ID by using chart_type as the identifier
|
21
15
|
SpreeCmCommissioner::EventChart.new(
|
22
16
|
id: type.to_s,
|
23
|
-
chart_type:
|
24
|
-
product_charts:
|
17
|
+
chart_type: type,
|
18
|
+
product_charts: nil
|
25
19
|
)
|
26
20
|
end
|
27
21
|
|
@@ -41,10 +41,13 @@ module Spree
|
|
41
41
|
|
42
42
|
def struct_places_with_id(places)
|
43
43
|
places.map do |place|
|
44
|
+
short_addr = place.vicinity || place.formatted_address
|
45
|
+
name = "#{place.name} - #{short_addr}"
|
46
|
+
|
44
47
|
place_struct = Struct.new(:id, :name, :base_64_content)
|
45
48
|
place_struct.new(
|
46
49
|
id: place.reference,
|
47
|
-
name:
|
50
|
+
name: name,
|
48
51
|
base_64_content: Base64.strict_encode64(place.to_json)
|
49
52
|
)
|
50
53
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Storefront
|
5
|
+
class DynamicFieldsController < ::Spree::Api::V2::ResourceController
|
6
|
+
before_action :load_product
|
7
|
+
|
8
|
+
# override
|
9
|
+
def collection
|
10
|
+
return @collection if defined?(@collection)
|
11
|
+
|
12
|
+
dynamic_fields = @product.dynamic_fields
|
13
|
+
if params[:phase].present?
|
14
|
+
requested_phase = params[:phase].to_s
|
15
|
+
if SpreeCmCommissioner::DynamicField.data_fill_stages.key?(requested_phase)
|
16
|
+
dynamic_fields = dynamic_fields.where(data_fill_stage: requested_phase)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
@collection = dynamic_fields.order(:position)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def load_product
|
26
|
+
return render_error_payload({ error: 'product_id is required' }, 400) if params[:product_id].blank?
|
27
|
+
|
28
|
+
@product ||= Spree::Product.find(params[:product_id])
|
29
|
+
end
|
30
|
+
|
31
|
+
def collection_serializer
|
32
|
+
SpreeCmCommissioner::V2::Storefront::DynamicFieldSerializer
|
33
|
+
end
|
34
|
+
|
35
|
+
def model_class
|
36
|
+
SpreeCmCommissioner::DynamicField
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -29,6 +29,7 @@ module Spree
|
|
29
29
|
resource = scope.new(guest_params)
|
30
30
|
|
31
31
|
if resource.save
|
32
|
+
resource.save_and_move_to_next_stage
|
32
33
|
render_serialized_payload(201) { serialize_resource(resource) }
|
33
34
|
else
|
34
35
|
render_error_payload(resource.errors, 400)
|
@@ -54,6 +55,7 @@ module Spree
|
|
54
55
|
resource.save!
|
55
56
|
end
|
56
57
|
|
58
|
+
resource.save_and_move_to_next_stage
|
57
59
|
render_serialized_payload { serialize_resource(resource) }
|
58
60
|
rescue ActiveRecord::RecordInvalid => e
|
59
61
|
render_error_payload(e.record.errors, 400)
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Storefront
|
5
|
+
class TripPlacesController < ::Spree::Api::V2::ResourceController
|
6
|
+
# override
|
7
|
+
def collection
|
8
|
+
base_scope = model_class.joins(:location_vendor_places).distinct
|
9
|
+
|
10
|
+
if params[:q].present?
|
11
|
+
@search = base_scope.ransack(params[:q])
|
12
|
+
@search.result
|
13
|
+
else
|
14
|
+
base_scope
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def model_class
|
19
|
+
SpreeCmCommissioner::Place
|
20
|
+
end
|
21
|
+
|
22
|
+
def collection_serializer
|
23
|
+
SpreeCmCommissioner::V2::Storefront::TripPlaceSerializer
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -8,6 +8,8 @@ module Spree
|
|
8
8
|
origin_id: params[:origin_id],
|
9
9
|
destination_id: params[:destination_id],
|
10
10
|
date: params[:date],
|
11
|
+
vendor_id: params[:vendor_id],
|
12
|
+
number_of_guests: params[:number_of_guests],
|
11
13
|
params: params
|
12
14
|
).call
|
13
15
|
|
@@ -27,7 +29,7 @@ module Spree
|
|
27
29
|
end
|
28
30
|
|
29
31
|
def serialize_collection(collection)
|
30
|
-
serialized_data =
|
32
|
+
serialized_data = SpreeCmCommissioner::V2::Storefront::TripQueryResultSerializer.new(
|
31
33
|
collection,
|
32
34
|
include: default_resource_includes,
|
33
35
|
params: serializer_params
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Storefront
|
5
|
+
class TripsController < ::Spree::Api::V2::ResourceController
|
6
|
+
# override
|
7
|
+
def resource
|
8
|
+
model_class.find(params[:id])
|
9
|
+
end
|
10
|
+
|
11
|
+
# override
|
12
|
+
def model_class
|
13
|
+
SpreeCmCommissioner::Trip
|
14
|
+
end
|
15
|
+
|
16
|
+
# override
|
17
|
+
def resource_serializer
|
18
|
+
SpreeCmCommissioner::V2::Storefront::TripSerializer
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -5,6 +5,7 @@ module SpreeCmCommissioner
|
|
5
5
|
# spree update user sign_in_count
|
6
6
|
base.around_action :set_writing_role, only: %i[index]
|
7
7
|
base.after_action :set_tenant_after_update, only: %i[update]
|
8
|
+
base.before_action :merge_industry_taxons_into_taxons, only: [:update]
|
8
9
|
end
|
9
10
|
|
10
11
|
# Override
|
@@ -50,6 +51,19 @@ module SpreeCmCommissioner
|
|
50
51
|
|
51
52
|
protected
|
52
53
|
|
54
|
+
def merge_industry_taxons_into_taxons
|
55
|
+
return if params[:product].blank?
|
56
|
+
|
57
|
+
industry_ids = Array(params[:product][:industry_taxon_ids]).compact_blank
|
58
|
+
taxon_ids = Array(params[:product][:taxon_ids]).compact_blank
|
59
|
+
|
60
|
+
merged_ids = (taxon_ids + industry_ids).uniq
|
61
|
+
|
62
|
+
params[:product][:taxon_ids] = merged_ids
|
63
|
+
|
64
|
+
params[:product].delete(:industry_taxon_ids)
|
65
|
+
end
|
66
|
+
|
53
67
|
def find_resource
|
54
68
|
product_scope.with_deleted.includes(vendor: :tenant).friendly.find(params[:id])
|
55
69
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module SpreeCmCommissioner
|
2
|
+
class BillingAddressCreator < BaseInteractor
|
3
|
+
delegate :order, to: :context
|
4
|
+
|
5
|
+
def call
|
6
|
+
validate_context!
|
7
|
+
create_address
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def validate_context!
|
13
|
+
context.fail!(message: 'Order is missing') unless order
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_address
|
17
|
+
line_item = order.line_items.first
|
18
|
+
guest = line_item&.guests&.first
|
19
|
+
|
20
|
+
billing_address = order.build_bill_address(
|
21
|
+
firstname: guest&.first_name,
|
22
|
+
lastname: guest&.last_name,
|
23
|
+
phone: order.intel_phone_number || order.phone_number
|
24
|
+
)
|
25
|
+
|
26
|
+
context.fail!(message: billing_address.errors.full_messages.to_sentence) unless billing_address.save!
|
27
|
+
# Persist association on the order so subsequent reloads reflect the new billing address
|
28
|
+
order.update!(bill_address: billing_address)
|
29
|
+
|
30
|
+
context.billing_address = billing_address
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -8,6 +8,7 @@ module SpreeCmCommissioner
|
|
8
8
|
ActiveRecord::Base.transaction do
|
9
9
|
create_vendor
|
10
10
|
assign_vendor_to_user
|
11
|
+
create_logo
|
11
12
|
create_role
|
12
13
|
end
|
13
14
|
end
|
@@ -30,9 +31,18 @@ module SpreeCmCommissioner
|
|
30
31
|
context.user.vendors << @vendor
|
31
32
|
end
|
32
33
|
|
34
|
+
def create_logo
|
35
|
+
return if context.logo.blank?
|
36
|
+
|
37
|
+
vendor_logo = SpreeCmCommissioner::VendorLogo.create(viewable: @vendor, attachment: context.logo)
|
38
|
+
return if vendor_logo.persisted?
|
39
|
+
|
40
|
+
context.fail!(message: vendor_logo.errors.full_messages.join(', '))
|
41
|
+
end
|
42
|
+
|
33
43
|
def create_role
|
34
44
|
role = context.user.spree_roles.create(
|
35
|
-
name: "#{@vendor.
|
45
|
+
name: "#{@vendor.id}-organizer",
|
36
46
|
vendor_id: @vendor.id,
|
37
47
|
presentation: 'Organizer'
|
38
48
|
)
|
@@ -11,6 +11,7 @@ module SpreeCmCommissioner
|
|
11
11
|
types: json['types'].blank? ? '' : json['types'][0],
|
12
12
|
name: json['name'],
|
13
13
|
vicinity: json['vicinity'],
|
14
|
+
formatted_address: json['formatted_address'],
|
14
15
|
lat: json['geometry']['location']['lat'],
|
15
16
|
lon: json['geometry']['location']['lng'],
|
16
17
|
icon: json['icon'],
|
@@ -0,0 +1,106 @@
|
|
1
|
+
module SpreeCmCommissioner
|
2
|
+
class IntercityTaxiOrderCreator < BaseInteractor
|
3
|
+
delegate :trip, :raw_params, :current_vendor, to: :context
|
4
|
+
|
5
|
+
def call
|
6
|
+
validate_context!
|
7
|
+
|
8
|
+
ActiveRecord::Base.transaction do
|
9
|
+
build_order_params
|
10
|
+
create_order
|
11
|
+
create_billing_address
|
12
|
+
advance_order
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def validate_context!
|
19
|
+
context.fail!(message: 'Trip is missing') unless trip
|
20
|
+
context.fail!(message: 'Raw parameters are missing') unless raw_params
|
21
|
+
context.fail!(message: 'Current vendor is missing') unless current_vendor
|
22
|
+
end
|
23
|
+
|
24
|
+
def build_order_params
|
25
|
+
context.order_params = build_taxi_booking_params
|
26
|
+
end
|
27
|
+
|
28
|
+
def build_taxi_booking_params
|
29
|
+
permitted_params = raw_params.require(:order).permit(
|
30
|
+
:intel_phone_number,
|
31
|
+
:email,
|
32
|
+
:store_id,
|
33
|
+
line_items_attributes: [
|
34
|
+
:remark,
|
35
|
+
:variant_id,
|
36
|
+
:quantity,
|
37
|
+
:vendor_id,
|
38
|
+
:from_date,
|
39
|
+
:to_date,
|
40
|
+
:currency,
|
41
|
+
:direction,
|
42
|
+
:trip_id,
|
43
|
+
:pickup_place_name,
|
44
|
+
:drop_off_place_name,
|
45
|
+
:pickup_lat,
|
46
|
+
:pickup_lng,
|
47
|
+
:drop_off_lat,
|
48
|
+
:drop_off_lng,
|
49
|
+
:passenger_count,
|
50
|
+
:pickup_oob_confirmed,
|
51
|
+
:drop_off_oob_confirmed,
|
52
|
+
{ guests_attributes: %i[
|
53
|
+
first_name last_name gender age nationality_id
|
54
|
+
]
|
55
|
+
}
|
56
|
+
]
|
57
|
+
)
|
58
|
+
|
59
|
+
process_line_items_attributes(permitted_params)
|
60
|
+
permitted_params
|
61
|
+
end
|
62
|
+
|
63
|
+
def process_line_items_attributes(params)
|
64
|
+
date_param = raw_params[:date] || Date.current.to_s
|
65
|
+
|
66
|
+
params[:line_items_attributes].each_value do |item|
|
67
|
+
pickup_time_minutes = item[:from_date]
|
68
|
+
combined_datetime = "#{date_param} #{pickup_time_minutes}"
|
69
|
+
|
70
|
+
item[:from_date] = combined_datetime
|
71
|
+
item[:to_date] = combined_datetime
|
72
|
+
item[:variant_id] = load_variant
|
73
|
+
item[:vendor_id] = current_vendor.id
|
74
|
+
item[:quantity] = 1
|
75
|
+
item[:currency] = 'USD'
|
76
|
+
item[:direction] = 'outbound'
|
77
|
+
item[:trip_id] = trip.id
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def create_order
|
82
|
+
context.order = Spree::Order.create(context.order_params)
|
83
|
+
|
84
|
+
context.fail!(message: context.order.errors.full_messages.to_sentence) unless context.order.persisted?
|
85
|
+
end
|
86
|
+
|
87
|
+
def create_billing_address
|
88
|
+
return if context.order.bill_address.present?
|
89
|
+
|
90
|
+
SpreeCmCommissioner::BillingAddressCreator.call(
|
91
|
+
order: context.order
|
92
|
+
)
|
93
|
+
end
|
94
|
+
|
95
|
+
def advance_order
|
96
|
+
context.order.update_with_updater!
|
97
|
+
|
98
|
+
advance_service = Spree::Api::Dependencies.storefront_checkout_advance_service.constantize
|
99
|
+
advance_service.call(order: context.order)
|
100
|
+
end
|
101
|
+
|
102
|
+
def load_variant
|
103
|
+
trip.product.master.id
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -53,6 +53,8 @@ module SpreeCmCommissioner
|
|
53
53
|
|
54
54
|
legs.each do |leg|
|
55
55
|
leg_line_items = build_line_items_for!(leg, order, current_leg_date)
|
56
|
+
leg_line_items = insert_saved_guests_per_line_items_leg(leg_line_items)
|
57
|
+
|
56
58
|
all_line_items.concat(leg_line_items)
|
57
59
|
current_leg_date = leg_line_items.last.to_date.to_date if leg_line_items.any?
|
58
60
|
end
|
@@ -85,13 +87,11 @@ module SpreeCmCommissioner
|
|
85
87
|
}
|
86
88
|
)
|
87
89
|
|
88
|
-
|
89
|
-
|
90
|
-
line_item
|
90
|
+
build_guests_for!(line_item, seat_selections)
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
def
|
94
|
+
def build_guests_for!(line_item, seat_selections)
|
95
95
|
block_ids = seat_selections.flat_map(&:block_ids)
|
96
96
|
|
97
97
|
if block_ids.any? && block_ids.size != line_item.quantity
|
@@ -101,6 +101,19 @@ module SpreeCmCommissioner
|
|
101
101
|
Array.new(line_item.quantity) do |index|
|
102
102
|
line_item.guests.new(block_id: block_ids[index])
|
103
103
|
end
|
104
|
+
|
105
|
+
line_item
|
106
|
+
end
|
107
|
+
|
108
|
+
def insert_saved_guests_per_line_items_leg(line_items)
|
109
|
+
line_items.flat_map(&:guests).each_with_index do |guest, index|
|
110
|
+
context.saved_guests ||= []
|
111
|
+
context.saved_guests << SpreeCmCommissioner::SavedGuest.new if context.saved_guests[index].blank?
|
112
|
+
|
113
|
+
guest.saved_guest = context.saved_guests[index]
|
114
|
+
end
|
115
|
+
|
116
|
+
line_items
|
104
117
|
end
|
105
118
|
|
106
119
|
def calculate_line_item_duration!(date:, departure_time:, arrival_time:)
|
@@ -3,7 +3,7 @@ module SpreeCmCommissioner
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
enum kind: { category: 0, cms: 1, event: 2, occupation: 3, nationality: 4, organization: 5 }
|
6
|
+
enum kind: { category: 0, cms: 1, event: 2, occupation: 3, nationality: 4, organization: 5, transit: 6, industry: 7 }
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -8,6 +8,12 @@ module SpreeCmCommissioner
|
|
8
8
|
base.validates :country, presence: true, if: :require_country?
|
9
9
|
end
|
10
10
|
|
11
|
+
# override to return false instead of true
|
12
|
+
# in case no country
|
13
|
+
def require_zipcode?
|
14
|
+
country ? country.zipcode_required? : false
|
15
|
+
end
|
16
|
+
|
11
17
|
def require_address1?
|
12
18
|
false
|
13
19
|
end
|
@@ -22,9 +28,17 @@ module SpreeCmCommissioner
|
|
22
28
|
end
|
23
29
|
end
|
24
30
|
|
25
|
-
|
26
|
-
|
27
|
-
|
31
|
+
if Spree::Address.included_modules.exclude?(SpreeCmCommissioner::AddressDecorator)
|
32
|
+
keys = %i[address1 city country]
|
33
|
+
|
34
|
+
Spree::Address._validators.reject! { |key, _| keys.include?(key) }
|
35
|
+
Spree::Address._validate_callbacks.each do |c|
|
36
|
+
next unless c.filter.respond_to?(:attributes)
|
37
|
+
|
38
|
+
c.filter.attributes.delete(:address1)
|
39
|
+
c.filter.attributes.delete(:city)
|
40
|
+
c.filter.attributes.delete(:country)
|
41
|
+
end
|
28
42
|
|
29
43
|
Spree::Address.prepend(SpreeCmCommissioner::AddressDecorator)
|
30
44
|
end
|