spree_cm_commissioner 2.5.0.pre.pre13 → 2.5.0.pre.pre15
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/.env.example +4 -0
- data/Gemfile.lock +1 -1
- data/app/assets/images/mailer/call.png +0 -0
- data/app/assets/images/mailer/email.png +0 -0
- data/app/assets/images/mailer/user-tenant.png +0 -0
- data/app/controllers/spree/admin/base_controller_decorator.rb +7 -33
- data/app/controllers/spree/api/chatrace/guests_controller.rb +19 -2
- data/app/controllers/spree/api/v2/storefront/guests_controller.rb +7 -51
- data/app/controllers/spree/api/v2/storefront/intercity_taxi/distance_calculator_controller.rb +47 -0
- data/app/controllers/spree/api/v2/storefront/intercity_taxi/draft_orders_controller.rb +7 -5
- data/app/controllers/spree/api/v2/storefront/trip_search_controller.rb +2 -2
- data/app/controllers/spree/api/v2/tenant/intercity_taxi/distance_calculator_controller.rb +47 -0
- data/app/controllers/spree/api/v2/tenant/intercity_taxi/draft_orders_controller.rb +7 -5
- data/app/controllers/spree/api/v2/tenant/trip_search_controller.rb +2 -2
- data/app/controllers/spree_cm_commissioner/admin/orders_controller_decorator.rb +9 -1
- data/app/interactors/spree_cm_commissioner/google_routes_distance_calculator.rb +0 -13
- data/app/interactors/spree_cm_commissioner/invalidate_cache_request.rb +3 -3
- data/app/interactors/spree_cm_commissioner/vehicle_type_updater.rb +41 -0
- data/app/jobs/spree_cm_commissioner/invalidate_cache_request_job.rb +1 -1
- data/app/mailers/spree/order_mailer_decorator.rb +22 -1
- data/app/models/concerns/spree_cm_commissioner/line_item_seat_selection.rb +40 -0
- data/app/models/concerns/spree_cm_commissioner/line_item_transitable.rb +1 -1
- data/app/models/concerns/spree_cm_commissioner/vehicle_kind.rb +21 -0
- data/app/models/spree_cm_commissioner/adjustable/adjuster/pricing_action.rb +25 -0
- data/app/models/spree_cm_commissioner/guest.rb +1 -1
- data/app/models/spree_cm_commissioner/guest_dynamic_field.rb +3 -0
- data/app/models/spree_cm_commissioner/homepage_background_app_image.rb +1 -1
- data/app/models/spree_cm_commissioner/invite_guest.rb +2 -5
- data/app/models/spree_cm_commissioner/line_item_decorator.rb +2 -2
- data/app/models/spree_cm_commissioner/option_type_decorator.rb +4 -1
- data/app/models/spree_cm_commissioner/option_value_decorator.rb +4 -1
- data/app/models/spree_cm_commissioner/{option_value_vehicle.rb → option_value_vehicle_type.rb} +2 -2
- data/app/models/spree_cm_commissioner/order_decorator.rb +14 -1
- data/app/models/spree_cm_commissioner/saved_guest.rb +2 -0
- data/app/models/spree_cm_commissioner/trip.rb +8 -7
- data/app/models/spree_cm_commissioner/vehicle.rb +8 -20
- data/app/models/spree_cm_commissioner/vehicle_type.rb +34 -0
- data/app/models/spree_cm_commissioner/vehicle_type_option_type.rb +6 -0
- data/app/models/spree_cm_commissioner/vendor_decorator.rb +1 -0
- data/app/overrides/spree/admin/orders/_order_actions/actions.html.erb.deface +36 -1
- data/app/overrides/spree/admin/products/edit/clear_cache_button.html.erb.deface +1 -1
- data/app/overrides/spree/admin/taxons/edit/clear_cache_button.html.erb.deface +3 -2
- data/app/queries/spree_cm_commissioner/trip_query.rb +5 -5
- data/app/request_schemas/spree_cm_commissioner/intercity_taxi_draft_order_update_schema.rb +2 -0
- data/app/serializers/spree/v2/storefront/line_item_serializer_decorator.rb +12 -0
- data/app/serializers/spree/v2/tenant/line_item_serializer.rb +14 -1
- data/app/serializers/spree_cm_commissioner/v2/storefront/distance_serializer.rb +26 -0
- data/app/serializers/spree_cm_commissioner/v2/storefront/intercity_taxi_line_item_serializer.rb +3 -3
- data/app/serializers/spree_cm_commissioner/v2/storefront/trip_result_serializer.rb +2 -2
- data/app/serializers/spree_cm_commissioner/v2/storefront/trip_serializer.rb +1 -1
- data/app/serializers/spree_cm_commissioner/v2/storefront/{trip_vehicle_serializer.rb → trip_vehicle_type_serializer.rb} +2 -4
- data/app/services/spree_cm_commissioner/api_caches/invalidate.rb +98 -0
- data/app/services/spree_cm_commissioner/calculate_distance.rb +279 -0
- data/app/services/spree_cm_commissioner/cart/recalculate_decorator.rb +28 -1
- data/app/services/spree_cm_commissioner/guests/claim_invite_guest_service.rb +65 -0
- data/app/services/spree_cm_commissioner/intercity_taxi_order/calculate_distance.rb +224 -0
- data/app/services/spree_cm_commissioner/intercity_taxi_order/update.rb +30 -3
- data/app/services/spree_cm_commissioner/line_items/apply_pricing_models.rb +27 -0
- data/app/services/spree_cm_commissioner/pricing_models/apply.rb +4 -12
- data/app/services/spree_cm_commissioner/signing/sign_data.rb +42 -0
- data/app/services/spree_cm_commissioner/signing/verify_signature.rb +52 -0
- data/app/services/spree_cm_commissioner/transit/export_order.rb +146 -0
- data/app/services/spree_cm_commissioner/update_guest_service.rb +129 -0
- data/app/services/spree_cm_commissioner/vendor_places/create_with_google_map_data.rb +24 -7
- data/app/services/spree_cm_commissioner/vendor_places/update.rb +4 -2
- data/app/views/spree/admin/homepage_section/edit.html.erb +7 -2
- data/app/views/spree/order_mailer/cancel_email.html.erb +17 -0
- data/app/views/spree/order_mailer/confirm_email.html.erb +2 -2
- data/app/views/spree_cm_commissioner/cancel_order_mailer/_cancel_email.html.erb +13 -0
- data/app/views/spree_cm_commissioner/cancel_order_mailer/_footer.html.erb +8 -0
- data/app/views/spree_cm_commissioner/cancel_order_mailer/_header.html.erb +3 -0
- data/app/views/spree_cm_commissioner/cancel_order_mailer/_mailer_stylesheets.html.erb +88 -0
- data/app/views/spree_cm_commissioner/cancel_order_mailer/tenant/_cancel_email.html.erb +13 -0
- data/app/views/spree_cm_commissioner/cancel_order_mailer/tenant/_footer.html.erb +8 -0
- data/app/views/spree_cm_commissioner/cancel_order_mailer/tenant/_header.html.erb +15 -0
- data/app/views/spree_cm_commissioner/layouts/cancel_order_mailer.html.erb +16 -0
- data/app/views/spree_cm_commissioner/layouts/order_mailer.html.erb +1 -1
- data/app/views/spree_cm_commissioner/order_mailer/_customer_info.html.erb +2 -8
- data/app/views/spree_cm_commissioner/order_mailer/_mailer_stylesheets.html.erb +51 -23
- data/app/views/spree_cm_commissioner/order_mailer/_support_contact.html.erb +2 -7
- data/app/views/spree_cm_commissioner/order_mailer/purchased_items/_items.html.erb +76 -42
- data/app/views/spree_cm_commissioner/order_mailer/tenant/_customer_info.html.erb +4 -10
- data/app/views/spree_cm_commissioner/order_mailer/tenant/_support_contact.html.erb +3 -8
- data/config/locales/en.yml +14 -0
- data/config/locales/km.yml +26 -2
- data/config/routes.rb +2 -0
- data/db/migrate/20251127074809_change_guest_dynamic_fields_value_from_jsonb_to_text.rb +40 -0
- data/db/migrate/20251219035243_add_migrations_to_support_vehicle_types.rb +36 -0
- data/db/migrate/20260105072146_add_nationality_group_and_age_group_to_cm_saved_guests.rb +6 -0
- data/db/migrate/20260106093359_add_contact_phone_to_cm_vendor_places.rb +5 -0
- data/lib/spree_cm_commissioner/distance.rb +88 -0
- data/lib/spree_cm_commissioner/engine.rb +3 -0
- data/lib/spree_cm_commissioner/test_helper/factories/guest_factory.rb +2 -2
- data/lib/spree_cm_commissioner/test_helper/factories/line_item_factory.rb +3 -3
- data/lib/spree_cm_commissioner/test_helper/factories/pricing_model_variant_factory.rb +6 -0
- data/lib/spree_cm_commissioner/test_helper/factories/seat_layout_factory.rb +1 -1
- data/lib/spree_cm_commissioner/test_helper/factories/trip_factory.rb +1 -0
- data/lib/spree_cm_commissioner/test_helper/factories/vehicle_factory.rb +4 -1
- data/lib/spree_cm_commissioner/test_helper/factories/vehicle_type_factory.rb +7 -0
- data/lib/spree_cm_commissioner/trip_query_result.rb +1 -1
- data/lib/spree_cm_commissioner/trip_result.rb +7 -1
- data/lib/spree_cm_commissioner/version.rb +1 -1
- data/lib/spree_cm_commissioner.rb +1 -1
- metadata +41 -10
- data/app/interactors/spree_cm_commissioner/trip_distance_calculator.rb +0 -165
- data/app/interactors/spree_cm_commissioner/vehicle_updater.rb +0 -41
- data/app/models/concerns/spree_cm_commissioner/vehicle_type.rb +0 -11
- data/app/models/spree_cm_commissioner/vehicle_option_type.rb +0 -6
- data/lib/spree_cm_commissioner/intercity_taxi/distance.rb +0 -38
- data/lib/spree_cm_commissioner/test_helper/factories/vendor_route_factory.rb +0 -7
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<div class="cancel-greeting">
|
|
2
|
+
<h1>
|
|
3
|
+
<%= I18n.t('mail.order_mailer.hello', full_name: user_full_name(order))%>
|
|
4
|
+
</h1>
|
|
5
|
+
<p class="description">
|
|
6
|
+
<%= raw I18n.t('mail.order_mailer.cancel_description', order_number: order.number || 'NA') %>
|
|
7
|
+
</p>
|
|
8
|
+
<p class="description">
|
|
9
|
+
<span style="font-weight: bold; color: #000000;">Reason:</span>
|
|
10
|
+
<%= order&.internal_note %>
|
|
11
|
+
</p>
|
|
12
|
+
<div style="border-bottom: 1px solid #E5E7EB; margin-top: 1.5rem;">
|
|
13
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div class="header-tenant">
|
|
2
|
+
<table width="100%" cellpadding="0" cellspacing="0">
|
|
3
|
+
<tr>
|
|
4
|
+
<td class="tenant-name">
|
|
5
|
+
<%= name %>
|
|
6
|
+
</td>
|
|
7
|
+
|
|
8
|
+
<% if logo.present? %>
|
|
9
|
+
<td class="logo-tenant" align="right">
|
|
10
|
+
<img src="<%= logo %>">
|
|
11
|
+
</td>
|
|
12
|
+
<% end %>
|
|
13
|
+
</tr>
|
|
14
|
+
</table>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
|
5
|
+
<meta name="x-apple-disable-message-reformatting"/>
|
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
|
7
|
+
<link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet">
|
|
8
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
|
|
9
|
+
<%= render partial: 'spree_cm_commissioner/cancel_order_mailer/mailer_stylesheets' %>
|
|
10
|
+
</head>
|
|
11
|
+
<body>
|
|
12
|
+
<table role="presentation" cellspacing="0" cellpadding="0" border="0" align="center" width="100%">
|
|
13
|
+
<%= yield %>
|
|
14
|
+
</table>
|
|
15
|
+
</body>
|
|
16
|
+
</html>
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
</tr>
|
|
21
21
|
<tr>
|
|
22
22
|
<td height="60px">
|
|
23
|
-
<table class="email-footer" align="center" width="
|
|
23
|
+
<table class="email-footer" align="center" width="100%" style="max-width: 570px;" cellpadding="0" cellspacing="0" role="presentation">
|
|
24
24
|
<tr>
|
|
25
25
|
<td>
|
|
26
26
|
<% if @order.tenant.nil? %>
|
|
@@ -1,31 +1,25 @@
|
|
|
1
1
|
<div class="content-cell">
|
|
2
2
|
<div class="container">
|
|
3
3
|
<h2><%= I18n.t('mail.order_mailer.customer_info')%></h2>
|
|
4
|
-
<div class="flex two-columns">
|
|
4
|
+
<div class="flex two-columns-contact">
|
|
5
5
|
<div class="two-columns-item">
|
|
6
6
|
<div class="flex two-columns-item_detail">
|
|
7
|
-
<div class="two-columns_icon"><%= image_tag "mailer/user.png", class: "mail-icon"%></div>
|
|
7
|
+
<div class="two-columns_icon" style="color: black;"><%= image_tag "mailer/user.png", class: "mail-icon"%></div>
|
|
8
8
|
<div class="two-columns_text-container">
|
|
9
|
-
<p class="two-columns_title">Name</p>
|
|
10
9
|
<p class="two-columns_description"><%= user_full_name(order) %></p>
|
|
11
10
|
</div>
|
|
12
11
|
</div>
|
|
13
12
|
<div class="flex two-columns-item_detail">
|
|
14
13
|
<div class="two-columns_icon"><%= image_tag "mailer/envelope.png", class: "mail-icon"%></div>
|
|
15
14
|
<div class="two-columns_text-container">
|
|
16
|
-
<p class="two-columns_title">Email</p>
|
|
17
15
|
<% if order.email.present? %>
|
|
18
16
|
<p class="two-columns_description"><%= link_to order.email, "mailto:#{order.email}" %></p>
|
|
19
17
|
<% end %>
|
|
20
18
|
</div>
|
|
21
19
|
</div>
|
|
22
|
-
</div>
|
|
23
|
-
<div class="vertical-separater"></div>
|
|
24
|
-
<div class="two-columns-item">
|
|
25
20
|
<div class="flex two-columns-item_detail">
|
|
26
21
|
<div class="two-columns_icon"><%= image_tag "mailer/phone.png", class: "mail-icon"%></div>
|
|
27
22
|
<div class="two-columns_text-container">
|
|
28
|
-
<p class="two-columns_title">Contact</p>
|
|
29
23
|
<% if order.phone_number.present? || order.intel_phone_number.present? %>
|
|
30
24
|
<p class="two-columns_description">
|
|
31
25
|
<%= link_to(
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
<style type="text/css" rel="stylesheet" media="all">
|
|
2
2
|
/* Custom Mailer ------------------------------ */
|
|
3
|
+
body {
|
|
4
|
+
padding: 0;
|
|
5
|
+
margin: 0;
|
|
6
|
+
}
|
|
3
7
|
|
|
4
8
|
#confirm-email {
|
|
5
9
|
font-family: "Poppins", "Nunito Sans", Helvetica, Arial, sans-serif;
|
|
@@ -95,12 +99,12 @@
|
|
|
95
99
|
margin-bottom: 0.625rem;
|
|
96
100
|
}
|
|
97
101
|
#confirm-email .icon-hang-meas {
|
|
98
|
-
width:
|
|
102
|
+
width: 40%;
|
|
99
103
|
text-align: right;
|
|
100
104
|
}
|
|
101
105
|
#confirm-email .icon-hang-meas img {
|
|
102
|
-
width:
|
|
103
|
-
height:
|
|
106
|
+
width: 3.5rem;
|
|
107
|
+
height: 3.5rem;
|
|
104
108
|
border-radius: 50%;
|
|
105
109
|
background-color: #fff;
|
|
106
110
|
display: inline-block;
|
|
@@ -108,7 +112,8 @@
|
|
|
108
112
|
#confirm-email .header h1 {
|
|
109
113
|
margin: 0;
|
|
110
114
|
color: #fff;
|
|
111
|
-
width:
|
|
115
|
+
width: 60%;
|
|
116
|
+
font-size: 1.8rem;
|
|
112
117
|
}
|
|
113
118
|
|
|
114
119
|
#confirm-email .header {
|
|
@@ -140,26 +145,25 @@
|
|
|
140
145
|
padding: 0.625rem 0;
|
|
141
146
|
}
|
|
142
147
|
#confirm-email .purchase_image {
|
|
143
|
-
|
|
148
|
+
border-radius:10px;
|
|
149
|
+
width:auto; height:auto;
|
|
150
|
+
display:block; margin-bottom:6px;
|
|
151
|
+
margin-right: 8px;
|
|
144
152
|
}
|
|
145
153
|
#confirm-email .purchase_item {
|
|
146
154
|
padding: 0 0.625rem;
|
|
147
155
|
width: 60%;
|
|
148
156
|
}
|
|
149
157
|
#confirm-email .purchase-item-option-text {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
color
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
margin: 0.625rem 0;
|
|
160
|
-
border-radius: 6.25rem;
|
|
161
|
-
word-wrap: break-word;
|
|
162
|
-
word-break: break-word;
|
|
158
|
+
padding:12px;
|
|
159
|
+
border:1px solid #d1d5db;
|
|
160
|
+
background-color:#f3f4f6;
|
|
161
|
+
border-radius:10px;
|
|
162
|
+
font-size:12px;
|
|
163
|
+
line-height:1.25;
|
|
164
|
+
color:#4b5563;
|
|
165
|
+
word-wrap:break-word;
|
|
166
|
+
text-align:start;
|
|
163
167
|
}
|
|
164
168
|
#confirm-email .purchase_item_price {
|
|
165
169
|
margin-bottom: 0.5rem; }
|
|
@@ -186,9 +190,18 @@
|
|
|
186
190
|
height: auto;
|
|
187
191
|
background: #F2F2F2;
|
|
188
192
|
}
|
|
193
|
+
#confirm-email .two-columns-contact{
|
|
194
|
+
display: flex;
|
|
195
|
+
flex-direction: column;
|
|
196
|
+
}
|
|
197
|
+
#confirm-email .two-columns-contact .two-columns-item {
|
|
198
|
+
flex: 1 1 45%;
|
|
199
|
+
word-wrap: break-word;
|
|
200
|
+
word-break: break-word;
|
|
201
|
+
width: 100%;
|
|
202
|
+
}
|
|
189
203
|
#confirm-email .two-columns .two-columns-item {
|
|
190
204
|
flex: 1 1 45%;
|
|
191
|
-
margin: 0.5rem 0;
|
|
192
205
|
word-wrap: break-word;
|
|
193
206
|
word-break: break-word;
|
|
194
207
|
width: 100%;
|
|
@@ -200,16 +213,30 @@
|
|
|
200
213
|
width: 65%;
|
|
201
214
|
justify-content: right;
|
|
202
215
|
}
|
|
203
|
-
#confirm-email .two-columns .two-columns-item_detail {
|
|
216
|
+
#confirm-email .two-columns-contact .two-columns-item_detail {
|
|
204
217
|
margin-bottom: 1rem;
|
|
205
218
|
width: 100%;
|
|
219
|
+
display: flex;
|
|
220
|
+
align-items: center;
|
|
206
221
|
}
|
|
207
222
|
#confirm-email .two-columns_icon {
|
|
208
|
-
min-width:
|
|
209
|
-
height:
|
|
223
|
+
min-width: 2rem;
|
|
224
|
+
height: 2rem;
|
|
210
225
|
background: #f1f1f1;
|
|
211
226
|
border-radius: 50%;
|
|
212
227
|
display: flex;
|
|
228
|
+
align-items: center;
|
|
229
|
+
justify-content: center;
|
|
230
|
+
fill: blue;
|
|
231
|
+
stroke: black;
|
|
232
|
+
}
|
|
233
|
+
#confirm-email .two-columns_icon .mail-icon {
|
|
234
|
+
width: 1rem; /* Adjust size as needed */
|
|
235
|
+
height: 1rem;
|
|
236
|
+
}
|
|
237
|
+
#confirm-email .two-columns_icon .mail-icon-tenant {
|
|
238
|
+
width: 1.2rem;
|
|
239
|
+
height: 1.2rem;
|
|
213
240
|
}
|
|
214
241
|
#confirm-email .two-columns_icon .vendor-logo {
|
|
215
242
|
max-width: 3rem;
|
|
@@ -295,6 +322,7 @@
|
|
|
295
322
|
padding: 1.5rem;
|
|
296
323
|
border-radius: 0 0 1.5625rem 1.5625rem;
|
|
297
324
|
border: 0.0625rem solid #dddfe2;
|
|
325
|
+
background-color: #fff;
|
|
298
326
|
}
|
|
299
327
|
.purchase {
|
|
300
328
|
width: 100%;
|
|
@@ -310,7 +338,7 @@
|
|
|
310
338
|
align: right;
|
|
311
339
|
}
|
|
312
340
|
.align-right {
|
|
313
|
-
padding: 0.625rem;
|
|
341
|
+
padding: 0.625rem 0;
|
|
314
342
|
text-align: right;
|
|
315
343
|
align: right;
|
|
316
344
|
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
<div class="content-cell">
|
|
2
2
|
<div class="container">
|
|
3
3
|
<h2><%= I18n.t('mail.order_mailer.bookmeplus_support')%></h2>
|
|
4
|
-
<div class="flex two-columns">
|
|
4
|
+
<div class="flex two-columns-contact">
|
|
5
5
|
<div class="two-columns-item">
|
|
6
6
|
<div class="flex two-columns-item_detail">
|
|
7
|
-
<div class="two-columns_icon"><%= image_tag "mailer/phone.png", class: "mail-icon"%></div>
|
|
7
|
+
<div class="two-columns_icon"><%= image_tag "mailer/phone.png", class: "mail-icon" %></div>
|
|
8
8
|
<div class="two-columns_text-container">
|
|
9
|
-
<p class="two-columns_title">Contact</p>
|
|
10
9
|
<% if current_store.contact_phone.present? %>
|
|
11
10
|
<p class="two-columns_description">
|
|
12
11
|
<%= link_to current_store.contact_phone, "tel:#{current_store.contact_phone}" %>
|
|
@@ -14,13 +13,9 @@
|
|
|
14
13
|
<% end %>
|
|
15
14
|
</div>
|
|
16
15
|
</div>
|
|
17
|
-
</div>
|
|
18
|
-
<div class="vertical-separater"></div>
|
|
19
|
-
<div class="two-columns-item">
|
|
20
16
|
<div class="flex two-columns-item_detail">
|
|
21
17
|
<div class="two-columns_icon"><%= image_tag "mailer/envelope.png", class: "mail-icon"%></div>
|
|
22
18
|
<div class="two-columns_text-container">
|
|
23
|
-
<p class="two-columns_title">Email</p>
|
|
24
19
|
<% if current_store.customer_support_email.present? %>
|
|
25
20
|
<p class="two-columns_description">
|
|
26
21
|
<%= link_to current_store.customer_support_email, "mailto:#{current_store.customer_support_email}" %>
|
|
@@ -1,46 +1,80 @@
|
|
|
1
|
-
<table class="purchase order-info">
|
|
1
|
+
<table class="purchase order-info" width="100%" cellpadding="0" cellspacing="0">
|
|
2
2
|
<% line_items.each do |line_item| %>
|
|
3
3
|
<tr>
|
|
4
|
-
<td
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
4
|
+
<td>
|
|
5
|
+
<!-- Outer container table -->
|
|
6
|
+
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
|
7
|
+
|
|
8
|
+
<!-- Row 1: Name + Quantity × Price -->
|
|
9
|
+
<tr>
|
|
10
|
+
<td align="left" valign="top" width="60%">
|
|
11
|
+
<% if line_item.name.present? %>
|
|
12
|
+
<span>
|
|
13
|
+
<%= link_to(raw(line_item.name), custom_product_storefront_resource_url(line_item.product) || '#') %>
|
|
14
|
+
</span>
|
|
15
|
+
<% end %>
|
|
16
|
+
</td>
|
|
17
|
+
<td align="right" valign="top" width="40%">
|
|
18
|
+
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
|
19
|
+
<tr>
|
|
20
|
+
<td align="right" style="color: gray; padding-bottom:2px; white-space:nowrap;">
|
|
21
|
+
<%= line_item.quantity %> x <%= line_item.single_money %>
|
|
22
|
+
</td>
|
|
23
|
+
</tr>
|
|
24
|
+
<tr>
|
|
25
|
+
<td align="right">
|
|
26
|
+
<span style="font-weight:600;"><%= line_item.display_amount %></span>
|
|
27
|
+
</td>
|
|
28
|
+
</tr>
|
|
29
|
+
</table>
|
|
30
|
+
</td>
|
|
31
|
+
</tr>
|
|
32
|
+
|
|
33
|
+
</table>
|
|
34
|
+
|
|
35
|
+
<!-- Separate table for Image + Options to avoid width conflicts -->
|
|
36
|
+
<table width="100%" cellpadding="0" cellspacing="0" role="presentation" style="margin-top:6px;">
|
|
37
|
+
<tr>
|
|
38
|
+
<!-- Image -->
|
|
39
|
+
<td align="left" valign="top">
|
|
40
|
+
<% if line_item.variant.present? && variant_image_url(line_item.variant).present? %>
|
|
41
|
+
<%= link_to(
|
|
42
|
+
image_tag(
|
|
43
|
+
variant_image_url(line_item.variant),
|
|
44
|
+
class: "purchase_image"
|
|
45
|
+
),
|
|
18
46
|
custom_product_storefront_resource_url(line_item.product) || '#'
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
47
|
+
) %>
|
|
48
|
+
<% end %>
|
|
49
|
+
</td>
|
|
50
|
+
|
|
51
|
+
<!-- Options -->
|
|
52
|
+
<td align="right" valign="top" width="100%">
|
|
53
|
+
<% if line_item.variant.options_text.present? %>
|
|
54
|
+
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
|
|
55
|
+
<tr>
|
|
56
|
+
<td class="purchase-item-option-text">
|
|
57
|
+
<%= sanitize(line_item.variant.options_text) %>
|
|
58
|
+
</td>
|
|
59
|
+
</tr>
|
|
60
|
+
</table>
|
|
61
|
+
<% end %>
|
|
62
|
+
</td>
|
|
63
|
+
</tr>
|
|
64
|
+
|
|
65
|
+
<!-- Detail link -->
|
|
66
|
+
<tr>
|
|
67
|
+
<td></td>
|
|
68
|
+
<td align="right" style="padding-top:6px;">
|
|
69
|
+
<%= link_to 'View Pass', custom_product_line_item_url(line_item)%>
|
|
70
|
+
</td>
|
|
71
|
+
</tr>
|
|
72
|
+
</table>
|
|
32
73
|
</td>
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
</td>
|
|
41
|
-
</tr>
|
|
42
|
-
<tr>
|
|
43
|
-
<td colspan="4"><hr></td>
|
|
44
|
-
</tr>
|
|
45
|
-
<%end%>
|
|
46
|
-
</table>
|
|
74
|
+
</tr>
|
|
75
|
+
|
|
76
|
+
<tr>
|
|
77
|
+
<td><hr></td>
|
|
78
|
+
</tr>
|
|
79
|
+
<% end %>
|
|
80
|
+
</table>
|
|
@@ -1,31 +1,25 @@
|
|
|
1
1
|
<div class="content-cell">
|
|
2
2
|
<div class="container">
|
|
3
3
|
<h2><%= I18n.t('mail.order_mailer.customer_info') %></h2>
|
|
4
|
-
<div class="flex two-columns">
|
|
4
|
+
<div class="flex two-columns-contact">
|
|
5
5
|
<div class="two-columns-item">
|
|
6
6
|
<div class="flex two-columns-item_detail">
|
|
7
|
-
<div class="two-columns_icon"><%= image_tag "mailer/
|
|
7
|
+
<div class="two-columns_icon"><%= image_tag "mailer/user-tenant.png", class: "mail-icon" %></div>
|
|
8
8
|
<div class="two-columns_text-container">
|
|
9
|
-
<p class="two-columns_title">Name</p>
|
|
10
9
|
<p class="two-columns_description"><%= user_full_name(order) %></p>
|
|
11
10
|
</div>
|
|
12
11
|
</div>
|
|
13
12
|
<div class="flex two-columns-item_detail">
|
|
14
|
-
<div class="two-columns_icon"><%= image_tag "mailer/
|
|
13
|
+
<div class="two-columns_icon"><%= image_tag "mailer/email.png", class: "mail-icon" %></div>
|
|
15
14
|
<div class="two-columns_text-container">
|
|
16
|
-
<p class="two-columns_title">Email</p>
|
|
17
15
|
<% if order.email.present? %>
|
|
18
16
|
<p class="two-columns_description"><%= link_to order.email, "mailto:#{order.email}" %></p>
|
|
19
17
|
<% end %>
|
|
20
18
|
</div>
|
|
21
19
|
</div>
|
|
22
|
-
</div>
|
|
23
|
-
<div class="vertical-separater"></div>
|
|
24
|
-
<div class="two-columns-item">
|
|
25
20
|
<div class="flex two-columns-item_detail">
|
|
26
|
-
<div class="two-columns_icon"><%= image_tag "mailer/
|
|
21
|
+
<div class="two-columns_icon"><%= image_tag "mailer/call.png", class: "mail-icon-tenant" %></div>
|
|
27
22
|
<div class="two-columns_text-container">
|
|
28
|
-
<p class="two-columns_title">Contact</p>
|
|
29
23
|
<% if order.phone_number.present? || order.intel_phone_number.present? %>
|
|
30
24
|
<p class="two-columns_description">
|
|
31
25
|
<%= link_to(
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
<div class="content-cell">
|
|
2
2
|
<div class="container">
|
|
3
3
|
<h2><%= name %> Support</h2>
|
|
4
|
-
<div class="flex two-columns">
|
|
4
|
+
<div class="flex two-columns-contact">
|
|
5
5
|
<div class="two-columns-item">
|
|
6
6
|
<div class="flex two-columns-item_detail">
|
|
7
|
-
<div class="two-columns_icon"><%= image_tag "mailer/
|
|
7
|
+
<div class="two-columns_icon"><%= image_tag "mailer/call.png", class: "mail-icon-tenant"%></div>
|
|
8
8
|
<div class="two-columns_text-container">
|
|
9
|
-
<p class="two-columns_title">Contact</p>
|
|
10
9
|
<% if order&.tenant&.contact_phone&.present? %>
|
|
11
10
|
<p class="two-columns_description">
|
|
12
11
|
<%= link_to order.tenant.contact_phone, "tel:#{order.tenant.contact_phone}" %>
|
|
@@ -14,13 +13,9 @@
|
|
|
14
13
|
<% end %>
|
|
15
14
|
</div>
|
|
16
15
|
</div>
|
|
17
|
-
</div>
|
|
18
|
-
<div class="vertical-separater"></div>
|
|
19
|
-
<div class="two-columns-item">
|
|
20
16
|
<div class="flex two-columns-item_detail">
|
|
21
|
-
<div class="two-columns_icon"><%= image_tag "mailer/
|
|
17
|
+
<div class="two-columns_icon"><%= image_tag "mailer/email.png", class: "mail-icon"%></div>
|
|
22
18
|
<div class="two-columns_text-container">
|
|
23
|
-
<p class="two-columns_title">Email</p>
|
|
24
19
|
<p class="two-columns_description">
|
|
25
20
|
<%= order&.tenant&.customer_support_email.present? ? link_to(order.tenant.customer_support_email, "mailto:#{order.tenant.customer_support_email}") : "N/A" %>
|
|
26
21
|
</p>
|
data/config/locales/en.yml
CHANGED
|
@@ -119,6 +119,17 @@ en:
|
|
|
119
119
|
product_kind_option_types:
|
|
120
120
|
empty_info: "<b>Note:</b> Set service option types to service first. To edit, go to <b>Details</b> tab > <b>Option Types</b>"
|
|
121
121
|
|
|
122
|
+
vehicle_type:
|
|
123
|
+
suv: "SUV"
|
|
124
|
+
sedan: "Sedan"
|
|
125
|
+
van: "Van"
|
|
126
|
+
minivan: "Minivan"
|
|
127
|
+
sleeping_bus: "Sleeping Bus"
|
|
128
|
+
luxury_van: "Luxury Van"
|
|
129
|
+
air_bus: "Air Bus"
|
|
130
|
+
bus: "Bus"
|
|
131
|
+
ferry: "Ferry"
|
|
132
|
+
|
|
122
133
|
line_item:
|
|
123
134
|
validation:
|
|
124
135
|
exceeded_max_quantity_per_order: "Exceeded maximum quantity per order"
|
|
@@ -528,6 +539,9 @@ en:
|
|
|
528
539
|
hello: "Hello %{full_name},"
|
|
529
540
|
thanks: "Thanks %{full_name},"
|
|
530
541
|
booking_event: "Your booking for %{order_number} is successfully complete!"
|
|
542
|
+
cancel_description: "Your order <span style='color: #000000; font-weight: bold;'>%{order_number}</span> has been <span style='color: red; font-weight: bold;'>CANCELLED</span>. Please retain this cancellation information for your records."
|
|
543
|
+
cancel_thank: "Thank you for your business."
|
|
544
|
+
from_team: "The %{store} Team"
|
|
531
545
|
booking_reference: "For reference, your booking ID is %{order_number}."
|
|
532
546
|
booking_id: "Booking ID <b>%{order_number}</b>"
|
|
533
547
|
booking_summary: "Booking Summary"
|
data/config/locales/km.yml
CHANGED
|
@@ -113,6 +113,17 @@ km:
|
|
|
113
113
|
product_kind_option_types:
|
|
114
114
|
empty_info: "<b>ចំណាំ:</b> កំណត់ប្រភេទសម្រាប់ផលិតផល. ដើម្បីកែប្រែ, សូមចូលទៅ <b>លម្អិត</b> tab > <b>ប្រភេទ</b>"
|
|
115
115
|
|
|
116
|
+
vehicle_type:
|
|
117
|
+
suv: "SUV"
|
|
118
|
+
sedan: "Sedan"
|
|
119
|
+
van: "Van"
|
|
120
|
+
minivan: "Minivan"
|
|
121
|
+
sleeping_bus: "Sleeping Bus"
|
|
122
|
+
luxury_van: "Luxury Van"
|
|
123
|
+
air_bus: "Air Bus"
|
|
124
|
+
bus: "Bus"
|
|
125
|
+
ferry: "Ferry"
|
|
126
|
+
|
|
116
127
|
line_item:
|
|
117
128
|
validation:
|
|
118
129
|
exceeded_max_quantity_per_order: "លើសពីបរិមាណអតិបរមាក្នុងមួយការបញ្ជាទិញ"
|
|
@@ -190,6 +201,16 @@ km:
|
|
|
190
201
|
system_registered: "ចុះឈ្មោះដោយប្រព័ន្ធ"
|
|
191
202
|
self_registered: "ចុះឈ្មោះដោយខ្លួនឯង"
|
|
192
203
|
registration_source: "ប្រភេទការចុះឈ្មោះ"
|
|
204
|
+
vehicle_kind:
|
|
205
|
+
suv: "SUV"
|
|
206
|
+
sedan: "Sedan"
|
|
207
|
+
van: "Van"
|
|
208
|
+
minivan: "Minivan"
|
|
209
|
+
sleeping_bus: "Sleeping Bus"
|
|
210
|
+
luxury_van: "Luxury Van"
|
|
211
|
+
air_bus: "Air Bus"
|
|
212
|
+
bus: "Bus"
|
|
213
|
+
ferry: "Ferry"
|
|
193
214
|
service_types:
|
|
194
215
|
organizer: "Organizer"
|
|
195
216
|
transit: "Transit"
|
|
@@ -388,9 +409,12 @@ km:
|
|
|
388
409
|
booking_confirm: "Confirmed!"
|
|
389
410
|
hello: "Hello %{full_name},"
|
|
390
411
|
thanks: "Thanks %{full_name},"
|
|
391
|
-
booking_event: "Your booking for %{
|
|
412
|
+
booking_event: "Your booking for %{order_number} is successfully complete!"
|
|
413
|
+
cancel_description: "Your order <span style='color: #000000; font-weight: bold;'>%{order_number}</span> has been <span style='color: red; font-weight: bold;'>CANCELLED</span>. Please retain this cancellation information for your records."
|
|
414
|
+
cancel_thank: "Thank you for your business."
|
|
415
|
+
from_team: "The %{store} Team"
|
|
392
416
|
booking_reference: "For reference, your booking ID is %{order_number}."
|
|
393
|
-
booking_id: "Booking ID <b>%{order_number}
|
|
417
|
+
booking_id: "Booking ID <b>%{order_number}</b>"
|
|
394
418
|
booking_summary: "Booking Summary"
|
|
395
419
|
check_in: "Check in:"
|
|
396
420
|
check_out: "Check out:"
|
data/config/routes.rb
CHANGED
|
@@ -563,6 +563,7 @@ Spree::Core::Engine.add_routes do
|
|
|
563
563
|
|
|
564
564
|
namespace :intercity_taxi do
|
|
565
565
|
resource :draft_orders, only: %i[create update]
|
|
566
|
+
resource :distance_calculator, controller: :distance_calculator, only: [:create]
|
|
566
567
|
end
|
|
567
568
|
|
|
568
569
|
resource :reset_passwords, only: [:update]
|
|
@@ -708,6 +709,7 @@ Spree::Core::Engine.add_routes do
|
|
|
708
709
|
end
|
|
709
710
|
namespace :intercity_taxi do
|
|
710
711
|
resource :draft_orders, only: %i[create update]
|
|
712
|
+
resource :distance_calculator, controller: :distance_calculator, only: [:create]
|
|
711
713
|
end
|
|
712
714
|
end
|
|
713
715
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
class ChangeGuestDynamicFieldsValueFromJsonbToText < ActiveRecord::Migration[7.0]
|
|
2
|
+
def up
|
|
3
|
+
# Check if the migration has already been run
|
|
4
|
+
return if column_exists?(:cm_guest_dynamic_fields, :value, :text)
|
|
5
|
+
|
|
6
|
+
add_column :cm_guest_dynamic_fields, :value_text, :text
|
|
7
|
+
|
|
8
|
+
# Convert JSONB value to TEXT value
|
|
9
|
+
execute <<-SQL
|
|
10
|
+
UPDATE cm_guest_dynamic_fields
|
|
11
|
+
SET value_text = value ->> 0
|
|
12
|
+
SQL
|
|
13
|
+
|
|
14
|
+
remove_column :cm_guest_dynamic_fields, :value
|
|
15
|
+
rename_column :cm_guest_dynamic_fields, :value_text, :value
|
|
16
|
+
|
|
17
|
+
# Restore NOT NULL and default value constraints
|
|
18
|
+
#To make it the same as the original: t.jsonb :value, default: [], null: false
|
|
19
|
+
change_column_default :cm_guest_dynamic_fields, :value, ''
|
|
20
|
+
change_column_null :cm_guest_dynamic_fields, :value, false
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def down
|
|
24
|
+
add_column :cm_guest_dynamic_fields, :value_jsonb, :jsonb
|
|
25
|
+
|
|
26
|
+
# Convert TEXT value to JSONB value
|
|
27
|
+
execute <<-SQL
|
|
28
|
+
UPDATE cm_guest_dynamic_fields
|
|
29
|
+
SET value_jsonb = to_jsonb(value)
|
|
30
|
+
SQL
|
|
31
|
+
|
|
32
|
+
remove_column :cm_guest_dynamic_fields, :value
|
|
33
|
+
rename_column :cm_guest_dynamic_fields, :value_jsonb, :value
|
|
34
|
+
|
|
35
|
+
# Restore NOT NULL and default value constraints
|
|
36
|
+
#To make it the same as the original: t.jsonb :value, default: [], null: false
|
|
37
|
+
change_column_default :cm_guest_dynamic_fields, :value, []
|
|
38
|
+
change_column_null :cm_guest_dynamic_fields, :value, false
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
class AddMigrationsToSupportVehicleTypes < ActiveRecord::Migration[7.0]
|
|
2
|
+
def change
|
|
3
|
+
# 1. rename amentity table from vehicle to vehicle type
|
|
4
|
+
rename_table :cm_vehicle_option_types, :cm_vehicle_type_option_types if table_exists?(:cm_vehicle_option_types)
|
|
5
|
+
rename_table :cm_option_value_vehicles, :cm_option_value_vehicle_types if table_exists?(:cm_option_value_vehicles)
|
|
6
|
+
rename_table :cm_vehicles, :cm_vehicle_types if table_exists?(:cm_vehicles) && !table_exists?(:cm_vehicle_types)
|
|
7
|
+
|
|
8
|
+
rename_column :cm_vehicle_type_option_types, :vehicle_id, :vehicle_type_id if column_exists?(:cm_vehicle_type_option_types, :vehicle_id)
|
|
9
|
+
rename_column :cm_option_value_vehicle_types, :vehicle_id, :vehicle_type_id if column_exists?(:cm_option_value_vehicle_types, :vehicle_id)
|
|
10
|
+
|
|
11
|
+
# 2. remove uncessary column for vehicle type.
|
|
12
|
+
# also rename code to name to make it more friendly. Meyhong also use name.
|
|
13
|
+
# rename vehicle_type to kind to avoid confusion with vehicle_type association
|
|
14
|
+
change_table :cm_vehicle_types do |t|
|
|
15
|
+
t.remove :license_plate if column_exists?(:cm_vehicle_types, :license_plate)
|
|
16
|
+
t.remove :allow_seat_selection if column_exists?(:cm_vehicle_types, :allow_seat_selection)
|
|
17
|
+
t.rename :code, :name if column_exists?(:cm_vehicle_types, :code)
|
|
18
|
+
t.rename :vehicle_type, :kind if column_exists?(:cm_vehicle_types, :vehicle_type)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# 3. new vehicle table
|
|
22
|
+
create_table :cm_vehicles, if_not_exists: true do |t|
|
|
23
|
+
t.string :license_plate
|
|
24
|
+
t.string :name
|
|
25
|
+
t.integer :kind
|
|
26
|
+
t.references :vendor, null: false, foreign_key: { to_table: :spree_vendors }
|
|
27
|
+
t.references :vehicle_type, null: false, foreign_key: { to_table: :cm_vehicle_types }
|
|
28
|
+
t.timestamps
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# 4. drop existing vehicle assocation, and add vehicle/vehicle type assocation type to trip again.
|
|
32
|
+
remove_column :cm_trips, :vehicle_id if column_exists?(:cm_trips, :vehicle_id)
|
|
33
|
+
add_reference :cm_trips, :vehicle, null: true, foreign_key: { to_table: :cm_vehicles } unless column_exists?(:cm_trips, :vehicle_id)
|
|
34
|
+
add_reference :cm_trips, :vehicle_type, null: true, foreign_key: { to_table: :cm_vehicle_types } unless column_exists?(:cm_trips, :vehicle_type_id)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
class AddNationalityGroupAndAgeGroupToCmSavedGuests < ActiveRecord::Migration[7.0]
|
|
2
|
+
def change
|
|
3
|
+
add_column :cm_saved_guests, :nationality_group, :integer, default: 0, null: false, if_not_exists: true
|
|
4
|
+
add_column :cm_saved_guests, :age_group, :integer, default: 0, null: false, if_not_exists: true
|
|
5
|
+
end
|
|
6
|
+
end
|