spree_cm_commissioner 2.3.0.pre.pre21 → 2.3.1.pre.pre1
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 +17 -1
- data/app/controllers/spree/admin/tenants_controller.rb +1 -1
- data/app/controllers/spree/api/v2/storefront/intercity_taxi/draft_orders_controller.rb +0 -1
- data/app/controllers/spree/api/v2/tenant/intercity_taxi/draft_orders_controller.rb +41 -0
- data/app/controllers/spree/api/v2/tenant/trip_places_controller.rb +48 -0
- data/app/controllers/spree/api/v2/tenant/trip_search_controller.rb +103 -0
- data/app/controllers/spree/api/v2/tenant/trips_controller.rb +32 -0
- data/app/interactors/spree_cm_commissioner/create_ticket.rb +2 -0
- 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 +8 -9
- data/app/models/concerns/spree_cm_commissioner/service_recommendations.rb +2 -2
- data/app/models/concerns/spree_cm_commissioner/store_preference.rb +1 -0
- data/app/models/spree_cm_commissioner/product_completion_step.rb +4 -1
- data/app/models/spree_cm_commissioner/product_completion_step_banner.rb +12 -0
- data/app/models/spree_cm_commissioner/product_completion_steps/social_entry_url.rb +86 -19
- data/app/models/spree_cm_commissioner/tenant.rb +10 -1
- data/app/models/spree_cm_commissioner/vendor_place.rb +10 -1
- data/app/overrides/spree/admin/stores/_form/store_preferences.html.erb.deface +9 -0
- data/app/queries/spree_cm_commissioner/trip_query.rb +23 -17
- 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 +8 -0
- data/app/services/spree_cm_commissioner/intercity_taxi_order/update.rb +35 -45
- data/app/views/shared/_asset_field.html.erb +13 -0
- data/app/views/spree/admin/product_completion_steps/_form.html.erb +28 -2
- data/app/views/spree/admin/product_completion_steps/_supported_fields.html.erb +33 -0
- data/app/views/spree/admin/tenants/_form.html.erb +1 -1
- data/config/initializers/spree_permitted_attributes.rb +1 -0
- data/config/locales/en.yml +4 -0
- data/config/locales/km.yml +65 -61
- data/config/routes.rb +16 -0
- data/db/migrate/20251119093000_add_tenant_id_to_cm_vendor_places.rb +7 -0
- data/lib/spree_cm_commissioner/test_helper/factories/product_completion_step_banner_factory.rb +7 -0
- data/lib/spree_cm_commissioner/version.rb +1 -1
- metadata +10 -2
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
module SpreeCmCommissioner
|
|
2
2
|
class TripQuery
|
|
3
|
-
attr_reader :origin_id, :destination_id, :date, :vendor_id, :number_of_guests, :route_type, :params
|
|
3
|
+
attr_reader :origin_id, :destination_id, :date, :vendor_id, :tenant_id, :number_of_guests, :route_type, :params
|
|
4
4
|
|
|
5
|
-
def initialize(origin_id:, destination_id:, date:, route_type: nil, vendor_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, tenant_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
|
|
10
11
|
@number_of_guests = number_of_guests || 1
|
|
11
12
|
@route_type = route_type
|
|
12
13
|
@params = params
|
|
@@ -36,8 +37,9 @@ module SpreeCmCommissioner
|
|
|
36
37
|
|
|
37
38
|
def direct_trips
|
|
38
39
|
result = trip_scope
|
|
39
|
-
result = result.where({ vendor_id: vendor_id }.compact)
|
|
40
|
+
result = result.where({ vendor_id: vendor_id }.compact) if vendor_id.present?
|
|
40
41
|
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?
|
|
41
43
|
paginate(result)
|
|
42
44
|
end
|
|
43
45
|
|
|
@@ -56,20 +58,24 @@ module SpreeCmCommissioner
|
|
|
56
58
|
private
|
|
57
59
|
|
|
58
60
|
def trip_scope
|
|
59
|
-
SpreeCmCommissioner::Trip
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
|
73
79
|
.joins(<<~SQL.squish)
|
|
74
80
|
INNER JOIN cm_trip_stops AS boarding ON boarding.trip_id = cm_trips.id AND boarding.stop_type = 0
|
|
75
81
|
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, :number_of_seats
|
|
8
8
|
|
|
9
9
|
has_many :vehicle_photos, serializer: ::SpreeCmCommissioner::V2::Storefront::AssetSerializer
|
|
10
10
|
has_many :amenities, serializer: ::SpreeCmCommissioner::V2::Storefront::AmenitySerializer
|
|
@@ -42,6 +42,7 @@ module SpreeCmCommissioner
|
|
|
42
42
|
)
|
|
43
43
|
|
|
44
44
|
build_guests_for!(line_item, quantity)
|
|
45
|
+
assign_saved_guests_to_line_item(line_item)
|
|
45
46
|
|
|
46
47
|
order.save!
|
|
47
48
|
order.update_with_updater!
|
|
@@ -62,6 +63,13 @@ module SpreeCmCommissioner
|
|
|
62
63
|
def build_guests_for!(line_item, qty)
|
|
63
64
|
Array.new(qty) { line_item.guests.new }
|
|
64
65
|
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
|
|
65
73
|
end
|
|
66
74
|
end
|
|
67
75
|
end
|
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
module SpreeCmCommissioner
|
|
2
2
|
module IntercityTaxiOrder
|
|
3
3
|
class Update
|
|
4
|
-
attr_reader :
|
|
4
|
+
attr_reader :params
|
|
5
5
|
|
|
6
|
-
def self.call(
|
|
7
|
-
new(
|
|
6
|
+
def self.call(params:)
|
|
7
|
+
new(params: params).call
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
def initialize(
|
|
11
|
-
@order_number = order_number
|
|
10
|
+
def initialize(params:)
|
|
12
11
|
@params = ensure_parameters(params)
|
|
13
12
|
end
|
|
14
13
|
|
|
15
14
|
def call
|
|
16
|
-
order =
|
|
15
|
+
order = find_order!
|
|
17
16
|
order.update!(order_params)
|
|
18
17
|
|
|
19
|
-
create_billing_address_if_missing(order)
|
|
20
|
-
|
|
21
18
|
order
|
|
22
19
|
end
|
|
23
20
|
|
|
@@ -29,48 +26,41 @@ module SpreeCmCommissioner
|
|
|
29
26
|
::ActionController::Parameters.new(params)
|
|
30
27
|
end
|
|
31
28
|
|
|
32
|
-
def
|
|
33
|
-
|
|
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
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
def order_token
|
|
36
|
+
params[:order_token]
|
|
36
37
|
end
|
|
37
38
|
|
|
38
39
|
def order_params
|
|
39
40
|
params.require(:order).permit(
|
|
40
|
-
:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
}
|
|
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
|
|
74
64
|
]
|
|
75
65
|
)
|
|
76
66
|
end
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
<%# :asset %>
|
|
4
4
|
<%# :remove_url, optional %>
|
|
5
5
|
<%# :classes, optional %>
|
|
6
|
+
<%# :aspect_ratio, optional %>
|
|
7
|
+
<%# :size_info, optional %>
|
|
6
8
|
<%# :form %>
|
|
7
9
|
<%# :required, optional, default: false %>
|
|
8
10
|
|
|
@@ -16,6 +18,17 @@
|
|
|
16
18
|
class: 'rounded border mb-4 mw-100',
|
|
17
19
|
style: 'max-height: 100px') if asset.present? && asset.attachment.present? %>
|
|
18
20
|
|
|
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
|
+
|
|
19
32
|
<div data-hook="file" class="form-group">
|
|
20
33
|
<%= form.label field, label || Spree.t(field) %>
|
|
21
34
|
<%= form.file_field field, required: required %>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<div data-hook="admin_product_completion_step_form_fields">
|
|
2
2
|
<div data-hook="product_completion_step" class="row">
|
|
3
3
|
<div class="col-12 col-md-6">
|
|
4
|
-
<div class="
|
|
4
|
+
<div class="mb-3 card">
|
|
5
5
|
<div class="card-header">
|
|
6
6
|
<h5 class="mb-0"><%= Spree.t(:settings) %></h5>
|
|
7
7
|
</div>
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
</div>
|
|
33
33
|
|
|
34
34
|
<div class="col-12 col-md-6">
|
|
35
|
-
<div class="
|
|
35
|
+
<div class="mb-3 card">
|
|
36
36
|
<div class="card-header">
|
|
37
37
|
<h5 class="mb-0"><%= Spree.t(:completion_settings) %></h5>
|
|
38
38
|
</div>
|
|
@@ -49,6 +49,32 @@
|
|
|
49
49
|
</div>
|
|
50
50
|
</div>
|
|
51
51
|
</div>
|
|
52
|
+
|
|
53
|
+
<div class="mb-3 card">
|
|
54
|
+
<div class="card-header">
|
|
55
|
+
<h5 class="mb-0"><%= Spree.t(:banner) %></h5>
|
|
56
|
+
</div>
|
|
57
|
+
<div class="card-body">
|
|
58
|
+
<%= render 'shared/asset_field',
|
|
59
|
+
field: :banner,
|
|
60
|
+
label: Spree.t(:banner),
|
|
61
|
+
asset: @object.banner,
|
|
62
|
+
remove_url: (@object.banner.present? ? remove_banner_admin_product_product_completion_step_url(@object.product, @object) : nil),
|
|
63
|
+
form: f,
|
|
64
|
+
size_info: 'Min: 480x270, Max: 960x540',
|
|
65
|
+
aspect_ratio: '16x9',
|
|
66
|
+
classes: ['col-md-12']
|
|
67
|
+
%>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
52
70
|
</div>
|
|
53
71
|
</div>
|
|
72
|
+
|
|
73
|
+
<% if @object.is_a?(SpreeCmCommissioner::ProductCompletionSteps::SocialEntryUrl) %>
|
|
74
|
+
<div class="row mt-3">
|
|
75
|
+
<div class="col-12">
|
|
76
|
+
<%= render 'supported_fields' %>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
<% end %>
|
|
54
80
|
</div>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<div class="mb-3 card">
|
|
2
|
+
<div class="card-header">
|
|
3
|
+
<h5 class="mb-0">Supported Placeholder Fields</h5>
|
|
4
|
+
</div>
|
|
5
|
+
<div class="card-body">
|
|
6
|
+
<p class="text-muted mb-3">Use these placeholders in your entry point link template:</p>
|
|
7
|
+
|
|
8
|
+
<% if @object.is_a?(SpreeCmCommissioner::ProductCompletionSteps::SocialEntryUrl) && @object.supported_fields.present? %>
|
|
9
|
+
<% @object.supported_fields.each do |category, fields| %>
|
|
10
|
+
<div class="mb-3">
|
|
11
|
+
<h6 class="fw-bold text-capitalize">
|
|
12
|
+
<%= category.to_s.humanize %>
|
|
13
|
+
<span class="badge bg-secondary"><%= fields.count %></span>
|
|
14
|
+
</h6>
|
|
15
|
+
<div class="field-list">
|
|
16
|
+
<% fields.each do |field| %>
|
|
17
|
+
<div class="field-item d-inline-block me-2 mb-2">
|
|
18
|
+
<code class="bg-light p-2 rounded">
|
|
19
|
+
{<%= category %><%= category == :guests ? '[index]' : '' %>.<%=field %>}
|
|
20
|
+
</code>
|
|
21
|
+
</div>
|
|
22
|
+
<% end %>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
<% end %>
|
|
26
|
+
|
|
27
|
+
<div class="alert alert-info mt-3">
|
|
28
|
+
<strong>Example:</strong><br>
|
|
29
|
+
<code>https://example.com?order={order.number}&name={bill_address.first_name}&guest={guests[0].first_name}</code>
|
|
30
|
+
</div>
|
|
31
|
+
<% end %>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
<div class="col-12">
|
|
37
37
|
<%= f.field_container :host do %>
|
|
38
38
|
<%= f.label :host, raw(Spree.t(:host) + required_span_tag) %>
|
|
39
|
-
<%= f.text_field :host, required: true, class: 'form-control', placeholder: '
|
|
39
|
+
<%= f.text_field :host, required: true, class: 'form-control', placeholder: 'example.com' %>
|
|
40
40
|
<% if f.object.errors[:host].any? %>
|
|
41
41
|
<div class="error text-danger"><%= f.object.errors[:host].join(', ') %></div>
|
|
42
42
|
<% end %>
|
|
@@ -48,6 +48,7 @@ module Spree
|
|
|
48
48
|
:preferred_sms_sender_id,
|
|
49
49
|
:preferred_telegram_order_alert_chat_id,
|
|
50
50
|
:preferred_telegram_order_request_alert_chat_id,
|
|
51
|
+
:preferred_telegram_new_vendor_alert_chat_id,
|
|
51
52
|
:preferred_assetlinks,
|
|
52
53
|
:preferred_apple_app_site_association,
|
|
53
54
|
{ default_notification_image_attributes: {} },
|
data/config/locales/en.yml
CHANGED
data/config/locales/km.yml
CHANGED
|
@@ -370,6 +370,10 @@ km:
|
|
|
370
370
|
attributes:
|
|
371
371
|
exception_rules:
|
|
372
372
|
invalid_json: "Format មិនត្រឹមត្រូវ"
|
|
373
|
+
spree_cm_commissioner/tenant:
|
|
374
|
+
attributes:
|
|
375
|
+
host:
|
|
376
|
+
format: "មិនអនុញ្ញាតឱ្យបញ្ចូលឈ្មោះដែលភ្ជាប់ជាមួយ (http:// ឬ https://)"
|
|
373
377
|
|
|
374
378
|
mail:
|
|
375
379
|
order_mailer:
|
|
@@ -469,64 +473,64 @@ km:
|
|
|
469
473
|
|
|
470
474
|
blazer:
|
|
471
475
|
columns:
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
476
|
+
"No.": "លេខរៀង"
|
|
477
|
+
"Reservation No.": "លេខកក់"
|
|
478
|
+
"Direction": "ទិសដៅ"
|
|
479
|
+
"Vehicle type": "ប្រភេទយានយន្ត"
|
|
480
|
+
"Seller": "អ្នកលក់"
|
|
481
|
+
"Paid to": "បង់ទៅ"
|
|
482
|
+
"Branch": "សាខា"
|
|
483
|
+
"Gateway": "ច្រកទ្វារ"
|
|
484
|
+
"Departure": "ចេញដំណើរ"
|
|
485
|
+
"Issued": "ចេញឲ្យ"
|
|
486
|
+
"Paid": "បានបង់"
|
|
487
|
+
"# of seats": "ចំនួនកៅអី"
|
|
488
|
+
"Source": "ប្រភព"
|
|
489
|
+
"Status": "ស្ថានភាព"
|
|
490
|
+
"Fare": "តម្លៃឈ្នួល"
|
|
491
|
+
"Discount": "ការបញ្ចុះតម្លៃ"
|
|
492
|
+
"Commission": "កម្រៃជើងសារ"
|
|
493
|
+
"Amount": "ចំនួនទឹកប្រាក់"
|
|
494
|
+
"Metric": "រង្វាស់"
|
|
495
|
+
"Value": "តម្លៃ"
|
|
496
|
+
"Group": "ក្រុម"
|
|
497
|
+
"Orders": "ការបញ្ជាទិញ"
|
|
498
|
+
"Passengers": "អ្នកដំណើរ"
|
|
499
|
+
"Total fare": "តម្លៃឈ្នួលសរុប"
|
|
500
|
+
"Total discount": "ការបញ្ចុះតម្លៃសរុប"
|
|
501
|
+
"Total commission": "កម្រៃជើងសារសរុប"
|
|
502
|
+
"Total amount": "ចំនួនទឹកប្រាក់សរុប"
|
|
503
|
+
"Trip ID": "លេខសម្គាល់ជើងដំណើរ"
|
|
504
|
+
"Route": "ផ្លូវ"
|
|
505
|
+
"Origin": "ទីតាំងដើម"
|
|
506
|
+
"Destination": "ទីតាំងគោលដៅ"
|
|
507
|
+
"Departure Time": "ម៉ោងចេញដំណើរ"
|
|
508
|
+
"Vehicle": "យានយន្ត"
|
|
509
|
+
"Total Seats": "ចំនួនកៅអីសរុប"
|
|
510
|
+
"Bookings": "ការកក់"
|
|
511
|
+
"Seats Sold": "កៅអីលក់បាន"
|
|
512
|
+
"Occupancy %": "ភាគរយនៃការកាន់កាប់"
|
|
513
|
+
"Total Revenue": "ចំណូលសរុប"
|
|
514
|
+
"Avg Ticket Price": "តម្លៃសំបុត្រជាមធ្យម"
|
|
515
|
+
"Date": "កាលបរិច្ឆេទ"
|
|
516
|
+
"Time": "ម៉ោង"
|
|
517
|
+
"From": "ពី"
|
|
518
|
+
"To": "ទៅ"
|
|
519
|
+
"Capacity": "ចំណុះ"
|
|
520
|
+
"Available": "ទំនេរ"
|
|
521
|
+
"Filled %": "ភាគរយនៃការបំពេញ"
|
|
522
|
+
"Vehicle Code": "លេខកូដយានយន្ត"
|
|
523
|
+
"Plate": "ស្លាកលេខ"
|
|
524
|
+
"Type": "ប្រភេទ"
|
|
525
|
+
"Total Trips": "ចំនួនជើងដំណើរសរុប"
|
|
526
|
+
"Trips with Bookings": "ជើងដំណើរមានការកក់"
|
|
527
|
+
"Total Bookings": "ចំនួនការកក់សរុប"
|
|
528
|
+
"Total Passengers": "ចំនួនអ្នកដំណើរសរុប"
|
|
529
|
+
"Avg Occupancy %": "ភាគរយនៃការកាន់កាប់ជាមធ្យម"
|
|
530
|
+
"Lead Time": "រយៈពេលនៃការរង់ចាំ"
|
|
531
|
+
"Revenue": "ចំណូល"
|
|
532
|
+
"Avg Days in Advance": "ចំនួនថ្ងៃជាមធ្យមមុន"
|
|
533
|
+
"Current Period": "រយៈពេលបច្ចុប្បន្ន"
|
|
534
|
+
"Previous Period": "រយៈពេលមុន"
|
|
535
|
+
"Change": "បំលាស់ប្តូរ"
|
|
536
|
+
"Change %": "ភាគរយនៃបំលាស់ប្តូរ"
|
data/config/routes.rb
CHANGED
|
@@ -163,6 +163,10 @@ Spree::Core::Engine.add_routes do
|
|
|
163
163
|
collection do
|
|
164
164
|
post :update_positions
|
|
165
165
|
end
|
|
166
|
+
|
|
167
|
+
member do
|
|
168
|
+
delete :remove_banner
|
|
169
|
+
end
|
|
166
170
|
end
|
|
167
171
|
|
|
168
172
|
resources :product_places do
|
|
@@ -546,6 +550,18 @@ Spree::Core::Engine.add_routes do
|
|
|
546
550
|
resources :guest_card_classes
|
|
547
551
|
resources :tickets, only: :index
|
|
548
552
|
|
|
553
|
+
resources :trip_places, only: :index
|
|
554
|
+
resources :trip_search, only: [:index]
|
|
555
|
+
resources :trips, only: %i[show]
|
|
556
|
+
|
|
557
|
+
namespace :intercity_taxi do
|
|
558
|
+
resources :draft_orders, only: [:create] do
|
|
559
|
+
collection do
|
|
560
|
+
patch :update
|
|
561
|
+
end
|
|
562
|
+
end
|
|
563
|
+
end
|
|
564
|
+
|
|
549
565
|
resource :reset_passwords, only: [:update]
|
|
550
566
|
resource :change_passwords, only: [:update]
|
|
551
567
|
resource :user_contacts, only: [:update]
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
class AddTenantIdToCmVendorPlaces < ActiveRecord::Migration[7.0]
|
|
2
|
+
def change
|
|
3
|
+
add_column :cm_vendor_places, :tenant_id, :integer, if_not_exists: true
|
|
4
|
+
add_index :cm_vendor_places, :tenant_id, if_not_exists: true
|
|
5
|
+
add_index :cm_vendor_places, %i[tenant_id vendor_id], if_not_exists: true, name: 'index_cm_vendor_places_on_tenant_and_vendor'
|
|
6
|
+
end
|
|
7
|
+
end
|
data/lib/spree_cm_commissioner/test_helper/factories/product_completion_step_banner_factory.rb
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
FactoryBot.define do
|
|
2
|
+
factory :cm_product_completion_step_banner, class: SpreeCmCommissioner::ProductCompletionStepBanner do
|
|
3
|
+
viewable_type { 'SpreeCmCommissioner::ProductCompletionStep' }
|
|
4
|
+
viewable_id { nil }
|
|
5
|
+
attachment { Rack::Test::UploadedFile.new(Spree::Core::Engine.root.join('spec', 'fixtures', 'files', 'icon_256x256.png'), 'image/*') }
|
|
6
|
+
end
|
|
7
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: spree_cm_commissioner
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.3.
|
|
4
|
+
version: 2.3.1.pre.pre1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- You
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2025-11-
|
|
11
|
+
date: 2025-11-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: spree
|
|
@@ -1013,6 +1013,7 @@ files:
|
|
|
1013
1013
|
- app/controllers/spree/api/v2/tenant/guests_controller.rb
|
|
1014
1014
|
- app/controllers/spree/api/v2/tenant/homepage_sections_controller.rb
|
|
1015
1015
|
- app/controllers/spree/api/v2/tenant/id_cards_controller.rb
|
|
1016
|
+
- app/controllers/spree/api/v2/tenant/intercity_taxi/draft_orders_controller.rb
|
|
1016
1017
|
- app/controllers/spree/api/v2/tenant/line_items_controller.rb
|
|
1017
1018
|
- app/controllers/spree/api/v2/tenant/notifications_controller.rb
|
|
1018
1019
|
- app/controllers/spree/api/v2/tenant/order_histories_controller.rb
|
|
@@ -1025,6 +1026,9 @@ files:
|
|
|
1025
1026
|
- app/controllers/spree/api/v2/tenant/s3_signed_urls_controller.rb
|
|
1026
1027
|
- app/controllers/spree/api/v2/tenant/taxons_controller.rb
|
|
1027
1028
|
- app/controllers/spree/api/v2/tenant/tickets_controller.rb
|
|
1029
|
+
- app/controllers/spree/api/v2/tenant/trip_places_controller.rb
|
|
1030
|
+
- app/controllers/spree/api/v2/tenant/trip_search_controller.rb
|
|
1031
|
+
- app/controllers/spree/api/v2/tenant/trips_controller.rb
|
|
1028
1032
|
- app/controllers/spree/api/v2/tenant/user_account_linkages_controller.rb
|
|
1029
1033
|
- app/controllers/spree/api/v2/tenant/user_contacts_controller.rb
|
|
1030
1034
|
- app/controllers/spree/api/v2/tenant/user_device_tokens_controller.rb
|
|
@@ -1484,6 +1488,7 @@ files:
|
|
|
1484
1488
|
- app/models/spree_cm_commissioner/place.rb
|
|
1485
1489
|
- app/models/spree_cm_commissioner/price_decorator.rb
|
|
1486
1490
|
- app/models/spree_cm_commissioner/product_completion_step.rb
|
|
1491
|
+
- app/models/spree_cm_commissioner/product_completion_step_banner.rb
|
|
1487
1492
|
- app/models/spree_cm_commissioner/product_completion_steps/chatrace_telegram.rb
|
|
1488
1493
|
- app/models/spree_cm_commissioner/product_completion_steps/social_entry_url.rb
|
|
1489
1494
|
- app/models/spree_cm_commissioner/product_decorator.rb
|
|
@@ -2101,6 +2106,7 @@ files:
|
|
|
2101
2106
|
- app/views/spree/admin/orders/notifications.html.erb
|
|
2102
2107
|
- app/views/spree/admin/product_commissions/index.html.erb
|
|
2103
2108
|
- app/views/spree/admin/product_completion_steps/_form.html.erb
|
|
2109
|
+
- app/views/spree/admin/product_completion_steps/_supported_fields.html.erb
|
|
2104
2110
|
- app/views/spree/admin/product_completion_steps/edit.html.erb
|
|
2105
2111
|
- app/views/spree/admin/product_completion_steps/index.html.erb
|
|
2106
2112
|
- app/views/spree/admin/product_completion_steps/new.html.erb
|
|
@@ -2850,6 +2856,7 @@ files:
|
|
|
2850
2856
|
- db/migrate/20251009073040_add_lock_version_to_cm_routes.rb
|
|
2851
2857
|
- db/migrate/20251009073929_add_lock_version_to_cm_vendor_routes.rb
|
|
2852
2858
|
- db/migrate/20251113081853_add_index_to_spree_orders_updated_at.rb
|
|
2859
|
+
- db/migrate/20251119093000_add_tenant_id_to_cm_vendor_places.rb
|
|
2853
2860
|
- docker-compose.yml
|
|
2854
2861
|
- docs/api/scoped-access-token-endpoints.md
|
|
2855
2862
|
- docs/option_types/attr_types.md
|
|
@@ -2922,6 +2929,7 @@ files:
|
|
|
2922
2929
|
- lib/spree_cm_commissioner/test_helper/factories/permission.rb
|
|
2923
2930
|
- lib/spree_cm_commissioner/test_helper/factories/pin_code_factory.rb
|
|
2924
2931
|
- lib/spree_cm_commissioner/test_helper/factories/place_factory.rb
|
|
2932
|
+
- lib/spree_cm_commissioner/test_helper/factories/product_completion_step_banner_factory.rb
|
|
2925
2933
|
- lib/spree_cm_commissioner/test_helper/factories/product_completion_step_factory.rb
|
|
2926
2934
|
- lib/spree_cm_commissioner/test_helper/factories/product_factory.rb
|
|
2927
2935
|
- lib/spree_cm_commissioner/test_helper/factories/products_taxons_factory.rb
|