Compare commits

...

283 Commits

Author SHA1 Message Date
Pau Perez
259e139c47 Update all locales with the latest Transifex translations 2020-11-30 09:21:13 +01:00
Pau Pérez Fabregat
4ca930bdad Merge pull request #6163 from openfoodfoundation/luisramos0-patch-2
Add brakeman config
2020-11-30 09:08:32 +01:00
Pau Pérez Fabregat
f0a052b65b Merge pull request #6357 from Matt-Yorkley/secret-key-base
Update secret key base
2020-11-27 17:32:14 +01:00
Pau Pérez Fabregat
07a72eccd4 Merge pull request #6391 from Matt-Yorkley/paypal-stock-clashes
Paypal stock clashes
2020-11-27 17:08:15 +01:00
Matt-Yorkley
27586d072d Merge pull request #6423 from openfoodfoundation/revert-6277-controllers
Revert "Move Spree::Admin::BaseController to Admin::BaseController"
2020-11-27 14:29:15 +01:00
Matt-Yorkley
3bfa903912 Revert "Move Spree::Admin::BaseController to Admin::BaseController" 2020-11-27 14:11:57 +01:00
Matt-Yorkley
0ba670b180 Ensure order is cleanly reset to cart state when redirecting to cart 2020-11-27 11:42:46 +00:00
Matt-Yorkley
c4cfc1dc05 Improve order test in paypal controller spec 2020-11-27 11:42:06 +00:00
Pau Pérez Fabregat
17957ed6c0 Merge pull request #6408 from openfoodfoundation/transifex
Transifex
2020-11-27 10:31:56 +01:00
Pau Pérez Fabregat
8b6a08457a Merge pull request #6293 from luisramos0/subs_debug
Add task to print Subscriptions debug info
2020-11-27 10:17:57 +01:00
Maikel
9e2a3d6973 Merge pull request #6277 from luisramos0/controllers
Move Spree::Admin::BaseController to Admin::BaseController
2020-11-27 16:13:55 +11:00
Icker
55b21310e4 Added introductory information for testing. 2020-11-25 09:44:02 -08:00
Transifex-Openfoodnetwork
1266a37ac5 Updating translations for config/locales/en_NZ.yml 2020-11-25 05:39:17 +11:00
Transifex-Openfoodnetwork
54feb2f57d Updating translations for config/locales/en_AU.yml 2020-11-24 07:31:32 +11:00
Transifex-Openfoodnetwork
e9eb90507e Updating translations for config/locales/ca.yml 2020-11-24 07:22:28 +11:00
Transifex-Openfoodnetwork
ee44159c83 Updating translations for config/locales/es.yml 2020-11-24 07:19:47 +11:00
Transifex-Openfoodnetwork
8861f5c6aa Updating translations for config/locales/ca.yml 2020-11-24 07:19:18 +11:00
Matt-Yorkley
b089404891 Merge pull request #6362 from coopdevs/remove-unused-truncate-html-gem
Remove unused truncate_html gem
2020-11-23 00:49:34 +01:00
Matt-Yorkley
2fa2a30c67 Add spec coverage, refactor, avoid double-render errors
👍
2020-11-22 18:37:31 +00:00
Matt-Yorkley
cabec7e73f Fix Rubocop warnings and tidy up 2020-11-22 18:02:54 +00:00
Matt-Yorkley
87df44764f Extract stock-check logic to controller concern and inject prior to final Paypal payment confirmation. 2020-11-22 18:02:52 +00:00
Andy Brett
8f25568530 Merge pull request #6390 from jhsu802701/qtest
SIMPLE: added scripts for running test suite in quiet mode
2020-11-20 12:15:04 -08:00
Andy Brett
b1b422b90e fix/silence rubocop styles 2020-11-20 10:41:31 -08:00
Andy Brett
85d99f3bf2 Merge branch 'master' into controllers 2020-11-20 08:12:03 -08:00
Andy Brett
c6b3a615f1 Merge pull request #6385 from jhsu802701/update_db_schema
SIMPLE: updated db/schema.rb with 'bundle exec rake db:migrate'
2020-11-20 08:03:27 -08:00
Matt-Yorkley
5429bd8d7a Update all locales with the latest Transifex translations 2020-11-19 23:13:09 +00:00
Matt-Yorkley
300e87648b Merge pull request #6394 from openfoodfoundation/transifex
Transifex
2020-11-20 00:11:03 +01:00
Matt-Yorkley
4a9ac62d91 Merge branch 'master' into transifex 2020-11-20 00:10:48 +01:00
Luis Ramos
d7a1d7769c Merge pull request #6258 from luisramos0/s3_with_region
Upgrade aws-sdk and switch to S3 virtual host style URLs
2020-11-19 22:59:57 +00:00
Transifex-Openfoodnetwork
cd20d2612d Updating translations for config/locales/cy.yml 2020-11-19 22:09:04 +11:00
Transifex-Openfoodnetwork
446007e283 Updating translations for config/locales/cy.yml 2020-11-19 22:05:56 +11:00
Transifex-Openfoodnetwork
7bc59512fd Updating translations for config/locales/cy.yml 2020-11-19 22:02:49 +11:00
Pau Pérez Fabregat
8c9960854f Merge pull request #6343 from Matt-Yorkley/api-controllers
API controllers: strong paramaters
2020-11-19 09:04:16 +01:00
Matt-Yorkley
242c1a2715 Add new Paypal feature spec 2020-11-19 01:44:53 +00:00
Matt-Yorkley
21d67a0723 Extract some more paypal-specific test code to new helper 2020-11-19 01:44:38 +00:00
Jason Hsu
59b3bfa161 Added scripts for running test suite in quiet mode and updated docker/README.md 2020-11-18 16:25:03 -06:00
Transifex-Openfoodnetwork
9fc3ff0250 Updating translations for config/locales/en_GB.yml 2020-11-19 05:14:36 +11:00
Transifex-Openfoodnetwork
7ddbc10c19 Updating translations for config/locales/en_GB.yml 2020-11-19 05:11:27 +11:00
Matt-Yorkley
41a5787830 Extract paypal response stubbing to helper 2020-11-18 15:39:01 +00:00
Matt-Yorkley
010c1c799d Add some notes on paypal checkout flow 2020-11-18 14:55:29 +00:00
Matt-Yorkley
2faea65f82 Bring in Spree::PaypalController#confirm method
Original method from the gem. This handles the post-payment response from paypal.
2020-11-18 14:51:23 +00:00
Matt-Yorkley
dd8f139c1b Memoize Spree::PaypalController#payment_method
This gets called 4 or 5 times in a single request just to read basic attributes from the object. The query doesn't need to be repeated each time
2020-11-18 13:45:14 +00:00
Matt-Yorkley
6d0d4b5096 Bring in Spree::PaypalController#payment_method
Original method from the gem. Modified in preceding commit.
2020-11-18 13:45:13 +00:00
Matt-Yorkley
b0a70f0ba3 Improve TaxonController strong params handling 2020-11-17 19:48:27 +00:00
Matt-Yorkley
0b18b0dc0a Include Calculator attributes in PaymentMethod nested attributes and DRY repeated code 2020-11-17 19:04:26 +00:00
Matt-Yorkley
d225294b6b Extract to PermittedAttributes::Calculator 2020-11-17 18:51:48 +00:00
Matt-Yorkley
3547b9fe56 Add missing calculator params 2020-11-17 18:51:48 +00:00
Matt-Yorkley
1766f33d46 Use ActionController::Metal and include StrongParameters 2020-11-17 18:51:48 +00:00
Matt-Yorkley
cbdb6126a6 Fix strong_params in API enterprises_controller 2020-11-17 18:51:48 +00:00
Matt-Yorkley
6a26c9da8c Fix strong_params in API products_controller 2020-11-17 18:51:48 +00:00
Matt-Yorkley
36f4f40e84 Refactor and fix PaymentMethod strong params 2020-11-17 18:51:48 +00:00
Matt-Yorkley
787f29105c Fix ForbiddenAttribute errors for bulk update of enterprise fees and order cycles
Example error:
As an administrator
    I want to manage simple order cycles
 updating many order cycle opening/closing times at once
     Failure/Error: raise ActiveModel::ForbiddenAttributesError, params.to_s

     ActiveModel::ForbiddenAttributesError:
       {"order_cycle_set"=>{"collection_attributes"=>{"0"=>{"id"=>62, "name"=>"Updated Order Cycle 1", "orders_open_at"=>"2040-12-01 12:00:00", "orders_close_at"=>"2040-12-01 12:00:01"}, "1"=>{"id"=>63, "name"=>"Updated Order Cycle 2", "orders_open_at"=>"2040-12-01 12:00:02", "orders_close_at"=>"2040-12-01 12:00:03"}, "2"=>{"id"=>64, "name"=>"Updated Order Cycle 3", "orders_open_at"=>"2040-12-01 12:00:04", "orders_close_at"=>"2040-12-01 12:00:05"}}}, "controller"=>"admin/order_cycles", "action"=>"bulk_update", "format"=>"json", "order_cycle"=>{}}
     # ./app/controllers/application_controller.rb:20:in `print_params'
     # ./lib/open_food_network/rack_request_blocker.rb:36:in `call'
     # ------------------
     # --- Caused by: ---
     # ActiveModel::ForbiddenAttributesError:
     #   ActiveModel::ForbiddenAttributesError
     #   ./app/models/model_set.rb:29:in `block in collection_attributes='
2020-11-17 18:51:48 +00:00
Matt-Yorkley
642a294844 Fix broken order edit shipment
As an administrator
    I want to create and edit orders
 as an enterprise manager viewing the edit page with different shipping methods can edit shipping method
     Failure/Error: expect(page).to have_content "Shipping: #{different_shipping_method_for_distributor1.name}"
       expected to find text "Shipping: Different" in "Logged in as : owen@romaguera.ca Account Logout Store DASHBOARD PRODUCTS ORDER CYCLES ORDERS REPORTS ENTERPRISES CUSTOMERS Order # R813516688 CANCEL ACTIONS BACK TO ORDER LIST John Doe - ADD PRODUCT NAME OR SKU (ENTER AT LEAST FIRST 4 CHARACTERS OF PRODUCT NAME) Select a variant 100 - PENDING ITEM DESCRIPTION PRICE QUANTITY TOTAL Product #3 - 9924 - 1g, S $10.00 1 x none $10.00 Product #4 - 5548 - 1g, S $10.00 1 x none $10.00 Product #5 - 8080 - 1g, S $10.00 1 x none $10.00 Product #6 - 3591 - 1g, S $10.00 1 x none $10.00 Product #7 - 6461 - 1g, S $10.00 1 x none $10.00 Product #8 - 4071 - 1g, S $110.00 1 x none $110.00 SHIPPING METHOD Different $0.00 Normal $0.00 Different $0.00 Tracking: U10000 LINE ITEM ADJUSTMENTS NAME AMOUNT Tax 1 10.0%: $10.00 ORDER ADJUSTMENTS NAME AMOUNT Transaction fee: $0.00 ORDER TOTAL $160.00 DISTRIBUTION Distributor: Enterprise 4 Order cycle: Order Cycle 2 UPDATE AND RECALCULATE FEES or BACK ORDER INFORMATION STATUS COMPLETE TOTAL : $160.00 SHIPMENT : PENDING PAYMENT : BALANCE DUE DATE COMPLETED : November 08, 2020 1:51 AM ORDER DETAILS CUSTOMER DETAILS ADJUSTMENTS PAYMENTS RETURN AUTHORIZATIONS"
     # ./spec/features/admin/order_spec.rb:291:in `block (5 levels) in <top (required)>'
2020-11-17 18:51:48 +00:00
Matt-Yorkley
7401e34c52 Fix credit cards strong params 2020-11-17 18:51:48 +00:00
Matt-Yorkley
ca41bbcee7 Fix Api::VariantsController ForbiddenAttributesError 2020-11-17 18:51:48 +00:00
Matt-Yorkley
c374bf5e49 Fix strong_params in API taxons_controller 2020-11-17 18:51:48 +00:00
Matt-Yorkley
417c4d9aea Inherit from ActionController::Base in API Controllers 2020-11-17 18:51:48 +00:00
Jason Hsu
b85f8d4b45 Updated db/schema.rb with 'bundle exec rake db:migrate' 2020-11-16 18:23:00 -06:00
Maikel Linke
315a5f0fd9 Update translations 2020-11-17 10:17:08 +11:00
Transifex-Openfoodnetwork
4ca8c220e9 Updating translations for config/locales/fr_CA.yml 2020-11-17 09:06:27 +11:00
Transifex-Openfoodnetwork
442dbaa7d7 Updating translations for config/locales/en_CA.yml 2020-11-17 08:49:15 +11:00
Matt-Yorkley
c080c1f1d6 Merge pull request #6382 from Matt-Yorkley/menu-fix
Fix the user menu
2020-11-16 22:20:12 +01:00
Matt-Yorkley
3b92df42c3 Fix the menu!
🙈
2020-11-16 19:05:08 +00:00
Matt-Yorkley
e2dbb150e5 Update all locales with the latest Transifex translations 2020-11-16 16:02:40 +00:00
Luis Ramos
ca29604ff8 Merge pull request #6377 from luisramos0/repeat_calculator_migrations
Repeat calculator migrations to clean up existing data
2020-11-16 10:46:42 +00:00
Transifex-Openfoodnetwork
57bc146de9 Updating translations for config/locales/it.yml 2020-11-14 21:08:20 +11:00
Luis Ramos
e5b7c036d5 Repeat calculator migrations to clean up existing data 2020-11-13 16:35:22 +00:00
Pau Pérez Fabregat
6f1d8664ac Merge pull request #6355 from coopdevs/install-gems-on-docker-boot
Install any missing gems when booting docker
2020-11-13 13:32:27 +01:00
Pau Pérez Fabregat
8d5e90e40f Merge pull request #6365 from Matt-Yorkley/mail-settings
Allow mail_auth_type to be set
2020-11-13 13:30:17 +01:00
Pau Pérez Fabregat
6db80e837b Merge pull request #6361 from andrewpbrett/fix-gateway-error-error
move gateway_error require to lib/spree/core.rb
2020-11-13 13:15:13 +01:00
Matt-Yorkley
cec295a113 Merge pull request #6373 from andrewpbrett/fix-admin-users
specify Spree routes for pagination, fix 500 on admin/users
2020-11-13 11:30:16 +01:00
Maikel Linke
a553547403 Update translations 2020-11-13 14:15:45 +11:00
Maikel
1e4edc671a Merge pull request #6364 from openfoodfoundation/transifex
Transifex
2020-11-13 14:05:12 +11:00
Maikel
b2113c96a2 Merge pull request #6317 from openfoodfoundation/dependabot/bundler/kaminari-0.17.0
Bump kaminari from 0.14.1 to 0.17.0
2020-11-13 13:58:25 +11:00
Maikel
408103516e Merge pull request #6321 from openfoodfoundation/dependabot/bundler/awesome_nested_set-3.2.1
Bump awesome_nested_set from 3.0.3 to 3.2.1
2020-11-13 13:30:18 +11:00
Maikel
d96216b8d7 Merge pull request #6268 from yihyang/master-yy-added-product-sorting
Sort products alphabetically in OC edit/create page
2020-11-13 13:29:54 +11:00
Maikel
d4ff9055c0 Merge pull request #6351 from efgalvao/issue#6249
Fixes Issue#6249
2020-11-13 13:28:55 +11:00
Maikel
591ba34eb6 Merge pull request #6335 from cillian/reset-on-demand-on-inventory-import
When resetting stock to 0 on absent products in inventory import also reset the on demand setting
2020-11-13 13:28:17 +11:00
Andy Brett
8dfd3f624d paginate zones using spree routes as well 2020-11-12 14:24:04 -08:00
Andy Brett
9cf30b431a specify Spree routes for pagination 2020-11-12 14:09:59 -08:00
Pau Pérez Fabregat
777cedd90d Merge pull request #6305 from efgalvao/issue#6292
Fixed issue #6292.
2020-11-12 17:42:42 +01:00
Transifex-Openfoodnetwork
b80d15b672 Updating translations for config/locales/pt_BR.yml 2020-11-13 02:43:56 +11:00
Transifex-Openfoodnetwork
228c7cc13a Updating translations for config/locales/pt_BR.yml 2020-11-13 02:40:55 +11:00
Pau Pérez Fabregat
7c4691ab33 Merge pull request #6339 from andrewpbrett/fix-instance-unit-picker
Fix #6304 (Product edit: Cannot change Variant unit scale of an existing product)
2020-11-12 16:15:00 +01:00
Pau Pérez Fabregat
692adb0113 Merge pull request #6336 from coopdevs/fix-shop-layout
Fix .top-bar-section not to wrap the icons-menu
2020-11-11 17:29:53 +01:00
Matt-Yorkley
58e34b5ad6 Allow mail_auth_type to be set 2020-11-11 15:51:08 +00:00
Transifex-Openfoodnetwork
694bc6a598 Updating translations for config/locales/ar.yml 2020-11-12 02:18:05 +11:00
Transifex-Openfoodnetwork
e06b82f335 Updating translations for config/locales/ar.yml 2020-11-12 02:14:55 +11:00
Pau Perez
f9869d4360 Remove unused truncate_html gem
It seems that we don't use this gem in OFN. It was used in Spree in
https://github.com/openfoodfoundation/spree/blob/2-1-0-stable/core/app/helpers/spree/orders_helper.rb
to truncate the product description. We don't because we show it in
the product modal, and there's no trace of that helper method in our
codebase nor I see the gem used at all.
2020-11-11 13:18:23 +01:00
Matt-Yorkley
1cad631bdb Replace secret_token and update comments
`secret_token` is apparently still called directly in other places...
2020-11-11 01:30:52 +00:00
Andy Brett
17202ff39c move gateway_error require to lib/spree/core.rb 2020-11-10 14:55:56 -08:00
Matt-Yorkley
03d49c7987 Update secret key base
`secret_token` is no longer used in Rails 4+
2020-11-10 20:46:15 +00:00
Andy Brett
d5037abbe7 add specs for new/edit product pages 2020-11-10 10:49:14 -08:00
Pau Perez
5ddfc54b2b Install any missing gems when booting docker
This runs `bundle install` if there are any missing gems when booting
the containers. `bundle check` ensures we don't unnecessarily run
`bundle install`, which is rather slow.

This avoids having to build the entire image (painfully slow) or having
to bring up a container just to install the gems. I used to do this
with `docker-compose run --rm web bundle install`.
2020-11-10 18:08:34 +01:00
Pau Pérez Fabregat
bea8982085 Merge pull request #6329 from openfoodfoundation/transifex
Transifex
2020-11-10 17:37:00 +01:00
Pau Pérez Fabregat
fc06cc242b Merge pull request #6210 from ipalo/feature/update-docker-image-to-ubuntu-20-04
Update the base Ubuntu Docker image from 18.04 to 20.04
2020-11-10 17:30:03 +01:00
Pau Pérez Fabregat
b70c349b05 Merge pull request #6352 from openfoodfoundation/dependabot/bundler/webmock-3.9.5
Bump webmock from 3.9.4 to 3.9.5
2020-11-10 16:47:44 +01:00
Pau Perez
634ab5ca6a Don't scale logo image
The trick using `width: 100%` and a set `max-width` doesn't work if we
can't know the image width as it can be uploaded by superadmins. There's
no need though because the media query breakpoint triggers just before that.
2020-11-10 09:51:41 +01:00
Matt-Yorkley
a802fe29be Fix typo in initializer 2020-11-10 00:07:06 +00:00
Luis Ramos
88ac5dc955 Fix rubocop issues by refactoring code 2020-11-10 00:03:34 +00:00
Luis Ramos
e879aa1bed Switch to s3_alias_url that enabble virtual host type of path 2020-11-10 00:03:33 +00:00
Luis Ramos
94a815a9ef Upgrade aws-sdk and set s3 host name using the provided url config.
This will enable us to set hostnames with the s3 region defined and that
will make our image upload work for all s3 regions.
2020-11-10 00:03:33 +00:00
Luis Ramos
c7c5a95407 Merge pull request #6345 from Matt-Yorkley/flaky-oc-spec
Improve flaky order cycle spec
2020-11-09 21:59:41 +00:00
dependabot-preview[bot]
1825c90a5f Bump webmock from 3.9.4 to 3.9.5
Bumps [webmock](https://github.com/bblimke/webmock) from 3.9.4 to 3.9.5.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.9.4...v3.9.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-09 19:14:30 +00:00
efgalvao
307b1ca9f9 Fixes Issue#6249 2020-11-09 14:06:37 -03:00
Pau Perez
17abb3e345 Fix feature specs
The underlying markup and CSS changed but the tests did not.
2020-11-09 15:43:54 +01:00
Pau Perez
1903c575ff Reorder properties alphabetically
As Hound demands.
2020-11-09 15:40:25 +01:00
Pau Perez
9a885173b9 Remove element from class selector
Fixes Hound error `Avoid qualifying class selectors with an element.`.
2020-11-09 15:39:09 +01:00
Transifex-Openfoodnetwork
3167e5ae2b Updating translations for config/locales/ru.yml 2020-11-10 01:29:44 +11:00
Transifex-Openfoodnetwork
7f968b2b10 Updating translations for config/locales/ru.yml 2020-11-10 01:26:34 +11:00
Transifex-Openfoodnetwork
b08299e83a Updating translations for config/locales/ru.yml 2020-11-10 01:23:23 +11:00
Matt-Yorkley
d9e2a80a4f Improve flaky order cycle spec
There are various points in this spec where content is dynamically added to the DOM, but Capybara is jumping ahead to start interacting with it before it as actually finished loading.
2020-11-09 11:26:12 +00:00
dependabot-preview[bot]
863702ed4b Bump awesome_nested_set from 3.0.3 to 3.2.1
Bumps [awesome_nested_set](https://github.com/collectiveidea/awesome_nested_set) from 3.0.3 to 3.2.1.
- [Release notes](https://github.com/collectiveidea/awesome_nested_set/releases)
- [Changelog](https://github.com/collectiveidea/awesome_nested_set/blob/master/CHANGELOG)
- [Commits](https://github.com/collectiveidea/awesome_nested_set/commits/v3.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-07 08:58:44 +00:00
Luis Ramos
6114dfb4ef Merge pull request #6337 from openfoodfoundation/dependabot/bundler/webmock-3.9.4
Bump webmock from 3.9.3 to 3.9.4
2020-11-07 08:57:13 +00:00
Luis Ramos
f39008f3d3 Merge pull request #6338 from openfoodfoundation/dependabot/bundler/highline-2.0.3
Bump highline from 1.6.18 to 2.0.3
2020-11-07 08:57:02 +00:00
Andy Brett
99301e1fb2 fix #6304 2020-11-06 12:49:07 -08:00
dependabot-preview[bot]
cb0b7ed030 Bump highline from 1.6.18 to 2.0.3
Bumps [highline](https://github.com/JEG2/highline) from 1.6.18 to 2.0.3.
- [Release notes](https://github.com/JEG2/highline/releases)
- [Changelog](https://github.com/JEG2/highline/blob/master/Changelog.md)
- [Commits](https://github.com/JEG2/highline/commits/v2.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-06 19:17:11 +00:00
dependabot-preview[bot]
7d9948f5b6 Bump webmock from 3.9.3 to 3.9.4
Bumps [webmock](https://github.com/bblimke/webmock) from 3.9.3 to 3.9.4.
- [Release notes](https://github.com/bblimke/webmock/releases)
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.9.3...v3.9.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-06 19:14:43 +00:00
Transifex-Openfoodnetwork
18a7bdc631 Updating translations for config/locales/de_DE.yml 2020-11-07 05:32:48 +11:00
Transifex-Openfoodnetwork
6083d61ba7 Updating translations for config/locales/de_DE.yml 2020-11-07 05:29:38 +11:00
Transifex-Openfoodnetwork
9e2054dcd4 Updating translations for config/locales/de_DE.yml 2020-11-07 05:26:28 +11:00
Pau Perez
b5f27d48df Fix .top-bar-section not to wrap the icons-menu
This line-wrap makes the icons-menu overlap the OC selector. The menu's
background is transparent, what makes it look even more broken.

The fix involves refactoring the `.top-bar-section` into using flexbox
instead of this highly coupled CSS and floats. With flexbox it becomes
as easy as telling the browser to space the three sections evenly
filling-up the window, while scaling down the logo if there's not enough
room.

The root cause is that every instance uses a custom logo, which wasn't
the one we used while designing and implementing. This is why using
fixed-sizes in pixels won't work.
2020-11-06 17:35:24 +01:00
Cillian O'Ruanaidh
89d63dfbb9 When resetting stock to 0 on absent products in inventory import also reset the on demand setting
Before when you imported inventory and clicked the 'Set stock to zero for all existing products not present in the file' option it would set the on hand stock to 0 but if the variant override was also set to be on demand the inventory would still be available for sale. This change makes sure the on demand setting is turned off too.

Fixes #6289.
2020-11-06 14:57:31 +00:00
Matt-Yorkley
73995d1aff Merge pull request #6334 from Matt-Yorkley/hound2
Switch to rubocop_styleguide.yml as style source
2020-11-06 12:55:23 +01:00
Matt-Yorkley
f5a9c6f3f4 Switch to rubocop_styleguide.yml as style source 2020-11-06 11:53:56 +00:00
Matt-Yorkley
f6aeb04b14 Merge pull request #6322 from Matt-Yorkley/hound
Add HoundCI config
2020-11-06 12:20:03 +01:00
Matt-Yorkley
00320e4387 Use .scss-lint.yml with HoundCI 2020-11-06 10:18:35 +00:00
Matt-Yorkley
ebd7409f70 Add scss-lint configs to .scss-lint.yml 2020-11-06 10:18:34 +00:00
Transifex-Openfoodnetwork
e86d84e10f Updating translations for config/locales/en_FR.yml 2020-11-06 19:26:16 +11:00
Transifex-Openfoodnetwork
b7a503a848 Updating translations for config/locales/fr.yml 2020-11-06 19:26:04 +11:00
Luis Ramos
28570cded2 Update all locales with the latest Transifex translations 2020-11-06 04:20:08 +00:00
Luis Ramos
c0bb9aad5e Merge pull request #6286 from openfoodfoundation/transifex
Transifex
2020-11-06 04:18:56 +00:00
Luis Ramos
b281e7e9e5 Merge pull request #6312 from mkllnk/variant-override-loading
Avoid loading variant overrides for no reason
2020-11-06 03:59:33 +00:00
Matt-Yorkley
3011bdb87d Add HoundCI config 2020-11-06 00:27:32 +00:00
Matt-Yorkley
66b531ddf6 Merge pull request #6310 from luisramos0/acts_as_list
Bump acts_as_list to 0.3.0
2020-11-05 23:03:02 +01:00
Transifex-Openfoodnetwork
213f3cf072 Updating translations for config/locales/ar.yml 2020-11-06 07:43:38 +11:00
Transifex-Openfoodnetwork
e1962419c2 Updating translations for config/locales/ar.yml 2020-11-06 07:40:32 +11:00
Transifex-Openfoodnetwork
bb6f5cb3a7 Updating translations for config/locales/en_US.yml 2020-11-06 07:06:15 +11:00
dependabot-preview[bot]
2d90fa4723 Bump kaminari from 0.14.1 to 0.17.0
Bumps [kaminari](https://github.com/kaminari/kaminari) from 0.14.1 to 0.17.0.
- [Release notes](https://github.com/kaminari/kaminari/releases)
- [Changelog](https://github.com/kaminari/kaminari/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kaminari/kaminari/compare/v0.14.1...v0.17.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-05 19:15:53 +00:00
Matt-Yorkley
db3576f469 Merge pull request #6308 from luisramos0/translations
Fix some missing translations in orders edit page
2020-11-05 18:33:51 +01:00
Matt-Yorkley
c2362921fa Merge pull request #6272 from tsara27/fix-alignment-order
Align center order adjustment and order total title
2020-11-05 18:33:08 +01:00
Matt-Yorkley
0668dd2591 Merge pull request #6307 from efgalvao/issue#6262
Fixes issue #6262.
2020-11-05 18:31:49 +01:00
Matt-Yorkley
d8f9dead8b Merge pull request #6270 from Matt-Yorkley/paperclip-handlers
Remove Paperclip URL handlers
2020-11-05 18:29:20 +01:00
Matt-Yorkley
bc96ad9515 Merge pull request #6299 from Matt-Yorkley/admin-image-edit
Fix display issue in product image edit page
2020-11-05 18:28:10 +01:00
Luis Ramos
bd4da3b5ce Merge pull request #6247 from cillian/deep-munge-issue
Patch Rails :deep_munge issue so empty array parameters don't get converted to nil
2020-11-05 13:25:39 +00:00
Pau Pérez Fabregat
8e3f0d2152 Merge pull request #6134 from Matt-Yorkley/webmock-helper
Improve Webmock debugging
2020-11-05 13:11:02 +01:00
Pau Pérez Fabregat
1ea503ed5d Merge pull request #6306 from SerenaWhite/update-handbook-reference
Update reference to OFN Handbook in README.md
2020-11-05 13:05:39 +01:00
Transifex-Openfoodnetwork
719007ecb4 Updating translations for config/locales/es.yml 2020-11-05 22:57:29 +11:00
Transifex-Openfoodnetwork
bd06f898a3 Updating translations for config/locales/ca.yml 2020-11-05 22:55:21 +11:00
Transifex-Openfoodnetwork
246a1f368b Updating translations for config/locales/de_DE.yml 2020-11-05 21:59:09 +11:00
Transifex-Openfoodnetwork
f6443f00e5 Updating translations for config/locales/en_FR.yml 2020-11-05 19:23:26 +11:00
Transifex-Openfoodnetwork
fd52800d2c Updating translations for config/locales/fr.yml 2020-11-05 19:21:40 +11:00
Maikel Linke
4b1f5ae060 Avoid loading variant overrides for no reason 2020-11-05 14:31:19 +11:00
Transifex-Openfoodnetwork
31a34fc9d2 Updating translations for config/locales/en_NZ.yml 2020-11-05 10:00:28 +11:00
Transifex-Openfoodnetwork
3fc0d1bcb9 Updating translations for config/locales/en_NZ.yml 2020-11-05 09:57:27 +11:00
Luis Ramos
bb89557beb Bump acts_as_list to 0.3.0 2020-11-04 22:13:24 +00:00
Luis Ramos
0ae3bf985a Fix some missing translations in orders edit page 2020-11-04 21:54:27 +00:00
Luis Ramos
387326b9b4 Merge pull request #5978 from luisramos0/bye_bye_spree
Bye bye spree - final PR 🎉
2020-11-04 21:27:28 +00:00
Luis Ramos
cb80f67dc6 Merge pull request #5885 from luisramos0/variants
[Bye bye Spree] Bring models product, variant, price from spree_core
2020-11-04 21:26:07 +00:00
efgalvao
5260c01f16 Update registration.html.haml
Removed spaces.
2020-11-04 17:37:11 -03:00
Matt-Yorkley
3170db9532 Remove Paperclip URL handlers
See ofn-security issue #33 for details.
2020-11-04 16:49:01 +00:00
efgalvao
42d5f377e0 Fixes issue #6262. 2020-11-04 13:11:37 -03:00
Ren White
f513d888a3 Update reference to OFN handbook in README.md 2020-11-04 06:57:06 -07:00
Luis Ramos
5cde085241 Fix a number of spree translations 2020-11-04 13:55:36 +00:00
Luis Ramos
23956726e9 Add missing translation 2020-11-04 12:37:55 +00:00
efgalvao
1f1da3eb6d Fixed issue #6292. 2020-11-04 09:37:51 -03:00
Luis Ramos
f6d0905517 Add s3_support require to image.rb 2020-11-04 12:15:45 +00:00
Luis Ramos
c2591104ee Fix typo in application setup
This was forcing env test in all environments breaking payment methods that are activated by environment
2020-11-04 12:15:45 +00:00
Luis Ramos
3beea43143 Switch to a version of better_paypal_express that does not define
routes and define those routes on the OFN side
2020-11-04 12:15:45 +00:00
Luis Ramos
8f2d52b9e3 Revert "Do not reload routes and make spree routes append instead of draw in"
This reverts commit cdf4c795c7c7ae18006eb24af9336941361b6b81.
2020-11-04 12:15:45 +00:00
Luis Ramos
eada388534 Add handle_extensions to get Spree.translations (archaic spree js translations) in handlebars templates
This is all legacy from spree that can be cleaned up at some point, we only have two handlebars templates in OFN
2020-11-04 12:15:45 +00:00
Luis Ramos
f6f4faf146 Move test setup to application.rb
Without spree_core, the test environment file loads before the Spree engine is loaded
2020-11-04 12:15:45 +00:00
Luis Ramos
5c4ea1a6be Fix tax rates spec 2020-11-04 12:15:45 +00:00
Luis Ramos
72c454a211 Fix reference to Spree bug 2020-11-04 12:15:45 +00:00
Luis Ramos
543a9592c7 Adapt spec to routes without spree 2020-11-04 12:15:45 +00:00
Luis Ramos
2ce96f4bbe Registration path is working correctly again without spree 2020-11-04 12:15:45 +00:00
Luis Ramos
00d121ebfc Add misssing translation 2020-11-04 12:15:45 +00:00
Luis Ramos
c785d0d1d7 Make engine's routes append to main app instead of prepend 2020-11-04 12:15:45 +00:00
Luis Ramos
80cbe6b30f Add route helper to call to sort_link so that it can find the necessary routes 2020-11-04 12:15:45 +00:00
Luis Ramos
09aef524f3 Make route helpers use spree helper 2020-11-04 12:15:45 +00:00
Luis Ramos
805b4d243e Fix missing translations 2020-11-04 12:15:45 +00:00
Luis Ramos
a07029f660 Add require so that model is available when needed 2020-11-04 12:15:45 +00:00
Luis Ramos
ccab133d63 Make sample data use OFN's calculators 2020-11-04 12:15:45 +00:00
Luis Ramos
a51645f316 Remove deleted file 2020-11-04 12:15:45 +00:00
Luis Ramos
4125fe1690 Fix problem with string matchers 2020-11-04 12:15:45 +00:00
Luis Ramos
6950d7717f Add missing translation 2020-11-04 12:15:45 +00:00
Luis Ramos
ab53db0c61 Merge ability and ability decorator 2020-11-04 12:15:45 +00:00
Luis Ramos
1b4a4a8113 Bring code from spree_paypal_express to make it use spree url_helper 2020-11-04 12:15:45 +00:00
Luis Ramos
66fb3a9cf3 Remove code related to spree promotions 2020-11-04 12:15:45 +00:00
Luis Ramos
79a7cf9b39 Add default spree logo 2020-11-04 12:15:45 +00:00
Luis Ramos
a18a198812 Fix locations of requires in admin js all.js 2020-11-04 12:15:45 +00:00
Luis Ramos
0ca71ce0a9 Do not reload routes and make spree routes append instead of draw in
case thee routes are already defined elsewhere, for example, by the
paypal express gem
2020-11-04 12:15:45 +00:00
Luis Ramos
b7aa04353c Fix requires of product duplicator 2020-11-04 12:15:45 +00:00
Luis Ramos
bfeebccbc5 Load Spree engine before configuring it 2020-11-04 12:15:45 +00:00
Luis Ramos
4b21667974 Move initializers from Spree engine to the OFN application 2020-11-04 12:15:45 +00:00
Luis Ramos
9bbeec5031 Require code from spree/core explicitly 2020-11-04 12:15:45 +00:00
Luis Ramos
af3057f55f Remove spree requires that are not needed in OFN 2020-11-04 12:15:45 +00:00
Luis Ramos
e8381304f9 Remove spree_core dependency 2020-11-04 12:15:45 +00:00
Luis Ramos
58a476751b Remove code from the spree engine that is not needed in OFN 2020-11-04 12:15:45 +00:00
Luis Ramos
3320a3f0bc Fix some more rubocop issues 2020-11-04 12:15:45 +00:00
Luis Ramos
4c6708267a Run rubocop -a 2020-11-04 12:15:45 +00:00
Luis Ramos
2f0d61d54f Bring Spree engine.rb from spree_core 2020-11-04 12:15:45 +00:00
Luis Ramos
451d8488d9 Run rubocop -a 2020-11-04 12:15:45 +00:00
Luis Ramos
bcca2eee9d Bring user and ability related files from spree_core 2020-11-04 12:15:45 +00:00
Luis Ramos
1bce516a45 Make specs load product duplicator
This makes the ofn version of the product duplicator be used instead of the spree one
2020-11-04 12:15:45 +00:00
Luis Ramos
f6195f1159 Remove duplicate_extra logic from ProductDuplicator 2020-11-04 12:15:23 +00:00
Luis Ramos
503c17f896 Move Spree::ProductDuplicator to Spree::Core namespace 2020-11-04 12:15:23 +00:00
Luis Ramos
795b7101ab Remove spree requires that are not needed in OFN 2020-11-04 12:15:23 +00:00
Luis Ramos
9d4a15b0e0 Add required product scopes from spree_core product_scopes 2020-11-04 12:15:23 +00:00
Luis Ramos
459959c068 Remove code related to spree promotions 2020-11-04 12:15:23 +00:00
Luis Ramos
ba16de6627 Move product duplicator to lib/spree/core, it's where spree_core is currently loading it from 2020-11-04 12:15:23 +00:00
Luis Ramos
72a39fdf54 Add required factory from spree_core 2020-11-04 12:15:23 +00:00
Luis Ramos
4b8515358c Remove reference to FactoryGirl, it's FactoryBot that is used in OFN 2020-11-04 12:15:23 +00:00
Luis Ramos
cf7d8067df Fix easy rubocop issues 2020-11-04 12:15:23 +00:00
Luis Ramos
d4e4669e49 Run transpec 2020-11-04 12:15:23 +00:00
Luis Ramos
e9f76cb339 Remove some dead code (Config.track_inventory_levels), remove variant.cost_price= so that localized number is seen, and fix specs 2020-11-04 12:15:23 +00:00
Luis Ramos
b68c5ee0f9 Remove dead code (prototypes) and fix specs 2020-11-04 12:15:23 +00:00
Luis Ramos
072cd2bd54 Run rubocop autocorrect in specs 2020-11-04 12:15:23 +00:00
Luis Ramos
2f8198eecc Fix some easy rubocop issues 2020-11-04 12:15:23 +00:00
Luis Ramos
f85044e035 Run rubocop autocorrect 2020-11-04 12:15:23 +00:00
Luis Ramos
751beceb34 Merge decorators with original spree files 2020-11-04 12:15:23 +00:00
Luis Ramos
8cb75fc6d8 Bring models from spree_core: Spree::Product and Spree::Variant!
EPIC COMMIT ALERT :-)
2020-11-04 12:15:23 +00:00
Matt-Yorkley
d147996af6 Fix display issue in product image edit page 2020-11-03 18:41:09 +00:00
Transifex-Openfoodnetwork
daff0a250c Updating translations for config/locales/pt_BR.yml 2020-11-04 03:32:20 +11:00
Transifex-Openfoodnetwork
65bccb9236 Updating translations for config/locales/ru.yml 2020-11-03 20:36:52 +11:00
Transifex-Openfoodnetwork
efe5a4700a Updating translations for config/locales/en_FR.yml 2020-11-03 19:13:11 +11:00
Transifex-Openfoodnetwork
0103cc3a2f Updating translations for config/locales/fr.yml 2020-11-03 19:13:06 +11:00
Transifex-Openfoodnetwork
2a2c7bdc4e Updating translations for config/locales/es.yml 2020-11-03 08:49:53 +11:00
Transifex-Openfoodnetwork
ad76f3e91e Updating translations for config/locales/ca.yml 2020-11-03 08:48:11 +11:00
Pau Pérez Fabregat
201c9c109d Merge pull request #6281 from Matt-Yorkley/missing-translation-ordering
Add missing translation key for enterprise taxon ordering
2020-11-02 22:15:43 +01:00
Pau Pérez Fabregat
4911bb6613 Merge pull request #6274 from luisramos0/rubocop
Use rubocop auto correct to fix a number of issues
2020-11-02 22:13:36 +01:00
Luis Ramos
c07215552e Add log entries to log 2020-11-02 20:59:57 +00:00
Luis Ramos
2b01c80c54 Add subs debug task that prints out basic info about a specific Order Cycle 2020-11-02 20:59:57 +00:00
Pau Pérez Fabregat
9de74500cd Merge pull request #6288 from andrewpbrett/fix-cookies-banner
update template path for cookies banner, fix #6284
2020-11-02 20:52:46 +01:00
Andy Brett
04f5249176 update template path for cookies banner, fix #6284 2020-11-02 07:45:30 -08:00
Transifex-Openfoodnetwork
5c81f645c9 Updating translations for config/locales/fr.yml 2020-11-02 20:38:38 +11:00
Transifex-Openfoodnetwork
6ff8cadb26 Updating translations for config/locales/en_FR.yml 2020-11-02 20:27:13 +11:00
Transifex-Openfoodnetwork
04358dfa39 Updating translations for config/locales/en_FR.yml 2020-11-02 20:24:09 +11:00
Transifex-Openfoodnetwork
b23d6674b5 Updating translations for config/locales/ru.yml 2020-11-02 18:59:12 +11:00
Transifex-Openfoodnetwork
8904273bea Updating translations for config/locales/ru.yml 2020-11-02 18:56:03 +11:00
Luis Ramos
1bb7fd9ec8 Merge pull request #6280 from Matt-Yorkley/eastern-slavic-plurals
Add missing translation keys for Eastern Slavic plurals
2020-10-31 23:13:54 +00:00
Matt-Yorkley
0af20e48b0 Add missing translation key for enterprise taxon ordering 2020-10-31 19:17:19 +00:00
Matt-Yorkley
bc40088eaf Add missing translation keys for Eastern Slavic plurals
There are multiple forms of pluralisation here, with different translations for each.

перевод сложен !
2020-10-31 16:58:15 +00:00
Luis Ramos
fa77204e14 Adapt spec to the move of the controller, in prod the call to request.env['PATH_INFO'] will work correctly 2020-10-31 10:44:19 +00:00
Luis Ramos
af713385d8 Add frozen string literal 2020-10-31 10:16:37 +00:00
Luis Ramos
c9972189d0 Change usage of Spree::Admin::BaseController to Admin::BaseController 2020-10-31 09:56:59 +00:00
Luis Ramos
eb07a91acb Adapt code from Spree::Admin::BaseController to Admin::BaseController 2020-10-31 09:52:34 +00:00
Luis Ramos
66ba9ff73d Move Spree::Admin::BaseController to Admin::BaseController 2020-10-31 09:51:37 +00:00
Luis Ramos
bfce012a4b Update manual rubocop todo 2020-10-30 17:56:13 +00:00
Luis Ramos
fb3dd0aa18 Update rubocop manual list for MethodLength and AbcSize cops 2020-10-30 17:46:49 +00:00
Luis Ramos
01320105ea Update rubocop_todo 2020-10-30 17:32:47 +00:00
Luis Ramos
c2c12b34f9 Fix more rubocop issues with auto correct 2020-10-30 17:10:23 +00:00
Luis Ramos
c71ebc38bb Fix Layout/ArgumentAlignment 2020-10-30 17:06:08 +00:00
Luis Ramos
4b03dec119 Update manual todo for Line Length 2020-10-30 17:01:38 +00:00
Luis Ramos
ca1373a366 Fix Style/RescueStandardError and Style/RegexpLiteral 2020-10-30 16:50:37 +00:00
Luis Ramos
b0e889be2a Fix Style/RandomWithOffset 2020-10-30 16:50:37 +00:00
Luis Ramos
b3196295e6 Fix Style/RaiseArgs 2020-10-30 16:50:37 +00:00
Luis Ramos
75cec3b606 Fix issue Style/HashSyntax 2020-10-30 16:50:37 +00:00
Luis Ramos
92417d849c Fix rubocop issue Rails/DynamicFindBy 2020-10-30 16:50:37 +00:00
Luis Ramos
bf5fcde885 Fix Lint/UnusedMethodArgument 2020-10-30 16:50:37 +00:00
Luis Ramos
40f8c785a2 Fix Lint/UnusedBlockArgument 2020-10-30 16:50:37 +00:00
Luis Ramos
403384dbb1 Fix rubocop isssues, trailing whitespaces and empty lines 2020-10-30 16:50:37 +00:00
Luis Ramos
c30cba8bfe Fix issue Layout/SpaceInsideHashLiteralBraces 2020-10-30 16:50:37 +00:00
Luis Ramos
e8138e8c23 Fix rubocop issues in models/payment_spec 2020-10-30 16:50:37 +00:00
Luis Ramos
4845cde20f Fix rubocop issue Layout/HashAlignment 2020-10-30 16:50:37 +00:00
Luis Ramos
a8265aff89 Fix rubocop issue Layout/FirstHashElementIndentation 2020-10-30 16:50:37 +00:00
Luis Ramos
9cb3b0b14a Fix rubocop issue Layout/FirstArrayElementIndentation 2020-10-30 16:50:37 +00:00
Luis Ramos
06433b1be3 Fix rubocop issue Layout/ExtraSpacing 2020-10-30 16:50:37 +00:00
Luis Ramos
d4c52ce122 Fix rubocop issue Layout/EmptyLinesAroundBlockBody 2020-10-30 16:50:37 +00:00
Luis Ramos
eb4e732c1a Fix rubocop issue Layout/EmptyLines 2020-10-30 16:50:37 +00:00
Luis Ramos
3fe2684270 Fix rubocop issue Layout/BlockAlignment 2020-10-30 16:50:37 +00:00
Luis Ramos
3e6e338e3d Fix rubocop issue Layout/ArgumentAlignment 2020-10-30 16:50:37 +00:00
Cillian O'Ruanaidh
5aa8c783b1 Use Rspec syntax instead of Test::Unit in ActionDispatch::Request spec. 2020-10-30 11:12:36 +00:00
Cillian O'Ruanaidh
5a66c855bc Add :frozen_string_literal magic comment and underscore prefix to unused block argument for Rubocop 2020-10-30 11:12:36 +00:00
Cillian O'Ruanaidh
ea3c456d3b Patch Rails :deep_munge issue so empty array parameters don't get converted to nil
Before people were unable to remove coordinator fees from an order cycle because Rails was converting the empty :coordinator_fee_ids array paramter into nil. This issue was introduced to Rails in v4.0.0.beta1 and isn't fixed until v5.0.0.beta1

Another way to fix this could be to do something like 'params[:coordinator_fee_ids] ||= []' but it seems like this issue could problems in other parts of the app so a more general fix might be better.

Fixes #6224
2020-10-30 11:12:36 +00:00
Tsara Sudrajat
f4c7a0b2a2 Align center order adjustment and order total title 2020-10-30 11:29:38 +07:00
Yih Yang
b477ed4a0a added products variable 2020-10-29 23:37:56 +08:00
Yih Yang
f7ee08855a updated implementation 2020-10-29 22:07:11 +08:00
Yih Yang
e3d1f5256b added product sorting 2020-10-29 22:06:35 +08:00
Paolo Rossi
4a60d7ef0e Update the base Ubuntu Docker image from 18.04 to 20.04 2020-10-16 17:26:08 +02:00
Luis Ramos
dbd41e9d31 Use ruby 2.4 as github actions do not support ruby 2.3. 2020-10-13 10:31:26 +01:00
Luis Ramos
87327dcf57 Add brakeman config 2020-10-13 10:31:13 +01:00
Matt-Yorkley
6d169c1b08 Improve Webmock debugging 2020-10-05 17:11:34 +01:00
189 changed files with 8024 additions and 1598 deletions

44
.github/workflows/brakeman-analysis.yml vendored Normal file
View File

@@ -0,0 +1,44 @@
# This workflow integrates Brakeman with GitHub's Code Scanning feature
# Brakeman is a static analysis security vulnerability scanner for Ruby on Rails applications
name: Brakeman Scan
# This section configures the trigger for the workflow. Feel free to customize depending on your convention
on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]
jobs:
brakeman-scan:
name: Brakeman Scan
runs-on: ubuntu-18.04
steps:
# Checkout the repository to the GitHub Actions runner
- name: Checkout
uses: actions/checkout@v2
# Customize the ruby version depending on your needs
- name: Setup Ruby
uses: actions/setup-ruby@v1
with:
ruby-version: '2.4'
- name: Setup Brakeman
env:
BRAKEMAN_VERSION: '4.10' # SARIF support is provided in Brakeman version 4.10+
run: |
gem install brakeman --version $BRAKEMAN_VERSION
# Execute Brakeman CLI and generate a SARIF output with the security issues identified during the analysis
- name: Scan
continue-on-error: true
run: |
brakeman -f sarif -o output.sarif.json .
# Upload the SARIF file generated in the previous step
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: output.sarif.json

4
.hound.yml Normal file
View File

@@ -0,0 +1,4 @@
rubocop:
config_file: .rubocop_styleguide.yml
scss:
config_file: .scss-lint.yml

View File

@@ -61,11 +61,10 @@ Layout/LineLength:
- app/models/product_import/unit_converter.rb
- app/models/proxy_order.rb
- app/models/schedule.rb
- app/models/spree/app_configuration_decorator.rb
- app/models/spree/app_configuration.rb
- app/models/spree/gateway/stripe_connect.rb
- app/models/spree/image.rb
- app/models/spree/line_item_decorator.rb
- app/models/spree/order_decorator.rb
- app/models/spree/order.rb
- app/models/spree/payment_method.rb
- app/models/spree/product_decorator.rb
- app/models/spree/user.rb
@@ -74,6 +73,7 @@ Layout/LineLength:
- app/models/variant_override_set.rb
- app/serializers/api/admin/subscription_line_item_serializer.rb
- app/services/cart_service.rb
- app/services/checkout/post_checkout_actions.rb
- app/services/default_stock_location.rb
- app/services/embedded_page_service.rb
- app/services/order_cycle_form.rb
@@ -101,7 +101,6 @@ Layout/LineLength:
- lib/open_food_network/scope_variants_for_search.rb
- lib/open_food_network/xero_invoices_report.rb
- lib/spree/localized_number.rb
- lib/spree/product_filters.rb
- lib/tasks/data.rake
- lib/tasks/enterprises.rake
- spec/controllers/admin/bulk_line_items_controller_spec.rb
@@ -263,12 +262,17 @@ Layout/LineLength:
- spec/models/spree/adjustment_spec.rb
- spec/models/spree/classification_spec.rb
- spec/models/spree/gateway/stripe_connect_spec.rb
- spec/models/spree/inventory_unit_spec.rb
- spec/models/spree/line_item_spec.rb
- spec/models/spree/order/checkout_spec.rb
- spec/models/spree/order_inventory_spec.rb
- spec/models/spree/order_spec.rb
- spec/models/spree/order/state_machine_spec.rb
- spec/models/spree/payment_method_spec.rb
- spec/models/spree/payment_spec.rb
- spec/models/spree/product_set_spec.rb
- spec/models/spree/product_spec.rb
- spec/models/spree/return_authorization_spec.rb
- spec/models/spree/shipping_method_spec.rb
- spec/models/spree/stock_item_spec.rb
- spec/models/spree/taxon_spec.rb
@@ -298,6 +302,7 @@ Layout/LineLength:
- spec/serializers/api/order_serializer_spec.rb
- spec/services/cart_service_spec.rb
- spec/services/checkout/form_data_adapter_spec.rb
- spec/services/checkout/post_checkout_actions_spec.rb
- spec/services/embedded_page_service_spec.rb
- spec/services/exchange_products_renderer_spec.rb
- spec/services/order_cycle_distributed_products_spec.rb
@@ -384,17 +389,22 @@ Metrics/AbcSize:
- app/models/proxy_order.rb
- app/models/spree/ability.rb
- app/models/spree/address.rb
- app/models/spree/line_item_decorator.rb
- app/models/spree/line_item.rb
- app/models/spree/order/checkout.rb
- app/models/spree/order_decorator.rb
- app/models/spree/order_contents.rb
- app/models/spree/order_inventory.rb
- app/models/spree/order.rb
- app/models/spree/payment/processing.rb
- app/models/spree/payment.rb
- app/models/spree/preference.rb
- app/models/spree/preferences/preferable_class_methods.rb
- app/models/spree/preferences/preferable.rb
- app/models/spree/product_decorator.rb
- app/models/spree/return_authorization.rb
- app/models/spree/shipment.rb
- app/models/spree/taxon.rb
- app/models/spree/tax_rate.rb
- app/models/spree/zone.rb
- app/serializers/api/admin/enterprise_serializer.rb
- app/serializers/api/product_serializer.rb
- app/serializers/api/variant_serializer.rb
- app/services/cart_service.rb
@@ -517,7 +527,11 @@ Metrics/CyclomaticComplexity:
- app/models/spree/order/checkout.rb
- app/models/spree/payment_method.rb
- app/models/spree/payment.rb
- app/models/spree/preference.rb
- app/models/spree/preferences/preferable.rb
- app/models/spree/preferences/preferable_class_methods.rb
- app/models/spree/product_decorator.rb
- app/models/spree/return_authorization.rb
- app/models/spree/zone.rb
- app/models/variant_override_set.rb
- app/services/cart_service.rb
@@ -551,7 +565,10 @@ Metrics/PerceivedComplexity:
- app/models/spree/order/checkout.rb
- app/models/spree/payment_method.rb
- app/models/spree/payment.rb
- app/models/spree/preferences/preferable.rb
- app/models/spree/preferences/preferable_class_methods.rb
- app/models/spree/product_decorator.rb
- app/models/spree/return_authorization.rb
- app/models/spree/zone.rb
- app/models/variant_override_set.rb
- app/services/cart_service.rb
@@ -577,7 +594,7 @@ Metrics/PerceivedComplexity:
- app/models/spree/ability.rb
- app/models/spree/address.rb
- app/models/spree/order/checkout.rb
- app/models/spree/order_decorator.rb
- app/models/spree/order.rb
- app/models/spree/product_decorator.rb
- app/models/spree/zone.rb
- engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb
@@ -595,61 +612,6 @@ Metrics/PerceivedComplexity:
Metrics/MethodLength:
Max: 10
Exclude:
- app/controllers/admin/enterprise_fees_controller.rb
- app/controllers/admin/enterprises_controller.rb
- app/controllers/spree/admin/taxons_controller.rb
- app/controllers/spree/orders_controller.rb
- app/helpers/checkout_helper.rb
- app/helpers/order_cycles_helper.rb
- app/helpers/spree/admin/base_helper.rb
- app/helpers/spree/admin/navigation_helper.rb
- app/models/enterprise.rb
- app/models/enterprise_relationship.rb
- app/models/spree/ability.rb
- app/models/spree/address.rb
- app/models/spree/order/checkout.rb
- app/models/spree/payment_method.rb
- app/models/spree/payment.rb
- app/models/spree/product_decorator.rb
- app/models/spree/zone.rb
- app/models/variant_override_set.rb
- app/services/cart_service.rb
- engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb
- engines/order_management/app/services/order_management/stock/estimator.rb
- lib/active_merchant/billing/gateways/stripe_payment_intents.rb
- lib/discourse/single_sign_on.rb
- lib/open_food_network/enterprise_issue_validator.rb
- lib/spree/core/calculated_adjustments.rb
- lib/spree/core/controller_helpers/order.rb
- lib/spree/core/controller_helpers/respond_with.rb
- lib/spree/core/controller_helpers/ssl.rb
- lib/spree/localized_number.rb
- spec/models/product_importer_spec.rb
- app/controllers/admin/enterprises_controller.rb
- app/controllers/api/variants_controller.rb
- app/controllers/spree/admin/taxons_controller.rb
- app/controllers/spree/orders_controller.rb
- app/helpers/checkout_helper.rb
- app/helpers/order_cycles_helper.rb
- app/helpers/spree/admin/navigation_helper.rb
- app/models/enterprise_relationship.rb
- app/models/spree/ability.rb
- app/models/spree/address.rb
- app/models/spree/order/checkout.rb
- app/models/spree/order_decorator.rb
- app/models/spree/product_decorator.rb
- app/models/spree/zone.rb
- engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb
- engines/order_management/app/services/order_management/stock/estimator.rb
- lib/active_merchant/billing/gateways/stripe_payment_intents.rb
- lib/discourse/single_sign_on.rb
- lib/open_food_network/enterprise_issue_validator.rb
- lib/spree/core/calculated_adjustments.rb
- lib/spree/core/controller_helpers/order.rb
- lib/spree/core/controller_helpers/respond_with.rb
- lib/spree/core/controller_helpers/ssl.rb
- lib/spree/localized_number.rb
- spec/models/product_importer_spec.rb
- app/controllers/admin/contents_controller.rb
- app/controllers/admin/customers_controller.rb
- app/controllers/admin/enterprise_fees_controller.rb
@@ -699,10 +661,17 @@ Metrics/MethodLength:
- app/models/spree/address.rb
- app/models/spree/credit_card.rb
- app/models/spree/order/checkout.rb
- app/models/spree/order_decorator.rb
- app/models/spree/order_contents.rb
- app/models/spree/order_inventory.rb
- app/models/spree/order.rb
- app/models/spree/payment_method.rb
- app/models/spree/payment/processing.rb
- app/models/spree/preference.rb
- app/models/spree/preferences/preferable_class_methods.rb
- app/models/spree/preferences/preferable.rb
- app/models/spree/preferences/store.rb
- app/models/spree/product_decorator.rb
- app/models/spree/return_authorization.rb
- app/models/spree/shipment.rb
- app/models/spree/taxon.rb
- app/models/spree/tax_rate.rb
@@ -783,6 +752,8 @@ Metrics/ClassLength:
- app/models/spree/ability.rb
- app/models/spree/address.rb
- app/models/spree/credit_card.rb
- app/models/spree/line_item.rb
- app/models/spree/order.rb
- app/models/spree/payment.rb
- app/models/spree/shipment.rb
- app/models/spree/user.rb
@@ -817,6 +788,7 @@ Metrics/ModuleLength:
- lib/open_food_network/column_preference_defaults.rb
- spec/controllers/admin/order_cycles_controller_spec.rb
- spec/controllers/api/orders_controller_spec.rb
- spec/lib/open_food_network/order_cycle_form_applicator_spec.rb
- spec/lib/open_food_network/order_cycle_permissions_spec.rb
- spec/models/spree/adjustment_spec.rb
- spec/models/spree/credit_card_spec.rb
@@ -831,3 +803,9 @@ Metrics/ParameterLists:
- app/models/product_import/entry_processor.rb
- lib/open_food_network/xero_invoices_report.rb
- spec/features/admin/reports_spec.rb
Lint/UselessAssignment:
Exclude:
- 'spec/**/*'
- 'app/models/spree/taxon.rb'
- 'lib/spree/core/controller_helpers/common.rb'

View File

@@ -1,144 +1,11 @@
# This configuration was generated by
# `rubocop --auto-gen-config --exclude-limit 1400`
# on 2020-10-14 09:49:36 +0100 using RuboCop version 0.81.0.
# on 2020-10-30 17:18:53 +0000 using RuboCop version 0.81.0.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.
# Offense count: 3
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: with_first_argument, with_fixed_indentation
Layout/ArgumentAlignment:
Exclude:
- 'spec/models/spree/address_spec.rb'
- 'spec/models/spree/order/checkout_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyleAlignWith.
# SupportedStylesAlignWith: either, start_of_block, start_of_line
Layout/BlockAlignment:
Exclude:
- 'spec/models/spree/order/checkout_spec.rb'
# Offense count: 3
# Cop supports --auto-correct.
Layout/EmptyLines:
Exclude:
- 'spec/features/admin/variants_spec.rb'
- 'spec/models/spree/payment_spec.rb'
# Offense count: 4
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: empty_lines, no_empty_lines
Layout/EmptyLinesAroundBlockBody:
Exclude:
- 'spec/models/spree/payment_spec.rb'
- 'spec/models/spree/zone_spec.rb'
# Offense count: 3
# Cop supports --auto-correct.
# Configuration parameters: AllowForAlignment, AllowBeforeTrailingComments, ForceEqualSignAlignment.
Layout/ExtraSpacing:
Exclude:
- 'spec/models/spree/payment_spec.rb'
- 'spec/requests/api/orders_spec.rb'
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: special_inside_parentheses, consistent, align_brackets
Layout/FirstArrayElementIndentation:
Exclude:
- 'spec/views/spree/admin/payment_methods/index.html.haml_spec.rb'
# Offense count: 3
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: special_inside_parentheses, consistent, align_braces
Layout/FirstHashElementIndentation:
Exclude:
- 'spec/models/spree/payment_spec.rb'
- 'spec/swagger_helper.rb'
# Offense count: 8
# Cop supports --auto-correct.
# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
# SupportedHashRocketStyles: key, separator, table
# SupportedColonStyles: key, separator, table
# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
Layout/HashAlignment:
Exclude:
- 'spec/lib/open_food_network/packing_report_spec.rb'
- 'spec/models/spree/payment_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: normal, indented_internal_methods
Layout/IndentationConsistency:
Exclude:
- 'spec/models/spree/order/checkout_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: symmetrical, new_line, same_line
Layout/MultilineHashBraceLayout:
Exclude:
- 'spec/models/spree/payment_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator.
# SupportedStylesForExponentOperator: space, no_space
Layout/SpaceAroundOperators:
Exclude:
- 'spec/models/spree/payment_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
# SupportedStyles: space, no_space
# SupportedStylesForEmptyBraces: space, no_space
Layout/SpaceInsideBlockBraces:
Exclude:
- 'spec/models/spree/payment_spec.rb'
# Offense count: 11
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces.
# SupportedStyles: space, no_space, compact
# SupportedStylesForEmptyBraces: space, no_space
Layout/SpaceInsideHashLiteralBraces:
Exclude:
- 'spec/models/spree/payment_spec.rb'
- 'spec/requests/api/orders_spec.rb'
- 'spec/services/checkout/form_data_adapter_spec.rb'
- 'spec/services/user_locale_setter_spec.rb'
# Offense count: 3
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: final_newline, final_blank_line
Layout/TrailingEmptyLines:
Exclude:
- 'spec/factories.rb'
- 'spec/factories/address_factory.rb'
- 'spec/support/request/stripe_helper.rb'
# Offense count: 6
# Cop supports --auto-correct.
# Configuration parameters: AllowInHeredoc.
Layout/TrailingWhitespace:
Exclude:
- 'spec/features/consumer/shopping/shopping_spec.rb'
- 'spec/lib/open_food_network/orders_and_fulfillments_report/customer_totals_report_spec.rb'
- 'spec/requests/api/orders_spec.rb'
# Offense count: 2
Lint/DuplicateMethods:
Exclude:
@@ -152,20 +19,6 @@ Lint/IneffectiveAccessModifier:
- 'app/services/mail_configuration.rb'
- 'lib/open_food_network/feature_toggle.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
Lint/UnusedBlockArgument:
Exclude:
- 'spec/factories/stock_location_factory.rb'
# Offense count: 4
# Cop supports --auto-correct.
# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods.
Lint/UnusedMethodArgument:
Exclude:
- 'spec/views/spree/admin/payment_methods/index.html.haml_spec.rb'
# Offense count: 3
# Configuration parameters: ContextCreatingMethods, MethodCreatingMethods.
Lint/UselessAccessModifier:
@@ -174,19 +27,20 @@ Lint/UselessAccessModifier:
- 'app/services/mail_configuration.rb'
- 'lib/open_food_network/feature_toggle.rb'
# Offense count: 1
# Offense count: 2
Lint/UselessAssignment:
Exclude:
- 'spec/**/*'
- 'lib/spree/core/controller_helpers/common.rb'
- 'app/models/spree/taxon.rb'
- 'lib/spree/core/controller_helpers/common.rb'
# Offense count: 9
# Offense count: 10
Naming/AccessorMethodName:
Exclude:
- 'app/controllers/spree/admin/taxonomies_controller.rb'
- 'app/models/spree/adjustment.rb'
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/order.rb'
- 'app/services/checkout/post_checkout_actions.rb'
- 'lib/spree/core/controller_helpers/common.rb'
- 'spec/support/request/shop_workflow.rb'
- 'spec/support/request/web_helper.rb'
@@ -206,7 +60,7 @@ Naming/MemoizedInstanceVariableName:
- 'app/mailers/producer_mailer.rb'
- 'lib/open_food_network/address_finder.rb'
# Offense count: 20
# Offense count: 24
# Configuration parameters: NamePrefix, ForbiddenPrefixes, AllowedMethods, MethodDefinitionMacros.
# NamePrefix: is_, has_, have_
# ForbiddenPrefixes: is_, has_, have_
@@ -220,10 +74,11 @@ Naming/PredicateName:
- 'app/models/order_cycle.rb'
- 'app/models/spree/adjustment.rb'
- 'app/models/spree/credit_card.rb'
- 'app/models/spree/line_item_decorator.rb'
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/line_item.rb'
- 'app/models/spree/order.rb'
- 'app/models/spree/payment_method.rb'
- 'app/models/spree/preferences/file_configuration.rb'
- 'app/models/spree/preferences/preferable.rb'
- 'app/models/spree/shipping_method.rb'
- 'app/models/spree/user.rb'
- 'lib/open_food_network/customers_report.rb'
@@ -262,21 +117,14 @@ Rails/Date:
- 'app/models/order_cycle.rb'
- 'app/models/spree/credit_card.rb'
# Offense count: 1
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: EnforceForPrefixed.
Rails/Delegate:
Exclude:
- 'app/models/spree/line_item.rb'
- 'engines/order_management/app/services/order_management/reports/bulk_coop/renderers/html_renderer.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: Whitelist.
# Whitelist: find_by_sql
Rails/DynamicFindBy:
Exclude:
- 'spec/factories/state_factory.rb'
# Offense count: 16
# Configuration parameters: EnforcedStyle.
# SupportedStyles: slashes, arguments
@@ -307,13 +155,12 @@ Rails/FindBy:
- 'app/models/product_import/spreadsheet_data.rb'
- 'app/models/spree/user.rb'
# Offense count: 2
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/FindEach:
Exclude:
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/shipment.rb'
# Offense count: 9
@@ -324,13 +171,13 @@ Rails/HasAndBelongsToMany:
- 'app/models/concerns/payment_method_distributors.rb'
- 'app/models/enterprise.rb'
- 'app/models/enterprise_group.rb'
- 'app/models/spree/line_item_decorator.rb'
- 'app/models/spree/line_item.rb'
- 'app/models/spree/role.rb'
- 'app/models/spree/shipping_method.rb'
- 'app/models/spree/user.rb'
- 'app/models/spree/zone.rb'
# Offense count: 35
# Offense count: 38
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/HasManyOrHasOneDependent:
@@ -341,9 +188,10 @@ Rails/HasManyOrHasOneDependent:
- 'app/models/spree/address.rb'
- 'app/models/spree/adjustment.rb'
- 'app/models/spree/credit_card.rb'
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/order.rb'
- 'app/models/spree/payment_method.rb'
- 'app/models/spree/property.rb'
- 'app/models/spree/return_authorization.rb'
- 'app/models/spree/shipment.rb'
- 'app/models/spree/shipping_category.rb'
- 'app/models/spree/shipping_method.rb'
@@ -392,7 +240,7 @@ Rails/LexicallyScopedActionFilter:
- 'app/controllers/spree/users_controller.rb'
- 'app/controllers/user_passwords_controller.rb'
# Offense count: 13
# Offense count: 14
Rails/OutputSafety:
Exclude:
- 'app/controllers/spree/admin/reports_controller.rb'
@@ -415,15 +263,16 @@ Rails/RakeEnvironment:
- 'lib/capistrano/tasks/**/*.rake'
- 'lib/tasks/specs.rake'
# Offense count: 9
# Offense count: 11
Rails/ReflectionClassName:
Exclude:
- 'app/models/customer.rb'
- 'app/models/distributor_shipping_method.rb'
- 'app/models/enterprise_role.rb'
- 'app/models/spree/order.rb'
- 'app/models/subscription.rb'
# Offense count: 243
# Offense count: 247
# Configuration parameters: Blacklist, Whitelist.
# Blacklist: decrement!, decrement_counter, increment!, increment_counter, toggle!, touch, update_all, update_attribute, update_column, update_columns, update_counters
Rails/SkipsModelValidations:
@@ -442,7 +291,8 @@ Rails/SkipsModelValidations:
- 'app/models/spree/address.rb'
- 'app/models/spree/adjustment.rb'
- 'app/models/spree/credit_card.rb'
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/inventory_unit.rb'
- 'app/models/spree/order.rb'
- 'app/models/spree/payment.rb'
- 'app/models/spree/shipment.rb'
- 'app/models/spree/shipping_method.rb'
@@ -480,7 +330,6 @@ Rails/SkipsModelValidations:
- 'spec/features/admin/order_cycles/complex_editing_spec.rb'
- 'spec/features/admin/order_cycles/simple_spec.rb'
- 'spec/features/admin/order_spec.rb'
- 'spec/features/admin/payments_spec.rb'
- 'spec/features/admin/reports_spec.rb'
- 'spec/features/consumer/caching/shops_caching_spec.rb'
- 'spec/features/consumer/shopping/checkout_spec.rb'
@@ -501,6 +350,7 @@ Rails/SkipsModelValidations:
- 'spec/models/spree/adjustment_spec.rb'
- 'spec/models/spree/asset_spec.rb'
- 'spec/models/spree/line_item_spec.rb'
- 'spec/models/spree/order_inventory_spec.rb'
- 'spec/models/spree/order_spec.rb'
- 'spec/models/spree/tax_category_spec.rb'
- 'spec/models/spree/variant_spec.rb'
@@ -533,7 +383,7 @@ Rails/UniqueValidationWithoutIndex:
# Environments: development, test, production
Rails/UnknownEnv:
Exclude:
- 'app/models/spree/app_configuration_decorator.rb'
- 'app/models/spree/app_configuration.rb'
- 'lib/spree/core/controller_helpers/ssl.rb'
# Offense count: 2
@@ -542,7 +392,7 @@ Style/CaseEquality:
- 'app/helpers/angular_form_helper.rb'
- 'spec/models/spree/payment_spec.rb'
# Offense count: 64
# Offense count: 29
# Cop supports --auto-correct.
# Configuration parameters: AutoCorrect, EnforcedStyle.
# SupportedStyles: nested, compact
@@ -556,6 +406,7 @@ Style/ClassAndModuleChildren:
- 'app/models/tag_rule/filter_order_cycles.rb'
- 'app/models/tag_rule/filter_payment_methods.rb'
- 'app/models/tag_rule/filter_shipping_methods.rb'
- 'app/serializers/api/address_serializer.rb'
- 'app/serializers/api/country_serializer.rb'
- 'app/serializers/api/currency_config_serializer.rb'
- 'app/serializers/api/current_order_serializer.rb'
@@ -589,7 +440,7 @@ Style/FormatStringToken:
- 'lib/open_food_network/sales_tax_report.rb'
- 'spec/features/admin/bulk_order_management_spec.rb'
# Offense count: 818
# Offense count: 765
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: always, always_true, never
@@ -781,13 +632,10 @@ Style/FrozenStringLiteralComment:
- 'app/models/product_import/unit_converter.rb'
- 'app/models/proxy_order.rb'
- 'app/models/schedule.rb'
- 'app/models/spree/app_configuration_decorator.rb'
- 'app/models/spree/gateway/migs.rb'
- 'app/models/spree/gateway/pin.rb'
- 'app/models/spree/gateway/stripe_connect.rb'
- 'app/models/spree/line_item_decorator.rb'
- 'app/models/spree/option_type_decorator.rb'
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/preferences/file_configuration.rb'
- 'app/models/spree/price_decorator.rb'
- 'app/models/spree/product_decorator.rb'
@@ -976,7 +824,6 @@ Style/FrozenStringLiteralComment:
- 'lib/spree/authentication_helpers.rb'
- 'lib/spree/localized_number.rb'
- 'lib/spree/money_decorator.rb'
- 'lib/spree/product_filters.rb'
- 'lib/stripe/account_connector.rb'
- 'lib/stripe/profile_storer.rb'
- 'lib/stripe/webhook_handler.rb'
@@ -1044,6 +891,7 @@ Style/FrozenStringLiteralComment:
- 'spec/controllers/shops_controller_spec.rb'
- 'spec/controllers/spree/admin/adjustments_controller_spec.rb'
- 'spec/controllers/spree/admin/base_controller_spec.rb'
- 'spec/controllers/spree/admin/general_settings_controller_spec.rb'
- 'spec/controllers/spree/admin/invoices_controller_spec.rb'
- 'spec/controllers/spree/admin/mail_methods_controller_spec.rb'
- 'spec/controllers/spree/admin/orders/customer_details_controller_spec.rb'
@@ -1197,7 +1045,6 @@ Style/FrozenStringLiteralComment:
- 'spec/lib/open_food_network/users_and_enterprises_report_spec.rb'
- 'spec/lib/open_food_network/xero_invoices_report_spec.rb'
- 'spec/lib/spree/localized_number_spec.rb'
- 'spec/lib/spree/product_filters_spec.rb'
- 'spec/lib/stripe/account_connector_spec.rb'
- 'spec/lib/stripe/webhook_handler_spec.rb'
- 'spec/lib/tasks/enterprises_rake_spec.rb'
@@ -1241,7 +1088,6 @@ Style/FrozenStringLiteralComment:
- 'spec/models/spree/classification_spec.rb'
- 'spec/models/spree/credit_card_spec.rb'
- 'spec/models/spree/gateway/stripe_connect_spec.rb'
- 'spec/models/spree/image_spec.rb'
- 'spec/models/spree/line_item_spec.rb'
- 'spec/models/spree/order/checkout_spec.rb'
- 'spec/models/spree/order_spec.rb'
@@ -1348,7 +1194,6 @@ Style/FrozenStringLiteralComment:
- 'spec/support/products_helper.rb'
- 'spec/support/request/admin_helper.rb'
- 'spec/support/request/authentication_helper.rb'
- 'spec/support/request/checkout_helper.rb'
- 'spec/support/request/cookie_helper.rb'
- 'spec/support/request/distribution_helper.rb'
- 'spec/support/request/menu_helper.rb'
@@ -1367,7 +1212,7 @@ Style/FrozenStringLiteralComment:
- 'spec/views/spree/admin/payment_methods/index.html.haml_spec.rb'
- 'spec/views/spree/admin/shared/_order_links.html.haml_spec.rb'
# Offense count: 48
# Offense count: 44
# Configuration parameters: MinBodyLength.
Style/GuardClause:
Exclude:
@@ -1383,7 +1228,7 @@ Style/GuardClause:
- 'app/models/enterprise.rb'
- 'app/models/enterprise_group.rb'
- 'app/models/producer_property.rb'
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/preferences/preferable_class_methods.rb'
- 'app/models/spree/price_decorator.rb'
- 'app/models/spree/product_decorator.rb'
- 'app/services/order_syncer.rb'
@@ -1392,25 +1237,15 @@ Style/GuardClause:
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/open_food_network/rack_request_blocker.rb'
- 'spec/support/delayed_job_helper.rb'
- 'spec/support/request/checkout_helper.rb'
- 'spec/support/request/distribution_helper.rb'
- 'spec/support/request/shop_workflow.rb'
# Offense count: 66
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
Style/HashSyntax:
Exclude:
- 'spec/factories/stock_location_factory.rb'
- 'spec/models/spree/credit_card_spec.rb'
- 'spec/models/spree/payment_spec.rb'
# Offense count: 2
# Offense count: 3
Style/MissingRespondToMissing:
Exclude:
- 'app/helpers/application_helper.rb'
- 'app/models/spree/gateway.rb'
- 'app/models/spree/preferences/configuration.rb'
# Offense count: 2
Style/MixinUsage:
@@ -1418,7 +1253,7 @@ Style/MixinUsage:
- 'lib/open_food_network/orders_and_fulfillments_report.rb'
- 'spec/lib/open_food_network/packing_report_spec.rb'
# Offense count: 36
# Offense count: 43
# Cop supports --auto-correct.
# Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
# SupportedStyles: predicate, comparison
@@ -1432,8 +1267,11 @@ Style/NumericPredicate:
- 'app/models/product_import/product_importer.rb'
- 'app/models/product_import/spreadsheet_entry.rb'
- 'app/models/spree/gateway/stripe_connect.rb'
- 'app/models/spree/line_item_decorator.rb'
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/line_item.rb'
- 'app/models/spree/order.rb'
- 'app/models/spree/order_contents.rb'
- 'app/models/spree/order_inventory.rb'
- 'app/models/spree/preferences/preferable.rb'
- 'app/models/spree/user.rb'
- 'app/models/variant_override.rb'
- 'app/services/cart_service.rb'
@@ -1446,37 +1284,7 @@ Style/NumericPredicate:
- 'lib/spree/money_decorator.rb'
- 'lib/tasks/sample_data.rake'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: compact, exploded
Style/RaiseArgs:
Exclude:
- 'spec/controllers/checkout_controller_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
Style/RandomWithOffset:
Exclude:
- 'spec/factories.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, AllowInnerSlashes.
# SupportedStyles: slashes, percent_r, mixed
Style/RegexpLiteral:
Exclude:
- 'lib/spree/core/controller_helpers/auth.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: implicit, explicit
Style/RescueStandardError:
Exclude:
- 'lib/spree/core/delegate_belongs_to.rb'
# Offense count: 231
# Offense count: 241
Style/Send:
Exclude:
- 'spec/controllers/admin/subscriptions_controller_spec.rb'
@@ -1501,8 +1309,10 @@ Style/Send:
- 'spec/models/enterprise_spec.rb'
- 'spec/models/exchange_spec.rb'
- 'spec/models/spree/gateway/stripe_connect_spec.rb'
- 'spec/models/spree/order_inventory_spec.rb'
- 'spec/models/spree/order_spec.rb'
- 'spec/models/spree/payment_spec.rb'
- 'spec/models/spree/return_authorization_spec.rb'
- 'spec/models/spree/tax_rate_spec.rb'
- 'spec/models/tag_rule/discount_order_spec.rb'
- 'spec/models/tag_rule/filter_order_cycles_spec.rb'
@@ -1520,3 +1330,11 @@ Style/Send:
Style/StructInheritance:
Exclude:
- 'lib/open_food_network/enterprise_fee_applicator.rb'
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: IgnoredMethods.
# IgnoredMethods: respond_to, define_method
Style/SymbolProc:
Exclude:
- 'app/models/spree/preferences/preferable.rb'

View File

@@ -1,3 +1,19 @@
scss_files: 'app/assets/stylesheets/**/*.css.scss'
exclude: 'app/assets/stylesheets/shared/**'
linters:
ImportantRule:
enabled: false
VendorPrefix:
enabled: false
LeadingZero:
enabled: false
PropertySortOrder:
enabled: false
StringQuotes:
enabled: false
DeclarationOrder:
enabled: false
NestingDepth:
enabled: false

View File

@@ -1,4 +1,10 @@
FROM ubuntu:18.04
FROM ubuntu:20.04
ENV TZ Europe/London
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN echo "deb http://security.ubuntu.com/ubuntu bionic-security main" >> /etc/apt/sources.list
# Install all the requirements
RUN apt-get update && apt-get install -y curl git build-essential software-properties-common wget zlib1g-dev libssl1.0-dev libreadline-dev libyaml-dev libffi-dev libxml2-dev libxslt1-dev wait-for-it imagemagick unzip

22
Gemfile
View File

@@ -18,18 +18,11 @@ gem 'web', path: './engines/web'
gem 'activerecord-postgresql-adapter'
gem 'pg', '~> 0.21.0'
# OFN-maintained and patched version of Spree v2.0.4. See
# https://github.com/openfoodfoundation/openfoodnetwork/wiki/Tech-Doc:-OFN's-Spree-fork%F0%9F%8D%B4
# for details.
gem 'spree_core', github: 'openfoodfoundation/spree', branch: '2-1-0-stable'
### Dependencies brought from spree core
gem 'acts_as_list', '= 0.2.0'
gem 'awesome_nested_set', '~> 3.0.0.rc.1'
gem 'acts_as_list', '= 0.3.0'
gem 'awesome_nested_set', '~> 3.2.1'
gem 'cancan', '~> 1.6.10'
gem 'ffaker', '~> 1.16'
gem 'highline', '= 1.6.18' # Necessary for the install generator
gem 'httparty', '~> 0.18' # Used to check alerts in spree_core, this is not used in OFN.
gem 'highline', '2.0.3' # Necessary for the install generator
gem 'json', '>= 1.7.7'
gem 'money', '5.1.1'
gem 'paranoia', '~> 2.0'
@@ -37,7 +30,7 @@ gem 'ransack', '~> 1.8.10'
gem 'state_machine', '1.2.0'
gem 'stringex', '~> 1.5.1'
gem 'spree_i18n', github: 'spree/spree_i18n', branch: '1-3-stable'
gem 'spree_i18n', github: 'openfoodfoundation/spree_i18n', branch: '1-3-stable'
# Our branch contains the following changes:
# - Pass customer email and phone number to PayPal (merged to upstream master)
@@ -61,20 +54,17 @@ gem 'daemons'
gem 'delayed_job_active_record'
gem 'delayed_job_web'
# Spree's default pagination gem (locked to the current version used by Spree)
# We use it's methods in OFN code as well, so this is a direct dependency
gem 'kaminari', '~> 0.14.1'
gem 'kaminari', '~> 0.17.0'
gem 'andand'
gem 'angularjs-rails', '1.5.5'
gem 'aws-sdk', '1.11.1' # temporarily locked down due to https://github.com/aws/aws-sdk-ruby/issues/273
gem 'aws-sdk', '1.67.0'
gem 'bugsnag'
gem 'db2fog'
gem 'haml'
gem 'redcarpet'
gem 'sass'
gem 'sass-rails'
gem 'truncate_html', '0.9.2'
gem 'unicorn'
gem 'actionpack-action_caching'

View File

@@ -6,12 +6,11 @@ GIT
GIT
remote: https://github.com/openfoodfoundation/better_spree_paypal_express.git
revision: 1736e3268239a841576d2719a1f276cf9b74c5c5
revision: 1a477e9f7763297944cc99b6f4dd3d962aa963e9
branch: 2-1-0-stable
specs:
spree_paypal_express (2.0.3)
paypal-sdk-merchant (= 1.106.1)
spree_core (~> 2.1.0)
GIT
remote: https://github.com/openfoodfoundation/ofn-qz.git
@@ -21,39 +20,13 @@ GIT
ofn-qz (0.1.0)
GIT
remote: https://github.com/openfoodfoundation/spree.git
revision: cbb24a6ed701166ffaf2ab60a402154100d74766
branch: 2-1-0-stable
specs:
spree_core (2.1.0)
activemerchant (= 1.78.0)
acts_as_list (= 0.2.0)
awesome_nested_set (~> 3.0.0.rc.1)
aws-sdk (= 1.11.1)
cancan (~> 1.6.10)
ffaker (~> 1.16)
highline (= 1.6.18)
httparty (~> 0.11)
json (>= 1.7.7)
kaminari (~> 0.14.1)
money (= 5.1.1)
paperclip (~> 3.4.1)
paranoia (~> 2.0)
rails (~> 4.0)
ransack (~> 1.0)
state_machine (= 1.2.0)
stringex (~> 1.5.1)
truncate_html (= 0.9.2)
GIT
remote: https://github.com/spree/spree_i18n.git
revision: 752eb67204e9c5a4e22b62591a8fd55fe2285e43
remote: https://github.com/openfoodfoundation/spree_i18n.git
revision: 12f18312232f0ce70270d47859d2951d12f7791c
branch: 1-3-stable
specs:
spree_i18n (1.0.0)
i18n (~> 0.5)
rails-i18n
spree_core (>= 1.1)
PATH
remote: engines/catalog
@@ -127,7 +100,7 @@ GEM
tzinfo (~> 0.3.37)
acts-as-taggable-on (4.0.0)
activerecord (>= 4.0)
acts_as_list (0.2.0)
acts_as_list (0.3.0)
activerecord (>= 3.0)
addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
@@ -141,13 +114,14 @@ GEM
arel (4.0.2)
ast (2.4.0)
atomic (1.1.101)
awesome_nested_set (3.0.3)
activerecord (>= 4.0.0, < 5)
awesome_nested_set (3.2.1)
activerecord (>= 4.0.0, < 7.0)
awesome_print (1.8.0)
aws-sdk (1.11.1)
aws-sdk (1.67.0)
aws-sdk-v1 (= 1.67.0)
aws-sdk-v1 (1.67.0)
json (~> 1.4)
nokogiri (>= 1.4.4)
uuidtools (~> 2.1)
nokogiri (~> 1)
bcrypt (3.1.13)
bugsnag (6.18.0)
concurrent-ruby (~> 1.0)
@@ -415,11 +389,8 @@ GEM
temple (>= 0.8.0)
tilt
hashdiff (1.0.1)
highline (1.6.18)
highline (2.0.3)
hike (1.2.3)
httparty (0.18.1)
mime-types (~> 3.0)
multi_xml (>= 0.5.2)
i18n (0.6.11)
i18n-js (3.8.0)
i18n (>= 0.6.6)
@@ -440,7 +411,7 @@ GEM
multi_json (~> 1.0)
rspec (>= 2.0, < 4.0)
jwt (2.2.2)
kaminari (0.14.1)
kaminari (0.17.0)
actionpack (>= 3.0.0)
activesupport (>= 3.0.0)
kgio (2.11.3)
@@ -664,7 +635,6 @@ GEM
thread_safe (0.3.6)
tilt (1.4.1)
timecop (0.9.2)
truncate_html (0.9.2)
tzinfo (0.3.57)
uglifier (4.2.0)
execjs (>= 0.3.0, < 3)
@@ -678,14 +648,13 @@ GEM
unicorn-worker-killer (0.4.4)
get_process_mem (~> 0)
unicorn (>= 4, < 6)
uuidtools (2.1.5)
warden (1.2.7)
rack (>= 1.0)
webdrivers (4.2.0)
nokogiri (~> 1.6)
rubyzip (>= 1.3.0)
selenium-webdriver (>= 3.0, < 4.0)
webmock (3.9.3)
webmock (3.9.5)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
@@ -710,15 +679,15 @@ DEPENDENCIES
activerecord-postgresql-adapter
activerecord-session_store
acts-as-taggable-on (~> 4.0)
acts_as_list (= 0.2.0)
acts_as_list (= 0.3.0)
andand
angular-rails-templates (~> 0.3.0)
angularjs-file-upload-rails (~> 2.4.1)
angularjs-rails (= 1.5.5)
atomic
awesome_nested_set (~> 3.0.0.rc.1)
awesome_nested_set (~> 3.2.1)
awesome_print
aws-sdk (= 1.11.1)
aws-sdk (= 1.67.0)
bugsnag
byebug (~> 11.0.0)
cancan (~> 1.6.10)
@@ -751,8 +720,7 @@ DEPENDENCIES
geocoder
gmaps4rails
haml
highline (= 1.6.18)
httparty (~> 0.18)
highline (= 2.0.3)
i18n (~> 0.6.11)
i18n-js (~> 3.8.0)
immigrant
@@ -762,7 +730,7 @@ DEPENDENCIES
json (>= 1.7.7)
json_spec (~> 1.1.4)
jwt (~> 2.2)
kaminari (~> 0.14.1)
kaminari (~> 0.17.0)
knapsack
letter_opener (>= 1.4.1)
mini_racer (= 0.2.15)
@@ -799,7 +767,6 @@ DEPENDENCIES
selenium-webdriver
shoulda-matchers
simplecov
spree_core!
spree_i18n!
spree_paypal_express!
spring
@@ -810,7 +777,6 @@ DEPENDENCIES
test-prof
test-unit (~> 3.3)
timecop
truncate_html (= 0.9.2)
uglifier (>= 1.0.3)
unicorn
unicorn-rails

View File

@@ -16,7 +16,7 @@ We're part of global movement - get involved!
## Contributing
If you are interested in contributing to the OFN in any capacity, please introduce yourself [on Slack][slack-invite], and have a look through our [Contributor Guide][contributor-guide].
If you are interested in contributing to the OFN in any capacity, please introduce yourself [on Slack][slack-invite], and have a look through the [OFN Handbook][ofn-handbook].
Our [GETTING_STARTED](GETTING_STARTED.md) and [CONTRIBUTING](CONTRIBUTING.md) guides are the best place to start for developers looking to set up a development environment and make contributions to the codebase.
@@ -33,7 +33,9 @@ We also have a [Super Admin Guide][super-admin-guide] to help with configuration
## Testing
We use [BrowserStack](https://www.browserstack.com/) as a manual testing tool. BrowserStack provides open source projects with unlimited and free of charge accounts. A big thanks to them!
If you'd like to help out with testing, please introduce yourself on the #testing channel on [Slack][slack-invite] and download the [ZenHub browser extension][zenhub] to view the development pipeline.
We use [BrowserStack](https://www.browserstack.com/) as a manual testing tool. BrowserStack provides open source projects with unlimited and free of charge accounts. A big thanks to them!
## Licence
@@ -41,7 +43,8 @@ Copyright (c) 2012 - 2020 Open Food Foundation, released under the AGPL licence.
[survey]: https://docs.google.com/a/eaterprises.com.au/forms/d/1zxR5vSiU9CigJ9cEaC8-eJLgYid8CR8er7PPH9Mc-30/edit#
[slack-invite]: https://join.slack.com/t/openfoodnetwork/shared_invite/zt-9sjkjdlu-r02kUMP1zbrTgUhZhYPF~A
[contributor-guide]: https://ofn-user-guide.gitbook.io/ofn-contributor-guide/who-are-we
[ofn-handbook]: https://ofn-user-guide.gitbook.io/ofn-handbook/
[ofn-install]: https://github.com/openfoodfoundation/ofn-install
[super-admin-guide]: https://ofn-user-guide.gitbook.io/ofn-super-admin-guide
[welcome-dev]: https://github.com/openfoodfoundation/openfoodnetwork/projects/27
[zenhub]: https://www.zenhub.com/extension

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -34,7 +34,7 @@
//= require css_browser_selector_dev
//= require responsive-tables
//= require admin/spree_paypal_express
//= require handlebars
//= require admin/spree/handlebar_extensions
// OFN specific
//= require_tree ../templates/admin

View File

@@ -1,5 +1,4 @@
//= require_self
//= require admin/handlebar_extensions
//= require admin/spree/orders/variant_autocomplete
/**

View File

@@ -0,0 +1,9 @@
//= require handlebars
Handlebars.registerHelper("t", function(key) {
if (Spree.translations[key]) {
return Spree.translations[key]
} else {
console.error("No translation found for " + key + ". Does it exist within spree/admin/shared/_translations.html.erb?")
}
});

View File

@@ -121,3 +121,10 @@ form#image_upload {
}
}
form.edit_image {
.field {
img {
max-width: 150px;
}
}
}

View File

@@ -5,7 +5,7 @@ $large-menu-height: 4.6875rem;
$medium-menu-height: 3rem;
$gutter-width: 0.9375rem;
nav.top-bar ul.left li.powered-by {
.top-bar .powered-by {
display: none;
}

View File

@@ -44,6 +44,13 @@ nav.top-bar {
.top-bar-section {
border-bottom: 1px solid $light-grey-transparency;
display: flex;
justify-content: space-between;
.nav-main-menu,
.nav-icons-menu {
flex-shrink: 0;
}
a.icon {
&:hover {
@@ -99,21 +106,14 @@ nav.top-bar {
}
}
ul.center {
display: inline-block;
// By default, we center between the left and right uls, but we want to be centered
// relative to the whole page. The difference in width between the other uls is 74px,
// so we offset by that amount here.
margin-left: -74px;
}
ul.dropdown {
border: 1px solid $smoke;
border-top: none;
left: auto;
right: 0;
}
ul.right {
.nav-icons-menu {
> li {
border-left: 1px solid #ddd;
padding: 0 14px;
@@ -244,9 +244,7 @@ nav.top-bar {
.top-bar .ofn-logo img {
height: auto;
width: auto;
max-height: 44px;
max-width: 250px;
}
.left-off-canvas-menu {
@@ -289,10 +287,6 @@ nav.top-bar {
.has-dropdown > a {
padding: 0 ($topbar-height / 8) !important;
}
ul.center {
margin-left: -24px;
}
}
}

View File

@@ -27,7 +27,7 @@ module Admin
end
def bulk_update
@enterprise_fee_set = EnterpriseFeeSet.new(params[:enterprise_fee_set])
@enterprise_fee_set = EnterpriseFeeSet.new(enterprise_fee_bulk_params)
if @enterprise_fee_set.save
redirect_to redirect_path, notice: I18n.t(:enterprise_fees_update_notice)
@@ -78,5 +78,15 @@ module Admin
main_app.admin_enterprise_fees_path
end
def enterprise_fee_bulk_params
params.require(:enterprise_fee_set).permit(
collection_attributes: [
:id, :enterprise_id, :fee_type, :name, :tax_category_id,
:inherits_tax_category, :calculator_type,
{ calculator_attributes: PermittedAttributes::Calculator.attributes }
]
)
end
end
end

View File

@@ -223,7 +223,7 @@ module Admin
end
def order_cycle_set
@order_cycle_set ||= OrderCycleSet.new(@order_cycles, params[:order_cycle_set])
@order_cycle_set ||= OrderCycleSet.new(@order_cycles, order_cycle_bulk_params)
end
def require_order_cycle_set_params
@@ -240,5 +240,11 @@ module Admin
def order_cycle_params
PermittedAttributes::OrderCycle.new(params).call
end
def order_cycle_bulk_params
params.require(:order_cycle_set).permit(
collection_attributes: [:id] + PermittedAttributes::OrderCycle.basic_attributes
)
end
end
end

View File

@@ -4,6 +4,7 @@ require "spree/core/controller_helpers/ssl"
module Api
class BaseController < ActionController::Metal
include ActionController::StrongParameters
include Spree::Api::ControllerSetup
include Spree::Core::ControllerHelpers::SSL
include ::ActionController::Head

View File

@@ -11,11 +11,15 @@ module Api
@customer = Customer.find(params[:id])
authorize! :update, @customer
if @customer.update(params[:customer])
if @customer.update(customer_params)
render json: @customer, serializer: CustomerSerializer, status: :ok
else
invalid_resource!(@customer)
end
end
def customer_params
params.require(:customer).permit(:code, :email, :enterprise_id, :allow_charges)
end
end
end

View File

@@ -12,7 +12,7 @@ module Api
# params[:user_ids] breaks the enterprise creation
# We remove them from params and save them after creating the enterprise
user_ids = params[:enterprise].delete(:user_ids)
@enterprise = Enterprise.new(params[:enterprise])
@enterprise = Enterprise.new(enterprise_params)
if @enterprise.save
@enterprise.user_ids = user_ids
render text: @enterprise.id, status: :created
@@ -25,7 +25,7 @@ module Api
@enterprise = Enterprise.find_by(permalink: params[:id]) || Enterprise.find(params[:id])
authorize! :update, @enterprise
if @enterprise.update(params[:enterprise])
if @enterprise.update(enterprise_params)
render text: @enterprise.id, status: :ok
else
invalid_resource!(@enterprise)
@@ -69,5 +69,9 @@ module Api
def override_visible
params[:enterprise][:visible] = false
end
def enterprise_params
PermittedAttributes::Enterprise.new(params).call
end
end
end

View File

@@ -1,4 +1,5 @@
require 'open_food_network/permissions'
require 'spree/core/product_duplicator'
module Api
class ProductsController < Api::BaseController
@@ -16,7 +17,7 @@ module Api
def create
authorize! :create, Spree::Product
params[:product][:available_on] ||= Time.zone.now
@product = Spree::Product.new(params[:product])
@product = Spree::Product.new(product_params)
begin
if @product.save
render json: @product, serializer: Api::Admin::ProductSerializer, status: :created
@@ -32,7 +33,7 @@ module Api
def update
authorize! :update, Spree::Product
@product = find_product(params[:id])
if @product.update(params[:product])
if @product.update(product_params)
render json: @product, serializer: Api::Admin::ProductSerializer, status: :ok
else
invalid_resource!(@product)
@@ -155,5 +156,9 @@ module Api
per_page: (params[:per_page] || DEFAULT_PER_PAGE).to_i
}
end
def product_params
params.require(:product).permit PermittedAttributes::Product.attributes
end
end
end

View File

@@ -30,7 +30,7 @@ module Api
@shipment.adjustment.open
end
@shipment.update(params[:shipment])
@shipment.update(shipment_params[:shipment])
if unlock == 'yes'
@shipment.adjustment.close
@@ -88,7 +88,7 @@ module Api
def find_and_update_shipment
@shipment = @order.shipments.find_by!(number: params[:id])
@shipment.update(params[:shipment])
@shipment.update(shipment_params[:shipment]) if shipment_params[:shipment].present?
@shipment.reload
end
@@ -101,5 +101,12 @@ module Api
def get_or_create_shipment(stock_location_id)
@order.shipment || @order.shipments.create(stock_location_id: stock_location_id)
end
def shipment_params
params.permit(
[:id, :order_id, :variant_id, :quantity,
{ shipment: [:tracking, :selected_shipping_rate_id] }]
)
end
end
end

View File

@@ -22,7 +22,7 @@ module Api
def create
authorize! :create, Spree::Taxon
@taxon = Spree::Taxon.new(params[:taxon])
@taxon = Spree::Taxon.new(taxon_params)
@taxon.taxonomy_id = params[:taxonomy_id]
taxonomy = Spree::Taxonomy.find_by(id: params[:taxonomy_id])
@@ -42,7 +42,7 @@ module Api
def update
authorize! :update, Spree::Taxon
if taxon.update(params[:taxon])
if taxon.update(taxon_params)
render json: taxon, serializer: Api::TaxonSerializer, status: :ok
else
invalid_resource!(taxon)
@@ -66,5 +66,11 @@ module Api
def taxon
@taxon ||= taxonomy.taxons.find(params[:id])
end
def taxon_params
return if params[:taxon].blank?
params.require(:taxon).permit([:name, :parent_id])
end
end
end

View File

@@ -17,7 +17,7 @@ module Api
def create
authorize! :create, Spree::Variant
@variant = scope.new(params[:variant])
@variant = scope.new(variant_params)
if @variant.save
render json: @variant, serializer: Api::VariantSerializer, status: :created
else
@@ -28,7 +28,7 @@ module Api
def update
authorize! :update, Spree::Variant
@variant = scope.find(params[:id])
if @variant.update(params[:variant])
if @variant.update(variant_params)
render json: @variant, serializer: Api::VariantSerializer, status: :ok
else
invalid_resource!(@product)
@@ -69,5 +69,9 @@ module Api
end
variants
end
def variant_params
params.require(:variant).permit(PermittedAttributes::Variant.attributes)
end
end
end

View File

@@ -1,11 +1,11 @@
# frozen_string_literal: true
require 'open_food_network/address_finder'
require 'spree/core/gateway_error'
class CheckoutController < Spree::StoreController
layout 'darkswarm'
include OrderStockCheck
include CheckoutHelper
include OrderCyclesHelper
include EnterprisesHelper
@@ -25,7 +25,7 @@ class CheckoutController < Spree::StoreController
before_action :ensure_order_not_completed
before_action :ensure_checkout_allowed
before_action :ensure_sufficient_stock_lines
before_action :handle_insufficient_stock
before_action :associate_user
before_action :check_authorization
@@ -78,13 +78,6 @@ class CheckoutController < Spree::StoreController
redirect_to main_app.cart_path if @order.completed?
end
def ensure_sufficient_stock_lines
if @order.insufficient_stock_lines.present?
flash[:error] = Spree.t(:inventory_error_flash_for_insufficient_quantity)
redirect_to main_app.cart_path
end
end
def load_order
@order = current_order

View File

@@ -0,0 +1,18 @@
# frozen_string_literal: true
module OrderStockCheck
extend ActiveSupport::Concern
def handle_insufficient_stock
return if sufficient_stock?
flash[:error] = Spree.t(:inventory_error_flash_for_insufficient_quantity)
redirect_to main_app.cart_path
end
private
def sufficient_stock?
@sufficient_stock ||= @order.insufficient_stock_lines.blank?
end
end

View File

@@ -25,7 +25,7 @@ module Spree
@object.attributes = permitted_resource_params
if @object.save
flash[:success] = flash_message_for(@object, :successfully_created)
redirect_to admin_product_images_url(params[:product_id], @url_filters)
redirect_to spree.admin_product_images_url(params[:product_id], @url_filters)
else
respond_with(@object)
end
@@ -41,7 +41,7 @@ module Spree
if @object.update(permitted_resource_params)
flash[:success] = flash_message_for(@object, :successfully_updated)
redirect_to admin_product_images_url(params[:product_id], @url_filters)
redirect_to spree.admin_product_images_url(params[:product_id], @url_filters)
else
respond_with(@object)
end
@@ -55,7 +55,7 @@ module Spree
flash[:success] = flash_message_for(@object, :successfully_removed)
end
redirect_to admin_product_images_url(params[:product_id], @url_filters)
redirect_to spree.admin_product_images_url(params[:product_id], @url_filters)
end
private

View File

@@ -3,7 +3,6 @@ require 'open_food_network/spree_api_key_loader'
module Spree
module Admin
class OrdersController < Spree::Admin::BaseController
require 'spree/core/gateway_error'
include OpenFoodNetwork::SpreeApiKeyLoader
helper CheckoutHelper

View File

@@ -15,7 +15,7 @@ module Spree
@payment_method = params[:payment_method].
delete(:type).
constantize.
new(payment_method_params)
new(PermittedAttributes::PaymentMethod.new(params[:payment_method]).call)
@object = @payment_method
invoke_callbacks(:create, :before)
@@ -92,17 +92,6 @@ module Spree
private
def payment_method_params
params.require(:payment_method).permit(
:name, :description, :type, :active,
:environment, :display_on, :tag_list,
:preferred_enterprise_id, :preferred_server, :preferred_login, :preferred_password,
:calculator_type, :preferred_api_key,
:preferred_signature, :preferred_solution, :preferred_landing_page, :preferred_logourl,
:preferred_test_mode, distributor_ids: []
)
end
def force_environment
params[:payment_method][:environment] = Rails.env unless spree_current_user.admin?
end
@@ -164,7 +153,7 @@ module Spree
# Also, remove password if present and blank
def params_for_update
gateway_params = params[ActiveModel::Naming.param_key(@payment_method)] || {}
params_for_update = payment_method_params.merge(gateway_params)
params_for_update = params[:payment_method].merge(gateway_params)
params_for_update.each do |key, _value|
if key.include?("password") && params_for_update[key].blank?
@@ -172,7 +161,7 @@ module Spree
end
end
params_for_update
PermittedAttributes::PaymentMethod.new(params_for_update).call
end
end
end

View File

@@ -16,7 +16,7 @@ module Spree
flash[:success] = flash_message_for(@object, :successfully_removed)
end
# if destroy fails it won't show any errors to the user
redirect_to admin_product_product_properties_url(params[:product_id], @url_filters)
redirect_to spree.admin_product_product_properties_url(params[:product_id], @url_filters)
end
private

View File

@@ -294,7 +294,7 @@ module Spree
if report_in_order_management_engine?(report)
main_app.public_send("new_order_management_reports_#{report}_url".to_sym)
else
public_send("#{report}_admin_reports_url".to_sym)
spree.public_send("#{report}_admin_reports_url".to_sym)
end
rescue NoMethodError
url_for([:new, :admin, :reports, report.to_s.singularize])

View File

@@ -86,12 +86,7 @@ module Spree
params.require(:shipping_method).permit(
:name, :description, :display_on, :require_ship_address, :tag_list, :calculator_type,
distributor_ids: [],
calculator_attributes: [
:id, :preferred_currency, :preferred_amount, :preferred_unit_from_list,
:preferred_per_unit, :preferred_flat_percent, :preferred_first_item,
:preferred_additional_item, :preferred_max_items, :preferred_minimal_amount,
:preferred_normal_amount, :preferred_discount_amount
]
calculator_attributes: PermittedAttributes::Calculator.attributes
)
end
end

View File

@@ -21,9 +21,9 @@ module Spree
if @object.update(permitted_resource_params)
flash[:success] = flash_message_for(@object, :successfully_updated)
redirect_to admin_product_variants_url(params[:product_id], @url_filters)
redirect_to spree.admin_product_variants_url(params[:product_id], @url_filters)
else
redirect_to edit_admin_product_variant_url(params[:product_id], @object, @url_filters)
redirect_to spree.edit_admin_product_variant_url(params[:product_id], @object, @url_filters)
end
end
@@ -40,9 +40,9 @@ module Spree
@object.attributes = permitted_resource_params
if @object.save
flash[:success] = flash_message_for(@object, :successfully_created)
redirect_to admin_product_variants_url(params[:product_id], @url_filters)
redirect_to spree.admin_product_variants_url(params[:product_id], @url_filters)
else
redirect_to new_admin_product_variant_url(params[:product_id], @url_filters)
redirect_to spree.new_admin_product_variant_url(params[:product_id], @url_filters)
end
return unless @object.present? && @object.valid?

View File

@@ -1,11 +1,87 @@
# frozen_string_literal: true
Spree::PaypalController.class_eval do
include OrderStockCheck
before_action :enable_embedded_shopfront
before_action :destroy_orphaned_paypal_payments, only: :confirm
after_action :reset_order_when_complete, only: :confirm
before_action :permit_parameters!
def express
order = current_order || raise(ActiveRecord::RecordNotFound)
items = order.line_items.map(&method(:line_item))
tax_adjustments = order.adjustments.tax
# TODO: Remove in Spree 2.2
tax_adjustments = tax_adjustments.additional if tax_adjustments.respond_to?(:additional)
shipping_adjustments = order.adjustments.shipping
order.adjustments.eligible.each do |adjustment|
next if (tax_adjustments + shipping_adjustments).include?(adjustment)
items << {
Name: adjustment.label,
Quantity: 1,
Amount: {
currencyID: order.currency,
value: adjustment.amount
}
}
end
# Because PayPal doesn't accept $0 items at all.
# See #10
# https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_ECCustomizing
# "It can be a positive or negative value but not zero."
items.reject! do |item|
item[:Amount][:value].zero?
end
pp_request = provider.build_set_express_checkout(express_checkout_request_details(order, items))
begin
pp_response = provider.set_express_checkout(pp_request)
if pp_response.success?
# At this point Paypal has *provisionally* accepted that the payment can now be placed,
# and the user will be redirected to a Paypal payment page. On completion, the user is
# sent back and the response is handled in the #confirm action in this controller.
redirect_to provider.express_checkout_url(pp_response, useraction: 'commit')
else
flash[:error] = Spree.t('flash.generic_error', scope: 'paypal', reasons: pp_response.errors.map(&:long_message).join(" "))
redirect_to spree.checkout_state_path(:payment)
end
rescue SocketError
flash[:error] = Spree.t('flash.connection_failed', scope: 'paypal')
redirect_to spree.checkout_state_path(:payment)
end
end
def confirm
@order = current_order || raise(ActiveRecord::RecordNotFound)
# At this point the user has come back from the Paypal form, and we get one
# last chance to interact with the payment process before the money moves...
return reset_to_cart unless sufficient_stock?
@order.payments.create!({
source: Spree::PaypalExpressCheckout.create({
token: params[:token],
payer_id: params[:PayerID]
}),
amount: @order.total,
payment_method: payment_method
})
@order.next
if @order.complete?
flash.notice = Spree.t(:order_processed_successfully)
flash[:commerce_tracking] = "nothing special"
session[:order_id] = nil
redirect_to completion_route(@order)
else
redirect_to checkout_state_path(@order.state)
end
end
def cancel
flash[:notice] = Spree.t('flash.cancel', scope: 'paypal')
redirect_to main_app.checkout_path
@@ -21,6 +97,10 @@ Spree::PaypalController.class_eval do
private
def payment_method
@payment_method ||= Spree::PaymentMethod.find(params[:payment_method_id])
end
def permit_parameters!
params.permit(:token, :payment_method_id, :PayerID)
end
@@ -34,6 +114,11 @@ Spree::PaypalController.class_eval do
end
end
def reset_to_cart
OrderCheckoutRestart.new(@order).call
handle_insufficient_stock
end
# See #1074 and #1837 for more detail on why we need this
# An 'orphaned' Spree::Payment is created for every call to CheckoutController#update
# for orders that are processed using a Spree::Gateway::PayPalExpress payment method
@@ -49,4 +134,24 @@ Spree::PaypalController.class_eval do
orphaned_payments = current_order.payments.where(payment_method_id: payment_method.id, source_id: nil)
orphaned_payments.each(&:destroy)
end
def completion_route(order)
spree.order_path(order, token: order.token)
end
def express_checkout_request_details(order, items)
{
SetExpressCheckoutRequestDetails: {
InvoiceID: order.number,
BuyerEmail: order.email,
ReturnURL: spree.confirm_paypal_url(payment_method_id: params[:payment_method_id], utm_nooverride: 1),
CancelURL: spree.cancel_paypal_url,
SolutionType: payment_method.preferred_solution.presence || "Mark",
LandingPage: payment_method.preferred_landing_page.presence || "Billing",
cppheaderimage: payment_method.preferred_logourl.presence || "",
NoShipping: 1,
PaymentDetails: [payment_details(items)]
}
}
end
end

View File

@@ -86,9 +86,9 @@ module Spree
def link_to_delete(resource, options = {})
url = options[:url] || object_url(resource)
name = options[:name] || Spree.t(:delete)
name = options[:name] || I18n.t(:delete)
options[:class] = "delete-resource"
options[:data] = { confirm: Spree.t(:are_you_sure), action: 'remove' }
options[:data] = { confirm: I18n.t(:are_you_sure), action: 'remove' }
link_to_with_icon 'icon-trash', name, url, options
end

View File

@@ -113,11 +113,12 @@ module Spree
end
def event_link(event)
button_link_to(Spree.t(event),
event_label = I18n.t(event, scope: "actions")
confirm_message = I18n.t("admin.orders.edit.order_sure_want_to", event: event_label)
button_link_to(event_label,
fire_admin_order_url(@order, e: event),
method: :put,
icon: "icon-#{event}",
data: { confirm: Spree.t(:order_sure_want_to, event: Spree.t(event)) })
method: :put, icon: "icon-#{event}",
data: { confirm: confirm_message })
end
end
end

View File

@@ -4,7 +4,7 @@ module ProductStock
extend ActiveSupport::Concern
def on_demand
if has_variants?
if variants?
raise 'Cannot determine product on_demand value of product with multiple variants' if variants.size > 1
variants.first.on_demand
@@ -14,7 +14,7 @@ module ProductStock
end
def on_hand
if has_variants?
if variants?
variants.map(&:on_hand).reduce(:+)
else
master.on_hand

View File

@@ -8,7 +8,7 @@ module ProductImport
@enterprise_ids = enterprise_ids
if enterprise_ids.present?
relation.update_all(count_on_hand: 0)
relation.update_all(count_on_hand: 0, on_demand: false)
else
0
end

View File

@@ -47,7 +47,7 @@ module Spree
end
add_shopping_abilities user
add_base_abilities user if new_user? user
add_base_abilities user if is_new_user? user
add_enterprise_management_abilities user if can_manage_enterprises? user
add_group_management_abilities user if can_manage_groups? user
add_product_management_abilities user if can_manage_products? user
@@ -57,7 +57,7 @@ module Spree
end
# New users have no enterprises.
def new_user?(user)
def is_new_user?(user)
user.enterprises.blank?
end

View File

@@ -21,6 +21,8 @@
# a.get :color
# a.preferred_color
#
require 'spree/core/mail_settings'
module Spree
class AppConfiguration < Preferences::Configuration
# Should state/state_name be required

View File

@@ -1,5 +1,7 @@
# frozen_string_literal: true
require 'spree/core/s3_support'
module Spree
class Image < Asset
validates_attachment_presence :attachment
@@ -48,26 +50,36 @@ module Spree
false
end
def self.set_attachment_attributes(attribute_name, attribute_value)
def self.set_attachment_attribute(attribute_name, attribute_value)
attachment_definitions[:attachment][attribute_name] = attribute_value
end
def self.set_s3_attachment_definitions
def self.set_storage_attachment_attributes
if Spree::Config[:use_s3]
set_attachment_attributes(:storage, :s3)
set_attachment_attributes(:s3_credentials, s3_credentials)
set_attachment_attributes(:s3_headers,
ActiveSupport::JSON.decode(Spree::Config[:s3_headers]))
set_attachment_attributes(:bucket, Spree::Config[:s3_bucket])
set_s3_attachment_attributes
else
attachment_definitions[:attachment].delete :storage
attachment_definitions[:attachment].delete(:storage)
end
end
def self.set_s3_attachment_attributes
set_attachment_attribute(:storage, :s3)
set_attachment_attribute(:s3_credentials, s3_credentials)
set_attachment_attribute(:s3_headers,
ActiveSupport::JSON.decode(Spree::Config[:s3_headers]))
set_attachment_attribute(:bucket, Spree::Config[:s3_bucket])
# We use :s3_alias_url (virtual host url style) and set the URL on property s3_host_alias
set_attachment_attribute(:s3_host_alias, attachment_definitions[:attachment][:url])
set_attachment_attribute(:url, ":s3_alias_url")
end
private_class_method :set_s3_attachment_attributes
def self.s3_credentials
{ access_key_id: Spree::Config[:s3_access_key],
secret_access_key: Spree::Config[:s3_secret],
bucket: Spree::Config[:s3_bucket] }
end
private_class_method :s3_credentials
end
end

View File

@@ -0,0 +1,18 @@
# frozen_string_literal: true
module Spree
class OptionType < ActiveRecord::Base
has_many :products, through: :product_option_types
has_many :option_values, -> { order(:position) }, dependent: :destroy
has_many :product_option_types, dependent: :destroy
validates :name, :presentation, presence: true
default_scope -> { order("#{table_name}.position") }
accepts_nested_attributes_for :option_values,
reject_if: lambda { |ov|
ov[:name].blank? || ov[:presentation].blank?
},
allow_destroy: true
end
end

View File

@@ -1,5 +0,0 @@
module Spree
OptionType.class_eval do
has_many :products, through: :product_option_types
end
end

View File

@@ -0,0 +1,12 @@
# frozen_string_literal: true
module Spree
class OptionValue < ActiveRecord::Base
belongs_to :option_type
acts_as_list scope: :option_type
has_and_belongs_to_many :variants, join_table: 'spree_option_values_variants',
class_name: "Spree::Variant"
validates :name, :presentation, presence: true
end
end

View File

@@ -10,6 +10,9 @@
# inherited hook will assign a new hash for the subclass definitions
# and copy all the definitions allowing the subclass to add
# additional defintions without affecting the base
require 'spree/preferences/store'
module Spree
module Preferences
module Preferable

57
app/models/spree/price.rb Normal file
View File

@@ -0,0 +1,57 @@
# frozen_string_literal: true
module Spree
class Price < ActiveRecord::Base
acts_as_paranoid without_default_scope: true
belongs_to :variant, class_name: 'Spree::Variant'
validate :check_price
validates :amount, numericality: { greater_than_or_equal_to: 0 }, allow_nil: true
def display_amount
money
end
alias :display_price :display_amount
def money
Spree::Money.new(amount || 0, currency: currency)
end
def price
amount
end
def price=(price)
self[:amount] = parse_price(price)
end
# Allow prices to access associated soft-deleted variants.
def variant
Spree::Variant.unscoped { super }
end
private
def check_price
return unless currency.nil?
self.currency = Spree::Config[:currency]
end
# strips all non-price-like characters from the price, taking into account locale settings
def parse_price(price)
return price unless price.is_a?(String)
separator, _delimiter = I18n.t([:'number.currency.format.separator',
:'number.currency.format.delimiter'])
non_price_characters = /[^0-9\-#{separator}]/
# Strip everything else first
price.gsub!(non_price_characters, '')
# Then replace the locale-specific decimal separator with the standard separator if necessary
price.gsub!(separator, '.') unless separator == '.'
price.to_d
end
end
end

View File

@@ -1,18 +0,0 @@
module Spree
Price.class_eval do
acts_as_paranoid without_default_scope: true
# Allow prices to access associated soft-deleted variants.
def variant
Spree::Variant.unscoped { super }
end
private
def check_price
if currency.nil?
self.currency = Spree::Config[:currency]
end
end
end
end

485
app/models/spree/product.rb Executable file
View File

@@ -0,0 +1,485 @@
# frozen_string_literal: true
require 'open_food_network/permalink_generator'
require 'open_food_network/property_merge'
require 'concerns/product_stock'
# PRODUCTS
# Products represent an entity for sale in a store.
# Products can have variations, called variants
# Products properties include description, permalink, availability,
# shipping category, etc. that do not change by variant.
#
# MASTER VARIANT
# Every product has one master variant, which stores master price and sku, size and weight, etc.
# The master variant does not have option values associated with it.
# Price, SKU, size, weight, etc. are all delegated to the master variant.
# Contains on_hand inventory levels only when there are no variants for the product.
#
# VARIANTS
# All variants can access the product properties directly (via reverse delegation).
# Inventory units are tied to Variant.
# The master variant can have inventory units, but not option values.
# All other variants have option values and may have inventory units.
# Sum of on_hand each variant's inventory level determine "on_hand" level for the product.
#
module Spree
class Product < ActiveRecord::Base
include PermalinkGenerator
include ProductStock
acts_as_paranoid
has_many :product_option_types, dependent: :destroy
# We have an after_destroy callback on Spree::ProductOptionType. However, if we
# don't specify dependent => destroy on this association, it is not called. See:
# https://github.com/rails/rails/issues/7618
has_many :option_types, through: :product_option_types, dependent: :destroy
has_many :product_properties, dependent: :destroy
has_many :properties, through: :product_properties
has_many :classifications, dependent: :delete_all
has_many :taxons, through: :classifications
belongs_to :tax_category, class_name: 'Spree::TaxCategory'
belongs_to :shipping_category, class_name: 'Spree::ShippingCategory'
belongs_to :supplier, class_name: 'Enterprise', touch: true
belongs_to :primary_taxon, class_name: 'Spree::Taxon', touch: true
has_one :master,
-> { where is_master: true },
class_name: 'Spree::Variant',
dependent: :destroy
has_many :variants, -> {
where(is_master: false).order("#{::Spree::Variant.quoted_table_name}.position ASC")
}, class_name: 'Spree::Variant'
has_many :variants_including_master,
-> { order("#{::Spree::Variant.quoted_table_name}.position ASC") },
class_name: 'Spree::Variant',
dependent: :destroy
has_many :prices, -> {
order('spree_variants.position, spree_variants.id, currency')
}, through: :variants
has_many :stock_items, through: :variants
delegate_belongs_to :master, :sku, :price, :currency, :display_amount, :display_price, :weight,
:height, :width, :depth, :is_master, :default_price?, :cost_currency,
:price_in, :amount_in, :unit_value, :unit_description
delegate_belongs_to :master, :cost_price if Variant.table_exists? &&
Variant.column_names.include?('cost_price')
delegate :images_attributes=, :display_as=, to: :master
after_create :set_master_variant_defaults
after_create :build_variants_from_option_values_hash, if: :option_values_hash
after_save :save_master
delegate :images, to: :master, prefix: true
alias_method :images, :master_images
has_many :variant_images, -> { order(:position) }, source: :images,
through: :variants_including_master
accepts_nested_attributes_for :variants, allow_destroy: true
validates :name, presence: true
validates :permalink, presence: true
validates :price, presence: true, if: proc { Spree::Config[:require_master_price] }
validates :shipping_category_id, presence: true
validates :supplier, presence: true
validates :primary_taxon, presence: true
validates :tax_category_id, presence: true, if: "Spree::Config.products_require_tax_category"
validates :variant_unit, presence: true
validates :variant_unit_scale,
presence: { if: ->(p) { %w(weight volume).include? p.variant_unit } }
validates :variant_unit_name,
presence: { if: ->(p) { p.variant_unit == 'items' } }
attr_accessor :option_values_hash
accepts_nested_attributes_for :product_properties,
allow_destroy: true,
reject_if: lambda { |pp| pp[:property_name].blank? }
make_permalink order: :name
alias :options :product_option_types
after_initialize :ensure_master
after_initialize :set_available_on_to_now, if: :new_record?
before_validation :sanitize_permalink
before_save :add_primary_taxon_to_taxons
after_save :remove_previous_primary_taxon_from_taxons
after_save :ensure_standard_variant
after_save :update_units
before_destroy :punch_permalink
# -- Joins
scope :with_order_cycles_outer, -> {
joins("
LEFT OUTER JOIN spree_variants AS o_spree_variants
ON (o_spree_variants.product_id = spree_products.id)").
joins("
LEFT OUTER JOIN exchange_variants AS o_exchange_variants
ON (o_exchange_variants.variant_id = o_spree_variants.id)").
joins("
LEFT OUTER JOIN exchanges AS o_exchanges
ON (o_exchanges.id = o_exchange_variants.exchange_id)").
joins("
LEFT OUTER JOIN order_cycles AS o_order_cycles
ON (o_order_cycles.id = o_exchanges.order_cycle_id)")
}
scope :imported_on, lambda { |import_date|
import_date = Time.zone.parse import_date if import_date.is_a? String
import_date = import_date.to_date
joins(:variants).merge(Spree::Variant.
where(import_date: import_date.beginning_of_day..import_date.end_of_day))
}
scope :with_order_cycles_inner, -> {
joins(variants_including_master: { exchanges: :order_cycle })
}
scope :visible_for, lambda { |enterprise|
joins('
LEFT OUTER JOIN spree_variants AS o_spree_variants
ON (o_spree_variants.product_id = spree_products.id)').
joins('
LEFT OUTER JOIN inventory_items AS o_inventory_items
ON (o_spree_variants.id = o_inventory_items.variant_id)').
where('o_inventory_items.enterprise_id = (?) AND visible = (?)', enterprise, true)
}
# -- Scopes
scope :in_supplier, lambda { |supplier| where(supplier_id: supplier) }
# Products distributed via the given distributor through an OC
scope :in_distributor, lambda { |distributor|
distributor = distributor.respond_to?(:id) ? distributor.id : distributor.to_i
with_order_cycles_outer.
where('(o_exchanges.incoming = ? AND o_exchanges.receiver_id = ?)', false, distributor).
select('distinct spree_products.*')
}
scope :in_distributors, lambda { |distributors|
with_order_cycles_outer.
where('(o_exchanges.incoming = ? AND o_exchanges.receiver_id IN (?))', false, distributors).
uniq
}
# Products supplied by a given enterprise or distributed via that enterprise through an OC
scope :in_supplier_or_distributor, lambda { |enterprise|
enterprise = enterprise.respond_to?(:id) ? enterprise.id : enterprise.to_i
with_order_cycles_outer.
where("
spree_products.supplier_id = ?
OR (o_exchanges.incoming = ? AND o_exchanges.receiver_id = ?)
", enterprise, false, enterprise).
select('distinct spree_products.*')
}
# Products distributed by the given order cycle
scope :in_order_cycle, lambda { |order_cycle|
with_order_cycles_inner.
merge(Exchange.outgoing).
where('order_cycles.id = ?', order_cycle)
}
scope :in_an_active_order_cycle, lambda {
with_order_cycles_inner.
merge(OrderCycle.active).
merge(Exchange.outgoing).
where('order_cycles.id IS NOT NULL')
}
scope :by_producer, -> { joins(:supplier).order('enterprises.name') }
scope :by_name, -> { order('name') }
scope :managed_by, lambda { |user|
if user.has_spree_role?('admin')
where(nil)
else
where('supplier_id IN (?)', user.enterprises.select("enterprises.id"))
end
}
scope :stockable_by, lambda { |enterprise|
return where('1=0') if enterprise.blank?
permitted_producer_ids = EnterpriseRelationship.joins(:parent).permitting(enterprise.id)
.with_permission(:add_to_order_cycle)
.where(enterprises: { is_primary_producer: true })
.pluck(:parent_id)
return where('spree_products.supplier_id IN (?)', [enterprise.id] | permitted_producer_ids)
}
scope :active, lambda {
where("spree_products.deleted_at IS NULL AND spree_products.available_on <= ?", Time.zone.now)
}
def self.group_by_products_id
group(column_names.map { |col_name| "#{table_name}.#{col_name}" })
end
def to_param
permalink.present? ? permalink : (permalink_was || name.to_s.to_url)
end
# the master variant is not a member of the variants array
def variants?
variants.any?
end
def tax_category
if self[:tax_category_id].nil?
TaxCategory.find_by(is_default: true)
else
TaxCategory.find(self[:tax_category_id])
end
end
# Ensures option_types and product_option_types exist for keys in option_values_hash
def ensure_option_types_exist_for_values_hash
return if option_values_hash.nil?
option_values_hash.keys.map(&:to_i).each do |id|
option_type_ids << id unless option_type_ids.include?(id)
unless product_option_types.pluck(:option_type_id).include?(id)
product_option_types.create(option_type_id: id)
end
end
end
# for adding products which are closely related to existing ones
def duplicate
duplicator = Spree::Core::ProductDuplicator.new(self)
duplicator.duplicate
end
# use deleted? rather than checking the attribute directly. this
# allows extensions to override deleted? if they want to provide
# their own definition.
def deleted?
!!deleted_at
end
def available?
!(available_on.nil? || available_on.future?)
end
# split variants list into hash which shows mapping of opt value onto matching variants
# eg categorise_variants_from_option(color) => {"red" -> [...], "blue" -> [...]}
def categorise_variants_from_option(opt_type)
return {} unless option_types.include?(opt_type)
variants.active.group_by { |v| v.option_values.detect { |o| o.option_type == opt_type } }
end
def self.like_any(fields, values)
where fields.map { |field|
values.map { |value|
arel_table[field].matches("%#{value}%")
}.inject(:or)
}.inject(:or)
end
def empty_option_values?
options.empty? || options.any? do |opt|
opt.option_type.option_values.empty?
end
end
def property(property_name)
return nil unless prop = properties.find_by(name: property_name)
product_properties.find_by(property: prop).try(:value)
end
def set_property(property_name, property_value)
ActiveRecord::Base.transaction do
property = Property.where(name: property_name).first_or_create!(presentation: property_name)
product_property = ProductProperty.where(product: self,
property: property).first_or_initialize
product_property.value = property_value
product_property.save!
end
end
def total_on_hand
stock_items.sum(&:count_on_hand)
end
# Master variant may be deleted (i.e. when the product is deleted)
# which would make AR's default finder return nil.
# This is a stopgap for that little problem.
def master
super || variants_including_master.with_deleted.find_by(is_master: true)
end
def properties_including_inherited
# Product properties override producer properties
ps = product_properties.all
if inherits_properties
ps = OpenFoodNetwork::PropertyMerge.merge(ps, supplier.producer_properties)
end
ps.
sort_by(&:position).
map { |pp| { id: pp.property.id, name: pp.property.presentation, value: pp.value } }
end
def in_distributor?(distributor)
self.class.in_distributor(distributor).include? self
end
def in_order_cycle?(order_cycle)
self.class.in_order_cycle(order_cycle).include? self
end
def variants_distributed_by(order_cycle, distributor)
order_cycle.variants_distributed_by(distributor).where(product_id: self)
end
# Get the most recent import_date of a product's variants
def import_date
variants.map(&:import_date).compact.max
end
def variant_unit_option_type
return if variant_unit.blank?
option_type_name = "unit_#{variant_unit}"
option_type_presentation = variant_unit.capitalize
Spree::OptionType.find_by(name: option_type_name) ||
Spree::OptionType.create!(name: option_type_name,
presentation: option_type_presentation)
end
def self.all_variant_unit_option_types
Spree::OptionType.where('name LIKE ?', 'unit_%%')
end
def destroy_with_delete_from_order_cycles
transaction do
touch_distributors
ExchangeVariant.
where('exchange_variants.variant_id IN (?)', variants_including_master.with_deleted.
select(:id)).destroy_all
destroy_without_delete_from_order_cycles
end
end
alias_method_chain :destroy, :delete_from_order_cycles
private
# Builds variants from a hash of option types & values
def build_variants_from_option_values_hash
ensure_option_types_exist_for_values_hash
values = option_values_hash.values
values = values.inject(values.shift) { |memo, value| memo.product(value).map(&:flatten) }
values.each do |ids|
variants.create(
option_value_ids: ids,
price: master.price
)
end
save
end
# ensures the master variant is flagged as such
def set_master_variant_defaults
master.is_master = true
end
# Here we rescue errors when saving master variants (without the need for a
# validates_associated on master) and we get more specific data about the errors
def save_master
if master && (
master.changed? || master.new_record? || (
master.default_price && (
master.default_price.changed? || master.default_price.new_record?
)
)
)
master.save!
end
# If the master cannot be saved, the Product object will get its errors
# and will be destroyed
rescue ActiveRecord::RecordInvalid
master.errors.each do |att, error|
errors.add(att, error)
end
raise
end
def ensure_master
return unless new_record?
self.master ||= Variant.new
end
def punch_permalink
# Punch permalink with date prefix
update_attribute :permalink, "#{Time.now.to_i}_#{permalink}"
end
def set_available_on_to_now
self.available_on ||= Time.zone.now
end
def update_units
return unless variant_unit_changed?
option_types.delete self.class.all_variant_unit_option_types
option_types << variant_unit_option_type if variant_unit.present?
variants_including_master.each(&:update_units)
end
def touch_distributors
Enterprise.distributing_products(id).each(&:touch)
end
def add_primary_taxon_to_taxons
taxons << primary_taxon unless taxons.include? primary_taxon
end
def remove_previous_primary_taxon_from_taxons
return unless primary_taxon_id_changed? && primary_taxon_id_was
taxons.destroy(primary_taxon_id_was)
end
def ensure_standard_variant
return unless master.valid? && variants.empty?
variant = master.dup
variant.product = self
variant.is_master = false
variants << variant
end
# Spree creates a permalink already but our implementation fixes an edge case.
def sanitize_permalink
return unless permalink.blank? || permalink_changed?
requested = permalink.presence || permalink_was.presence || name.presence || 'product'
self.permalink = create_unique_permalink(requested.parameterize)
end
end
end

View File

@@ -1,265 +0,0 @@
require 'open_food_network/permalink_generator'
require 'open_food_network/property_merge'
require 'concerns/product_stock'
Spree::Product.class_eval do
include PermalinkGenerator
include ProductStock
# We have an after_destroy callback on Spree::ProductOptionType. However, if we
# don't specify dependent => destroy on this association, it is not called. See:
# https://github.com/rails/rails/issues/7618
has_many :option_types, through: :product_option_types, dependent: :destroy
belongs_to :supplier, class_name: 'Enterprise', touch: true
belongs_to :primary_taxon, class_name: 'Spree::Taxon', touch: true
delegate_belongs_to :master, :unit_value, :unit_description
delegate :images_attributes=, :display_as=, to: :master
validates :supplier, presence: true
validates :primary_taxon, presence: true
validates :tax_category_id, presence: true, if: "Spree::Config.products_require_tax_category"
validates :variant_unit, presence: true
validates :variant_unit_scale,
presence: { if: ->(p) { %w(weight volume).include? p.variant_unit } }
validates :variant_unit_name,
presence: { if: ->(p) { p.variant_unit == 'items' } }
after_initialize :set_available_on_to_now, if: :new_record?
before_validation :sanitize_permalink
before_save :add_primary_taxon_to_taxons
after_save :remove_previous_primary_taxon_from_taxons
after_save :ensure_standard_variant
after_save :update_units
# -- Joins
scope :with_order_cycles_outer, -> {
joins("
LEFT OUTER JOIN spree_variants AS o_spree_variants
ON (o_spree_variants.product_id = spree_products.id)").
joins("
LEFT OUTER JOIN exchange_variants AS o_exchange_variants
ON (o_exchange_variants.variant_id = o_spree_variants.id)").
joins("
LEFT OUTER JOIN exchanges AS o_exchanges
ON (o_exchanges.id = o_exchange_variants.exchange_id)").
joins("
LEFT OUTER JOIN order_cycles AS o_order_cycles
ON (o_order_cycles.id = o_exchanges.order_cycle_id)")
}
scope :imported_on, lambda { |import_date|
import_date = Time.zone.parse import_date if import_date.is_a? String
import_date = import_date.to_date
joins(:variants).merge(Spree::Variant.where(import_date: import_date.beginning_of_day..import_date.end_of_day))
}
scope :with_order_cycles_inner, -> {
joins(variants_including_master: { exchanges: :order_cycle })
}
scope :visible_for, lambda { |enterprise|
joins('LEFT OUTER JOIN spree_variants AS o_spree_variants ON (o_spree_variants.product_id = spree_products.id)').
joins('LEFT OUTER JOIN inventory_items AS o_inventory_items ON (o_spree_variants.id = o_inventory_items.variant_id)').
where('o_inventory_items.enterprise_id = (?) AND visible = (?)', enterprise, true)
}
# -- Scopes
scope :in_supplier, lambda { |supplier| where(supplier_id: supplier) }
# Products distributed via the given distributor through an OC
scope :in_distributor, lambda { |distributor|
distributor = distributor.respond_to?(:id) ? distributor.id : distributor.to_i
with_order_cycles_outer.
where('(o_exchanges.incoming = ? AND o_exchanges.receiver_id = ?)', false, distributor).
select('distinct spree_products.*')
}
scope :in_distributors, lambda { |distributors|
with_order_cycles_outer.
where('(o_exchanges.incoming = ? AND o_exchanges.receiver_id IN (?))', false, distributors).
uniq
}
# Products supplied by a given enterprise or distributed via that enterprise through an OC
scope :in_supplier_or_distributor, lambda { |enterprise|
enterprise = enterprise.respond_to?(:id) ? enterprise.id : enterprise.to_i
with_order_cycles_outer.
where("
spree_products.supplier_id = ?
OR (o_exchanges.incoming = ? AND o_exchanges.receiver_id = ?)
", enterprise, false, enterprise).
select('distinct spree_products.*')
}
# Products distributed by the given order cycle
scope :in_order_cycle, lambda { |order_cycle|
with_order_cycles_inner.
merge(Exchange.outgoing).
where('order_cycles.id = ?', order_cycle)
}
scope :in_an_active_order_cycle, lambda {
with_order_cycles_inner.
merge(OrderCycle.active).
merge(Exchange.outgoing).
where('order_cycles.id IS NOT NULL')
}
scope :by_producer, -> { joins(:supplier).order('enterprises.name') }
scope :by_name, -> { order('name') }
scope :managed_by, lambda { |user|
if user.has_spree_role?('admin')
where(nil)
else
where('supplier_id IN (?)', user.enterprises.select("enterprises.id"))
end
}
scope :stockable_by, lambda { |enterprise|
return where('1=0') if enterprise.blank?
permitted_producer_ids = EnterpriseRelationship.joins(:parent).permitting(enterprise.id)
.with_permission(:add_to_order_cycle).where(enterprises: { is_primary_producer: true }).pluck(:parent_id)
return where('spree_products.supplier_id IN (?)', [enterprise.id] | permitted_producer_ids)
}
# -- Methods
# Called by Spree::Product::duplicate before saving.
def duplicate_extra(_parent)
# Spree sets the SKU to "COPY OF #{parent sku}".
master.sku = ''
end
def properties_including_inherited
# Product properties override producer properties
ps = product_properties.all
if inherits_properties
ps = OpenFoodNetwork::PropertyMerge.merge(ps, supplier.producer_properties)
end
ps.
sort_by(&:position).
map { |pp| { id: pp.property.id, name: pp.property.presentation, value: pp.value } }
end
def in_distributor?(distributor)
self.class.in_distributor(distributor).include? self
end
def in_order_cycle?(order_cycle)
self.class.in_order_cycle(order_cycle).include? self
end
def variants_distributed_by(order_cycle, distributor)
order_cycle.variants_distributed_by(distributor).where(product_id: self)
end
# Get the most recent import_date of a product's variants
def import_date
variants.map(&:import_date).compact.max
end
def variant_unit_option_type
if variant_unit.present?
option_type_name = "unit_#{variant_unit}"
option_type_presentation = variant_unit.capitalize
Spree::OptionType.find_by(name: option_type_name) ||
Spree::OptionType.create!(name: option_type_name,
presentation: option_type_presentation)
end
end
def destroy_with_delete_from_order_cycles
transaction do
touch_distributors
ExchangeVariant.
where('exchange_variants.variant_id IN (?)', variants_including_master.with_deleted.
select(:id)).destroy_all
destroy_without_delete_from_order_cycles
end
end
alias_method_chain :destroy, :delete_from_order_cycles
private
def set_available_on_to_now
self.available_on ||= Time.zone.now
end
def update_units
if variant_unit_changed?
option_types.delete self.class.all_variant_unit_option_types
option_types << variant_unit_option_type if variant_unit.present?
variants_including_master.each(&:update_units)
end
end
def touch_distributors
Enterprise.distributing_products(id).each(&:touch)
end
def add_primary_taxon_to_taxons
taxons << primary_taxon unless taxons.include? primary_taxon
end
def remove_previous_primary_taxon_from_taxons
return unless primary_taxon_id_changed? && primary_taxon_id_was
taxons.destroy(primary_taxon_id_was)
end
def self.all_variant_unit_option_types
Spree::OptionType.where('name LIKE ?', 'unit_%%')
end
def ensure_standard_variant
if master.valid? && variants.empty?
variant = master.dup
variant.product = self
variant.is_master = false
variants << variant
end
end
# Override Spree's old save_master method and replace it with the most recent method from spree repository
# This fixes any problems arising from failing master saves, without the need for a validates_associated on
# master, while giving us more specific errors as to why saving failed
def save_master
if master && (
master.changed? || master.new_record? || (
master.default_price && (
master.default_price.changed? || master.default_price.new_record?
)
)
)
master.save!
end
# If the master cannot be saved, the Product object will get its errors
# and will be destroyed
rescue ActiveRecord::RecordInvalid
master.errors.each do |att, error|
errors.add(att, error)
end
raise
end
# Spree creates a permalink already but our implementation fixes an edge case.
def sanitize_permalink
if permalink.blank? || permalink_changed?
requested = permalink.presence || permalink_was.presence || name.presence || 'product'
self.permalink = create_unique_permalink(requested.parameterize)
end
end
end

View File

@@ -0,0 +1,18 @@
# frozen_string_literal: true
module Spree
class ProductOptionType < ActiveRecord::Base
after_destroy :remove_option_values
belongs_to :product, class_name: 'Spree::Product'
belongs_to :option_type, class_name: 'Spree::OptionType'
acts_as_list scope: :product
def remove_option_values
product.variants_including_master.each do |variant|
option_values = variant.option_values.where(option_type_id: option_type)
variant.option_values.destroy(*option_values)
end
end
end
end

View File

@@ -1,10 +0,0 @@
Spree::ProductOptionType.class_eval do
after_destroy :remove_option_values
def remove_option_values
product.variants_including_master.each do |variant|
option_values = variant.option_values.where(option_type_id: option_type)
variant.option_values.destroy(*option_values)
end
end
end

View File

@@ -0,0 +1,27 @@
# frozen_string_literal: true
module Spree
class ProductProperty < ActiveRecord::Base
belongs_to :product, class_name: "Spree::Product", touch: true
belongs_to :property, class_name: 'Spree::Property'
validates :property, presence: true
validates :value, length: { maximum: 255 }
default_scope -> { order("#{table_name}.position") }
# virtual attributes for use with AJAX completion stuff
def property_name
property&.name
end
def property_name=(name)
return if name.blank?
unless property = Property.find_by(name: name)
property = Property.create(name: name, presentation: name)
end
self.property = property
end
end
end

View File

@@ -1,5 +0,0 @@
module Spree
ProductProperty.class_eval do
belongs_to :product, class_name: "Spree::Product", touch: true
end
end

301
app/models/spree/variant.rb Normal file
View File

@@ -0,0 +1,301 @@
# frozen_string_literal: true
require 'open_food_network/enterprise_fee_calculator'
require 'variant_units/variant_and_line_item_naming'
require 'concerns/variant_stock'
require 'spree/localized_number'
module Spree
class Variant < ActiveRecord::Base
extend Spree::LocalizedNumber
include VariantUnits::VariantAndLineItemNaming
include VariantStock
acts_as_paranoid
belongs_to :product, touch: true, class_name: 'Spree::Product'
delegate_belongs_to :product, :name, :description, :permalink, :available_on,
:tax_category_id, :shipping_category_id, :meta_description,
:meta_keywords, :tax_category, :shipping_category
has_many :inventory_units
has_many :line_items
has_many :stock_items, dependent: :destroy
has_many :stock_locations, through: :stock_items
has_many :stock_movements
has_and_belongs_to_many :option_values, join_table: :spree_option_values_variants
has_many :images, -> { order(:position) }, as: :viewable,
dependent: :destroy,
class_name: "Spree::Image"
accepts_nested_attributes_for :images
has_one :default_price,
-> { where currency: Spree::Config[:currency] },
class_name: 'Spree::Price',
dependent: :destroy
has_many :prices,
class_name: 'Spree::Price',
dependent: :destroy
delegate_belongs_to :default_price, :display_price, :display_amount,
:price, :price=, :currency
has_many :exchange_variants
has_many :exchanges, through: :exchange_variants
has_many :variant_overrides
has_many :inventory_items
localize_number :price, :cost_price, :weight
validate :check_price
validates :price, numericality: { greater_than_or_equal_to: 0 },
presence: true,
if: proc { Spree::Config[:require_master_price] }
validates :cost_price, numericality: { greater_than_or_equal_to: 0, allow_nil: true }
validates :unit_value, presence: true, if: ->(variant) {
%w(weight volume).include?(variant.product.andand.variant_unit)
}
validates :unit_description, presence: true, if: ->(variant) {
variant.product.andand.variant_unit.present? && variant.unit_value.nil?
}
before_validation :set_cost_currency
before_validation :update_weight_from_unit_value, if: ->(v) { v.product.present? }
after_save :save_default_price
after_save :update_units
after_create :create_stock_items
after_create :set_position
around_destroy :destruction
# default variant scope only lists non-deleted variants
scope :deleted, lambda { where('deleted_at IS NOT NULL') }
scope :with_order_cycles_inner, -> { joins(exchanges: :order_cycle) }
scope :not_master, -> { where(is_master: false) }
scope :in_order_cycle, lambda { |order_cycle|
with_order_cycles_inner.
merge(Exchange.outgoing).
where('order_cycles.id = ?', order_cycle).
select('DISTINCT spree_variants.*')
}
scope :in_schedule, lambda { |schedule|
joins(exchanges: { order_cycle: :schedules }).
merge(Exchange.outgoing).
where(schedules: { id: schedule }).
select('DISTINCT spree_variants.*')
}
scope :for_distribution, lambda { |order_cycle, distributor|
where('spree_variants.id IN (?)', order_cycle.variants_distributed_by(distributor).
select(&:id))
}
scope :visible_for, lambda { |enterprise|
joins(:inventory_items).
where(
'inventory_items.enterprise_id = (?) AND inventory_items.visible = (?)',
enterprise,
true
)
}
scope :not_hidden_for, lambda { |enterprise|
return where("1=0") if enterprise.blank?
joins("
LEFT OUTER JOIN (SELECT *
FROM inventory_items
WHERE enterprise_id = #{sanitize enterprise.andand.id})
AS o_inventory_items
ON o_inventory_items.variant_id = spree_variants.id")
.where("o_inventory_items.id IS NULL OR o_inventory_items.visible = (?)", true)
}
scope :stockable_by, lambda { |enterprise|
return where("1=0") if enterprise.blank?
joins(:product).
where(spree_products: { id: Spree::Product.stockable_by(enterprise).pluck(:id) })
}
# Define sope as class method to allow chaining with other scopes filtering id.
# In Rails 3, merging two scopes on the same column will consider only the last scope.
def self.in_distributor(distributor)
where(id: ExchangeVariant.select(:variant_id).
joins(:exchange).
where('exchanges.incoming = ? AND exchanges.receiver_id = ?', false, distributor))
end
def self.indexed
scoped.index_by(&:id)
end
def self.active(currency = nil)
# "where(id:" is necessary so that the returned relation has no includes
# The relation without includes will not be readonly and allow updates on it
where("spree_variants.id in (?)", joins(:prices).
where(deleted_at: nil).
where('spree_prices.currency' =>
currency || Spree::Config[:currency]).
where('spree_prices.amount IS NOT NULL').
select("spree_variants.id"))
end
# Allow variant to access associated soft-deleted prices.
def default_price
Spree::Price.unscoped { super }
end
def price_with_fees(distributor, order_cycle)
price + fees_for(distributor, order_cycle)
end
def fees_for(distributor, order_cycle)
OpenFoodNetwork::EnterpriseFeeCalculator.new(distributor, order_cycle).fees_for self
end
def fees_by_type_for(distributor, order_cycle)
OpenFoodNetwork::EnterpriseFeeCalculator.new(distributor, order_cycle).fees_by_type_for self
end
# returns number of units currently on backorder for this variant.
def on_backorder
inventory_units.with_state('backordered').size
end
def gross_profit
cost_price.nil? ? 0 : (price - cost_price)
end
# use deleted? rather than checking the attribute directly. this
# allows extensions to override deleted? if they want to provide
# their own definition.
def deleted?
deleted_at
end
def set_option_value(opt_name, opt_value)
# no option values on master
return if is_master
option_type = Spree::OptionType.where(name: opt_name).first_or_initialize do |o|
o.presentation = opt_name
o.save!
end
current_value = option_values.detect { |o| o.option_type.name == opt_name }
if current_value.nil?
# then we have to check to make sure that the product has the option type
unless product.option_types.include? option_type
product.option_types << option_type
product.save
end
else
return if current_value.name == opt_value
option_values.delete(current_value)
end
option_value = Spree::OptionValue.where(option_type_id: option_type.id,
name: opt_value).first_or_initialize do |o|
o.presentation = opt_value
o.save!
end
option_values << option_value
save
end
def option_value(opt_name)
option_values.detect { |o| o.option_type.name == opt_name }.try(:presentation)
end
def default_price?
!default_price.nil?
end
def price_in(currency)
prices.select{ |price| price.currency == currency }.first ||
Spree::Price.new(variant_id: id, currency: currency)
end
def amount_in(currency)
price_in(currency).try(:amount)
end
def name_and_sku
"#{name} - #{sku}"
end
# Product may be created with deleted_at already set,
# which would make AR's default finder return nil.
# This is a stopgap for that little problem.
def product
Spree::Product.unscoped { super }
end
# can_supply? is implemented in VariantStock
def in_stock?(quantity = 1)
can_supply?(quantity)
end
def total_on_hand
Spree::Stock::Quantifier.new(self).total_on_hand
end
private
# Ensures a new variant takes the product master price when price is not supplied
def check_price
if price.nil? && Spree::Config[:require_master_price]
raise 'No master variant found to infer price' unless product&.master
raise 'Must supply price for variant or master.price for product.' if self == product.master
self.price = product.master.price
end
return unless currency.nil?
self.currency = Spree::Config[:currency]
end
def save_default_price
default_price.save if default_price && (default_price.changed? || default_price.new_record?)
end
def set_cost_currency
self.cost_currency = Spree::Config[:currency] if cost_currency.blank?
end
def create_stock_items
StockLocation.all.find_each do |stock_location|
stock_location.propagate_variant(self)
end
end
def set_position
update_column(:position, product.variants.maximum(:position).to_i + 1)
end
def update_weight_from_unit_value
return unless product.variant_unit == 'weight' && unit_value.present?
self.weight = weight_from_unit_value
end
def destruction
exchange_variants(:reload).destroy_all
yield
end
end
end

View File

@@ -1,141 +0,0 @@
require 'open_food_network/enterprise_fee_calculator'
require 'variant_units/variant_and_line_item_naming'
require 'concerns/variant_stock'
Spree::Variant.class_eval do
extend Spree::LocalizedNumber
# Remove method From Spree, so method from the naming module is used instead
# This file may be double-loaded in delayed job environment, so we check before
# removing the Spree method to prevent error.
remove_method :options_text if instance_methods(false).include? :options_text
include VariantUnits::VariantAndLineItemNaming
include VariantStock
has_many :exchange_variants
has_many :exchanges, through: :exchange_variants
has_many :variant_overrides
has_many :inventory_items
accepts_nested_attributes_for :images
validates :unit_value, presence: true, if: ->(variant) {
%w(weight volume).include?(variant.product.andand.variant_unit)
}
validates :unit_description, presence: true, if: ->(variant) {
variant.product.andand.variant_unit.present? && variant.unit_value.nil?
}
before_validation :update_weight_from_unit_value, if: ->(v) { v.product.present? }
after_save :update_units
around_destroy :destruction
scope :with_order_cycles_inner, -> { joins(exchanges: :order_cycle) }
scope :not_master, -> { where(is_master: false) }
scope :in_order_cycle, lambda { |order_cycle|
with_order_cycles_inner.
merge(Exchange.outgoing).
where('order_cycles.id = ?', order_cycle).
select('DISTINCT spree_variants.*')
}
scope :in_schedule, lambda { |schedule|
joins(exchanges: { order_cycle: :schedules }).
merge(Exchange.outgoing).
where(schedules: { id: schedule }).
select('DISTINCT spree_variants.*')
}
scope :for_distribution, lambda { |order_cycle, distributor|
where('spree_variants.id IN (?)', order_cycle.variants_distributed_by(distributor).select(&:id))
}
scope :visible_for, lambda { |enterprise|
joins(:inventory_items).
where(
'inventory_items.enterprise_id = (?) AND inventory_items.visible = (?)',
enterprise,
true
)
}
scope :not_hidden_for, lambda { |enterprise|
return where("1=0") if enterprise.blank?
joins("
LEFT OUTER JOIN (SELECT *
FROM inventory_items
WHERE enterprise_id = #{sanitize enterprise.andand.id})
AS o_inventory_items
ON o_inventory_items.variant_id = spree_variants.id")
.where("o_inventory_items.id IS NULL OR o_inventory_items.visible = (?)", true)
}
localize_number :price, :cost_price, :weight
scope :stockable_by, lambda { |enterprise|
return where("1=0") if enterprise.blank?
joins(:product).
where(spree_products: { id: Spree::Product.stockable_by(enterprise).pluck(:id) })
}
# Define sope as class method to allow chaining with other scopes filtering id.
# In Rails 3, merging two scopes on the same column will consider only the last scope.
def self.in_distributor(distributor)
where(id: ExchangeVariant.select(:variant_id).
joins(:exchange).
where('exchanges.incoming = ? AND exchanges.receiver_id = ?', false, distributor))
end
def self.indexed
scoped.index_by(&:id)
end
def self.active(currency = nil)
# "where(id:" is necessary so that the returned relation has no includes
# The relation without includes will not be readonly and allow updates on it
where("spree_variants.id in (?)", joins(:prices).
where(deleted_at: nil).
where('spree_prices.currency' =>
currency || Spree::Config[:currency]).
where('spree_prices.amount IS NOT NULL').
select("spree_variants.id"))
end
# We override in_stock? to avoid depending
# on the non-overridable method Spree::Stock::Quantifier.can_supply?
# VariantStock implements can_supply? itself which depends on overridable methods
def in_stock?(quantity = 1)
can_supply?(quantity)
end
# Allow variant to access associated soft-deleted prices.
def default_price
Spree::Price.unscoped { super }
end
def price_with_fees(distributor, order_cycle)
price + fees_for(distributor, order_cycle)
end
def fees_for(distributor, order_cycle)
OpenFoodNetwork::EnterpriseFeeCalculator.new(distributor, order_cycle).fees_for self
end
def fees_by_type_for(distributor, order_cycle)
OpenFoodNetwork::EnterpriseFeeCalculator.new(distributor, order_cycle).fees_by_type_for self
end
private
def update_weight_from_unit_value
self.weight = weight_from_unit_value if product.variant_unit == 'weight' && unit_value.present?
end
def destruction
exchange_variants(:reload).destroy_all
yield
end
end

View File

@@ -17,7 +17,7 @@ module Api
issues_summary(confirmation_only: true)
if issues.nil? && products.empty?
issues = "no products in inventory"
issues = I18n.t(:no_products)
end
issues
end

View File

@@ -31,7 +31,7 @@ class ExchangeProductsRenderer
end
def supplied_products(enterprises_query_matcher)
products_relation = Spree::Product.where(supplier_id: enterprises_query_matcher)
products_relation = Spree::Product.where(supplier_id: enterprises_query_matcher).order(:name)
filter_visible(products_relation)
end

View File

@@ -0,0 +1,14 @@
# frozen_string_literal: true
module PermittedAttributes
class Calculator
def self.attributes
[
:id, :preferred_currency, :preferred_amount, :preferred_flat_percent,
:preferred_minimal_amount, :preferred_normal_amount, :preferred_discount_amount,
:preferred_unit_from_list, :preferred_per_unit, :preferred_first_item,
:preferred_additional_item, :preferred_max_items
]
end
end
end

View File

@@ -9,17 +9,24 @@ module PermittedAttributes
def call
return @params[:order_cycle] if @params[:order_cycle].blank?
@params.require(:order_cycle).permit(
@params.require(:order_cycle).permit(attributes)
end
def self.basic_attributes
[
:name, :orders_open_at, :orders_close_at, :coordinator_id,
:preferred_product_selection_from_coordinator_inventory_only,
incoming_exchanges: permitted_exchange_attributes,
outgoing_exchanges: permitted_exchange_attributes,
schedule_ids: [], coordinator_fee_ids: []
)
]
end
private
def attributes
self.class.basic_attributes + [incoming_exchanges: permitted_exchange_attributes,
outgoing_exchanges: permitted_exchange_attributes]
end
def permitted_exchange_attributes
[
:id, :sender_id, :receiver_id, :enterprise_id, :incoming, :active,

View File

@@ -0,0 +1,21 @@
# frozen_string_literal: true
module PermittedAttributes
class PaymentMethod
def initialize(params)
@params = params
end
def call
@params.permit(
[:name, :description, :type, :active,
:environment, :display_on, :tag_list,
:preferred_enterprise_id, :preferred_server, :preferred_login, :preferred_password,
:calculator_type, :preferred_api_key,
:preferred_signature, :preferred_solution, :preferred_landing_page, :preferred_logourl,
:preferred_test_mode, :calculator_type, { distributor_ids: [] },
{ calculator_attributes: PermittedAttributes::Calculator.attributes }]
)
end
end
end

View File

@@ -19,7 +19,7 @@
.three.columns.alpha
= f.label "enterprise_preferred_shopfront_taxon_order", t('.shopfront_category_ordering')
%br
(top to bottom)
= t('.shopfront_category_ordering_note')
.eight.columns.omega
%textarea.fullwidth{ id: 'enterprise_preferred_shopfront_taxon_order', name: 'enterprise[preferred_shopfront_taxon_order]', rows: 6, 'ng-model' => 'Enterprise.preferred_shopfront_taxon_order', 'ofn-taxon-autocomplete' => '', 'multiple-selection' => 'true', placeholder: 'Category' }

View File

@@ -3,7 +3,7 @@
%meta{charset: 'utf-8'}/
%meta{name: 'viewport', content: "width=device-width,initial-scale=1.0"}/
%title= content_for?(:title) ? "#{yield(:title)} - #{Spree::Config[:site_name]}" : "#{t(:welcome_to)} #{Spree::Config[:site_name]}"
%title= content_for?(:title) ? "#{yield(:title)} - #{Spree::Config[:site_name]}".html_safe : "#{t(:welcome_to)} #{Spree::Config[:site_name]}"
- if Rails.env.production?
= favicon_link_tag "/favicon.ico"
- else

View File

@@ -1,6 +1,6 @@
%nav.top-bar.show-for-large-up{'data-topbar' => true}
%section.top-bar-section
%ul.left
%ul.nav-logo
%li.ofn-logo
%a{href: main_app.root_path}
%img{src: ContentConfig.logo.url}
@@ -10,7 +10,7 @@
= t 'powered_by'
%a{href: '/'}
= t 'title'
%ul.center
%ul.nav-main-menu
- [*1..7].each do |menu_number|
- menu_name = "menu_#{menu_number}"
- if ContentConfig[menu_name].present?
@@ -18,7 +18,7 @@
%a{href: t("#{menu_name}_url") }
%span.nav-primary
= t "#{menu_name}_title"
%ul.menu.icons.right
%ul.nav-icons-menu
- if OpenFoodNetwork::I18nConfig.selectable_locales.count > 1
= render 'shared/menu/language_selector'

View File

@@ -9,7 +9,7 @@
- if order.line_items.exists?
%fieldset#order-total.no-border-bottom{"data-hook" => "order_details_total"}
%legend= t(".order_total")
%legend{ align: 'center' }= t(".order_total")
%span.order-total= order.display_total
= form_for @order, url: admin_order_url(@order), method: :put do |f|

View File

@@ -1,6 +1,6 @@
- if adjustments.present?
%fieldset.no-border-bottom
%legend= title
%legend{ align: 'center' }= title
%table>
%thead
%tr

View File

@@ -54,8 +54,8 @@
%td.actions
- if can? :update, shipment
= link_to '', '#', :class => 'save-method icon_link icon-ok no-text with-tip', :data => { 'shipment-number' => shipment.number, :action => 'save' }, title: Spree.t('actions.save')
= link_to '', '#', :class => 'cancel-method icon_link icon-cancel no-text with-tip', :data => { :action => 'cancel' }, :title => Spree.t('actions.cancel')
= link_to '', '#', :class => 'save-method icon_link icon-ok no-text with-tip', :data => { 'shipment-number' => shipment.number, :action => 'save' }, title: I18n.t('actions.save')
= link_to '', '#', :class => 'cancel-method icon_link icon-cancel no-text with-tip', :data => { :action => 'cancel' }, :title => I18n.t('actions.cancel')
%tr.show-method.total
%td{ :colspan => "4" }
@@ -83,8 +83,8 @@
%td.actions
- if can? :update, shipment
= link_to '', '#', :class => 'save-tracking icon_link icon-ok no-text with-tip', :data => { 'shipment-number' => shipment.number, :action => 'save' }, :title => Spree.t('actions.save')
= link_to '', '#', :class => 'cancel-tracking icon_link icon-cancel no-text with-tip', :data => { :action => 'cancel' }, :title => Spree.t('actions.cancel')
= link_to '', '#', :class => 'save-tracking icon_link icon-ok no-text with-tip', :data => { 'shipment-number' => shipment.number, :action => 'save' }, :title => I18n.t('actions.save')
= link_to '', '#', :class => 'cancel-tracking icon_link icon-cancel no-text with-tip', :data => { :action => 'cancel' }, :title => I18n.t('actions.cancel')
%tr.show-tracking.total
%td{ :colspan => "5" }

View File

@@ -11,4 +11,4 @@
= f.text_field :value, class: 'autocomplete'
%td.actions
- if f.object.persisted?
= link_to_delete f.object, { url: admin_product_product_property_url(@product, f.object, @url_filters), no_text: true }
= link_to_delete f.object, { url: spree.admin_product_product_property_url(@product, f.object, @url_filters), no_text: true }

View File

@@ -1,3 +1,5 @@
= admin_inject_available_units
- content_for :page_actions do
%li= button_link_to t('admin.products.back_to_products_list'), "#{admin_products_path}#{(@url_filters.empty? ? "" : "#?#{@url_filters.to_query}")}", :icon => 'icon-arrow-left'
%li#new_product_link

View File

@@ -1,5 +1,7 @@
= render :partial => 'spree/admin/shared/product_sub_menu'
= render :partial => 'spree/shared/error_messages', :locals => { :target => @product }
= admin_inject_available_units
= form_for [:admin, @product], :html => { :multipart => true } do |f|
.twelve.columns.alpha
%fieldset.no-border-bottom{ id: "new_product" }

View File

@@ -4,13 +4,13 @@
:scope => 'date_picker',
:default => 'yy/mm/dd'),
:abbr_day_names => I18n.t(:abbr_day_names, :scope => :date),
:add => Spree.t(:add),
:add => I18n.t(:add, scope: :actions),
:are_you_sure_delete => Spree.t(:are_you_sure_delete),
:bill_address => Spree.t(:bill_address),
:bill_address => I18n.t(:bill_address),
:choose_a_customer => Spree.t(:choose_a_customer),
:confirm_delete => Spree.t(:confirm_delete),
:cut => Spree.t(:cut),
:destroy => Spree.t(:destroy),
:cut => I18n.t(:cut, scope: :actions),
:destroy => I18n.t(:destroy, scope: :actions),
:edit => Spree.t(:edit),
:loading => Spree.t(:loading),
:month_names => I18n.t(:month_names, :scope => :date).reject(&:blank?),
@@ -19,13 +19,13 @@
:datetime_ui_close_text => I18n.t('datetime_picker_ui.close_text'),
:datetime_ui_time_text => I18n.t('datetime_picker_ui.time_text'),
:name => Spree.t(:name),
:next => Spree.t(:next),
:paste => Spree.t(:paste),
:previous => Spree.t(:previous),
:remove => Spree.t(:remove),
:rename => Spree.t(:rename),
:next => I18n.t(:next),
:paste => I18n.t(:paste, scope: :actions),
:previous => I18n.t(:previous),
:remove => I18n.t(:remove),
:rename => I18n.t(:rename, scope: :actions),
:sku => Spree.t(:sku),
:value => Spree.t(:value)
:value => I18n.t(:value)
}.to_json
%>
</script>

View File

@@ -13,8 +13,8 @@
%col{ style: "width: 15%" }
%thead
%tr
%th= sort_link @search,:email, t(".user"), {}, {title: "users_email_title"}
%th= sort_link @search,:enterprise_limit, t(".enterprise_limit")
%th= sort_link [:spree, @search], :email, t(".user"), {}, {title: "users_email_title"}
%th= sort_link [:spree, @search], :enterprise_limit, t(".enterprise_limit")
%th.actions
%tbody
- @users.each do |user|
@@ -26,7 +26,9 @@
%td.user_enterprise_limit= user.enterprise_limit
%td.actions
= link_to_delete user, no_text: true
= paginate @users
- _with_routes Spree::Core::Engine.routes do
= paginate @users
- content_for :sidebar_title do
= t(".search")
- content_for :sidebar do

View File

@@ -7,7 +7,8 @@
%li
= button_link_to t("spree.new_zone"), new_object_url, icon: 'icon-plus', id: 'admin_new_zone_link'
= paginate @zones
- _with_routes Spree::Core::Engine.routes do
= paginate @zones
- if @zones.empty?
.no-objects-found
@@ -22,9 +23,9 @@
%col{style: "width: 15%"}/
%thead
%tr
%th= sort_link @search,:name, t("spree.name"), title: 'zones_order_by_name_title'
%th= sort_link [:spree, @search], :name, t("spree.name"), title: 'zones_order_by_name_title'
%th
= sort_link @search,:description, t("spree.description"), {}, {title: 'zones_order_by_description_title'}
= sort_link [:spree, @search], :description, t("spree.description"), {}, {title: 'zones_order_by_description_title'}
%th= t("spree.default_tax")
%th.actions
%tbody
@@ -38,4 +39,5 @@
%td.actions
= link_to_edit zone, no_text: true
= link_to_delete zone, no_text: true
= paginate @zones
- _with_routes Spree::Core::Engine.routes do
= paginate @zones

View File

@@ -14,6 +14,6 @@
= f.password_field :password, class: 'title'
%p
= f.label :password_confirmation, Spree.t(:confirm_password)
= f.label :password_confirmation, t(:password_confirmation)
%br
= f.password_field :password_confirmation, class: 'title'

View File

@@ -3,6 +3,9 @@ require_relative 'boot'
require 'rails/all'
require_relative "../lib/open_food_network/i18n_config"
require_relative '../lib/spree/core/environment'
require_relative '../lib/spree/core/mail_interceptor'
if defined?(Bundler)
# If you precompile assets before deploying to production, use this line
Bundler.require(*Rails.groups(:assets => %w(development test)))
@@ -20,6 +23,49 @@ module Openfoodnetwork
end
end
config.after_initialize do
# We need this here because the test env file loads before the Spree engine is loaded
Spree::Core::Engine.routes.default_url_options[:host] = 'test.host' if Rails.env == 'test'
end
# We reload the routes here
# so that the appended/prepended routes are available to the application.
config.after_initialize do
Rails.application.routes_reloader.reload!
end
initializer "spree.environment", before: :load_config_initializers do |app|
app.config.spree = Spree::Core::Environment.new
Spree::Config = app.config.spree.preferences # legacy access
end
initializer "spree.load_preferences", before: "spree.environment" do
::ActiveRecord::Base.include Spree::Preferences::Preferable
end
initializer "spree.register.payment_methods" do |app|
app.config.spree.payment_methods = [
Spree::Gateway::Bogus,
Spree::Gateway::BogusSimple,
Spree::PaymentMethod::Check
]
end
initializer "spree.mail.settings" do |_app|
Spree::Core::MailSettings.init
Mail.register_interceptor(Spree::Core::MailInterceptor)
end
# filter sensitive information during logging
initializer "spree.params.filter" do |app|
app.config.filter_parameters += [
:password,
:password_confirmation,
:number,
:verification_value
]
end
# Settings dependent on locale
#
# We need to set this config before the promo environment gets loaded and

View File

@@ -55,4 +55,3 @@ end
# Allows us to use _url helpers in Rspec
Rails.application.routes.default_url_options[:host] = 'test.host'
Spree::Core::Engine.routes.default_url_options[:host] = 'test.host'

View File

@@ -0,0 +1 @@
require "action_dispatch/request"

View File

@@ -1,3 +1,14 @@
Paperclip::Attachment.default_options[:source_file_options] = {
all: "-auto-orient"
}
url_adapters = [
"Paperclip::UriAdapter",
"Paperclip::HttpUrlProxyAdapter",
"Paperclip::DataUriAdapter"
]
# Remove Paperclip URL adapters from registered handlers
Paperclip.io_adapters.registered_handlers.delete_if do |_proc, adapter_class|
url_adapters.include? adapter_class.to_s
end

View File

@@ -3,11 +3,16 @@
# Your secret key for verifying the integrity of signed cookies.
# If you change this key, all old signed cookies will become invalid!
# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
Openfoodnetwork::Application.config.secret_token = if Rails.env.development? or Rails.env.test?
# no regular words or you'll be exposed to dictionary attacks.
secret_key = if Rails.env.development? or Rails.env.test?
('x' * 30) # Meets basic minimum of 30 chars.
else
ENV["SECRET_TOKEN"]
end
Openfoodnetwork::Application.config.secret_key_base = 'ceb1eb86c50285e696f899b2e7ea306d1ec1e81fe5c7af0e5cbc238bebe3fd60f19df7b9076fab836182821ebe14e41b64bdcdb4370520dc5bb711c1bc0ae616'
# Rails 4+ key for signing and encrypting cookies.
Openfoodnetwork::Application.config.secret_key_base = secret_key
# Legacy secret_token variable. This is still used directly for encryption.
Openfoodnetwork::Application.config.secret_token = secret_key

View File

@@ -6,7 +6,7 @@
# In order to initialize a setting do:
# config.setting_name = 'new value'
require "spree/core/environment"
require 'spree/core'
# Due to a bug in ActiveRecord we need to load the tagging code in Gateway which
# should have inherited it from its parent PaymentMethod.
@@ -37,9 +37,9 @@ Spree.config do |config|
end
# Attachments settings
Spree::Image.set_attachment_attributes(:path, ENV['ATTACHMENT_PATH']) if ENV['ATTACHMENT_PATH']
Spree::Image.set_attachment_attributes(:url, ENV['ATTACHMENT_URL']) if ENV['ATTACHMENT_URL']
Spree::Image.set_s3_attachment_definitions
Spree::Image.set_attachment_attribute(:path, ENV['ATTACHMENT_PATH']) if ENV['ATTACHMENT_PATH']
Spree::Image.set_attachment_attribute(:url, ENV['ATTACHMENT_URL']) if ENV['ATTACHMENT_URL']
Spree::Image.set_storage_attachment_attributes
# Spree 2.0 recommends explicitly setting this here when using spree_auth_devise
Spree.user_class = 'Spree::User'

View File

@@ -289,10 +289,16 @@ ar:
create_and_add_another: "إنشاء وإضافة آخر"
create: "انشاء"
cancel: "إلغاء"
resume: "اكمل"
save: "حفظ"
edit: "تعديل"
update: "تحديث"
delete: "حذف"
add: "إضافة"
cut: "قص"
paste: "لصق"
destroy: "الغاء"
rename: "إعادة تسمية"
admin:
begins_at: يبدأ عند
begins_on: يبدأ في
@@ -600,6 +606,8 @@ ar:
controls:
back_to_my_inventory: العودة إلى المخزون الخاص بي
orders:
edit:
order_sure_want_to: هل أنت متأكد أنك تريد %{event} هذا الطلب؟
invoice_email_sent: 'تم إرسال فاتورة البريد الإلكتروني'
order_email_resent: 'تم اعادة ارسال الطلب لبريدك الإلكتروني'
bulk_management:
@@ -648,6 +656,7 @@ ar:
invoice_text: أضف نصًا مخصصًا في نهاية الفواتير
terms_and_conditions: "الأحكام والشروط"
remove_terms_and_conditions: "إزالة الملف"
uploaded_on: "تم الرفع في"
contact:
name: اسم
name_placeholder: على سبيل المثال. برقوق غوستاف
@@ -755,6 +764,7 @@ ar:
للعملاء توقع فتحه مرة أخرى. يتم عرض هذا في متجرك فقط عندما لا يكون لديك
دورات طلبات نشطة (على سبيل المثال ، المتجر مغلق).
shopfront_category_ordering: "ترتيب فئة واجهة المتجر"
shopfront_category_ordering_note: "(من اعلى لاسفل)"
open_date: "تاريخ الفتح "
close_date: "تاريخ الاغلاق"
social:
@@ -1164,6 +1174,7 @@ ar:
cart: "سلة التسوق"
message_html: "لديك طلب لدورة الطلب هذه بالفعل. تحقق من %{cart} لرؤية العناصر التي طلبتها من قبل. يمكنك أيضًا إلغاء العناصر طالما كانت دورة الطلب مفتوحة."
terms_and_conditions:
message_html: "أوافق على %{terms_and_conditions_link} للبائع."
link_text: "الأحكام والشروط"
failed: "فشل الخروج. يرجى إعلامنا حتى نتمكن من معالجة طلبك."
shops:
@@ -1578,9 +1589,7 @@ ar:
hubs_distance: الأقرب إلى
hubs_distance_filter: "أرني المتاجر بالقرب من %{location}"
shop_changeable_orders_alert_html:
zero: لديك <a href='%{path}' target='_blank'>%{count} أوامر مع %{shop}</a> مفتوحة حاليًا للمراجعة. يمكنك إجراء تغييرات حتى %{oc_close}.
one: طلبك مع <a href='%{path}' target='_blank'>%{shop} / %{order}</a> مفتوح للمراجعة. يمكنك إجراء تغييرات حتى %{oc_close}.
two: لديك <a href='%{path}' target='_blank'>%{count} أوامر مع %{shop}</a> مفتوحة حاليًا للمراجعة. يمكنك إجراء تغييرات حتى %{oc_close}.
few: لديك <a href='%{path}' target='_blank'>%{count} أوامر مع %{shop}</a> مفتوحة حاليًا للمراجعة. يمكنك إجراء تغييرات حتى %{oc_close}.
many: لديك <a href='%{path}' target='_blank'>%{count} أوامر مع %{shop}</a> مفتوحة حاليًا للمراجعة. يمكنك إجراء تغييرات حتى %{oc_close}.
other: لديك <a href='%{path}' target='_blank'>%{count} أوامر مع %{shop}</a> مفتوحة حاليًا للمراجعة. يمكنك إجراء تغييرات حتى %{oc_close}.
@@ -1728,9 +1737,7 @@ ar:
orders_could_not_cancel: "عذرًا ، تعذر إلغاء الطلب"
orders_cannot_remove_the_final_item: "لا يمكن إزالة العنصر الأخير من الطلب ، يرجى إلغاء الطلب بدلاً من ذلك."
orders_bought_items_notice:
zero: "%{count} البنود الإضافية المؤكدة بالفعل لدورة الطلب هذه"
one: "تم تأكيد عنصر إضافي بالفعل لدورة الطلب هذه"
two: "%{count} البنود الإضافية المؤكدة بالفعل لدورة الطلب هذه"
one: تم بالفعل تأكيد عنصر إضافي لدورة الطلب هذه
few: "%{count} البنود الإضافية المؤكدة بالفعل لدورة الطلب هذه"
many: "%{count} البنود الإضافية المؤكدة بالفعل لدورة الطلب هذه"
other: "%{count} البنود الإضافية المؤكدة بالفعل لدورة الطلب هذه"
@@ -2406,6 +2413,14 @@ ar:
customer_tagged_rules_text: >
من خلال إنشاء قواعد متعلقة بوسم عميل معين ، يمكنك تجاوز السلوك الافتراضي
(سواء كان لإظهار أو إخفاء عناصر) للعملاء الذين لديهم وسم محدد.
terms_and_conditions_info:
title: "تحميل الشروط والأحكام"
message_1: "الشروط والأحكام هي العقد المبرم بينك وبين البائع والمتسوق. إذا قمت بتحميل ملف هنا ، يجب على المتسوقين قبول الشروط والأحكام الخاصة بك لإكمال عملية الدفع. بالنسبة للمتسوق ، سيظهر هذا على شكل مربع اختيار عند الخروج يجب تحديده من أجل متابعة عملية الدفع. نوصي بشدة بتحميل الشروط والأحكام بما يتماشى مع التشريعات الوطنية."
message_2: "سيُطلب من المتسوقين قبول البنود والشروط مرة واحدة فقط. ومع ذلك ، إذا قمت بتغيير الشروط والأحكام ، فسيُطلب من المتسوقين مرة أخرى قبولها قبل أن يتمكنوا من الدفع."
terms_and_conditions_warning:
title: "تحميل الشروط والأحكام"
message_1: "سيتعين على جميع المشترين الموافقة عليهم مرة واحدة عند الخروج. إذا قمت بتحديث الملف ، فسيتعين على جميع المشترين الموافقة عليهم مرة أخرى عند الخروج."
message_2: "بالنسبة للمشترين الذين لديهم اشتراكات ، يجب أن ترسل إليهم الشروط والأحكام (أو التغييرات عليها) عبر البريد الإلكتروني في الوقت الحالي ، ولن يخطرهم أي شيء بهذه الشروط والأحكام الجديدة."
panels:
save: حفظ
saved: تم الحفظ
@@ -2957,6 +2972,8 @@ ar:
delete: "حذف"
cannot_set_shipping_method_without_address: "لا يمكن ضبط طريقة الشحن حتى يتم تقديم تفاصيل العميل."
no_tracking_present: "لم يتم تقديم تفاصيل التتبع."
tracking: "تتبع"
tracking_number: "أرقام التتبع"
order_total: "مجموع الطلب "
customer_details: "تفاصيل العميل"
customer_search: "بحث العملاء"
@@ -2978,6 +2995,7 @@ ar:
adjustments: "التعديلات"
continue: "تابع"
fill_in_customer_info: "يرجى ملء معلومات العملاء"
credit_card: "بطاقة ائتمان"
new_payment: "دفعة جديد"
capture: "إلتقاط"
void: "فارغ"
@@ -2989,6 +3007,8 @@ ar:
server: "الخادم"
test_mode: "وضع الاختبار"
logourl: "وحدة"
are_you_sure_delete: "هل أنت متأكد أنك تريد حذف هذا السجل؟"
confirm_delete: "تأكيد الحذف"
configurations: "تهيئة"
general_settings: "الاعدادات العامة"
site_name: "اسم الموقع"
@@ -3098,6 +3118,7 @@ ar:
has_no_shipped_units: "لا يوجد لديه طلبات مشحونة"
successfully_created: '%{resource} تم إنشاؤه بنجاح!'
successfully_updated: 'تم تحديث %{resource} بنجاح!'
payment_method: "طريقة الدفع او السداد"
payment_processing_failed: "لا يمكن معالجة الدفع ، يرجى التحقق من التفاصيل التي أدخلتها"
not_available: "غير متاح"
order_populator:
@@ -3107,9 +3128,7 @@ ar:
shared:
error_messages:
errors_prohibited_this_record_from_being_saved:
zero: "منعت أخطاء %{count} حفظ هذا السجل:"
one: "حظر خطأ واحد حفظ هذا السجل:"
two: "منعت أخطاء %{count} حفظ هذا السجل:"
one: "خطأ 1 منع حفظ هذا السجل:"
few: "منعت أخطاء %{count} حفظ هذا السجل:"
many: "منعت أخطاء %{count} حفظ هذا السجل:"
other: "منعت أخطاء %{count} حفظ هذا السجل:"
@@ -3150,7 +3169,6 @@ ar:
index:
inherits_properties_checkbox_hint: "وراثة الخصائص من %{supplier}؟ (ما لم يتم تجاوزه أعلاه)"
add_product_properties: "إضافة خصائص المنتج"
select_from_prototype: "حدد من النموذج الأولي"
properties:
index:
properties: "الخصائص"
@@ -3243,6 +3261,8 @@ ar:
active_products:
zero: "ليس لديك أي منتجات نشطة."
one: "لديك منتج نشط واحد"
few: "لديك %{count} من المنتجات النشطة"
many: "لديك %{count} من المنتجات النشطة"
other: "لديك %{count} من المنتجات النشطة"
order_cycles:
order_cycles: "دورات الطلب"
@@ -3250,6 +3270,8 @@ ar:
you_have_active:
zero: "ليس لديك أي دورات طلب نشطة."
one: "لديك دورة طلب نشطة واحدة."
few: "لديك %{count} دورات طلب نشط."
many: "لديك %{count} دورات طلب نشط."
other: "لديك %{count} دورات طلب نشط."
manage_order_cycles: "ادارة دورات الطلب"
shipping_methods:
@@ -3470,7 +3492,7 @@ ar:
remember_this_card: تذكر هذه البطاقة؟
date_picker:
format: '٪ س-٪ م-%d'
js_format: 'يوم-شهر-سنة'
js_format: 'yy-mm-dd'
orders:
error_flash_for_unavailable_items: "عنصر في سلة التسوق الخاصة بك أصبح غير متوفر. يرجى تحديث الكميات المحددة."
edit:

View File

@@ -289,10 +289,16 @@ ca:
create_and_add_another: "Crea i afegeix-ne una altra"
create: "Crear"
cancel: "Cancel·lar"
resume: "Continuar"
save: "Desa"
edit: "Editar"
update: "Actualitzar"
delete: "Suprimir"
add: "Afegeix"
cut: "Tallar"
paste: "Enganxar"
destroy: "Eliminar"
rename: "Reanomenar"
admin:
begins_at: Comença a
begins_on: Comença
@@ -351,6 +357,7 @@ ca:
has_n_rules: "té%{num} regles"
unsaved_confirm_leave: "Hi ha canvis no desats canviats en aquesta pàgina. Continua sense desar?"
unsaved_changes: "Teniu canvis sense desar"
available_units: "Unitats disponibles"
shopfront_settings:
embedded_shopfront_settings: "Configuració de botiga incrustada"
enable_embedded_shopfronts: "Habilita les botigues incrustades"
@@ -410,6 +417,7 @@ ca:
search_by_email: "Cerca per correu electrònic/codi ..."
guest_label: "Fer comanda com a convidat"
credit_owed: "Crèdit a deure"
balance_due: "A pagar"
destroy:
has_associated_orders: "S'ha produït un error en suprimir: la consumidora té comandes associades amb la seva botiga"
contents:
@@ -598,6 +606,8 @@ ca:
controls:
back_to_my_inventory: Torna al meu inventari
orders:
edit:
order_sure_want_to: Esteu segur que voleu %{event} aquesta comanda?
invoice_email_sent: 'S''ha enviat el correu electrònic de la factura'
order_email_resent: 'S''ha reenviat el correu electrònic de la comanda'
bulk_management:
@@ -646,6 +656,7 @@ ca:
invoice_text: Afegeix text personalitzat al final de les factures
terms_and_conditions: "Termes i condicions"
remove_terms_and_conditions: "Elimina el fitxer"
uploaded_on: "carregat el"
contact:
name: Nom
name_placeholder: 'p. ex: Josep Ribes'
@@ -757,6 +768,7 @@ ca:
no hi hagi cicles de comanda actius (és a dir, quan la botiga estigui
tancada).
shopfront_category_ordering: "Ordre de les categories de la botiga"
shopfront_category_ordering_note: "(de dalt a baix)"
open_date: "Data d'obertura"
close_date: "Data de tancament"
social:
@@ -1166,6 +1178,7 @@ ca:
cart: "cistella"
message_html: "Ja teniu una comanda per a aquest cicle de comanda. Consulteu %{cart} per veure els articles que heu demanat anteriorment. També podeu cancel·lar articles sempre que el cicle de comanda estigui obert."
terms_and_conditions:
message_html: "Accepto el %{terms_and_conditions_link} del venedor."
link_text: "Termes i condicions"
failed: "La comanda ha fallat. Informeu-nos perquè puguem processar la vostra comanda."
shops:
@@ -1580,7 +1593,9 @@ ca:
hubs_distance: El més proper a
hubs_distance_filter: "Mostra'm botigues properes a%{location}"
shop_changeable_orders_alert_html:
one: El vostre ordre amb <a href='%{path}' target='_blank'> %{shop} / %{order} </ a> està obert per a la seva revisió. Podeu fer canvis fins %{oc_close}.
one: La vostra comanda amb <a href='%{path}' target='_blank'>%{shop} / %{order}</a> està oberta per revisió. Podeu fer canvis fins %{oc_close}.
few: Tens <a href='%{path}' target='_blank'> %{count} comandes amb %{shop} </a> actualment obertes per a la seva revisió. Pots fer canvis fins %{oc_close}.
many: Tens <a href='%{path}' target='_blank'> %{count} comandes amb %{shop} </a> actualment obertes per a la seva revisió. Pots fer canvis fins %{oc_close}.
other: Tens <a href='%{path}' target='_blank'> %{count} comandes amb %{shop} </a> actualment obertes per a la seva revisió. Pots fer canvis fins %{oc_close}.
orders_changeable_orders_alert_html: S'ha confirmat aquesta comanda però pots fer-hi canvis fins a <strong> %{oc_close} </strong>.
products_clear: Netejar
@@ -1726,7 +1741,9 @@ ca:
orders_could_not_cancel: "Disculpa, no s'ha pogut cancel·lar la teva comanda "
orders_cannot_remove_the_final_item: "No es pot eliminar l'article final d'una comanda, si us plau, en comptes d'això cancel·leu la comanda."
orders_bought_items_notice:
one: "Ja s'ha confirmat un element addicional per al cicle d'aquest ordre"
one: Ja s'ha confirmat un article addicional per a aquest cicle de comanda
few: "%{count}articles addicionals confirmats per a aquest cicle de comandes"
many: "%{count}articles addicionals confirmats per a aquest cicle de comandes"
other: "%{count}articles addicionals confirmats per a aquest cicle de comandes"
orders_bought_edit_button: Edita articles confirmats
orders_bought_already_confirmed: "* ja confirmat"
@@ -2406,6 +2423,14 @@ ca:
En crear regles relacionades amb una etiqueta de client específica,
podeu anul·lar el comportament predeterminat (ja sigui per mostrar o
ocultar elements) per als clients amb l'etiqueta especificada.
terms_and_conditions_info:
title: "S'estan penjant els termes i condicions"
message_1: "Els Termes i condicions són el contracte entre el venedor i el comprador. Si pengeu un fitxer aquí, els compradors han dacceptar els vostres Termes i condicions per completar el pagament. Per al comprador, apareixerà com a casella de selecció a la comanda que sha de marcar per continuar amb la compra. Us recomanem que pengeu els Termes i condicions d'acord amb la legislació nacional."
message_2: "Els compradors només hauran dacceptar els Termes i condicions una vegada. Tanmateix, si canvieu els vostres Termes i condicions, els compradors hauran de tornar a acceptar-los abans de poder fer la comanda."
terms_and_conditions_warning:
title: "S'estan penjant els termes i condicions"
message_1: "Tots els compradors hauran dacceptar-los al fer la comanda. Si actualitzeu el fitxer, tots els compradors hauran dacceptar-los de nou a la finalització de la compra."
message_2: "Per als compradors que tinguin subscripcions, heu denviar-los per correu electrònic els Termes i condicions (o els canvis que shi apliquen) per ara, res els notificarà sobre aquests nous Termes i condicions."
panels:
save: DESA
saved: DESAT
@@ -2863,6 +2888,8 @@ ca:
delete: "Suprimir"
cannot_set_shipping_method_without_address: "No es pot establir el mètode d'enviament fins que no es proporcionin les dades del client."
no_tracking_present: "No es proporcionen dades de seguiment."
tracking: "Seguiment"
tracking_number: "Número de seguiment"
order_total: "Total comanda"
customer_details: "Detalls de la consumidora"
customer_search: "Cerca la consumidora"
@@ -2884,6 +2911,7 @@ ca:
adjustments: "Ajustaments"
continue: "Continua"
fill_in_customer_info: "Ompliu la informació de la consumidora"
credit_card: "Targeta de crèdit"
new_payment: "Nou pagament"
capture: "Pagat"
void: "Pendent"
@@ -2895,6 +2923,8 @@ ca:
server: "Servidor"
test_mode: "Mode de prova"
logourl: "URL del logo"
are_you_sure_delete: "Esteu segur que voleu suprimir aquest registre?"
confirm_delete: "Confirmeu l'eliminació"
configurations: "Configuracions"
general_settings: "Configuració general"
site_name: "Nom del lloc"
@@ -3004,6 +3034,7 @@ ca:
has_no_shipped_units: "no té cap unitat enviada"
successfully_created: '%{resource} s''ha creat correctament.'
successfully_updated: '%{resource} s''ha actualitzat correctament.'
payment_method: "Mètode de pagament"
payment_processing_failed: "El pagament no s'ha pogut processar, comproveu les dades que heu introduït"
not_available: "No disponible"
order_populator:
@@ -3013,7 +3044,9 @@ ca:
shared:
error_messages:
errors_prohibited_this_record_from_being_saved:
one: "Un error va prohibir guardar aquest registre:"
one: "1 error ha impedit que es guardi aquest registre:"
few: "%{count} errors han impedit guardar aquest registre:"
many: "%{count} errors han impedit guardar aquest registre:"
other: "%{count} errors han impedit guardar aquest registre:"
there_were_problems_with_the_following_fields: "Hi ha hagut problemes amb els camps següents"
payments_list:
@@ -3052,7 +3085,6 @@ ca:
index:
inherits_properties_checkbox_hint: "heredar propietats de %{supplier}? (llevat que es sobreescrigui a dalt)"
add_product_properties: "Afegeix propietats del producte"
select_from_prototype: "Seleccioneu d'un prototip"
properties:
index:
properties: "Propietats"
@@ -3145,6 +3177,8 @@ ca:
active_products:
zero: "No tens cap producte actiu."
one: "Teniu un producte actiu"
few: "Teniu %{count} productes actius"
many: "Teniu %{count} productes actius"
other: "Teniu %{count} productes actius"
order_cycles:
order_cycles: "Cicles de comanda"
@@ -3152,6 +3186,8 @@ ca:
you_have_active:
zero: "No tens cicles de comanda actius."
one: "Tens un cicle de comanda actiu."
few: "Tens %{count} cicles de comanda actius"
many: "Tens %{count} cicles de comanda actius"
other: "Tens %{count} cicles de comanda actius"
manage_order_cycles: "GESTIONA ELS CICLES DE COMANDA"
shipping_methods:
@@ -3426,6 +3462,7 @@ ca:
issue_text: |
Si l'URL anterior no funciona, prova de copiar-lo i enganxar-lo al navegador.
Si continues tenint problemes, no dubtis en contactar-nos.
subject: "Instruccions per restablir la contrasenya"
confirmation_instructions:
subject: "Si us plau confirma el teu compte d'OFN"
shipment_mailer:

3614
config/locales/cy.yml Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -14,6 +14,7 @@ de_DE:
spree/payment:
amount: Betrag
state: Status
source: Quelle
spree/product:
primary_taxon: "Produktkategorie"
supplier: "Anbieter"
@@ -23,6 +24,9 @@ de_DE:
spree/credit_card:
base: "Kreditkarte"
number: "Nummer"
month: "Monat"
verification_value: "Überprüfungswert"
year: "Jahr"
order_cycle:
orders_close_at: Schlussdatum
variant_override:
@@ -120,6 +124,10 @@ de_DE:
integer_array_validator:
not_array_error: "muss ein Array sein"
invalid_element_error: "muss nur gültige Ganzzahlen enthalten"
datetime_picker_ui:
current_text: Jetzt
close_text: Erledigt
time_text: Zeit
enterprise_mailer:
confirmation_instructions:
subject: "Bitte bestätigen Sie die E-Mail-Adresse für %{enterprise}"
@@ -184,6 +192,7 @@ de_DE:
explainer: Die automatische Verarbeitung dieser Aufträge ist aus einem unbekannten Grund fehlgeschlagen. Dies sollte nicht geschehen, bitte kontaktieren Sie uns, wenn Sie dies sehen.
home: "OFN"
title: "Open Food Network"
welcome_to: "Willkommen bei"
site_meta_description: "Wir starten ganz grundsätzlich. Mit LandwirtInnen und GärtnerInnen, die stolz und ehrlich ihre Geschichte erzählen. Mit Lieferanten, die Menschen fair und vertrauenswürdig mit Produkten verbinden. Mit KonsumentInnen, die glauben, daß ihre wöchentlichen Einkaufsentscheidungen..."
search_by_name: Suche nach Name oder Ort...
producers_join: 'Wir laden Deutsche Produzenten ein, jetzt dem Open Food Network beizutreten. '
@@ -226,6 +235,7 @@ de_DE:
enterprises: Unternehmen
enterprise_groups: Gruppen
reports: Berichte
listing_reports: Packberichte
variant_overrides: Katalog
import: Importieren
spree_products: Spree Produkte
@@ -272,14 +282,23 @@ de_DE:
on hand: "Verfügbar"
ship: "Liefern"
shipping_category: "Versandkategorie"
height: "Höhe"
width: "Breite"
depth: "Tiefe"
actions:
create_and_add_another: "Erstellen und weitere hinzufügen"
create: "Neu"
cancel: "Abbrechen"
resume: "Fortsetzen"
save: "Speichern"
edit: "Bearbeiten"
update: "Aktualisieren"
delete: "Löschen"
add: "Hinzufügen"
cut: "Ausschneiden"
paste: "Einfügen"
destroy: "Zerstören"
rename: "Umbenennen"
admin:
begins_at: Beginnt um
begins_on: Beginnt am
@@ -327,6 +346,7 @@ de_DE:
show_n_more: '%{num} mehr zeigen'
choose: "Wählen..."
please_select: Bitte auswählen...
column_save_as_default: Als Standard speichern
columns: Spalten
actions: Aktionen
viewing: "Zeigt: %{current_view_name}"
@@ -337,6 +357,7 @@ de_DE:
has_n_rules: "hat %{num} Regel(n)"
unsaved_confirm_leave: "Es gibt ungespeicherte Änderungen auf dieser Seite. Möchten Sie ohne Speichern fortfahren?"
unsaved_changes: "Sie haben ungespeicherte Änderungen"
available_units: "Verfügbare Einheiten"
shopfront_settings:
embedded_shopfront_settings: "Eingebettete Ladeneinstellungen"
enable_embedded_shopfronts: "Eingebettete Läden erlauben"
@@ -371,7 +392,10 @@ de_DE:
title: "Matomo-Einstellungen"
matomo_url: "Matomo-URL"
matomo_site_id: "Matomo-Site-ID"
matomo_tag_manager_url: "Matomo Tag Manager URL"
info_html: "Matomo ist eine Web- und Mobile Analytics-Anwendung. Sie können Matomo entweder lokal hosten oder einen in der Cloud gehosteten Dienst verwenden. Weitere Informationen finden Sie unter <a href='http://matomo.org' target='_blank'>matomo.org</a> ."
config_instructions_html: "Hier können Sie die OFN Matomo Integration konfigurieren. Die unten angegebene Matomo-URL sollte auf die Matomo-Instanz verweisen, an die die Benutzerverfolgungsinformationen gesendet werden. Wenn es leer bleibt, wird das Matomo-Benutzer-Tracking deaktiviert. Das Feld Site-ID ist nicht obligatorisch, aber nützlich, wenn Sie mehr als eine Website in einer einzelnen Matomo-Instanz verfolgen. Es kann auf der Matomo-Instanzkonsole gefunden werden."
config_instructions_tag_manager_html: "Durch Festlegen der Matomo Tag Manager-URL wird Matomo Tag Manager aktiviert. Mit diesem Tool können Sie Analyseereignisse einrichten. Die Matomo Tag Manager-URL wird aus dem Abschnitt Installationscode von Matomo Tag Manager kopiert. Stellen Sie sicher, dass Sie den richtigen Container und die richtige Umgebung auswählen, da diese Optionen die URL ändern."
customers:
index:
new_customer: "Neuer Kunde"
@@ -392,6 +416,8 @@ de_DE:
confirm_delete: "Sicher zu löschen?"
search_by_email: "Suche nach Email/Kode"
guest_label: "Gäste Kasse"
credit_owed: "Gutschrift geschuldet"
balance_due: "Restbetrag fällig"
destroy:
has_associated_orders: "Löschen fehlgeschlagen: Kunde hat Bestellungen mit diesem Laden"
contents:
@@ -478,6 +504,7 @@ de_DE:
line_number: "Zeile %{number}:"
encoding_error: "Bitte überprüfen Sie die Spracheinstellung Ihrer Quelldatei und stellen Sie sicher, dass sie mit der UTF-8-Kodierung gespeichert wird"
unexpected_error: "Beim Produktimport ist beim Öffnen der Datei ein unerwarteter Fehler aufgetreten: %{error_message}"
malformed_csv: "Beim Produktimport ist eine fehlerhafte CSV aufgetreten: %{error_message}"
index:
notice: "Beachten"
beta_notice: "Diese Funktion befindet sich noch in der Beta-Phase: Während der Verwendung können Fehler auftreten. Bitte zögern Sie nicht, den Support zu kontaktieren."
@@ -579,6 +606,8 @@ de_DE:
controls:
back_to_my_inventory: Zurück zu meinem Katalog
orders:
edit:
order_sure_want_to: Sind Sie sicher, dass Sie diese Bestellung %{event} möchten?
invoice_email_sent: 'Rechnungs-E-Mail wurde gesendet'
order_email_resent: 'Bestellungs-E-Mail wurde erneut gesendet'
bulk_management:
@@ -588,6 +617,7 @@ de_DE:
order_date: "Abgeschlossen am"
max: "Max"
product_unit: "Produkt: Einheit"
weight_volume: "Gewicht / Volumen (g)"
ask: "Fragen?"
page_title: "Massenbearbeitung von Bestellungen"
actions_delete: "Ausgewählte löschen"
@@ -624,6 +654,9 @@ de_DE:
acn_placeholder: z.B. 93815/08152
display_invoice_logo: Logo in Rechnungen anzeigen
invoice_text: Fügen Sie benutzerdefinierten Text am Ende der Rechnungen hinzu
terms_and_conditions: "Geschäftsbedingungen"
remove_terms_and_conditions: "Datei löschen"
uploaded_on: "hochgeladen am"
contact:
name: Name
name_placeholder: z.B. Gustav Pflaume
@@ -692,6 +725,7 @@ de_DE:
ofn_uid_tip: Die eindeutige ID, mit der das Unternehmen in Open Food Network identifiziert wird.
shipping_methods:
name: "Name"
applies: "Aktiv?"
manage: "Lieferarten verwalten"
create_button: "Neue Lieferart erstellen"
create_one_button: "Erstelle jetzt eine"
@@ -714,6 +748,8 @@ de_DE:
enable_subscriptions_tip: "Abo-Funktionalität aktivieren?"
enable_subscriptions_false: "deaktiviert"
enable_subscriptions_true: "aktiviert"
customer_names_in_reports: "Kundennamen in Berichten"
customer_names_tip: "Ermöglichen Sie Ihren Lieferanten, die Namen Ihrer Kunden in Berichten anzuzeigen"
customer_names_false: "deaktiviert"
customer_names_true: "aktiviert"
shopfront_message: "Laden-Nachricht"
@@ -731,6 +767,7 @@ de_DE:
wieder geöffnet wird. Dies wird in Ihrem Laden nur angezeigt, wenn Sie
keine aktiven Bestellzyklen haben (d.h. Laden ist geschlossen).
shopfront_category_ordering: "Ordnung der Produktkategorien im Laden"
shopfront_category_ordering_note: "(oben nach unten)"
open_date: "Öffnungsdatum"
close_date: "Abschlussdatum"
social:
@@ -865,6 +902,7 @@ de_DE:
incoming: "Eingehend"
supplier: "Anbieter"
products: "Produkte"
receival_details: "Empfangsdetails"
fees: "Gebühren"
save: "Speichern"
save_and_next: "Speichern und weiter"
@@ -1130,12 +1168,17 @@ de_DE:
destroy_attachment_does_not_exist: "Logo existiert nicht"
enterprise_promo_image:
destroy_attachment_does_not_exist: "Webebild existiert nicht"
enterprise_terms_and_conditions:
destroy_attachment_does_not_exist: "AGB-Datei existiert nicht"
orders:
failed_to_update: "Bestellung konnte nicht aktualisiert werden"
checkout:
already_ordered:
cart: "Warenkorb"
message_html: "Sie haben bereits eine Bestellung für diesen Bestellzyklus. Überprüfen Sie den %{cart}, um die Artikel zu sehen, die Sie zuvor bestellt haben. Sie können Artikel auch stornieren, solange der Bestellzyklus geöffnet ist."
terms_and_conditions:
message_html: "Ich stimme dem %{terms_and_conditions_link} des Verkäufers zu."
link_text: "Geschäftsbedingungen"
failed: "Die Bestellung ist fehlgeschlagen. Bitte geben Sie uns Bescheid, damit wir Ihre Bestellung trotzdem bearbeiten können."
shops:
hubs:
@@ -1148,7 +1191,12 @@ de_DE:
cart: "Wagen"
cart_sidebar:
checkout: "Kasse"
edit_cart: "Warenkorb bearbeiten"
items_in_cart_singular: "%{num} Artikel in Ihrem Warenkorb"
items_in_cart_plural: "%{num} Artikel in Ihrem Warenkorb"
close: "Abschließen"
cart_empty: "Ihr Warenkorb ist leer"
take_me_shopping: "Bring mich einkaufen!"
signed_in:
profile: "Profil"
mobile_menu:
@@ -1177,7 +1225,17 @@ de_DE:
messages:
customer_required:
login: "Anmeldung"
signup: "Anmelden"
contact: "Kontakt"
require_customer_login: "Nur angemeldete Kunden können auf diesen Shop zugreifen."
require_login_html: "Wenn Sie bereits ein angemeldeter Kunde sind, fahren Sie mit %{login} oder %{signup} fort."
require_login_2_html: "Möchten Sie hier einkaufen? Bitte %{contact} %{enterprise} und fragen Sie nach dem Beitritt."
require_customer_html: "Wenn Sie hier einkaufen möchten, fragen Sie bitte %{contact} %{enterprise} nach dem Beitritt."
select_oc:
select_oc_html: "Bitte <span class='highlighted'>wählen</span> Sie <span class='highlighted'>, wann Sie Ihre Bestellung wünschen, um</span> zu sehen, welche Produkte verfügbar sind."
products:
summary:
bulk: "Bulk"
card_could_not_be_updated: Die Karte konnte nicht aktualisiert werden
card_could_not_be_saved: Karte konnte nicht gespeichert werden
spree_gateway_error_flash_for_checkout: "Bei den Zahlungsinformationen ist ein Problem aufgetreten: %{error}"
@@ -1241,7 +1299,7 @@ de_DE:
email: 'E-Mail:'
phone: Telefonnummer
next: Weiter
address: Adresse
address: Straße + Hausnummer
address_placeholder: z.B. Gartenstrasse 123
address2: Adresse (Fortsetzung)
city: Ort
@@ -1439,12 +1497,12 @@ de_DE:
email_signature: "%{sitename} Team"
email_confirm_customer_greeting: "Hallo %{name},"
email_confirm_customer_intro_html: "Vielen Dank für ihren Einkauf bei <strong> %{distributor} </strong>!"
email_confirm_customer_number_html: "Bestellbestätigung <strong> # %{number} </ strong>"
email_confirm_customer_details_html: "Hier sind Ihre Bestelldetails von <strong> %{distributor} </ strong>:"
email_confirm_customer_number_html: "<strong>Bestellbestätigung # %{number}</strong>"
email_confirm_customer_details_html: "Hier sind Ihre <strong>Bestelldaten</strong> von <strong>%{distributor}</strong> :"
email_confirm_customer_signoff: "Mit freundlichen Grüßen,"
email_confirm_shop_greeting: "Hallo %{name},"
email_confirm_shop_order_html: "Gut gemacht! Sie haben eine neue Bestellung für <strong> %{distributor} </ strong>!"
email_confirm_shop_number_html: "Bestellbestätigung <strong> # %{number} </ strong>"
email_confirm_shop_number_html: "<strong>Bestellbestätigung # %{number}</strong>"
email_order_summary_item: "Artikel"
email_order_summary_quantity: "Menge"
email_order_summary_sku: "Artikelnummer"
@@ -1457,7 +1515,7 @@ de_DE:
email_payment_summary: Zahlungsübersicht
email_payment_method: "Bezahlen per:"
email_so_placement_intro_html: "Sie haben eine neue Bestellung mit <strong> %{distributor} </ strong>"
email_so_placement_details_html: "Hier sind die Details Ihrer Bestellung für <strong> %{distributor} </ strong>:"
email_so_placement_details_html: "Hier sind die Details Ihrer Bestellung für <strong>%{distributor}</strong> :"
email_so_placement_changes: "Leider waren nicht alle von Ihnen angeforderten Produkte verfügbar. Die von Ihnen angeforderten Originalmengen sind unten durchgestrichen."
email_so_payment_success_intro_html: "Eine automatische Zahlung wurde für Ihre Bestellung von <strong> %{distributor} </ strong> verarbeitet."
email_so_placement_explainer_html: "Diese Bestellung wurde automatisch für Sie erstellt."
@@ -1470,7 +1528,7 @@ de_DE:
email_so_confirmation_details_html: "Hier finden Sie alles, was Sie über Ihre Bestellung wissen müssen: <strong> %{distributor} </ strong>:"
email_so_empty_intro_html: "Wir haben versucht, eine neue Bestellung mit <strong> %{distributor} </ strong> zu platzieren, hatten aber einige Probleme ..."
email_so_empty_explainer_html: "Leider war keines der von Ihnen bestellten Produkte verfügbar, daher wurde keine Bestellung aufgegeben. Die von Ihnen angeforderten Originalmengen sind unten durchgestrichen."
email_so_empty_details_html: "Hier sind die Details der nicht platzierten Reihenfolge für <strong> %{distributor} </ strong>:"
email_so_empty_details_html: "Hier sind die Details der nicht platzierten Bestellung für <strong>%{distributor}</strong> :"
email_so_failed_payment_intro_html: "Wir haben versucht, eine Zahlung zu verarbeiten, hatten aber einige Probleme ..."
email_so_failed_payment_explainer_html: "Die Zahlung für Ihr Abonnement mit <strong> %{distributor} </ strong> ist aufgrund eines Problems mit Ihrer Kreditkarte fehlgeschlagen. <strong> %{distributor} </ strong> wurde über diese fehlgeschlagene Zahlung benachrichtigt."
email_so_failed_payment_details_html: "Hier sind die Details des vom Zahlungs-Gateway bereitgestellten Fehlers:"
@@ -1478,7 +1536,7 @@ de_DE:
email_shipping_delivery_time: "Lieferung am:"
email_shipping_delivery_address: "Lieferadresse:"
email_shipping_collection_details: Sammlungsdetails
email_shipping_collection_time: "Bereit für die Sammlung:"
email_shipping_collection_time: "Bereit zur Abholung"
email_shipping_collection_instructions: "Sammlung Anweisungen:"
email_special_instructions: "Deine Noten:"
email_signup_greeting: Hallo!
@@ -1494,7 +1552,7 @@ de_DE:
set_a_password: "Sie werden dann aufgefordert, ein Kennwort festzulegen, bevor Sie das Unternehmen verwalten können."
mistakenly_sent: "Nicht sicher, warum Sie diese E-Mail erhalten haben? Bitte kontaktieren Sie %{owner_email} für weitere Informationen."
producer_mail_greeting: "Liebe/r"
producer_mail_text_before: "Wir haben jetzt alle Verbraucherbestellungen für den nächsten Essenstropfen."
producer_mail_text_before: "Wir haben jetzt alle Verbraucherbestellungen für die nächste Auslieferung."
producer_mail_order_text: "Hier finden Sie eine Zusammenfassung der Bestellungen für Ihre Produkte:"
producer_mail_delivery_instructions: "Lagerabholung / Lieferanweisungen:"
producer_mail_signoff: "Danke und die besten Wünsche"
@@ -1534,16 +1592,24 @@ de_DE:
hubs_distance: Am nächsten
hubs_distance_filter: "Läden in der Nähe von %{location}suchen"
shop_changeable_orders_alert_html:
one: Ihre Bestellung mit <a href='%{path}' target='_blank'> %{shop} / %{order} </a> kann bearbeitet werden. Sie können Änderungen bis %{oc_close} vornehmen.
other: Sie haben <a href='%{path}' target='_blank'> %{count} Bestellungen mit %{shop} </a> zur Überprüfung geöffnet. Sie können Änderungen bis %{oc_close} vornehmen.
one: Ihre Bestellung mit <a href='%{path}' target='_blank'>%{shop} / %{order} kann</a> überprüft werden. Sie können Änderungen bis %{oc_close} vornehmen.
few: Sie haben <a href='%{path}' target='_blank'>%{count} Bestellungen mit %{shop}, die</a> derzeit zur Überprüfung geöffnet sind. Sie können Änderungen bis %{oc_close} vornehmen.
many: Sie haben <a href='%{path}' target='_blank'>%{count} Bestellungen mit %{shop}, die</a> derzeit zur Überprüfung geöffnet sind. Sie können Änderungen bis %{oc_close} vornehmen.
other: Sie haben <a href='%{path}' target='_blank'>%{count} Bestellungen mit %{shop}, die</a> derzeit zur Überprüfung geöffnet sind. Sie können Änderungen bis %{oc_close} vornehmen.
orders_changeable_orders_alert_html: Diese Bestellung wurde bestätigt, Sie können jedoch bis <strong> %{oc_close} </ strong> Änderungen vornehmen.
products_clear: Leeren
products_showing: "Angezeigt:"
products_results_for: "Ergebnisse für"
products_or: "oder"
products_and: "und"
products_filters_in: "im"
products_with: mit
products_search: "Suche..."
products_filter_by: "Filtern nach"
products_filter_selected: "ausgewählt"
products_filter_heading: "Filter"
products_filter_clear: "Leeren"
products_filter_done: "Erledigt"
products_loading: "Lade Produkte..."
products_updating_cart: "Einkaufswagen aktualisieren..."
products_cart_empty: "Leerer Einkaufswagen"
@@ -1554,6 +1620,8 @@ de_DE:
products_update_error_msg: "Speichern Fail"
products_update_error_data: "Speichern wegen ungültiger Daten fehlgeschlagen:"
products_changes_saved: "Änderungen gespeichert"
products_no_results_html: "Für %{query} wurden leider keine Ergebnisse gefunden"
products_clear_search: "Suche zurücksetzen"
search_no_results_html: "Es wurden leider keine Ergebnisse für %{query} gefunden. Versuchen Sie eine andere Suche?"
components_profiles_popover: "Profile haben keinen Laden im Open Food Network, verkaufen möglicherweise aber anderswo online oder offline."
components_profiles_show: "Profile anzeigen"
@@ -1672,7 +1740,9 @@ de_DE:
orders_could_not_cancel: "Entschuldigung, die Bestellung konnte nicht storniert werden"
orders_cannot_remove_the_final_item: "Der letzte Artikel aus einer Bestellung kann nicht entfernt werden. Bitte stornieren Sie stattdessen die Bestellung."
orders_bought_items_notice:
one: "Für diesen Bestellzyklus ist bereits eine zusätzliche Position bestätigt"
one: Für diesen Bestellzyklus ist bereits ein zusätzlicher Artikel bestätigt
few: "%{count} zusätzliche Artikel, die bereits für diesen Bestellzyklus bestätigt wurden"
many: "%{count} zusätzliche Artikel, die bereits für diesen Bestellzyklus bestätigt wurden"
other: "%{count} zusätzliche Artikel, die bereits für diesen Bestellzyklus bestätigt wurden"
orders_bought_edit_button: Bestätigte Artikel bearbeiten
orders_bought_already_confirmed: "* schon bestätigt"
@@ -1694,6 +1764,7 @@ de_DE:
remember_me: Erinnere dich an mich
are_you_sure: "Bist du sicher?"
orders_open: "Bestellungen öffnen"
closing: "Schließen"
going_back_to_home_page: "Bring dich zurück auf die Homepage"
creating: Erstellen
updating: Aktualisierung
@@ -1907,6 +1978,7 @@ de_DE:
admin_enterprise_relationships_permits: "Genehmigungen"
admin_enterprise_relationships_seach_placeholder: "Suche"
admin_enterprise_relationships_button_create: "Neu"
admin_enterprise_relationships_to: "zu"
admin_enterprise_groups: "Unternehmensgruppen"
admin_enterprise_groups_name: "Name"
admin_enterprise_groups_owner: "Inhaber"
@@ -1935,6 +2007,7 @@ de_DE:
supplier: "Anbieter"
product_name: "Produktname"
product_description: "Produktbeschreibung"
permalink: "Permalink"
shipping_categories: "Versandkategorien"
units: "Einheitsgröße"
coordinator: "Koordinator"
@@ -1948,6 +2021,7 @@ de_DE:
calculator: "Rechner"
calculator_values: "Rechnerwerte"
calculator_settings_warning: "Wenn Sie den Gebühren-Typ ändern, müssen Sie zuerst speichern, bevor Sie die Gebühren-Einstellungen bearbeiten können"
calculator_preferred_unit_error: "muss kg oder lb sein"
flat_percent_per_item: "Flache Prozent (pro Artikel)"
flat_rate_per_item: "Pauschale (pro Stück)"
flat_rate_per_order: "Pauschalpreis pro Bestellung)"
@@ -2031,6 +2105,8 @@ de_DE:
remove_tax: "Steuer entfernen"
first_name_begins_with: "Der Vorname beginnt mit"
last_name_begins_with: "Nachname beginnt mit"
shipping_method: "Versandart"
new_order: "Neue Bestellung"
enterprise_tos_link: "Link zu den AGB des Unternehmens"
enterprise_tos_message: "Wir wollen mit Menschen zusammenarbeiten, die unsere Ziele und Werte teilen. Als solche bitten wir neue Unternehmen, uns zuzustimmen"
enterprise_tos_link_text: "AGB."
@@ -2049,6 +2125,7 @@ de_DE:
hub_sidebar_at_least: "Mindestens ein Hub muss ausgewählt sein"
hub_sidebar_blue: "Blau"
hub_sidebar_red: "rot"
order_cycles_closed_for_hub: "Der von Ihnen ausgewählte Hub ist vorübergehend für Bestellungen geschlossen. Bitte versuchen Sie es später noch einmal."
report_customers_distributor: "Verteiler"
report_customers_supplier: "Anbieter"
report_customers_cycle: "Bestellungszyklus"
@@ -2254,6 +2331,7 @@ de_DE:
enterprise_name_error: "wurde bereits vergeben. Wenn dies Ihr Unternehmen ist und Sie die Eigentumsrechte beanspruchen möchten oder wenn Sie mit diesem Unternehmen handeln möchten, wenden Sie sich bitte an den aktuellen Manager dieses Profils unter %{email}."
enterprise_owner_error: "^ %{email} darf keine weiteren Unternehmen besitzen (Limit ist %{enterprise_limit})."
enterprise_role_uniqueness_error: "^ Diese Rolle ist bereits vorhanden."
enterprise_terms_and_conditions_type_error: "Es sind nur PDFs zulässig"
inventory_item_visibility_error: muss wahr oder falsch sein
product_importer_file_error: "Fehler: keine Datei hochgeladen"
product_importer_spreadsheet_error: "Datei konnte nicht verarbeitet werden: ungültiges Datenformat"
@@ -2285,6 +2363,7 @@ de_DE:
order_cycles_email_to_producers_notice: 'E-Mails, die an die Produzenten gesendet werden sollen, wurden zum Senden in die Warteschlange gestellt.'
order_cycles_no_permission_to_coordinate_error: "Keines Ihrer Unternehmen ist berechtigt, einen Bestellzyklus zu koordinieren"
order_cycles_no_permission_to_create_error: "Sie sind nicht berechtigt, einen von diesem Unternehmen koordinierten Bestellzyklus zu erstellen"
order_cycle_closed: "Der von Ihnen ausgewählte Bestellzyklus wurde gerade geschlossen. Bitte versuche es erneut!"
back_to_orders_list: "Zurück zur Bestellliste"
no_orders_found: "Keine Bestellungen gefunden"
order_information: "Bestellinformationen"
@@ -2312,6 +2391,10 @@ de_DE:
resolve_errors: Bitte beheben Sie die folgenden Fehler
more_items: "+ %{count} Mehr"
default_card_updated: Standardkarte aktualisiert
cart:
add_to_cart_failed: >
Beim Hinzufügen dieses Produkts zum Warenkorb ist ein Problem aufgetreten.
Möglicherweise ist es nicht mehr verfügbar oder der Shop schließt.
admin:
enterprise_limit_reached: "Sie haben die Standardgrenze für Unternehmen pro Konto erreicht. Schreiben Sie an %{contact_email}, wenn Sie es erhöhen müssen."
modals:
@@ -2336,6 +2419,14 @@ de_DE:
customer_tagged_rules_text: >
Durch das Erstellen von Regeln für ein bestimmtes Stichwort können Sie
die Standardregeln für bestimmte Kunden überschreiben.
terms_and_conditions_info:
title: "Allgemeine Geschäftsbedingungen hochladen"
message_1: "Allgemeine Geschäftsbedingungen sind der Vertrag zwischen Ihnen, dem Verkäufer und dem Käufer. Wenn Sie hier eine Datei hochladen, müssen Käufer Ihre Allgemeinen Geschäftsbedingungen akzeptieren, um die Kaufabwicklung abzuschließen. Für den Käufer wird dies als Kontrollkästchen an der Kasse angezeigt, das aktiviert werden muss, um mit der Kasse fortzufahren. Wir empfehlen Ihnen dringend, die Allgemeinen Geschäftsbedingungen in Übereinstimmung mit den nationalen Gesetzen hochzuladen."
message_2: "Käufer müssen die Allgemeinen Geschäftsbedingungen nur einmal akzeptieren. Wenn Sie jedoch Ihre Allgemeinen Geschäftsbedingungen ändern, müssen Käufer diese erneut akzeptieren, bevor sie zur Kasse gehen können."
terms_and_conditions_warning:
title: "Allgemeine Geschäftsbedingungen hochladen"
message_1: "Alle Ihre Käufer müssen ihnen einmal an der Kasse zustimmen. Wenn Sie die Datei aktualisieren, müssen alle Ihre Käufer ihnen an der Kasse erneut zustimmen."
message_2: "Für Käufer mit Abonnements müssen Sie ihnen vorerst die Allgemeinen Geschäftsbedingungen (oder die Änderungen an ihnen) per E-Mail senden. Nichts wird sie über diese neuen Allgemeinen Geschäftsbedingungen informieren."
panels:
save: SPEICHERN
saved: GESPEICHERT
@@ -2531,6 +2622,8 @@ de_DE:
immediate_logo_removal_warning: "Das Logo wird sofort nach der Bestätigung entfernt."
removed_promo_image_successfully: "Werbebild wurde erfolgreich entfernt"
immediate_promo_image_removal_warning: "Das Werbebild wird sofort nach der Bestätigung entfernt."
immediate_terms_and_conditions_removal_warning: "Die AGB-Datei wird sofort nach Bestätigung entfernt."
removed_terms_and_conditions_successfully: "AGB-Datei erfolgreich entfernt"
insufficient_stock: "Nicht genügend Lagerbestand verfügbar, nur noch %{on_hand} verfügbar"
out_of_stock:
reduced_stock_available: Reduzierter Bestand verfügbar
@@ -2542,6 +2635,12 @@ de_DE:
shopfront:
variant:
add_to_cart: "Hinzufügen"
in_cart: "im Wagen"
quantity_in_cart: "%{quantity} im Warenkorb"
bulk_buy_modal:
min_quantity: "Min. Menge"
max_quantity: "Maximale Menge"
price_breakdown: "Preisaufschlüsselung"
variants:
on_demand:
'yes': "Auf Anfrage"
@@ -2607,6 +2706,9 @@ de_DE:
signup_or_login: "Beginnen Sie mit der Anmeldung (oder melden Sie sich an)"
have_an_account: "Hast du schon ein Konto?"
action_login: "Jetzt einloggen."
stripe_elements:
unknown_error_from_stripe: |
Beim Einrichten Ihrer Karte in unserem Zahlungsgateway ist ein Problem aufgetreten. Bitte aktualisieren Sie die Seite und versuchen Sie es erneut. Wenn dies ein zweites Mal fehlschlägt, kontaktieren Sie uns bitte, um Unterstützung zu erhalten.
inflections:
each:
one: "jeder"
@@ -2688,8 +2790,11 @@ de_DE:
enterprise_fee_summaries:
filters:
date_range: "Datumsbereich"
report_format_csv: "Als CSV herunterladen"
generate_report: "Bericht generieren"
report:
none: "Keine"
select_and_search: "Wählen Sie Filter aus und klicken Sie auf BERICHT ERSTELLEN, um auf Ihre Daten zuzugreifen."
enterprise_fee_summary:
date_end_before_start_error: "muss nach dem start sein"
parameter_not_allowed_error: "Sie sind nicht berechtigt, einen oder mehrere ausgewählte Filter für diesen Bericht zu verwenden."
@@ -2733,6 +2838,9 @@ de_DE:
customer_details: "Kundendetails"
adjustments: "Anpassungen"
payments: "Zahlungen"
return_authorizations: "Berechtigungen zurückgeben"
credit_owed: "Gutschrift geschuldet"
new_adjustment: "Neue Anpassung"
payment: "Zahlung"
payment_method: "Zahlungsart"
shipment: "Sendung"
@@ -2779,6 +2887,8 @@ de_DE:
delete: "Löschen"
cannot_set_shipping_method_without_address: "Versandart kann nicht festgelegt werden, bis Kundendaten angegeben werden."
no_tracking_present: "Keine Tracking-Details angegeben."
tracking: "Sendungsverfolgung"
tracking_number: "Sendungscode"
order_total: "Auftrag insgesamt"
customer_details: "Kundendetails"
customer_search: "Kundensuche"
@@ -2800,11 +2910,20 @@ de_DE:
adjustments: "Anpassungen"
continue: "Fortsetzen"
fill_in_customer_info: "Bitte geben Sie Ihre Kundeninformationen ein"
credit_card: "Kreditkarte"
new_payment: "Neue Zahlung"
capture: "Erfassung"
void: "Leere"
login: "Anmeldung"
password: "Passwort"
signature: "Unterschrift"
solution: "Lösung"
landing_page: "Landing Page"
server: "Server"
test_mode: "Testmodus"
logourl: "Logourl"
are_you_sure_delete: "Möchten Sie diesen Datensatz wirklich löschen?"
confirm_delete: "Löschung bestätigen"
configurations: "Konfigurationen"
general_settings: "Allgemeine Einstellungen"
site_name: "Site-Name"
@@ -2906,14 +3025,31 @@ de_DE:
inventory_error_flash_for_insufficient_quantity: "Ein Artikel in Ihrem Warenkorb ist nicht mehr verfügbar."
inventory: Katalog
zipcode: Postleitzahl
weight: Gewicht (pro kg oder lb)
error_user_destroy_with_orders: "Benutzer mit abgeschlossenen Bestellungen dürfen nicht gelöscht werden"
cannot_create_payment_without_payment_methods: "Sie können keine Zahlung für eine Bestellung erstellen, ohne dass Zahlungsmethoden definiert sind."
please_define_payment_methods: "Bitte definieren Sie zunächst die Zahlungsmethoden."
options: "Optionen"
has_no_shipped_units: "hat keine versendeten Einheiten"
successfully_created: '%{resource} wurde erfolgreich erstellt!'
successfully_updated: '%{resource} wurde erfolgreich aktualisiert!'
payment_method: "Zahlungsart"
payment_processing_failed: "Die Zahlung konnte nicht bearbeitet werden. Bitte überprüfen Sie die von Ihnen eingegebenen Daten"
not_available: "N / A"
order_populator:
out_of_stock: '%{item} ist nicht vorrätig.'
actions:
update: "Aktualisieren"
shared:
error_messages:
errors_prohibited_this_record_from_being_saved:
one: "1 Fehler hat das Speichern dieses Datensatzes verhindert:"
few: "%{count} Fehler haben das Speichern dieses Datensatzes verhindert:"
many: "%{count} Fehler haben das Speichern dieses Datensatzes verhindert:"
other: "%{count} Fehler haben das Speichern dieses Datensatzes verhindert:"
there_were_problems_with_the_following_fields: "Es gab Probleme mit folgenden Feldern"
payments_list:
date_time: "Datum / Uhrzeit"
amount: "Betrag"
payment_method: "Zahlungsart"
payment_state: "Zahlungsstatus"
@@ -2948,7 +3084,6 @@ de_DE:
index:
inherits_properties_checkbox_hint: "Vererben Eigenschaften von %{supplier}? (außer oben aufgehoben)"
add_product_properties: "Produkteigenschaften hinzufügen"
select_from_prototype: "Wählen Sie Aus Prototyp"
properties:
index:
properties: "Eigenschaften"
@@ -3041,6 +3176,8 @@ de_DE:
active_products:
zero: "Sie haben keine aktiven Produkte."
one: "Sie haben ein aktives Produkt"
few: "Sie haben %{count} aktive Produkte"
many: "Sie haben %{count} aktive Produkte"
other: "Sie haben %{count} aktive Produkte"
order_cycles:
order_cycles: "Bestellrunden"
@@ -3048,6 +3185,8 @@ de_DE:
you_have_active:
zero: "Sie haben keine aktiven Bestellzyklen."
one: "Sie haben einen aktiven Bestellzyklus."
few: "Sie haben %{count} aktive Auftragszyklen."
many: "Sie haben %{count} aktive Auftragszyklen."
other: "Sie haben %{count} aktive Bestellzyklen."
manage_order_cycles: "BESTELLRUNDEN VERWALTEN"
shipping_methods:
@@ -3059,6 +3198,8 @@ de_DE:
zone: "Zone"
calculator: "Rechner"
display: "Anzeige"
both: "Sowohl Checkout als auch Backoffice"
back_end: "Nur Backoffice"
no_shipping_methods_found: "Keine Versandmethoden gefunden"
new:
new_shipping_method: "Neue Versandart"
@@ -3070,18 +3211,30 @@ de_DE:
form:
categories: "Kategorien"
zones: "Zonen"
both: "Sowohl Checkout als auch Backoffice"
back_end: "Nur Backoffice"
deactivation_warning: "Durch Deaktivieren einer Versandart kann die Versandart aus Ihrer Liste verschwinden. Alternativ können Sie eine Versandart auf der Checkout-Seite ausblenden, indem Sie die Option &quot;Anzeige&quot; auf &quot;Nur Backoffice&quot; setzen."
payment_methods:
index:
payment_methods: "Zahlungsarten"
new_payment_method: "Neue Zahlungsmethode"
name: "Name"
products_distributor: "Verteiler"
provider: "Anbieter"
environment: "Umgebung"
display: "Anzeige"
active: "Aktiv"
both: "Beide"
front_end: "Nur zur Kasse"
back_end: "Nur Backoffice"
active_yes: "Ja"
active_no: "Nein"
no_payment_methods_found: "Keine Zahlungsmethoden gefunden"
new:
new_payment_method: "Neue Zahlungsart"
back_to_payment_methods_list: "Zurück zur Liste der Zahlungsmethoden"
edit:
new: "Neu"
editing_payment_method: "Zahlungsmethode bearbeiten"
back_to_payment_methods_list: "Zurück zur Liste der Zahlungsmethoden"
stripe_connect:
@@ -3100,14 +3253,25 @@ de_DE:
form:
name: "Name"
description: "Beschreibung"
environment: "Umgebung"
display: "Anzeige"
active: "Aktiv"
active_yes: "Ja"
active_no: "Nein"
both: "Sowohl Checkout als auch Backoffice"
front_end: "Nur zur Kasse"
back_end: "Nur Backoffice"
tags: "Stichwörter"
deactivation_warning: "Durch Deaktivieren einer Zahlungsmethode kann die Zahlungsmethode aus Ihrer Liste verschwinden. Alternativ können Sie eine Zahlungsmethode auf der Checkout-Seite ausblenden, indem Sie die Option \"Anzeige\" auf \"Nur Backoffice\" setzen."
providers:
provider: "Anbieter"
payments:
source_forms:
stripe:
error_saving_payment: Fehler beim Speichern der Zahlung
submitting_payment: Zahlung wird gesendet ...
paypal:
no_payment_via_admin_backend: Paypal-Zahlungen können nicht im Backoffice erfasst werden
products:
image_upload_error: "Das Produktbild wurde nicht erkannt. Bitte laden Sie ein Bild im PNG- oder JPG-Format hoch."
new:
@@ -3161,6 +3325,8 @@ de_DE:
bulk_coop_allocation: 'Massenkoop - Zuteilung'
bulk_coop_packing_sheets: 'Massenkoop - Verpackungsblätter'
bulk_coop_customer_payments: 'Massenkoop - Kundenzahlungen'
customer_names_message:
customer_names_tip: "Wenn Kundennamen für von Ihnen gelieferte Bestellungen ausgeblendet sind, können Sie sich an den Händler wenden und ihn fragen, ob er seine Shop-Einstellungen aktualisieren kann, damit seine Lieferanten Kundennamen anzeigen können."
users:
index:
listing_users: "Benutzer auflisten"
@@ -3202,7 +3368,10 @@ de_DE:
price: "Preis"
display_as: "Angezeigt als"
display_name: "Anzeigename"
display_as_placeholder: 'z.B. 2 kg'
display_name_placeholder: 'z.B. Tomaten'
autocomplete:
out_of_stock: "Nicht vorrättig"
producer_name: "Produzent"
unit: "Einheit"
shared:
@@ -3216,7 +3385,11 @@ de_DE:
total: "Gesamt"
general_settings:
edit:
legal_settings: "Rechtliche Einstellungen"
cookies_consent_banner_toggle: "Zeigen Sie das Zustimmungsbanner für Cookies an"
privacy_policy_url: "Datenschutz URL"
enterprises_require_tos: "Unternehmen müssen die AGB akzeptieren"
cookies_policy_matomo_section: "Zeigen Sie den Abschnitt Matomo auf der Richtlinienseite für Cookies an"
footer_tos_url: "AGB URL"
checkout:
payment:
@@ -3236,6 +3409,7 @@ de_DE:
format: '%Y.%m.%d'
js_format: 'dd.mm.yy'
orders:
error_flash_for_unavailable_items: "Ein Artikel in Ihrem Warenkorb ist nicht mehr verfügbar. Bitte aktualisieren Sie die ausgewählten Mengen."
edit:
login_to_view_order: "Bitte loggen Sie sich ein, um Ihre Bestellung anzuzeigen."
bought:
@@ -3263,6 +3437,14 @@ de_DE:
invalid: ungültig
order_mailer:
cancel_email:
customer_greeting: "Lieber %{name},"
instructions_html: "Ihre Bestellung mit <strong>%{distributor}</strong> wurde storniert. Bitte bewahren Sie diese Stornierungsinformationen für Ihre Unterlagen auf."
dont_cancel: "Wenn Sie Ihre Meinung geändert haben oder diese Bestellung nicht stornieren möchten, wenden Sie sich bitte an %{email}"
order_summary_canceled_html: "<strong>Bestellübersicht # %{number} [ABGESAGT]</strong>"
details: "Hier sind die Details Ihrer Bestellung:"
unpaid_order: "Ihre Bestellung wurde nicht bezahlt, daher wurde keine Rückerstattung vorgenommen"
paid_order: "Ihre Bestellung wurde bezahlt, sodass %{distributor} den vollen Betrag zurückerstattet hat"
credit_order: "Ihre Bestellung wurde bezahlt, sodass Ihr Konto gutgeschrieben wurde"
subject: "Stornierung der Bestellung"
confirm_email:
subject: "Bestellbestätigung"
@@ -3279,6 +3461,7 @@ de_DE:
bestätigen.
issue_text: |
Falls die URL nicht funktioniert, bitte den Link kopieren und in die Adresszeile Ihres Browsers einfügen
subject: "Anweisungen zum Zurücksetzen des Passworts"
confirmation_instructions:
subject: "Bitte OFN-Konto bestätigen"
shipment_mailer:
@@ -3290,6 +3473,11 @@ de_DE:
thanks: "Danke für Ihren Einkauf."
track_information: "Tracking-Informationen: %{tracking}"
track_link: "Tracking-Link: %{url}"
test_mailer:
test_email:
greeting: "Herzliche Glückwünsche!"
message: "Wenn Sie diese E-Mail erhalten haben, sind Ihre E-Mail-Einstellungen korrekt."
subject: "Test Email"
order_state:
address: Adresse
adjustments: Verbesserungen
@@ -3372,3 +3560,8 @@ de_DE:
shipment:
cannot_ready: "Versand nicht möglich."
invalid_taxonomy_id: "Ungültige Taxonomie-ID"
activerecord:
models:
spree/payment:
one: Zahlung
other: Zahlungen

View File

@@ -322,10 +322,16 @@ en:
create_and_add_another: "Create and Add Another"
create: "Create"
cancel: "Cancel"
resume: "Resume"
save: "Save"
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
cut: "Cut"
paste: "Paste"
destroy: "Destroy"
rename: "Rename"
admin:
# Common properties / models
@@ -656,6 +662,8 @@ en:
controls:
back_to_my_inventory: Back to my inventory
orders:
edit:
order_sure_want_to: Are you sure you want to %{event} this order?
invoice_email_sent: 'Invoice email has been sent'
order_email_resent: 'Order email has been resent'
bulk_management:
@@ -811,6 +819,7 @@ en:
closed and/or when customers can expect it to open again. This is displayed
on your shop only when you have no active order cycles (ie. shop is closed).
shopfront_category_ordering: "Shopfront Category Ordering"
shopfront_category_ordering_note: "(top to bottom)"
open_date: "Open Date"
close_date: "Close Date"
social:
@@ -1693,6 +1702,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
@@ -1852,6 +1863,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: An additional item is already confirmed for this order cycle
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -3018,6 +3031,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
delete: "Delete"
cannot_set_shipping_method_without_address: "Cannot set shipping method until customer details are provided."
no_tracking_present: "No tracking details provided."
tracking: "Tracking"
tracking_number: "Tracking Number"
order_total: "Order Total"
customer_details: "Customer Details"
customer_search: "Customer Search"
@@ -3039,6 +3054,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
@@ -3050,6 +3066,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
server: "Server"
test_mode: "Test Mode"
logourl: "Logourl"
are_you_sure_delete: "Are you sure you want to delete this record?"
confirm_delete: "Confirm Deletion"
configurations: "Configurations"
general_settings: "General Settings"
@@ -3176,6 +3194,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
has_no_shipped_units: "has no shipped units"
successfully_created: ! '%{resource} has been successfully created!'
successfully_updated: ! '%{resource} has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
not_available: "N/A"
order_populator:
@@ -3187,6 +3206,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
error_messages:
errors_prohibited_this_record_from_being_saved:
one: "1 error prohibited this record from being saved:"
few: "%{count} errors prohibited this record from being saved:"
many: "%{count} errors prohibited this record from being saved:"
other: "%{count} errors prohibited this record from being saved:"
there_were_problems_with_the_following_fields: "There were problems with the following fields"
payments_list:
@@ -3225,7 +3246,6 @@ See the %{link} to find out more about %{sitename}'s features and to start using
index:
inherits_properties_checkbox_hint: "Inherit properties from %{supplier}? (unless overridden above)"
add_product_properties: "Add Product Properties"
select_from_prototype: "Select From Prototype"
properties:
index:
properties: "Properties"
@@ -3318,6 +3338,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -3325,6 +3347,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:

View File

@@ -14,6 +14,7 @@ en_AU:
spree/payment:
amount: Amount
state: State
source: Source
spree/product:
primary_taxon: "Product Category"
supplier: "Supplier"
@@ -23,6 +24,9 @@ en_AU:
spree/credit_card:
base: "Credit Card"
number: "Number"
month: "Month"
verification_value: "Verification Value"
year: "Year"
order_cycle:
orders_close_at: Close date
variant_override:
@@ -35,6 +39,10 @@ en_AU:
taken: "There's already an account for this email. Please login or reset your password."
spree/order:
no_card: There are no authorised credit cards available to charge
spree/credit_card:
attributes:
base:
card_expired: "has expired"
order_cycle:
attributes:
orders_close_at:
@@ -56,6 +64,8 @@ en_AU:
shipping_method_ids: "Shipping Methods"
payment_method_ids: "Payment Methods"
errors:
messages:
inclusion: "is not included in the list"
models:
order_management/subscriptions/validator:
attributes:
@@ -115,6 +125,8 @@ en_AU:
not_array_error: "must be an array"
invalid_element_error: "must contain only valid integers"
datetime_picker_ui:
current_text: Now
close_text: Done
time_text: Time
enterprise_mailer:
confirmation_instructions:
@@ -180,6 +192,7 @@ en_AU:
explainer: Automatic processing of these orders failed for an unknown reason. This should not occur, please contact us if you are seeing this.
home: "OFN"
title: "Open Food Network"
welcome_to: "Welcome to"
site_meta_description: "We begin from the ground up. With farmers and growers ready to tell their stories proudly and truly. With distributors ready to connect people with products fairly and honestly. With buyers who believe that better weekly shopping decisions can…"
search_by_name: Search by name or suburb...
producers_join: Australian producers are now welcome to join the Open Food Network.
@@ -222,6 +235,7 @@ en_AU:
enterprises: Enterprises
enterprise_groups: Groups
reports: Reports
listing_reports: Listing Reports
variant_overrides: Inventory
import: Import
spree_products: Spree Products
@@ -251,6 +265,8 @@ en_AU:
notes: Notes
error: Error
processing_payment: "Processing payment..."
no_pending_payments: "No pending payments"
invalid_payment_state: "Invalid payment state"
filter_results: Filter Results
quantity: Quantity
pick_up: Pick up
@@ -266,14 +282,23 @@ en_AU:
on hand: "On Hand"
ship: "Ship"
shipping_category: "Shipping Category"
height: "Height"
width: "Width"
depth: "Depth"
actions:
create_and_add_another: "Create and Add Another"
create: "Create"
cancel: "Cancel"
resume: "Resume"
save: "Save"
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
cut: "Cut"
paste: "Paste"
destroy: "Destroy"
rename: "Rename"
admin:
begins_at: Begins At
begins_on: Begins On
@@ -321,6 +346,7 @@ en_AU:
show_n_more: Show %{num} more
choose: "Choose..."
please_select: Please select...
column_save_as_default: Save As Default
columns: Columns
actions: Actions
viewing: "Viewing: %{current_view_name}"
@@ -331,6 +357,7 @@ en_AU:
has_n_rules: "has %{num} rules"
unsaved_confirm_leave: "There are unsaved changed on this page. Continue without saving?"
unsaved_changes: "You have unsaved changes"
available_units: "Available Units"
shopfront_settings:
embedded_shopfront_settings: "Embedded Shopfront Settings"
enable_embedded_shopfronts: "Enable Embedded Shopfronts"
@@ -365,7 +392,10 @@ en_AU:
title: "Matomo Settings"
matomo_url: "Matomo URL"
matomo_site_id: "Matomo Site ID"
matomo_tag_manager_url: "Matomo Tag Manager URL"
info_html: "Matomo is a Web and Mobile Analytics application. You can either host Matomo on-premises or use a cloud-hosted service. See <a href='http://matomo.org' target='_blank'>matomo.org</a> for more information."
config_instructions_html: "Here you can configure the OFN Matomo integration. The Matomo URL below should point to the Matomo instance where the user tracking information will be sent to; if it is left empty, Matomo user tracking will be disabled. The Site ID field is not mandatory but useful if you are tracking more than one website on a single Matomo instance; it can be found on the Matomo instance console."
config_instructions_tag_manager_html: "Setting the Matomo Tag Manager URL enables Matomo Tag Manager. This tool allows you to set up analytics events. The Matomo Tag Manager URL is copied from the Install Code section of Matomo Tag Manager. Ensure you select the right container and environment as these options change the URL."
customers:
index:
new_customer: "New Customer"
@@ -386,6 +416,8 @@ en_AU:
confirm_delete: "Sure to delete?"
search_by_email: "Search by email/code..."
guest_label: "Guest checkout"
credit_owed: "Credit Owed"
balance_due: "Balance Due"
destroy:
has_associated_orders: "Delete failed: customer has associated orders with his shop"
contents:
@@ -472,6 +504,7 @@ en_AU:
line_number: "Line %{number}:"
encoding_error: "Please check the language setting of your source file and ensure it is saved with UTF-8 encoding"
unexpected_error: "Product Import encountered an unexpected error whilst opening the file: %{error_message}"
malformed_csv: "Product Import encountered a malformed CSV: %{error_message}"
index:
notice: "Notice"
beta_notice: "This feature is still in beta: you may experience some errors while using it. Please don't hesitate to contact support."
@@ -573,6 +606,8 @@ en_AU:
controls:
back_to_my_inventory: Back to my inventory
orders:
edit:
order_sure_want_to: Are you sure you want to %{event} this order?
invoice_email_sent: 'Invoice email has been sent'
order_email_resent: 'Order email has been resent'
bulk_management:
@@ -582,6 +617,7 @@ en_AU:
order_date: "Completed at"
max: "Max"
product_unit: "Product: Unit"
weight_volume: "Weight/Volume (g)"
ask: "Ask?"
page_title: "Bulk Order Management"
actions_delete: "Delete Selected"
@@ -618,6 +654,9 @@ en_AU:
acn_placeholder: eg. 123 456 789
display_invoice_logo: Display logo in invoices
invoice_text: Add customized text at the end of invoices
terms_and_conditions: "Terms and Conditions"
remove_terms_and_conditions: "Remove File"
uploaded_on: "uploaded on"
contact:
name: Name
name_placeholder: eg. Gustav Plum
@@ -685,6 +724,7 @@ en_AU:
ofn_uid_tip: The unique id used to identify the enterprise on Open Food Network.
shipping_methods:
name: "Name"
applies: "Active?"
manage: "Manage Shipping Methods"
create_button: "Create New Shipping Method"
create_one_button: "Create One Now"
@@ -707,6 +747,8 @@ en_AU:
enable_subscriptions_tip: "Enable subscriptions functionality?"
enable_subscriptions_false: "Disabled"
enable_subscriptions_true: "Enabled"
customer_names_in_reports: "Customer Names in Reports"
customer_names_tip: "Enable your suppliers to see your customers names in reports"
customer_names_false: "Disabled"
customer_names_true: "Enabled"
shopfront_message: "\"Home\" message"
@@ -726,6 +768,7 @@ en_AU:
is displayed on your shop only when you have no active order cycles
(ie. shop is closed).
shopfront_category_ordering: "Shopfront Category Ordering"
shopfront_category_ordering_note: "(top to bottom)"
open_date: "Open Date"
close_date: "Close Date"
social:
@@ -867,6 +910,7 @@ en_AU:
incoming: "Incoming"
supplier: "Supplier"
products: "Products"
receival_details: "Receival Details"
fees: "Fees"
save: "Save"
save_and_next: "Save and Next"
@@ -878,6 +922,7 @@ en_AU:
distributor: "Distributor"
products: "Products"
tags: "Tags"
delivery_details: "Delivery Details"
fees: "Fees"
previous: "Previous"
save: "Save"
@@ -1131,10 +1176,18 @@ en_AU:
destroy_attachment_does_not_exist: "Logo does not exist"
enterprise_promo_image:
destroy_attachment_does_not_exist: "Promo image does not exist"
enterprise_terms_and_conditions:
destroy_attachment_does_not_exist: "Terms and Conditions file does not exist"
orders:
failed_to_update: "Failed to update order"
checkout:
already_ordered:
cart: "cart"
message_html: "You have an order for this order cycle already. Check the %{cart} to see the items you ordered before. You can also cancel items as long as the order cycle is open."
terms_and_conditions:
message_html: "I agree to the seller's %{terms_and_conditions_link}."
link_text: "Terms and Conditions"
failed: "The checkout failed. Please let us know so that we can process your order."
shops:
hubs:
show_closed_shops: "Show closed shops"
@@ -1146,7 +1199,12 @@ en_AU:
cart: "Cart"
cart_sidebar:
checkout: "Checkout"
edit_cart: "Edit cart"
items_in_cart_singular: "%{num} item in your cart"
items_in_cart_plural: "%{num} items in your cart"
close: "Close"
cart_empty: "Your cart is empty"
take_me_shopping: "Take me shopping!"
signed_in:
profile: "Profile"
mobile_menu:
@@ -1178,7 +1236,11 @@ en_AU:
signup: "signup"
contact: "contact"
require_customer_login: "Only approved customers can access this shop."
require_login_html: "If you're already an approved customer, %{login} or %{signup} to proceed."
require_login_2_html: "Want to start shopping here? Please %{contact} %{enterprise} and ask about joining."
require_customer_html: "If you'd like to start shopping here, please %{contact} %{enterprise} to ask about joining."
select_oc:
select_oc_html: "Please <span class='highlighted'>choose when you want your order</span>, to see what products are available."
products:
summary:
bulk: "Bulk"
@@ -1310,6 +1372,7 @@ en_AU:
saving_credit_card: Saving credit card...
card_has_been_removed: "Your card has been removed (number: %{number})"
card_could_not_be_removed: Sorry, the card could not be removed
invalid_credit_card: "Invalid credit card"
ie_warning_headline: "Your browser is out of date :-("
ie_warning_text: "For the best Open Food Network experience, we strongly recommend upgrading your browser:"
ie_warning_chrome: Download Chrome
@@ -1505,6 +1568,7 @@ en_AU:
shopping_oc_closed_description: "Please wait until the next cycle opens (or contact us directly to see if we can accept any late orders)"
shopping_oc_last_closed: "The last cycle closed %{distance_of_time} ago"
shopping_oc_next_open: "The next cycle opens in %{distance_of_time}"
shopping_oc_select: "Select..."
shopping_tabs_home: "Home"
shopping_tabs_shop: "Shop"
shopping_tabs_about: "About"
@@ -1537,16 +1601,23 @@ en_AU:
hubs_distance_filter: "Show me shops near %{location}"
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
products_clear: Clear
products_showing: "Showing:"
products_results_for: "Results for"
products_or: "or"
products_and: "and"
products_filters_in: "in"
products_with: with
products_search: "Search..."
products_filter_by: "Filter by"
products_filter_selected: "selected"
products_filter_heading: "Filters"
products_filter_clear: "Clear"
products_filter_done: "Done"
products_loading: "Loading products..."
products_updating_cart: "Updating cart..."
products_cart_empty: "Cart empty"
@@ -1557,6 +1628,8 @@ en_AU:
products_update_error_msg: "Saving failed."
products_update_error_data: "Save failed due to invalid data:"
products_changes_saved: "Changes saved."
products_no_results_html: "Sorry, no results found for %{query}"
products_clear_search: "Clear search"
search_no_results_html: "Sorry, no results found for %{query}. Try another search?"
components_profiles_popover: "Profiles do not have a shopfront on the Open Food Network, but may have their own physical or online shop elsewhere"
components_profiles_show: "Show profiles"
@@ -1675,7 +1748,9 @@ en_AU:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: "An additional item is already confirmed for this order cycle"
one: An additional item is already confirmed for this order cycle
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -1697,6 +1772,7 @@ en_AU:
remember_me: Remember Me
are_you_sure: "Are you sure?"
orders_open: "Orders open"
closing: "Closing"
going_back_to_home_page: "Taking you back to the home page"
creating: Creating
updating: Updating
@@ -1864,6 +1940,7 @@ en_AU:
headline: "Youre all set up! "
thanks: "Thanks for filling out the details for %{enterprise}."
login: "To manage your new Enterprise, go to openfoodnetwork.org.au/admin\n\nYou can also get to your Admin page in the top righthand corner of the Open Food Network homepage, just to the left of the shopping cart symbol."
action: "Go to Enterprise Dashboard"
back: "Back"
continue: "Continue"
action_or: "OR"
@@ -1909,6 +1986,7 @@ en_AU:
admin_enterprise_relationships_permits: "permits"
admin_enterprise_relationships_seach_placeholder: "Search"
admin_enterprise_relationships_button_create: "Create"
admin_enterprise_relationships_to: "to"
admin_enterprise_groups: "Enterprise Groups"
admin_enterprise_groups_name: "Name"
admin_enterprise_groups_owner: "Owner"
@@ -1937,6 +2015,7 @@ en_AU:
supplier: "Supplier"
product_name: "Product Name"
product_description: "Product Description"
permalink: "Permalink"
shipping_categories: "Shipping Categories"
units: "Unit Size"
coordinator: "Coordinator"
@@ -1949,6 +2028,8 @@ en_AU:
tax_category: "Tax Category"
calculator: "Calculator"
calculator_values: "Calculator values"
calculator_settings_warning: "If you are changing the calculator type, you must save first before you can edit the calculator settings"
calculator_preferred_unit_error: "must be kg or lb"
flat_percent_per_item: "Flat Percent (per item)"
flat_rate_per_item: "Flat Rate (per item)"
flat_rate_per_order: "Flat Rate (per order)"
@@ -2032,6 +2113,7 @@ en_AU:
remove_tax: "Remove tax"
first_name_begins_with: "First name begins with"
last_name_begins_with: "Last name begins with"
shipping_method: "Shipping method"
new_order: "New Order"
enterprise_tos_link: "Enterprise Terms of Service link"
enterprise_tos_message: "We want to work with people that share our aims and values. As such we ask new enterprises to agree to our "
@@ -2051,6 +2133,7 @@ en_AU:
hub_sidebar_at_least: "At least one hub must be selected"
hub_sidebar_blue: "blue"
hub_sidebar_red: "red"
order_cycles_closed_for_hub: "The hub you have selected is temporarily closed for orders. Please try again later."
report_customers_distributor: "Distributor"
report_customers_supplier: "Supplier"
report_customers_cycle: "Order Cycle"
@@ -2256,6 +2339,7 @@ en_AU:
enterprise_name_error: "has already been taken. If this is your enterprise and you would like to claim ownership, or if you would like to trade with this enterprise please contact the current manager of this profile at %{email}."
enterprise_owner_error: "^%{email} is not permitted to own any more enterprises (limit is %{enterprise_limit})."
enterprise_role_uniqueness_error: "^That role is already present."
enterprise_terms_and_conditions_type_error: "Only PDFs are allowed"
inventory_item_visibility_error: must be true or false
product_importer_file_error: "error: no file uploaded"
product_importer_spreadsheet_error: "could not process file: invalid filetype"
@@ -2279,6 +2363,7 @@ en_AU:
enterprise_register_success_notice: "Congratulations! Registration for %{enterprise} is complete!"
enterprise_bulk_update_success_notice: "Enterprises updated successfully"
enterprise_bulk_update_error: 'Update failed'
enterprise_shop_show_error: "The shop you are looking for doesn't exist or is inactive on OFN. Please check other shops."
order_cycles_create_notice: 'Your order cycle has been created.'
order_cycles_update_notice: 'Your order cycle has been updated.'
order_cycles_bulk_update_notice: 'Order cycles have been updated.'
@@ -2286,6 +2371,7 @@ en_AU:
order_cycles_email_to_producers_notice: 'Emails to be sent to producers have been queued for sending.'
order_cycles_no_permission_to_coordinate_error: "None of your enterprises have permission to coordinate an order cycle"
order_cycles_no_permission_to_create_error: "You don't have permission to create an order cycle coordinated by that enterprise"
order_cycle_closed: "The order cycle you've selected has just closed. Please try again!"
back_to_orders_list: "Back to order list"
no_orders_found: "No Orders Found"
order_information: "Order Information"
@@ -2313,6 +2399,10 @@ en_AU:
resolve_errors: Please resolve the following errors
more_items: "+ %{count} More"
default_card_updated: Default Card Updated
cart:
add_to_cart_failed: >
There was a problem adding this product to the cart. Perhaps it has become
unavailable or the shop is closing.
admin:
enterprise_limit_reached: "You have reached the standard limit of enterprises per account. Write to %{contact_email} if you need to increase it."
modals:
@@ -2338,6 +2428,14 @@ en_AU:
By creating rules related to a specific customer tag, you can override
the default behaviour (whether it be to show or to hide items) for customers
with the specified tag.
terms_and_conditions_info:
title: "Uploading Terms and Conditions"
message_1: "Terms and Conditions are the contract between you, the seller, and the shopper. If you upload a file here shoppers must accept your Terms and Conditions in order to complete checkout. For the shopper this will appear as a checkbox at checkout that must be checked in order to proceed with checkout. We highly recommend you upload Terms and Conditions in alignment with national legislation."
message_2: "Shoppers will only be required to accept Terms and Conditions once. However if you change you Terms and Conditions shoppers will again be required to accept them before they can checkout."
terms_and_conditions_warning:
title: "Uploading Terms and Conditions"
message_1: "All your buyers will have to agree to them once at checkout. If you update the file, all your buyers will have to agree to them again at checkout."
message_2: "For buyers with subscriptions, you need to email them the Terms and Conditions (or the changes to them) for now, nothing will notify them about these new Terms and Conditions."
panels:
save: SAVE
saved: SAVED
@@ -2431,6 +2529,12 @@ en_AU:
severity: Severity
description: Description
resolve: Resolve
exchange_products:
load_more_variants: "Load More Variants"
load_all_variants: "Load All Variants"
select_all_variants: "Select All %{total_number_of_variants} Variants"
variants_loaded: "%{num_of_variants_loaded} of %{total_number_of_variants} Variants Loaded"
loading_variants: "Loading Variants"
tag_rules:
shipping_method_tagged_top: "Shipping methods tagged"
shipping_method_tagged_bottom: "are:"
@@ -2513,6 +2617,7 @@ en_AU:
customer_placeholder: "customer@example.org"
valid_email_error: "Please enter a valid email address"
subscriptions:
error_saving: "Error saving subscription"
new:
please_select_a_shop: "Please select a shop"
enterprises:
@@ -2522,6 +2627,8 @@ en_AU:
immediate_logo_removal_warning: "The logo will be removed immediately after you confirm."
removed_promo_image_successfully: "Promo image removed successfully"
immediate_promo_image_removal_warning: "The promo image will be removed immediately after you confirm."
immediate_terms_and_conditions_removal_warning: "The Terms and Conditions file will be removed immediately after you confirm."
removed_terms_and_conditions_successfully: "Terms and Conditions file removed successfully"
insufficient_stock: "Insufficient stock available, only %{on_hand} remaining"
out_of_stock:
reduced_stock_available: Reduced stock available
@@ -2533,8 +2640,12 @@ en_AU:
shopfront:
variant:
add_to_cart: "Add"
in_cart: "in cart"
quantity_in_cart: "%{quantity} in cart"
bulk_buy_modal:
min_quantity: "Min quantity"
max_quantity: "Max quantity"
price_breakdown: "Price breakdown"
variants:
on_demand:
'yes': "On demand"
@@ -2600,6 +2711,84 @@ en_AU:
signup_or_login: "Start By Signing Up (or logging in)"
have_an_account: "Already have an account?"
action_login: "Log in now."
stripe_elements:
unknown_error_from_stripe: |
There was a problem setting up your card in our payments gateway.
Please refresh the page and try again, if it fails a second time,
please contact us for support.
inflections:
each:
one: "each"
other: "each"
bunch:
one: "bunch"
other: "bunches"
pack:
one: "pack"
other: "packs"
box:
one: "box"
other: "boxes"
bottle:
one: "bottle"
other: "bottles"
jar:
one: "jar"
other: "jars"
head:
one: "head"
other: "heads"
bag:
one: "bag"
other: "bags"
loaf:
one: "loaf"
other: "loaves"
single:
one: "single"
other: "singles"
tub:
one: "tub"
other: "tubs"
punnet:
one: "punnet"
other: "punnets"
packet:
one: "packet"
other: "packets"
item:
one: "item"
other: "items"
dozen:
one: "dozen"
other: "dozens"
unit:
one: "unit"
other: "units"
serve:
one: "serve"
other: "serves"
tray:
one: "tray"
other: "trays"
piece:
one: "piece"
other: "pieces"
pot:
one: "pot"
other: "pots"
bundle:
one: "bundle"
other: "bundles"
flask:
one: "flask"
other: "flasks"
basket:
one: "basket"
other: "baskets"
sack:
one: "sack"
other: "sacks"
producers:
signup:
start_free_profile: "Start with a free profile, and expand when you're ready!"
@@ -2657,6 +2846,8 @@ en_AU:
adjustments: "Adjustments"
payments: "Payments"
return_authorizations: "Return Authorizations"
credit_owed: "Credit Owed"
new_adjustment: "New Adjustment"
payment: "Payment"
payment_method: "Payment Method"
shipment: "Shipment"
@@ -2703,6 +2894,8 @@ en_AU:
delete: "Delete"
cannot_set_shipping_method_without_address: "Cannot set shipping method until customer details are provided."
no_tracking_present: "No tracking details provided."
tracking: "Tracking"
tracking_number: "Tracking Number"
order_total: "Order Total"
customer_details: "Customer Details"
customer_search: "Customer Search"
@@ -2724,11 +2917,20 @@ en_AU:
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
login: "Login"
password: "Password"
signature: "Signature"
solution: "Solution"
landing_page: "Landing Page"
server: "Server"
test_mode: "Test Mode"
logourl: "Logourl"
are_you_sure_delete: "Are you sure you want to delete this record?"
confirm_delete: "Confirm Deletion"
configurations: "Configurations"
general_settings: "General Settings"
site_name: "Site Name"
@@ -2830,15 +3032,31 @@ en_AU:
inventory_error_flash_for_insufficient_quantity: "An item in your cart has become unavailable."
inventory: Inventory
zipcode: Postcode
weight: Weight (per kg or lb)
error_user_destroy_with_orders: "Users with completed orders may not be deleted"
cannot_create_payment_without_payment_methods: "You cannot create a payment for an order without any payment methods defined."
please_define_payment_methods: "Please define some payment methods first."
options: "Options"
has_no_shipped_units: "has no shipped units"
successfully_created: '%{resource} has been successfully created!'
successfully_updated: '%{resource} has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
not_available: "N/A"
order_populator:
out_of_stock: '%{item} is out of stock.'
actions:
update: "Update"
shared:
error_messages:
errors_prohibited_this_record_from_being_saved:
one: "1 error prohibited this record from being saved:"
few: "%{count} errors prohibited this record from being saved:"
many: "%{count} errors prohibited this record from being saved:"
other: "%{count} errors prohibited this record from being saved:"
there_were_problems_with_the_following_fields: "There were problems with the following fields"
payments_list:
date_time: "Date/time"
amount: "Amount"
payment_method: "Payment Method"
payment_state: "Payment State"
@@ -2873,7 +3091,6 @@ en_AU:
index:
inherits_properties_checkbox_hint: "Inherit properties from %{supplier}? (unless overridden above)"
add_product_properties: "Add Product Properties"
select_from_prototype: "Select From Prototype"
properties:
index:
properties: "Properties"
@@ -2926,6 +3143,7 @@ en_AU:
capture: "Capture"
ship: "Ship"
edit: "Edit"
order_not_updated: "The order could not be updated"
note: "Note"
first: "First"
last: "Last"
@@ -2948,6 +3166,8 @@ en_AU:
tax_invoice: "TAX INVOICE"
code: "Code"
from: "From"
to: "Bill to"
shipping: "Shipping"
form:
distribution_fields:
title: "Distribution"
@@ -2963,6 +3183,8 @@ en_AU:
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -2970,6 +3192,8 @@ en_AU:
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:
@@ -2981,6 +3205,8 @@ en_AU:
zone: "Zone"
calculator: "Calculator"
display: "Display"
both: "Both Checkout and Back office"
back_end: "Back office only"
no_shipping_methods_found: "No shipping methods found"
new:
new_shipping_method: "New Shipping Method"
@@ -2992,6 +3218,9 @@ en_AU:
form:
categories: "Categories"
zones: "Zones"
both: "Both Checkout and Back office"
back_end: "Back office only"
deactivation_warning: "De-activating a shipping method can make the shipping method disappear from your list. Alternatively, you can hide a shipping method from the checkout page by setting the option 'Display' to 'back office only'."
payment_methods:
index:
payment_methods: "Payment Methods"
@@ -3003,8 +3232,11 @@ en_AU:
display: "Display"
active: "Active"
both: "Both"
front_end: "Checkout only"
back_end: "Back office only"
active_yes: "Yes"
active_no: "No"
no_payment_methods_found: "No payment methods found"
new:
new_payment_method: "New Payment Method"
back_to_payment_methods_list: "Back To Payment Methods List"
@@ -3033,7 +3265,11 @@ en_AU:
active: "Active"
active_yes: "Yes"
active_no: "No"
both: "Both Checkout and Back office"
front_end: "Checkout only"
back_end: "Back office only"
tags: "Tags"
deactivation_warning: "De-activating a payment method can make the payment method disappear from your list. Alternatively, you can hide a payment method from the checkout page by setting the option 'Display' to 'back office only'."
providers:
provider: "Provider"
payments:
@@ -3041,6 +3277,8 @@ en_AU:
stripe:
error_saving_payment: Error saving payment
submitting_payment: Submitting payment...
paypal:
no_payment_via_admin_backend: Paypal payments cannot be captured in the Backoffice
products:
image_upload_error: "The product image was not recognised. Please upload an image in PNG or JPG format."
new:
@@ -3094,6 +3332,8 @@ en_AU:
bulk_coop_allocation: 'Bulk Co-op - Allocation'
bulk_coop_packing_sheets: 'Bulk Co-op - Packing Sheets'
bulk_coop_customer_payments: 'Bulk Co-op - Customer Payments'
customer_names_message:
customer_names_tip: "If customer names are hidden for orders you have supplied, you can contact the distributor and ask if they can update their shop preferences to allow their suppliers to view customer names."
users:
index:
listing_users: "Listing Users"
@@ -3135,6 +3375,8 @@ en_AU:
price: "Price"
display_as: "Display As"
display_name: "Display Name"
display_as_placeholder: 'eg. 2 kg'
display_name_placeholder: 'eg. Tomatoes'
autocomplete:
out_of_stock: "Out of Stock"
producer_name: "Producer"
@@ -3174,6 +3416,7 @@ en_AU:
format: '%Y-%m-%d'
js_format: 'yy-mm-dd'
orders:
error_flash_for_unavailable_items: "An item in your cart has become unavailable. Please update the selected quantities."
edit:
login_to_view_order: "Please log in to view your order."
bought:
@@ -3201,6 +3444,14 @@ en_AU:
invalid: invalid
order_mailer:
cancel_email:
customer_greeting: "Dear %{name},"
instructions_html: "Your order with <strong>%{distributor}</strong> has been CANCELED. Please retain this cancellation information for your records."
dont_cancel: "If you have changed your mind or don't wish to cancel this order please contact %{email}"
order_summary_canceled_html: "<strong>Order Summary #%{number} [CANCELED]</strong>"
details: "Here are the details of what you ordered:"
unpaid_order: "Your order was unpaid so no refund has been made"
paid_order: "Your order was paid so %{distributor} has refunded the full amount"
credit_order: "Your order was paid so your account has been credited"
subject: "Cancellation of Order"
confirm_email:
subject: "Order Confirmation"
@@ -3217,6 +3468,7 @@ en_AU:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
subject: "Reset password instructions"
confirmation_instructions:
subject: "Please confirm your OFN account"
shipment_mailer:
@@ -3228,6 +3480,11 @@ en_AU:
thanks: "Thank you for your business."
track_information: "Tracking Information: %{tracking}"
track_link: "Tracking Link: %{url}"
test_mailer:
test_email:
greeting: "Congratulations!"
message: "If you have received this email, then your email settings are correct."
subject: "Test Mail"
order_state:
address: address
adjustments: adjustments
@@ -3310,3 +3567,8 @@ en_AU:
shipment:
cannot_ready: "Cannot ready shipment."
invalid_taxonomy_id: "Invalid taxonomy id."
activerecord:
models:
spree/payment:
one: Payment
other: Payments

View File

@@ -269,6 +269,7 @@ en_BE:
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
admin:
begins_at: Begins At
begins_on: Begins On
@@ -1497,7 +1498,8 @@ en_BE:
hubs_distance: Closest to
hubs_distance_filter: "Show me shops near %{location}"
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
products_clear: Clear
@@ -1635,7 +1637,8 @@ en_BE:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: "An additional item is already confirmed for this order cycle"
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -2681,6 +2684,7 @@ en_BE:
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
@@ -2782,6 +2786,7 @@ en_BE:
zipcode: Postcode
successfully_created: '%{resource} has been successfully created! '
successfully_updated: '%{resource} has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
actions:
update: "Update"
@@ -2883,6 +2888,8 @@ en_BE:
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -2890,6 +2897,8 @@ en_BE:
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:

View File

@@ -289,10 +289,16 @@ en_CA:
create_and_add_another: "Create and Add Another"
create: "Create"
cancel: "Cancel"
resume: "Resume"
save: "Save"
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
cut: "Cut"
paste: "Paste"
destroy: "Destroy"
rename: "Rename"
admin:
begins_at: Begins At
begins_on: Begins On
@@ -351,6 +357,7 @@ en_CA:
has_n_rules: "has %{num} rules"
unsaved_confirm_leave: "There are unsaved changes on this page. Continue without saving?"
unsaved_changes: "You have unsaved changes"
available_units: "Available Units"
shopfront_settings:
embedded_shopfront_settings: "Embedded Shopfront Settings"
enable_embedded_shopfronts: "Enable Embedded Shopfronts"
@@ -410,6 +417,7 @@ en_CA:
search_by_email: "Search by email/code..."
guest_label: "Guest checkout"
credit_owed: "Credit Owed"
balance_due: "Balance Due"
destroy:
has_associated_orders: "Delete failed: customer has associated orders with his shop"
contents:
@@ -598,6 +606,8 @@ en_CA:
controls:
back_to_my_inventory: Back to my inventory
orders:
edit:
order_sure_want_to: Are you sure you want to %{event} this order?
invoice_email_sent: 'Invoice email has been sent'
order_email_resent: 'Order email has been resent'
bulk_management:
@@ -646,6 +656,7 @@ en_CA:
invoice_text: Add customized text at the end of invoices
terms_and_conditions: "Terms and Conditions"
remove_terms_and_conditions: "Remove File"
uploaded_on: "uploaded on"
contact:
name: Name
name_placeholder: eg. Gustav Plum
@@ -754,6 +765,7 @@ en_CA:
is displayed on your shop only when you have no active order cycles
(ie. shop is closed).
shopfront_category_ordering: "Shopfront Category Ordering"
shopfront_category_ordering_note: "(top to bottom)"
open_date: "Open Date"
close_date: "Close Date"
social:
@@ -1163,6 +1175,7 @@ en_CA:
cart: "cart"
message_html: "You have an order for this order cycle already. Check the %{cart} to see the items you ordered before. You can also cancel items as long as the order cycle is open."
terms_and_conditions:
message_html: "I agree to the seller's %{terms_and_conditions_link}."
link_text: "Terms and Conditions"
failed: "The checkout failed. Please let us know so that we can process your order."
shops:
@@ -1577,7 +1590,9 @@ en_CA:
hubs_distance: Closest to
hubs_distance_filter: "Show me shops near %{location}"
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
products_clear: Clear
@@ -1723,7 +1738,9 @@ en_CA:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: "An additional item is already confirmed for this order cycle"
one: An additional item is already confirmed for this order cycle.
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -2401,6 +2418,14 @@ en_CA:
By creating rules related to a specific customer tag, you can override
the default behaviour (whether it be to show or to hide items) for customers
with the specified tag.
terms_and_conditions_info:
title: "Uploading Terms and Conditions"
message_1: "Terms and Conditions are the contract between you, the seller, and the shopper. They can be anything you want every shopper to understand about your farm, CSA, hub, market, etc. If you upload a file here shoppers must accept your Terms and Conditions in order to complete checkout. For the shopper this will appear as a checkbox at checkout that must be checked in order to proceed with checkout. "
message_2: "Shoppers will only be required to accept Terms and Conditions once. However if you change you Terms and Conditions shoppers will again be required to accept them before they can checkout."
terms_and_conditions_warning:
title: "Uploading Terms and Conditions"
message_1: "All your buyers will have to agree to them once at checkout. If you update the file, all your buyers will have to agree to them again at checkout."
message_2: "For buyers with subscriptions, you need to email them the Terms and Conditions (or the changes to them) for now, nothing will notify them about these new Terms and Conditions."
panels:
save: SAVE
saved: SAVED
@@ -2858,6 +2883,8 @@ en_CA:
delete: "Delete"
cannot_set_shipping_method_without_address: "Cannot set shipping method until customer details are provided."
no_tracking_present: "No tracking details provided."
tracking: "Tracking"
tracking_number: "Tracking Number"
order_total: "Order Total"
customer_details: "Customer Details"
customer_search: "Customer Search"
@@ -2879,6 +2906,7 @@ en_CA:
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
@@ -2890,6 +2918,8 @@ en_CA:
server: "Server"
test_mode: "Test Mode"
logourl: "Logourl"
are_you_sure_delete: "Are you sure you want to delete this record?"
confirm_delete: "Confirm Deletion"
configurations: "Configurations"
general_settings: "General Settings"
site_name: "Site Name"
@@ -2999,6 +3029,7 @@ en_CA:
has_no_shipped_units: "has no shipped units"
successfully_created: '%{resource}has been successfully created!'
successfully_updated: '%{resource}has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered."
not_available: "N/A"
order_populator:
@@ -3008,7 +3039,9 @@ en_CA:
shared:
error_messages:
errors_prohibited_this_record_from_being_saved:
one: " 1 errors prohibited this record from being saved:"
one: "1 error prohibited this record from being saved:"
few: " %{count}errors prohibited this record from being saved:"
many: " %{count}errors prohibited this record from being saved:"
other: " %{count}errors prohibited this record from being saved:"
there_were_problems_with_the_following_fields: "There were problems with the following fields"
payments_list:
@@ -3047,7 +3080,6 @@ en_CA:
index:
inherits_properties_checkbox_hint: "Inherit properties from %{supplier}? (unless overridden above)"
add_product_properties: "Add Product Properties"
select_from_prototype: "Select From Prototype"
properties:
index:
properties: "Properties"
@@ -3140,6 +3172,8 @@ en_CA:
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -3147,6 +3181,8 @@ en_CA:
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:
@@ -3421,6 +3457,7 @@ en_CA:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
subject: "Reset password instructions"
confirmation_instructions:
subject: "Please confirm your OFN account"
shipment_mailer:

View File

@@ -274,6 +274,7 @@ en_DE:
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
admin:
begins_at: Begins At
begins_on: Begins On
@@ -1507,7 +1508,8 @@ en_DE:
hubs_distance: Closest to
hubs_distance_filter: "Show me shops near %{location}"
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
products_clear: Clear
@@ -1645,7 +1647,8 @@ en_DE:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: "An additional item is already confirmed for this order cycle"
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -2694,6 +2697,7 @@ en_DE:
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
@@ -2797,6 +2801,7 @@ en_DE:
error_user_destroy_with_orders: "Users with completed orders may not be deleted"
successfully_created: '%{resource} has been successfully created!'
successfully_updated: '%{resource} has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
actions:
update: "Update"
@@ -2900,6 +2905,8 @@ en_DE:
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -2907,6 +2914,8 @@ en_DE:
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:

View File

@@ -289,10 +289,16 @@ en_FR:
create_and_add_another: "Create and Add Another"
create: "Create"
cancel: "Cancel"
resume: "Resume"
save: "Save"
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
cut: "Cut"
paste: "Paste"
destroy: "Destroy"
rename: "Rename"
admin:
begins_at: Begins At
begins_on: Begins On
@@ -600,6 +606,8 @@ en_FR:
controls:
back_to_my_inventory: Back to my inventory
orders:
edit:
order_sure_want_to: Are you sure you want to %{event} this order?
invoice_email_sent: 'Invoice email has been sent'
order_email_resent: 'Order email has been resent'
bulk_management:
@@ -648,6 +656,7 @@ en_FR:
invoice_text: Add customized text at the end of invoices
terms_and_conditions: "Terms and Conditions"
remove_terms_and_conditions: "Remove File"
uploaded_on: "uploaded on"
contact:
name: Name
name_placeholder: eg. Gustav Plum
@@ -756,6 +765,7 @@ en_FR:
is displayed on your shop only when you have no active order cycles
(ie. shop is closed).
shopfront_category_ordering: "Shopfront Category Ordering"
shopfront_category_ordering_note: "(top to bottom)"
open_date: "Open Date"
close_date: "Close Date"
social:
@@ -1165,6 +1175,7 @@ en_FR:
cart: "cart"
message_html: "You have an order for this order cycle already. Check the %{cart} to see the items you ordered before. You can also cancel items as long as the order cycle is open."
terms_and_conditions:
message_html: "I agree to the seller's %{terms_and_conditions_link}."
link_text: "Terms and Conditions"
failed: "The checkout failed. Please let us know so that we can process your order."
shops:
@@ -1579,7 +1590,9 @@ en_FR:
hubs_distance: Closest to
hubs_distance_filter: "Show me shops near %{location}"
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
one: Your order with <a href='%{path}' target='_blank'>%{shop}/%{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
products_clear: Clear
@@ -1725,7 +1738,9 @@ en_FR:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: "An additional item is already confirmed for this order cycle"
one: An additional item is already confirmed for this order cycle
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -2403,6 +2418,14 @@ en_FR:
By creating rules related to a specific customer tag, you can override
the default behaviour (whether it be to show or to hide items) for customers
with the specified tag.
terms_and_conditions_info:
title: "Uploading Terms and Conditions"
message_1: "Terms and Conditions are the contract between you, the seller, and the shopper. If you upload a file here shoppers must accept your Terms and Conditions in order to complete checkout. For the shopper this will appear as a checkbox at checkout that must be checked in order to proceed with checkout. We highly recommend you upload Terms and Conditions in alignment with national legislation."
message_2: "Shoppers will only be required to accept Terms and Conditions once. However if you change you Terms and Conditions shoppers will again be required to accept them before they can checkout."
terms_and_conditions_warning:
title: "Uploading Terms and Conditions"
message_1: "All your buyers will have to agree to them once at checkout. If you update the file, all your buyers will have to agree to them again at checkout."
message_2: "For buyers with subscriptions, you need to email them the Terms and Conditions (or the changes to them) for now, nothing will notify them about these new Terms and Conditions."
panels:
save: SAVE
saved: SAVED
@@ -2861,6 +2884,8 @@ en_FR:
delete: "Delete"
cannot_set_shipping_method_without_address: "Cannot set shipping method until customer details are provided."
no_tracking_present: "No tracking details provided."
tracking: "Tracking"
tracking_number: "Tracking Number"
order_total: "Order Total"
customer_details: "Customer Details"
customer_search: "Customer Search"
@@ -2882,6 +2907,7 @@ en_FR:
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
@@ -2893,6 +2919,8 @@ en_FR:
server: "Server"
test_mode: "Test Mode"
logourl: "Logourl"
are_you_sure_delete: "Are you sure you want to delete this record?"
confirm_delete: "Confirm Deletion"
configurations: "Configurations"
general_settings: "General Settings"
site_name: "Site Name"
@@ -3002,6 +3030,7 @@ en_FR:
has_no_shipped_units: "has no shipped units"
successfully_created: '%{resource} has been successfully created!'
successfully_updated: '%{resource} has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
not_available: "N/A"
order_populator:
@@ -3012,6 +3041,8 @@ en_FR:
error_messages:
errors_prohibited_this_record_from_being_saved:
one: "1 error prohibited this record from being saved:"
few: "%{count} errors prohibited this record from being saved:"
many: "%{count} errors prohibited this record from being saved:"
other: "%{count} errors prohibited this record from being saved:"
there_were_problems_with_the_following_fields: "There were problems with the following fields"
payments_list:
@@ -3050,7 +3081,6 @@ en_FR:
index:
inherits_properties_checkbox_hint: "Inherit properties from %{supplier}? (unless overridden above)"
add_product_properties: "Add Product Properties"
select_from_prototype: "Select From Prototype"
properties:
index:
properties: "Properties"
@@ -3143,6 +3173,8 @@ en_FR:
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -3150,6 +3182,8 @@ en_FR:
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:

View File

@@ -24,6 +24,9 @@ en_GB:
spree/credit_card:
base: "Credit Card"
number: "Number"
month: "Month"
verification_value: "Verification Value"
year: "Year"
order_cycle:
orders_close_at: Close date
variant_override:
@@ -286,10 +289,16 @@ en_GB:
create_and_add_another: "Create and Add Another"
create: "Create"
cancel: "Cancel"
resume: "Resume"
save: "Save"
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
cut: "Cut"
paste: "Paste"
destroy: "Destroy"
rename: "Rename"
admin:
begins_at: Begins At
begins_on: Begins On
@@ -348,6 +357,7 @@ en_GB:
has_n_rules: "has %{num} rules"
unsaved_confirm_leave: "There are unsaved changed on this page. Continue without saving?"
unsaved_changes: "You have unsaved changes"
available_units: "Available Units"
shopfront_settings:
embedded_shopfront_settings: "Embedded Shopfront Settings"
enable_embedded_shopfronts: "Enable Embedded Shopfronts"
@@ -407,6 +417,7 @@ en_GB:
search_by_email: "Search by email/code..."
guest_label: "Guest checkout"
credit_owed: "Credit Owed"
balance_due: "Balance Due"
destroy:
has_associated_orders: "Delete failed: customer has associated orders with this shop"
contents:
@@ -595,6 +606,8 @@ en_GB:
controls:
back_to_my_inventory: Back to my inventory
orders:
edit:
order_sure_want_to: Are you sure you want to %{event} this order?
invoice_email_sent: 'Invoice email has been sent'
order_email_resent: 'Order email has been resent'
bulk_management:
@@ -643,6 +656,7 @@ en_GB:
invoice_text: Add customized text at the end of invoices
terms_and_conditions: "Terms and Conditions"
remove_terms_and_conditions: "Remove File"
uploaded_on: "uploaded on"
contact:
name: Name
name_placeholder: eg. Amanda Plum
@@ -751,6 +765,7 @@ en_GB:
is displayed on your shop only when you have no active order cycles
(ie. shop is closed).
shopfront_category_ordering: "Shopfront Category Ordering"
shopfront_category_ordering_note: "(top to bottom)"
open_date: "Open Date"
close_date: "Close Date"
social:
@@ -1160,6 +1175,7 @@ en_GB:
cart: "cart"
message_html: "You have an order for this order cycle already. Check the %{cart} to see the items you ordered before. You can also cancel items as long as the order cycle is open."
terms_and_conditions:
message_html: "I agree to the seller's %{terms_and_conditions_link}."
link_text: "Terms and Conditions"
failed: "The checkout failed. Please let us know so that we can process your order."
shops:
@@ -1575,6 +1591,8 @@ en_GB:
hubs_distance_filter: "Show me shops near %{location}"
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
products_clear: Clear
@@ -1720,7 +1738,9 @@ en_GB:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: "An additional item is already confirmed for this order cycle"
one: An additional item is already confirmed for this order cycle
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -1999,6 +2019,7 @@ en_GB:
calculator: "Calculator"
calculator_values: "Calculator values"
calculator_settings_warning: "If you are changing the calculator type, you must save first before you can edit the calculator settings"
calculator_preferred_unit_error: "must be kg or lb"
flat_percent_per_item: "Flat Percent (per item)"
flat_rate_per_item: "Flat Rate (per item)"
flat_rate_per_order: "Flat Rate (per order)"
@@ -2397,6 +2418,14 @@ en_GB:
By creating rules related to a specific customer tag, you can override
the default behaviour (whether it be to show or to hide items) for customers
with the specified tag.
terms_and_conditions_info:
title: "Uploading Terms and Conditions"
message_1: "Terms and Conditions are the contract between you, the seller, and the shopper. If you upload a file here shoppers must accept your Terms and Conditions in order to complete checkout. For the shopper this will appear as a checkbox at checkout that must be checked in order to proceed with checkout. We highly recommend you upload Terms and Conditions in alignment with national legislation."
message_2: "Shoppers will only be required to accept Terms and Conditions once. However if you change you Terms and Conditions shoppers will again be required to accept them before they can checkout."
terms_and_conditions_warning:
title: "Uploading Terms and Conditions"
message_1: "All your buyers will have to agree to them once at checkout. If you update the file, all your buyers will have to agree to them again at checkout."
message_2: "For buyers with subscriptions, you need to email them the Terms and Conditions (or the changes to them) for now, nothing will notify them about these new Terms and Conditions."
panels:
save: SAVE
saved: SAVED
@@ -2607,8 +2636,12 @@ en_GB:
shopfront:
variant:
add_to_cart: "Add"
in_cart: "in cart"
quantity_in_cart: "%{quantity} in cart"
bulk_buy_modal:
min_quantity: "Min quantity"
max_quantity: "Max quantity"
price_breakdown: "Price breakdown"
variants:
on_demand:
'yes': "Unlimited"
@@ -2857,6 +2890,8 @@ en_GB:
delete: "Delete"
cannot_set_shipping_method_without_address: "Cannot set shipping method until customer details are provided."
no_tracking_present: "No tracking details provided."
tracking: "Tracking"
tracking_number: "Tracking Number"
order_total: "Order Total"
customer_details: "Customer Details"
customer_search: "Customer Search"
@@ -2878,6 +2913,7 @@ en_GB:
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
@@ -2889,6 +2925,8 @@ en_GB:
server: "Server"
test_mode: "Test Mode"
logourl: "Logo url"
are_you_sure_delete: "Are you sure you want to delete this record?"
confirm_delete: "Confirm Deletion"
configurations: "Configurations"
general_settings: "General Settings"
site_name: "Site Name"
@@ -2990,19 +3028,27 @@ en_GB:
inventory_error_flash_for_insufficient_quantity: "An item in your cart has become unavailable."
inventory: Inventory
zipcode: Postcode
weight: Weight (per kg or lb)
error_user_destroy_with_orders: "Users with completed orders may not be deleted"
cannot_create_payment_without_payment_methods: "You cannot create a payment for an order without any payment methods defined."
please_define_payment_methods: "Please define some payment methods first."
options: "Options"
has_no_shipped_units: "has no shipped units"
successfully_created: '%{resource} has been successfully created!'
successfully_updated: '%{resource} has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
not_available: "N/A"
order_populator:
out_of_stock: '%{item} is out of stock.'
actions:
update: "Update"
shared:
error_messages:
errors_prohibited_this_record_from_being_saved:
one: "1 error prohibited this record from being saved:"
few: "%{count} errors prohibited this record from being saved:"
many: "%{count} errors prohibited this record from being saved:"
other: "%{count} errors prohibited this record from being saved:"
there_were_problems_with_the_following_fields: "There were problems with the following fields"
payments_list:
@@ -3041,7 +3087,6 @@ en_GB:
index:
inherits_properties_checkbox_hint: "Inherit properties from %{supplier}? (unless overridden above)"
add_product_properties: "Add Product Properties"
select_from_prototype: "Select From Prototype"
properties:
index:
properties: "Properties"
@@ -3134,6 +3179,8 @@ en_GB:
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -3141,6 +3188,8 @@ en_GB:
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:
@@ -3415,6 +3464,7 @@ en_GB:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
subject: "Reset password instructions"
confirmation_instructions:
subject: "Please confirm your OFN account"
shipment_mailer:

View File

@@ -293,6 +293,7 @@ en_IE:
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
admin:
begins_at: Begins At
begins_on: Begins On
@@ -1577,7 +1578,8 @@ en_IE:
hubs_distance: Closest to
hubs_distance_filter: "Show me shops near %{location}"
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
products_clear: Clear
@@ -1723,7 +1725,8 @@ en_IE:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: "An additional item is already confirmed for this order cycle"
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -2886,6 +2889,7 @@ en_IE:
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
@@ -3006,6 +3010,7 @@ en_IE:
has_no_shipped_units: "has no shipped units"
successfully_created: '%{resource} has been successfully created!'
successfully_updated: '%{resource} has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
not_available: "N/A"
order_populator:
@@ -3015,7 +3020,8 @@ en_IE:
shared:
error_messages:
errors_prohibited_this_record_from_being_saved:
one: "1 error prohibited this record from being saved:"
few: "%{count} errors prohibited this record from being saved:"
many: "%{count} errors prohibited this record from being saved:"
other: "%{count} errors prohibited this record from being saved:"
there_were_problems_with_the_following_fields: "There were problems with the following fields"
payments_list:
@@ -3054,7 +3060,6 @@ en_IE:
index:
inherits_properties_checkbox_hint: "Inherit properties from %{supplier}? (unless overridden above)"
add_product_properties: "Add Product Properties"
select_from_prototype: "Select From Prototype"
properties:
index:
properties: "Properties"
@@ -3147,6 +3152,8 @@ en_IE:
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -3154,6 +3161,8 @@ en_IE:
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:

View File

@@ -284,6 +284,7 @@ en_IN:
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
admin:
begins_at: Begins At
begins_on: Begins On
@@ -1558,7 +1559,8 @@ en_IN:
hubs_distance: Closest to
hubs_distance_filter: "Show me shops near %{location}"
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
products_clear: Clear
@@ -1704,7 +1706,8 @@ en_IN:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: "An additional item is already confirmed for this order cycle"
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -2850,6 +2853,7 @@ en_IN:
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
@@ -2968,13 +2972,15 @@ en_IN:
options: "Options"
successfully_created: '%{resource} has been successfully created!'
successfully_updated: '%{resource} has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
actions:
update: "Update"
shared:
error_messages:
errors_prohibited_this_record_from_being_saved:
one: "1 error prohibited this record from being saved:"
few: "%{count} errors prohibited this record from being saved:"
many: "%{count} errors prohibited this record from being saved:"
other: "%{count} errors prohibited this record from being saved:"
there_were_problems_with_the_following_fields: "There were problems with the following fields"
payments_list:
@@ -3012,7 +3018,6 @@ en_IN:
index:
inherits_properties_checkbox_hint: "Inherit properties from %{supplier}? (unless overridden above)"
add_product_properties: "Add Product Properties"
select_from_prototype: "Select From Prototype"
properties:
index:
properties: "Properties"
@@ -3105,6 +3110,8 @@ en_IN:
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -3112,6 +3119,8 @@ en_IN:
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:

View File

@@ -24,6 +24,9 @@ en_NZ:
spree/credit_card:
base: "Credit Card"
number: "Number"
month: "Month"
verification_value: "Verification Value"
year: "Year"
order_cycle:
orders_close_at: Close date
variant_override:
@@ -286,10 +289,16 @@ en_NZ:
create_and_add_another: "Create and Add Another"
create: "Create"
cancel: "Cancel"
resume: "Resume"
save: "Save"
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
cut: "Cut"
paste: "Paste"
destroy: "Destroy"
rename: "Rename"
admin:
begins_at: Begins At
begins_on: Begins On
@@ -348,6 +357,7 @@ en_NZ:
has_n_rules: "has %{num} rules"
unsaved_confirm_leave: "There are unsaved changed on this page. Continue without saving?"
unsaved_changes: "You have unsaved changes"
available_units: "Available Units"
shopfront_settings:
embedded_shopfront_settings: "Embedded Shopfront Settings"
enable_embedded_shopfronts: "Enable Embedded Shopfronts"
@@ -407,6 +417,7 @@ en_NZ:
search_by_email: "Search by email/code..."
guest_label: "Guest checkout"
credit_owed: "Credit Owed"
balance_due: "Balance Due"
destroy:
has_associated_orders: "Delete failed: customer has associated orders with his shop"
contents:
@@ -595,6 +606,8 @@ en_NZ:
controls:
back_to_my_inventory: Back to my inventory
orders:
edit:
order_sure_want_to: Are you sure you want to %{event} this order?
invoice_email_sent: 'Invoice email has been sent'
order_email_resent: 'Order email has been resent'
bulk_management:
@@ -643,6 +656,7 @@ en_NZ:
invoice_text: Add customized text at the end of invoices
terms_and_conditions: "Terms and Conditions"
remove_terms_and_conditions: "Remove File"
uploaded_on: "uploaded on"
contact:
name: Name
name_placeholder: eg. Gustav Plum
@@ -751,6 +765,7 @@ en_NZ:
is displayed on your shop only when you have no active order cycles
(ie. shop is closed).
shopfront_category_ordering: "Shopfront Category Ordering"
shopfront_category_ordering_note: "(top to bottom)"
open_date: "Open Date"
close_date: "Close Date"
social:
@@ -1160,6 +1175,7 @@ en_NZ:
cart: "cart"
message_html: "You have an order for this order cycle already. Check the %{cart} to see the items you ordered before. You can also cancel items as long as the order cycle is open."
terms_and_conditions:
message_html: "I agree to the seller's %{terms_and_conditions_link}."
link_text: "Terms and Conditions"
failed: "The checkout failed. Please let us know so that we can process your order."
shops:
@@ -1575,6 +1591,8 @@ en_NZ:
hubs_distance_filter: "Show me shops near %{location}"
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
products_clear: Clear
@@ -1720,7 +1738,9 @@ en_NZ:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: "An additional item is already confirmed for this order cycle"
one: An additional item is already confirmed for this order cycle
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -1999,6 +2019,7 @@ en_NZ:
calculator: "Calculator"
calculator_values: "Calculator values"
calculator_settings_warning: "If you are changing the calculator type, you must save first before you can edit the calculator settings"
calculator_preferred_unit_error: "must be kg or lb"
flat_percent_per_item: "Flat Percent (per item)"
flat_rate_per_item: "Flat Rate (per item)"
flat_rate_per_order: "Flat Rate (per order)"
@@ -2397,6 +2418,14 @@ en_NZ:
By creating rules related to a specific customer tag, you can override
the default behaviour (whether it be to show or to hide items) for customers
with the specified tag.
terms_and_conditions_info:
title: "Uploading Terms and Conditions"
message_1: "Terms and Conditions are the contract between you, the seller, and the shopper. If you upload a file here shoppers must accept your Terms and Conditions in order to complete checkout. For the shopper this will appear as a checkbox at checkout that must be checked in order to proceed with checkout. We highly recommend you upload Terms and Conditions in alignment with national legislation."
message_2: "Shoppers will only be required to accept Terms and Conditions once. However if you change the Terms and Conditions shoppers will be required to accept them again before they can checkout."
terms_and_conditions_warning:
title: "Uploading Terms and Conditions"
message_1: "All your buyers will have to agree to them once at checkout. If you update the file, all your buyers will have to agree to them again at checkout."
message_2: "For buyers with subscriptions, you need to email them the Terms and Conditions (or the changes to them) for now, nothing will notify them about these new Terms and Conditions."
panels:
save: SAVE
saved: SAVED
@@ -2601,8 +2630,12 @@ en_NZ:
shopfront:
variant:
add_to_cart: "Add"
in_cart: "in cart"
quantity_in_cart: "%{quantity} in cart"
bulk_buy_modal:
min_quantity: "Min quantity"
max_quantity: "Max quantity"
price_breakdown: "Price breakdown"
variants:
on_demand:
'yes': "On demand"
@@ -2851,6 +2884,8 @@ en_NZ:
delete: "Delete"
cannot_set_shipping_method_without_address: "Cannot set shipping method until customer details are provided."
no_tracking_present: "No tracking details provided."
tracking: "Tracking"
tracking_number: "Tracking Number"
order_total: "Order Total"
customer_details: "Customer Details"
customer_search: "Customer Search"
@@ -2872,6 +2907,7 @@ en_NZ:
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
@@ -2883,6 +2919,8 @@ en_NZ:
server: "Server"
test_mode: "Test Mode"
logourl: "Logourl"
are_you_sure_delete: "Are you sure you want to delete this record?"
confirm_delete: "Confirm Deletion"
configurations: "Configurations"
general_settings: "General Settings"
site_name: "Site Name"
@@ -2984,19 +3022,27 @@ en_NZ:
inventory_error_flash_for_insufficient_quantity: "An item in your cart has become unavailable."
inventory: Inventory
zipcode: Postcode
weight: Weight
error_user_destroy_with_orders: "Users with completed orders may not be deleted"
cannot_create_payment_without_payment_methods: "You cannot create a payment for an order without any payment methods defined."
please_define_payment_methods: "Please define some payment methods first."
options: "Options"
has_no_shipped_units: "has no shipped units"
successfully_created: '%{resource} has been successfully created!'
successfully_updated: '%{resource} has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
not_available: "N/A"
order_populator:
out_of_stock: '%{item} is out of stock.'
actions:
update: "Update"
shared:
error_messages:
errors_prohibited_this_record_from_being_saved:
one: "1 error prohibited this record from being saved:"
few: "%{count} errors prohibited this record from being saved:"
many: "%{count} errors prohibited this record from being saved:"
other: "%{count} errors prohibited this record from being saved:"
there_were_problems_with_the_following_fields: "There were problems with the following fields"
payments_list:
@@ -3035,7 +3081,6 @@ en_NZ:
index:
inherits_properties_checkbox_hint: "Inherit properties from %{supplier}? (unless overridden above)"
add_product_properties: "Add Product Properties"
select_from_prototype: "Select From Prototype"
properties:
index:
properties: "Properties"
@@ -3128,6 +3173,8 @@ en_NZ:
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -3135,6 +3182,8 @@ en_NZ:
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:
@@ -3409,6 +3458,7 @@ en_NZ:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please contact us.
subject: "Reset password instructions"
confirmation_instructions:
subject: "Please confirm your OFN account"
shipment_mailer:

View File

@@ -282,6 +282,7 @@ en_PH:
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
admin:
begins_at: Begins At
begins_on: Begins On
@@ -1540,7 +1541,8 @@ en_PH:
hubs_distance: Closest to
hubs_distance_filter: "Show me shops near %{location}"
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
products_clear: Clear
@@ -1679,7 +1681,8 @@ en_PH:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: "An additional item is already confirmed for this order cycle"
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -2811,6 +2814,7 @@ en_PH:
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
@@ -2923,6 +2927,7 @@ en_PH:
options: "Options"
successfully_created: '%{resource} has been successfully created!'
successfully_updated: '%{resource} has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
actions:
update: "Update"
@@ -2962,7 +2967,6 @@ en_PH:
index:
inherits_properties_checkbox_hint: "Inherit properties from %{supplier}? (unless overridden above)"
add_product_properties: "Add Product Properties"
select_from_prototype: "Select From Prototype"
properties:
index:
properties: "Properties"
@@ -3055,6 +3059,8 @@ en_PH:
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -3062,6 +3068,8 @@ en_PH:
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:

View File

@@ -24,6 +24,9 @@ en_US:
spree/credit_card:
base: "Credit Card"
number: "Number"
month: "Month"
verification_value: "Verification Value"
year: "Year"
order_cycle:
orders_close_at: Close Date
variant_override:
@@ -286,10 +289,16 @@ en_US:
create_and_add_another: "Create and Add Another"
create: "Create"
cancel: "Cancel"
resume: "Resume"
save: "Save"
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
cut: "Cut"
paste: "Paste"
destroy: "Destroy"
rename: "Rename"
admin:
begins_at: Begins At
begins_on: Begins On
@@ -348,6 +357,7 @@ en_US:
has_n_rules: "has %{num} rules"
unsaved_confirm_leave: "There are unsaved changed on this page. Continue without saving?"
unsaved_changes: "You have unsaved changes"
available_units: "Available Units"
shopfront_settings:
embedded_shopfront_settings: "Embedded Shopfront Settings"
enable_embedded_shopfronts: "Enable Embedded Shopfronts"
@@ -407,6 +417,7 @@ en_US:
search_by_email: "Search by email/code..."
guest_label: "Guest checkout"
credit_owed: "Credit Owed"
balance_due: "Balance Due"
destroy:
has_associated_orders: "Delete failed: customer has associated orders with his shop"
contents:
@@ -595,6 +606,8 @@ en_US:
controls:
back_to_my_inventory: Back to my inventory
orders:
edit:
order_sure_want_to: Are you sure you want to %{event} this order?
invoice_email_sent: 'Invoice email has been sent'
order_email_resent: 'Order email has been resent'
bulk_management:
@@ -643,6 +656,7 @@ en_US:
invoice_text: Add customized text at the end of invoices
terms_and_conditions: "Terms and Conditions"
remove_terms_and_conditions: "Remove File"
uploaded_on: "uploaded on"
contact:
name: Name
name_placeholder: eg. Justin Jones
@@ -751,6 +765,7 @@ en_US:
is displayed on your shop only when you have no active order cycles
(ie. shop is closed).
shopfront_category_ordering: "Shopfront Category Ordering"
shopfront_category_ordering_note: "(top to bottom)"
open_date: "Open Date"
close_date: "Close Date"
social:
@@ -1160,6 +1175,7 @@ en_US:
cart: "cart"
message_html: "You have an order for this order cycle already. Check the %{cart} to see the items you ordered before. You can also cancel items as long as the order cycle is open."
terms_and_conditions:
message_html: "I agree to the seller's %{terms_and_conditions_link}."
link_text: "Terms and Conditions"
failed: "The checkout failed. Please let us know so that we can process your order."
shops:
@@ -1483,7 +1499,7 @@ en_US:
email_confirm_customer_details_html: "Here are your order details from <strong>%{distributor}</strong>:"
email_confirm_customer_signoff: "Kind regards,"
email_confirm_shop_greeting: "Hi %{name},"
email_confirm_shop_order_html: "Awesome! You have a new order for <strong>%{distributor}</strong>!"
email_confirm_shop_order_html: "Woo hoo! You have a new order for <strong>%{distributor}</strong>!"
email_confirm_shop_number_html: "Order confirmation <strong>#%{number}</strong>"
email_order_summary_item: "Item"
email_order_summary_quantity: "Qty"
@@ -1575,6 +1591,8 @@ en_US:
hubs_distance_filter: "Show me shops near %{location}"
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
products_clear: Clear
@@ -1720,7 +1738,9 @@ en_US:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: "An additional item is already confirmed for this order cycle"
one: An additional item is already confirmed for this order cycle
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -2398,6 +2418,14 @@ en_US:
By creating rules related to a specific customer tag, you can override
the default behavior (whether it be to show or to hide items) for customers
with the specified tag.
terms_and_conditions_info:
title: "Uploading Terms and Conditions"
message_1: "Terms and Conditions are the contract between you, the seller, and the shopper. If you upload a file here shoppers must accept your Terms and Conditions in order to complete checkout. For the shopper this will appear as a checkbox at checkout that must be checked in order to proceed with checkout. We highly recommend you upload Terms and Conditions in alignment with national legislation."
message_2: "Shoppers will only be required to accept Terms and Conditions once. However if you change your Terms and Conditions shoppers will again be required to accept them before they can checkout."
terms_and_conditions_warning:
title: "Uploading Terms and Conditions"
message_1: "All your buyers will have to agree to them once at checkout. If you update the file, all your buyers will have to agree to them again at checkout."
message_2: "For buyers with subscriptions, you need to email them the Terms and Conditions (or the changes to them) for now, nothing will notify them about these new Terms and Conditions."
panels:
save: SAVE
saved: SAVED
@@ -2602,8 +2630,12 @@ en_US:
shopfront:
variant:
add_to_cart: "Add"
in_cart: "in cart"
quantity_in_cart: "%{quantity} in cart"
bulk_buy_modal:
min_quantity: "Min quantity"
max_quantity: "Max quantity"
price_breakdown: "Price breakdown"
variants:
on_demand:
'yes': "On demand"
@@ -2873,6 +2905,7 @@ en_US:
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
@@ -2884,6 +2917,8 @@ en_US:
server: "Server"
test_mode: "Test Mode"
logourl: "Logourl"
are_you_sure_delete: "Are you sure you want to delete this record?"
confirm_delete: "Confirm Deletion"
configurations: "Configurations"
general_settings: "General Settings"
site_name: "Site Name"
@@ -2990,15 +3025,22 @@ en_US:
cannot_create_payment_without_payment_methods: "You cannot create a payment for an order without any payment methods defined."
please_define_payment_methods: "Please define some payment methods first."
options: "Options"
has_no_shipped_units: "has no shipped units"
successfully_created: '%{resource} has been successfully created!'
successfully_updated: '%{resource} has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
not_available: "N/A"
order_populator:
out_of_stock: '%{item} is out of stock.'
actions:
update: "Update"
shared:
error_messages:
errors_prohibited_this_record_from_being_saved:
one: "1 error prohibited this record from being saved:"
few: "%{count} errors prohibited this record from being saved:"
many: "%{count} errors prohibited this record from being saved:"
other: "%{count} errors prohibited this record from being saved:"
there_were_problems_with_the_following_fields: "There were problems with the following fields"
payments_list:
@@ -3037,7 +3079,6 @@ en_US:
index:
inherits_properties_checkbox_hint: "Inherit properties from %{supplier}? (unless overridden above)"
add_product_properties: "Add Product Properties"
select_from_prototype: "Select From Prototype"
properties:
index:
properties: "Properties"
@@ -3130,6 +3171,8 @@ en_US:
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -3137,6 +3180,8 @@ en_US:
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:
@@ -3411,6 +3456,7 @@ en_US:
issue_text: |
If the above URL does nor work, try to copy and paste it into your browser.
If you continue to have problems please feel free to contact us.
subject: "Reset password instructions"
confirmation_instructions:
subject: "Please confirm your OFN account"
shipment_mailer:

View File

@@ -283,6 +283,7 @@ en_ZA:
edit: "Edit"
update: "Update"
delete: "Delete"
add: "Add"
admin:
begins_at: Begins At
begins_on: Begins On
@@ -1547,7 +1548,8 @@ en_ZA:
hubs_distance: Closest to
hubs_distance_filter: "Show me shops near %{location}"
shop_changeable_orders_alert_html:
one: Your order with <a href='%{path}' target='_blank'>%{shop} / %{order}</a> is open for review. You can make changes until %{oc_close}.
few: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
many: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
other: You have <a href='%{path}' target='_blank'>%{count} orders with %{shop}</a> currently open for review. You can make changes until %{oc_close}.
orders_changeable_orders_alert_html: This order has been confirmed, but you can make changes until <strong>%{oc_close}</strong>.
products_clear: Clear
@@ -1693,7 +1695,8 @@ en_ZA:
orders_could_not_cancel: "Sorry, the order could not be cancelled"
orders_cannot_remove_the_final_item: "Cannot remove the final item from an order, please cancel the order instead."
orders_bought_items_notice:
one: "An additional item is already confirmed for this order cycle"
few: "%{count} additional items already confirmed for this order cycle"
many: "%{count} additional items already confirmed for this order cycle"
other: "%{count} additional items already confirmed for this order cycle"
orders_bought_edit_button: Edit confirmed items
orders_bought_already_confirmed: "* already confirmed"
@@ -2756,6 +2759,7 @@ en_ZA:
adjustments: "Adjustments"
continue: "Continue"
fill_in_customer_info: "Please fill in customer info"
credit_card: "Credit Card"
new_payment: "New Payment"
capture: "Capture"
void: "Void"
@@ -2858,6 +2862,7 @@ en_ZA:
error_user_destroy_with_orders: "Users with completed orders may not be deleted"
successfully_created: '%{resource} has been successfully created!'
successfully_updated: '%{resource} has been successfully updated!'
payment_method: "Payment Method"
payment_processing_failed: "Payment could not be processed, please check the details you entered"
actions:
update: "Update"
@@ -2959,6 +2964,8 @@ en_ZA:
active_products:
zero: "You don't have any active products."
one: "You have one active product"
few: "You have %{count} active products"
many: "You have %{count} active products"
other: "You have %{count} active products"
order_cycles:
order_cycles: "Order Cycles"
@@ -2966,6 +2973,8 @@ en_ZA:
you_have_active:
zero: "You don't have any active order cycles."
one: "You have one active order cycle."
few: "You have %{count} active order cycles."
many: "You have %{count} active order cycles."
other: "You have %{count} active order cycles."
manage_order_cycles: "MANAGE ORDER CYCLES"
shipping_methods:

View File

@@ -289,10 +289,16 @@ es:
create_and_add_another: "Crear y agregar otro"
create: "Crear"
cancel: "Cancelar"
resume: "Continuar"
save: "Guardar"
edit: "Editar"
update: "Actualizar"
delete: "Borrar"
add: "Añadir"
cut: "Cortar"
paste: "Pegar"
destroy: "Eliminar"
rename: "Renombrar"
admin:
begins_at: Empieza en
begins_on: Comienza en
@@ -351,6 +357,7 @@ es:
has_n_rules: "Tiene %{num} reglas"
unsaved_confirm_leave: "Has cambios sin guardar en esta página ¿Continuar sin guardar?"
unsaved_changes: "Tienes cambios sin guardar"
available_units: "Unidades disponibles"
shopfront_settings:
embedded_shopfront_settings: "Configuración de la tienda integrada"
enable_embedded_shopfronts: "Habilitar tiendas integradas"
@@ -410,6 +417,7 @@ es:
search_by_email: "Buscar por email/código"
guest_label: "Hacer pedido como invitado"
credit_owed: "Crédito debido"
balance_due: "Saldo adeudado"
destroy:
has_associated_orders: "Se ha producido un error en la eliminación: la consumidora tiene pedidos asociados en su tienda."
contents:
@@ -598,6 +606,8 @@ es:
controls:
back_to_my_inventory: Volver a mi inventario
orders:
edit:
order_sure_want_to: ¿Está seguro de que desea %{event} este pedido?
invoice_email_sent: 'Se ha enviado correo electrónico con la factura.'
order_email_resent: 'El correo electrónico del pedido se ha reenviado'
bulk_management:
@@ -646,6 +656,7 @@ es:
invoice_text: Añadir texto personalizado al final de las facturas
terms_and_conditions: "Términos y Condiciones"
remove_terms_and_conditions: "Eliminar archivo"
uploaded_on: "Subido en"
contact:
name: Nombre
name_placeholder: ej. Gustav Plum
@@ -756,6 +767,7 @@ es:
en tu tienda sólo cuando no tienes ciclos de pedidos activos (p.e. la
tienda está cerrada).
shopfront_category_ordering: "Orden de las categorías de la tienda"
shopfront_category_ordering_note: "(de arriba hacia abajo)"
open_date: "Fecha de Inicio"
close_date: "Fecha de Finalización"
social:
@@ -1165,6 +1177,7 @@ es:
cart: "carrito"
message_html: "Ya realizó un pedido para este ciclo de pedido. Compruebe el %{cart}para ver los artículos que pidió. También puede cancelar artículos mientras el ciclo de pedido siga abierto."
terms_and_conditions:
message_html: "Acepto el %{terms_and_conditions_link} del vendedor."
link_text: "Términos y Condiciones"
failed: "La finalización de compra falló, por favor comunicate con nosotros para procesar la orden."
shops:
@@ -1579,7 +1592,9 @@ es:
hubs_distance: Más cercano a
hubs_distance_filter: "Muéstrame tiendas cerca de %{location}"
shop_changeable_orders_alert_html:
one: Su pedido con <a href='%{path}' target='_blank'> %{shop} / %{order} </a> está abierto para revisión. Puede realizar cambios hasta %{oc_close}.
one: Su pedido con <a href='%{path}' target='_blank'>%{shop} / %{order}</a> está abierto para revisión. Puede realizar cambios hasta %{oc_close}.
few: 'Usted tiene <a href=''%{path}'' target=''_blank''> %{count} pedidos con %{shop} </a> actualmente abiertos para revisión. Puede realizar cambios hasta %{oc_close}. '
many: 'Usted tiene <a href=''%{path}'' target=''_blank''> %{count} pedidos con %{shop} </a> actualmente abiertos para revisión. Puede realizar cambios hasta %{oc_close}. '
other: 'Usted tiene <a href=''%{path}'' target=''_blank''> %{count} pedidos con %{shop} </a> actualmente abiertos para revisión. Puede realizar cambios hasta %{oc_close}. '
orders_changeable_orders_alert_html: Este pedido ha sido confirmado, pero puede realizar cambios hasta <strong>%{oc_close}</strong>.
products_clear: Limpiar
@@ -1725,7 +1740,9 @@ es:
orders_could_not_cancel: "Lo sentimos, no se pudo cancelar el pedido"
orders_cannot_remove_the_final_item: "No se puede quitar el último artículo de un pedido, en su lugar, por favor cancele el pedido."
orders_bought_items_notice:
one: "Un elemento adicional ya está confirmado para este ciclo de pedido"
one: Ya se ha confirmado un artículo adicional para este ciclo de pedido
few: "%{count} artículos adicionales ya confirmados para este ciclo de pedido"
many: "%{count} artículos adicionales ya confirmados para este ciclo de pedido"
other: "%{count} artículos adicionales ya confirmados para este ciclo de pedido"
orders_bought_edit_button: Editar artículos confirmados
orders_bought_already_confirmed: "* ya confirmados"
@@ -2404,6 +2421,14 @@ es:
Al crear reglas relacionadas con una etiqueta de consumidor específica,
puedes anular el comportamiento predeterminado (ya sea para mostrar
u ocultar elementos) para los consumidores con la etiqueta concreta.
terms_and_conditions_info:
title: "Subiendo términos y condiciones"
message_1: "Los términos y condiciones son el contrato entre usted, el vendedor y el comprador. Si carga un archivo aquí, los compradores deben aceptar sus Términos y condiciones para completar la compra. Para el comprador, esto aparecerá como una casilla de verificación en el momento de hacer el pedido que debe marcar para continuar con la compra. Le recomendamos encarecidamente que cargue los Términos y condiciones de acuerdo con la legislación nacional."
message_2: "Los compradores solo deberán aceptar los términos y condiciones una vez. Sin embargo, si cambia sus Términos y condiciones, los compradores deberán aceptarlos nuevamente antes de poder hacer el pedido."
terms_and_conditions_warning:
title: "Subiendo términos y condiciones"
message_1: "Todos sus compradores deberán aceptarlos una vez al finalizar la compra. Si actualiza el archivo, todos sus compradores deberán volver a aceptarlos al finalizar la compra."
message_2: "Para los compradores con suscripciones, debe enviarles por correo electrónico los Términos y condiciones (o los cambios en ellos) por ahora, nada les notificará sobre estos nuevos Términos y condiciones."
panels:
save: GUARDAR
saved: GUARDADO
@@ -2863,6 +2888,8 @@ es:
delete: "Borrar"
cannot_set_shipping_method_without_address: "No se puede establecer el método de envío hasta que se proporcionen los detalles de la consumidora."
no_tracking_present: "No se han proporcionado detalles de seguimiento."
tracking: "Seguimiento"
tracking_number: "Número de seguimiento"
order_total: "Total del pedido"
customer_details: "Detalles de la consumidora"
customer_search: "Búsqueda de consumidores"
@@ -2884,6 +2911,7 @@ es:
adjustments: "Ajustes"
continue: "Continuar"
fill_in_customer_info: "Por favor complete la información de la consumidora"
credit_card: "Tarjeta de crédito"
new_payment: "Nuevo pago"
capture: "Pagado"
void: "Pendiente"
@@ -2895,6 +2923,8 @@ es:
server: "Servidor"
test_mode: "Modo de prueba"
logourl: "URL del logo"
are_you_sure_delete: "¿Está seguro de que desea eliminar este registro?"
confirm_delete: "Confirmar la eliminación"
configurations: "Configuraciones"
general_settings: "Configuración general"
site_name: "Nombre del sitio"
@@ -3004,6 +3034,7 @@ es:
has_no_shipped_units: "no tiene unidades enviadas"
successfully_created: '%{resource} se ha creado exitosamente!'
successfully_updated: '%{resource} ha sido actualizado exitosamente!'
payment_method: "Método de pago"
payment_processing_failed: "No se pudo procesar el pago, por favor verifique los detalles que introdujo"
not_available: "No disponible"
order_populator:
@@ -3013,7 +3044,9 @@ es:
shared:
error_messages:
errors_prohibited_this_record_from_being_saved:
one: "1 error prohibió guardar este registro:"
one: "1 error impidió que se guardara este registro:"
few: "%{count} errores impidieron que se guardara este registro:"
many: "%{count} errores impidieron que se guardara este registro:"
other: "%{count} errores impidieron que se guardara este registro:"
there_were_problems_with_the_following_fields: "Hubo problemas con los siguientes campos"
payments_list:
@@ -3052,7 +3085,6 @@ es:
index:
inherits_properties_checkbox_hint: "¿Heredar propiedades desde %{supplier}? (a menos que sea anulado arriba)"
add_product_properties: "Agregar Propiedades del producto"
select_from_prototype: "seleccionar de prototipo"
properties:
index:
properties: "Propiedades"
@@ -3145,6 +3177,8 @@ es:
active_products:
zero: "No tienes ningún producto activo"
one: "Tiene un producto activo."
few: "Tiene %{count} productos activos"
many: "Tiene %{count} productos activos"
other: "Tiene %{count} productos activos"
order_cycles:
order_cycles: "Ciclos de Pedido"
@@ -3152,6 +3186,8 @@ es:
you_have_active:
zero: "No tienes ningún ciclo de pedido activo."
one: "Tienes un ciclo de pedido activo."
few: "Tienes %{count} ciclos de pedido activos."
many: "Tienes %{count} ciclos de pedido activos."
other: "Tienes %{count} ciclos de pedido activos."
manage_order_cycles: "GESTIONA LOS CICLOS DE PEDIDO"
shipping_methods:
@@ -3426,6 +3462,7 @@ es:
issue_text: |
Si el enlace no funciona prueba a copiarlo y pegarlo en tu navegador.
Si los problemas continúan no dudes en contactarnos.
subject: "Instrucciones para restablecer la contraseña"
confirmation_instructions:
subject: "Por favor, confirma tu cuenta de OFN"
shipment_mailer:

View File

@@ -54,7 +54,7 @@ es_CO:
order_management/reports/enterprise_fee_summary/parameters:
start_at: "Inicio"
end_at: "Final"
distributor_ids: "Centros de acopio"
distributor_ids: "Nodos"
producer_ids: "Productoras"
order_cycle_ids: "Ciclos de Pedido"
enterprise_fee_ids: "Nombres de las comisiones"
@@ -130,7 +130,7 @@ es_CO:
subject: "%{enterprise} está ahora en %{sitename}"
email_welcome: "Bienvenido"
email_registered: "ahora es parte de"
email_userguide_html: "La Guía de Usuario con soporte detallado para configurar su Productora o Grupo de Consumo está aquí: %{link}"
email_userguide_html: "La Guía de Usuario con soporte detallado para configurar su Productora o Nodo está aquí: %{link}"
userguide: "Guía de usuario de Open Food Network"
email_admin_html: "Puede administrar su cuenta iniciando sesión en %{link} o haciendo clic en el engranaje arriba a la derecha de la página de inicio, y seleccionando Administración."
admin_panel: "Panel de administración"
@@ -288,6 +288,7 @@ es_CO:
edit: "Editar"
update: "Actualizar"
delete: "Borrar"
add: "Añadir"
admin:
begins_at: Empieza en
begins_on: Comienza en
@@ -412,7 +413,7 @@ es_CO:
header: Encabezado
home_page: Página principal
producer_signup_page: Página de registro del productor
hub_signup_page: Página para registro del Hub
hub_signup_page: Página para registro del Nodo
group_signup_page: Página de registro de grupo
main_links: Enlaces al menú principal
footer_and_external_links: Pie de página y enlaces externos
@@ -814,18 +815,18 @@ es_CO:
producer_profile: Perfil del productor
connect_ofn: Conectar a través de OFN
always_free: SIEMPRE GRATIS
producer_description_text: Añade tus productos a Open Food Network, permitiendo a los Grupos de Consumo vender tus productos.
producer_description_text: Añade tus productos a Open Food Network, permitiendo a los nodos agregar tus productos en sus tiendas.
producer_shop: Tienda de productor
sell_your_produce: Vende tu propia producción
producer_shop_description_text: Venda sus productos directamente a los clientes a través de su propia tienda.
producer_shop_description_text2: Una tienda de productor es para vender sus productos solamente, si quiere vender productos de otros productores, seleccione "Hub de Productor"
producer_hub: Hub de productor
producer_shop_description_text2: Una tienda de productor es para vender sus productos solamente, si quiere vender productos de otros productores, seleccione "Nodo de Productor"
producer_hub: Nodo de productor
producer_hub_text: Vende tu propia producción y la de otros
producer_hub_description_text: Tu organización es la columna vertebral de un sistema de consumo local. Agrega productos tuyos o de otras organizaciones y véndelo a través de tu tienda en Open Food Network.
profile: Solo perfil
get_listing: Obtener un listado
profile_description_text: La gente podrá encontrarlo y ponerse en contacto con usted en Open Food Network. Su organización será visible en el mapa y se podrá buscar en los listados.
hub_shop: Tienda del Hub
hub_shop: Tienda del Nodo
hub_shop_text: Vender la producción de otros
hub_shop_description_text: Tu organización es la columna vertebral de un sistema de consumo local. Agrega productos de otras organizaciones y véndelos a través de tu tienda en Open Food Network.
choose_option: Por favor, elija una de las opciones anteriores.
@@ -1176,8 +1177,8 @@ es_CO:
mobile_menu:
cart: "Carrito"
register_call:
selling_on_ofn: "¿Interesado en formar parte de Open Food Network?"
register: "Regístrarse aquí"
selling_on_ofn: "¿Interesado en vender a través de Open Food Network?"
register: "Regístrese aquí"
footer:
footer_secure: "Seguro y de confianza."
footer_secure_text: "Open Food Network utiliza encriptación SSL (RSA de 2048 bits) en todas partes para mantener la privacidad de su información de compras y pagos. Nuestros servidores no almacenan los datos de su tarjeta de crédito y los pagos son procesados por servicios compatibles con PCI."
@@ -1392,15 +1393,15 @@ es_CO:
brandstory_part6: "Todos amamos la comida. Ahora podemos amar nuestro sistema de comida también."
learn_body: "Explora modelos, historias y recursos para ayudarte a desarrollar tu organización. Encuentra formación, eventos y otras oportunidades para aprender de tus compañeros."
learn_cta: "Inspírate"
connect_body: "Busca en nuestros directorios de productoras, grupos u otras organizaciones. Haz una lista de tu organización en OFN para que los consumidores puedan encontrarte. Únete a la comunidad para obtener consejos y resolver problemas juntos."
connect_body: "Busque en nuestros directorios completos de productores, nodos y grupos para encontrar comerciantes justos de alimentos cerca de usted. Incluya su empresa u organización en la OFN para que los compradores puedan encontrarlo. Únase a la comunidad para recibir consejos y resolver problemas juntos."
connect_cta: "Explorar"
system_headline: "Compras - aquí está cómo funcionan."
system_step1: "1. Buscar"
system_step1_text: "Busque comida local y de temporada en nuestras tiendas diversas e independientes. Puede buscar por cantón y tipo de comida o si prefiere por método de envío."
system_step2: "2. Comprar"
system_step2_text: "Transforme su consumo con comida local y asequible de diversos productores ¡Conozca las historias detrás de su comida y la gente que la hace!"
system_step2_text: "Transforme su consumo con comida local y asequible de diversos productores y nodos ¡Conozca las historias detrás de su comida y la gente que la hace!"
system_step3: "3. Recogida"
system_step3_text: "Visite su productor para crear un vínculo más directo con los productores y sus vecinos, también puede comprar directamente a algunos productores. Compre su comida de una manera tan diversa como la naturaleza."
system_step3_text: "Espere su entrega, o visite su productor o nodo para una conexión más personal con su comida. Compra de alimentos tan diversa como la naturaleza lo propuso."
cta_headline: "Compras que hacen el mundo un mejor lugar."
cta_label: "Estoy listo"
stats_headline: "Entre todos creamos un nuevo sistema de producción, distribución y consumo."
@@ -1447,7 +1448,7 @@ es_CO:
order_total_price: Total
order_includes_tax: (incluye impuesto)
order_payment_paypal_successful: Su pago a través de PayPal ha sido procesado con éxito.
order_hub_info: Información del centro de acopio
order_hub_info: Información del nodo
order_back_to_store: Volver a la Tienda
order_back_to_cart: Volver al Carrito
bom_tip: "Use esta página para alterar la cantidad del producto en varios pedidos a la vez. Los productos pueden ser eliminados de los pedidos si es necesario. "
@@ -1517,7 +1518,7 @@ es_CO:
email_signup_welcome: "¡Bienvenido a %{sitename}!"
email_signup_confirmed_email: "Gracias por confirmar su correo electrónico."
email_signup_shop_html: "Ahora puedes iniciar sesión en %{link}."
email_signup_text: "Gracias por unirse a la red. Si es un comprador, ¡esperamos presentarle a muchos agricultores, grupos de consumo y comida deliciosa! Si es un productor o forma parte de una organización de alimentos, estamos emocionados de que forme parte de la red."
email_signup_text: "Gracias por unirse a la red. Si es un comprador, esperamos poder presentarle a muchos agricultores fantásticos, maravillosos nodos de alimentos y alimentos deliciosos. Si usted es un productor o una organización de alimentos, estamos emocionados de tenerlo como parte de la red."
email_signup_help_html: "Agradecemos todas tus preguntas y retroalimentación; puedes usar el botón de <em>Enviar retroalimenación</em> en el sitio o escribir un correo electrónico a %{email}"
invite_email:
greeting: "¡Hola!"
@@ -1566,7 +1567,8 @@ es_CO:
hubs_distance: Más cercano a
hubs_distance_filter: "Muéstrame tiendas cerca de %{location}"
shop_changeable_orders_alert_html:
one: Su pedido con <a href='%{path}' target='_blank'> %{shop} / %{order} </a> está abierto para revisión. Puede realizar cambios hasta %{oc_close}.
few: 'Usted tiene <a href=''%{path}'' target=''_blank''> %{count} pedidos con %{shop} </a> actualmente abiertos para revisión. Puede realizar cambios hasta %{oc_close}. '
many: 'Usted tiene <a href=''%{path}'' target=''_blank''> %{count} pedidos con %{shop} </a> actualmente abiertos para revisión. Puede realizar cambios hasta %{oc_close}. '
other: 'Usted tiene <a href=''%{path}'' target=''_blank''> %{count} pedidos con %{shop} </a> actualmente abiertos para revisión. Puede realizar cambios hasta %{oc_close}. '
orders_changeable_orders_alert_html: Este pedido ha sido confirmado, pero puede realizar cambios hasta <strong>%{oc_close}</strong>.
products_clear: Limpiar
@@ -1601,12 +1603,12 @@ es_CO:
components_filters_clearfilters: "Limpiar todos los filtros"
groups_title: Grupos
groups_headline: Grupos / regiones
groups_text: "Cada productor es único. Cada organización tiene algo diferente que ofrecer. Nuestros grupos son colectivos de productores, centros de acopio y distribuidores que comparten valores agroecológicos. Esto hace que su experiencia de compra sea más fácil."
groups_text: "Cada productor es único. Cada negocio tiene algo diferente que ofrecer. Nuestros grupos son colectivos de productores, nodos y distribuidores que comparten algo en común, localización, mercado de agricultores o filosofía. Esto facilita su experiencia de compra. Así que explore nuestros grupos y disfrute la selección hecha para usted."
groups_search: "Buscar nombre o palabra clave"
groups_no_groups: "No se encontraron grupos"
groups_about: "Acerca de nosotros"
groups_producers: "Nuestros productores"
groups_hubs: "Nuestros Grupos de Consumo"
groups_hubs: "Nuestros nodos"
groups_contact_web: Contacto
groups_contact_social: Seguir
groups_contact_address: Dirección
@@ -1621,7 +1623,7 @@ es_CO:
groups_signup_motivation2: Es por lo que salimos de la cama cada día. Somos una organización sin fines de lucro global, basada en código de fuente abierta. Jugamos de forma justa. Siempre puede confiar en nosotros.
groups_signup_motivation3: Sabemos que tiene grandes ideas, y queremos ayudar. Compartiremos nuestro conocimiento, redes y recursos. Sabemos que el aislamiento no crea cambio, entonces nos asociaremos con usted.
groups_signup_motivation4: Nos reunimos con usted en donde esté.
groups_signup_motivation5: Quizás eres un grupo de consumo, productora o distribuidora u otra organización.
groups_signup_motivation5: Ud. puede ser una alianza de nodos de alimentos, productores o distribuidores, y un organismo de la industria o un gobierno local.
groups_signup_motivation6: Cualquiera que sea su rol en el movimiento de comida local, estamos listos para ayudar. De cualquier forma en que se pregunte cómo se vería Open Food Network o qué está haciendo en su parte del mundo, empecemos la conversación.
groups_signup_motivation7: Hacemos que los movimientos alimenticios tengan más sentido.
groups_signup_motivation8: Necesita activar y habilitar sus redes. Le ofrecemos una plataforma para conversación y acción. Necesita involucramiento real. Le ayudaremos a alcanzar todos los actores, todos los interesados, todos los sectores.
@@ -1665,7 +1667,7 @@ es_CO:
sell_headline: "¡Consíguelo en Open Food Network!"
sell_motivation: "Muestra tus preciosos alimentos."
sell_producers: "Productoras"
sell_hubs: "Hubs"
sell_hubs: "Nodos"
sell_groups: "Grupos"
sell_producers_detail: "Crea tu perfil en OFN en cuestión de minutos. En cualquier momento puedes actualizar tu perfil a una tienda en línea y vender tus productos directamente a los consumidores."
sell_hubs_detail: "Crea un perfil para tu organización en OFN. En cualquier momento puedes actualizar tu perfil a una tienda de varias productoras."
@@ -1677,12 +1679,12 @@ es_CO:
shops_title: Tiendas
shops_headline: Compras, transformadas.
shops_text: Los alimentos crecen en ciclos, los agricultores cosechan en ciclos, y nosotros pedimos la comida en ciclos. Si encuentras un ciclo de pedido cerrado, vuelve a visitarlo pronto.
shops_signup_title: Registrarse como un grupo de consumo
shops_signup_headline: Grupos de Consumo, sin límites.
shops_signup_title: Registrarse como un nodo
shops_signup_headline: Nodos de alimentos, sin límites.
shops_signup_motivation: Cualquiera que sea su modelo, lo apoyamos. De cualquier forma que cambie, estamos con usted. Somos una organización sin findes de lucro, independiente, y de código abierto. Somos los socios de software con los que ha soñado.
shops_signup_action: Únete ahora
shops_signup_pricing: Cuentas de organización
shops_signup_stories: Historias de nuestros grupos de consumo.
shops_signup_stories: Historias de nuestros nodos.
shops_signup_help: Estamos listos para ayudar.
shops_signup_help_text: Usted necesita un mejor retorno. Usted necesita nuevos compradores y socios de logística. Usted necesita que su historia sea contada a través de ventas al por mayor, al detalle y en la mesa de la cocina.
shops_signup_detail: Aquí está el detalle.
@@ -1698,9 +1700,9 @@ es_CO:
orders_form_admin: Administrar y Gestionar
orders_form_total: Total
orders_oc_expired_headline: Los pedidos están cerrados para este ciclo
orders_oc_expired_text: "Lo sentimos, ¡los pedidos para este ciclo cerraron hace %{time}! Contacta con tu grupo de consumo directamente para ver si pueden aceptar pedidos tardíos."
orders_oc_expired_text_others_html: "Lo sentimos, ¡los pedidos para este ciclo cerraron hace %{time}! Contacta con tu grupo de consumo directamente para ver si pueden aceptar pedidos tardíos <strong>%{link}</strong>."
orders_oc_expired_text_link: "o visitar otros ciclos de pedidos disponibles en este grupo de consumo"
orders_oc_expired_text: "Lo sentimos, ¡los pedidos para este ciclo cerraron hace %{time}! Contacta con tu nodo directamente para ver si pueden aceptar pedidos tardíos."
orders_oc_expired_text_others_html: "Lo sentimos, ¡los pedidos para este ciclo cerraron hace %{time}! Contacta con tu nodo directamente para ver si pueden aceptar pedidos tardíos <strong>%{link}</strong>."
orders_oc_expired_text_link: "o vea los otros ciclos de pedidos disponibles en este nodo"
orders_oc_expired_email: "Correo electrónico:"
orders_oc_expired_phone: "Teléfono:"
orders_show_title: Confirmación del pedido
@@ -1712,7 +1714,8 @@ es_CO:
orders_could_not_cancel: "Lo sentimos, no se pudo cancelar el pedido"
orders_cannot_remove_the_final_item: "No se puede quitar el último artículo de un pedido, en su lugar, por favor cancele el pedido."
orders_bought_items_notice:
one: "Un elemento adicional ya está confirmado para este ciclo de pedido"
few: "%{count} artículos adicionales ya confirmados para este ciclo de pedido"
many: "%{count} artículos adicionales ya confirmados para este ciclo de pedido"
other: "%{count} artículos adicionales ya confirmados para este ciclo de pedido"
orders_bought_edit_button: Editar artículos confirmados
orders_bought_already_confirmed: "* ya confirmados"
@@ -1748,7 +1751,7 @@ es_CO:
one_filter_applied: "1 filtro aplicado"
x_filters_applied: "filtros aplicados"
submitting_order: "Enviando su orden: espere"
confirm_hub_change: "¿Está seguro? Esto cambiará tu grupo de consumo seleccionado y eliminará cualquier artículo en tu carrito de la compra."
confirm_hub_change: "¿Está seguro? Esto cambiará su nodo seleccionado y eliminará cualquier artículo en su carrito de compra."
confirm_oc_change: "¿Está seguro? Esto cambiará su ciclo de orden seleccionado y eliminará cualquier artículo en su carrito de compras."
location_placeholder: "Escriba una ubicación..."
error_required: "no puede estar vacío"
@@ -1786,7 +1789,7 @@ es_CO:
steps:
introduction:
registration_greeting: "¡Hola!"
registration_intro: "Ahora puedes crear un perfil para tu Productora o Grupo de Consumo"
registration_intro: "Ahora puede crear un perfil para su Productora o Nodo"
registration_checklist: "¿Qué necesito?"
registration_time: "5-10 minutos"
registration_enterprise_address: "Dirección de la organización"
@@ -1838,7 +1841,7 @@ es_CO:
no_producer: "No, no soy una productora"
producer_field_error: "Por favor elige uno. ¿Eres una productora?"
yes_producer_help: "Las productoras hacen cosas deliciosas para comer y/o beber. Eres una productora si lo cultivas, lo haces crecer, lo preparas, lo horneas, lo fermentas, lo ordeñas, ..."
no_producer_help: "Si no eres una productora, probablemente conozcas a alguien que venda o distribuya comida. También podrías convertirte en un grupo de consumo u otro tipo de organización."
no_producer_help: "Si no es una productora, probablemente conozca a alguien que venda o distribuya alimentos. También podría convertirse en un nodo u otro tipo de organización."
create_profile: "Crear Perfil"
about:
title: "Acerca de"
@@ -2010,11 +2013,11 @@ es_CO:
queued: "En Cola"
scheduled_for: "Planificado para"
customers: "Consumidores"
please_select_hub: "Selecciona un Grupo"
please_select_hub: "Seleccione un Nodo"
loading_customers: "Cargando Consumidores"
no_customers_found: "No se encuentran consumidores"
go: "Ir"
hub: "Grupo de Consumo"
hub: "Nodo"
producer: "Productora"
product: "Producto"
price: "Precio"
@@ -2031,7 +2034,7 @@ es_CO:
spree_admin_enterprises_fees: "Comisiones de la Organización"
spree_admin_enterprises_none_create_a_new_enterprise: "CREAR NUEVA ORGANIZACIÓN"
spree_admin_enterprises_none_text: "No tienes ninguna organización"
spree_admin_enterprises_tabs_hubs: "HUBS"
spree_admin_enterprises_tabs_hubs: "NODOS"
spree_admin_enterprises_producers_manage_products: "GESTIONAR PRODUCTOS"
spree_admin_enterprises_create_new_product: "CREAR UN NUEVO PRODUCTO"
spree_admin_single_enterprise_alert_mail_confirmation: "Confirma la dirección de email para"
@@ -2054,7 +2057,7 @@ es_CO:
spree_order_availability_error: "El Distribuidor o el Ciclo de Pedido no pueden suministrar los productos en su carrito"
spree_order_populator_error: "Este Distribuidor o Ciclo de Pedido no puede suministrar todos los productos en tu carrito. Por favor, elige otro."
spree_order_populator_availability_error: "Este producto no está disponible por el distribuidor o Ciclo de Pedido elegido."
spree_distributors_error: "Se debe seleccionar al menos un Grupo"
spree_distributors_error: "Se debe seleccionar al menos un nodo"
spree_user_enterprise_limit_error: "^ %{email} no está autorizado a tener más organizaciones (el límite es %{enterprise_limit})."
spree_variant_product_error: Debes tener al menos una variante
your_profil_live: "Tu perfil online"
@@ -2088,13 +2091,13 @@ es_CO:
admin_share_zipcode: "Código Postal"
admin_share_country: "País"
admin_share_state: "Provincia"
hub_sidebar_hubs: "Hubs"
hub_sidebar_hubs: "Nodos"
hub_sidebar_none_available: "Ninguno Disponible"
hub_sidebar_manage: "Gestionar"
hub_sidebar_at_least: "Al menos un grupo debe ser seleccionado"
hub_sidebar_at_least: "Al menos un nodo debe ser seleccionado"
hub_sidebar_blue: "azul"
hub_sidebar_red: "rojo"
order_cycles_closed_for_hub: "El centro que ha seleccionado está temporalmente cerrado para pedidos. Por favor, inténtelo de nuevo más tarde."
order_cycles_closed_for_hub: "El nodo que ha seleccionado está temporalmente cerrado para pedidos. Por favor, inténtelo de nuevo más tarde."
report_customers_distributor: "Distribuidor"
report_customers_supplier: "Proveedora"
report_customers_cycle: "Ciclo de Pedido"
@@ -2102,7 +2105,7 @@ es_CO:
report_customers_csv: "Descargar como CSV"
report_producers: "Productoras:"
report_type: "Tipo de Reporte:"
report_hubs: "Hubs: "
report_hubs: "Nodos: "
report_payment: "Métodos de Pago:"
report_distributor: "Distribuidora:"
report_payment_by: 'Pagos por Tipo'
@@ -2126,10 +2129,10 @@ es_CO:
report_header_address: Dirección
report_header_billing_address: Dirección de Facturación
report_header_relationship: Relación
report_header_hub: Grupo
report_header_hub_address: Dirección del Grupo
report_header_to_hub: Al Grupo
report_header_hub_code: Código de Grupo
report_header_hub: Nodo
report_header_hub_address: Dirección del Nodo
report_header_to_hub: Al Nodo
report_header_hub_code: Código del Nodo
report_header_code: Código
report_header_paid: ¿Pagado?
report_header_delivery: ¿Entregado?
@@ -2291,7 +2294,7 @@ es_CO:
enterprise_fee_whole_order: Pedido completo
enterprise_fee_by: "%{type} comisión por %{role} %{enterprise_name}"
validation_msg_relationship_already_established: "^Esta relación ya existe."
validation_msg_at_least_one_hub: "^Al menos se debe seleccionar un grupo de consumo"
validation_msg_at_least_one_hub: "^Al menos se debe seleccionar un nodo"
validation_msg_tax_category_cant_be_blank: "^La Categoría del Impuesto no puede estar vacía"
validation_msg_is_associated_with_an_exising_customer: "está asociado con un cliente existente"
content_configuration_pricing_table: "(TODO: tabla de precios)"
@@ -2306,17 +2309,17 @@ es_CO:
product_importer_products_save_error: No se guardó ningún producto con éxito
product_import_file_not_found_notice: 'Archivo no encontrado o no se pudo abrir'
product_import_no_data_in_spreadsheet_notice: 'No se encontraron datos en la hoja de cálculo'
order_choosing_hub_notice: Tu Grupo se ha seleccionado.
order_choosing_hub_notice: Su nodo se ha seleccionado.
order_cycle_selecting_notice: Se ha seleccionado el ciclo de pedido.
adjustments_tax_rate_error: "^Comprueba que los impuestos para este ajuste es correcta."
active_distributors_not_ready_for_checkout_message_singular: >-
El Grupo %{distributor_names} aparece en un ciclo de pedido activo, pero no
tiene métodos de envío y pago válidos. Hasta que los configure, los clientes
no podrán comprar en este grupo.
El nodo %{distributor_names} aparece en un ciclo de pedido activo, pero no tiene
métodos de envío y pago válidos. Hasta que los configure, los clientes no podrán
comprar en este nodo.
active_distributors_not_ready_for_checkout_message_plural: >-
Los Grupos %{distributor_names} se listan los ciclos de pedido activos, pero
Los nodos %{distributor_names} se listan los ciclos de pedido activos, pero
no tienen métodos de envío y pago válidos. Hasta que los configure, los clientes
no podrán comprar en estos concentradores.
no podrán comprar en estos nodos.
enterprise_fees_update_notice: Las comisiones de tu Organización se han actualizado.
enterprise_register_package_error: "Seleccione un paquete"
enterprise_register_error: "No se pudo completar el registro para %{enterprise}"
@@ -2353,7 +2356,7 @@ es_CO:
error: Error
unavailable: No disponible
profile: Perfil
hub: Grupo
hub: Nodo
shop: Tienda
choose: Escoge
resolve_errors: Resuelve los siguientes errores
@@ -2394,7 +2397,7 @@ es_CO:
saved: GUARDADO
saving: GUARDANDO
enterprise_package:
hub_profile: Perfil del Grupo
hub_profile: Perfil del Nodo
hub_profile_cost: "COSTE: GRATUITO PARA SIEMPRE"
hub_profile_text1: >
La gente puede encontrarte y ponerse en contacto contigo en Open Food
@@ -2409,8 +2412,9 @@ es_CO:
Agrega productos de otras organizaciones y véndelo a través de tu tienda
en Open Food Network.
hub_shop_text2: >
Los grupos pueden tener diferentes finalidades, ya sea una cooperativa
de alimentos, un grupo de consumo, un supermercado local, ...
Los nodos pueden tomar muchas formas, ya sea una cooperativa de alimentos,
un grupo de compras, un programa de caja de verduras o una tienda local
de comestibles.
hub_shop_text3: >
Si también quieres vender tus propios productos, tendrás que cambiar
esta organización para ser una productora.
@@ -2431,28 +2435,28 @@ es_CO:
Si prefieres concentrarte en producir alimentos y deseas dejar el trabajo
de venderlo a otras personas, no necesitas una tienda en Open Food Network.
profile_only_text3: >
Añade tus productos a Open Food Network, permitiendo a los Hubs vender
tus productos.
Añada sus productos a Open Food Network, permitiendo a los Nodos agregar
sus productos en sus tiendas.
producer_shop: Tienda de productor
producer_shop_text1: >
Vende tus productos directamente a los consumidores con tu tienda en
Open Food Network.
producer_shop_text2: >
Una tienda de productora es para tu producto solamente, si quieres vender
productos de otros productores, selecciona 'Grupo de Productores'.
producer_hub: Grupo de Productoras
Una tienda de productora es solo para lo que ud. produce, si quiere
vender productos de otros productores, seleccione 'Nodo de Productores'.
producer_hub: Nodo de Productoras
producer_hub_text1: >
Tu organización es la columna vertebral de un sistema de consumo local.
Agrega productos tuyos o de otras organizaciones y véndelo a través
de tu tienda en Open Food Network.
producer_hub_text2: >
Los Hubs de Productoras pueden tener diferentes finalidades, ya sea
una cooperativa de alimentos, un grupo de consumo o un supermercado
local.
Los Nodos de Productoras pueden tomar muchas formas, ya sea un cooperativa
de agricultores, un programa vegetariano o una cooperativa de alimentos
con un jardín en la azotea.
producer_hub_text3: >
Open Food Network tiene como objetivo apoyar tantos modelos de organizaciones
Open Food Network tiene como objetivo apoyar tantos modelos de nodo
como sea posible, queremos aportarte las herramientas que necesites
para poner en marcha tu organización.
para poner en marcha tu organización o negocio local de alimentos.
get_listing: Obtener un listado
always_free: SIEMPRE GRATIS
sell_produce_others: Vende la producción de otros
@@ -2864,6 +2868,7 @@ es_CO:
adjustments: "Ajustes"
continue: "Continuar"
fill_in_customer_info: "Por favor complete la información del cliente"
credit_card: "Tarjeta de crédito"
new_payment: "Nuevo pago"
capture: "Captura"
void: "Vacío"
@@ -2982,14 +2987,12 @@ es_CO:
options: "Opciones"
successfully_created: '%{resource} se ha creado exitosamente!'
successfully_updated: '%{resource} ha sido actualizado exitosamente!'
payment_method: "Método de pago"
payment_processing_failed: "No se pudo procesar el pago, por favor verifique los detalles que introdujo"
actions:
update: "Actualizar"
shared:
error_messages:
errors_prohibited_this_record_from_being_saved:
one: "1 error prohibió que se guardara este registro:"
other: "Los errores %{count} impidieron que se guardara este registro:"
there_were_problems_with_the_following_fields: "Hubo problemas con los siguientes campos"
payments_list:
date_time: "Fecha y hora"
@@ -3027,7 +3030,6 @@ es_CO:
index:
inherits_properties_checkbox_hint: "¿Heredar propiedades desde %{supplier}? (a menos que sea anulado arriba)"
add_product_properties: "Agregar propiedades del producto"
select_from_prototype: "Seleccionar de prototipo"
properties:
index:
properties: "Propiedades"
@@ -3115,11 +3117,13 @@ es_CO:
order_total: "Total del pedido"
overview:
enterprises_header:
ofn_with_tip: Las organizaciones son productores y/o grupos y son la unidad básica de organización dentro de Open Food Network.
ofn_with_tip: Las organizaciones son Productores y/o Nodos y son la unidad básica de organización dentro de Open Food Network.
products:
active_products:
zero: "No tienes ningún producto activo"
one: "Tiene un producto activo."
few: "Tiene %{count} productos activos"
many: "Tiene %{count} productos activos"
other: "Tiene %{count} productos activos"
order_cycles:
order_cycles: "Ciclos de Pedido"
@@ -3127,6 +3131,8 @@ es_CO:
you_have_active:
zero: "No tienes ningún ciclo de pedido activo."
one: "Tienes un ciclo de pedido activo."
few: "Tienes %{count} ciclos de pedido activos."
many: "Tienes %{count} ciclos de pedido activos."
other: "Tienes %{count} ciclos de pedido activos."
manage_order_cycles: "GESTIONA LOS CICLOS DE PEDIDO"
shipping_methods:

View File

@@ -282,6 +282,7 @@ es_CR:
edit: "Editar"
update: "Actualizar"
delete: "Borrar"
add: "Añadir"
admin:
begins_at: Empieza en
begins_on: Comienza en
@@ -1543,7 +1544,8 @@ es_CR:
hubs_distance: Más cercano a
hubs_distance_filter: "Muéstrame tiendas cerca de %{location}"
shop_changeable_orders_alert_html:
one: Su pedido con <a href='%{path}' target='_blank'> %{shop} / %{order} </a> está abierto para revisión. Puede realizar cambios hasta %{oc_close}.
few: 'Usted tiene <a href=''%{path}'' target=''_blank''> %{count} pedidos con %{shop} </a> actualmente abiertos para revisión. Puede realizar cambios hasta %{oc_close}. '
many: 'Usted tiene <a href=''%{path}'' target=''_blank''> %{count} pedidos con %{shop} </a> actualmente abiertos para revisión. Puede realizar cambios hasta %{oc_close}. '
other: 'Usted tiene <a href=''%{path}'' target=''_blank''> %{count} pedidos con %{shop} </a> actualmente abiertos para revisión. Puede realizar cambios hasta %{oc_close}. '
orders_changeable_orders_alert_html: Este pedido ha sido confirmado, pero puede realizar cambios hasta <strong>%{oc_close}</strong>.
products_clear: Limpiar
@@ -1682,7 +1684,8 @@ es_CR:
orders_could_not_cancel: "Lo sentimos, no se pudo cancelar el pedido"
orders_cannot_remove_the_final_item: "No se puede quitar el último artículo de un pedido, en su lugar, por favor cancele el pedido."
orders_bought_items_notice:
one: "Un elemento adicional ya está confirmado para este ciclo de pedido"
few: "%{count} artículos adicionales ya confirmados para este ciclo de pedido"
many: "%{count} artículos adicionales ya confirmados para este ciclo de pedido"
other: "%{count} artículos adicionales ya confirmados para este ciclo de pedido"
orders_bought_edit_button: Editar artículos confirmados
orders_bought_already_confirmed: "* ya confirmados"
@@ -2819,6 +2822,7 @@ es_CR:
adjustments: "Ajustes"
continue: "Continuar"
fill_in_customer_info: "Por favor complete la información del cliente"
credit_card: "Tarjeta de crédito"
new_payment: "Nuevo pago"
capture: "Captura"
void: "Vacío"
@@ -2931,6 +2935,7 @@ es_CR:
options: "Opciones"
successfully_created: '%{resource} se ha creado exitosamente!'
successfully_updated: '%{resource} ha sido actualizado exitosamente!'
payment_method: "Método de pago"
payment_processing_failed: "No se pudo procesar el pago, por favor verifique los detalles que introdujo"
actions:
update: "Actualizar"
@@ -2970,7 +2975,6 @@ es_CR:
index:
inherits_properties_checkbox_hint: "¿Heredar propiedades desde %{supplier}? (a menos que sea anulado arriba)"
add_product_properties: "Agregar propiedades del producto"
select_from_prototype: "Seleccionar de prototipo"
properties:
index:
properties: "Propiedades"
@@ -3063,6 +3067,8 @@ es_CR:
active_products:
zero: "No tienes ningún producto activo"
one: "Tiene un producto activo."
few: "Tiene %{count} productos activos"
many: "Tiene %{count} productos activos"
other: "Tiene %{count} productos activos"
order_cycles:
order_cycles: "Ciclos de Pedido"
@@ -3070,6 +3076,8 @@ es_CR:
you_have_active:
zero: "No tienes ningún ciclo de pedido activo."
one: "Tienes un ciclo de pedido activo."
few: "Tienes %{count} ciclos de pedido activos."
many: "Tienes %{count} ciclos de pedido activos."
other: "Tienes %{count} ciclos de pedido activos."
manage_order_cycles: "GESTIONA LOS CICLOS DE PEDIDO"
shipping_methods:

Some files were not shown because too many files have changed in this diff Show More