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.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/app/controllers/spree/admin/locations_controller.rb +62 -0
  4. data/app/controllers/spree/api/v2/operator/event_charts_controller.rb +2 -8
  5. data/app/controllers/spree/api/v2/platform/places_controller.rb +4 -1
  6. data/app/controllers/spree/api/v2/storefront/dynamic_fields_controller.rb +42 -0
  7. data/app/controllers/spree/api/v2/storefront/guests_controller.rb +2 -0
  8. data/app/controllers/spree/api/v2/storefront/trip_places_controller.rb +29 -0
  9. data/app/controllers/spree/api/v2/storefront/trip_search_controller.rb +3 -1
  10. data/app/controllers/spree/api/v2/storefront/trips_controller.rb +24 -0
  11. data/app/controllers/spree_cm_commissioner/admin/products_controller_decorator.rb +14 -0
  12. data/app/interactors/spree_cm_commissioner/billing_address_creator.rb +33 -0
  13. data/app/interactors/spree_cm_commissioner/create_vendor.rb +11 -1
  14. data/app/interactors/spree_cm_commissioner/google_places_fetcher.rb +1 -0
  15. data/app/interactors/spree_cm_commissioner/intercity_taxi_order_creator.rb +106 -0
  16. data/app/interactors/spree_cm_commissioner/transit/draft_order_creator.rb +17 -4
  17. data/app/models/concerns/spree_cm_commissioner/taxon_kind.rb +1 -1
  18. data/app/models/concerns/spree_cm_commissioner/variant_options_concern.rb +1 -0
  19. data/app/models/spree_cm_commissioner/address_decorator.rb +17 -3
  20. data/app/models/spree_cm_commissioner/guest.rb +105 -56
  21. data/app/models/spree_cm_commissioner/guest_dynamic_field.rb +37 -27
  22. data/app/models/spree_cm_commissioner/order/address_book_decorator.rb +30 -12
  23. data/app/models/spree_cm_commissioner/order_decorator.rb +8 -1
  24. data/app/models/spree_cm_commissioner/place.rb +2 -0
  25. data/app/models/spree_cm_commissioner/product_decorator.rb +29 -0
  26. data/app/models/spree_cm_commissioner/saved_guest.rb +2 -0
  27. data/app/models/spree_cm_commissioner/taxon_decorator.rb +7 -0
  28. data/app/models/spree_cm_commissioner/trip.rb +4 -2
  29. data/app/models/spree_cm_commissioner/user_decorator.rb +1 -1
  30. data/app/models/spree_cm_commissioner/variant_options.rb +4 -0
  31. data/app/models/spree_cm_commissioner/vehicle.rb +2 -0
  32. data/app/models/spree_cm_commissioner/vendor_decorator.rb +3 -0
  33. data/app/overrides/spree/admin/products/_form/industry_taxons.html.erb.deface +26 -0
  34. data/app/overrides/spree/admin/products/_form/taxons.html.erb.deface +26 -0
  35. data/app/overrides/spree/admin/shared/sub_menu/_configuration/locations_tab.html.erb.deface +5 -0
  36. data/app/queries/spree_cm_commissioner/trip_query.rb +18 -18
  37. data/app/serializers/spree/v2/storefront/product_serializer_decorator.rb +2 -0
  38. data/app/serializers/{spree → spree_cm_commissioner}/v2/storefront/amenity_serializer.rb +2 -2
  39. data/app/serializers/spree_cm_commissioner/v2/storefront/block_serializer.rb +9 -0
  40. data/app/serializers/spree_cm_commissioner/v2/storefront/guest_serializer.rb +1 -3
  41. data/app/serializers/spree_cm_commissioner/v2/storefront/seat_layout_serializer.rb +12 -0
  42. data/app/serializers/spree_cm_commissioner/v2/storefront/seat_section_serializer.rb +11 -0
  43. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_place_serializer.rb +10 -0
  44. data/app/serializers/{spree → spree_cm_commissioner}/v2/storefront/trip_query_result_serializer.rb +2 -2
  45. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_result_serializer.rb +17 -0
  46. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_serializer.rb +17 -0
  47. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_stop_serializer.rb +9 -0
  48. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_variant_serializer.rb +12 -0
  49. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_vehicle_serializer.rb +16 -0
  50. data/app/serializers/{spree → spree_cm_commissioner}/v2/storefront/trip_vendor_serializer.rb +4 -1
  51. data/app/serializers/spree_cm_commissioner/v2/storefront/variant_block_serializer.rb +9 -0
  52. data/app/views/shared/_map.html.erb +5 -4
  53. data/app/views/spree/admin/locations/_form.html.erb +133 -0
  54. data/app/views/spree/admin/locations/edit.html.erb +11 -0
  55. data/app/views/spree/admin/locations/index.html.erb +67 -0
  56. data/app/views/spree/admin/locations/new.html.erb +11 -0
  57. data/config/locales/en.yml +2 -0
  58. data/config/routes.rb +4 -0
  59. data/db/migrate/20250812015522_remove_unique_indexes_from_cm_user_identity_providers.rb +8 -0
  60. data/db/migrate/20250812121745_add_data_fill_stage_phase_to_cm_guests.rb +5 -0
  61. data/db/migrate/20250814073854_add_call_to_action_to_spree_products.rb +5 -0
  62. data/lib/spree_cm_commissioner/transit/leg.rb +14 -0
  63. data/lib/spree_cm_commissioner/transit/seat_selection.rb +9 -1
  64. data/lib/spree_cm_commissioner/trip_query_result.rb +34 -0
  65. data/lib/spree_cm_commissioner/trip_result.rb +8 -1
  66. data/lib/spree_cm_commissioner/version.rb +1 -1
  67. metadata +31 -7
  68. data/app/serializers/spree/v2/storefront/trip_result_serializer.rb +0 -16
  69. 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: de104e725d2f24613de706e3246bdc7d316520fac6eb9b21789a6b2f2c45ab06
