atkhayar-dev-spree-multi-vendor 0.0.0
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 +7 -0
- data/Gemfile +10 -0
- data/LICENSE +26 -0
- data/README.md +181 -0
- data/Rakefile +21 -0
- data/app/controllers/spree/admin/vendor_settings_controller.rb +34 -0
- data/app/controllers/spree/admin/vendors_controller.rb +68 -0
- data/app/controllers/spree/api/v1/vendors_controller.rb +62 -0
- data/app/controllers/spree/api/v2/platform/vendors_controller.rb +32 -0
- data/app/controllers/spree/api/v2/storefront/vendors_controller.rb +33 -0
- data/app/controllers/spree_multi_vendor/spree/admin/base_controller_decorator.rb +10 -0
- data/app/controllers/spree_multi_vendor/spree/admin/products_controller_decorator.rb +79 -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/base_controller_decorator.rb +17 -0
- data/app/controllers/spree_multi_vendor/spree/api/v1/products_controller_decorator.rb +9 -0
- data/app/controllers/spree_multi_vendor/spree/api/v1/users_controller_decorator.rb +13 -0
- data/app/controllers/spree_multi_vendor/spree/api/v2/platform/products_controller_decorator.rb +65 -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/helpers/spree/api/vendor_helper.rb +13 -0
- data/app/helpers/spree_multi_vendor/spree/api/api_helpers_decorator.rb +19 -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 +155 -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 +107 -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 +40 -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/api/v2/platform/vendor_serializer.rb +12 -0
- data/app/serializers/spree/v2/storefront/vendor_image_serializer.rb +11 -0
- data/app/serializers/spree/v2/storefront/vendor_order_totals_serializer.rb +20 -0
- data/app/serializers/spree/v2/storefront/vendor_serializer.rb +15 -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/api/v1/vendors/index.rabl +3 -0
- data/app/views/spree/api/v1/vendors/show.rabl +2 -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.rb +31 -0
- data/config/initializers/spree_permitted_attributes.rb +12 -0
- data/config/locales/en.yml +34 -0
- data/config/locales/es.yml +36 -0
- data/config/locales/fr.yml +33 -0
- data/config/routes.rb +29 -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/db/migrate/20210728120649_change_vendorized_models_vendor_id_type.rb +10 -0
- data/db/migrate/20210728120910_change_vendor_id_and_user_id_type_for_spree_vendor_users.rb +14 -0
- data/db/migrate/20210728121024_change_vendor_id_and_order_id_type_for_spree_order_commissions.rb +14 -0
- data/db/migrate/20221123095256_add_code_to_vendors.rb +6 -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/engine.rb +24 -0
- data/lib/spree_multi_vendor/factories.rb +7 -0
- data/lib/spree_multi_vendor/version.rb +11 -0
- data/lib/spree_multi_vendor.rb +16 -0
- data/lib/tasks/vendors.rake +8 -0
- data/spec/factories/spree/vendor_factory.rb +28 -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 +86 -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 +74 -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 +193 -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/v1/products_spec.rb +221 -0
- data/spec/requests/spree/api/v1/users_spec.rb +31 -0
- data/spec/requests/spree/api/v1/vendors_spec.rb +210 -0
- data/spec/requests/spree/api/v2/storefront/cart_spec.rb +85 -0
- data/spec/requests/spree/api/v2/storefront/products_spec.rb +96 -0
- data/spec/requests/spree/api/v2/storefront/vendors_spec.rb +118 -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 +13 -0
- data/spec/support/shoulda_matchers.rb +6 -0
- data/spree_multi_vendor.gemspec +42 -0
- metadata +308 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
<table class="row header">
|
|
2
|
+
<tr>
|
|
3
|
+
<td>
|
|
4
|
+
<p class="lede">
|
|
5
|
+
<%= Spree.t('order_mailer.vendor_notification_email.dear_vendor') %>
|
|
6
|
+
</p>
|
|
7
|
+
<p>
|
|
8
|
+
<%= Spree.t('order_mailer.vendor_notification_email.order_summary', number: @order.number) %>
|
|
9
|
+
</p>
|
|
10
|
+
<table class="container">
|
|
11
|
+
<tr>
|
|
12
|
+
<td class="wrapper last">
|
|
13
|
+
<table class="twelve columns">
|
|
14
|
+
<%= render collection: @line_items, partial: 'spree/shared/mailer_line_item', as: :line_item %>
|
|
15
|
+
<tr>
|
|
16
|
+
<td class="six sub-columns">
|
|
17
|
+
<%= Spree.t('order_mailer.subtotal') %>
|
|
18
|
+
</td>
|
|
19
|
+
<td class="six sub-columns last right">
|
|
20
|
+
<%= Spree::Money.new(@subtotal, currency: @order.currency) %>
|
|
21
|
+
</td>
|
|
22
|
+
</tr>
|
|
23
|
+
<% if @order.line_item_adjustments.exists? %>
|
|
24
|
+
<% if @order.all_adjustments.promotion.eligible.exists? %>
|
|
25
|
+
<% @order.all_adjustments.promotion.eligible.group_by(&:label).each do |label, adjustments| %>
|
|
26
|
+
<tr>
|
|
27
|
+
<td class="six sub-columns">
|
|
28
|
+
<%= Spree.t(:promotion) %> <%= label %>:
|
|
29
|
+
</td>
|
|
30
|
+
<td class="six sub-columns last right">
|
|
31
|
+
<%= Spree::Money.new(adjustments.sum(&:amount), currency: @order.currency) %>
|
|
32
|
+
</td>
|
|
33
|
+
</tr>
|
|
34
|
+
<% end %>
|
|
35
|
+
<% end %>
|
|
36
|
+
<% end %>
|
|
37
|
+
<% @order.shipments.for_vendor(@vendor).group_by { |s| s.selected_shipping_rate.try(:name) }.each do |name, shipments| %>
|
|
38
|
+
<tr>
|
|
39
|
+
<td class="six sub-columns">
|
|
40
|
+
<%= Spree.t(:shipping) %> <%= name %>:
|
|
41
|
+
</td>
|
|
42
|
+
<td class="six sub-columns last right">
|
|
43
|
+
<%= Spree::Money.new(shipments.sum(&:discounted_cost), currency: @order.currency) %>
|
|
44
|
+
</td>
|
|
45
|
+
</tr>
|
|
46
|
+
<% end %>
|
|
47
|
+
<% if @order.all_adjustments.eligible.tax.exists? %>
|
|
48
|
+
<% @order.all_adjustments.eligible.tax.group_by(&:label).each do |label, adjustments| %>
|
|
49
|
+
<tr>
|
|
50
|
+
<td class="six sub-columns">
|
|
51
|
+
<%= Spree.t(:tax) %> <%= label %>:
|
|
52
|
+
</td>
|
|
53
|
+
<td class="six sub-columns last right">
|
|
54
|
+
<%= Spree::Money.new(adjustments.sum(&:amount), currency: @order.currency) %>
|
|
55
|
+
</td>
|
|
56
|
+
</tr>
|
|
57
|
+
<% end %>
|
|
58
|
+
<% end %>
|
|
59
|
+
<% @order.adjustments.eligible.each do |adjustment| %>
|
|
60
|
+
<% next if (adjustment.source_type == 'Spree::TaxRate') || (adjustment.amount == 0) %>
|
|
61
|
+
<%= render 'spree/order_mailer/adjustment', adjustment: adjustment %>
|
|
62
|
+
<% end %>
|
|
63
|
+
<tr>
|
|
64
|
+
<td class="six sub-columns">
|
|
65
|
+
<strong><%= Spree.t('order_mailer.total') %></strong>
|
|
66
|
+
</td>
|
|
67
|
+
<td class="six sub-columns last right">
|
|
68
|
+
<strong><%= Spree::Money.new(@total, currency: @order.currency) %></strong>
|
|
69
|
+
</td>
|
|
70
|
+
</tr>
|
|
71
|
+
</table>
|
|
72
|
+
</td>
|
|
73
|
+
</tr>
|
|
74
|
+
</table>
|
|
75
|
+
<p>
|
|
76
|
+
<%= Spree.t('order_mailer.vendor_notification_email.thanks') %>
|
|
77
|
+
</p>
|
|
78
|
+
</td>
|
|
79
|
+
<td class="expander"></td>
|
|
80
|
+
</tr>
|
|
81
|
+
</table>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<%= Spree.t('order_mailer.vendor_notification_email.dear_vendor') %>
|
|
2
|
+
|
|
3
|
+
============================================================
|
|
4
|
+
<%= Spree.t('order_mailer.vendor_notification_email.order_summary', number: @order.number) %>
|
|
5
|
+
============================================================
|
|
6
|
+
<% @line_items.each do |item| %>
|
|
7
|
+
<%= item.variant.sku %> <%= raw(item.variant.product.name) %> <%= raw(item.variant.options_text) -%> (<%=item.quantity%>) <%= Spree.t('at_symbol') %> <%= item.single_money %> = <%= item.display_amount %>
|
|
8
|
+
<% end %>
|
|
9
|
+
============================================================
|
|
10
|
+
<%= Spree.t('order_mailer.subtotal') %> <%= Spree::Money.new(@subtotal, currency: @order.currency) %>
|
|
11
|
+
<% if @order.line_item_adjustments.exists? %>
|
|
12
|
+
<% if @order.all_adjustments.promotion.eligible.exists? %>
|
|
13
|
+
<% @order.all_adjustments.promotion.eligible.group_by(&:label).each do |label, adjustments| %>
|
|
14
|
+
<%= Spree.t(:promotion) %>: <%= label %> <%= Spree::Money.new(adjustments.sum(&:amount), currency: @order.currency) %>
|
|
15
|
+
<% end %>
|
|
16
|
+
<% end %>
|
|
17
|
+
<% end %>
|
|
18
|
+
|
|
19
|
+
<% @order.shipments.group_by { |s| s.selected_shipping_rate.try(:name) }.each do |name, shipments| %>
|
|
20
|
+
<%= Spree.t(:shipping) %>: <%= name %> <%= Spree::Money.new(shipments.sum(&:discounted_cost), currency: @order.currency) %>
|
|
21
|
+
<% end %>
|
|
22
|
+
|
|
23
|
+
<% if @order.all_adjustments.eligible.tax.exists? %>
|
|
24
|
+
<% @order.all_adjustments.eligible.tax.group_by(&:label).each do |label, adjustments| %>
|
|
25
|
+
<%= Spree.t(:tax) %>: <%= label %> <%= Spree::Money.new(adjustments.sum(&:amount), currency: @order.currency) %>
|
|
26
|
+
<% end %>
|
|
27
|
+
<% end %>
|
|
28
|
+
|
|
29
|
+
<% @order.adjustments.eligible.each do |adjustment| %>
|
|
30
|
+
<% next if (adjustment.source_type == 'Spree::TaxRate') and (adjustment.amount == 0) %>
|
|
31
|
+
<%= adjustment.label %> <%= adjustment.display_amount %>
|
|
32
|
+
<% end %>
|
|
33
|
+
============================================================
|
|
34
|
+
<%= Spree.t('order_mailer.total') %> <%= Spree::Money.new(@total, currency: @order.currency) %>
|
|
35
|
+
|
|
36
|
+
<%= Spree.t('order_mailer.vendor_notification_email.thanks') %>
|
data/bin/rails
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
|
2
|
+
|
|
3
|
+
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
|
4
|
+
ENGINE_PATH = File.expand_path('../../lib/spree_multi_vendor/engine', __FILE__)
|
|
5
|
+
|
|
6
|
+
require 'rails/all'
|
|
7
|
+
require 'rails/engine/commands'
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Configure Spree Preferences
|
|
2
|
+
#
|
|
3
|
+
# Note: Initializing preferences available within the Admin will overwrite any changes that were made through the user interface when you restart.
|
|
4
|
+
# If you would like users to be able to update a setting with the Admin it should NOT be set here.
|
|
5
|
+
#
|
|
6
|
+
# Note: If a preference is set here it will be stored within the cache & database upon initialization.
|
|
7
|
+
# Just removing an entry from this initializer will not make the preference value go away.
|
|
8
|
+
# Instead you must either set a new value or remove entry, clear cache, and remove database entry.
|
|
9
|
+
#
|
|
10
|
+
# In order to initialize a setting do:
|
|
11
|
+
# config.setting_name = 'new value'
|
|
12
|
+
Spree.config do |config|
|
|
13
|
+
# Example:
|
|
14
|
+
# Uncomment to stop tracking inventory levels in the application
|
|
15
|
+
# config.track_inventory_levels = false
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Configure Spree Dependencies
|
|
19
|
+
#
|
|
20
|
+
# Note: If a dependency is set here it will NOT be stored within the cache & database upon initialization.
|
|
21
|
+
# Just removing an entry from this initializer will make the dependency value go away.
|
|
22
|
+
#
|
|
23
|
+
Spree.dependencies do |dependencies|
|
|
24
|
+
# Example:
|
|
25
|
+
# Uncomment to change the default Service handling adding Items to Cart
|
|
26
|
+
# dependencies.cart_add_item_service = 'MyNewAwesomeService'
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Spree::Api::Dependencies.storefront_cart_serializer = 'MyRailsApp::CartSerializer'
|
|
30
|
+
|
|
31
|
+
Spree.user_class = "Spree::LegacyUser"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module PermittedAttributes
|
|
3
|
+
ATTRIBUTES << :vendor_attributes
|
|
4
|
+
|
|
5
|
+
mattr_reader *ATTRIBUTES
|
|
6
|
+
|
|
7
|
+
@@vendor_attributes = [:name, :about_us, :contact_us, :notification_email, :code]
|
|
8
|
+
@@vendor_attributes << :image if Spree.version.to_f >= 3.6
|
|
9
|
+
|
|
10
|
+
@@product_attributes << :vendor_id if SpreeMultiVendor::Config[:vendorized_models].include?('product')
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
en:
|
|
2
|
+
activerecord:
|
|
3
|
+
models:
|
|
4
|
+
spree/vendor:
|
|
5
|
+
one: Vendor
|
|
6
|
+
other: Vendors
|
|
7
|
+
attributes:
|
|
8
|
+
spree/vendor:
|
|
9
|
+
about_us: About us
|
|
10
|
+
contact_us: Contact us
|
|
11
|
+
image: Image
|
|
12
|
+
name: name
|
|
13
|
+
state: state
|
|
14
|
+
created_at: created at
|
|
15
|
+
priority: priority
|
|
16
|
+
spree:
|
|
17
|
+
back_to_vendors_list: Back To Vendors List
|
|
18
|
+
blocked: Blocked
|
|
19
|
+
edit_vendor: Edit Vendor
|
|
20
|
+
new_vendor: New Vendor
|
|
21
|
+
only_alphanumeric_chars: should contain only letters and digits
|
|
22
|
+
order_mailer:
|
|
23
|
+
vendor_notification_email:
|
|
24
|
+
dear_vendor: Dear Vendor,
|
|
25
|
+
subject: Vendor notification
|
|
26
|
+
thanks: Thanks
|
|
27
|
+
vendor: Vendor
|
|
28
|
+
vendor_name: Vendor Name
|
|
29
|
+
vendor_states:
|
|
30
|
+
active: Active
|
|
31
|
+
blocked: Blocked
|
|
32
|
+
pending: Pending
|
|
33
|
+
admin:
|
|
34
|
+
commission: Commission
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
es:
|
|
2
|
+
activerecord:
|
|
3
|
+
models:
|
|
4
|
+
spree/vendor:
|
|
5
|
+
one: Vendedor
|
|
6
|
+
other: Vendedores
|
|
7
|
+
attributes:
|
|
8
|
+
spree/vendor:
|
|
9
|
+
about_us: Acerca de
|
|
10
|
+
commission_rate: Porcentaje Comisión
|
|
11
|
+
contact_us: Contáctanos
|
|
12
|
+
image: Imagen
|
|
13
|
+
name: Nombre
|
|
14
|
+
notification_email: Email notificación pedido
|
|
15
|
+
state: estado
|
|
16
|
+
created_at: creado en
|
|
17
|
+
priority: prioridad
|
|
18
|
+
spree:
|
|
19
|
+
back_to_vendors_list: Volver a la lista de vendedores
|
|
20
|
+
edit_vendor: Editar vendedor
|
|
21
|
+
new_vendor: Nuevo vendedor
|
|
22
|
+
only_alphanumeric_chars: Debería contener solo letras y dígitos
|
|
23
|
+
order_mailer:
|
|
24
|
+
vendor_notification_email:
|
|
25
|
+
dear_vendor: Estimado vendedor,
|
|
26
|
+
order_summary: Resumen del pedido
|
|
27
|
+
subject: Notificación de vendedor
|
|
28
|
+
thanks: Gracias
|
|
29
|
+
vendor: Vendedor
|
|
30
|
+
vendor_name: Nombre del vendedor
|
|
31
|
+
vendor_states:
|
|
32
|
+
active: Activo
|
|
33
|
+
blocked: Bloqueado
|
|
34
|
+
pending: Pendiente
|
|
35
|
+
admin:
|
|
36
|
+
commission: Comisión
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
fr:
|
|
2
|
+
activerecord:
|
|
3
|
+
models:
|
|
4
|
+
spree/vendor:
|
|
5
|
+
one: Vendeur
|
|
6
|
+
other: Vendeurs
|
|
7
|
+
attributes:
|
|
8
|
+
spree/vendor:
|
|
9
|
+
about_us: A propos
|
|
10
|
+
contact_us: Contact
|
|
11
|
+
image: Image
|
|
12
|
+
name: Nom
|
|
13
|
+
state: Status
|
|
14
|
+
created_at: créé le
|
|
15
|
+
priority: priorité
|
|
16
|
+
spree:
|
|
17
|
+
back_to_vendors_list: Retour à la liste des vendeurs
|
|
18
|
+
edit_vendor: Modifier vendeur
|
|
19
|
+
new_vendor: Nouveau vendeur
|
|
20
|
+
only_alphanumeric_chars: ne doit contenir que des caractères alphanumériques
|
|
21
|
+
order_mailer:
|
|
22
|
+
vendor_notification_email:
|
|
23
|
+
dear_vendor: Cher vendeur,
|
|
24
|
+
subject: Notification vendeur
|
|
25
|
+
thanks: Merci
|
|
26
|
+
vendor: Vendeur
|
|
27
|
+
vendor_name: Nom du vendeur
|
|
28
|
+
vendor_states:
|
|
29
|
+
active: Actif
|
|
30
|
+
blocked: Bloqué
|
|
31
|
+
pending: En attente
|
|
32
|
+
admin:
|
|
33
|
+
commission: Commission
|
data/config/routes.rb
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
Spree::Core::Engine.routes.draw do
|
|
2
|
+
namespace :admin do
|
|
3
|
+
resources :vendors do
|
|
4
|
+
collection do
|
|
5
|
+
post :update_positions
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
get 'vendor_settings' => 'vendor_settings#edit'
|
|
9
|
+
patch 'vendor_settings' => 'vendor_settings#update'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
namespace :api, defaults: { format: 'json' } do
|
|
13
|
+
namespace :v2 do
|
|
14
|
+
namespace :storefront do
|
|
15
|
+
resources :vendors, only: [:show,:index]
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
namespace :v2 do
|
|
20
|
+
namespace :platform do
|
|
21
|
+
resources :vendors
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
namespace :v1 do
|
|
26
|
+
resources :vendors
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
vendor = Spree::Vendor.first_or_initialize do |v|
|
|
2
|
+
v.name = 'Test Vendor'
|
|
3
|
+
end
|
|
4
|
+
vendor.save!
|
|
5
|
+
|
|
6
|
+
puts "Created Vendor with the name \"#{vendor.name}\"!"
|
|
7
|
+
|
|
8
|
+
user = Spree.user_class.where(email: 'user@vendor.com').first_or_initialize do |u|
|
|
9
|
+
u.password = u.password_confirmation = 'vendor123'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
vendor.users << user unless vendor.users.include?(user)
|
|
13
|
+
puts "Created Vendor Admin User with an email \"#{user.email}\" and password \"#{user.password}\"!"
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
class AddVendorIdToSpreeModels < SpreeExtension::Migration[4.2]
|
|
2
|
+
def change
|
|
3
|
+
SpreeMultiVendor.vendorized_models.each do |klass|
|
|
4
|
+
add_reference klass.table_name, :vendor, index: true
|
|
5
|
+
rescue
|
|
6
|
+
message = "Could not add vendor_id column to spree_#{klass}"
|
|
7
|
+
Rails.logger.error message
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class CreateSpreeVendorUsers < SpreeExtension::Migration[4.2]
|
|
2
|
+
def change
|
|
3
|
+
create_table :spree_vendor_users do |t|
|
|
4
|
+
t.references :vendor
|
|
5
|
+
t.references :user
|
|
6
|
+
end
|
|
7
|
+
add_index :spree_vendor_users, [:vendor_id, :user_id], unique: true
|
|
8
|
+
add_index :spree_vendor_users, :vendor_id
|
|
9
|
+
add_index :spree_vendor_users, :user_id
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class CreateSpreeOrderCommissions < SpreeExtension::Migration[4.2]
|
|
2
|
+
def change
|
|
3
|
+
create_table :spree_order_commissions do |t|
|
|
4
|
+
t.references :order
|
|
5
|
+
t.references :vendor
|
|
6
|
+
t.float :amount
|
|
7
|
+
|
|
8
|
+
t.timestamps
|
|
9
|
+
end
|
|
10
|
+
add_index :spree_order_commissions, [:order_id, :vendor_id], unique: true
|
|
11
|
+
add_index :spree_order_commissions, :order_id
|
|
12
|
+
add_index :spree_order_commissions, :vendor_id
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Based on issue https://github.com/spree-contrib/spree_multi_vendor/issues/104
|
|
4
|
+
# This is a patch for Spree globalize to be friendly with the gem
|
|
5
|
+
|
|
6
|
+
class AddTranslationsToVendor < ActiveRecord::Migration[4.2]
|
|
7
|
+
def up
|
|
8
|
+
params = { name: :string, about_us: :text, contact_us: :text, slug: :string }
|
|
9
|
+
if defined?(SpreeGlobalize)
|
|
10
|
+
Spree::Vendor.create_translation_table!(params, { migrate_data: true })
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def down
|
|
15
|
+
if defined?(SpreeGlobalize)
|
|
16
|
+
Spree::Vendor.drop_translation_table! migrate_data: true
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
class ChangeVendorizedModelsVendorIdType < ActiveRecord::Migration[4.2]
|
|
2
|
+
def change
|
|
3
|
+
SpreeMultiVendor.vendorized_models.each do |klass|
|
|
4
|
+
change_column klass.table_name, :vendor_id, :bigint
|
|
5
|
+
rescue
|
|
6
|
+
message = "Could not change vendor_id column for spree_#{klass}"
|
|
7
|
+
Rails.logger.error message
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class ChangeVendorIdAndUserIdTypeForSpreeVendorUsers < ActiveRecord::Migration[4.2]
|
|
2
|
+
def up
|
|
3
|
+
change_table(:spree_vendor_users) do |t|
|
|
4
|
+
t.change :vendor_id, :bigint
|
|
5
|
+
t.change :user_id, :bigint
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
def down
|
|
9
|
+
change_table(:spree_vendor_users) do |t|
|
|
10
|
+
t.change :vendor_id, :integer
|
|
11
|
+
t.change :user_id, :integer
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
data/db/migrate/20210728121024_change_vendor_id_and_order_id_type_for_spree_order_commissions.rb
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
class ChangeVendorIdAndOrderIdTypeForSpreeOrderCommissions < ActiveRecord::Migration[4.2]
|
|
2
|
+
def up
|
|
3
|
+
change_table(:spree_order_commissions) do |t|
|
|
4
|
+
t.change :vendor_id, :bigint
|
|
5
|
+
t.change :order_id, :bigint
|
|
6
|
+
end
|
|
7
|
+
end
|
|
8
|
+
def down
|
|
9
|
+
change_table(:spree_order_commissions) do |t|
|
|
10
|
+
t.change :vendor_id, :integer
|
|
11
|
+
t.change :order_id, :integer
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module SpreeMultiVendor
|
|
2
|
+
module Generators
|
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
|
4
|
+
|
|
5
|
+
class_option :auto_run_migrations, type: :boolean, default: false
|
|
6
|
+
|
|
7
|
+
def add_migrations
|
|
8
|
+
run 'bundle exec rake railties:install:migrations FROM=spree_multi_vendor'
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def run_migrations
|
|
12
|
+
run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]')
|
|
13
|
+
if run_migrations
|
|
14
|
+
run 'bundle exec rake db:migrate'
|
|
15
|
+
else
|
|
16
|
+
puts 'Skipping rake db:migrate, don\'t forget to run it!'
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
require 'spree/core'
|
|
3
|
+
|
|
4
|
+
module SpreeMultiVendor
|
|
5
|
+
module Generators
|
|
6
|
+
class MailersPreviewGenerator < Rails::Generators::Base
|
|
7
|
+
desc 'Generates mailers preview for development proposes'
|
|
8
|
+
|
|
9
|
+
def self.source_paths
|
|
10
|
+
[
|
|
11
|
+
File.expand_path('templates', __dir__)
|
|
12
|
+
]
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def copy_mailers_previews
|
|
16
|
+
preview_path = Rails.application.config.action_mailer.preview_path || 'test/mailers/previews'
|
|
17
|
+
|
|
18
|
+
template 'mailers/previews/vendor_notification_preview.rb', "#{preview_path}/vendor_notification_preview.rb"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module SpreeMultiVendor
|
|
2
|
+
class Engine < Rails::Engine
|
|
3
|
+
require 'spree/core'
|
|
4
|
+
isolate_namespace Spree
|
|
5
|
+
engine_name 'spree_multi_vendor'
|
|
6
|
+
|
|
7
|
+
# use rspec for tests
|
|
8
|
+
config.generators do |g|
|
|
9
|
+
g.test_framework :rspec
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
initializer 'spree_multi_vendor.environment', before: :load_config_initializers do |_app|
|
|
13
|
+
SpreeMultiVendor::Config = SpreeMultiVendor::Configuration.new
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def self.activate
|
|
17
|
+
Dir.glob(File.join(File.dirname(__FILE__), '../../app/**/*_decorator*.rb')) do |c|
|
|
18
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
config.to_prepare &method(:activate).to_proc
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'spree_core'
|
|
2
|
+
require 'spree_backend'
|
|
3
|
+
require 'spree_emails'
|
|
4
|
+
require 'spree_multi_vendor/engine'
|
|
5
|
+
require 'spree_multi_vendor/version'
|
|
6
|
+
require 'spree_extension'
|
|
7
|
+
require 'deface'
|
|
8
|
+
|
|
9
|
+
module SpreeMultiVendor
|
|
10
|
+
# TODO: this should be moved into preferences
|
|
11
|
+
def self.vendorized_models
|
|
12
|
+
SpreeMultiVendor::Config[:vendorized_models].map(&:classify).map do |class_name|
|
|
13
|
+
"::Spree::#{class_name}".safe_constantize
|
|
14
|
+
end.compact.uniq
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
FactoryBot.define do
|
|
2
|
+
factory :vendor, class: Spree::Vendor do
|
|
3
|
+
name { FFaker::Company.name }
|
|
4
|
+
about_us { 'About us...' }
|
|
5
|
+
contact_us { 'Contact us...' }
|
|
6
|
+
|
|
7
|
+
factory :active_vendor do
|
|
8
|
+
name { 'Active vendor' }
|
|
9
|
+
state { :active }
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
factory :active_vendor_list do
|
|
13
|
+
name { "#{FFaker::Company.name} #{FFaker::Company.suffix }" }
|
|
14
|
+
state { :active }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
factory :pending_vendor do
|
|
19
|
+
name { 'Pending vendor' }
|
|
20
|
+
state { :pending }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
factory :blocked_vendor do
|
|
24
|
+
name { 'Blocked vendor' }
|
|
25
|
+
state { :blocked }
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|