spree_cm_commissioner 1.10.0.pre.pre1 → 1.10.0.pre.hotfix.pre.sms
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/.github/workflows/test_and_build_gem.yml +48 -26
- data/.gitignore +1 -2
- data/.vscode/settings.json +1 -1
- data/Gemfile.lock +1 -22
- data/app/controllers/spree/admin/cms_pages_controller_decorator.rb +32 -0
- data/app/controllers/spree/admin/stock_managements_controller.rb +1 -17
- data/app/controllers/spree/api/v2/storefront/accommodations_controller.rb +31 -14
- data/app/controllers/spree/api/v2/tenant/account_checker_controller.rb +1 -1
- data/app/controllers/spree/api/v2/tenant/account_recovers_controller.rb +2 -2
- data/app/controllers/spree/api/v2/tenant/cms_pages_controller.rb +41 -0
- data/app/controllers/spree/api/v2/tenant/reset_passwords_controller.rb +1 -1
- data/app/controllers/spree_cm_commissioner/api/v2/storefront/cms_pages_controller_decorator.rb +18 -0
- data/app/interactors/spree_cm_commissioner/account_recover.rb +2 -2
- data/app/interactors/spree_cm_commissioner/create_event.rb +23 -0
- data/app/interactors/spree_cm_commissioner/existing_account_checker.rb +1 -1
- data/app/interactors/spree_cm_commissioner/pin_code_sender.rb +3 -3
- data/app/interactors/spree_cm_commissioner/sms.rb +14 -0
- data/app/interactors/spree_cm_commissioner/telegram_debug_pin_code_sender.rb +2 -1
- data/app/interactors/spree_cm_commissioner/user_forgotten_password_updater.rb +2 -1
- data/app/interactors/spree_cm_commissioner/user_password_authenticator.rb +4 -2
- data/app/interactors/spree_cm_commissioner/vattanac_bank_initiator.rb +2 -2
- data/app/jobs/spree_cm_commissioner/telegram_debug_pin_code_sender_job.rb +3 -1
- data/app/models/concerns/spree_cm_commissioner/option_type_attr_type.rb +3 -2
- data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +0 -26
- data/app/models/concerns/spree_cm_commissioner/product_type.rb +0 -10
- data/app/models/concerns/spree_cm_commissioner/user_identity.rb +7 -4
- data/app/models/spree_cm_commissioner/cms_page_decorator.rb +9 -0
- data/app/models/spree_cm_commissioner/line_item_decorator.rb +0 -1
- data/app/models/spree_cm_commissioner/order_decorator.rb +0 -15
- data/app/models/spree_cm_commissioner/place.rb +11 -2
- data/app/models/spree_cm_commissioner/product_decorator.rb +0 -1
- data/app/models/spree_cm_commissioner/stock/availability_checker.rb +25 -27
- data/app/models/spree_cm_commissioner/stock/availability_validator_decorator.rb +1 -2
- data/app/models/spree_cm_commissioner/stock/line_item_availability_checker.rb +3 -3
- data/app/models/spree_cm_commissioner/taxon_decorator.rb +11 -0
- data/app/models/spree_cm_commissioner/taxon_option_type.rb +8 -0
- data/app/models/spree_cm_commissioner/taxon_option_value.rb +8 -0
- data/app/models/spree_cm_commissioner/trip.rb +0 -11
- data/app/models/spree_cm_commissioner/trip_connection.rb +1 -0
- data/app/models/spree_cm_commissioner/trip_stop.rb +12 -5
- data/app/models/spree_cm_commissioner/variant_decorator.rb +28 -25
- data/app/models/spree_cm_commissioner/variant_options.rb +0 -14
- data/app/models/spree_cm_commissioner/vehicle.rb +0 -7
- data/app/models/spree_cm_commissioner/vendor_decorator.rb +2 -1
- data/app/models/spree_cm_commissioner/vendor_stop.rb +2 -1
- data/app/overrides/spree/admin/cms_pages/_form/tenant_fields.html.erb.deface +7 -0
- data/app/overrides/spree/admin/cms_pages/index/cms_pages_tabs.html.erb.deface +21 -0
- data/app/overrides/spree/admin/users/index/body.html.erb.deface +3 -0
- data/app/overrides/spree/admin/users/index/headers.html.erb.deface +3 -0
- data/app/queries/spree_cm_commissioner/trip_query.rb +11 -11
- data/app/queries/spree_cm_commissioner/variant_availability/non_permanent_stock_query.rb +45 -0
- data/app/queries/spree_cm_commissioner/variant_availability/permanent_stock_query.rb +55 -0
- data/app/queries/spree_cm_commissioner/vendor_stop_place_query.rb +54 -0
- data/app/request_schemas/spree_cm_commissioner/accommodation_request_schema.rb +0 -3
- data/app/request_schemas/spree_cm_commissioner/application_request_schema.rb +1 -1
- data/app/serializers/spree/v2/storefront/accommodation_serializer.rb +0 -2
- data/app/serializers/spree/v2/tenant/guest_serializer.rb +1 -0
- data/app/services/spree_cm_commissioner/organizer/export_guest_csv_service.rb +2 -0
- data/app/services/spree_cm_commissioner/user_authenticator.rb +3 -1
- data/app/views/spree/admin/shared/_cms_pages_tabs.html.erb +20 -0
- data/app/views/spree/admin/stock_managements/index.html.erb +5 -31
- data/config/routes.rb +4 -11
- data/db/migrate/20250418072528_add_nested_set_columns_to_places.rb +10 -0
- data/db/migrate/20250430091742_create_cm_taxon_option_types.rb +9 -0
- data/db/migrate/20250430092928_create_cm_taxon_option_values.rb +9 -0
- data/db/migrate/20250506092929_add_trip_count_to_cm_vendor_stops.rb +5 -0
- data/db/migrate/20250512075319_add_tenant_id_to_spree_cms_pages.rb +6 -0
- data/docker-compose.yml +1 -1
- data/lib/generators/spree_cm_commissioner/install/install_generator.rb +2 -2
- data/lib/generators/spree_cm_commissioner/install/templates/app/javascript/{spree_dashboard/spree_cm_commissioner → spree_cm_commissioner}/utilities.js +0 -4
- data/lib/spree_cm_commissioner/calendar_event.rb +1 -11
- data/lib/spree_cm_commissioner/test_helper/factories/place_factory.rb +11 -1
- data/lib/spree_cm_commissioner/test_helper/factories/variant_factory.rb +6 -28
- data/lib/spree_cm_commissioner/version.rb +1 -1
- data/lib/spree_cm_commissioner.rb +0 -34
- data/lib/tasks/migrate_and_rebuild_place_hierarchy.rake +9 -0
- data/lib/tasks/update_orphan_root_places.rake +7 -0
- data/spree_cm_commissioner.gemspec +0 -5
- metadata +22 -69
- data/app/controllers/spree/api/v2/storefront/accommodations/variants_controller.rb +0 -42
- data/app/finders/spree_cm_commissioner/accommodations/find.rb +0 -40
- data/app/finders/spree_cm_commissioner/accommodations/find_variant.rb +0 -35
- data/app/interactors/spree_cm_commissioner/inventory_item_syncer.rb +0 -25
- data/app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb +0 -71
- data/app/jobs/spree_cm_commissioner/inventory_item_syncer_job.rb +0 -7
- data/app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb +0 -9
- data/app/models/spree_cm_commissioner/inventory.rb +0 -11
- data/app/models/spree_cm_commissioner/inventory_item.rb +0 -37
- data/app/models/spree_cm_commissioner/redis_stock/cached_inventory_items_builder.rb +0 -40
- data/app/models/spree_cm_commissioner/redis_stock/inventory_updater.rb +0 -114
- data/app/models/spree_cm_commissioner/redis_stock/line_items_cached_inventory_items_builder.rb +0 -42
- data/app/models/spree_cm_commissioner/redis_stock/variant_cached_inventory_items_builder.rb +0 -27
- data/app/models/spree_cm_commissioner/stock/order_availability_checker.rb +0 -44
- data/app/models/spree_cm_commissioner/stock_movement_decorator.rb +0 -34
- data/app/request_schemas/spree_cm_commissioner/variant_request_schema.rb +0 -19
- data/app/views/spree/admin/stock_managements/_events_popover.html.erb +0 -17
- data/app/views/spree/admin/stock_managements/calendar.html.erb +0 -32
- data/db/migrate/20250304293518_create_cm_inventory_items.rb +0 -21
- data/db/migrate/20250429094228_add_lock_version_to_cm_inventory_items.rb +0 -5
- data/lib/spree_cm_commissioner/cached_inventory_item.rb +0 -23
- data/lib/spree_cm_commissioner/test_helper/factories/inventory_item_factory.rb +0 -9
- data/lib/tasks/create_default_non_permanent_inventory_items.rake +0 -16
- data/lib/tasks/generate_inventory_items.rake +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c251d1cc34649b5f829ebbc62bda4569e1a6358fa05ff26f44f39455de799e6
|
4
|
+
data.tar.gz: bee3ddf20b6cfb452f8d17eaa166d3e8f7b31d7d2be1d71160275f40527164e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 734bb93b3cad9b411ced875bf2d05b23ca837534e630f358e3eb15687d0daed05486e82225fd78505f8a71583127e6cbadac9fb0d3a4e3f0492903e36bf5a2b0
|
7
|
+
data.tar.gz: f3b0d288ba9cd62d5d79ee8cae5b514b9d126d29c7563a40b14abf0b5342416940eac9c93a8a7c7aea90eb8c4e4f08f490a2bad22ad82bb86c435c2010686dbd
|
@@ -3,6 +3,11 @@ name: Commissioner Gem
|
|
3
3
|
|
4
4
|
on:
|
5
5
|
pull_request:
|
6
|
+
types:
|
7
|
+
- opened
|
8
|
+
- edited
|
9
|
+
- synchronize
|
10
|
+
- reopened
|
6
11
|
branches:
|
7
12
|
- develop
|
8
13
|
push:
|
@@ -14,8 +19,8 @@ jobs:
|
|
14
19
|
|
15
20
|
steps:
|
16
21
|
- name: Check PR title format
|
17
|
-
uses: actions/github-script@v7
|
18
22
|
if: github.event_name == 'pull_request'
|
23
|
+
uses: actions/github-script@v7
|
19
24
|
with:
|
20
25
|
script: |
|
21
26
|
const title = context.payload.pull_request.title.trim();
|
@@ -32,8 +37,8 @@ jobs:
|
|
32
37
|
console.log("PR title format is correct.");
|
33
38
|
}
|
34
39
|
- name: Check commit messages format
|
35
|
-
uses: actions/github-script@v7
|
36
40
|
if: github.event_name == 'pull_request'
|
41
|
+
uses: actions/github-script@v7
|
37
42
|
with:
|
38
43
|
script: |
|
39
44
|
const pr = context.payload.pull_request;
|
@@ -64,33 +69,52 @@ jobs:
|
|
64
69
|
console.log("All commit messages are correctly formatted.");
|
65
70
|
}
|
66
71
|
- name: Check for unresolved review threads
|
67
|
-
uses: actions/github-script@v7
|
68
72
|
if: github.event_name == 'pull_request'
|
73
|
+
uses: actions/github-script@v7
|
69
74
|
with:
|
70
75
|
script: |
|
71
|
-
const
|
72
|
-
const owner = context.repo
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
76
|
+
const prNumber = context.payload.pull_request.number;
|
77
|
+
const { owner, repo } = context.repo;
|
78
|
+
|
79
|
+
const query = `
|
80
|
+
query($owner: String!, $repo: String!, $prNumber: Int!) {
|
81
|
+
repository(owner: $owner, name: $repo) {
|
82
|
+
pullRequest(number: $prNumber) {
|
83
|
+
reviewThreads(first: 100) {
|
84
|
+
nodes {
|
85
|
+
isResolved
|
86
|
+
comments(first: 1) {
|
87
|
+
nodes {
|
88
|
+
body
|
89
|
+
author {
|
90
|
+
login
|
91
|
+
}
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}
|
95
|
+
}
|
96
|
+
}
|
97
|
+
}
|
89
98
|
}
|
90
|
-
|
91
|
-
|
92
|
-
|
99
|
+
`;
|
100
|
+
const variables = { owner, repo, prNumber };
|
101
|
+
const result = await github.graphql(query, variables);
|
102
|
+
const threads = result.repository.pullRequest.reviewThreads.nodes;
|
103
|
+
|
104
|
+
const unresolved = threads.filter(t => !t.isResolved);
|
105
|
+
|
106
|
+
if (unresolved.length > 0) {
|
107
|
+
unresolved.forEach(thread => {
|
108
|
+
const comments = thread.comments.nodes;
|
109
|
+
if (comments.length > 0) {
|
110
|
+
console.log(`💬 Comment by ${comments[0].author.login}: ${comments[0].body}`);
|
111
|
+
}
|
112
|
+
});
|
113
|
+
core.setFailed(`❌ There are ${unresolved.length} unresolved review thread(s). Please resolve them before merging.`);
|
114
|
+
} else {
|
115
|
+
console.log("✅ All review threads are resolved.");
|
93
116
|
}
|
117
|
+
|
94
118
|
test_and_build_gem:
|
95
119
|
needs: [validate-commits]
|
96
120
|
# if: github.head_ref != '2572-enforce-pr-workflow' || github.base_ref != 'develop'
|
@@ -133,14 +157,12 @@ jobs:
|
|
133
157
|
bundle install --jobs 4 --retry 3
|
134
158
|
|
135
159
|
- name: Quality
|
136
|
-
if: github.event_name == 'pull_request'
|
137
160
|
env:
|
138
161
|
DATABASE_URL: postgres://myuser:mypassword@localhost:5432/test_db
|
139
162
|
run: |
|
140
163
|
bundle exec rubocop
|
141
164
|
|
142
165
|
- name: Security
|
143
|
-
if: github.event_name == 'pull_request'
|
144
166
|
env:
|
145
167
|
DATABASE_URL: postgres://myuser:mypassword@localhost:5432/test_db
|
146
168
|
run: |
|
data/.gitignore
CHANGED
data/.vscode/settings.json
CHANGED
data/Gemfile.lock
CHANGED
@@ -34,7 +34,7 @@ GIT
|
|
34
34
|
PATH
|
35
35
|
remote: .
|
36
36
|
specs:
|
37
|
-
spree_cm_commissioner (1.10.0.pre.
|
37
|
+
spree_cm_commissioner (1.10.0.pre.hotfix.pre.sms)
|
38
38
|
activerecord-multi-tenant
|
39
39
|
activerecord_json_validator (~> 2.1, >= 2.1.3)
|
40
40
|
aws-sdk-cloudfront
|
@@ -42,7 +42,6 @@ PATH
|
|
42
42
|
aws-sdk-s3
|
43
43
|
blazer (~> 3.0.4)
|
44
44
|
byebug
|
45
|
-
connection_pool
|
46
45
|
counter_culture (~> 3.2)
|
47
46
|
dry-validation (~> 1.10)
|
48
47
|
elasticsearch (~> 8.5)
|
@@ -58,8 +57,6 @@ PATH
|
|
58
57
|
phonelib
|
59
58
|
premailer-rails
|
60
59
|
rails (~> 7.0.4)
|
61
|
-
redis
|
62
|
-
redis-rails
|
63
60
|
rqrcode (~> 2.0)
|
64
61
|
searchkick (~> 5.1)
|
65
62
|
simple_calendar (~> 2.4)
|
@@ -620,8 +617,6 @@ GEM
|
|
620
617
|
activesupport (>= 2.3.14)
|
621
618
|
racc (1.7.1)
|
622
619
|
rack (2.2.8)
|
623
|
-
rack-session (1.0.2)
|
624
|
-
rack (< 3)
|
625
620
|
rack-test (2.1.0)
|
626
621
|
rack (>= 1.3)
|
627
622
|
rails (7.0.8)
|
@@ -665,24 +660,8 @@ GEM
|
|
665
660
|
rbtree (0.4.6)
|
666
661
|
redis (5.0.7)
|
667
662
|
redis-client (>= 0.9.0)
|
668
|
-
redis-actionpack (5.5.0)
|
669
|
-
actionpack (>= 5)
|
670
|
-
redis-rack (>= 2.1.0, < 4)
|
671
|
-
redis-store (>= 1.1.0, < 2)
|
672
|
-
redis-activesupport (5.3.0)
|
673
|
-
activesupport (>= 3, < 8)
|
674
|
-
redis-store (>= 1.3, < 2)
|
675
663
|
redis-client (0.17.0)
|
676
664
|
connection_pool
|
677
|
-
redis-rack (3.0.0)
|
678
|
-
rack-session (>= 0.2.0)
|
679
|
-
redis-store (>= 1.2, < 2)
|
680
|
-
redis-rails (5.0.2)
|
681
|
-
redis-actionpack (>= 5.0, < 6)
|
682
|
-
redis-activesupport (>= 5.0, < 6)
|
683
|
-
redis-store (>= 1.2, < 2)
|
684
|
-
redis-store (1.11.0)
|
685
|
-
redis (>= 4, < 6)
|
686
665
|
regexp_parser (2.8.2)
|
687
666
|
representable (3.2.0)
|
688
667
|
declarative (< 0.1.0)
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
module CmsPagesControllerDecorator
|
4
|
+
def scope
|
5
|
+
return Spree::CmsPage.none unless current_store&.cms_pages
|
6
|
+
|
7
|
+
scope = current_store.cms_pages
|
8
|
+
|
9
|
+
case params[:tab]
|
10
|
+
when 'default'
|
11
|
+
scope = scope.where(tenant_id: nil)
|
12
|
+
when 'tenants'
|
13
|
+
scope = if params[:tenant_id].present?
|
14
|
+
scope.where(tenant_id: params[:tenant_id])
|
15
|
+
else
|
16
|
+
scope.where.not(tenant_id: nil)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
scope
|
21
|
+
end
|
22
|
+
|
23
|
+
def permitted_resource_params
|
24
|
+
super.merge(tenant_id: params[:cms_page][:tenant_id])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
unless Spree::Admin::CmsPagesController.included_modules.include?(Spree::Admin::CmsPagesControllerDecorator)
|
31
|
+
Spree::Admin::CmsPagesController.prepend(Spree::Admin::CmsPagesControllerDecorator)
|
32
|
+
end
|
@@ -12,25 +12,9 @@ module Spree
|
|
12
12
|
def index
|
13
13
|
@variants = @product.variants.includes(:images, stock_items: :stock_location, option_values: :option_type)
|
14
14
|
@variants = [@product.master] if @variants.empty?
|
15
|
-
@stock_locations = (@variants.flat_map(&:stock_locations) + @product.vendor.stock_locations).uniq
|
16
|
-
|
17
|
-
load_inventories unless @product.permanent_stock?
|
18
|
-
end
|
19
|
-
|
20
|
-
def calendar
|
21
|
-
@year = params[:year].present? ? params[:year].to_i : Time.zone.today.year
|
22
15
|
|
23
|
-
|
24
|
-
to_date = Date.new(@year, 1, 1).end_of_year
|
25
|
-
|
26
|
-
@inventory_items = @product.inventory_items.includes(:variant).where(inventory_date: from_date..to_date).to_a
|
27
|
-
@events = SpreeCmCommissioner::CalendarEvent.from_inventory_items(@inventory_items)
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
16
|
+
@stock_locations = (@variants.flat_map(&:stock_locations) + @product.vendor.stock_locations).uniq
|
31
17
|
|
32
|
-
def load_inventories
|
33
|
-
@inventory_items = @product.inventory_items.group_by { |item| item.variant.id }
|
34
18
|
@reserved_stocks = Spree::LineItem
|
35
19
|
.complete
|
36
20
|
.where(variant_id: @variants.pluck(:id))
|
@@ -5,38 +5,55 @@ module Spree
|
|
5
5
|
class AccommodationsController < ::Spree::Api::V2::ResourceController
|
6
6
|
private
|
7
7
|
|
8
|
-
# override
|
9
8
|
def collection
|
10
|
-
@collection ||=
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
9
|
+
@collection ||= collection_finder.call(params: params).value
|
10
|
+
end
|
11
|
+
|
12
|
+
def paginated_collection
|
13
|
+
return @paginated_collection if defined?(@paginated_collection)
|
14
|
+
|
15
|
+
@paginated_collection = super
|
16
|
+
@paginated_collection = apply_service_availability(@paginated_collection)
|
17
17
|
end
|
18
18
|
|
19
|
-
# override
|
20
19
|
def resource
|
21
|
-
|
20
|
+
resource = resource_finder.call(params: params).value
|
21
|
+
raise ActiveRecord::RecordNotFound if resource.nil?
|
22
|
+
|
23
|
+
apply_service_availability(resource)
|
24
|
+
end
|
25
|
+
|
26
|
+
def apply_service_availability(resource)
|
27
|
+
SpreeCmCommissioner::ApplyServiceAvailability.call(calendarable: resource,
|
28
|
+
from_date: params[:from_date].to_date,
|
29
|
+
to_date: params[:to_date].to_date
|
30
|
+
).value
|
22
31
|
end
|
23
32
|
|
24
|
-
# override
|
25
33
|
def allowed_sort_attributes
|
26
34
|
super << :min_price << :max_price
|
27
35
|
end
|
28
36
|
|
29
|
-
|
37
|
+
def model_class
|
38
|
+
Spree::Vendor
|
39
|
+
end
|
40
|
+
|
30
41
|
def resource_serializer
|
31
42
|
Spree::V2::Storefront::AccommodationSerializer
|
32
43
|
end
|
33
44
|
|
34
|
-
# override
|
35
45
|
def collection_serializer
|
36
46
|
Spree::V2::Storefront::AccommodationSerializer
|
37
47
|
end
|
38
48
|
|
39
|
-
|
49
|
+
def collection_finder
|
50
|
+
SpreeCmCommissioner::AccommodationSearchDetail
|
51
|
+
end
|
52
|
+
|
53
|
+
def resource_finder
|
54
|
+
SpreeCmCommissioner::AccommodationSearchDetail
|
55
|
+
end
|
56
|
+
|
40
57
|
def required_schema
|
41
58
|
SpreeCmCommissioner::AccommodationRequestSchema
|
42
59
|
end
|
@@ -4,7 +4,7 @@ module Spree
|
|
4
4
|
module Tenant
|
5
5
|
class AccountRecoversController < BaseController
|
6
6
|
def update
|
7
|
-
context = SpreeCmCommissioner::AccountRecover.call(**filter_params.slice(:id_token, :login, :password))
|
7
|
+
context = SpreeCmCommissioner::AccountRecover.call(**filter_params.slice(:id_token, :login, :password, :tenant_id))
|
8
8
|
if context.success?
|
9
9
|
render json: { message: 'Account Recovered successfully' }, status: :ok
|
10
10
|
else
|
@@ -15,7 +15,7 @@ module Spree
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def filter_params
|
18
|
-
params.permit(:id_token, :login, :password)
|
18
|
+
params.permit(:id_token, :login, :password).merge(tenant_id: MultiTenant.current_tenant_id)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Tenant
|
5
|
+
class CmsPagesController < BaseController
|
6
|
+
private
|
7
|
+
|
8
|
+
def model_class
|
9
|
+
Spree::CmsPage
|
10
|
+
end
|
11
|
+
|
12
|
+
def resource
|
13
|
+
@resource ||= scope.find_by(slug: params[:id]) || scope.find(params[:id])
|
14
|
+
end
|
15
|
+
|
16
|
+
def resource_serializer
|
17
|
+
Spree::Api::Dependencies.storefront_cms_page_serializer.constantize
|
18
|
+
end
|
19
|
+
|
20
|
+
def collection_serializer
|
21
|
+
Spree::Api::Dependencies.storefront_cms_page_serializer.constantize
|
22
|
+
end
|
23
|
+
|
24
|
+
def collection_finder
|
25
|
+
Spree::Api::Dependencies.storefront_cms_page_finder.constantize
|
26
|
+
end
|
27
|
+
|
28
|
+
def scope
|
29
|
+
model_class.by_locale(I18n.locale).where(tenant_id: MultiTenant.current_tenant_id)
|
30
|
+
end
|
31
|
+
|
32
|
+
def scope_includes
|
33
|
+
{
|
34
|
+
cms_sections: :linked_resource
|
35
|
+
}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/app/controllers/spree_cm_commissioner/api/v2/storefront/cms_pages_controller_decorator.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
module SpreeCmCommissioner
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Storefront
|
5
|
+
module CmsPagesControllerDecorator
|
6
|
+
def scope
|
7
|
+
super.by_locale(I18n.locale).where(tenant_id: nil)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Prepend the decorator to the CmsPagesController
|
16
|
+
unless Spree::Api::V2::Storefront::CmsPagesController.ancestors.include?(SpreeCmCommissioner::Api::V2::Storefront::CmsPagesControllerDecorator)
|
17
|
+
Spree::Api::V2::Storefront::CmsPagesController.prepend(SpreeCmCommissioner::Api::V2::Storefront::CmsPagesControllerDecorator)
|
18
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module SpreeCmCommissioner
|
2
2
|
class AccountRecover < BaseInteractor
|
3
|
-
delegate :id_token, :login, :password, to: :context
|
3
|
+
delegate :id_token, :login, :password, :tenant_id, to: :context
|
4
4
|
|
5
5
|
def call
|
6
6
|
validate_user
|
@@ -15,7 +15,7 @@ module SpreeCmCommissioner
|
|
15
15
|
def validate_user
|
16
16
|
# get email password user
|
17
17
|
if login.present? && password.present?
|
18
|
-
context.user = Spree.user_class.find_user_by_login(login)
|
18
|
+
context.user = Spree.user_class.find_user_by_login(login, tenant_id)
|
19
19
|
# get social user
|
20
20
|
elsif id_token.present?
|
21
21
|
checker_context = SpreeCmCommissioner::UserIdTokenChecker.call(id_token: id_token)
|
@@ -10,6 +10,8 @@ module SpreeCmCommissioner
|
|
10
10
|
assign_prototype
|
11
11
|
create_child_taxon
|
12
12
|
build_home_banner
|
13
|
+
assign_option_types
|
14
|
+
assign_option_values
|
13
15
|
end
|
14
16
|
end
|
15
17
|
|
@@ -61,5 +63,26 @@ module SpreeCmCommissioner
|
|
61
63
|
|
62
64
|
context.fail!(message: 'Home banner upload failed') unless banner.persisted?
|
63
65
|
end
|
66
|
+
|
67
|
+
def assign_options(model_class, param_key, foreign_key)
|
68
|
+
return unless params[param_key]
|
69
|
+
|
70
|
+
params[param_key].each do |id|
|
71
|
+
record = model_class.new(
|
72
|
+
taxon_id: @parent_taxon.id,
|
73
|
+
foreign_key => id
|
74
|
+
)
|
75
|
+
|
76
|
+
context.fail!(message: record.errors.full_messages.join(', ')) unless record.save
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def assign_option_types
|
81
|
+
assign_options(SpreeCmCommissioner::TaxonOptionType, :option_type_id, :option_type_id)
|
82
|
+
end
|
83
|
+
|
84
|
+
def assign_option_values
|
85
|
+
assign_options(SpreeCmCommissioner::TaxonOptionValue, :option_value_id, :option_value_id)
|
86
|
+
end
|
64
87
|
end
|
65
88
|
end
|
@@ -3,7 +3,7 @@ module SpreeCmCommissioner
|
|
3
3
|
include Interactor
|
4
4
|
|
5
5
|
def call
|
6
|
-
user = Spree.user_class.find_user_by_login(context.login) if context.login.present?
|
6
|
+
user = Spree.user_class.find_user_by_login(context.login, context.tenant_id) if context.login.present?
|
7
7
|
|
8
8
|
context.fail!(message: I18n.t('account_checker.verify.already_exist', login: context.login)) if user.present?
|
9
9
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module SpreeCmCommissioner
|
2
2
|
class PinCodeSender < BaseInteractor
|
3
|
+
include SpreeCmCommissioner::PinCodeSenderHelper
|
4
|
+
|
3
5
|
def call
|
4
6
|
context.fail!(message: I18n.t('pincode_sender.pincode.blank')) if context.pin_code.nil?
|
5
7
|
|
@@ -15,10 +17,8 @@ module SpreeCmCommissioner
|
|
15
17
|
private
|
16
18
|
|
17
19
|
def send_sms
|
18
|
-
from = context.tenant || Spree::Store.default
|
19
|
-
|
20
20
|
options = {
|
21
|
-
from:
|
21
|
+
from: sender_name(context.tenant),
|
22
22
|
to: context.pin_code.contact,
|
23
23
|
body: I18n.t('pincode_sender.sms.body', code: context.pin_code.code, readable_type: context.pin_code.readable_type)
|
24
24
|
}
|
@@ -11,6 +11,8 @@ module SpreeCmCommissioner
|
|
11
11
|
context.sms_log.error = e.message
|
12
12
|
context.sms_log.save
|
13
13
|
context.fail!(message: e.message)
|
14
|
+
|
15
|
+
log_error_to_telegram(e.message)
|
14
16
|
end
|
15
17
|
end
|
16
18
|
|
@@ -57,5 +59,17 @@ module SpreeCmCommissioner
|
|
57
59
|
result = SpreeCmCommissioner::InternationalMobileFormatter.call(phone_number: number)
|
58
60
|
result.formatted_phone_number
|
59
61
|
end
|
62
|
+
|
63
|
+
def log_error_to_telegram(message)
|
64
|
+
return unless ENV['PIN_CODE_DEBUG_NOTIFIY_TELEGRAM_ENABLE'] == 'yes'
|
65
|
+
|
66
|
+
options = {
|
67
|
+
pin_code_id: context.pin_code.id,
|
68
|
+
tenant_id: context.tenant&.id,
|
69
|
+
error_message: message
|
70
|
+
}
|
71
|
+
|
72
|
+
SpreeCmCommissioner::TelegramDebugPinCodeSenderJob.perform_later(options)
|
73
|
+
end
|
60
74
|
end
|
61
75
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module SpreeCmCommissioner
|
2
2
|
class TelegramDebugPinCodeSender < BaseInteractor
|
3
|
-
delegate :pin_code, :name, to: :context
|
3
|
+
delegate :pin_code, :name, :error_message, to: :context
|
4
4
|
|
5
5
|
def call
|
6
6
|
telegram_client.send_message(
|
@@ -16,6 +16,7 @@ module SpreeCmCommissioner
|
|
16
16
|
text << "<b>From: #{name}</b>"
|
17
17
|
text << "<b>PIN CODE sent to #{pin_code.contact}</b>"
|
18
18
|
text << "<code>#{pin_code.code}</code> is your #{pin_code.readable_type}"
|
19
|
+
text << "⚠️ Error: <code>#{error_message}<code> ⚠️" if error_message.present?
|
19
20
|
|
20
21
|
text.compact.join("\n")
|
21
22
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module SpreeCmCommissioner
|
2
2
|
class UserForgottenPasswordUpdater < BaseInteractor
|
3
3
|
# :email, :phone_number, :country_code :pin_code, :pin_code_token, :password, :password_confirmation
|
4
|
+
delegate :tenant_id, to: :context
|
4
5
|
|
5
6
|
def call
|
6
7
|
find_user_by_login!
|
@@ -19,7 +20,7 @@ module SpreeCmCommissioner
|
|
19
20
|
def find_user_by_login!
|
20
21
|
login = phone_number || email
|
21
22
|
|
22
|
-
context.user = Spree.user_class.find_user_by_login(login)
|
23
|
+
context.user = Spree.user_class.find_user_by_login(login, tenant_id)
|
23
24
|
context.fail!(message: I18n.t('account_checker.verify.not_exist', login: login)) if context.user.blank?
|
24
25
|
end
|
25
26
|
|
@@ -1,13 +1,15 @@
|
|
1
1
|
module SpreeCmCommissioner
|
2
2
|
class UserPasswordAuthenticator < BaseInteractor
|
3
|
-
delegate :login, :password, to: :context
|
3
|
+
delegate :login, :password, :tenant_id, to: :context
|
4
4
|
|
5
5
|
def call
|
6
|
-
context.user = Spree.user_class.find_user_by_login(login)
|
6
|
+
context.user = Spree.user_class.find_user_by_login(login, tenant_id)
|
7
7
|
context.fail!(message: I18n.t('authenticator.incorrect_login')) if context.user.nil?
|
8
|
+
|
8
9
|
if spree_confirmable? && active_for_authentication? && !validate_password(user)
|
9
10
|
context.fail!(message: I18n.t('authenticator.incorrect_password'))
|
10
11
|
end
|
12
|
+
|
11
13
|
context.fail!(message: I18n.t('authenticator.incorrect_password')) unless validate_password(context.user)
|
12
14
|
context.fail!(message: 'account_temporarily_deleted') if context.user.soft_deleted?
|
13
15
|
end
|
@@ -53,7 +53,7 @@ module SpreeCmCommissioner
|
|
53
53
|
user_data = context.user_data
|
54
54
|
|
55
55
|
identity = SpreeCmCommissioner::UserIdentityProvider.vattanac_bank
|
56
|
-
.find_or_initialize_by(sub: user_data['
|
56
|
+
.find_or_initialize_by(sub: user_data['phoneNum'])
|
57
57
|
|
58
58
|
if identity.persisted?
|
59
59
|
context.user = identity.user
|
@@ -78,7 +78,7 @@ module SpreeCmCommissioner
|
|
78
78
|
identity = context.identity
|
79
79
|
|
80
80
|
identity.name = full_name
|
81
|
-
|
81
|
+
identity.email = user_data['email']
|
82
82
|
context.user = Spree::User.new(
|
83
83
|
first_name: user_data['firstName'],
|
84
84
|
last_name: user_data['lastName'],
|
@@ -5,12 +5,14 @@ module SpreeCmCommissioner
|
|
5
5
|
def perform(options)
|
6
6
|
pin_code = SpreeCmCommissioner::PinCode.find(options[:pin_code_id])
|
7
7
|
tenant = SpreeCmCommissioner::Tenant.find_by(id: options[:tenant_id])
|
8
|
+
error_message = options[:error_message]
|
8
9
|
|
9
10
|
name = sender_name(tenant)
|
10
11
|
|
11
12
|
SpreeCmCommissioner::TelegramDebugPinCodeSender.call(
|
12
13
|
pin_code: pin_code,
|
13
|
-
name: name
|
14
|
+
name: name,
|
15
|
+
error_message: error_message
|
14
16
|
)
|
15
17
|
end
|
16
18
|
end
|
@@ -20,6 +20,7 @@ module SpreeCmCommissioner
|
|
20
20
|
vehicle_id
|
21
21
|
origin
|
22
22
|
destination
|
23
|
+
place_id
|
23
24
|
].freeze
|
24
25
|
|
25
26
|
RESERVED_OPTIONS = {
|
@@ -47,8 +48,8 @@ module SpreeCmCommissioner
|
|
47
48
|
'bib-display-prefix' => 'boolean',
|
48
49
|
'bib-pre-generation-on-create' => 'boolean',
|
49
50
|
'seat-number-positions' => 'array',
|
50
|
-
'origin' => '
|
51
|
-
'destination' => '
|
51
|
+
'origin' => 'place_id',
|
52
|
+
'destination' => 'place_id',
|
52
53
|
'departure-time' => 'time',
|
53
54
|
'vehicle' => 'vehicle_id',
|
54
55
|
'allow-seat-selection' => 'boolean'
|