spree_multi_vendor 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +21 -0
- data/.rspec +3 -0
- data/.travis.yml +44 -0
- data/Appraisals +11 -0
- data/Gemfile +7 -0
- data/LICENSE +26 -0
- data/README.md +166 -0
- data/Rakefile +21 -0
- data/app/controllers/spree/admin/vendor_settings_controller.rb +34 -0
- data/app/controllers/spree/admin/vendors_controller.rb +60 -0
- data/app/controllers/spree/api/v2/storefront/vendors_controller.rb +28 -0
- data/app/controllers/spree_multi_vendor/spree/admin/base_controller_decorator.rb +10 -0
- data/app/controllers/spree_multi_vendor/spree/admin/option_types_controller_decorator.rb +7 -0
- data/app/controllers/spree_multi_vendor/spree/admin/products_controller_decorator.rb +24 -0
- data/app/controllers/spree_multi_vendor/spree/admin/properties_controller_decorator.rb +7 -0
- data/app/controllers/spree_multi_vendor/spree/admin/resource_controller_decorator.rb +8 -0
- data/app/controllers/spree_multi_vendor/spree/admin/shipping_methods_controller_decorator.rb +7 -0
- data/app/controllers/spree_multi_vendor/spree/admin/stock_locations_controller_decorator.rb +7 -0
- data/app/controllers/spree_multi_vendor/spree/admin/users_controller_decorator.rb +13 -0
- data/app/controllers/spree_multi_vendor/spree/admin/variants_controller_decorator.rb +7 -0
- data/app/controllers/spree_multi_vendor/spree/api/v1/variants_controller_decorator.rb +22 -0
- data/app/finders/spree_multi_vendor/products_finder_decorator.rb +31 -0
- data/app/helpers/spree/admin/vendor_helper.rb +15 -0
- data/app/mailers/spree/vendor_mailer.rb +15 -0
- data/app/models/concerns/spree/vendor_concern.rb +11 -0
- data/app/models/spree/order_commission.rb +11 -0
- data/app/models/spree/vendor.rb +77 -0
- data/app/models/spree/vendor_ability.rb +140 -0
- data/app/models/spree/vendor_image.rb +18 -0
- data/app/models/spree/vendor_order_totals.rb +28 -0
- data/app/models/spree/vendor_user.rb +16 -0
- data/app/models/spree_multi_vendor/configuration.rb +10 -0
- data/app/models/spree_multi_vendor/spree/ability_decorator.rb +9 -0
- data/app/models/spree_multi_vendor/spree/base_decorator.rb +13 -0
- data/app/models/spree_multi_vendor/spree/line_item_decorator.rb +48 -0
- data/app/models/spree_multi_vendor/spree/order_decorator.rb +105 -0
- data/app/models/spree_multi_vendor/spree/shipment_decorator.rb +8 -0
- data/app/models/spree_multi_vendor/spree/stock/package_decorator.rb +14 -0
- data/app/models/spree_multi_vendor/spree/user_decorator.rb +8 -0
- data/app/models/spree_multi_vendor/spree/variant_decorator.rb +41 -0
- data/app/overrides/spree/admin/orders/_form.rb +13 -0
- data/app/overrides/spree/admin/orders/_line_items.rb +6 -0
- data/app/overrides/spree/admin/orders/_line_items_edit_form.rb +6 -0
- data/app/overrides/spree/admin/orders/index.rb +6 -0
- data/app/overrides/spree/admin/products/form.rb +29 -0
- data/app/overrides/spree/admin/products/new.rb +16 -0
- data/app/overrides/spree/admin/shared/_main_menu.rb +23 -0
- data/app/overrides/spree/admin/shared/_order_summary.rb +35 -0
- data/app/overrides/spree/admin/users/_form.rb +13 -0
- data/app/serializers/spree/v2/storefront/vendor_image_serializer.rb +11 -0
- data/app/serializers/spree/v2/storefront/vendor_order_totals_serializer.rb +18 -0
- data/app/serializers/spree/v2/storefront/vendor_serializer.rb +14 -0
- data/app/serializers/spree_multi_vendor/cart_serializer_decorator.rb +19 -0
- data/app/serializers/spree_multi_vendor/serializer_decorator.rb +23 -0
- data/app/services/spree/orders/generate_commissions.rb +34 -0
- data/app/views/spree/admin/translations/vendor.html.erb +21 -0
- data/app/views/spree/admin/vendor_settings/edit.html.erb +47 -0
- data/app/views/spree/admin/vendors/_form.html.erb +36 -0
- data/app/views/spree/admin/vendors/edit.html.erb +11 -0
- data/app/views/spree/admin/vendors/index.html.erb +83 -0
- data/app/views/spree/admin/vendors/new.html.erb +11 -0
- data/app/views/spree/vendor_mailer/vendor_notification_email.html.erb +81 -0
- data/app/views/spree/vendor_mailer/vendor_notification_email.text.erb +36 -0
- data/bin/rails +7 -0
- data/config/initializers/spree_permitted_attributes.rb +10 -0
- data/config/locales/en.yml +34 -0
- data/config/locales/es.yml +33 -0
- data/config/locales/fr.yml +33 -0
- data/config/routes.rb +19 -0
- data/db/default/vendors.rb +13 -0
- data/db/migrate/20170406102250_create_spree_vendors.rb +9 -0
- data/db/migrate/20170406102944_add_vendor_id_to_spree_models.rb +10 -0
- data/db/migrate/20170410111150_add_state_to_vendors.rb +6 -0
- data/db/migrate/20170412124925_add_deleted_at_to_spree_vendors.rb +6 -0
- data/db/migrate/20170413094447_create_spree_vendor_users.rb +11 -0
- data/db/migrate/20190212161426_add_slug_to_spree_vendors.rb +6 -0
- data/db/migrate/20190214120226_add_about_us_to_spree_vendors.rb +5 -0
- data/db/migrate/20190214142526_add_contact_us_to_spree_vendors.rb +5 -0
- data/db/migrate/20190305120337_add_commission_to_spree_vendors.rb +5 -0
- data/db/migrate/20190308091546_add_priority_to_vendor.rb +8 -0
- data/db/migrate/20190312130754_create_spree_order_commissions.rb +14 -0
- data/db/migrate/20190322133128_add_notification_email_to_vendors.rb +5 -0
- data/db/migrate/20200416030721_add_translations_to_vendor.rb +19 -0
- data/gemfiles/spree_4_2.gemfile +9 -0
- data/gemfiles/spree_master.gemfile +9 -0
- data/lib/generators/spree_multi_vendor/install/install_generator.rb +21 -0
- data/lib/generators/spree_multi_vendor/mailers_preview/mailers_preview_generator.rb +22 -0
- data/lib/generators/spree_multi_vendor/mailers_preview/templates/mailers/previews/vendor_notification_preview.rb +5 -0
- data/lib/spree_multi_vendor.rb +14 -0
- data/lib/spree_multi_vendor/engine.rb +24 -0
- data/lib/spree_multi_vendor/factories.rb +7 -0
- data/lib/spree_multi_vendor/version.rb +11 -0
- data/lib/tasks/vendors.rake +8 -0
- data/spec/factories/spree/vendor_factory.rb +22 -0
- data/spec/factories/spree/vendor_image_factory.rb +5 -0
- data/spec/factories/spree/vendor_user_factory.rb +6 -0
- data/spec/features/spree/admin/orders_spec.rb +36 -0
- data/spec/features/spree/admin/product_spec.rb +177 -0
- data/spec/features/spree/admin/shipping_method_spec.rb +72 -0
- data/spec/features/spree/admin/stock_location_spec.rb +90 -0
- data/spec/features/spree/admin/vendor_settings_spec.rb +76 -0
- data/spec/features/spree/admin/vendor_spec.rb +125 -0
- data/spec/fixtures/thinking-cat.jpg +0 -0
- data/spec/mailers/vendor_mailer_spec.rb +45 -0
- data/spec/models/spree/line_item_spec.rb +32 -0
- data/spec/models/spree/order_commission_spec.rb +8 -0
- data/spec/models/spree/order_spec.rb +179 -0
- data/spec/models/spree/product_spec.rb +19 -0
- data/spec/models/spree/variant_spec.rb +104 -0
- data/spec/models/spree/vendor_order_totals_spec.rb +33 -0
- data/spec/models/spree/vendor_spec.rb +57 -0
- data/spec/models/spree/vendor_user_spec.rb +12 -0
- data/spec/requests/spree/api/v2/storefront/cart_spec.rb +67 -0
- data/spec/requests/spree/api/v2/storefront/products_spec.rb +93 -0
- data/spec/requests/spree/api/v2/storefront/vendors_spec.rb +52 -0
- data/spec/serializers/spree/v2/storefront/stock_location_serializer_spec.rb +32 -0
- data/spec/serializers/spree/v2/storefront/vendor_image_serializer_spec.rb +18 -0
- data/spec/serializers/spree/v2/storefront/vendor_order_totals_serializer_spec.rb +54 -0
- data/spec/serializers/spree/v2/storefront/vendor_serializer_spec.rb +34 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/support/shoulda_matchers.rb +6 -0
- data/spree_multi_vendor.gemspec +41 -0
- metadata +313 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2249038a9dae7dde5d3c7b0eb3833921f4bdd0144ab76fa5c7277e53ee4aadce
|
4
|
+
data.tar.gz: 555815de55c3298001c60c753b69974e1d524db73257a130a661279b4ec3e594
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6db7385cd15712b90faf63172eb6f2a05bebd0941f12ddd0faa55c53ce44ddca10c1527fb46ecbcd1524d9662e44359bdafb8eb26044012445d9b157552090ba
|
7
|
+
data.tar.gz: 48a0f9438bf8f7df0fc303760be106f23632b40e903f9cea0afc786ab523c181f52677817b0c633b800457a409569a331b9fc8aebfc997f71e53a955d990ff15
|
data/.gitignore
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
\#*
|
2
|
+
*~
|
3
|
+
.#*
|
4
|
+
.DS_Store
|
5
|
+
.idea
|
6
|
+
.localeapp/locales
|
7
|
+
.project
|
8
|
+
coverage
|
9
|
+
Gemfile.lock
|
10
|
+
tmp
|
11
|
+
nbproject
|
12
|
+
pkg
|
13
|
+
*.sw?
|
14
|
+
spec/dummy
|
15
|
+
.rvmrc
|
16
|
+
.sass-cache
|
17
|
+
public/spree
|
18
|
+
.ruby-version
|
19
|
+
.ruby-gemset
|
20
|
+
gemfiles/*.gemfile.lock
|
21
|
+
*.gem
|
data/.rspec
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
os: linux
|
2
|
+
dist: bionic
|
3
|
+
|
4
|
+
addons:
|
5
|
+
apt:
|
6
|
+
sources:
|
7
|
+
- google-chrome
|
8
|
+
packages:
|
9
|
+
- google-chrome-stable
|
10
|
+
|
11
|
+
services:
|
12
|
+
- mysql
|
13
|
+
- postgresql
|
14
|
+
|
15
|
+
language: ruby
|
16
|
+
|
17
|
+
rvm:
|
18
|
+
- 2.7
|
19
|
+
- 3.0
|
20
|
+
|
21
|
+
env:
|
22
|
+
- DB=mysql
|
23
|
+
- DB=postgres
|
24
|
+
|
25
|
+
gemfile:
|
26
|
+
- gemfiles/spree_4_2.gemfile
|
27
|
+
- gemfiles/spree_master.gemfile
|
28
|
+
|
29
|
+
jobs:
|
30
|
+
allow_failures:
|
31
|
+
- gemfile: gemfiles/spree_master.gemfile
|
32
|
+
|
33
|
+
before_install:
|
34
|
+
- mysql -u root -e "GRANT ALL ON *.* TO 'travis'@'%';"
|
35
|
+
|
36
|
+
before_script:
|
37
|
+
- CHROME_MAIN_VERSION=`google-chrome-stable --version | sed -E 's/(^Google Chrome |\.[0-9]+ )//g'`
|
38
|
+
- CHROMEDRIVER_VERSION=`curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_MAIN_VERSION"`
|
39
|
+
- curl "https://chromedriver.storage.googleapis.com/${CHROMEDRIVER_VERSION}/chromedriver_linux64.zip" -O
|
40
|
+
- unzip chromedriver_linux64.zip -d ~/bin
|
41
|
+
|
42
|
+
script:
|
43
|
+
- bundle exec rake test_app
|
44
|
+
- bundle exec rake spec
|
data/Appraisals
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
appraise 'spree-4-2' do
|
2
|
+
gem 'spree', '~> 4.2.0.rc4'
|
3
|
+
gem 'spree_auth_devise', '~> 4.3'
|
4
|
+
gem 'rails-controller-testing'
|
5
|
+
end
|
6
|
+
|
7
|
+
appraise 'spree-master' do
|
8
|
+
gem 'spree', github: 'spree/spree', branch: 'master'
|
9
|
+
gem 'spree_auth_devise', github: 'spree/spree_auth_devise', branch: 'master'
|
10
|
+
gem 'rails-controller-testing'
|
11
|
+
end
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2017 Spark Solutions Sp. z o.o.
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without modification,
|
5
|
+
are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer in the documentation
|
11
|
+
and/or other materials provided with the distribution.
|
12
|
+
* Neither the name Spree nor the names of its contributors may be used to
|
13
|
+
endorse or promote products derived from this software without specific
|
14
|
+
prior written permission.
|
15
|
+
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
20
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
21
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
22
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
23
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
24
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
25
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
26
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
# Spree Multi Vendor
|
2
|
+
|
3
|
+
[![Build Status](https://travis-ci.org/spree-contrib/spree_multi_vendor.svg?branch=master)](https://travis-ci.org/spree-contrib/spree_multi_vendor)
|
4
|
+
|
5
|
+
This is a [spree multi vendor marketplace](https://spreecommerce.org/use-cases/multi-vendor-marketplace/) extension. It's a great starting point if you're building a marketplace on top of [Spree](https://spreecommerce.org). Our goal was flexibility to allow you to tweak it to your needs.
|
6
|
+
|
7
|
+
Check out this extension [multi vendor marketplace demo](https://spreecommerce.org/launch-a-multi-vendor-marketplace-within-a-few-weeks-with-spree-commerce/) and launch your marketplace within weeks, not months.
|
8
|
+
|
9
|
+
Developed and maintained by:
|
10
|
+
|
11
|
+
[![Spark Solutions](http://sparksolutions.co/wp-content/uploads/2015/01/logo-ss-tr-221x100.png)][spark]
|
12
|
+
|
13
|
+
## Features
|
14
|
+
|
15
|
+
By default you can create and manage Vendors who can manage on their own:
|
16
|
+
|
17
|
+
- [X] Orders
|
18
|
+
- [X] Products
|
19
|
+
- [X] Stock Locations
|
20
|
+
- [X] Shipping Methods
|
21
|
+
- [X] Vendor profile
|
22
|
+
|
23
|
+
Also:
|
24
|
+
- [X] Super Admins can assign Users to Vendors
|
25
|
+
- [X] You can modify which permissions and models/resources Vendors can manage quite easily
|
26
|
+
|
27
|
+
Contributions welcome! :)
|
28
|
+
|
29
|
+
## Installation
|
30
|
+
|
31
|
+
1. Add this extension to your Gemfile with this line:
|
32
|
+
```ruby
|
33
|
+
gem 'spree_multi_vendor'
|
34
|
+
```
|
35
|
+
|
36
|
+
2. Install the gem using Bundler:
|
37
|
+
```ruby
|
38
|
+
bundle install
|
39
|
+
```
|
40
|
+
|
41
|
+
3. Copy & run migrations
|
42
|
+
```ruby
|
43
|
+
bundle exec rails g spree_multi_vendor:install
|
44
|
+
```
|
45
|
+
|
46
|
+
4. Restart your server
|
47
|
+
|
48
|
+
If your server was running, restart it so that it can find the assets properly.
|
49
|
+
|
50
|
+
5. Optionally you can also create sample Vendor by running:
|
51
|
+
|
52
|
+
```bash
|
53
|
+
bundle exec rake spree_multi_vendor:sample:create
|
54
|
+
```
|
55
|
+
|
56
|
+
## Upgrading
|
57
|
+
|
58
|
+
1. Fetch new database migrations:
|
59
|
+
|
60
|
+
```bash
|
61
|
+
bundle exec rake railties:install:migrations FROM=spree_multi_vendor
|
62
|
+
```
|
63
|
+
|
64
|
+
2. Run migrations
|
65
|
+
|
66
|
+
```bash
|
67
|
+
bundle exec rails db:migrate
|
68
|
+
```
|
69
|
+
|
70
|
+
## Configuration
|
71
|
+
|
72
|
+
To change which models should be vendorized, in your Spree initializer (`config/initializers/spree.rb`) add:
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
SpreeMultiVendor::Config[:vendorized_models] = %w[product variant stock_location shipping_method other_model]
|
76
|
+
```
|
77
|
+
|
78
|
+
This will lookup for `Spree::OtherModel` class. To add `vendor_id` column to that model run:
|
79
|
+
|
80
|
+
```bash
|
81
|
+
bundle exec rails g migration AddVendorToSpreeOtherModels vendor:references
|
82
|
+
```
|
83
|
+
|
84
|
+
## API endpoints
|
85
|
+
|
86
|
+
Spree Multi Vendor adds new [API v2](https://api.spreecommerce.org/docs/api-v2/api/docs/v2/storefront/index.yaml) endpoints:
|
87
|
+
|
88
|
+
1. `GET` Display Vendor information endpoint
|
89
|
+
|
90
|
+
```
|
91
|
+
/api/v2/storefront/vendors/<vendor_slug>
|
92
|
+
```
|
93
|
+
|
94
|
+
eg. `/api/v2/storefront/vendors/test-vendor`
|
95
|
+
|
96
|
+
you can also include Vendor image and/or Products in that call:
|
97
|
+
|
98
|
+
`/api/v2/storefront/vendors/test-vendor?include=image,products`
|
99
|
+
|
100
|
+
And modfies existing:
|
101
|
+
|
102
|
+
1. `GET` Filtering Products by Vendor ID(s):
|
103
|
+
|
104
|
+
```
|
105
|
+
/api/v2/storefront/products?filter[vendor_ids]=1,2,3
|
106
|
+
```
|
107
|
+
|
108
|
+
2. `GET` Include Vendor information in Cart endpoint:
|
109
|
+
|
110
|
+
```
|
111
|
+
/api/v2/storefront/cart?include=vendors,vendor_totals
|
112
|
+
```
|
113
|
+
|
114
|
+
## Email previews
|
115
|
+
|
116
|
+
Spree offers emails preview generator for development purposes.
|
117
|
+
To generate them, use command:
|
118
|
+
|
119
|
+
`bundle exec rails g spree_multi_vendor:mailers_preview`
|
120
|
+
|
121
|
+
After that, start rails server locally and go to:
|
122
|
+
`localhost:3000/rails/mailers`
|
123
|
+
|
124
|
+
(it requires seeded development database in order to work properly)
|
125
|
+
|
126
|
+
## Testing
|
127
|
+
|
128
|
+
First bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs. The dummy app can be regenerated by using `rake test_app`.
|
129
|
+
|
130
|
+
```shell
|
131
|
+
bundle
|
132
|
+
bundle exec rake
|
133
|
+
```
|
134
|
+
|
135
|
+
When testing your applications integration with this extension you may use it's factories.
|
136
|
+
Simply add this require statement to your spec_helper:
|
137
|
+
|
138
|
+
```ruby
|
139
|
+
require 'spree_multi_vendor/factories'
|
140
|
+
```
|
141
|
+
|
142
|
+
## Contributing
|
143
|
+
|
144
|
+
If you'd like to contribute, please take a look at the
|
145
|
+
[instructions](CONTRIBUTING.md) for installing dependencies and crafting a good
|
146
|
+
pull request.
|
147
|
+
|
148
|
+
## License
|
149
|
+
|
150
|
+
Spree Multi Vendor is copyright © 2017-2021
|
151
|
+
[Spark Solutions Sp. z o.o.][spark]. It is free software,
|
152
|
+
and may be redistributed under the terms specified in the
|
153
|
+
[LICENCE](LICENSE) file.
|
154
|
+
|
155
|
+
[LICENSE]: https://github.com/spark-solutions/spree_braintree_vzero/blob/master/LICENSE
|
156
|
+
|
157
|
+
## About Spark Solutions
|
158
|
+
|
159
|
+
[![Spark Solutions](http://sparksolutions.co/wp-content/uploads/2015/01/logo-ss-tr-221x100.png)][spark]
|
160
|
+
|
161
|
+
Spree Vendors is maintained by [Spark Solutions Sp. z o.o.](http://sparksolutions.co?utm_source=github)
|
162
|
+
|
163
|
+
We are passionate about open source software.
|
164
|
+
We are [available for hire][spark].
|
165
|
+
|
166
|
+
[spark]:http://sparksolutions.co?utm_source=github
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'spree/testing_support/extension_rake'
|
6
|
+
|
7
|
+
RSpec::Core::RakeTask.new
|
8
|
+
|
9
|
+
task :default do
|
10
|
+
if Dir["spec/dummy"].empty?
|
11
|
+
Rake::Task[:test_app].invoke
|
12
|
+
Dir.chdir("../../")
|
13
|
+
end
|
14
|
+
Rake::Task[:spec].invoke
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'Generates a dummy app for testing'
|
18
|
+
task :test_app do
|
19
|
+
ENV['LIB_NAME'] = 'spree_multi_vendor'
|
20
|
+
Rake::Task['extension:test_app'].invoke
|
21
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class VendorSettingsController < Spree::Admin::BaseController
|
4
|
+
before_action :authorize
|
5
|
+
before_action :load_vendor
|
6
|
+
|
7
|
+
def update
|
8
|
+
if vendor_params[:image] && Spree.version.to_f >= 3.6
|
9
|
+
@vendor.create_image(attachment: vendor_params[:image])
|
10
|
+
end
|
11
|
+
if @vendor.update(vendor_params.except(:image))
|
12
|
+
redirect_to admin_vendor_settings_path
|
13
|
+
else
|
14
|
+
render :edit
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def authorize
|
21
|
+
authorize! :manage, :vendor_settings
|
22
|
+
end
|
23
|
+
|
24
|
+
def load_vendor
|
25
|
+
@vendor = current_spree_vendor
|
26
|
+
raise ActiveRecord::RecordNotFound unless @vendor
|
27
|
+
end
|
28
|
+
|
29
|
+
def vendor_params
|
30
|
+
params.require(:vendor).permit(Spree::PermittedAttributes.vendor_attributes)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class VendorsController < ResourceController
|
4
|
+
|
5
|
+
def create
|
6
|
+
if permitted_resource_params[:image] && Spree.version.to_f >= 3.6
|
7
|
+
@vendor.build_image(attachment: permitted_resource_params.delete(:image))
|
8
|
+
end
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
def update
|
13
|
+
if permitted_resource_params[:image] && Spree.version.to_f >= 3.6
|
14
|
+
@vendor.create_image(attachment: permitted_resource_params.delete(:image))
|
15
|
+
end
|
16
|
+
format_translations if defined? SpreeGlobalize
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def update_positions
|
21
|
+
params[:positions].each do |id, position|
|
22
|
+
vendor = Spree::Vendor.find(id)
|
23
|
+
vendor.set_list_position(position)
|
24
|
+
end
|
25
|
+
|
26
|
+
respond_to do |format|
|
27
|
+
format.js { render plain: 'Ok' }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def find_resource
|
34
|
+
Vendor.with_deleted.friendly.find(params[:id])
|
35
|
+
end
|
36
|
+
|
37
|
+
def collection
|
38
|
+
params[:q] = {} if params[:q].blank?
|
39
|
+
vendors = super.order(priority: :asc)
|
40
|
+
@search = vendors.ransack(params[:q])
|
41
|
+
|
42
|
+
@collection = @search.result.
|
43
|
+
page(params[:page]).
|
44
|
+
per(params[:per_page])
|
45
|
+
end
|
46
|
+
|
47
|
+
def format_translations
|
48
|
+
return if params[:vendor][:translations_attributes].blank?
|
49
|
+
params[:vendor][:translations_attributes].each do |_, data|
|
50
|
+
translation = @vendor.translations.find_or_create_by(locale: data[:locale])
|
51
|
+
translation.name = data[:name]
|
52
|
+
translation.about_us = data[:about_us]
|
53
|
+
translation.contact_us = data[:contact_us]
|
54
|
+
translation.slug = data[:slug]
|
55
|
+
translation.save!
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Storefront
|
5
|
+
class VendorsController < ::Spree::Api::V2::ResourceController
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def model_class
|
10
|
+
::Spree::Vendor
|
11
|
+
end
|
12
|
+
|
13
|
+
def scope
|
14
|
+
::Spree::Vendor.active
|
15
|
+
end
|
16
|
+
|
17
|
+
def resource
|
18
|
+
scope.find_by(slug: params[:id]) || scope.find(params[:id])
|
19
|
+
end
|
20
|
+
|
21
|
+
def resource_serializer
|
22
|
+
Spree::V2::Storefront::VendorSerializer
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|