Compare commits

...

203 Commits

Author SHA1 Message Date
Jean-Baptiste Bellet
49f78f3706 Update all locales with the latest Transifex translations 2022-09-08 16:40:17 +02:00
jibees
9563dd6c51 Merge pull request #9497 from jibees/9493-fix-issues-around-rounding-in-imperial-metric-system
Avoid floating rounded errors when using imperial or metric system
2022-09-08 16:34:12 +02:00
Rachel Arnould
aa36986d66 Merge pull request #9521 from jibees/create-new-report-revenues-by-hub
Create a new report that shows revenues (incl. or excl. taxes) by hub only available for super-admin
2022-09-08 16:10:14 +02:00
jibees
9843e0e450 Merge pull request #9640 from openfoodfoundation/dependabot/npm_and_yarn/babel/preset-env-7.19.0
Bump @babel/preset-env from 7.18.10 to 7.19.0
2022-09-08 09:07:02 +02:00
Jean-Baptiste Bellet
53978de632 Create a new report that show revenues (incl. or excl. taxes) by hub
+ Create spec
2022-09-08 09:04:44 +02:00
Maikel
d9f5f7995d Merge pull request #9611 from mkllnk/9605-tax-total
Index tax totals correctly for invoice display
2022-09-08 12:04:19 +10:00
Maikel
f201b9fd11 Merge pull request #9631 from mkllnk/9153-tax-recalculation
[Split Checkout] Recalculate tax on summary step
2022-09-08 11:39:44 +10:00
Jean-Baptiste Bellet
d53b2b94b9 When creating new product via /admin/products/new use BigDecimal
to avoid bad rounded multiplication

example here:
700*0.001 = 0.7000000000000001

+ update specs as well
2022-09-07 09:17:46 +02:00
Jean-Baptiste Bellet
4452ad2c51 Use BigDecimal to avoir multiplication/division floating errors
Like 28.35 * 12 / 12 = 28.350000000000005

+ in js, use parseFloat() to format `12.00` as `12`
2022-09-07 09:17:46 +02:00
Jean-Baptiste Bellet
6594419b22 Add js-big-decimal to work with division and multiplication
Use a lib instead of Math.round((value*100)/100)
2022-09-07 09:17:46 +02:00
Maikel
dd2e77a244 Merge pull request #9557 from jibees/9555-update-the-build-env
Update the build env. from ubuntu-18.04 to ubuntu-20.04
2022-09-07 13:43:42 +10:00
dependabot[bot]
be561d1032 Bump @babel/preset-env from 7.18.10 to 7.19.0
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.18.10 to 7.19.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.19.0/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-06 09:04:41 +00:00
Jean-Baptiste Bellet
24fc941b4c Update the build env. from ubuntu-18.04 to ubuntu-20.04 2022-09-06 10:28:26 +02:00
Maikel
21054c1a8a Merge pull request #9594 from binarygit/remove-angular-from-primary-details
Remove Angular from Primary Details Tab
2022-09-06 10:17:14 +10:00
Maikel
0778c5f550 Merge pull request #9607 from openfoodfoundation/dependabot/bundler/sidekiq-6.5.6
Bump sidekiq from 6.5.4 to 6.5.6
2022-09-06 10:16:39 +10:00
Maikel Linke
1d04510365 Update totals on summary step 2022-09-05 15:54:33 +10:00
Maikel Linke
6c7a089527 Recalculate tax on summary step 2022-09-05 15:14:08 +10:00
Maikel Linke
eaca953106 Create only required test data for speed
It reduced the execution time by 5% on my machine (2-3 seconds).
2022-09-05 13:42:47 +10:00
Maikel Linke
cc5125f49e Apply related db assertions in tax spec
Somehow the helper methods were testing two different orders even though
each spec is using only one order, the one which is currently being
checked out by the user.

So I brought the code closer into the example to easier see what is
related and tested.

