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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/app/controllers/spree/admin/product_completion_steps_controller.rb +1 -17
  4. data/app/controllers/spree/admin/tenants_controller.rb +1 -1
  5. data/app/controllers/spree/api/v2/storefront/intercity_taxi/draft_orders_controller.rb +1 -0
  6. data/app/interactors/spree_cm_commissioner/create_ticket.rb +0 -2
  7. data/app/interactors/spree_cm_commissioner/host_matcher.rb +1 -1
  8. data/app/interactors/spree_cm_commissioner/vendor_creation_telegram_alert_sender.rb +1 -1
  9. data/app/mailers/spree/order_mailer_decorator.rb +9 -8
  10. data/app/models/concerns/spree_cm_commissioner/service_recommendations.rb +2 -2
  11. data/app/models/concerns/spree_cm_commissioner/store_preference.rb +0 -1
  12. data/app/models/spree_cm_commissioner/product_completion_step.rb +1 -4
  13. data/app/models/spree_cm_commissioner/product_completion_steps/social_entry_url.rb +19 -86
  14. data/app/models/spree_cm_commissioner/tenant.rb +1 -10
  15. data/app/models/spree_cm_commissioner/vendor_place.rb +1 -10
  16. data/app/overrides/spree/admin/stores/_form/store_preferences.html.erb.deface +0 -9
  17. data/app/queries/spree_cm_commissioner/trip_query.rb +17 -23
  18. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_vehicle_serializer.rb +1 -1
  19. data/app/services/spree_cm_commissioner/intercity_taxi_order/create.rb +0 -8
  20. data/app/services/spree_cm_commissioner/intercity_taxi_order/update.rb +45 -35
  21. data/app/views/shared/_asset_field.html.erb +0 -13
  22. data/app/views/spree/admin/product_completion_steps/_form.html.erb +2 -28
  23. data/app/views/spree/admin/tenants/_form.html.erb +1 -1
  24. data/config/initializers/spree_permitted_attributes.rb +0 -1
  25. data/config/locales/en.yml +0 -4
  26. data/config/locales/km.yml +61 -65
  27. data/config/routes.rb +0 -16
  28. data/lib/spree_cm_commissioner/version.rb +1 -1
  29. metadata +4 -12
  30. data/app/controllers/spree/api/v2/tenant/intercity_taxi/draft_orders_controller.rb +0 -41
  31. data/app/controllers/spree/api/v2/tenant/trip_places_controller.rb +0 -48
  32. data/app/controllers/spree/api/v2/tenant/trip_search_controller.rb +0 -103
  33. data/app/controllers/spree/api/v2/tenant/trips_controller.rb +0 -32
  34. data/app/models/spree_cm_commissioner/product_completion_step_banner.rb +0 -12
  35. data/app/views/spree/admin/product_completion_steps/_supported_fields.html.erb +0 -33
  36. data/db/migrate/20251119093000_add_tenant_id_to_cm_vendor_places.rb +0 -7
  37. 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: 26be0034848358f7b5de1d490862a398ed97a3078c8cf2fe57df4d7e6e3be5a9
4
- data.tar.gz: 37a918ae7deb8ea489361e890effc51c8b8534ab469cc04594f37495688e4ace
3
+ metadata.gz: 87608fab14f473c498987cb8ecf0793926b031a1368d9a1d03f05fc3bf03e819
4
+ data.tar.gz: 9472eaf172e1346757684e9c2b69cec671053927d1a99739f13d0eea1fcb17ce
5
5
  SHA512:
6
- metadata.gz: 8d6a2ddde23786c4a5bbc639d386d6337f8de52ddabd8b7da9149718d1ee61d7cf5b87ba2d0bfc63cf87f88abf9789adfd80465993c16a34a46f476045c79e22
7
- data.tar.gz: 6d06c0ea1b09c4e957d5b2c40bb6cdc5cc2eab7f2a93a5e61bd5efd45e559c9fb0f2a354c5221308432bdeb6fc43f4ab164ca9205e339a595bedd7d9b9b14145
6
+ metadata.gz: b3da7fbad39575ce43d6b39e088c24ec878095d88a6652e4dd07d87ae0b474403ef368dba1233e0a2d3a2084a03c45d1932c20eee21ee6a65f99e0cb8e4d1e1d
7
+ data.tar.gz: 92f4f8a8a446c765568b23b8a1183f7f2f83a499a608a59a34ab315314bf4ea256fbb8264da0da2e80ad0dab527a9fed4c8498a9c77342e186f61386dfad735b
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (2.3.1.pre.pre2)
37
+ spree_cm_commissioner (2.3.1)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -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
- @permitted_resource_params = params.require(key).permit(permit_keys)
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
@@ -1,7 +1,7 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class TenantsController < Spree::Admin::ResourceController
4
- before_action :load_vector_icons, only: %i[new edit create update]
4
+ before_action :load_vector_icons, only: %i[new edit]
5
5
 