4
- data.tar.gz: df640f714603d5d38bb33ad1b7ded9f66ca5126610bf2d8bdeba79890e7ac090
3
+ metadata.gz: 0a6380c1548ccc1bbd8756837c2a3d4fc629613fa39f4f4949580c62f3c6fd97
4
+ data.tar.gz: 30371e0f95da706ac53f81141745cd36d88a9c631feb9de813fd6c2a00c4d641
5
5
  SHA512:
6
- metadata.gz: 782d5091a568ece086d739de4c0e8b9e1a00a97302b68d1cc982b8f9a5718fb5c4cfa928f9310427e69e11fd34211c54893104fbacbc8293d8033bf4d2213ad0
7
- data.tar.gz: 8aeca4178f0bf6ce687b9cd2dffd5d648db14f1c2a5537964e6e728a73801362495d370d32509029408ec7d9d5d8fe88094fbd3da392b61e68446f4ad58b5e68
6
+ metadata.gz: 362e42693a4d2ef816db1a3465efe55f789753d1ee1ffa9a9795dbe727be4b03b0088f9c888274589ddb604b76cc6143c7119388f9094a6b66c185e9f8b6b8dc
7
+ data.tar.gz: ab28c8455539f16d82b0c7c24fc74ab9f1947679e296b4b849785820fba719ed09aadfb0338c570304b1c874d83d6d20743cd40f176801c6bf529a90f3401bee
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (2.0.3.pre.pre5)
37
+ spree_cm_commissioner (2.0.3.pre.pre8)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -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: event_chart.chart_type,
24
- product_charts: event_chart.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: place.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 = Spree::V2::Storefront::TripQueryResultSerializer.new(
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.name.downcase.parameterize(separator: '-')}-organizer",
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
- build_guests!(line_item, seat_selections)
89
-
90
- line_item
90
+ build_guests_for!(line_item, seat_selections)
91
91
  end
92
92
  end
93
93
 
94
- def build_guests!(line_item, seat_selections)
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
@@ -29,6 +29,7 @@ module SpreeCmCommissioner
29
29
  :bib_pre_generation_on_create?,
30
30
  :seat_number_positions,
31
31
  :seat_number_layouts,
32
+ :seat_type,
32
33
  to: :options
33
34
  end
34
35
 
@@ -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
- unless Spree::Address.included_modules.include?(SpreeCmCommissioner::AddressDecorator)
26
- # remove validators for the specified attributes
27
- %i[address1 city country].each { |attr| Spree::Address._validators.delete(attr) }
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