I also changed the assertions for the pending spec but can't really
verify them yet until I have completely working code.
2022-09-05 11:40:47 +10:00
Maikel Linke
3f2b3b88eb Re-use in-memory test objects
And reduce code by referring to objects instead of just ids.
2022-09-05 10:59:15 +10:00
Maikel
7101bacc8c Merge pull request #9620 from openfoodfoundation/dependabot/bundler/rubocop-1.36.0
Bump rubocop from 1.35.1 to 1.36.0
2022-09-05 10:30:05 +10:00
Maikel
d76b274d25 Merge pull request #9617 from openfoodfoundation/dependabot/bundler/view_component-2.71.0
Bump view_component from 2.69.0 to 2.71.0
2022-09-02 16:56:59 +10:00
dependabot[bot]
8d7f39941a Bump view_component from 2.69.0 to 2.71.0
Bumps [view_component](https://viewcomponent.org) from 2.69.0 to 2.71.0.

---
updated-dependencies:
- dependency-name: view_component
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-02 06:33:40 +00:00
Maikel
95839f88f2 Merge pull request #9623 from mkllnk/fix-storybook
Load storybook only in development
2022-09-02 16:32:19 +10:00
Maikel Linke
728eee6d3f Load storybook after view_component has been loaded automatically 2022-09-02 16:10:19 +10:00
Maikel Linke
7089bd597e Avoid loading view_component engine manually
We load view_component in the application config and it should be
automatic anyway.
2022-09-02 16:08:09 +10:00
Maikel Linke
2aade10aaf Load storybook only in development
The gem is not available in other environments an the app fails to boot.
2022-09-02 16:07:25 +10:00
Maikel
4057df5b93 Merge pull request #9586 from openfoodfoundation/dependabot/bundler/stripe-7.1.0
Bump stripe from 7.0.0 to 7.1.0
2022-09-02 13:34:11 +10:00
Filipe
8270a3f386 Merge pull request #9513 from filipefurtad0/matomo_tag_on_register_page
Add matomo_tag to /register pages
2022-09-01 10:19:54 +01:00
dependabot[bot]
a2aa5f2607 Bump rubocop from 1.35.1 to 1.36.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.35.1 to 1.36.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.35.1...v1.36.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-01 09:07:43 +00:00
Maikel Linke
30a9e80024 Update translations 2022-09-01 11:55:03 +10:00
Maikel
612001fc3f Merge pull request #9600 from mkllnk/rubocop
Update rubocop config to avoid deprecation
2022-09-01 11:42:15 +10:00
Maikel
2a93968370 Merge pull request #9599 from mkllnk/load-storybook
Avoid storybook deprecation warning
2022-09-01 11:41:27 +10:00
Maikel
b0a4fcdc26 Merge pull request #9598 from mkllnk/spec-typos
Correct typo in spec which lead to flakiness
2022-09-01 11:39:38 +10:00
Maikel Linke
326b0af35f Sort tax total by percentage on invoice 2022-09-01 11:19:02 +10:00
Maikel Linke
91eaa522cf Simplify tax totals helper 2022-08-31 16:47:04 +10:00
Maikel Linke
2a57dc9766 Index tax totals correctly for invoice display 2022-08-31 16:47:04 +10:00
Maikel Linke
f37b681fac Allow more tax data in the summary
I converted the value to a hash so that we can put all information in
there and we won't need the current hash key as percentage any more.
2022-08-31 16:47:04 +10:00
Maikel Linke
f4466b1aad Spec problem with tax rate summary display 2022-08-31 16:47:04 +10:00
Maikel Linke
33feb7f63f Test for explicit values, not reusing faulty code 2022-08-31 16:47:04 +10:00
binarygit
02e3184945 Replace angular tooltips in Primary Details tab 2022-08-31 11:51:51 +05:45
Maikel
04778c6fa8 Merge pull request #9597 from saunmanoj888/fix-account-setting-headers-alignment
Fix alignment for header Developer settings under Accounts settings
2022-08-31 16:01:41 +10:00
binarygit
8861b6d077 Replace permalinks angular ctrl with stimulus 2022-08-31 10:06:51 +05:45
binarygit
52b1f40acb Replace select2 with tom-select in primary details tab 2022-08-31 10:06:51 +05:45
Filipe
8ace56956b Merge pull request #9560 from binarygit/replace-tooltip
Replace tooltip on Enterprise Settings /contact page
2022-08-30 16:23:09 +01:00
dependabot[bot]
7718f7c0fc Bump sidekiq from 6.5.4 to 6.5.6
Bumps [sidekiq](https://github.com/mperham/sidekiq) from 6.5.4 to 6.5.6.
- [Release notes](https://github.com/mperham/sidekiq/releases)
- [Changelog](https://github.com/mperham/sidekiq/blob/main/Changes.md)
- [Commits](https://github.com/mperham/sidekiq/compare/v6.5.4...v6.5.6)

---
updated-dependencies:
- dependency-name: sidekiq
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-30 09:04:24 +00:00
Maikel
b74c368de2 Merge pull request #9602 from filipefurtad0/fix_flaky_invoice_spec
Adds specific tax rates to each type of cost
2022-08-30 09:47:53 +10:00
filipefurtad0
e0a20bf8af Adds specific tax rates to each type of cost 2022-08-29 17:36:39 +01:00
Maikel Linke
17afdb5912 Update rubocop config to avoid deprecation 2022-08-29 15:31:18 +10:00
Maikel Linke
d55a43d4b1 Avoid storybook deprecation warning
Loading the engine directly is deprecated and I followed the current
documentation to load storybook in the app. This avoids a warning:

> DEPRECATION WARNING: This manually engine loading is deprecated and will be removed in v1.0.0. Remove `require "view_component/storybook/engine"`. (called from <top (required)> at config/application.rb:30)
2022-08-29 14:57:14 +10:00
Maikel Linke
bf3da0531e Correct grammar in spec description 2022-08-29 14:43:43 +10:00
Maikel Linke
3a365b6dc6 Remove useless braces 2022-08-29 14:42:11 +10:00
Maikel Linke
ee7dc821ca Correct typo in spec which lead to flakiness
I'm not sure why this spec passed on CI when it was retried but it was
obviously wrong. Correcting that copy&paste error seems to make the spec
pass.
2022-08-29 14:39:43 +10:00
Maikel
07018370e0 Merge pull request #9595 from openfoodfoundation/dependabot/bundler/jwt-2.5.0
Bump jwt from 2.4.1 to 2.5.0
2022-08-29 11:43:27 +10:00
Maikel
bba665e2e1 Merge pull request #9577 from filipefurtad0/invoice-spec
Moves invoice_spec.rb into /system; sets :rack_test as webdriver
2022-08-29 11:34:20 +10:00
saunmanoj888
5e69320ff5 Fix header alignmnet 2022-08-27 15:31:19 +05:30
dependabot[bot]
d0242d28d2 Bump jwt from 2.4.1 to 2.5.0
Bumps [jwt](https://github.com/jwt/ruby-jwt) from 2.4.1 to 2.5.0.
- [Release notes](https://github.com/jwt/ruby-jwt/releases)
- [Changelog](https://github.com/jwt/ruby-jwt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jwt/ruby-jwt/compare/v2.4.1...v2.5.0)

---
updated-dependencies:
- dependency-name: jwt
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-26 09:04:29 +00:00
Maikel
9dbdcc9181 Merge pull request #9592 from openfoodfoundation/dependabot/bundler/redis-4.8.0
Bump redis from 4.7.1 to 4.8.0
2022-08-25 09:55:45 +10:00
Maikel
7819495d57 Merge pull request #9590 from openfoodfoundation/dependabot/bundler/puma-5.6.5
Bump puma from 5.6.4 to 5.6.5
2022-08-25 09:54:50 +10:00
Maikel
8723520848 Merge pull request #9585 from mkllnk/revert-stripe-update
Restore ability to check out with Stripe while storing a new card
2022-08-25 09:51:59 +10:00
binarygit
b76d9045ce Replace power-tip in enterprises/edit/<name>/contact with floatingUI 2022-08-24 13:31:45 +05:45
Maikel
b42d6cf2ac Merge pull request #9587 from openfoodfoundation/dependabot/bundler/valid_email2-4.0.4
Bump valid_email2 from 4.0.3 to 4.0.4
2022-08-24 16:52:13 +10:00
Maikel
f78e72af0d Merge pull request #9588 from openfoodfoundation/dependabot/bundler/rubocop-1.35.1
Bump rubocop from 1.35.0 to 1.35.1
2022-08-24 16:51:14 +10:00
dependabot[bot]
5e021b76b5 Bump valid_email2 from 4.0.3 to 4.0.4
Bumps [valid_email2](https://github.com/micke/valid_email2) from 4.0.3 to 4.0.4.
- [Release notes](https://github.com/micke/valid_email2/releases)
- [Changelog](https://github.com/micke/valid_email2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micke/valid_email2/compare/v4.0.3...v4.0.4)

---
updated-dependencies:
- dependency-name: valid_email2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-24 06:50:55 +00:00
Maikel
d03a5458ff Merge pull request #9582 from openfoodfoundation/dependabot/bundler/view_component-2.69.0
Bump view_component from 2.68.0 to 2.69.0
2022-08-24 16:49:45 +10:00
dependabot[bot]
3aef0b4029 Bump stripe from 7.0.0 to 7.1.0
Bumps [stripe](https://github.com/stripe/stripe-ruby) from 7.0.0 to 7.1.0.
- [Release notes](https://github.com/stripe/stripe-ruby/releases)
- [Changelog](https://github.com/stripe/stripe-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-ruby/compare/v7.0.0...v7.1.0)

---
updated-dependencies:
- dependency-name: stripe
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-24 06:48:28 +00:00
Maikel
cd5a83e814 Merge pull request #9581 from openfoodfoundation/dependabot/bundler/webmock-3.18.1
Bump webmock from 3.17.1 to 3.18.1
2022-08-24 16:47:45 +10:00
dependabot[bot]
a943d2fee6 Bump redis from 4.7.1 to 4.8.0
Bumps [redis](https://github.com/redis/redis-rb) from 4.7.1 to 4.8.0.
- [Release notes](https://github.com/redis/redis-rb/releases)
- [Changelog](https://github.com/redis/redis-rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/redis/redis-rb/compare/v4.7.1...v4.8.0)

---
updated-dependencies:
- dependency-name: redis
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-24 06:47:28 +00:00
Maikel
b016ebd5b4 Merge pull request #9567 from openfoodfoundation/dependabot/bundler/bullet-7.0.3
Bump bullet from 7.0.2 to 7.0.3
2022-08-24 16:47:07 +10:00
Maikel
314459df92 Merge pull request #9566 from openfoodfoundation/dependabot/bundler/test-prof-1.0.10
Bump test-prof from 1.0.9 to 1.0.10
2022-08-24 16:46:29 +10:00
dependabot[bot]
eb0051c033 Bump puma from 5.6.4 to 5.6.5
Bumps [puma](https://github.com/puma/puma) from 5.6.4 to 5.6.5.
- [Release notes](https://github.com/puma/puma/releases)
- [Changelog](https://github.com/puma/puma/blob/master/History.md)
- [Commits](https://github.com/puma/puma/compare/v5.6.4...v5.6.5)

---
updated-dependencies:
- dependency-name: puma
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-23 09:04:05 +00:00
dependabot[bot]
ca9a7d255e Bump rubocop from 1.35.0 to 1.35.1
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.35.0 to 1.35.1.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.35.0...v1.35.1)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-22 09:06:17 +00:00
Maikel Linke
7cb74f2452 Revert "Merge pull request #9456 from openfoodfoundation/dependabot/bundler/activemerchant-1.126.0"
This reverts commit 82f38c9aea, reversing
changes made to 689720b749.
2022-08-22 15:31:57 +10:00
dependabot[bot]
8f42c6fbed Bump view_component from 2.68.0 to 2.69.0
Bumps [view_component](https://viewcomponent.org) from 2.68.0 to 2.69.0.

---
updated-dependencies:
- dependency-name: view_component
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-19 09:05:47 +00:00
dependabot[bot]
bb233c5656 Bump webmock from 3.17.1 to 3.18.1
Bumps [webmock](https://github.com/bblimke/webmock) from 3.17.1 to 3.18.1.
- [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.17.1...v3.18.1)

---
updated-dependencies:
- dependency-name: webmock
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-19 09:05:12 +00:00
filipefurtad0
be021f4697 Removes spec/features from the build-run 🎉 2022-08-17 23:25:02 +01:00
filipefurtad0
f47d86c15b Sets cuprite as default; sets rack_test in before/after blocks 2022-08-17 23:25:02 +01:00
Filipe
ae391f8af4 Merge pull request #9414 from Philwi/user-generates-api-key
Let users view and regenerates api key
2022-08-17 21:36:13 +01:00
Filipe
f28c52342c Merge pull request #9532 from jibees/9492-translate-404,-500,-422-errors-pages
Translate 404, 500, 422 errors pages
2022-08-17 21:12:04 +01:00
Filipe
d3f1d4a5f9 Merge pull request #9529 from Philwi/make-the-shop-url-clickable
Make the shop url clickable
2022-08-17 20:47:07 +01:00
Filipe
cedfa35a98 Merge pull request #9341 from jibees/9336-redirect-to-login_path-if-user-is-disabled
Disabled_at logic: redirect to login path if user is disabled
2022-08-17 20:33:57 +01:00
Filipe
c11b7ed268 Merge pull request #9407 from Philwi/handle-for-invalid-referer-for-embedded-page-service
Handle for invalid referer for embedded page service
2022-08-17 18:40:43 +01:00
Filipe
b992daa1d8 Merge pull request #9510 from binarygit/convert-enterprises/edit-page-to-stimulus
Convert enterprises/edit page to stimulus
2022-08-17 18:11:59 +01:00
Filipe
10aa534f52 Merge pull request #9554 from apricot12/9179-Note-on-invoices
Add order note at the end of both invoices following current UI patterns.
2022-08-17 17:41:23 +01:00
Filipe
de990b906d Merge pull request #9563 from aintluks/bulk-coop-report-csv
Disable header row bulk_coop report
2022-08-17 16:43:37 +01:00
Maikel Linke
41ef2a4ea5 Run invoice spec as feature spec 2022-08-17 16:30:57 +10:00
filipefurtad0
077479346e Moves invoice_print_spec into system 2022-08-17 16:21:54 +10:00
binarygit
19c33e4050 Add floating UI 2022-08-17 11:39:13 +05:45
Maikel
1ff3d4a534 Merge pull request #9571 from openfoodfoundation/dependabot/bundler/view_component-2.68.0
Bump view_component from 2.64.0 to 2.68.0
2022-08-17 15:06:46 +10:00
dependabot[bot]
8ae6a36b33 Bump bullet from 7.0.2 to 7.0.3
Bumps [bullet](https://github.com/flyerhzm/bullet) from 7.0.2 to 7.0.3.
- [Release notes](https://github.com/flyerhzm/bullet/releases)
- [Changelog](https://github.com/flyerhzm/bullet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/flyerhzm/bullet/compare/7.0.2...7.0.3)

---
updated-dependencies:
- dependency-name: bullet
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-17 04:59:40 +00:00
dependabot[bot]
d8687f30cd Bump test-prof from 1.0.9 to 1.0.10
Bumps [test-prof](https://github.com/test-prof/test-prof) from 1.0.9 to 1.0.10.
- [Release notes](https://github.com/test-prof/test-prof/releases)
- [Changelog](https://github.com/test-prof/test-prof/blob/master/CHANGELOG.md)
- [Commits](https://github.com/test-prof/test-prof/compare/v1.0.9...v1.0.10)

---
updated-dependencies:
- dependency-name: test-prof
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-17 04:58:49 +00:00
Maikel
bff2ddb8db Merge pull request #9565 from openfoodfoundation/dependabot/bundler/rubocop-1.35.0
Bump rubocop from 1.33.0 to 1.35.0
2022-08-17 14:56:36 +10:00
Lucas da Costa
2a9db0eea4 Disable header row bulk_coop report 2022-08-16 16:32:19 -03:00
Filipe
5c41022f76 Merge pull request #9165 from filipefurtad0/tax_split_checkout
[Split Checkout] Adds spec to test Tax charges (repoducing issue #9153)
2022-08-16 19:30:32 +01:00
dependabot[bot]
a9dec41cc1 Bump view_component from 2.64.0 to 2.68.0
Bumps [view_component](https://viewcomponent.org) from 2.64.0 to 2.68.0.

---
updated-dependencies:
- dependency-name: view_component
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-16 09:04:18 +00:00
Maikel
918cbb8d92 Merge pull request #9570 from mkllnk/bundle-lock
Clean up Gemfile.lock after manual change
2022-08-16 16:16:19 +10:00
Maikel Linke
7cc7de7a5f Clean up Gemfile.lock
It was manually edited before which introduced a couple inconsistencies.
I'm fixing this up here by running `bundle` and restoring the bundler
version.
2022-08-16 16:10:30 +10:00
Maikel Linke
56d8d1eaf7 Scope helper methods to relevant test cases
Global methods are usually not a good idea.
2022-08-15 17:34:21 +01:00
dependabot[bot]
b57685e9d5 Bump rubocop from 1.33.0 to 1.35.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.33.0 to 1.35.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.33.0...v1.35.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-15 07:36:07 +00:00
Maikel
a3fa4a0d3e Merge pull request #9543 from filipefurtad0/remove_selenium_webdriver
Removes selenium-webdriver and webdriver gems; updates spec_helper
2022-08-15 17:34:46 +10:00
Maikel Linke
d86aeaa22a Remove unnecessary after-spec code 2022-08-15 16:51:53 +10:00
filipefurtad0
97f18d7b86 Changes names from helpers to prevent leak between specs 2022-08-15 16:13:37 +10:00
filipefurtad0
bded15a869 Updates spec for inclusive; adds pending related to epic 7540 2022-08-15 16:13:37 +10:00
filipefurtad0
fff5927cdf Changes pick-up into delivery shipping method
On line 62 we set the dependency on the shipping address to calculate taxes. Therefore, we might be better off mocking a delivery-shipping method instead of a pick-up shipping method and assuring the customers shipping address is used for this accordingly.
2022-08-15 16:13:37 +10:00
filipefurtad0
f9881b9af5 Removes if blocks from assert_db_
Initianlly, I thought it would be agood idea to have both setups - for included and added tax - in the same file. Hence, the private section would need to cover all cases. The PR has now two separate files, each one for the two tax types, so it seems unecessary to have these if blocks there. I think it is more readable this way.
2022-08-15 16:13:37 +10:00
filipefurtad0
79182a2d32 Removes test on 9131; moves test on 9153 into respective context 2022-08-15 16:13:37 +10:00
Jean-Baptiste Bellet
77eec6e6f3 Check step params and redirect if step is inconsistent to order state 2022-08-15 16:13:37 +10:00
filipefurtad0
a6e3f43344 Adds bug reproducing steps 2022-08-15 16:13:36 +10:00
filipefurtad0
f525a9f5da Adds inclusive tax-spec 2022-08-15 16:13:36 +10:00
filipefurtad0
2427bfa6ea Spec tax charging on legacy and split checkout 2022-08-15 16:13:36 +10:00
Maikel Linke
7eea4fdd1c Adds zone_with_state_member to zone factory
And make zone factories more flexible.
2022-08-15 16:13:36 +10:00
Filipe
dde4bd39b2 Merge pull request #9351 from vsmay98/9338-redirect-disabled-user-to-homepage
Redirect to homepage with flash error when disabled user trying to access any page
2022-08-12 13:52:19 +01:00
Maikel Linke
091c271237 Spec API key changes more precisely 2022-08-12 15:44:59 +10:00
Philipp Winkler
141a2a507d Make shop url clickable 2022-08-11 22:14:51 +02:00
Jean-Baptiste Bellet
36aabbb5b6 Update all locales with the latest Transifex translations 2022-08-11 18:14:48 +02:00
Filipe
82f38c9aea Merge pull request #9456 from openfoodfoundation/dependabot/bundler/activemerchant-1.126.0
Bump activemerchant from 1.123.0 to 1.126.0
2022-08-11 17:10:31 +01:00
Filipe
689720b749 Merge pull request #9437 from jibees/8897-preselect-default-card-and-do-not-allow-to-charge-if-no-card-is-marked-as-default
User account, Credit cards: Do not allow to check "Allow charges" if no credit cards marked as default
2022-08-11 16:34:42 +01:00
Filipe
50600b9d00 Merge pull request #9462 from openfoodfoundation/dependabot/bundler/pagy-5.10.1
Bump pagy from 5.1.2 to 5.10.1
2022-08-11 16:20:03 +01:00
filipefurtad0
232088f3a2 Adds the tag matomo code to the darkswarm template 2022-08-11 15:40:15 +01:00
filipefurtad0
66b9679a7c Adds matomo_tag to /register pages template 2022-08-11 14:07:02 +01:00
filipefurtad0
42753d85c7 Creates new file for matomo tag code 2022-08-11 14:07:02 +01:00
filipefurtad0
3eca13e2bc Renames general tracking code file; updates darkswarm 2022-08-11 14:07:02 +01:00
Rachel Arnould
abdef21381 Update FUNDING.yml 2022-08-11 14:45:42 +02:00
filipefurtad0
1fd09617cb Changes cookies_spec from feature to system spec 2022-08-11 10:44:22 +01:00
filipefurtad0
e5eb74f077 Updates spec_helper 2022-08-11 10:44:22 +01:00
Jean-Baptiste Bellet
f474947d2d Do not remove 500.html file since it is used by nxginx
in case of critical problems when application cannot respond
2022-08-11 11:41:39 +02:00
filipefurtad0
d1b90193a4 Removes selenium-webdriver & webdrivers gems 2022-08-11 10:34:24 +01:00
Nihal Mohammed
53ee5c32eb Add order note at the end of both invoices following current UI patterns
Add translation for note title in invoice

Update invoice spec to also test for order note
2022-08-10 23:02:13 +05:30
binarygit
79ba223e12 Delete angular code for side_menu 2022-08-10 15:14:15 +05:45
binarygit
27552c99b8 Render enterprise groups #edit and #new page using stimulus 2022-08-10 15:14:09 +05:45
binarygit
6b56a8df0a Display/hide side-menu items when values in primary details change 2022-08-10 15:11:53 +05:45
binarygit
e18a242b90 Render admin/enterprises/<name>/edit page using stimulus 2022-08-10 15:08:59 +05:45
jibees
4a3bd510a7 Merge pull request #9544 from jibees/upgrade-yarn-
Upgrade `yarn.lock` since it seemed to be derived
2022-08-10 09:06:16 +02:00
jibees
bb85473eba Merge pull request #9550 from openfoodfoundation/dependabot/bundler/webmock-3.17.1
Bump webmock from 3.17.0 to 3.17.1
2022-08-10 08:57:39 +02:00
jibees
d5fa5e298e Merge pull request #9551 from openfoodfoundation/dependabot/bundler/debug-1.6.2
Bump debug from 1.6.1 to 1.6.2
2022-08-10 08:57:08 +02:00
Jean-Baptiste Bellet
dab4939819 Upgrade yarn.lock since it seemed to be derived 2022-08-10 08:45:24 +02:00
jibees
43b29af922 Merge pull request #9545 from Philwi/control-capybara-headless-mode-via-environment-variable
Control capybara headless mode for testing via environment variable
2022-08-10 08:05:26 +02:00
dependabot[bot]
2c1acc14e6 Bump debug from 1.6.1 to 1.6.2
Bumps [debug](https://github.com/ruby/debug) from 1.6.1 to 1.6.2.
- [Release notes](https://github.com/ruby/debug/releases)
- [Commits](https://github.com/ruby/debug/compare/v1.6.1...v1.6.2)

---
updated-dependencies:
- dependency-name: debug
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-10 06:02:35 +00:00
dependabot[bot]
84f9da4a23 Bump webmock from 3.17.0 to 3.17.1
Bumps [webmock](https://github.com/bblimke/webmock) from 3.17.0 to 3.17.1.
- [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.17.0...v3.17.1)

---
updated-dependencies:
- dependency-name: webmock
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-10 06:00:05 +00:00
jibees
d817319aa4 Merge pull request #9539 from openfoodfoundation/dependabot/bundler/sidekiq-6.5.4
Bump sidekiq from 6.5.3 to 6.5.4
2022-08-10 07:58:25 +02:00
Philipp Winkler
093b851395 Control headless mode for testing via environment variable 2022-08-09 20:57:52 +02:00
Filipe
e3a150226e Merge pull request #9507 from openfoodfoundation/dependabot/bundler/stripe-7.0.0
Bump stripe from 5.42.0 to 7.0.0
2022-08-09 12:33:36 +01:00
Rachel Arnould
5122ed9af4 Update FUNDING.yml 2022-08-09 10:11:17 +02:00
Rachel Arnould
ac5a3beb15 Update FUNDING.yml 2022-08-09 10:10:44 +02:00
dependabot[bot]
19481fc55e Bump sidekiq from 6.5.3 to 6.5.4
Bumps [sidekiq](https://github.com/mperham/sidekiq) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/mperham/sidekiq/releases)
- [Changelog](https://github.com/mperham/sidekiq/blob/main/Changes.md)
- [Commits](https://github.com/mperham/sidekiq/compare/v6.5.3...v6.5.4)

---
updated-dependencies:
- dependency-name: sidekiq
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-09 06:48:01 +00:00
Maikel Linke
c8cab8aae5 Update mocked responses to get a ListObject 2022-08-09 15:13:16 +10:00
dependabot[bot]
d7428015ac Bump stripe from 5.42.0 to 7.0.0
Bumps [stripe](https://github.com/stripe/stripe-ruby) from 5.42.0 to 7.0.0.
- [Release notes](https://github.com/stripe/stripe-ruby/releases)
- [Changelog](https://github.com/stripe/stripe-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-ruby/compare/v5.42.0...v7.0.0)

---
updated-dependencies:
- dependency-name: stripe
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-09 15:13:16 +10:00
Maikel
700f91efb5 Merge pull request #9449 from filipefurtad0/packing_report
Updates specs on Packing and Payment Reports
2022-08-09 14:56:22 +10:00
Maikel
43e4047447 Merge pull request #9495 from filipefurtad0/invoice_print_spec
Invoice print spec: added tax
2022-08-09 14:54:23 +10:00
Maikel
892e843e9e Merge pull request #9533 from filipefurtad0/remove_bye_bug
Removes byebug and pry-byebug; keeps pry 🧹
2022-08-09 10:39:21 +10:00
filipefurtad0
85904f57b8 Removes byebug and pry-byebug; keeps pry 2022-08-08 15:22:45 +01:00
Jean-Baptiste Bellet
60a5bf682b Handle errors page through controller ErrorsController 2022-08-08 15:36:46 +02:00
Jean-Baptiste Bellet
47c07831c1 Create an ErrorsController that handle errors thrown application 2022-08-08 15:36:23 +02:00
jibees
b5e23717f2 Merge pull request #9531 from mkllnk/awesome-print
Remove unnecessary awesome_print gem
2022-08-08 14:21:11 +02:00
jibees
d8d99c930e Merge pull request #9530 from openfoodfoundation/dependabot/bundler/webmock-3.17.0
Bump webmock from 3.15.0 to 3.17.0
2022-08-08 14:09:48 +02:00
filipefurtad0
ce96094f49 Adds around block with time.freeze 2022-08-08 12:23:11 +01:00
Maikel Linke
6c655e6fbc Remove unnecessary awesome_print gem
Most people don't know it and it has now been superseeded by new
versions of irb and debug.
2022-08-08 15:39:59 +10:00
Maikel Linke
2d1483febb Remove misleading comment
That comment was in the original commit of this source code and was
related to another gem which has long been removed.
2022-08-08 15:38:30 +10:00
Maikel
42d7383ff0 Merge pull request #9446 from jibees/add-prettier
Add prettier linter for stimulusjs files
2022-08-08 14:41:47 +10:00
Maikel Linke
df4ddf45c4 Only check, not fix in pre-commit hook 2022-08-08 14:40:58 +10:00
Jean-Baptiste Bellet
e0b40222dd add pre-commit hook
with husky and pretty-quick
2022-08-08 14:40:58 +10:00
Jean-Baptiste Bellet
61928cbc05 Run prettier formatter 2022-08-08 14:40:58 +10:00
Jean-Baptiste Bellet
c6884f96e1 Add prettier as a GH action 2022-08-08 14:40:58 +10:00
Jean-Baptiste Bellet
f0b5a04f6b Ignore everything but js files related to stimulusjs 2022-08-08 14:40:58 +10:00
Jean-Baptiste Bellet
b8ffddb533 Add prettier to our stack 2022-08-08 14:40:58 +10:00
dependabot[bot]
71536767b5 Bump webmock from 3.15.0 to 3.17.0
Bumps [webmock](https://github.com/bblimke/webmock) from 3.15.0 to 3.17.0.
- [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.15.0...v3.17.0)

---
updated-dependencies:
- dependency-name: webmock
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-08 04:18:03 +00:00
Maikel
938056d1d8 Merge pull request #9453 from openfoodfoundation/dependabot/bundler/angular_rails_csrf-5.0.0
Bump angular_rails_csrf from 4.5.0 to 5.0.0
2022-08-08 14:16:56 +10:00
Maikel
63d2d69d08 Clarify copying of test build URL
And removing an unused translation step
2022-08-08 12:47:28 +10:00
Maikel
78ec086111 Merge pull request #9501 from Michaelcode2/master
Added file "uk.yml" to directory openfoodnetwork/config/locales/
2022-08-08 12:34:01 +10:00
Philipp Winkler
bf53a02270 Add api key toggle view checkbox 2022-08-07 09:48:49 +02:00
filipefurtad0
2aded5b459 Clarifies pending examples 2022-08-05 17:43:02 +01:00
filipefurtad0
5aa6b14756 Fixes tax values 2022-08-05 16:41:35 +01:00
filipefurtad0
07bd84ffbb Tests added tax - legacy and alternative invoices 2022-08-05 16:41:35 +01:00
filipefurtad0
d2794f328f Tests included tax - legacy and alternative invoices 2022-08-05 16:41:35 +01:00
filipefurtad0
8b146fc72a Adds included_in_price trait on broken specs 2022-08-05 16:41:35 +01:00
filipefurtad0
0c491a6651 Adds test case for added tax 2022-08-05 16:41:35 +01:00
filipefurtad0
e8529754f1 Updates order and product factory to consider added tax 2022-08-05 16:41:35 +01:00
dependabot[bot]
d95dc84c34 Bump pagy from 5.1.2 to 5.10.1
Bumps [pagy](https://github.com/ddnexus/pagy) from 5.1.2 to 5.10.1.
- [Release notes](https://github.com/ddnexus/pagy/releases)
- [Changelog](https://github.com/ddnexus/pagy/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ddnexus/pagy/compare/5.1.2...5.10.1)

---
updated-dependencies:
- dependency-name: pagy
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-05 14:59:59 +00:00
Filipe
b61ee0211f Merge pull request #9525 from filipefurtad0/adds_debug_gem
Adds debug gem to the stack
2022-08-05 15:58:45 +01:00
filipefurtad0
c777a00874 Adds debug gem to the stack, bundled with 2.1.4 2022-08-05 14:01:47 +01:00
jibees
a0a2dab44f Merge pull request #9523 from openfoodfoundation/dependabot/bundler/sidekiq-6.5.3
Bump sidekiq from 6.5.1 to 6.5.3
2022-08-05 11:31:58 +02:00
jibees
f0aa7f44a5 Merge pull request #9524 from openfoodfoundation/dependabot/bundler/rubocop-1.33.0
Bump rubocop from 1.32.0 to 1.33.0
2022-08-05 11:31:18 +02:00
dependabot[bot]
a51940937a Bump rubocop from 1.32.0 to 1.33.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.32.0 to 1.33.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.32.0...v1.33.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-05 09:06:01 +00:00
dependabot[bot]
f1e401070a Bump sidekiq from 6.5.1 to 6.5.3
Bumps [sidekiq](https://github.com/mperham/sidekiq) from 6.5.1 to 6.5.3.
- [Release notes](https://github.com/mperham/sidekiq/releases)
- [Changelog](https://github.com/mperham/sidekiq/blob/main/Changes.md)
- [Commits](https://github.com/mperham/sidekiq/compare/v6.5.1...v6.5.3)

---
updated-dependencies:
- dependency-name: sidekiq
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-05 09:05:41 +00:00
dependabot[bot]
609cbe2893 Bump angular_rails_csrf from 4.5.0 to 5.0.0
Bumps [angular_rails_csrf](https://github.com/jsanders/angular_rails_csrf) from 4.5.0 to 5.0.0.
- [Release notes](https://github.com/jsanders/angular_rails_csrf/releases)
- [Changelog](https://github.com/jsanders/angular_rails_csrf/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jsanders/angular_rails_csrf/compare/v4.5.0...v5.0.0)

---
updated-dependencies:
- dependency-name: angular_rails_csrf
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-04 12:15:53 +00:00
Michael
912713a0c9 added Ukrainian lang. file uk.yml, corrected uk:Ukrainian 2022-08-02 13:22:17 +03:00
Michael
3621616f7c Delete en_UA.yml 2022-08-02 11:53:17 +03:00
Michael
41ddd653a0 Added file "uk.yml" to openfoodnetwork/config/locales/
Added file "uk.yml" to directory openfoodnetwork/config/locales/
Ukrainian language translation (UA)
2022-08-02 11:52:36 +03:00
Michael
d8c7c0141a added Ukrainian translation file en_UA.yml 2022-08-02 11:34:12 +03:00
dependabot[bot]
21c0baa965 Bump activemerchant from 1.123.0 to 1.126.0
Bumps [activemerchant](https://github.com/activemerchant/active_merchant) from 1.123.0 to 1.126.0.
- [Release notes](https://github.com/activemerchant/active_merchant/releases)
- [Changelog](https://github.com/activemerchant/active_merchant/blob/master/CHANGELOG)
- [Commits](https://github.com/activemerchant/active_merchant/compare/v1.123.0...v1.126.0)

---
updated-dependencies:
- dependency-name: activemerchant
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-28 01:10:42 +00:00
Maikel Linke
59c9f0957b Simplify default card logic 2022-07-27 11:14:18 +10:00
filipefurtad0
116f503cf6 Updates Payments reports spec 2022-07-26 16:07:29 +01:00
filipefurtad0
023ebe1909 Asserts on pre-filling of dates; removes manual date selection 2022-07-26 16:07:29 +01:00
jibees
be568cdfa6 Update config/locales/en.yml
Co-authored-by: Maikel <maikel@email.org.au>
2022-07-26 14:42:55 +02:00
Jean-Baptiste Bellet
0bb90d764c Allow charges is disabled if no saved cards marked as default 2022-07-26 14:42:55 +02:00
Jean-Baptiste Bellet
34c8748b9c Mark the next credit cards with payment profile as default 2022-07-26 14:42:55 +02:00
Jean-Baptiste Bellet
875c22346e Add a tooltip on <td /> when input is disabled, ie no default saved cards
Co-Authored-By: Maikel <maikel@email.org.au>
2022-07-26 14:42:54 +02:00
filipefurtad0
c57d5a2408 Updates spec to smoke-test Pack by Product 2022-07-26 12:49:08 +01:00
Jean-Baptiste Bellet
a3cb1e6ecc Can Allow charges only if one card is marked as default 2022-07-21 14:42:36 +02:00
Philipp Winkler
6291e3c587 Handle invalid referer for embedded page service 2022-07-11 22:07:00 +02:00
Vishal Jain
3143cc9d92 skip disabled user check for session controller 2022-07-05 11:35:11 +05:30
Vishal Jain
84b711e130 redirect disabled user to homepage 2022-06-24 18:09:15 +05:30
Jean-Baptiste Bellet
4007b17b1e Redirect to login path also if user is disabled
+ update spec as well
2022-06-22 15:51:11 +02:00
182 changed files with 8607 additions and 2012 deletions

4
.github/FUNDING.yml vendored
View File

@@ -1,8 +1,8 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
github: openfoodfoundation
patreon: # Replace with a single Patreon username
open_collective: ofnusa
open_collective: #
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry

View File

@@ -17,24 +17,12 @@ assignees: ''
## Testing
- [ ] [Find build] of the release commit and copy it below.
- [ ] Move this issue to Test Ready and notify testers.
- [ ] Test: :warning: link to the build of the release commit https://semaphoreci.com/openfoodfoundation/openfoodnetwork-2/branches/master
- [ ] Move this issue to Test Ready.
- [ ] Notify testers.
- [ ] Test build: <!-- paste build link here, e.g. https://semaphore...builds/1234 -->
## Finish on Tuesday
- [ ] Update translations unless content has been removed from config/locales/en.yml between this release draft and current master.
<details><summary>Command line instructions</summary>
<pre>
git checkout master # same version as the release draft
git fetch upstream
git diff upstream/master -- config/locales/en.yml
tx pull --force # if no changes or only additions in the locale
git checkout --detach # if we need to commit new translations
git commit -a -m "Update translations"
git tag vx.y.z # put the release number in here
git push upstream vx.y.z
</pre>
</details>
- [ ] Publish and notify [#global-community]:
> The next release is ready: https://github.com/openfoodfoundation/openfoodnetwork/releases/latest
- [ ] Deploy the new release to all managed instances.

View File

@@ -17,7 +17,7 @@ permissions:
jobs:
rspec:
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
services:
postgres:
image: postgres:10
@@ -36,7 +36,6 @@ jobs:
specs:
- "spec/controllers"
- "spec/models"
- "spec/features/admin/[a-o0-9]*_spec.rb"
- "spec/lib"
- "spec/migrations"
- "spec/serializers"
@@ -78,7 +77,7 @@ jobs:
if-no-files-found: ignore
test-the-rest:
runs-on: ubuntu-18.04
runs-on: ubuntu-20.04
services:
postgres:
image: postgres:10

View File

@@ -16,3 +16,16 @@ jobs:
reporter: github-pr-check
level: error
fail_on_error: true
prettier:
name: runner / prettier
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v2
- name: prettier
uses: EPMatt/reviewdog-action-prettier@v1
with:
github_token: ${{ secrets.github_token }}
reporter: github-pr-check
level: error
fail_on_error: true

4
.husky/pre-commit Executable file
View File

@@ -0,0 +1,4 @@
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
yarn pretty-quick --check --staged

21
.prettierignore Normal file
View File

@@ -0,0 +1,21 @@
# Basically, ignore everythings expect app/webpacker/controllers/*.js and app/webpacker/packs/*.js
*.css
*.scss
*.md
*.yml
*.yaml
*.json
*.html
babel.config.js
postcss.config.js
.storybook/
/app/assets/
/config/
/coverage/
/engines/
/public/
/spec/
/tmp/
/vendor/

1
.prettierrc.json Normal file
View File

@@ -0,0 +1 @@
{}

View File

@@ -23,7 +23,7 @@ Metrics:
Enabled: true
Metrics/BlockLength:
IgnoredMethods: [
AllowedMethods: [
"class_eval",
"collection",
"context",
@@ -41,6 +41,7 @@ Metrics/BlockLength:
"resources",
"scenario",
"shared_examples",
"xdescribe",
]
Rails/SkipsModelValidations:

View File

@@ -1,13 +1,13 @@
# This configuration was generated by
# `rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 1400`
# on 2022-03-29 16:07:39 UTC using RuboCop version 1.22.2.
# on 2022-08-29 05:26:26 UTC using RuboCop version 1.35.1.
# 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: 1
# Cop supports --auto-correct.
# Offense count: 2
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: TreatCommentsAsGroupSeparators, ConsiderPunctuation, Include.
# Include: **/*.gemfile, **/Gemfile, **/gems.rb
Bundler/OrderedGems:
@@ -25,20 +25,13 @@ Gemspec/RequiredRubyVersion:
- 'engines/web/web.gemspec'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports safe autocorrection (--autocorrect).
Layout/ClosingParenthesisIndentation:
Exclude:
- 'lib/reporting/queries/joins.rb'
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: EmptyLineBetweenMethodDefs, EmptyLineBetweenClassDefs, EmptyLineBetweenModuleDefs, AllowAdjacentOneLineDefs, NumberOfEmptyLines.
Layout/EmptyLineBetweenDefs:
Exclude:
- 'spec/lib/reports/report_loader_spec.rb'
# Offense count: 2
# Cop supports --auto-correct.
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: empty_lines, no_empty_lines
Layout/EmptyLinesAroundBlockBody:
@@ -47,15 +40,15 @@ Layout/EmptyLinesAroundBlockBody:
- 'spec/system/admin/order_cycles/list_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowDoxygenCommentStyle, AllowGemfileRubyComment.
Layout/LeadingCommentSpace:
Exclude:
- 'spec/system/admin/enterprises_spec.rb'
# Offense count: 856
# Cop supports --auto-correct.
# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
# Offense count: 862
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns, IgnoredPatterns.
# URISchemes: http, https
Layout/LineLength:
Exclude:
@@ -68,7 +61,6 @@ Layout/LineLength:
- 'app/controllers/admin/subscriptions_controller.rb'
- 'app/controllers/api/v0/order_cycles_controller.rb'
- 'app/controllers/payment_gateways/paypal_controller.rb'
- 'app/controllers/spree/admin/reports_controller.rb'
- 'app/controllers/spree/users_controller.rb'
- 'app/controllers/user_confirmations_controller.rb'
- 'app/helpers/angular_form_builder.rb'
@@ -85,7 +77,6 @@ Layout/LineLength:
- 'app/models/concerns/variant_stock.rb'
- 'app/models/customer.rb'
- 'app/models/enterprise.rb'
- 'app/models/enterprise_group.rb'
- 'app/models/product_import/entry_processor.rb'
- 'app/models/product_import/spreadsheet_entry.rb'
- 'app/models/product_import/unit_converter.rb'
@@ -111,23 +102,15 @@ Layout/LineLength:
- 'engines/order_management/app/services/order_management/subscriptions/validator.rb'
- 'engines/order_management/spec/services/order_management/order/updater_spec.rb'
- 'engines/web/app/helpers/web/cookies_policy_helper.rb'
- 'engines/web/spec/features/consumer/cookies_spec.rb'
- 'lib/discourse/single_sign_on.rb'
- 'lib/open_food_network/enterprise_fee_applicator.rb'
- 'lib/open_food_network/enterprise_fee_calculator.rb'
- 'lib/open_food_network/enterprise_issue_validator.rb'
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/open_food_network/scope_variants_for_search.rb'
- 'lib/reporting/line_items.rb'
- 'lib/reporting/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/reporting/reports/enterprise_fee_summary/report_data/enterprise_fee_type_total.rb'
- 'lib/reporting/reports/order_cycle_management/order_cycle_management_report.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/reporting/reports/orders_and_fulfillment/customer_totals_report.rb'
- 'lib/reporting/reports/orders_and_fulfillment/distributor_totals_by_supplier_report.rb'
- 'lib/reporting/reports/payments/payments_report.rb'
- 'lib/reporting/reports/products_and_inventory/lettuce_share_report.rb'
- 'lib/reporting/reports/sales_tax/sales_tax_report.rb'
- 'lib/reporting/reports/xero_invoices/base.rb'
- 'lib/spree/localized_number.rb'
- 'lib/tasks/data.rake'
@@ -145,12 +128,10 @@ Layout/LineLength:
- 'spec/controllers/admin/subscriptions_controller_spec.rb'
- 'spec/controllers/admin/variant_overrides_controller_spec.rb'
- 'spec/controllers/api/v0/base_controller_spec.rb'
- 'spec/controllers/api/v0/enterprises_controller_spec.rb'
- 'spec/controllers/api/v0/exchange_products_controller_spec.rb'
- 'spec/controllers/api/v0/logos_controller_spec.rb'
- 'spec/controllers/api/v0/order_cycles_controller_spec.rb'
- 'spec/controllers/api/v0/orders_controller_spec.rb'
- 'spec/controllers/api/v0/product_images_controller_spec.rb'
- 'spec/controllers/api/v0/products_controller_spec.rb'
- 'spec/controllers/api/v0/promo_images_controller_spec.rb'
- 'spec/controllers/api/v0/terms_and_conditions_controller_spec.rb'
@@ -164,7 +145,6 @@ Layout/LineLength:
- 'spec/controllers/spree/admin/orders/invoices_spec.rb'
- 'spec/controllers/spree/admin/orders_controller_spec.rb'
- 'spec/controllers/spree/admin/payment_methods_controller_spec.rb'
- 'spec/controllers/spree/admin/reports_controller_spec.rb'
- 'spec/controllers/spree/admin/variants_controller_spec.rb'
- 'spec/controllers/spree/credit_cards_controller_spec.rb'
- 'spec/controllers/spree/orders_controller_spec.rb'
@@ -187,13 +167,9 @@ Layout/LineLength:
- 'spec/lib/open_food_network/tag_rule_applicator_spec.rb'
- 'spec/lib/reports/customers_report_spec.rb'
- 'spec/lib/reports/order_cycle_management_report_spec.rb'
- 'spec/lib/reports/order_grouper_spec.rb'
- 'spec/lib/reports/orders_and_fulfillment/orders_and_fulfillment_report_spec.rb'
- 'spec/lib/reports/packing/packing_report_spec.rb'
- 'spec/lib/reports/products_and_inventory_report_spec.rb'
- 'spec/lib/reports/users_and_enterprises_report_spec.rb'
- 'spec/lib/reports/xero_invoices_report_spec.rb'
- 'spec/lib/stripe/authorize_response_patcher_spec.rb'
- 'spec/mailers/order_mailer_spec.rb'
- 'spec/mailers/producer_mailer_spec.rb'
- 'spec/mailers/subscription_mailer_spec.rb'
@@ -201,7 +177,6 @@ Layout/LineLength:
- 'spec/models/concerns/calculated_adjustments_spec.rb'
- 'spec/models/concerns/order_shipment_spec.rb'
- 'spec/models/concerns/product_stock_spec.rb'
- 'spec/models/enterprise_group_spec.rb'
- 'spec/models/enterprise_relationship_spec.rb'
- 'spec/models/enterprise_spec.rb'
- 'spec/models/exchange_spec.rb'
@@ -227,7 +202,6 @@ Layout/LineLength:
- 'spec/models/tag_rule/filter_payment_methods_spec.rb'
- 'spec/models/tag_rule/filter_products_spec.rb'
- 'spec/models/tag_rule/filter_shipping_methods_spec.rb'
- 'spec/models/terms_of_service_file_spec.rb'
- 'spec/models/variant_override_spec.rb'
- 'spec/requests/api/orders_spec.rb'
- 'spec/requests/checkout/failed_checkout_spec.rb'
@@ -287,6 +261,7 @@ Layout/LineLength:
- 'spec/system/admin/variant_overrides_spec.rb'
- 'spec/system/consumer/authentication_spec.rb'
- 'spec/system/consumer/caching/shops_caching_spec.rb'
- 'spec/system/consumer/cookies_spec.rb'
- 'spec/system/consumer/shopping/cart_spec.rb'
- 'spec/system/consumer/shopping/checkout_auth_spec.rb'
- 'spec/system/consumer/shopping/checkout_spec.rb'
@@ -300,35 +275,20 @@ Layout/LineLength:
- 'spec/views/spree/admin/payment_methods/index.html.haml_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
Layout/MultilineBlockLayout:
Exclude:
- 'spec/lib/reports/report_renderer_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: symmetrical, new_line, same_line
Layout/MultilineMethodCallBraceLayout:
Exclude:
- 'lib/reporting/queries/joins.rb'
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: aligned, indented, indented_relative_to_receiver
Layout/MultilineMethodCallIndentation:
Exclude:
- 'lib/reporting/reports/customers/customers_report.rb'
# Offense count: 20
# Cop supports --auto-correct.
# Offense count: 22
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowInHeredoc.
Layout/TrailingWhitespace:
Exclude:
- 'app/controllers/spree/admin/shipping_methods_controller.rb'
- 'spec/controllers/spree/admin/shipping_methods_controller_spec.rb'
- 'spec/system/admin/enterprises_spec.rb'
- 'spec/system/admin/order_spec.rb'
- 'spec/system/admin/shipping_methods_spec.rb'
- 'spec/system/flatpickr_spec.rb'
@@ -357,6 +317,7 @@ Lint/DuplicateMethods:
- 'lib/discourse/single_sign_on.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
Lint/DuplicateRequire:
Exclude:
- 'spec/lib/open_food_network/scope_variants_to_search_spec.rb'
@@ -378,9 +339,8 @@ Lint/IneffectiveAccessModifier:
Exclude:
- 'app/models/spree/user.rb'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedMethods.
# AllowedMethods: instance_of?, kind_of?, is_a?, eql?, respond_to?, equal?
Lint/RedundantSafeNavigation:
@@ -388,6 +348,7 @@ Lint/RedundantSafeNavigation:
- 'app/models/spree/payment.rb'
# Offense count: 2
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowedMethods.
# AllowedMethods: present?, blank?, presence, try, try!, in?
Lint/SafeNavigationChain:
@@ -396,22 +357,21 @@ Lint/SafeNavigationChain:
- 'app/models/spree/stock/availability_validator.rb'
# Offense count: 2
# Cop supports --auto-correct.
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods.
Lint/UnusedMethodArgument:
Exclude:
- 'lib/reporting/queries/query_interface.rb'
# Offense count: 5
# Cop supports --auto-correct.
# Configuration parameters: AllowComments.
# This cop supports unsafe autocorrection (--autocorrect-all).
Lint/UselessMethodDefinition:
Exclude:
- 'app/controllers/spree/user_registrations_controller.rb'
- 'app/models/spree/gateway.rb'
# Offense count: 38
# Configuration parameters: IgnoredMethods, CountRepeatedAttributes, Max.
# Offense count: 28
# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods, CountRepeatedAttributes, Max.
Metrics/AbcSize:
Exclude:
- 'app/controllers/admin/enterprises_controller.rb'
@@ -433,20 +393,14 @@ Metrics/AbcSize:
- 'app/models/spree/return_authorization.rb'
- 'lib/discourse/single_sign_on.rb'
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/reporting/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/reporting/reports/customers/customers_report.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/reporting/reports/orders_and_distributors/orders_and_distributors_report.rb'
- 'lib/reporting/reports/packing/customer.rb'
- 'lib/reporting/reports/payments/payments_report.rb'
- 'lib/reporting/reports/sales_tax/sales_tax_report.rb'
- 'lib/spree/core/controller_helpers/order.rb'
- 'lib/tasks/enterprises.rake'
- 'spec/services/order_checkout_restart_spec.rb'
# Offense count: 43
# Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, IgnoredMethods.
# IgnoredMethods: refine
# Offense count: 42
# Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, AllowedMethods, AllowedPatterns, IgnoredMethods.
# AllowedMethods: refine
Metrics/BlockLength:
Exclude:
- 'app/models/spree/order/checkout.rb'
@@ -474,7 +428,6 @@ Metrics/BlockLength:
- 'spec/support/matchers/select2_matchers.rb'
- 'spec/support/matchers/table_matchers.rb'
- 'spec/swagger_helper.rb'
- 'spec/system/admin/order_cycles/complex_updating_specific_time_spec.rb'
- 'spec/system/consumer/shopping/checkout_spec.rb'
# Offense count: 1
@@ -483,7 +436,7 @@ Metrics/BlockNesting:
Exclude:
- 'app/models/spree/payment/processing.rb'
# Offense count: 50
# Offense count: 45
# Configuration parameters: CountComments, Max, CountAsOne.
Metrics/ClassLength:
Exclude:
@@ -502,7 +455,6 @@ Metrics/ClassLength:
- 'app/controllers/spree/admin/payment_methods_controller.rb'
- 'app/controllers/spree/admin/payments_controller.rb'
- 'app/controllers/spree/admin/products_controller.rb'
- 'app/controllers/spree/admin/reports_controller.rb'
- 'app/controllers/spree/admin/users_controller.rb'
- 'app/controllers/spree/orders_controller.rb'
- 'app/models/enterprise.rb'
@@ -529,16 +481,13 @@ Metrics/ClassLength:
- 'engines/order_management/app/services/order_management/order/updater.rb'
- 'lib/open_food_network/enterprise_fee_calculator.rb'
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/open_food_network/permissions.rb'
- 'lib/reporting/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/reporting/reports/enterprise_fee_summary/scope.rb'
- 'lib/reporting/reports/order_cycle_management/order_cycle_management_report.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/reporting/reports/payments/payments_report.rb'
- 'lib/open_food_network/permissions.rb'
- 'lib/reporting/reports/enterprise_fee_summary/scope.rb'
- 'lib/reporting/reports/xero_invoices/base.rb'
# Offense count: 39
# Configuration parameters: IgnoredMethods, Max.
# Offense count: 35
# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods, Max.
Metrics/CyclomaticComplexity:
Exclude:
- 'app/controllers/admin/enterprises_controller.rb'
@@ -565,18 +514,14 @@ Metrics/CyclomaticComplexity:
- 'app/models/spree/zone.rb'
- 'lib/discourse/single_sign_on.rb'
- 'lib/open_food_network/enterprise_issue_validator.rb'
- 'lib/reporting/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/reporting/reports/customers/customers_report.rb'
- 'lib/reporting/reports/orders_and_fulfillment/customer_totals_report.rb'
- 'lib/reporting/reports/payments/payments_report.rb'
- 'lib/reporting/reports/xero_invoices/base.rb'
- 'lib/spree/core/controller_helpers/order.rb'
- 'lib/spree/core/controller_helpers/respond_with.rb'
- 'lib/spree/localized_number.rb'
- 'spec/models/product_importer_spec.rb'
# Offense count: 32
# Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, IgnoredMethods.
# Offense count: 26
# Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, AllowedMethods, AllowedPatterns, IgnoredMethods.
Metrics/MethodLength:
Exclude:
- 'app/controllers/admin/enterprises_controller.rb'
@@ -593,15 +538,12 @@ Metrics/MethodLength:
- 'app/models/spree/preferences/preferable_class_methods.rb'
- 'lib/discourse/single_sign_on.rb'
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/reporting/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/reporting/reports/enterprise_fee_summary/scope.rb'
- 'lib/reporting/reports/order_cycle_management/order_cycle_management_report.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/reporting/reports/payments/payments_report.rb'
- 'lib/reporting/reports/enterprise_fee_summary/scope.rb'
- 'lib/reporting/reports/xero_invoices/base.rb'
- 'lib/tasks/sample_data/product_factory.rb'
# Offense count: 54
# Offense count: 51
# Configuration parameters: CountComments, Max, CountAsOne.
Metrics/ModuleLength:
Exclude:
@@ -641,9 +583,6 @@ Metrics/ModuleLength:
- 'spec/lib/reports/customers_report_spec.rb'
- 'spec/lib/reports/enterprise_fee_summary/authorizer_spec.rb'
- 'spec/lib/reports/order_cycle_management_report_spec.rb'
- 'spec/lib/reports/order_grouper_spec.rb'
- 'spec/lib/reports/orders_and_fulfillment/customer_totals_report_spec.rb'
- 'spec/lib/reports/orders_and_fulfillment/orders_and_fulfillment_report_spec.rb'
- 'spec/lib/reports/products_and_inventory_report_spec.rb'
- 'spec/lib/reports/users_and_enterprises_report_spec.rb'
- 'spec/models/spree/adjustment_spec.rb'
@@ -670,8 +609,8 @@ Metrics/ParameterLists:
- 'spec/support/controller_requests_helper.rb'
- 'spec/system/admin/reports_spec.rb'
# Offense count: 7
# Configuration parameters: IgnoredMethods, Max.
# Offense count: 5
# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods, Max.
Metrics/PerceivedComplexity:
Exclude:
- 'app/controllers/spree/admin/taxons_controller.rb'
@@ -679,10 +618,8 @@ Metrics/PerceivedComplexity:
- 'app/models/enterprise_relationship.rb'
- 'app/models/spree/ability.rb'
- 'app/models/spree/order/checkout.rb'
- 'lib/reporting/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/reporting/reports/payments/payments_report.rb'
# Offense count: 9
# Offense count: 8
Naming/AccessorMethodName:
Exclude:
- 'app/controllers/spree/admin/taxonomies_controller.rb'
@@ -716,8 +653,8 @@ Naming/MethodParameterName:
Exclude:
- 'app/services/process_payment_intent.rb'
# Offense count: 30
# Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers.
# Offense count: 28
# Configuration parameters: EnforcedStyle, CheckMethodNames, CheckSymbols, AllowedIdentifiers, AllowedPatterns.
# SupportedStyles: snake_case, normalcase, non_integer
# AllowedIdentifiers: capture3, iso8601, rfc1123_date, rfc822, rfc2822, rfc3339
Naming/VariableNumber:
@@ -725,7 +662,6 @@ Naming/VariableNumber:
- 'app/controllers/spree/orders_controller.rb'
- 'app/models/content_configuration.rb'
- 'app/models/preference_sections/main_links_section.rb'
- 'lib/reporting/reports/orders_and_fulfillment/customer_totals_report.rb'
- 'lib/spree/core/controller_helpers/common.rb'
- 'spec/controllers/spree/admin/search_controller_spec.rb'
- 'spec/factories/stock_location_factory.rb'
@@ -741,13 +677,13 @@ Rails/ActiveRecordOverride:
- 'app/models/spree/product.rb'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/ApplicationController:
Exclude:
- 'engines/dfc_provider/app/controllers/dfc_provider/api/base_controller.rb'
# Offense count: 6
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/ApplicationJob:
Exclude:
- 'app/jobs/bulk_invoice_job.rb'
@@ -758,19 +694,19 @@ Rails/ApplicationJob:
- 'app/jobs/subscription_placement_job.rb'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/ApplicationMailer:
Exclude:
- 'app/mailers/spree/base_mailer.rb'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/ApplicationRecord:
Exclude:
- 'lib/tasks/data/remove_transient_data.rb'
# Offense count: 5
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: NilOrEmpty, NotPresent, UnlessPresent.
Rails/Blank:
Exclude:
@@ -812,7 +748,7 @@ Rails/HasAndBelongsToMany:
- 'app/models/spree/variant.rb'
- 'app/models/spree/zone.rb'
# Offense count: 47
# Offense count: 45
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/HasManyOrHasOneDependent:
@@ -838,9 +774,8 @@ Rails/HasManyOrHasOneDependent:
- 'app/models/spree/taxonomy.rb'
- 'app/models/spree/user.rb'
- 'app/models/spree/variant.rb'
- 'app/models/subscription.rb'
# Offense count: 59
# Offense count: 62
# Configuration parameters: Include.
# Include: app/helpers/**/*.rb
Rails/HelperInstanceVariable:
@@ -881,7 +816,7 @@ Rails/InverseOf:
# Offense count: 38
# Configuration parameters: Include.
# Include: app/controllers/**/*.rb
# Include: app/controllers/**/*.rb, app/mailers/**/*.rb
Rails/LexicallyScopedActionFilter:
Exclude:
- 'app/controllers/admin/enterprise_groups_controller.rb'
@@ -904,10 +839,9 @@ Rails/LexicallyScopedActionFilter:
- 'app/controllers/spree/admin/zones_controller.rb'
- 'app/controllers/spree/users_controller.rb'
# Offense count: 19
# Offense count: 18
Rails/OutputSafety:
Exclude:
- 'app/controllers/spree/admin/reports_controller.rb'
- 'app/helpers/angular_form_helper.rb'
- 'app/helpers/application_helper.rb'
- 'app/helpers/reports_helper.rb'
@@ -922,7 +856,7 @@ Rails/OutputSafety:
- 'spec/system/admin/order_print_ticket_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/RelativeDateConstant:
Exclude:
- 'lib/tasks/data/remove_transient_data.rb'
@@ -936,7 +870,7 @@ Rails/SkipsModelValidations:
- 'spec/models/spree/line_item_spec.rb'
# Offense count: 5
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: strict, flexible
Rails/TimeZone:
@@ -971,20 +905,20 @@ Security/Open:
- 'app/services/image_importer.rb'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports safe autocorrection (--autocorrect).
Style/BlockComments:
Exclude:
- 'spec/system/admin/tag_rules_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowOnConstant.
Style/CaseEquality:
Exclude:
- 'spec/models/spree/payment_spec.rb'
# Offense count: 3
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/CaseLikeIf:
Exclude:
- 'app/controllers/admin/order_cycles_controller.rb'
@@ -992,7 +926,7 @@ Style/CaseLikeIf:
- 'app/models/spree/payment/processing.rb'
# Offense count: 25
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: nested, compact
Style/ClassAndModuleChildren:
@@ -1027,13 +961,14 @@ Style/ClassVars:
- 'lib/spree/core/delegate_belongs_to.rb'
# Offense count: 2
# Configuration parameters: MaxUnannotatedPlaceholdersAllowed, IgnoredMethods.
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: MaxUnannotatedPlaceholdersAllowed, AllowedMethods, AllowedPatterns, IgnoredMethods.
# SupportedStyles: annotated, template, unannotated
Style/FormatStringToken:
EnforcedStyle: unannotated
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: always, always_true, never
Style/FrozenStringLiteralComment:
@@ -1041,7 +976,7 @@ Style/FrozenStringLiteralComment:
- '.simplecov'
# Offense count: 6
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/GlobalStdStream:
Exclude:
- 'lib/tasks/data.rake'
@@ -1050,8 +985,8 @@ Style/GlobalStdStream:
- 'lib/tasks/subscriptions/debug.rake'
- 'lib/tasks/subscriptions/test.rake'
# Offense count: 39
# Configuration parameters: MinBodyLength.
# Offense count: 40
# Configuration parameters: MinBodyLength, AllowConsecutiveConditionals.
Style/GuardClause:
Exclude:
- 'app/controllers/admin/enterprises_controller.rb'
@@ -1085,8 +1020,8 @@ Style/HashLikeCase:
- 'app/models/enterprise.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: IgnoredMethods.
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowedMethods, AllowedPatterns, IgnoredMethods.
Style/MethodCallWithoutArgsParentheses:
Exclude:
- 'spec/system/flatpickr_spec.rb'
@@ -1098,22 +1033,8 @@ Style/MissingRespondToMissing:
- 'app/models/spree/gateway.rb'
- 'app/models/spree/preferences/configuration.rb'
# Offense count: 1
Style/MixinUsage:
Exclude:
- 'lib/reporting/reports/orders_and_fulfillment/orders_and_fulfillment_report.rb'
# Offense count: 3
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: literals, strict
Style/MutableConstant:
Exclude:
- 'lib/reporting/report_template.rb'
- 'lib/reporting/reports/packing/base.rb'
# Offense count: 22
# Cop supports --auto-correct.
# This cop supports safe autocorrection (--autocorrect).
Style/NestedModifier:
Exclude:
- 'spec/controllers/admin/subscriptions_controller_spec.rb'
@@ -1127,7 +1048,7 @@ Style/NestedModifier:
- 'spec/system/admin/payments_stripe_spec.rb'
- 'spec/system/admin/reports_spec.rb'
# Offense count: 26
# Offense count: 17
# Configuration parameters: AllowedMethods.
# AllowedMethods: respond_to_missing?
Style/OptionalBooleanParameter:
@@ -1139,7 +1060,6 @@ Style/OptionalBooleanParameter:
- 'app/models/enterprise_relationship.rb'
- 'app/models/product_import/entry_processor.rb'
- 'app/models/spree/order_contents.rb'
- 'app/models/spree/preferences/file_configuration.rb'
- 'app/models/spree/shipment.rb'
- 'engines/order_management/app/services/order_management/stock/estimator.rb'
- 'lib/spree/core/controller_helpers/order.rb'
@@ -1147,7 +1067,7 @@ Style/OptionalBooleanParameter:
- 'spec/support/request/web_helper.rb'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: short, verbose
Style/PreferredHashMethods:
@@ -1155,13 +1075,13 @@ Style/PreferredHashMethods:
- 'app/controllers/api/v0/shipments_controller.rb'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowMultipleReturnValues.
Style/RedundantReturn:
Exclude:
- 'app/controllers/spree/admin/shipping_methods_controller.rb'
# Offense count: 205
# Offense count: 209
Style/Send:
Exclude:
- 'app/controllers/split_checkout_controller.rb'
@@ -1195,17 +1115,16 @@ Style/Send:
- 'spec/services/cart_service_spec.rb'
- 'spec/services/products_renderer_spec.rb'
- 'spec/services/variant_units/option_value_namer_spec.rb'
- 'spec/spec_helper.rb'
- 'spec/support/localized_number_helper.rb'
# Offense count: 1
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/SingleArgumentDig:
Exclude:
- 'app/services/checkout/form_data_adapter.rb'
# Offense count: 4
# Cop supports --auto-correct.
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/SlicingWithRange:
Exclude:
- 'app/helpers/spree/admin/navigation_helper.rb'
@@ -1213,8 +1132,8 @@ Style/SlicingWithRange:
- 'engines/order_management/app/services/order_management/subscriptions/validator.rb'
- 'lib/discourse/single_sign_on.rb'
# Offense count: 28
# Cop supports --auto-correct.
# Offense count: 29
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Mode.
Style/StringConcatenation:
Exclude:

11
Gemfile
View File

@@ -131,7 +131,7 @@ gem 'flipper'
gem 'flipper-active_record'
gem 'flipper-ui'
gem "view_component", require: "view_component/engine"
gem "view_component"
group :production, :staging do
gem 'ddtrace'
@@ -140,8 +140,6 @@ group :production, :staging do
end
group :test, :development do
# Pretty printed test output
gem 'awesome_print'
gem 'bullet'
gem 'capybara'
gem 'cuprite'
@@ -154,14 +152,12 @@ group :test, :development do
gem 'rspec-rails', ">= 3.5.2"
gem 'rspec-retry'
gem 'rswag-specs'
gem 'selenium-webdriver'
gem 'shoulda-matchers'
gem 'timecop'
gem 'webdrivers'
gem 'debug', '>= 1.0.0'
end
group :test do
gem 'byebug'
gem 'pdf-reader'
gem 'rails-controller-testing'
gem 'simplecov', require: false
@@ -176,14 +172,13 @@ group :development do
gem 'foreman'
gem 'listen'
gem 'pry', '~> 0.13.0'
gem 'pry-byebug', '~> 3.9.0'
gem 'rubocop'
gem 'rubocop-rails'
gem 'spring'
gem 'spring-commands-rspec'
gem 'web-console'
gem "view_component_storybook", require: "view_component/storybook/engine"
gem "view_component_storybook"
gem 'rack-mini-profiler', '< 3.0.0'
end

View File

@@ -146,8 +146,8 @@ GEM
sprockets (>= 3.0, < 5)
sprockets-rails
tilt
angular_rails_csrf (4.5.0)
railties (>= 3, < 7)
angular_rails_csrf (5.0.0)
railties (>= 3, < 8)
angularjs-file-upload-rails (2.4.1)
angularjs-rails (1.8.0)
arel-helpers (2.14.0)
@@ -155,7 +155,6 @@ GEM
ast (2.4.2)
awesome_nested_set (3.5.0)
activerecord (>= 4.0.0, < 7.1)
awesome_print (1.9.2)
aws-eventstream (1.2.0)
aws-partitions (1.601.0)
aws-sdk-core (3.131.2)
@@ -183,10 +182,9 @@ GEM
bugsnag (6.24.2)
concurrent-ruby (~> 1.0)
builder (3.2.4)
bullet (7.0.2)
bullet (7.0.3)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
byebug (11.1.3)
cable_ready (5.0.0.pre3)
rails (>= 5.2)
thread-local (>= 1.1.0)
@@ -205,7 +203,6 @@ GEM
marcel (~> 1.0)
nokogiri (~> 1.10, >= 1.10.4)
rubyzip (>= 1.3.0, < 3)
childprocess (4.1.0)
chronic (0.10.2)
cliver (0.3.2)
coderay (1.1.3)
@@ -239,6 +236,9 @@ GEM
debase-ruby_core_source (= 0.10.12)
msgpack
debase-ruby_core_source (0.10.12)
debug (1.6.2)
irb (>= 1.3.6)
reline (>= 0.3.1)
debugger-linecache (1.2.0)
devise (4.8.1)
bcrypt (~> 3.0)
@@ -337,7 +337,10 @@ GEM
ruby-vips (>= 2.0.17, < 3)
immigrant (0.3.6)
activerecord (>= 3.0)
io-console (0.5.11)
ipaddress (0.8.3)
irb (1.4.1)
reline (>= 0.3.0)
jmespath (1.6.1)
jquery-rails (4.4.0)
rails-dom-testing (>= 1, < 3)
@@ -353,7 +356,7 @@ GEM
rspec (>= 2.0, < 4.0)
jsonapi-serializer (2.2.0)
activesupport (>= 4.2)
jwt (2.4.1)
jwt (2.5.0)
knapsack (4.0.0)
rake
launchy (2.5.0)
@@ -383,7 +386,7 @@ GEM
mini_portile2 (2.8.0)
mini_racer (0.4.0)
libv8-node (~> 15.14.0.0)
minitest (5.16.2)
minitest (5.16.3)
monetize (1.12.0)
money (~> 6.12)
money (6.16.0)
@@ -402,14 +405,15 @@ GEM
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
orm_adapter (0.5.0)
pagy (5.1.2)
pagy (5.10.1)
activesupport
paper_trail (12.1.0)
activerecord (>= 5.2)
request_store (~> 1.1)
parallel (1.22.1)
paranoia (2.6.0)
activerecord (>= 5.1, < 7.1)
parser (3.1.2.0)
parser (3.1.2.1)
ast (~> 2.4.1)
paypal-sdk-core (0.3.4)
multi_json (~> 1.0)
@@ -427,11 +431,8 @@ GEM
pry (0.13.1)
coderay (~> 1.1)
method_source (~> 1.0)
pry-byebug (3.9.0)
byebug (~> 11.0)
pry (~> 0.13.0)
public_suffix (4.0.7)
puma (5.6.4)
puma (5.6.5)
nio4r (~> 2.0)
raabro (1.4.0)
racc (1.6.0)
@@ -492,8 +493,10 @@ GEM
rb-inotify (0.10.1)
ffi (~> 1.0)
redcarpet (3.5.1)
redis (4.7.1)
redis (4.8.0)
regexp_parser (2.5.0)
reline (0.3.1)
io-console (~> 0.5)
request_store (1.5.0)
rack (>= 1.4)
responders (3.0.1)
@@ -545,17 +548,17 @@ GEM
rswag-ui (2.5.1)
actionpack (>= 3.1, < 7.1)
railties (>= 3.1, < 7.1)
rubocop (1.32.0)
rubocop (1.36.0)
json (~> 2.3)
parallel (~> 1.10)
parser (>= 3.1.0.0)
parser (>= 3.1.2.1)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0)
rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.19.1, < 2.0)
rubocop-ast (>= 1.20.1, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 3.0)
rubocop-ast (1.19.1)
rubocop-ast (1.21.0)
parser (>= 3.1.1.0)
rubocop-rails (2.15.2)
activesupport (>= 4.2.0)
@@ -577,18 +580,13 @@ GEM
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
sd_notify (0.1.1)
selenium-webdriver (4.3.0)
childprocess (>= 0.5, < 5.0)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
semantic_range (3.0.0)
shoulda-matchers (5.1.0)
activesupport (>= 5.2.0)
sidekiq (6.5.1)
connection_pool (>= 2.2.2)
sidekiq (6.5.6)
connection_pool (>= 2.2.5)
rack (~> 2.0)
redis (>= 4.2.0)
redis (>= 4.5.0, < 5)
sidekiq-scheduler (4.0.2)
redis (>= 4.2.0)
rufus-scheduler (~> 3.2)
@@ -622,9 +620,9 @@ GEM
activerecord (>= 5.1)
state_machines-activemodel (>= 0.8.0)
stringex (2.8.5)
stripe (5.42.0)
stripe (7.1.0)
temple (0.8.2)
test-prof (1.0.9)
test-prof (1.0.10)
test-unit (3.5.3)
power_assert
thor (1.2.1)
@@ -638,10 +636,10 @@ GEM
execjs (>= 0.3.0, < 3)
unicode-display_width (2.2.0)
uniform_notifier (1.16.0)
valid_email2 (4.0.3)
valid_email2 (4.0.4)
activemodel (>= 3.2)
mail (~> 2.5)
view_component (2.64.0)
view_component (2.71.0)
activesupport (>= 5.0.0, < 8.0)
concurrent-ruby (~> 1.0)
method_source (~> 1.0)
@@ -654,11 +652,7 @@ GEM
activemodel (>= 6.0.0)
bindex (>= 0.4.0)
railties (>= 6.0.0)
webdrivers (5.0.0)
nokogiri (~> 1.6)
rubyzip (>= 1.3.0)
selenium-webdriver (~> 4.0)
webmock (3.15.0)
webmock (3.18.1)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
@@ -667,7 +661,6 @@ GEM
rack-proxy (>= 0.6.1)
railties (>= 5.2)
semantic_range (>= 2.3.0)
websocket (1.2.9)
websocket-driver (0.7.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
@@ -700,13 +693,11 @@ DEPENDENCIES
angularjs-rails (= 1.8.0)
arel-helpers (~> 2.12)
awesome_nested_set
awesome_print
aws-sdk-s3
bigdecimal (= 3.0.2)
bootsnap
bugsnag
bullet
byebug
cable_ready (= 5.0.0.pre3)
cancancan (~> 1.15.0)
capybara
@@ -717,6 +708,7 @@ DEPENDENCIES
database_cleaner
db2fog!
ddtrace
debug (>= 1.0.0)
debugger-linecache
devise
devise-encryptable
@@ -766,7 +758,6 @@ DEPENDENCIES
pdf-reader
pg (~> 1.2.3)
pry (~> 0.13.0)
pry-byebug (~> 3.9.0)
puma
rack-mini-profiler (< 3.0.0)
rack-rewrite
@@ -792,7 +783,6 @@ DEPENDENCIES
rubocop-rails
sd_notify
select2-rails!
selenium-webdriver
shoulda-matchers
sidekiq
sidekiq-scheduler
@@ -812,7 +802,6 @@ DEPENDENCIES
view_component_storybook
web!
web-console
webdrivers
webmock
webpacker (~> 5)
whenever

View File

@@ -105,6 +105,8 @@
//= require moment/locale/tr.js
//= require moment/locale/pl.js
//= require js-big-decimal/dist/web/js-big-decimal.min.js
// foundation
//= require ../shared/mm-foundation-tpls-0.9.0-20180826174721.min.js

View File

@@ -1,15 +0,0 @@
angular.module("admin.enterprise_groups")
.controller "sideMenuCtrl", ($scope, SideMenu) ->
$scope.menu = SideMenu
$scope.select = SideMenu.select
$scope.menu.setItems [
{ name: 'primary_details', label: t('primary_details'), icon_class: "icon-user" }
{ name: 'users', label: t('users'), icon_class: "icon-user" }
{ name: 'about', label: t('about'), icon_class: "icon-pencil" }
{ name: 'images', label: t('images'), icon_class: "icon-picture" }
{ name: 'contact', label: t('admin_enterprise_groups_contact'), icon_class: "icon-phone" }
{ name: 'web', label: t('admin_enterprise_groups_web'), icon_class: "icon-globe" }
]
$scope.select(0)

View File

@@ -1,27 +0,0 @@
angular.module("admin.enterprises")
.controller "permalinkCtrl", ($scope, PermalinkChecker) ->
# locals
initialPermalink = $scope.Enterprise.permalink
pendingRequest = null
# variables on $scope
$scope.availablility = ""
$scope.checking = false
$scope.$watch "Enterprise.permalink", (newValue, oldValue) ->
if newValue == initialPermalink
$scope.availability = ""
return
$scope.checking = true
pendingRequest = PermalinkChecker.check(newValue)
pendingRequest.then (data) ->
if data.permalink == initialPermalink
$scope.availability = ""
else
$scope.availability = data.available
$scope.Enterprise.permalink = data.permalink
$scope.checking = false
, (data) ->
# Do nothing (this is hopefully an aborted request)

View File

@@ -1,49 +0,0 @@
angular.module("admin.enterprises")
.controller "sideMenuCtrl", ($scope, $parse, enterprise, SideMenu, enterprisePermissions) ->
$scope.Enterprise = enterprise
$scope.menu = SideMenu
$scope.select = SideMenu.select
$scope.menu.setItems [
{ name: 'primary_details', label: t('primary_details'), icon_class: "icon-home" }
{ name: 'address', label: t('address'), icon_class: "icon-map-marker" }
{ name: 'contact', label: t('contact'), icon_class: "icon-phone" }
{ name: 'social', label: t('social'), icon_class: "icon-twitter" }
{ name: 'about', label: t('about'), icon_class: "icon-pencil" }
{ name: 'business_details', label: t('business_details'), icon_class: "icon-briefcase" }
{ name: 'images', label: t('images'), icon_class: "icon-picture" }
{ name: 'properties', label: t('properties'), icon_class: "icon-tags", show: "showProperties()" }
{ name: 'shipping_methods', label: t('shipping_methods'), icon_class: "icon-truck", show: "showShippingMethods()" }
{ name: 'payment_methods', label: t('payment_methods'), icon_class: "icon-money", show: "showPaymentMethods()" }
{ name: 'enterprise_fees', label: t('enterprise_fees'), icon_class: "icon-tasks", show: "showEnterpriseFees()" }
{ name: 'enterprise_permissions', label: t('enterprise_permissions'), icon_class: "icon-plug" }
{ name: 'inventory_settings', label: t('inventory_settings'), icon_class: "icon-list-ol", show: "enterpriseIsShop()" }
{ name: 'tag_rules', label: t('tag_rules'), icon_class: "icon-random", show: "enterpriseIsShop()" }
{ name: 'shop_preferences', label: t('shop_preferences'), icon_class: "icon-shopping-cart", show: "enterpriseIsShop()" }
{ name: 'users', label: t('users'), icon_class: "icon-user" }
]
SideMenu.init()
$scope.showItem = (item) ->
if item.show?
$parse(item.show)($scope)
else
true
$scope.showProperties = ->
!!$scope.Enterprise.is_primary_producer
$scope.showShippingMethods = ->
enterprisePermissions.can_manage_shipping_methods && $scope.Enterprise.sells != "none"
$scope.showPaymentMethods = ->
enterprisePermissions.can_manage_payment_methods && $scope.Enterprise.sells != "none"
$scope.showEnterpriseFees = ->
enterprisePermissions.can_manage_enterprise_fees && ($scope.Enterprise.sells != "none" || $scope.Enterprise.is_primary_producer)
$scope.enterpriseIsShop = ->
$scope.Enterprise.sells != "none"
$scope.menu.redirect_function('enterprise_permissions', '/admin/enterprise_relationships')

View File

@@ -32,7 +32,7 @@ angular.module("admin.products")
if match
$scope.product.master.unit_value = PriceParser.parse(match[1])
$scope.product.master.unit_value = null if isNaN($scope.product.master.unit_value)
$scope.product.master.unit_value *= $scope.product.variant_unit_scale if $scope.product.master.unit_value && $scope.product.variant_unit_scale
$scope.product.master.unit_value = window.bigDecimal.multiply($scope.product.master.unit_value, $scope.product.variant_unit_scale, 2) if $scope.product.master.unit_value && $scope.product.variant_unit_scale
$scope.product.master.unit_description = match[3]
else
value = $scope.product.master.unit_value

View File

@@ -23,10 +23,10 @@ angular.module("admin.products").controller "variantUnitsCtrl", ($scope, Variant
$scope.updateValue = ->
unit_value_human = angular.element('#unit_value_human').val()
$scope.unit_value = PriceParser.parse(unit_value_human) * $scope.scale
$scope.unit_value = bigDecimal.multiply(PriceParser.parse(unit_value_human), $scope.scale, 2)
variant_unit_value = angular.element('#variant_unit_value').val()
$scope.unit_value_human = variant_unit_value / $scope.scale
$scope.unit_value_human = parseFloat(bigDecimal.divide(variant_unit_value, $scope.scale, 2))
$timeout -> $scope.processUnitPrice()
$timeout -> $scope.updateValue()

View File

@@ -20,3 +20,6 @@ angular.module('Darkswarm').controller "CreditCardsCtrl", ($scope, $http, Credit
).finally ->
window.location.reload()
$scope.hasOneDefaultSavedCards = () ->
$scope.savedCreditCards.some((card) -> card.is_default)

View File

@@ -7,6 +7,7 @@ require 'open_food_network/order_cycle_permissions'
module Admin
class EnterprisesController < Admin::ResourceController
include GeocodeEnterpriseAddress
include CablecarResponses
# These need to run before #load_resource so that @object is initialised with sanitised values
prepend_before_action :override_owner, only: :create
@@ -44,7 +45,12 @@ module Admin
def edit
@object = Enterprise.where(permalink: params[:id]).
includes(users: [:ship_address, :bill_address]).first
super
if params[:stimulus]
@enterprise.is_primary_producer = params[:is_primary_producer]
@enterprise.sells = params[:enterprise_sells]
render operations: cable_car.morph("#side_menu", partial("admin/shared/side_menu"))
.morph("#permalink", partial("admin/enterprises/form/permalink"))
end
end
def welcome

View File

@@ -165,8 +165,9 @@ class ApplicationController < ActionController::Base
return unless current_spree_user.disabled
flash[:success] = nil
flash.now[:error] = I18n.t("devise.failure.disabled")
flash[:error] = I18n.t("devise.failure.disabled")
sign_out current_spree_user
redirect_to main_app.root_path
end
end

View File

@@ -0,0 +1,17 @@
# frozen_string_literal: true
class ErrorsController < ApplicationController
layout "errors"
def not_found
render status: :not_found
end
def internal_server_error
render status: :internal_server_error
end
def unprocessable_entity
render status: :unprocessable_entity
end
end

View File

@@ -21,6 +21,8 @@ class SplitCheckoutController < ::BaseController
def edit
redirect_to_step_based_on_order unless params[:step]
check_step if params[:step]
recalculate_tax if params[:step] == "summary"
end
def update
@@ -145,4 +147,18 @@ class SplitCheckoutController < ::BaseController
end
redirect_to_step_based_on_order
end
def check_step
case @order.state
when "cart", "address", "delivery"
redirect_to checkout_step_path(:details) unless params[:step] == "details"
when "payment"
redirect_to checkout_step_path(:payment) if params[:step] == "summary"
end
end
def recalculate_tax
@order.create_tax_charge!
@order.update_order!
end
end

View File

@@ -48,30 +48,11 @@ module Spree
@user.spree_roles = roles.reject(&:blank?).collect{ |r| Spree::Role.find(r) }
end
message = if new_email_unconfirmed?
Spree.t(:email_updated)
else
Spree.t(:account_updated)
end
flash.now[:success] = message
flash.now[:success] = update_message
end
render :edit
end
def generate_api_key
if @user.generate_spree_api_key!
flash[:success] = t('spree.api.key_generated')
end
redirect_to spree.edit_admin_user_path(@user)
end
def clear_api_key
if @user.clear_spree_api_key!
flash[:success] = t('spree.api.key_cleared')
end
redirect_to spree.edit_admin_user_path(@user)
end
protected
def collection
@@ -100,6 +81,16 @@ module Spree
private
def update_message
return Spree.t(:show_api_key_view_toggled) if @user.show_api_key_view_previously_changed?
if new_email_unconfirmed?
Spree.t(:email_updated)
else
Spree.t(:account_updated)
end
end
# handling raise from Admin::ResourceController#destroy
def user_destroy_with_orders_error
render status: :forbidden, text: Spree.t(:error_user_destroy_with_orders)
@@ -137,7 +128,9 @@ module Spree
end
def user_params
::PermittedAttributes::User.new(params).call([:enterprise_limit])
::PermittedAttributes::User.new(params).call(
%i[enterprise_limit show_api_key_view]
)
end
end
end

View File

@@ -0,0 +1,57 @@
# frozen_string_literal: true
module Spree
class ApiKeysController < ::BaseController
include Spree::Core::ControllerHelpers
include I18nHelper
prepend_before_action :load_object
def create
@user.generate_api_key
if @user.save
flash[:success] = t('spree.api.key_generated')
end
redirect_to redirect_path
end
def destroy
@user.spree_api_key = nil
if @user.save
flash[:success] = t('spree.api.key_cleared')
end
redirect_to redirect_path
end
private
def load_object
@user ||= find_user
if @user
authorize! params[:action].to_sym, @user
else
redirect_to main_app.login_path
end
end
def find_user
Spree::User.find_by(id: params[:id]) || spree_current_user
end
def redirect_path
if request.referer.blank? || request.referer.include?(spree.account_path)
developer_settings_path
else
request.referer
end
end
def developer_settings_path
"#{spree.account_path}#/developer_settings"
end
end
end

View File

@@ -49,7 +49,10 @@ module Spree
# Using try because we may not have a card here
if @credit_card.try(:destroy)
remove_shop_authorizations if @credit_card.is_default
if @credit_card.is_default
remove_shop_authorizations
mark_as_default_next_credit_card if credit_cards_with_payment_profile.count > 0
end
flash[:success] = I18n.t(:card_has_been_removed, number: "x-#{@credit_card.last_digits}")
else
flash[:error] = I18n.t(:card_could_not_be_removed)
@@ -67,6 +70,14 @@ module Spree
@credit_card.user.customers.update_all(allow_charges: false)
end
def mark_as_default_next_credit_card
credit_cards_with_payment_profile.first.update(is_default: true)
end
def credit_cards_with_payment_profile
spree_current_user.credit_cards.with_payment_profile
end
def create_customer(token)
Stripe::Customer.create(email: spree_current_user.email, source: token)
end

View File

@@ -6,7 +6,6 @@ module Spree
include Rails.application.routes.url_helpers
include CablecarResponses
layout 'darkswarm'
rescue_from ActiveRecord::RecordNotFound, with: :render_404

View File

@@ -16,6 +16,7 @@ module Spree
prepend_before_action :handle_unconfirmed_email
before_action :set_checkout_redirect, only: :create
after_action :ensure_valid_locale_persisted, only: :create
skip_before_action :check_disabled_user
def create
authenticate_spree_user!

View File

@@ -78,7 +78,7 @@ module Spree
def load_object
@user ||= spree_current_user
if @user
if @user && !@user.disabled
authorize! params[:action].to_sym, @user
else
redirect_to main_app.login_path

View File

@@ -0,0 +1,17 @@
# frozen_string_literal: true
module Admin
module EnterpriseGroupsHelper
def enterprise_group_side_menu_items
[
{ name: 'primary_details', label: 'primary_details', icon_class: "icon-user",
selected: "selected" },
{ name: 'users', label: 'users', icon_class: "icon-user" },
{ name: 'about', label: 'about', icon_class: "icon-pencil" },
{ name: 'images', label: 'images', icon_class: "icon-picture" },
{ name: 'contact', label: 'admin_enterprise_groups_contact', icon_class: "icon-phone" },
{ name: 'web', label: 'admin_enterprise_groups_web', icon_class: "icon-globe" },
]
end
end
end

View File

@@ -13,5 +13,34 @@ module Admin
def select_only_item(producers)
producers.size == 1 ? producers.first.id : nil
end
def enterprise_side_menu_items(enterprise)
is_shop = enterprise.sells != "none"
show_properties = !!enterprise.is_primary_producer
show_shipping_methods = can?(:manage_shipping_methods, enterprise) && is_shop
show_payment_methods = can?(:manage_payment_methods, enterprise) && is_shop
show_enterprise_fees = can?(:manage_enterprise_fees,
enterprise) && (is_shop || enterprise.is_primary_producer)
[
{ name: 'primary_details', icon_class: "icon-home", show: true, selected: 'selected' },
{ name: 'address', icon_class: "icon-map-marker", show: true },
{ name: 'contact', icon_class: "icon-phone", show: true },
{ name: 'social', icon_class: "icon-twitter", show: true },
{ name: 'about', icon_class: "icon-pencil", show: true, form_name: "about_us" },
{ name: 'business_details', icon_class: "icon-briefcase", show: true },
{ name: 'images', icon_class: "icon-picture", show: true },
{ name: 'properties', icon_class: "icon-tags", show: show_properties },
{ name: 'shipping_methods', icon_class: "icon-truck", show: show_shipping_methods },
{ name: 'payment_methods', icon_class: "icon-money", show: show_payment_methods },
{ name: 'enterprise_fees', icon_class: "icon-tasks", show: show_enterprise_fees },
{ name: 'enterprise_permissions', icon_class: "icon-plug", show: true,
href: admin_enterprise_relationships_path },
{ name: 'inventory_settings', icon_class: "icon-list-ol", show: is_shop },
{ name: 'tag_rules', icon_class: "icon-random", show: is_shop },
{ name: 'shop_preferences', icon_class: "icon-shopping-cart", show: is_shop },
{ name: 'users', icon_class: "icon-user", show: true }
]
end
end
end

View File

@@ -70,10 +70,13 @@ module CheckoutHelper
def display_checkout_taxes_hash(order)
totals = OrderTaxAdjustmentsFetcher.new(order).totals
totals.each_with_object({}) do |(tax_rate, tax_amount), hash|
hash[number_to_percentage(tax_rate.amount * 100, precision: 1)] =
Spree::Money.new tax_amount, currency: order.currency
end
totals.map do |tax_rate, tax_amount|
{
amount: Spree::Money.new(tax_amount, currency: order.currency),
percentage: number_to_percentage(tax_rate.amount * 100, precision: 1),
rate_amount: tax_rate.amount,
}
end.sort_by { |tax| tax[:rate_amount] }
end
def display_line_item_tax_rates(line_item)

View File

@@ -71,6 +71,10 @@ module Spree
set_reset_password_token
end
def generate_api_key
self.spree_api_key = SecureRandom.hex(24)
end
def known_users
if admin?
Spree::User.where(nil)
@@ -132,16 +136,6 @@ module Spree
end
end
def generate_spree_api_key!
self.spree_api_key = SecureRandom.hex(24)
save!
end
def clear_spree_api_key!
self.spree_api_key = nil
save!
end
def last_incomplete_spree_order
spree_orders.incomplete.where(created_by_id: id).order('created_at DESC').first
end

View File

@@ -68,12 +68,12 @@ class EmbeddedPageService
end
def current_referer
return if @request.referer.blank?
uri = URI(@request.referer)
return if uri.host.blank?
uri = URI.parse(@request.referer)
return unless uri.is_a?(URI::HTTP) && uri.host.present?
uri.host.downcase
rescue URI::InvalidURIError
false
end
def current_referer_without_www

View File

@@ -12,9 +12,9 @@ module PermittedAttributes
:email, :special_instructions,
:existing_card_id, :shipping_method_id,
{ payments_attributes: [
:payment_method_id,
{ source_attributes: PermittedAttributes::PaymentSource.attributes }
],
:payment_method_id,
{ source_attributes: PermittedAttributes::PaymentSource.attributes }
],
ship_address_attributes: PermittedAttributes::Address.attributes,
bill_address_attributes: PermittedAttributes::Address.attributes }
],

View File

@@ -56,7 +56,7 @@ module VariantUnits
def option_value_value_unit_scaled
unit_scale, unit_name = scale_for_unit_value
value = @variant.unit_value / unit_scale
value = BigDecimal(@variant.unit_value / unit_scale, 6)
[value, unit_name]
end

View File

@@ -1,7 +1,7 @@
= render 'spree/shared/error_messages', target: @enterprise
= form_for [main_app, :admin, @enterprise_group] do |f|
.row{ ng: {app: 'admin.enterprise_groups', controller: 'enterpriseGroupCtrl'} }
.row{ ng: {app: 'admin.enterprise_groups', controller: 'enterpriseGroupCtrl'}, data: { controller: 'tabs-and-panels', "tabs-and-panels-class-name-value": "selected" } }
.sixteen.columns.alpha
.four.columns.alpha
= render 'admin/shared/side_menu'

View File

@@ -1,5 +1,5 @@
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='about'" } }
%legend {{menu.selected.label}}
%fieldset.alpha.no-border-bottom#about_panel{ data: { "tabs-and-panels-target": "panel" } }
%legend= t('about')
= f.field_container :long_description do
%text-angular{'id' => 'enterprise_group_long_description', 'name' => 'enterprise_group[long_description]', 'class' => 'text-angular', "textangular-links-target-blank" => true,
'ta-toolbar' => "[['h1','h2','h3','h4','p'],['bold','italics','underline','clear'],['insertLink']]"}

View File

@@ -1,6 +1,6 @@
= f.fields_for :address do |af|
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='contact'" } }
%legend {{menu.selected.label}}
%fieldset.alpha.no-border-bottom#contact_panel{ data: { "tabs-and-panels-target": "panel" } }
%legend= t('admin_enterprise_groups_contact')
.row
.alpha.three.columns
= af.label :phone

View File

@@ -1,5 +1,5 @@
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='images'" } }
%legend {{menu.selected.label}}
%fieldset.alpha.no-border-bottom#images_panel{ data: { "tabs-and-panels-target": "panel" } }
%legend= t('images')
.row
.alpha.three.columns
= f.label :logo, 'ofn-with-tip' => t('admin_enterprise_groups_data_powertip_logo')

View File

@@ -1,5 +1,5 @@
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='primary_details'" } }
%legend {{menu.selected.label}}
%fieldset.alpha.no-border-bottom#primary_details_panel{ data: { "tabs-and-panels-target": "panel default" } }
%legend= t('primary_details')
= f.field_container :name do
= f.label :name
%br/

View File

@@ -1,5 +1,5 @@
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='users'" } }
%legend {{menu.selected.label}}
%fieldset.alpha.no-border-bottom#users_panel{ data: { "tabs-and-panels-target": "panel" } }
%legend= t('users')
.row
.three.columns.alpha
=f.label :owner_id, t(:admin_enterprise_groups_owner)

View File

@@ -1,5 +1,5 @@
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='web'" } }
%legend {{menu.selected.label}}
%fieldset.alpha.no-border-bottom#web_panel{ data: { "tabs-and-panels-target": "panel" } }
%legend= t('admin_enterprise_groups_web')
.row
.alpha.three.columns
= f.label :website

View File

@@ -1,63 +1,21 @@
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='primary_details'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/primary_details', f: f
- enterprise_side_menu_items(@enterprise).each do |item|
- case item[:name]
- when 'primary_details'
%fieldset.alpha.no-border-bottom{ id: "#{item[:name]}_panel", data: { controller: "primary-details", "primary-details-primary-producer-value": @enterprise.is_primary_producer.to_s, "primary-details-enterprise-sells-value": @enterprise.sells, "tabs-and-panels-target": "panel default" }}
%legend= t("#{ item[:name] }")
= render "admin/enterprises/form/#{ item[:form_name] || item[:name] }", f: f
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='users'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/users', f: f
- when 'address'
= f.fields_for :address do |af|
%fieldset.alpha.no-border-bottom{ id: "#{item[:name]}_panel", data: { "tabs-and-panels-target": "panel" }}
%legend= t("#{ item[:name] }")
= render 'admin/enterprises/form/address', af: af
= f.fields_for :address do |af|
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='address'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/address', af: af
- when 'enterprise_permissions'
%fieldset.alpha.no-border-bottom{ id: "#{item[:name]}_panel", data: { "tabs-and-panels-target": "panel" }}
%legend= t("#{ item[:name] }")
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='contact'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/contact', f: f
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='social'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/social', f: f
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='business_details'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/business_details', f: f
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='about'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/about_us', f: f
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='images'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/images', f: f
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='properties'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/properties', f: f
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='shipping_methods'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/shipping_methods', f: f
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='payment_methods'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/payment_methods', f: f
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='enterprise_fees'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/enterprise_fees', f: f
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='enterprise_permissions'" } }
%legend {{menu.selected.label}}
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='inventory_settings'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/inventory_settings', f: f
%fieldset.alpha.no-border-bottom{ ng: { show: "menu.selected.name=='shop_preferences'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/shop_preferences', f: f
%fieldset.alpha.no-border-bottom{ ng: { if: "menu.selected.name=='tag_rules'" } }
%legend {{menu.selected.label}}
= render 'admin/enterprises/form/tag_rules', f: f
- else
%fieldset.alpha.no-border-bottom{ id: "#{item[:name]}_panel", data: { "tabs-and-panels-target": "panel" }}
%legend= t("#{ item[:name] }")
= render "admin/enterprises/form/#{ item[:form_name] || item[:name] }", f: f

View File

@@ -10,7 +10,8 @@
%input.red{ type: "button", value: t(:update), ng: { click: "submit()", disabled: "!enterprise_form.$dirty" } }
%input{ type: "button", ng: { value: "enterprise_form.$dirty ? '#{t(:cancel)}' : '#{t(:close)}'", click: "cancel('#{main_app.admin_enterprises_path}')" } }
.row
.row{ data: {
controller: "tabs-and-panels", "tabs-and-panels-class-name-value": "selected" }}
.sixteen.columns.alpha
.four.columns.alpha
= render 'admin/shared/side_menu'

View File

@@ -6,8 +6,8 @@
.row
.alpha.three.columns
= f.label :email_address, t('.email_address')
%div{'ofn-with-tip' => t('.email_address_tip')}
%a= t('admin.whats_this')
= render partial: 'admin/shared/tooltip', locals: {tooltip_text: t('.email_address_tip')}
.omega.eight.columns
= f.text_field :email_address, { placeholder: t('.email_address_placeholder') }
.row
@@ -18,8 +18,8 @@
.row
.alpha.three.columns
= f.label :whatsapp_phone, t('.whatsapp_phone')
%div{'ofn-with-tip' => t('.whatsapp_phone_tip')}
%a= t('admin.whats_this')
= render partial: 'admin/shared/tooltip', locals: {tooltip_text: t('.whatsapp_phone_tip')}
.omega.eight.columns
= f.text_field :whatsapp_phone, { placeholder: t('.whatsapp_phone_placeholder') }
.row

View File

@@ -0,0 +1,32 @@
.permalink#permalink{ data: { controller: 'permalink', permalink: { 'initial-permalink-value': @enterprise.permalink, 'url-value': check_permalink_enterprises_url } }}
- unless @enterprise.sells == 'none'
.row
.three.columns.alpha
= label_tag :permalink, t('.permalink')
= render partial: 'admin/shared/tooltip', locals: {tooltip_text: t('.permalink_tip', link: main_app.root_url)}
.eight.columns
= text_field_tag "enterprise[permalink]", @enterprise.permalink, data: { action: "input->permalink#validate", "permalink-target": "permalinkField" }
.two.columns.omega
%div{ style: "width: 30px; height: 30px;", class: "hidden", data: { "permalink-target": "spinner" } }
= render partial: "components/admin_spinner"
%span.available.hidden{data: { "permalink-target": "available" }}
= t('available')
%i.icon-ok-sign
%span.unavailable.hidden{data: { "permalink-target": "unavailable" }}
= t('js.unavailable')
%i.icon-remove-sign
- unless @enterprise.sells == 'none'
.row
.three.columns.alpha
%label= t('.link_to_front')
= render partial: 'admin/shared/tooltip', locals: {tooltip_text: t('.link_to_front_tip')}
.eight.columns.omega
- front_shop_path = "#{main_app.root_url}#{@enterprise.permalink}/shop"
= link_to front_shop_path, front_shop_path , target: "_blank"
.row
.three.columns.alpha
= label_tag :id, t('.ofn_uid')
= render partial: 'admin/shared/tooltip', locals: {tooltip_text: t('.ofn_uid_tip')}
.six.columns
= @enterprise.id

View File

@@ -8,39 +8,34 @@
.row
.three.columns.alpha
= f.label :group_ids, t('.groups')
%div{'ofn-with-tip' => t('.groups_tip')}
%a= t('admin.whats_this')
= render partial: 'admin/shared/tooltip', locals: {tooltip_text: t('.groups_tip')}
.eight.columns.omega
= f.collection_select :group_ids, @groups, :id, :name, {}, class: "select2 fullwidth", multiple: true, placeholder: t('.groups_placeholder')
= f.collection_select :group_ids, @groups, :id, :name, {}, data: { controller: "tom-select", "tom-select-options-value": { plugins: ['remove_button'], maxItems: nil } }, class: "full-width", multiple: true, placeholder: t('.groups_placeholder')
.row
.three.columns.alpha
%label= t('.primary_producer')
%div{'ofn-with-tip' => t('.primary_producer_tip')}
%a= t('admin.whats_this')
= render partial: 'admin/shared/tooltip', locals: {tooltip_text: t('.primary_producer_tip')}
.five.columns.omega
= f.check_box :is_primary_producer, 'ng-model' => 'Enterprise.is_primary_producer'
= f.check_box :is_primary_producer, data: { action: "change->primary-details#primaryProducerChanged" }
= f.label :is_primary_producer, t('.producer')
- if spree_current_user.admin?
.row
.three.columns.alpha
= f.label :sells, t('.sells')
%div{'ofn-with-tip' => t('.sells_tip')}
%a= t('admin.whats_this')
= render partial: 'admin/shared/tooltip', locals: {tooltip_text: t('.sells_tip')}
.two.columns
= f.radio_button :sells, "none", 'ng-model' => 'Enterprise.sells'
= f.radio_button :sells, "none", 'ng-model' => 'Enterprise.sells', data: {action: "change->primary-details#enterpriseSellsChanged"}
= f.label :sells, t('.none'), value: "none"
.two.columns
= f.radio_button :sells, "own", 'ng-model' => 'Enterprise.sells'
= f.radio_button :sells, "own", 'ng-model' => 'Enterprise.sells', data: {action: "change->primary-details#enterpriseSellsChanged"}
= f.label :sells, t('.own'), value: "own"
.four.columns.omega
= f.radio_button :sells, "any", 'ng-model' => 'Enterprise.sells'
= f.radio_button :sells, "any", 'ng-model' => 'Enterprise.sells', data: {action: "change->primary-details#enterpriseSellsChanged"}
= f.label :sells, t('.any'), value: "any"
.row
.three.columns.alpha
%label= t('.visible_in_search')
%div{'ofn-with-tip' => t('.visible_in_search_tip')}
%a= t('admin.whats_this')
= render partial: 'admin/shared/tooltip', locals: {tooltip_text: t('.visible_in_search_tip')}
.two.columns
= f.radio_button :visible, "public", 'ng-model' => 'Enterprise.visible'
= f.label :visible, t('.visible'), value: 'public'
@@ -50,32 +45,5 @@
.four.columns.omega
= f.radio_button :visible, "hidden", 'ng-model' => 'Enterprise.visible'
= f.label :visible, t('.hidden'), value: 'hidden'
.permalink{ ng: { controller: "permalinkCtrl" } }
.row{ ng: { show: "Enterprise.sells == 'own' || Enterprise.sells == 'any'" } }
.three.columns.alpha
= f.label :permalink, t('.permalink')
%div{'ofn-with-tip' => t('.permalink_tip', link: main_app.root_url)}
%a= t('admin.whats_this')
.eight.columns
= f.text_field :permalink, { 'ng-model' => "Enterprise.permalink", placeholder: "eg. your-shop-name", 'ng-model-options' => "{ updateOn: 'default blur', debounce: {'default': 300, 'blur': 0} }" }
.two.columns.omega
%div{ng: {show: "checking", cloak: true}, style: "width: 30px; height: 30px;"}
= render partial: "components/admin_spinner"
%span{ ng: { class: 'availability.toLowerCase()', hide: "checking" } }
{{ availability }}
%i{ ng: { class: "{'icon-ok-sign': availability == 'Available', 'icon-remove-sign': availability == 'Unavailable'}" } }
.row{ ng: { show: "Enterprise.sells == 'own' || Enterprise.sells == 'any'" } }
.three.columns.alpha
%label= t('.link_to_front')
%div{'ofn-with-tip' => t('.link_to_front_tip')}
%a= t('admin.whats_this')
.eight.columns.omega
= surround main_app.root_url, "/shop" do
{{Enterprise.permalink}}
.row
.three.columns.alpha
= f.label :id, t('.ofn_uid')
%div{'ofn-with-tip' => t('.ofn_uid_tip')}
%a= t('admin.whats_this')
.six.columns
{{Enterprise.id}}
= render partial: 'admin/enterprises/form/permalink'

View File

@@ -7,19 +7,27 @@
.omega.fourteen.columns
= select_tag(:report_subtype, options_for_select(@report_subtypes, @report_subtype))
.row.rendering-options{ "data-controller": "csv-select" }
.alpha.two.columns
= label_tag :report_format, t(".generate_report")
.omega.fourteen.columns{ style: "margin-bottom: 1.5em;" }
= select_tag :report_format, grouped_options_for_select({ |
t('.formatted_data') => { t('.on_screen') => '', "PDF" => 'pdf', t('.spreadsheet') => 'xlsx' }, |
t('.raw_data') => { "CSV" => 'csv' }, |
}), { "data-csv-select-target": "reportType", "data-action": "csv-select#handleSelectChange" }
- if @report.header_option? || @report.summary_row_option?
.row
.alpha.two.columns= label_tag nil, t(".display")
.omega.fourteen.columns
- if @report.header_option?
%span.inline-checkbox{ style: "margin-right: 1rem;" }
= check_box_tag :display_header_row, true, params[:display_header_row]
= label_tag :display_header_row, t(".header_row")
- if @report.summary_row_option?
%span.inline-checkbox
= check_box_tag :display_summary_row, true, params[:display_summary_row]
= label_tag :display_summary_row, t(".summary_row")
- if @report.header_option? || @report.summary_row_option?
.row
.alpha.two.columns= label_tag nil, t(".display")
.omega.fourteen.columns
- if @report.header_option?
%span.inline-checkbox{ style: "margin-right: 1rem;" }
= check_box_tag :display_header_row, true, params[:display_header_row]
= label_tag :display_header_row, t(".header_row")
- if @report.summary_row_option?
%span.inline-checkbox
= check_box_tag :display_summary_row, true, params[:display_summary_row], { "data-csv-select-target": "checkbox" }
= label_tag :display_summary_row, t(".summary_row"), { "data-csv-select-target": "label" }
- if @report.available_headers.present?
.row
@@ -33,14 +41,3 @@
.omega.fourteen.columns
= select_tag(:fields_to_hide, options_for_select(@report.available_headers, params[:fields_to_hide]),
class: "select2 fullwidth", multiple: true)
.row.rendering-options
.alpha.two.columns
= label_tag :report_format, t(".generate_report")
.omega.fourteen.columns
= select_tag :report_format, grouped_options_for_select({ |
t('.formatted_data') => { t('.on_screen') => '', "PDF" => 'pdf', t('.spreadsheet') => 'xlsx' }, |
t('.raw_data') => { "CSV" => 'csv' }, |
})

View File

@@ -0,0 +1,2 @@
= render 'admin/reports/date_range_form', f: f

View File

@@ -1,8 +1,13 @@
.side_menu{ ng: { controller: 'sideMenuCtrl' } }
%a.menu_item{ href: "", id: "{{ item.name.toLowerCase().replace(' ', '_') }}",
ng: { repeat: '(index,item) in menu.items | filter:{visible:true}',
click: 'select(index)',
show: '!showItem || showItem(item)',
class: '{ selected: item.selected }' } }
%i{ class: "{{item.icon_class}}" }
%span {{ item.label }}
.side_menu#side_menu
- if @enterprise
- enterprise_side_menu_items(@enterprise).each do |item|
- next unless item[:show]
%a.menu_item{ href: item[:href] || "##{item[:name]}_panel", id: item[:name], data: { action: "tabs-and-panels#changeActivePanel tabs-and-panels#changeActiveTab", "tabs-and-panels-target": "tab" }, class: item[:selected] }
%i{ class: item[:icon_class] }
%span= t("#{item[:name] }")
- else
- enterprise_group_side_menu_items.each do |item|
%a.menu_item{ href: "##{item[:name]}_panel", class: item[:selected], id: item[:name], data: { action: "tabs-and-panels#changeActivePanel tabs-and-panels#changeActiveTab", "tabs-and-panels-target": "tab" } }
%i{ class: item[:icon_class] }
%span= t("#{item[:label] }")

View File

@@ -0,0 +1,6 @@
%div{"data-controller": "tooltip"}
%a{"data-tooltip-target": "element", "data-action": "mouseenter->tooltip#showTooltip mouseleave->tooltip#hideTooltip"}= t('admin.whats_this')
.tooltip-container
.tooltip{"data-tooltip-target": "tooltip"}
= sanitize tooltip_text
.arrow{"data-tooltip-target": "arrow"}

View File

@@ -0,0 +1,8 @@
- content_for :title do
= I18n.t("errors.internal_server_error.title")
.dialog
%a{href: "/"}
%img{src: "/500.jpg"}
%h1
= t("errors.internal_server_error.title")
= t("errors.internal_server_error.message_html")

View File

@@ -0,0 +1,8 @@
- content_for :title do
= I18n.t("errors.not_found.title")
.dialog
%a{href: "/"}
%img{src: "/500.jpg"}
%h1
= t("errors.not_found.title")
= t("errors.not_found.message_html")

View File

@@ -0,0 +1,26 @@
:css
body {
text-align: center;
}
a {
font-size: 100%;
color: black;
line-height: 1.5em;
text-decoration: none;
border-bottom: 1px dotted black;
padding: 0 0.2rem;
}
a:hover, a:focus, a:active{
background: #8f301d;
color: white;
border-bottom: none;
}
- content_for :title do
= I18n.t("errors.unprocessable_entity.title")
.dialog
%a{href: "/", style: "border: none; background: none;"}
%img{src: "/422.jpg"}
%h1
= t("errors.unprocessable_entity.title")
= t("errors.unprocessable_entity.message_html")

View File

@@ -6,19 +6,3 @@
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
var u="#{Spree::Config.matomo_tag_manager_url}";
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u; s.parentNode.insertBefore(g,s);
- if Spree::Config.matomo_url.present?
:javascript
var _paq = window._paq || [];
_paq.push(["setDocumentTitle", document.domain + "/" + document.title]);
_paq.push(["setCookieDomain", "*.#{Spree::Config.site_url}"]);
_paq.push(["setDomains", ["*.#{Spree::Config.site_url}"]]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="#{Spree::Config.matomo_url}";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '#{Spree::Config.matomo_site_id}']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();

View File

@@ -0,0 +1,16 @@
- if Spree::Config.matomo_url.present?
:javascript
var _paq = window._paq || [];
_paq.push(["setDocumentTitle", document.domain + "/" + document.title]);
_paq.push(["setCookieDomain", "*.#{Spree::Config.site_url}"]);
_paq.push(["setDomains", ["*.#{Spree::Config.site_url}"]]);
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="#{Spree::Config.matomo_url}";
_paq.push(['setTrackerUrl', u+'matomo.php']);
_paq.push(['setSiteId', '#{Spree::Config.matomo_site_id}']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();

View File

@@ -15,6 +15,7 @@
%link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"}
%link{href: asset_pack_path("media/fonts/OFN-v2.woff"), rel: "preload", as: "font", crossorigin: "anonymous"}
= render "layouts/matomo_tag"
= render "layouts/matomo_tracking"
= language_meta_tags
= stylesheet_pack_tag "darkswarm", "data-turbo-track": "reload"

View File

@@ -0,0 +1,28 @@
%html
%head
:css
body {
background-color: #fff;
color: #666;
font-family: arial, sans-serif;
}
div.dialog {
width: 600px;
margin: auto;
}
@media only screen
and (min-width: 320px)
and (max-width: 568px) {
div.dialog, div.dialog img {
width: 95%;
}
}
div.dialog h1 {
font-size: 1.8em;
}
%title
= yield(:title)
%body
= yield

View File

@@ -9,6 +9,7 @@
- else
= favicon_link_tag "/favicon-staging.ico"
%link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"}
= render "layouts/matomo_tag"
= language_meta_tags
= stylesheet_pack_tag "darkswarm"

View File

@@ -47,12 +47,12 @@
%strong= @order.has_taxes_included ? t(:total_incl_tax) : t(:total_excl_tax)
%td{:align => "right", :colspan => "2"}
%strong= @order.has_taxes_included ? @order.display_total : display_checkout_total_less_tax(@order)
- display_checkout_taxes_hash(@order).each do |tax_rate, tax_value|
- display_checkout_taxes_hash(@order).each do |tax|
%tr
%td{:align => "right", :colspan => "3"}
= t(:tax_total, rate: tax_rate)
= t(:tax_total, rate: tax[:percentage])
%td{:align => "right", :colspan => "2"}
= tax_value
= tax[:amount]
%tr
%td{:align => "right", :colspan => "3"}
= @order.has_taxes_included ? t(:total_excl_tax) : t(:total_incl_tax)

View File

@@ -77,3 +77,6 @@
= @order.distributor.invoice_text
= render 'spree/shared/payment'
- if @order.note.present?
= render partial: 'spree/shared/order_note'

View File

@@ -89,3 +89,6 @@
= @order.distributor.invoice_text
= render 'spree/shared/payment'
- if @order.note.present?
= render partial: 'spree/shared/order_note'

View File

@@ -58,10 +58,10 @@
j(@order.display_total.format(with_currency: false))]}",
'\x1B' + '\x45' + '\x0A', // bold off
'\x0A',
"#{display_checkout_taxes_hash(@order).map { |tax_rate, tax_value|
"#{display_checkout_taxes_hash(@order).map { |tax|
'%31s%10s' %
[j(t(:tax_total, rate: tax_rate)),
j(tax_value.format(with_currency: false))] +
[j(t(:tax_total, rate: tax[:percentage])),
j(tax[:amount].format(with_currency: false))] +
'" + \'\x0A\' + "'}.join }",
"#{'%31s%10s' %
[j(t(:total_excl_tax)),

View File

@@ -1,17 +1,23 @@
%fieldset.omega.six.columns
%legend= t('spree.api.access')
= form_with(model: @user, url: spree.admin_user_path(@user)) do |form|
= form.check_box :show_api_key_view, onchange: "this.form.submit()"
= form.label :show_api_key_view, t('spree.api.toggle_api_key_view')
- if @user.spree_api_key.present?
.field
= label_tag t('spree.api.key')
= ":"
= @user.spree_api_key
.filter-actions.actions
= form_tag spree.clear_api_key_admin_user_path(@user), method: :put do
= button t('spree.api.clear_key'), 'icon-trash'
= form_tag spree.generate_api_key_admin_user_path(@user), method: :put do
= button t('spree.api.regenerate_key'), 'icon-refresh'
= form_with(model: @user, url: spree.api_key_path(id: @user), method: :delete) do |form|
= form.button t('spree.api.clear_key'), class: 'icon-trash', icon: 'icon-trash'
= form_with(model: @user, url: spree.api_keys_path(id: @user), method: :post) do |form|
= form.button t('spree.api.regenerate_key'), class: 'icon-refresh', icon: 'icon-refresh'
- else
.no-objects-found= t('spree.api.no_key')
.filter-actions.actions
= form_tag spree.generate_api_key_admin_user_path(@user), method: :put do
= button t('spree.api.generate_key'), 'icon-key'
= form_with(model: @user, url: spree.api_keys_path(id: @user), method: :post) do |form|
= form.button t('spree.api.generate_key'), class: 'icon-key', icon: 'icon-key'

View File

@@ -0,0 +1,4 @@
%p.callout{style: "margin-top: 30px"}
%strong= t :additional_information
%p{style: "margin: 5px"}
= @order.note

View File

@@ -0,0 +1,7 @@
%hr
%h3= t('.title')
%br
%p
= text_field_tag :api_key, @user.spree_api_key, disabled: true, class: 'title'
= form_tag spree.api_keys_path(@user), method: :post, class: 'inline' do
= button_tag(t('.regenerate_key'), type: 'submit', class: "button primary")

View File

@@ -7,10 +7,11 @@
%th= t(".allow_charges?")
%tr.customer{ id: "customer{{ customer.id }}", ng: { repeat: "customer in customers" } }
%td.shop{ ng: { bind: 'shopsByID[customer.enterprise_id].name' } }
%td.allow_charges
%td.allow_charges{ tooltip: "{{ hasOneDefaultSavedCards() ? null : \'" + t('.no_default_saved_cards_tooltip') + "\' }}" }
%input{ type: 'checkbox',
name: 'allow_charges',
ng: { model: 'customer.allow_charges',
change: 'customer.update()',
disabled: "!hasOneDefaultSavedCards()",
"true-value" => "true",
"false-value" => "false" } }

View File

@@ -0,0 +1,3 @@
%script{ type: "text/ng-template", id: "account/developer_settings.html" }
%h3= t('.title')
= render partial: 'api_keys'

View File

@@ -20,17 +20,23 @@
= render 'cards'
= render 'transactions'
= render 'settings'
= render 'developer_settings' if @user.show_api_key_view
.row.tabset-ctrl#account-tabs{ style: 'margin-bottom: 100px', navigate: 'true', selected: 'orders', prefix: 'account' }
.small.12.medium-3.columns.tab{ name: "orders" }
.small.12.medium-2.columns.tab{ name: "orders" }
%a=t('.tabs.orders')
- if Spree::Config.stripe_connect_enabled && Stripe.publishable_key
.small.12.medium-3.columns.tab{ name: "cards" }
.small.12.medium-2.columns.tab{ name: "cards" }
%a=t('.tabs.cards')
.small.12.medium-3.columns.tab{ name: "transactions" }
.small.12.medium-2.columns.tab{ name: "transactions" }
%a=t('.tabs.transactions')
.small.12.medium-3.columns.tab{ name: "settings" }
.small.12.medium-2.columns.tab{ name: "settings" }
%a=t('.tabs.settings')
// the api_keys partial is the only content for now, so we have to hide the whole tab for now
// if there is new content, we will need to handle this inside the developer_settings partial
- if @user.show_api_key_view
.small.12.medium-3.columns.tab{ name: "developer_settings" }
%a=t('.tabs.developer_settings')
.small-12.columns.tab-view
= render partial: "shared/footer"

View File

@@ -0,0 +1,21 @@
import { Controller } from "stimulus";
export default class extends Controller {
static targets = ["reportType", "checkbox", "label"]
handleSelectChange() {
this.reportTypeTarget.value == "csv" ? this.disableField() : this.enableField()
}
disableField() {
this.checkboxTarget.checked = false;
this.checkboxTarget.disabled = true;
this.labelTarget.classList.add("disabled");
}
enableField() {
this.checkboxTarget.checked = true;
this.checkboxTarget.disabled = false;
this.labelTarget.classList.remove("disabled");
}
}

View File

@@ -11,36 +11,36 @@ export default class extends Controller {
// private
populateSelect(sourceId) {
this.removeCurrentOptions()
this.populateNewOptions(sourceId)
this.removeCurrentOptions();
this.populateNewOptions(sourceId);
}
removeCurrentOptions() {
this.selectTarget.innerHTML = ""
this.selectTarget.innerHTML = "";
this.selectTarget.tomselect?.clear()
this.selectTarget.tomselect?.clearOptions()
this.selectTarget.tomselect?.clear();
this.selectTarget.tomselect?.clearOptions();
}
populateNewOptions(sourceId) {
const options = this.dependantOptionsFor(sourceId)
const options = this.dependantOptionsFor(sourceId);
options.forEach((item) => {
this.addOption(item[0], item[1])
this.addOption(item[0], item[1]);
});
this.selectTarget.tomselect?.sync()
this.selectTarget.tomselect?.addItem(options[0]?.[1])
this.selectTarget.tomselect?.sync();
this.selectTarget.tomselect?.addItem(options[0]?.[1]);
}
addOption(label, value) {
const newOption = document.createElement("option")
newOption.innerHTML = label
newOption.value = value
this.selectTarget.appendChild(newOption)
const newOption = document.createElement("option");
newOption.innerHTML = label;
newOption.value = value;
this.selectTarget.appendChild(newOption);
}
dependantOptionsFor(sourceId) {
return this.optionsValue.find((option) => option[0] === sourceId)[1]
return this.optionsValue.find((option) => option[0] === sourceId)[1];
}
}

View File

@@ -3,7 +3,7 @@
// or:
// div{data: {controller: "example"}}
import { Controller } from "stimulus"
import { Controller } from "stimulus";
export default class extends Controller {
// connect() is a built-in lifecycle callback for Stimulus Controllers. It fires when the
@@ -11,7 +11,7 @@ export default class extends Controller {
// injected into the DOM. This means initialization is not tied to the page load event, but
// will also happen dynamically if and when new DOM elements are added or removed.
connect() {
console.log("We're connected!")
console.log("We're connected!");
}
}

View File

@@ -1,20 +1,20 @@
import { Controller } from "stimulus"
import { Controller } from "stimulus";
document.addEventListener('turbolinks:before-cache', () =>
document.getElementById('flash').remove()
)
document.addEventListener("turbolinks:before-cache", () =>
document.getElementById("flash").remove()
);
export default class extends Controller {
connect() {
setTimeout(this.fadeout.bind(this), 3000)
setTimeout(this.fadeout.bind(this), 3000);
}
fadeout() {
this.element.classList.add("animate-hide-500")
setTimeout(this.close.bind(this), 500)
this.element.classList.add("animate-hide-500");
setTimeout(this.close.bind(this), 500);
}
close() {
this.element.remove()
this.element.remove();
}
}

View File

@@ -1,22 +1,24 @@
import { Controller } from "stimulus"
import { Controller } from "stimulus";
export default class extends Controller {
static targets = ["checkout", "guest"];
static values = {
distributor: String,
session: { type: String, default: "guest-checkout" }
session: { type: String, default: "guest-checkout" },
};
connect() {
if(!this.hasGuestTarget) { return }
if (!this.hasGuestTarget) {
return;
}
if(this.usingGuestCheckout()) {
if (this.usingGuestCheckout()) {
this.showCheckout();
}
}
login() {
window.dispatchEvent(new Event("login:modal:open"))
window.dispatchEvent(new Event("login:modal:open"));
}
showCheckout() {
@@ -30,6 +32,6 @@ export default class extends Controller {
}
usingGuestCheckout() {
return sessionStorage.getItem(this.sessionValue) === this.distributorValue
return sessionStorage.getItem(this.sessionValue) === this.distributorValue;
}
}

View File

@@ -1,33 +1,33 @@
import { Controller } from "stimulus"
import { Controller } from "stimulus";
export default class extends Controller {
static targets = ["background", "modal"]
static targets = ["background", "modal"];
open() {
this.backgroundTarget.style.display = "block"
this.modalTarget.style.display = "block"
this.backgroundTarget.style.display = "block";
this.modalTarget.style.display = "block";
setTimeout(() => {
this.modalTarget.classList.add("in")
this.backgroundTarget.classList.add("in")
document.querySelector("body").classList.add("modal-open")
})
this.modalTarget.classList.add("in");
this.backgroundTarget.classList.add("in");
document.querySelector("body").classList.add("modal-open");
});
}
close() {
this.modalTarget.classList.remove("in")
this.backgroundTarget.classList.remove("in")
document.querySelector("body").classList.remove("modal-open")
this.modalTarget.classList.remove("in");
this.backgroundTarget.classList.remove("in");
document.querySelector("body").classList.remove("modal-open");
setTimeout(() => {
this.backgroundTarget.style.display = "none"
this.modalTarget.style.display = "none"
}, 200)
this.backgroundTarget.style.display = "none";
this.modalTarget.style.display = "none";
}, 200);
}
closeIfEscapeKey(e) {
if (e.code == "Escape") {
this.close()
this.close();
}
}
}

View File

@@ -1,11 +1,15 @@
import { Controller } from "stimulus"
import { Controller } from "stimulus";
export default class extends Controller {
static values = { target: String }
static values = { target: String };
open() {
let helpModal = document.getElementById(this.targetValue)
let helpModalController = this.application.getControllerForElementAndIdentifier(helpModal, "help-modal");
let helpModal = document.getElementById(this.targetValue);
let helpModalController =
this.application.getControllerForElementAndIdentifier(
helpModal,
"help-modal"
);
helpModalController.open();
}
}

View File

@@ -1,61 +1,70 @@
import { Controller } from "stimulus"
import CableReady from "cable_ready"
import { Controller } from "stimulus";
import CableReady from "cable_ready";
export default class extends Controller {
static targets = ["background", "modal", "email"]
static values = { email: String }
static targets = ["background", "modal", "email"];
static values = { email: String };
connect() {
if(this.hasModalTarget) {
window.addEventListener("login:modal:open", this.open)
if (this.hasModalTarget) {
window.addEventListener("login:modal:open", this.open);
if(location.hash.substr(1).includes("/login")) {
this.open()
if (location.hash.substr(1).includes("/login")) {
this.open();
}
}
}
call(event) {
event.preventDefault()
window.dispatchEvent(new Event("login:modal:open"))
event.preventDefault();
window.dispatchEvent(new Event("login:modal:open"));
}
emailOnInput(event) {
this.emailValue = event.currentTarget.value
this.emailValue = event.currentTarget.value;
this.emailTargets.forEach((element) => {
element.value = this.emailValue
})
element.value = this.emailValue;
});
}
open = () => {
if(!location.hash.substr(1).includes("/login")) {
history.pushState({}, "", "#/login")
if (!location.hash.substr(1).includes("/login")) {
history.pushState({}, "", "#/login");
}
this.backgroundTarget.style.display = "block"
this.modalTarget.style.display = "block"
this.backgroundTarget.style.display = "block";
this.modalTarget.style.display = "block";
setTimeout(() => {
this.modalTarget.classList.add("in")
this.backgroundTarget.classList.add("in")
document.querySelector("body").classList.add("modal-open")
})
this.modalTarget.classList.add("in");
this.backgroundTarget.classList.add("in");
document.querySelector("body").classList.add("modal-open");
});
window._paq?.push(['trackEvent', 'Signin/Signup', 'Login Modal View', window.location.href])
}
window._paq?.push([
"trackEvent",
"Signin/Signup",
"Login Modal View",
window.location.href,
]);
};
close() {
history.pushState({}, "", window.location.pathname + window.location.search)
history.pushState(
{},
"",
window.location.pathname + window.location.search
);
this.modalTarget.classList.remove("in")
this.backgroundTarget.classList.remove("in")
this.modalTarget.classList.remove("in");
this.backgroundTarget.classList.remove("in");
document.querySelector("body").classList.remove("modal-open")
document.querySelector("body").classList.remove("modal-open");
setTimeout(() => {
this.backgroundTarget.style.display = "none"
this.modalTarget.style.display = "none"
}, 200)
this.backgroundTarget.style.display = "none";
this.modalTarget.style.display = "none";
}, 200);
}
resend_confirmation(event) {
@@ -63,19 +72,21 @@ export default class extends Controller {
method: "POST",
body: JSON.stringify({
spree_user: { email: this.emailValue },
tab: event.currentTarget.dataset.tab
tab: event.currentTarget.dataset.tab,
}),
headers: { "Content-type": "application/json; charset=UTF-8" }
}).then(data => data.json()).then(CableReady.perform)
headers: { "Content-type": "application/json; charset=UTF-8" },
})
.then((data) => data.json())
.then(CableReady.perform);
}
returnHome() {
window.location = "/"
window.location = "/";
}
disconnect() {
if(this.hasModalTarget) {
window.removeEventListener("login:modal:open", this.open)
if (this.hasModalTarget) {
window.removeEventListener("login:modal:open", this.open);
}
}
}

View File

@@ -27,7 +27,7 @@ export default class extends Controller {
Array.from(
document.getElementsByClassName("paymentmethod-container")
).forEach((container) => {
const enabled = container.id === paymentMethodContainerId
const enabled = container.id === paymentMethodContainerId;
if (enabled) {
container.style.display = "block";

View File

@@ -0,0 +1,52 @@
import { Controller } from "stimulus";
export default class extends Controller {
static values = { initialPermalink: String, url: String };
static targets = ["spinner", "permalinkField", "available", "unavailable"];
initialize() {
this.validate = _.debounce(this.validate, 300);
}
async validate() {
this.hideAvailability();
this.showSpinner();
const response = await fetch(
this.urlValue + `?permalink="${this.permalinkFieldTarget.value}"`
);
const result = await response.text();
if (this.initialPermalinkValue == result) {
this.permalinkFieldTarget.value = result;
this.hideSpinner();
return;
}
this.displayAvailability(response);
this.hideSpinner();
this.permalinkFieldTarget.value = result;
}
displayAvailability(response) {
if (response.ok) {
this.availableTarget.classList.remove("hidden");
} else {
this.unavailableTarget.classList.remove("hidden");
}
}
hideAvailability() {
this.availableTarget.classList.add("hidden");
this.unavailableTarget.classList.add("hidden");
}
showSpinner() {
this.spinnerTarget.classList.remove("hidden");
}
hideSpinner() {
this.spinnerTarget.classList.add("hidden");
}
}

View File

@@ -0,0 +1,30 @@
import { Controller } from "stimulus";
import CableReady from "cable_ready";
export default class extends Controller {
static values = { primaryProducer: String, enterpriseSells: String };
primaryProducerChanged(event) {
this.primaryProducerValue = event.currentTarget.checked;
this.makeRequest();
}
enterpriseSellsChanged(event) {
if (event.currentTarget.checked) {
this.enterpriseSellsValue = event.currentTarget.value;
this.makeRequest();
}
}
makeRequest() {
fetch(
`?stimulus=true&enterprise_sells=${this.enterpriseSellsValue}&is_primary_producer=${this.primaryProducerValue}`,
{
method: "GET",
headers: { "Content-type": "application/json; charset=UTF-8" },
}
)
.then((data) => data.json())
.then(CableReady.perform);
}
}

View File

@@ -2,16 +2,15 @@ import { Controller } from "stimulus";
export default class extends Controller {
static targets = ["chevron"];
static values = { selector: String }
static values = { selector: String };
toggle(event) {
if (this.hasChevronTarget) {
this.chevronTarget.classList.toggle("icon-chevron-down")
this.chevronTarget.classList.toggle("icon-chevron-up")
this.chevronTarget.classList.toggle("icon-chevron-down");
this.chevronTarget.classList.toggle("icon-chevron-up");
}
const element = document.querySelector(this.selectorValue)
element.style.display = element.style.display === "none" ? "block" : "none"
const element = document.querySelector(this.selectorValue);
element.style.display = element.style.display === "none" ? "block" : "none";
}
}

View File

@@ -6,7 +6,7 @@ export default class extends Controller {
static targets = ["stripeelements", "select"];
connect() {
this.initSelectedCard()
this.initSelectedCard();
}
initSelectedCard() {

View File

@@ -1,16 +1,24 @@
import { Controller } from "stimulus"
import { Controller } from "stimulus";
export default class extends Controller {
static targets = [ "cardElement", "cardErrors", "expMonth", "expYear", "brand", "last4", "pmId" ];
static targets = [
"cardElement",
"cardErrors",
"expMonth",
"expYear",
"brand",
"last4",
"pmId",
];
static styles = {
base: {
fontFamily: "Roboto, Arial, sans-serif",
fontSize: "16px",
color: "#5c5c5c",
"::placeholder": {
color: "#6c6c6c"
}
}
color: "#6c6c6c",
},
},
};
initialize() {
@@ -19,10 +27,12 @@ export default class extends Controller {
// Initialize Stripe JS
this.stripe = Stripe(this.data.get("key"));
this.stripeElement = this.stripe.elements({ locale: I18n.base_locale }).create("card", {
style: this.constructor.styles,
hidePostalCode: true
});
this.stripeElement = this.stripe
.elements({ locale: I18n.base_locale })
.create("card", {
style: this.constructor.styles,
hidePostalCode: true,
});
// Mount Stripe Elements JS to the form field
this.stripeElement.mount(this.cardElementTarget);
@@ -41,26 +51,42 @@ export default class extends Controller {
// Before the form is submitted we send the card details directly to Stripe (via StripeJS),
// and receive a token which represents the card object, and add that token into the form.
stripeSubmit = (event) => {
if(!this.stripeSelected() || !this.catchFormSubmit) { return }
if (!this.stripeSelected() || !this.catchFormSubmit) {
return;
}
event.preventDefault();
event.stopPropagation();
this.stripe.createPaymentMethod({type: "card", card: this.stripeElement}).then(response => {
if (response.error) {
this.updateErrors(response);
} else {
this.pmIdTarget.setAttribute("value", response.paymentMethod.id);
this.expMonthTarget.setAttribute("value", response.paymentMethod.card.exp_month);
this.expYearTarget.setAttribute("value", response.paymentMethod.card.exp_year);
this.brandTarget.setAttribute("value", response.paymentMethod.card.brand);
this.last4Target.setAttribute("value", response.paymentMethod.card.last4);
this.catchFormSubmit = false;
event.submitter.click();
}
});
}
this.stripe
.createPaymentMethod({ type: "card", card: this.stripeElement })
.then((response) => {
if (response.error) {
this.updateErrors(response);
} else {
this.pmIdTarget.setAttribute("value", response.paymentMethod.id);
this.expMonthTarget.setAttribute(
"value",
response.paymentMethod.card.exp_month
);
this.expYearTarget.setAttribute(
"value",
response.paymentMethod.card.exp_year
);
this.brandTarget.setAttribute(
"value",
response.paymentMethod.card.brand
);
this.last4Target.setAttribute(
"value",
response.paymentMethod.card.last4
);
this.catchFormSubmit = false;
event.submitter.click();
}
});
};
// Update validation messages from Stripe shown in the form
updateErrors = (data) => {
@@ -69,10 +95,10 @@ export default class extends Controller {
} else {
this.cardErrorsTarget.textContent = "";
}
}
};
// Boolean; true if Stripe is shown / currently selected
stripeSelected() {
return !!this.cardElementTarget.offsetParent
return !!this.cardElementTarget.offsetParent;
}
}

View File

@@ -0,0 +1,40 @@
import { Controller } from "stimulus";
export default class extends Controller {
static targets = ["tab", "panel", "default"];
static values = { className: String };
connect() {
// hide all active panel
this.panelTargets.forEach((panel) => {
panel.style.display = "none";
});
// only display the default panel
this.defaultTarget.style.display = "block";
}
changeActivePanel(event) {
const newActivePanel = this.panelTargets.find(
(panel) => panel.id == `${event.currentTarget.id}_panel`
);
this.currentActivePanel.style.display = "none";
newActivePanel.style.display = "block";
}
changeActiveTab(event) {
this.currentActiveTab.classList.remove(`${this.classNameValue}`);
event.currentTarget.classList.add(`${this.classNameValue}`);
}
get currentActiveTab() {
return this.tabTargets.find((tab) => tab.classList.contains("selected"));
}
get currentActivePanel() {
return this.panelTargets.find(
(panel) => panel.id == `${this.currentActiveTab.id}_panel`
);
}
}

View File

@@ -1,36 +1,36 @@
import { Controller } from "stimulus";
export default class extends Controller {
static targets = ["tab", "content"]
static targets = ["tab", "content"];
select(event) {
this.setCurrentTab(this.tabTargets.indexOf(event.currentTarget))
this.setCurrentTab(this.tabTargets.indexOf(event.currentTarget));
}
// private
connect() {
this.setCurrentTab()
this.setCurrentTab();
}
setCurrentTab(tabIndex = 0) {
this.showSelectedContent(tabIndex)
this.setButtonActiveClass(tabIndex)
this.showSelectedContent(tabIndex);
this.setButtonActiveClass(tabIndex);
}
showSelectedContent(tabIndex) {
this.contentTargets.forEach((element, index) => {
element.hidden = index !== tabIndex
})
element.hidden = index !== tabIndex;
});
}
setButtonActiveClass(tabIndex) {
this.tabTargets.forEach((element, index) => {
if(index === tabIndex) {
element.classList.add("active")
if (index === tabIndex) {
element.classList.add("active");
} else {
element.classList.remove("active")
element.classList.remove("active");
}
})
});
}
}

View File

@@ -8,6 +8,9 @@ export default class extends Controller {
maxOptions: null,
plugins: ["dropdown_input"],
allowEmptyOption: true,
onItemAdd: function () {
this.setTextboxValue("");
},
};
connect(options = {}) {

View File

@@ -0,0 +1,49 @@
import { Controller } from "stimulus";
import { computePosition, offset, arrow } from "@floating-ui/dom";
export default class extends Controller {
static targets = ["element", "tooltip", "arrow"];
static values = {
placement: {
type: String,
default: "top",
},
};
update() {
computePosition(this.elementTarget, this.tooltipTarget, {
placement: this.placementValue,
middleware: [offset(6), arrow({ element: this.arrowTarget })],
}).then(({ x, y, placement, middlewareData }) => {
Object.assign(this.tooltipTarget.style, {
left: `${x}px`,
top: `${y}px`,
});
const { x: arrowX, y: arrowY } = middlewareData.arrow;
const staticSide = {
top: "bottom",
right: "left",
bottom: "top",
left: "right",
}[placement.split("-")[0]];
Object.assign(this.arrowTarget.style, {
left: arrowX != null ? `${arrowX}px` : "",
top: arrowY != null ? `${arrowY}px` : "",
right: "",
bottom: "",
[staticSide]: "-4px",
});
});
}
showTooltip() {
this.tooltipTarget.style.display = "block";
this.update();
}
hideTooltip() {
this.tooltipTarget.style.display = "";
}
}

View File

@@ -2,3 +2,31 @@
max-width: 240px;
white-space: normal;
}
.tooltip {
display: none;
position: absolute;
top: 0;
left: 0;
font-size: 13px;
pointer-events: none;
background-color: #5498da;
padding: 5px 15px;
border-radius: 3px;
color: #fff;
max-width: 240px;
white-space: normal;
}
.arrow {
background-color: #5498da;
position: absolute;
width: 8px;
height: 8px;
transform: rotate(45deg);
}
.tooltip-container {
position: relative;
width: 240px;
}

View File

@@ -1,6 +1,6 @@
import { Application } from "stimulus"
import { definitionsFromContext } from "stimulus/webpack-helpers"
import { Application } from "stimulus";
import { definitionsFromContext } from "stimulus/webpack-helpers";
const application = Application.start()
const context = require.context("controllers", true, /.js$/)
application.load(definitionsFromContext(context))
const application = Application.start();
const context = require.context("controllers", true, /.js$/);
application.load(definitionsFromContext(context));

View File

@@ -1,27 +1,24 @@
/* eslint no-console:0 */
// StimulusJS
import { Application } from "stimulus"
import { definitionsFromContext } from "stimulus/webpack-helpers"
import { Application } from "stimulus";
import { definitionsFromContext } from "stimulus/webpack-helpers";
const application = Application.start()
const context = require.context("controllers", true, /.js$/)
application.load(definitionsFromContext(context))
const application = Application.start();
const context = require.context("controllers", true, /.js$/);
application.load(definitionsFromContext(context));
import CableReady from "cable_ready"
import mrujs from "mrujs"
import { CableCar } from "mrujs/plugins"
import * as Turbo from "@hotwired/turbo"
import CableReady from "cable_ready";
import mrujs from "mrujs";
import { CableCar } from "mrujs/plugins";
import * as Turbo from "@hotwired/turbo";
window.Turbo = Turbo
window.CableReady = CableReady
window.Turbo = Turbo;
window.CableReady = CableReady;
mrujs.start({
plugins: [
new CableCar(CableReady)
]
})
require.context('../fonts', true)
const images = require.context('../images', true)
const imagePath = (name) => images(name, true)
plugins: [new CableCar(CableReady)],
});
require.context("../fonts", true);
const images = require.context("../images", true);
const imagePath = (name) => images(name, true);

View File

@@ -32,6 +32,8 @@ if defined?(Bundler)
# Bundler.require(:default, :assets, Rails.env)
end
require "view_component/storybook" if Rails.env.development?
module Openfoodnetwork
class Application < Rails::Application
config.middleware.insert_before(
@@ -243,5 +245,7 @@ module Openfoodnetwork
config.active_storage.service = ENV["S3_BUCKET"].present? ? :amazon : :local
config.active_storage.content_types_to_serve_as_binary -= ["image/svg+xml"]
config.active_storage.variable_content_types += ["image/svg+xml"]
config.exceptions_app = self.routes
end
end

View File

@@ -852,6 +852,7 @@ ar:
sells_tip: "لا شيء - لا تبيع المؤسسات للعملاء مباشرة. <br /> الخاصة - تبيع المؤسسات المنتجات الخاصة بها للعملاء. <br /> أي - يمكن للمؤسسات بيع منتجات المؤسسات الخاصة أو غيرها. <br />"
visible_in_search: مرئي في البحث؟
visible: عام
permalink:
permalink: الرابط الثابت (بدون مسافات)
permalink_tip: "يستخدم الرابط الثابت لإنشاء رابط إلى متجرك: %{link}your-shop-name / shop"
link_to_front: رابط إلى واجهة المتجر
@@ -4036,6 +4037,8 @@ ar:
connection_failed: "تعذر الاتصال بـ PayPal."
generic_error: "فشل PayPal. %{reasons}"
users:
api_keys:
regenerate_key: "انشاء مفتاح"
form:
account_settings: إعدادت الحساب
show:

View File

@@ -61,11 +61,6 @@ ca:
using_producer_stock_settings_but_count_on_hand_set: "ha d'estar en blanc perquè s'utilitza la configuració d'estoc de la productora"
on_demand_but_count_on_hand_set: "ha d'estar en blanc si és sota demanda"
limited_stock_but_no_count_on_hand: "cal especificar-se perquè força existències limitades"
errors:
messages:
file_size_out_of_range: "la mida %{file_size} no és entre el rang necessari"
limit_out_of_range: "el total està fora del marge"
image_metadata_missing: "no és una imatge vàlida"
stripe:
error_code:
incorrect_number: "El número de la targeta és incorrecte."
@@ -819,6 +814,7 @@ ca:
sells_tip: "Cap: l'organització no ven als clients directament. <br /> Propietari: l'organització ven productes propis als clients. <br /> Qualsevol: l'organització pot vendre productes propis o d'altres empreses. <br />"
visible_in_search: Visible a la cerca?
visible: Públic
permalink:
permalink: Permalink (sense espais)
permalink_tip: "Aquest enllaç permanent s'utilitza per crear l'url a la vostra botiga: %{link} el-nom-de-la-vostra-botiga /botiga"
link_to_front: Enllaç a la botiga
@@ -3843,6 +3839,8 @@ ca:
connection_failed: "No s'ha pogut connectar a PayPal."
generic_error: "PayPal ha fallat. %{reasons}"
users:
api_keys:
regenerate_key: "Regenerar la clau"
form:
account_settings: Configuració del compte
show:

View File

@@ -61,27 +61,6 @@ cy:
using_producer_stock_settings_but_count_on_hand_set: "rhaid bod yn wag oherwydd defnydd o osodiadau stoc cynhyrchwyr"
on_demand_but_count_on_hand_set: "rhaid iddo fod yn wag os ar alw"
limited_stock_but_no_count_on_hand: "rhaid nodi hyn oherwydd gorfodi stoc gyfyngedig"
errors:
messages:
content_type_invalid: "math o gynnwys annilys"
file_size_out_of_range: "nid yw'r maint %{file_size} rhwng yr ystod ofynnol"
limit_out_of_range: "mae'r cyfanswm rhif tu hwnt i'r ystod"
image_metadata_missing: "nid yw'n llun dilys"
dimension_min_inclusion: "mae'n gorfod bod yn fwy neu'r un faint â %{width} x %{height} picsel."
dimension_max_inclusion: "mae'n gorfod bod yn llai neu'r un faint â %{width} x %{height} picsel."
dimension_width_inclusion: "nid yw lled yn cael ei gynnwys rhwng %{min} ac %{max} picsel."
dimension_height_inclusion: "nid yw uchder yn cael ei gynnwys rhwng %{min} acd %{max} picsel."
dimension_width_greater_than_or_equal_to: "mae'r lled yn gorfod bod yn fwy neu'r un faint â %{length} picsel."
dimension_height_greater_than_or_equal_to: "mae'r uchder yn gorfod bod yn fwy neu'r un faint â %{length} picsel."
dimension_width_less_than_or_equal_to: "mae'r lled yn gorfod bod yn llai neu'r un faint â %{length} picsel."
dimension_height_less_than_or_equal_to: "mae'r uchder yn gorfod bod yn llai neu'r un faint â %{length} picsel."
dimension_width_equal_to: "mae'r lled yn gorfod bod yr un faint â %{length} picsel."
dimension_height_equal_to: "mae'r uchder yn gorfod bod yr un faint â %{length} picsel."
aspect_ratio_not_square: "mae'n gorfod bod yn llun sgwâr"
aspect_ratio_not_portrait: "mae'n gorfod bod yn llun siâp portread"
aspect_ratio_not_landscape: "mae'n gorfod bod yn llun siâp tirlun"
aspect_ratio_is_not: "mae'n rhaid cael cymhareb agwedd o %{aspect_ratio}"
aspect_ratio_unknown: "yn meddu ar gymhareb agwedd anhysbys"
stripe:
error_code:
incorrect_number: "Mae rhif y cerdyn yn anghywir"
@@ -886,6 +865,7 @@ cy:
visible: Cyhoeddus
not_visible: Cudd
hidden: Cuddio pob cyfeirnod
permalink:
permalink: Permaddolen (dim bylchau)
permalink_tip: "Defnyddir y permaddolen hon i greu'r url ar gyfer eich siop: %{link}enw-eich-siop / siop"
link_to_front: Dolen i ffrynt y siop
@@ -1837,13 +1817,13 @@ cy:
email_signoff: "Hwyl,"
email_signature: "Tîm %{sitename} "
email_confirm_customer_greeting: "Helo %{name},"
email_confirm_customer_intro_html: "Diolch am siopa yn <strong>%{distributor}</strong> !"
email_confirm_customer_number_html: "Cadarnhad o archeb <strong># %{number}</strong>"
email_confirm_customer_details_html: "Dyma fanylion eich archeb o <strong>%{distributor}</strong> :"
email_confirm_customer_intro_html: "Diolch am siopa gyda ni <strong>%{distributor}</strong> !"
email_confirm_customer_number_html: "Cadarnhad archeb <strong># %{number}</strong>"
email_confirm_customer_details_html: "Dyma fanylion eich archeb gan<strong>%{distributor}</strong> :"
email_confirm_customer_signoff: "Cofion cynnes,"
email_confirm_shop_greeting: "Helo %{name},"
email_confirm_shop_order_html: "Da iawn! Mae gennych archeb newydd ar gyfer <strong>%{distributor}</strong> !"
email_confirm_shop_number_html: "Cadarnhad o archeb <strong># %{number}</strong>"
email_confirm_shop_number_html: "Cadarnhad archeb <strong># %{number}</strong>"
email_order_summary_item: "Eitem"
email_order_summary_quantity: "NIfer"
email_order_summary_sku: "Cod y Cynnyrch"
@@ -2079,7 +2059,7 @@ cy:
orders_oc_expired_text_link: "neu gweler y cylchoedd archebu eraill sydd ar gael yn yr hwb yma"
orders_oc_expired_email: "E-bost:"
orders_oc_expired_phone: "Ffôn:"
orders_show_title: "Cadarnhau Archeb"
orders_show_title: "Cadarnhad Archeb"
orders_show_time: "Archeb yn barod ar"
orders_show_order_number: "Archeb # %{number}"
orders_show_cancelled: "Canslwyd"
@@ -4064,6 +4044,8 @@ cy:
connection_failed: "Methu cysylltu â PayPal."
generic_error: "PayPal wedi methu %{reasons}"
users:
api_keys:
regenerate_key: "Allwedd Adfer"
form:
account_settings: Gosodiadau Cyfrif
show:

View File

@@ -61,27 +61,6 @@ de_CH:
using_producer_stock_settings_but_count_on_hand_set: "muss leer sein, da die Einstellungen des Produzentenbestands verwendet werden"
on_demand_but_count_on_hand_set: "muss leer sein, wenn unbegrenzt verfügbar oder die Produktion auf Bestellung erfolgt"
limited_stock_but_no_count_on_hand: "muss angegeben werden, da nur begrenzte Lagerbestände verfügbar sind"
errors:
messages:
content_type_invalid: "hat ein ungültiges Datenformat"
file_size_out_of_range: "Dateigrösse %{file_size} liegt ausserhalb des zulässigen Bereichs"
limit_out_of_range: "Gesamtzahl liegt ausserhalb des zulässigen Bereichs"
image_metadata_missing: "ist kein gültiges Bild"
dimension_min_inclusion: "muss grösser oder gleich %{width} x %{height} Pixel sein"
dimension_max_inclusion: "muss kleiner oder gleich %{width} x %{height} Pixel sein"
dimension_width_inclusion: "Breite liegt nicht zwischen %{min} und %{max} Pixel"
dimension_height_inclusion: "Höhe liegt nicht zwischen %{min} und %{max} Pixel"
dimension_width_greater_than_or_equal_to: "Breite muss grösser oder gleich %{length} Pixel sein"
dimension_height_greater_than_or_equal_to: "Höhe muss grösser oder gleich %{length} Pixel sein"
dimension_width_less_than_or_equal_to: "Breite muss kleiner oder gleich %{length} Pixel sein"
dimension_height_less_than_or_equal_to: "Höhe muss kleiner oder gleich %{length} Pixel sein"
dimension_width_equal_to: "Breite muss %{length} Pixel sein"
dimension_height_equal_to: "Höhe muss %{length} Pixel sein"
aspect_ratio_not_square: "muss ein quadratisches Bild sein"
aspect_ratio_not_portrait: "muss ein Bild im Hochformat sein"
aspect_ratio_not_landscape: "muss ein Bild im Querformat sein"
aspect_ratio_is_not: "muss ein Seitenverhältnis von %{aspect_ratio} haben"
aspect_ratio_unknown: "hat ein unbekanntes Seitenverhältnis"
stripe:
error_code:
incorrect_number: "Die Kreditkartennummer ist fehlerhaft."
@@ -879,6 +858,7 @@ de_CH:
visible: öffentlich sichtbar
not_visible: versteckt aber referenziert
hidden: vollständig versteckt
permalink:
permalink: Permalink (keine Leerzeichen)
permalink_tip: "Dieser Permalink wird verwendet, um die URL zu Ihrem Laden zu erstellen: %{link}name-ihres-ladens/shop"
link_to_front: Link zum Laden
@@ -4004,6 +3984,8 @@ de_CH:
connection_failed: "Es konnte keine Verbindung zu PayPal hergestellt werden."
generic_error: "PayPal ist fehlgeschlagen. %{reasons}"
users:
api_keys:
regenerate_key: "Schlüssel neu generieren"
form:
account_settings: E-Mail-Adresse und Passwort ändern
show:

View File

@@ -61,27 +61,6 @@ de_DE:
using_producer_stock_settings_but_count_on_hand_set: "muss leer sein, da die Einstellungen des Produzentenbestands verwendet werden"
on_demand_but_count_on_hand_set: "muss leer sein, wenn unbegrenzt verfügbar oder die Produktion auf Bestellung erfolgt"
limited_stock_but_no_count_on_hand: "muss angegeben werden, da nur begrenzte Lagerbestände verfügbar sind"
errors:
messages:
content_type_invalid: "hat ein ungültiges Datenformat"
file_size_out_of_range: "Dateigröße %{file_size} liegt außerhalb des zulässigen Bereichs"
limit_out_of_range: "Gesamtzahl liegt außerhalb des zulässigen Bereichs"
image_metadata_missing: "ist kein gültiges Bild"
dimension_min_inclusion: "muss größer oder gleich %{width} x %{height} Pixel sein"
dimension_max_inclusion: "muss kleiner oder gleich %{width} x %{height} Pixel sein"
dimension_width_inclusion: "Breite liegt nicht zwischen %{min} und %{max} Pixel"
dimension_height_inclusion: "Höhe liegt nicht zwischen %{min} und %{max} Pixel"
dimension_width_greater_than_or_equal_to: "Breite muss größer oder gleich %{length} Pixel sein"
dimension_height_greater_than_or_equal_to: "Höhe muss größer oder gleich %{length} Pixel sein"
dimension_width_less_than_or_equal_to: "Breite muss kleiner oder gleich %{length} Pixel sein"
dimension_height_less_than_or_equal_to: "Höhe muss kleiner oder gleich %{length} Pixel sein"
dimension_width_equal_to: "Breite muss %{length} Pixel sein"
dimension_height_equal_to: "Höhe muss %{length} Pixel sein"
aspect_ratio_not_square: "muss ein quadratisches Bild sein"
aspect_ratio_not_portrait: "muss ein Bild im Hochformat sein"
aspect_ratio_not_landscape: "muss ein Bild im Querformat sein"
aspect_ratio_is_not: "muss ein Seitenverhältnis von %{aspect_ratio} haben"
aspect_ratio_unknown: "hat ein unbekanntes Seitenverhältnis"
stripe:
error_code:
incorrect_number: "Die Kreditkartennummer ist fehlerhaft."
@@ -162,6 +141,7 @@ de_DE:
cardholder_name: "Kreditkarteninhaber"
community_forum_url: "URL des Community-Forums"
customer_instructions: "Informationen für Kunden"
additional_information: "Anmerkung"
devise:
passwords:
spree_user:
@@ -553,6 +533,8 @@ de_DE:
guest_label: "Gasteinkauf"
credit_owed: "Geschuldetes Guthaben"
balance_due: "Offener Betrag"
destroy:
has_associated_subscriptions: "Löschen fehlgeschlagen: Dieser Kunde hat aktive Abonnements. Bitte kündigen Sie diese zuerst."
contents:
edit:
title: Inhalt
@@ -889,6 +871,7 @@ de_DE:
visible: öffentlich sichtbar
not_visible: versteckt aber referenziert
hidden: vollständig versteckt
permalink:
permalink: Permalink (keine Leerzeichen)
permalink_tip: "Dieser Permalink wird verwendet, um die URL zu Ihrem Laden zu erstellen: %{link}name-ihres-ladens/shop"
link_to_front: Link zum Laden
@@ -3478,6 +3461,7 @@ de_DE:
email: E-Mail-Adresse
account_updated: "Konto aktualisiert!"
email_updated: "Das Konto wird aktualisiert, sobald die neue E-Mail-Adresse bestätigt wurde."
show_api_key_view_toggled: "Anzeige des API-Schlüssels wurde geändert!"
my_account: "Ihr Konto"
date: "Datum"
time: "Uhrzeit"
@@ -4029,10 +4013,16 @@ de_DE:
connection_failed: "Es konnte keine Verbindung zu PayPal hergestellt werden."
generic_error: "PayPal ist fehlgeschlagen. %{reasons}"
users:
api_keys:
regenerate_key: "Schlüssel neu generieren"
title: API-Schlüssel
developer_settings:
title: Entwicklereinstellungen
form:
account_settings: E-Mail-Adresse und Passwort ändern
show:
tabs:
developer_settings: Entwicklereinstellungen
orders: Bestellungen
cards: Kreditkarten
transactions: Transaktionen
@@ -4074,7 +4064,8 @@ de_DE:
saved_cards_popover: Dies ist die Liste der Kreditkarten, die Sie für spätere Verwendung gespeichert haben. Ihr "Standard" wird automatisch beim Abschließen einer Bestellung ausgewählt und kann von allen Läden belastet werden, die Sie dazu berechtigt haben (siehe rechts).
authorised_shops:
shop_name: "Ladenname"
allow_charges?: "Abbuchungen für die Standardkreditkarte zulassen?"
allow_charges?: "Abbuchungen von der Standardkreditkarte zulassen?"
no_default_saved_cards_tooltip: Sie müssen eine Kreditkarte als Standard markieren, um automatische Abbuchungen zuzulassen.
localized_number:
invalid_format: hat ein ungültiges Format. Bitte Ziffern eingeben.
api:
@@ -4093,6 +4084,7 @@ de_DE:
shipment:
cannot_ready: "Versand nicht möglich."
invalid_taxonomy_id: "Ungültige Kategorie-ID"
toggle_api_key_view: "API-Schlüssel dem Benutzer anzeigen"
activerecord:
models:
spree/payment:
@@ -4139,3 +4131,13 @@ de_DE:
x_years:
one: "1 Jahr"
other: "%{count} Jahren"
errors:
not_found:
title: "Die gesuchte Seite existiert nicht (404). "
message_html: "<b>Bitte versuchen Sie es erneut</b><p> Dies könnte ein vorübergehendes Problem sein. Bitte klicken Sie auf die Zurück-Schaltfläche, um zum vorherigen Bildschirm zurückzukehren, oder gehen Sie zurück zur <a href='/'>Startseite</a> und versuchen Sie es erneut.</p> <b>Kontaktieren Sie den Support</b><p> Wenn das Problem weiterhin besteht oder dringend ist, teilen Sie uns dies bitte mit. Unsere Kontaktdaten finden Sie auf der <a href='https://openfoodnetwork.org/ofn-local/' target='blank'>lokalen Seite des globalen Open Food Network</a> .</p><p> Es hilft uns sehr, wenn Sie so detailliert wie möglich angeben können, worum es auf der fehlenden Seite geht.</p>"
internal_server_error:
title: "Es tut uns leid, aber etwas ist schief gelaufen (500). "
message_html: "<b>Bitte versuchen Sie es erneut</b><p> Dies könnte ein vorübergehendes Problem sein. Bitte klicken Sie auf die Zurück-Schaltfläche, um zum vorherigen Bildschirm zurückzukehren, oder gehen Sie zurück zur <a href='/''>Startseite</a> und versuchen Sie es erneut.</p> <b>Wir kümmern uns</b><p> Wenn Sie dieses Problem schon einmal gesehen haben, kennen wir es wahrscheinlich bereits und arbeiten an einer Lösung. Wir erfassen alle auftretenden Fehler.</p> <b>Kontaktieren Sie den Support</b><p> Wenn das Problem weiterhin besteht oder dringend ist, teilen Sie uns dies bitte mit. Unsere Kontaktdaten finden Sie auf der <a href='https://openfoodnetwork.org/ofn-local/' target='blank'>lokalen Seite des globalen Open Food Network</a> .</p><p> Es hilft uns sehr, wenn Sie so detailliert wie möglich angeben, was Sie getan haben, als dieser Fehler auftrat.</p>"
unprocessable_entity:
title: "Die gewünschte Änderung wurde abgelehnt (422). "
message_html: "<p>Die gewünschte Änderung wurde abgelehnt. Vielleicht haben Sie versucht, etwas zu ändern, auf das Sie keinen Zugriff haben.<br><h3> <a href='/' >Zur Startseite zurückkehren</a></h3></p>"

View File

@@ -187,6 +187,7 @@ en:
cardholder_name: "Cardholder name"
community_forum_url: "Community forum URL"
customer_instructions: "Customer instructions"
additional_information: "Additional Information"
devise:
passwords:
spree_user:
@@ -949,6 +950,7 @@ en:
visible: Public
not_visible: Hidden
hidden: Hide all references
permalink:
permalink: Permalink (no spaces)
permalink_tip: "This permalink is used to create the url to your shop: %{link}your-shop-name/shop"
link_to_front: Link to shop front
@@ -1288,6 +1290,9 @@ en:
pack_by_customer: Pack By Customer
pack_by_supplier: Pack By Supplier
pack_by_product: Pack By Product
revenues_by_hub:
name: Revenues By Hub
description: Revenues by hub
orders_and_distributors:
name: Orders And Distributors
description: Orders with distributor details
@@ -2671,6 +2676,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
report_header_hub_address: Hub Address
report_header_to_hub: To Hub
report_header_hub_code: Hub Code
report_header_hub_id: Hub ID
report_header_hub_owner_email: Hub Owner Email
report_header_code: Code
report_header_paid: Paid?
report_header_delivery: Delivery?
@@ -2703,6 +2710,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
report_header_tax_on_delivery: "Tax on Delivery (%{currency_symbol})"
report_header_tax_on_fees: "Tax on Fees (%{currency_symbol})"
report_header_total_tax: "Total Tax (%{currency_symbol})"
report_header_total_excl_tax: "Total excl. tax (%{currency_symbol})"
report_header_total_incl_tax: "Total incl. tax (%{currency_symbol})"
report_header_enterprise: Enterprise
report_header_customer: Customer
report_header_customer_code: Customer Code
@@ -3638,6 +3647,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
# TODO: remove 'account_updated' key once we get to Spree 2.0
account_updated: "Account updated!"
email_updated: "The account will be updated once the new email is confirmed."
show_api_key_view_toggled: "Show API key view has been changed!"
my_account: "My account"
date: "Date"
time: "Time"
@@ -4192,10 +4202,16 @@ See the %{link} to find out more about %{sitename}'s features and to start using
connection_failed: "Could not connect to PayPal."
generic_error: "PayPal failed. %{reasons}"
users:
api_keys:
regenerate_key: "Regenerate Key"
title: API key
developer_settings:
title: Developer Settings
form:
account_settings: Account Settings
show:
tabs:
developer_settings: Developer Settings
orders: Orders
cards: Credit Cards
transactions: Transactions
@@ -4238,6 +4254,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
authorised_shops:
shop_name: "Shop Name"
allow_charges?: "Allow Charges to Default Card?"
no_default_saved_cards_tooltip: You need to mark one credit card as default to allow charges.
localized_number:
invalid_format: has an invalid format. Please enter a number.
api:
@@ -4256,6 +4273,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
shipment:
cannot_ready: "Cannot ready shipment."
invalid_taxonomy_id: "Invalid taxonomy id."
toggle_api_key_view: "Show API key view for user"
activerecord:
models:
spree/payment:
@@ -4302,3 +4320,25 @@ See the %{link} to find out more about %{sitename}'s features and to start using
x_years:
one: 1 year
other: "%{count} years"
errors:
not_found:
title: "The page you were looking for doesn't exist (404)"
message_html: "<b>Please try again</b>
<p>This might be a temporary problem. Please click the back button to return to the previous screen or go back to <a href='/'>Home</a> and try again.</p>
<b>Contact support</b>
<p>If the problem persists or is urgent, please tell us about it. Find our contact details from the global <a href='https://openfoodnetwork.org/ofn-local/' target='blank'>Open Food Network Local page</a>.</p>
<p>It really helps us if you can give as much detail as possible about what the missing page is about.</p>"
internal_server_error:
title: "We're sorry, but something went wrong (500)"
message_html: "<b>Please try again</b>
<p>This might be a temporary problem. Please click the back button to return to the previous screen or go back to <a href='/''>Home</a> and try again.</p>
<b>We're on it</b>
<p>If you have seen this problem before, we probably already know about it and are working on a fix. We record all the errors that come up.</p>
<b>Contact support</b>
<p>If the problem persists or is urgent, please tell us about it. Find our contact details from the global <a href='https://openfoodnetwork.org/ofn-local/' target='blank'>Open Food Network Local page</a>.</p>
<p>It really helps us if you can give as much detail as possible about what you were doing when this error occurred.</p>"
unprocessable_entity:
title: "The change you wanted was rejected (422)"
message_html: "<p>The change you wanted was rejected. Maybe you tried to change something you don't have access to.
<br><h3><a href='/' >Return home</a></h3>
</p>"

View File

@@ -724,6 +724,7 @@ en_AU:
sells_tip: "None - enterprise does not sell to customers directly.<br />Own - Enterprise sells own products to customers.<br />Any - Enterprise can sell own or other enterprises products.<br />"
visible_in_search: Visible in search?
visible: Public
permalink:
permalink: Permalink (no spaces)
permalink_tip: "This permalink is used to create the url to your shop: %{link}your-shop-name/shop"
link_to_front: Link to shop front
@@ -3605,6 +3606,8 @@ en_AU:
paypal:
refund_amount: "Amount"
users:
api_keys:
regenerate_key: "Regenerate Key"
form:
account_settings: Account Settings
show:

View File

@@ -677,6 +677,7 @@ en_BE:
sells_tip: "None - enterprise does not sell to customers directly.<br />Own - Enterprise sells own products to customers.<br />Any - Enterprise can sell own or other enterprises products.<br />"
visible_in_search: Visible in search?
visible: Public
permalink:
permalink: Permalink (no spaces)
permalink_tip: "This permalink is used to create the url to your shop: %{link}your-shop-name/shop"
link_to_front: Link to shop front

View File

@@ -61,27 +61,6 @@ en_CA:
using_producer_stock_settings_but_count_on_hand_set: "must be blank because you are using producer stock settings"
on_demand_but_count_on_hand_set: "must be blank if 'on demand' is used"
limited_stock_but_no_count_on_hand: "must be specified because you are forcing limited stock"
errors:
messages:
content_type_invalid: "has an invalid content type"
file_size_out_of_range: "size %{file_size} is not within required range"
limit_out_of_range: "total number is out of range"
image_metadata_missing: "is not a valid image"
dimension_min_inclusion: "must be greater than or equal to %{width} x %{height} pixels."
dimension_max_inclusion: "must be less than or equal to %{width} x %{height} pixels."
dimension_width_inclusion: "width is not between %{min} and %{max} pixels."
dimension_height_inclusion: "height is not between %{min} and %{max} pixels."
dimension_width_greater_than_or_equal_to: "width must be greater than or equal to %{length} pixels."
dimension_height_greater_than_or_equal_to: "height must be greater than or equal to %{length} pixels."
dimension_width_less_than_or_equal_to: "width must be less than or equal to %{length} pixels."
dimension_height_less_than_or_equal_to: "height must be less than or equal to %{length} pixels."
dimension_width_equal_to: "width must be equal to %{length} pixels."
dimension_height_equal_to: "height must be equal to %{length} pixels."
aspect_ratio_not_square: "must be a square image"
aspect_ratio_not_portrait: "must be a portrait image"
aspect_ratio_not_landscape: "must be a landscape image"
aspect_ratio_is_not: "must have an aspect ration of %{aspect_ratio}"
aspect_ratio_unknown: "has an unknown aspect ration"
stripe:
error_code:
incorrect_number: "The card number is incorrect."
@@ -878,6 +857,7 @@ en_CA:
visible: Public
not_visible: Hidden
hidden: Hide all references
permalink:
permalink: Permalink (no spaces)
permalink_tip: "This permalink is used to create the url to your shop: %{link}your-shop-name/shop"
link_to_front: Link to shop front
@@ -1873,7 +1853,7 @@ en_CA:
email_signup_welcome: "Welcome to %{sitename}!"
email_signup_confirmed_email: "Thanks for confirming your email."
email_signup_shop_html: "You can now log in at %{link}."
email_signup_text: "Thanks for joining the network. If you are a customer, we look forward to introducing you to many fantastic growers, artisans and makers, and wonderful hubs and marketplaces. If you are a grower, artisan or maker we are excited to have you as a part of the network."
email_signup_text: "Thanks for joining the network. If you are a customer, we look forward to introducing you to many fantastic growers, artisans and makers, and wonderful hubs and marketplaces. If you are a grower, artisan or maker please be sure to follow this link (https://openfoodnetwork.ca/register) to set up your online store - we are excited to have you as a part of the network!"
email_signup_help_html: "We welcome all your questions and feedback; you can use the <em>Send Feedback</em> button on the site or email us at %{email}"
invite_email:
greeting: "Hello!"
@@ -3994,6 +3974,8 @@ en_CA:
connection_failed: "Could not connect to PayPal."
generic_error: "PayPal failed. %{reasons}"
users:
api_keys:
regenerate_key: "Regenerate Key"
form:
account_settings: Account Settings
show:

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