6
6
  # override
7
7
  def collection
@@ -20,6 +20,7 @@ module Spree
20
20
 
21
21
  def update
22
22
  order = SpreeCmCommissioner::IntercityTaxiOrder::Update.call(
23
+ order_number: params[:id],
23
24
  params: params
24
25
  )
25
26
 
@@ -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,
@@ -22,7 +22,7 @@ module SpreeCmCommissioner
22
22
  end
23
23
 
24
24
  def find_tenant(normalized_host)
25
- SpreeCmCommissioner::Tenant.find_by(host: normalized_host)
25
+ SpreeCmCommissioner::Tenant.find_by(host: "https://#{normalized_host}")
26
26
  end
27
27
  end
28
28
  end
@@ -22,7 +22,7 @@ module SpreeCmCommissioner
22
22
  end
23
23
 
24
24
  def admin_chat_id
25
- Spree::Store.default&.preferred_telegram_new_vendor_alert_chat_id
25
+ ENV.fetch('EXCEPTION_NOTIFIER_TELEGRAM_CHANNEL_ID', nil)
26
26
  end
27
27
  end
28
28
  end
@@ -37,21 +37,22 @@ module Spree
37
37
 
38
38
  def setup_tenant_and_store
39
39
  @tenant = @order.tenant
40
- @current_store = @order.store
41
- return if @tenant.blank?
42
-
43
- @brand_color = @tenant.preferences[:brand_primary_color]
44
- @vendor_logo_url = @tenant.active_vendor&.logo&.original_url
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
- store_name = @tenant.present? ? @tenant.name : @current_store&.name
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? ? @tenant.url : @current_store.url
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?(:url)
53
+ return default_link unless tenant.respond_to?(:host)
54
54
 
55
- site = tenant.url.to_s.strip
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
- def replace_order_placeholders(url, line_item)
127
- return url if line_item.order.blank?
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
- url
135
- end
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
- url
146
- end
147
-
148
- def replace_line_item_placeholders(url, line_item)
149
- LINE_ITEM_ALLOWED_FIELDS.each do |field|
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 replace_guest_placeholders(url, line_item)
158
- return url if line_item.guests.blank?
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
- url
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, presence: true, uniqueness: true,
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: { venue: 0, branch: 1, stop: 2, location: 3 }
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, :tenant_id, :number_of_guests, :route_type, :params
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, tenant_id: nil, number_of_guests: nil, params: {}) # rubocop:disable Metrics/ParameterLists
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) if vendor_id.present?
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
- scope = SpreeCmCommissioner::Trip
62
- .select(<<~SQL.squish)
63
- cm_trips.*,
64
- boarding.departure_time AS boarding_departure_time,
65
- boarding.stop_place_id AS boarding_stop_id, boarding.stop_name AS boarding_stop_name,
66
- drop_off.stop_name AS drop_off_stop_name, drop_off.stop_place_id AS drop_off_stop_id,
67
- drop_off.arrival_time AS drop_off_arrival_time,
68
- COALESCE(iv.quantity_available, 0) AS quantity_available,
69
- COALESCE(iv.max_capacity, 0) AS max_capacity,
70
- origin_places.name AS origin_place_name, dest_places.name AS destination_place_name,
71
- prices.amount AS amount, prices.compare_at_amount AS compare_at_amount,
72
- prices.currency AS currency
73
- SQL
74
- .includes(vendor: :logo, vehicle: :option_values)
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, :number_of_seats
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 = find_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 find_order!
30
- raise(ArgumentError, 'Order token is required') if order_token.blank?
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
- def order_token
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
- line_items_attributes: %i[
42
- id
43
- pickup_place_name
44
- drop_off_place_name
45
- from_date
46
- pickup_lat
47
- pickup_lng
48
- pickup_oob_confirmed
49
- drop_off_lat
50
- drop_off_lng
51
- drop_off_oob_confirmed
52
- distance_km
53
- ordered_points
54
- base_km
55
- detour_pickup_km
56
- detour_dropoff_km
57
- extra_pickup_km
58
- extra_dropoff_km
59
- extra_pickup_charge_usd
60
- extra_dropoff_charge_usd
61
- estimated_time_minutes
62
- remark
63
- passenger_count
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 %>