spree_cm_commissioner 1.13.0 → 1.15.0.pre.beta1
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 +12 -1
- data/README.md +43 -1
- data/app/assets/images/category_icons/art_icon.png +0 -0
- data/app/assets/images/category_icons/concert_icon.png +0 -0
- data/app/assets/images/category_icons/fundraising_icon.png +0 -0
- data/app/assets/images/category_icons/marathon_icon.png +0 -0
- data/app/assets/images/category_icons/online_icon.png +0 -0
- data/app/assets/images/category_icons/workshop_icon.png +0 -0
- data/app/controllers/spree/admin/users_controller_decorator.rb +13 -0
- data/app/controllers/spree/api/chatrace/guests_controller.rb +2 -1
- data/app/controllers/spree/api/v2/organizer/invite_guests_controller.rb +21 -0
- data/app/controllers/spree/api/v2/storefront/cart_payment_method_groups_controller.rb +12 -1
- data/app/controllers/spree/api/v2/storefront/guests_controller.rb +3 -1
- data/app/controllers/spree/api/v2/tenant/cart_controller.rb +11 -0
- data/app/controllers/spree/api/v2/tenant/checkout_controller.rb +1 -0
- data/app/controllers/spree/api/v2/tenant/order_histories_controller.rb +65 -0
- data/app/controllers/spree_cm_commissioner/admin/variants_controller_decorator.rb +1 -1
- data/app/controllers/spree_cm_commissioner/well_known_controller.rb +46 -0
- data/app/factory/spree_cm_commissioner/invite_guest_claimed_telegram_message_factory.rb +120 -0
- data/app/finders/spree_cm_commissioner/products/find_decorator.rb +16 -0
- data/app/helpers/spree_cm_commissioner/transit/order_query_helper.rb +17 -0
- data/app/helpers/spree_cm_commissioner/transit/trip_helper.rb +12 -0
- data/app/interactors/spree_cm_commissioner/create_event.rb +31 -6
- data/app/interactors/spree_cm_commissioner/create_ticket.rb +36 -1
- data/app/interactors/spree_cm_commissioner/host_matcher.rb +28 -0
- data/app/interactors/spree_cm_commissioner/place_decoder.rb +16 -0
- data/app/interactors/spree_cm_commissioner/place_service.rb +32 -0
- data/app/interactors/spree_cm_commissioner/user_pin_code_authenticator.rb +9 -0
- data/app/models/concerns/spree_cm_commissioner/json_preference_validator.rb +23 -0
- data/app/models/concerns/spree_cm_commissioner/kyc_bitwise.rb +3 -1
- data/app/models/concerns/spree_cm_commissioner/store_preference.rb +2 -0
- data/app/models/concerns/spree_cm_commissioner/tenant_preference.rb +11 -0
- data/app/models/spree_cm_commissioner/cms_page_decorator.rb +16 -1
- data/app/models/spree_cm_commissioner/guest.rb +11 -2
- data/app/models/spree_cm_commissioner/invite_guest.rb +8 -0
- data/app/models/spree_cm_commissioner/order_decorator.rb +5 -0
- data/app/models/spree_cm_commissioner/payment_method_decorator.rb +8 -1
- data/app/models/spree_cm_commissioner/place.rb +3 -0
- data/app/models/spree_cm_commissioner/store_decorator.rb +2 -1
- data/app/models/spree_cm_commissioner/taxon_decorator.rb +4 -0
- data/app/models/spree_cm_commissioner/taxon_place.rb +12 -0
- data/app/models/spree_cm_commissioner/tenant.rb +5 -0
- data/app/models/spree_cm_commissioner/user_decorator.rb +14 -3
- data/app/models/spree_cm_commissioner/vendor_decorator.rb +7 -3
- data/app/models/spree_cm_commissioner/vendor_place.rb +11 -3
- data/app/overrides/spree/admin/stores/_form/store_preferences.html.erb.deface +85 -12
- data/app/overrides/spree/admin/variants/_form/kyc_field.html.erb.deface +3 -4
- data/app/queries/spree_cm_commissioner/reservation_query.rb +12 -0
- data/app/queries/spree_cm_commissioner/trip_query.rb +35 -25
- data/app/serializers/spree/v2/organizer/invite_guest_serializer.rb +1 -1
- data/app/serializers/spree/v2/storefront/taxon_serializer_decorator.rb +1 -0
- data/app/serializers/spree/v2/tenant/cart_serializer.rb +8 -0
- data/app/serializers/spree_cm_commissioner/v2/storefront/guest_serializer.rb +1 -1
- data/app/services/spree_cm_commissioner/organizer/export_invite_guest_csv_service.rb +63 -0
- data/app/services/spree_cm_commissioner/payment_method_type_mapper.rb +11 -0
- data/app/views/spree/admin/tenants/_form.html.erb +68 -2
- data/config/initializers/spree_permitted_attributes.rb +3 -0
- data/config/routes.rb +7 -0
- data/db/migrate/20250127081646_add_preferences_to_cm_tenants.rb +7 -0
- data/db/migrate/20250527043231_create_spree_commissioner_taxon_places.rb +15 -0
- data/db/migrate/20250528073748_remove_unique_slug_index_on_spree_cms_pages.rb +12 -0
- data/db/migrate/20250528074043_add_unique_index_on_slug_tenant_id_deleted_at_to_spree_cms_pages.rb +13 -0
- data/db/migrate/20250528090330_add_place_type_to_cm_vendor_place.rb +6 -0
- data/db/migrate/20250602094751_add_host_to_cm_tenants.rb +6 -0
- data/db/migrate/20250609015216_remove_claimed_at_and_expires_at_from_cm_invite_guest.rb +6 -0
- data/db/migrate/20250610080108_add_contact_to_cm_guests.rb +5 -0
- data/db/migrate/20250611023548_add_country_code_to_guests.rb +5 -0
- data/db/migrate/20250612035937_add_intel_phone_number_to_guests.rb +5 -0
- data/lib/spree_cm_commissioner/test_helper/factories/cms_page_factory.rb +11 -0
- data/lib/spree_cm_commissioner/test_helper/factories/invite_guests_factory.rb +6 -0
- data/lib/spree_cm_commissioner/test_helper/factories/tenant_factory.rb +1 -0
- data/lib/spree_cm_commissioner/test_helper/factories/vendor_place_factory.rb +17 -4
- data/lib/spree_cm_commissioner/version.rb +1 -1
- data/lib/spree_cm_commissioner.rb +1 -0
- data/spree_cm_commissioner.gemspec +2 -0
- metadata +66 -4
@@ -1,21 +1,23 @@
|
|
1
1
|
module SpreeCmCommissioner
|
2
2
|
class TripQuery
|
3
|
-
|
3
|
+
include SpreeCmCommissioner::Transit::TripHelper
|
4
4
|
|
5
|
-
|
5
|
+
attr_reader :origin_id, :destination_id, :travel_date, :params
|
6
|
+
|
7
|
+
def initialize(origin_id:, destination_id:, travel_date:, params: {})
|
6
8
|
@origin_id = origin_id
|
7
9
|
@destination_id = destination_id
|
8
10
|
@travel_date = travel_date
|
11
|
+
@travel_date = Time.zone.now if travel_date.to_date == Time.zone.now.to_date
|
12
|
+
@params = params
|
9
13
|
end
|
10
14
|
|
11
15
|
def call
|
12
|
-
|
13
|
-
connections = connected_trips if trips.size < 3
|
14
|
-
|
15
|
-
trip_results = trips.map { |trip| SpreeCmCommissioner::TripQueryResult.new([trip]) }
|
16
|
+
return [] if travel_date.to_date < Date.current
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
direct_results = direct_trips.map { |trip| SpreeCmCommissioner::TripQueryResult.new([trip]) }
|
19
|
+
connected_results = connected_trips || []
|
20
|
+
direct_results + connected_results
|
19
21
|
end
|
20
22
|
|
21
23
|
def direct_trips
|
@@ -38,7 +40,12 @@ module SpreeCmCommissioner
|
|
38
40
|
.joins('INNER JOIN cm_trip_stops AS drop_off ON drop_off.trip_id = spree_variants.id AND drop_off.stop_type = 1')
|
39
41
|
.joins('INNER JOIN spree_vendors AS vendors ON vendors.id = spree_variants.vendor_id')
|
40
42
|
.joins('INNER JOIN spree_products AS routes ON routes.id = spree_variants.product_id')
|
41
|
-
|
43
|
+
result = result.where(vendors: { id: params[:vendor_id] }) if params[:vendor_id].present?
|
44
|
+
result = result.where('boarding.stop_id = ? AND drop_off.stop_id = ?', origin_id, destination_id)
|
45
|
+
.where('trips.departure_time > ? AND trips.departure_time <= ?',
|
46
|
+
travel_date.strftime('%H:%M:%S'),
|
47
|
+
travel_date.end_of_day.strftime('%H:%M:%S')
|
48
|
+
)
|
42
49
|
|
43
50
|
result.map do |trip|
|
44
51
|
trip_result_options = {
|
@@ -53,7 +60,7 @@ module SpreeCmCommissioner
|
|
53
60
|
destination_id: trip[:destination_id],
|
54
61
|
destination: trip[:destination],
|
55
62
|
vehicle_id: trip[:vehicle_id],
|
56
|
-
departure_time: trip[:departure_time],
|
63
|
+
departure_time: parse_time(trip[:departure_time]),
|
57
64
|
duration: trip[:duration]
|
58
65
|
}
|
59
66
|
SpreeCmCommissioner::TripResult.new(trip_result_options)
|
@@ -63,17 +70,17 @@ module SpreeCmCommissioner
|
|
63
70
|
def connected_trips # rubocop:disable Metrics/MethodLength
|
64
71
|
result = SpreeCmCommissioner::TripConnection
|
65
72
|
.joins('
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
73
|
+
INNER JOIN spree_variants variant1 ON variant1.id = cm_trip_connections.from_trip_id
|
74
|
+
INNER JOIN spree_variants variant2 ON variant2.id = cm_trip_connections.to_trip_id
|
75
|
+
INNER JOIN spree_products AS routes1 ON routes1.id = variant1.product_id
|
76
|
+
INNER JOIN spree_products AS routes2 ON routes2.id = variant2.product_id
|
77
|
+
INNER JOIN cm_trips AS trip1 ON trip1.variant_id = cm_trip_connections.from_trip_id
|
78
|
+
INNER JOIN cm_trips AS trip2 ON trip2.variant_id = cm_trip_connections.to_trip_id
|
79
|
+
INNER JOIN cm_trip_stops trip1_origin ON trip1_origin.trip_id = variant1.id AND trip1_origin.stop_type = 0
|
80
|
+
INNER JOIN cm_trip_stops trip2_origin ON trip2_origin.trip_id = variant2.id AND trip2_origin.stop_type = 0
|
81
|
+
INNER JOIN cm_trip_stops trip2_destination ON trip2_destination.trip_id = variant2.id AND trip2_destination.stop_type = 1
|
82
|
+
INNER JOIN spree_vendors AS vendor1 ON vendor1.id = variant1.vendor_id
|
83
|
+
INNER JOIN spree_vendors AS vendor2 ON vendor2.id = variant2.vendor_id'
|
77
84
|
)
|
78
85
|
.select('cm_trip_connections.id AS id,
|
79
86
|
trip1.variant_id AS trip1_id,
|
@@ -97,8 +104,11 @@ module SpreeCmCommissioner
|
|
97
104
|
trip2_origin.stop_name AS trip2_origin,
|
98
105
|
trip2_destination.stop_name AS trip2_destination,
|
99
106
|
vendor2.name AS trip2_vendor_name'
|
100
|
-
).where('trip1_origin.stop_id = ? AND trip2_destination.stop_id = ?', origin_id, destination_id
|
101
|
-
|
107
|
+
).where('trip1_origin.stop_id = ? AND trip2_destination.stop_id = ?', origin_id, destination_id)
|
108
|
+
result = result.where('vendor1.id = ? OR vendor2.id = ?', params[:vendor_id], params[:vendor_id]) if params[:vendor_id].present?
|
109
|
+
result = result.where('trip1.departure_time > ? AND trip1.departure_time <= ?', travel_date.strftime('%H:%M:%S'),
|
110
|
+
travel_date.end_of_day.strftime('%H:%M:%S')
|
111
|
+
).uniq
|
102
112
|
|
103
113
|
return [] if result.blank?
|
104
114
|
|
@@ -113,7 +123,7 @@ module SpreeCmCommissioner
|
|
113
123
|
trip_id: trip[:trip1_id],
|
114
124
|
origin_id: trip[:trip1_origin_id],
|
115
125
|
destination_id: trip[:trip1_destination_id],
|
116
|
-
departure_time: trip[:trip1_departure_time],
|
126
|
+
departure_time: parse_time(trip[:trip1_departure_time]),
|
117
127
|
duration: trip[:trip1_duration],
|
118
128
|
vendor_name: trip[:trip1_vendor_name],
|
119
129
|
route_name: trip[:route1_name],
|
@@ -126,7 +136,7 @@ module SpreeCmCommissioner
|
|
126
136
|
trip_id: trip[:trip2_id],
|
127
137
|
origin_id: trip[:trip2_origin_id],
|
128
138
|
destination_id: trip[:trip2_destination_id],
|
129
|
-
departure_time: trip[:trip2_departure_time],
|
139
|
+
departure_time: parse_time(trip[:trip2_departure_time]),
|
130
140
|
duration: trip[:trip2_duration],
|
131
141
|
vendor_name: trip[:trip2_vendor_name],
|
132
142
|
route_name: trip[:route2_name],
|
@@ -3,7 +3,7 @@ module Spree
|
|
3
3
|
module Organizer
|
4
4
|
class InviteGuestSerializer < BaseSerializer
|
5
5
|
attributes :email, :quantity, :token, :invite_type, :claimed_status, :issued_to, :expiration_date,
|
6
|
-
:
|
6
|
+
:email_send_at, :created_at, :updated_at, :remark
|
7
7
|
belongs_to :variant, serializer: SpreeCmCommissioner::V2::Storefront::EventVariantSerializer
|
8
8
|
belongs_to :order, serializer: Spree::V2::Storefront::OrderSerializer
|
9
9
|
belongs_to :event, serializer: Spree::V2::Storefront::TaxonSerializer
|
@@ -5,6 +5,7 @@ module Spree
|
|
5
5
|
def self.prepended(base)
|
6
6
|
base.has_many :vendors, serializer: ::Spree::V2::Storefront::VendorSerializer
|
7
7
|
base.has_many :visible_products, serializer: ::Spree::V2::Storefront::ProductSerializer
|
8
|
+
base.has_many :places, serializer: ::Spree::V2::Storefront::PlaceSerializer
|
8
9
|
|
9
10
|
base.has_one :category_icon, serializer: ::SpreeCmCommissioner::V2::Storefront::AssetSerializer
|
10
11
|
base.has_one :app_banner, serializer: ::SpreeCmCommissioner::V2::Storefront::AssetSerializer
|
@@ -7,7 +7,7 @@ module SpreeCmCommissioner
|
|
7
7
|
attributes :first_name, :last_name, :dob, :gender, :kyc_fields, :other_occupation, :created_at, :updated_at,
|
8
8
|
:qr_data, :social_contact_platform, :social_contact, :available_social_contact_platforms,
|
9
9
|
:age, :emergency_contact, :other_organization, :expectation, :upload_later, :address, :formatted_bib_number, :phone_number,
|
10
|
-
:token
|
10
|
+
:token, :country_code, :contact
|
11
11
|
|
12
12
|
# temporary, once app release after cm-app v1.9.1, we no longer need this.
|
13
13
|
attribute :seat_number do |object|
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module SpreeCmCommissioner
|
2
|
+
module Organizer
|
3
|
+
class ExportInviteGuestCsvService
|
4
|
+
attr_reader :invite_guest_id, :columns
|
5
|
+
|
6
|
+
def initialize(invite_guest_id, columns)
|
7
|
+
@invite_guest_id = invite_guest_id
|
8
|
+
@columns = (columns + %w[created_at ticket_url]).uniq
|
9
|
+
end
|
10
|
+
|
11
|
+
def call
|
12
|
+
CSV.generate(headers: true) do |csv|
|
13
|
+
csv << (['No.'] + headers)
|
14
|
+
guests.each_with_index do |guest, index|
|
15
|
+
csv << ([index + 1] + build_row(guest))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def headers
|
23
|
+
columns.map(&:humanize).uniq
|
24
|
+
end
|
25
|
+
|
26
|
+
def build_row(guest)
|
27
|
+
columns.map { |column| fetch_value(guest, column) }
|
28
|
+
end
|
29
|
+
|
30
|
+
def fetch_value(guest, column)
|
31
|
+
column_mappings(guest)[column] || ''
|
32
|
+
end
|
33
|
+
|
34
|
+
def column_mappings(guest)
|
35
|
+
{
|
36
|
+
'guest_name' => "#{guest.first_name} #{guest.last_name}".strip,
|
37
|
+
'guest_phone_number' => guest.phone_number,
|
38
|
+
'guest_gender' => guest.gender,
|
39
|
+
'guest_dob' => guest.dob.to_s,
|
40
|
+
'guest_occupation' => guest.occupation&.name || guest.other_occupation,
|
41
|
+
'guest_nationality' => guest.nationality&.name,
|
42
|
+
'guest_age' => guest.age.to_s,
|
43
|
+
'guest_emergency_contact' => guest.emergency_contact,
|
44
|
+
'guest_organization' => guest.other_organization,
|
45
|
+
'guest_social_contact' => guest.social_contact,
|
46
|
+
'guest_address' => guest.address,
|
47
|
+
'guest_expectation' => guest.expectation,
|
48
|
+
'entry_type' => guest.entry_type,
|
49
|
+
'created_at' => guest.created_at.strftime('%Y-%m-%d %H:%M:%S'),
|
50
|
+
'ticket_url' => invite_guest.ticket_url(guest.token)
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
def invite_guest
|
55
|
+
SpreeCmCommissioner::InviteGuest.find(invite_guest_id)
|
56
|
+
end
|
57
|
+
|
58
|
+
def guests
|
59
|
+
invite_guest.order.line_items.first.guests
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -20,12 +20,78 @@
|
|
20
20
|
<!-- Description Field -->
|
21
21
|
<div class="col-12">
|
22
22
|
<%= f.field_container :description do %>
|
23
|
-
<%= f.label :description, raw(Spree.t(:description)
|
24
|
-
<%= f.text_area :description,
|
23
|
+
<%= f.label :description, raw(Spree.t(:description)) %>
|
24
|
+
<%= f.text_area :description, class: 'form-control', placeholder: 'description' %>
|
25
25
|
<%= f.error_message_on :description %>
|
26
26
|
<% end %>
|
27
27
|
</div>
|
28
28
|
|
29
|
+
<!-- Host Field -->
|
30
|
+
<div class="col-12">
|
31
|
+
<%= f.field_container :host do %>
|
32
|
+
<%= f.label :host, raw(Spree.t(:host) + required_span_tag) %>
|
33
|
+
<%= f.text_field :host, required: true, class: 'form-control', placeholder: 'host' %>
|
34
|
+
<%= f.error_message_on :host %>
|
35
|
+
<% end %>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<!-- Assetlinks Field -->
|
39
|
+
<div class="col-12">
|
40
|
+
<%= f.field_container :preferred_assetlinks do %>
|
41
|
+
<%= f.label :preferred_assetlinks, raw(Spree.t(:assetlinks)) %>
|
42
|
+
<%= f.text_area :preferred_assetlinks, class: 'form-control',
|
43
|
+
placeholder: 'example:
|
44
|
+
[
|
45
|
+
{
|
46
|
+
"relation": ["delegate_permission/common.handle_all_urls"],
|
47
|
+
"target": {
|
48
|
+
"namespace": "android_app",
|
49
|
+
"package_name": "com.yourapp.app",
|
50
|
+
"sha256_cert_fingerprints": [
|
51
|
+
"SHA256_CERTIFICATE_FINGERPRINT_HERE"
|
52
|
+
]
|
53
|
+
}
|
54
|
+
}
|
55
|
+
]', rows: 5 %>
|
56
|
+
<%= f.error_message_on :preferred_assetlinks %>
|
57
|
+
<% end %>
|
58
|
+
</div>
|
59
|
+
|
60
|
+
<!-- Apple App Site Association Field -->
|
61
|
+
<div class="col-12">
|
62
|
+
<%= f.field_container :preferred_apple_app_site_association do %>
|
63
|
+
<%= f.label :preferred_apple_app_site_association, raw(Spree.t(:apple_app_site_association)) %>
|
64
|
+
<%= f.text_area :preferred_apple_app_site_association, class: 'form-control',
|
65
|
+
placeholder: 'example:
|
66
|
+
{
|
67
|
+
"webcredentials": {
|
68
|
+
"apps": [
|
69
|
+
"TEAM_ID.com.yourapp.app"
|
70
|
+
]
|
71
|
+
},
|
72
|
+
"applinks": {
|
73
|
+
"apps": [],
|
74
|
+
"details": [
|
75
|
+
{
|
76
|
+
"appID": "TEAM_ID.com.yourapp.app",
|
77
|
+
"paths": ["*"]
|
78
|
+
}
|
79
|
+
]
|
80
|
+
}
|
81
|
+
}', rows: 5 %>
|
82
|
+
<%= f.error_message_on :preferred_apple_app_site_association %>
|
83
|
+
<% end %>
|
84
|
+
</div>
|
85
|
+
|
86
|
+
<!-- Brand Primary Color Field -->
|
87
|
+
<div class="col-md-6">
|
88
|
+
<%= f.label :preferred_brand_primary_color, Spree.t(:brand_primary_color), class: 'form-label' %>
|
89
|
+
<%= f.text_field :preferred_brand_primary_color, class: 'form-control color-picker', placeholder: '#FF5733', value: @object.preferred_brand_primary_color %>
|
90
|
+
<div class="color-preview" style="margin-top: 10px;">
|
91
|
+
<%= content_tag :div, nil, style: "background-color: #{@object.preferred_brand_primary_color}; width: 60px; height: 60px; border: 1px solid #ccc; box-sizing: border-box; display: block;" %>
|
92
|
+
</div>
|
93
|
+
</div>
|
94
|
+
|
29
95
|
<!-- State Field -->
|
30
96
|
<div class="col-6">
|
31
97
|
<%= f.field_container :state do %>
|
@@ -39,8 +39,11 @@ module Spree
|
|
39
39
|
]
|
40
40
|
|
41
41
|
@@store_attributes += [
|
42
|
+
:preferred_sms_sender_id,
|
42
43
|
:preferred_telegram_order_alert_chat_id,
|
43
44
|
:preferred_telegram_order_request_alert_chat_id,
|
45
|
+
:preferred_assetlinks,
|
46
|
+
:preferred_apple_app_site_association,
|
44
47
|
{ default_notification_image_attributes: {} },
|
45
48
|
:term_and_condition_promotion
|
46
49
|
]
|
data/config/routes.rb
CHANGED
@@ -520,6 +520,12 @@ Spree::Core::Engine.add_routes do
|
|
520
520
|
|
521
521
|
resources :cms_pages, only: %i[index show]
|
522
522
|
resources :waiting_room_sessions, only: :create
|
523
|
+
|
524
|
+
resources :order_histories, only: %i[index] do
|
525
|
+
member do
|
526
|
+
patch :archive
|
527
|
+
end
|
528
|
+
end
|
523
529
|
end
|
524
530
|
|
525
531
|
namespace :storefront do
|
@@ -662,4 +668,5 @@ Rails.application.routes.draw do
|
|
662
668
|
get 'o/:id', to: 'spree_cm_commissioner/orders#show', as: 'order'
|
663
669
|
get 'li/:id', to: 'spree_cm_commissioner/line_item_qr_images#show', as: 'line_item_qr_image'
|
664
670
|
get 'g/:id', to: 'spree_cm_commissioner/guest_cards#show', as: 'guest_cards'
|
671
|
+
get '.well-known/:id', to: 'spree_cm_commissioner/well_known#show', constraints: { id: /(assetlinks\.json|apple-app-site-association)/ }
|
665
672
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateSpreeCommissionerTaxonPlaces < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :cm_taxon_places, if_not_exists: true do |t|
|
4
|
+
t.references :place, null: false, foreign_key: { to_table: :cm_places }
|
5
|
+
t.references :taxon, null: false, foreign_key: { to_table: :spree_taxons }
|
6
|
+
t.integer :type, default: 0, null: false
|
7
|
+
t.integer :position, default: 0, null: false
|
8
|
+
t.text :description
|
9
|
+
|
10
|
+
t.index [:place_id, :taxon_id], unique: true
|
11
|
+
|
12
|
+
t.timestamps
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class RemoveUniqueSlugIndexOnSpreeCmsPages < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
if index_exists?(:spree_cms_pages,
|
4
|
+
[:slug, :store_id, :deleted_at],
|
5
|
+
unique: true,
|
6
|
+
name: "index_spree_cms_pages_on_slug_and_store_id_and_deleted_at")
|
7
|
+
|
8
|
+
remove_index :spree_cms_pages,
|
9
|
+
name: "index_spree_cms_pages_on_slug_and_store_id_and_deleted_at"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/db/migrate/20250528074043_add_unique_index_on_slug_tenant_id_deleted_at_to_spree_cms_pages.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
class AddUniqueIndexOnSlugTenantIdDeletedAtToSpreeCmsPages < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
unless index_exists?(:spree_cms_pages,
|
4
|
+
[:slug, :tenant_id, :deleted_at],
|
5
|
+
unique: true,
|
6
|
+
name: "index_spree_cms_pages_on_slug_and_tenant_id_and_deleted_at")
|
7
|
+
|
8
|
+
add_index :spree_cms_pages, [:slug, :tenant_id, :deleted_at],
|
9
|
+
unique: true,
|
10
|
+
name: "index_spree_cms_pages_on_slug_and_tenant_id_and_deleted_at"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
factory :cm_cms_page, class: 'Spree::CmsPage' do
|
3
|
+
sequence(:slug) { |n| "page-slug-#{n}" }
|
4
|
+
title { "Sample Page Title" }
|
5
|
+
association :store, factory: :store
|
6
|
+
locale { 'en' }
|
7
|
+
type { 'Spree::Cms::Pages::StandardPage' }
|
8
|
+
tenant { nil }
|
9
|
+
deleted_at { nil }
|
10
|
+
end
|
11
|
+
end
|
@@ -1,8 +1,21 @@
|
|
1
1
|
FactoryBot.define do
|
2
|
-
factory :
|
3
|
-
vendor
|
4
|
-
|
2
|
+
factory :vendor_place, class: SpreeCmCommissioner::VendorPlace do
|
3
|
+
association :vendor, factory: :vendor
|
4
|
+
association :place, factory: :cm_place
|
5
5
|
distance { FFaker::Number.decimal }
|
6
6
|
position { FFaker::Number.number }
|
7
|
+
place_type { :branch }
|
8
|
+
|
9
|
+
trait :branch do
|
10
|
+
place_type { :branch }
|
11
|
+
end
|
12
|
+
|
13
|
+
trait :stop do
|
14
|
+
place_type { :stop }
|
15
|
+
end
|
16
|
+
|
17
|
+
trait :locations do
|
18
|
+
place_type { :locations }
|
19
|
+
end
|
7
20
|
end
|
8
|
-
end
|
21
|
+
end
|
@@ -57,5 +57,7 @@ Gem::Specification.new do |s|
|
|
57
57
|
s.add_development_dependency 'pg'
|
58
58
|
s.add_development_dependency 'spree_dev_tools'
|
59
59
|
s.add_dependency 'blazer', '~> 3.0.4'
|
60
|
+
s.add_dependency 'strong_password', '~> 0.0.10'
|
61
|
+
s.add_dependency 'spree_vpago'
|
60
62
|
s.metadata['rubygems_mfa_required'] = 'true'
|
61
63
|
end
|