mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-21 20:06:54 +00:00
Compare commits
278 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
95839f88f2 | ||
|
|
728eee6d3f | ||
|
|
7089bd597e | ||
|
|
2aade10aaf | ||
|
|
4057df5b93 | ||
|
|
8270a3f386 | ||
|
|
30a9e80024 | ||
|
|
612001fc3f | ||
|
|
2a93968370 | ||
|
|
b0a4fcdc26 | ||
|
|
04778c6fa8 | ||
|
|
8ace56956b | ||
|
|
b74c368de2 | ||
|
|
e0a20bf8af | ||
|
|
17afdb5912 | ||
|
|
d55a43d4b1 | ||
|
|
bf3da0531e | ||
|
|
3a365b6dc6 | ||
|
|
ee7dc821ca | ||
|
|
07018370e0 | ||
|
|
bba665e2e1 | ||
|
|
5e69320ff5 | ||
|
|
d0242d28d2 | ||
|
|
9dbdcc9181 | ||
|
|
7819495d57 | ||
|
|
8723520848 | ||
|
|
b76d9045ce | ||
|
|
b42d6cf2ac | ||
|
|
f78e72af0d | ||
|
|
5e021b76b5 | ||
|
|
d03a5458ff | ||
|
|
3aef0b4029 | ||
|
|
cd5a83e814 | ||
|
|
a943d2fee6 | ||
|
|
b016ebd5b4 | ||
|
|
314459df92 | ||
|
|
eb0051c033 | ||
|
|
ca9a7d255e | ||
|
|
7cb74f2452 | ||
|
|
8f42c6fbed | ||
|
|
bb233c5656 | ||
|
|
be021f4697 | ||
|
|
f47d86c15b | ||
|
|
ae391f8af4 | ||
|
|
f28c52342c | ||
|
|
d3f1d4a5f9 | ||
|
|
cedfa35a98 | ||
|
|
c11b7ed268 | ||
|
|
b992daa1d8 | ||
|
|
10aa534f52 | ||
|
|
de990b906d | ||
|
|
41ef2a4ea5 | ||
|
|
077479346e | ||
|
|
19c33e4050 | ||
|
|
1ff3d4a534 | ||
|
|
8ae6a36b33 | ||
|
|
d8687f30cd | ||
|
|
bff2ddb8db | ||
|
|
2a9db0eea4 | ||
|
|
5c41022f76 | ||
|
|
a9dec41cc1 | ||
|
|
918cbb8d92 | ||
|
|
7cc7de7a5f | ||
|
|
56d8d1eaf7 | ||
|
|
b57685e9d5 | ||
|
|
a3fa4a0d3e | ||
|
|
d86aeaa22a | ||
|
|
97f18d7b86 | ||
|
|
bded15a869 | ||
|
|
fff5927cdf | ||
|
|
f9881b9af5 | ||
|
|
79182a2d32 | ||
|
|
77eec6e6f3 | ||
|
|
a6e3f43344 | ||
|
|
f525a9f5da | ||
|
|
2427bfa6ea | ||
|
|
7eea4fdd1c | ||
|
|
dde4bd39b2 | ||
|
|
091c271237 | ||
|
|
141a2a507d | ||
|
|
36aabbb5b6 | ||
|
|
82f38c9aea | ||
|
|
689720b749 | ||
|
|
50600b9d00 | ||
|
|
232088f3a2 | ||
|
|
66b9679a7c | ||
|
|
42753d85c7 | ||
|
|
3eca13e2bc | ||
|
|
abdef21381 | ||
|
|
1fd09617cb | ||
|
|
e5eb74f077 | ||
|
|
f474947d2d | ||
|
|
d1b90193a4 | ||
|
|
53ee5c32eb | ||
|
|
79ba223e12 | ||
|
|
27552c99b8 | ||
|
|
6b56a8df0a | ||
|
|
e18a242b90 | ||
|
|
4a3bd510a7 | ||
|
|
bb85473eba | ||
|
|
d5fa5e298e | ||
|
|
dab4939819 | ||
|
|
43b29af922 | ||
|
|
2c1acc14e6 | ||
|
|
84f9da4a23 | ||
|
|
d817319aa4 | ||
|
|
093b851395 | ||
|
|
e3a150226e | ||
|
|
5122ed9af4 | ||
|
|
ac5a3beb15 | ||
|
|
19481fc55e | ||
|
|
c8cab8aae5 | ||
|
|
d7428015ac | ||
|
|
700f91efb5 | ||
|
|
43e4047447 | ||
|
|
892e843e9e | ||
|
|
85904f57b8 | ||
|
|
60a5bf682b | ||
|
|
47c07831c1 | ||
|
|
b5e23717f2 | ||
|
|
d8d99c930e | ||
|
|
ce96094f49 | ||
|
|
6c655e6fbc | ||
|
|
2d1483febb | ||
|
|
42d7383ff0 | ||
|
|
df4ddf45c4 | ||
|
|
e0b40222dd | ||
|
|
61928cbc05 | ||
|
|
c6884f96e1 | ||
|
|
f0b5a04f6b | ||
|
|
b8ffddb533 | ||
|
|
71536767b5 | ||
|
|
938056d1d8 | ||
|
|
63d2d69d08 | ||
|
|
78ec086111 | ||
|
|
bf53a02270 | ||
|
|
2aded5b459 | ||
|
|
5aa6b14756 | ||
|
|
07bd84ffbb | ||
|
|
d2794f328f | ||
|
|
8b146fc72a | ||
|
|
0c491a6651 | ||
|
|
e8529754f1 | ||
|
|
d95dc84c34 | ||
|
|
b61ee0211f | ||
|
|
c777a00874 | ||
|
|
a0a2dab44f | ||
|
|
f0aa7f44a5 | ||
|
|
a51940937a | ||
|
|
f1e401070a | ||
|
|
999b04ef99 | ||
|
|
da5e8fcb9f | ||
|
|
e22b9997fe | ||
|
|
609cbe2893 | ||
|
|
425970aba2 | ||
|
|
ace5151afa | ||
|
|
3b652581b5 | ||
|
|
17692e722a | ||
|
|
a2826b0fdf | ||
|
|
d766f6c0b2 | ||
|
|
0f715e531c | ||
|
|
fba83f847b | ||
|
|
5603745744 | ||
|
|
2b2f9c205e | ||
|
|
feff2b726b | ||
|
|
8b3d513aa2 | ||
|
|
dd17f98edb | ||
|
|
c9adcd1479 | ||
|
|
29c8b0b1a5 | ||
|
|
6404c7427c | ||
|
|
85eab5b436 | ||
|
|
912713a0c9 | ||
|
|
ca3b9f8085 | ||
|
|
ac00a20639 | ||
|
|
139c994e06 | ||
|
|
3621616f7c | ||
|
|
41ddd653a0 | ||
|
|
d8c7c0141a | ||
|
|
3fa2dd4772 | ||
|
|
cf26c465cc | ||
|
|
1bc50fd7cb | ||
|
|
719724de0b | ||
|
|
804ed81acb | ||
|
|
e980f8882c | ||
|
|
73f910e90c | ||
|
|
5135d32cd8 | ||
|
|
91d87c887b | ||
|
|
786fe55fc8 | ||
|
|
b202678a6b | ||
|
|
0e8d2d307b | ||
|
|
832b8caa8b | ||
|
|
a50b75659f | ||
|
|
df44898557 | ||
|
|
5a70985e0e | ||
|
|
4791b570e4 | ||
|
|
f087b7184c | ||
|
|
fa9c2b24f2 | ||
|
|
e3683d25ca | ||
|
|
21c0baa965 | ||
|
|
75a8d9caf0 | ||
|
|
1089a66fff | ||
|
|
1feb7b4065 | ||
|
|
e7cbcf2b51 | ||
|
|
7b7c6ec7d7 | ||
|
|
db99ecf255 | ||
|
|
87846529a2 | ||
|
|
e50f298a0a | ||
|
|
bbc54d4467 | ||
|
|
006bcd2cf8 | ||
|
|
e56c803610 | ||
|
|
5a9ff58bcf | ||
|
|
7747f2592e | ||
|
|
59504c3d84 | ||
|
|
57535af982 | ||
|
|
66358240dc | ||
|
|
a283a7fe49 | ||
|
|
42cdfe3c1e | ||
|
|
806dd6254b | ||
|
|
40b53442a8 | ||
|
|
7662d3fd6a | ||
|
|
e4ea9d8cd1 | ||
|
|
c6374555b9 | ||
|
|
bda5ca33d9 | ||
|
|
7a10037de8 | ||
|
|
a8d5fede17 | ||
|
|
daa2bd5127 | ||
|
|
506574aefd | ||
|
|
4f099da58f | ||
|
|
59c9f0957b | ||
|
|
6baa36cdaa | ||
|
|
e0a8b320a9 | ||
|
|
116f503cf6 | ||
|
|
023ebe1909 | ||
|
|
d54eb48662 | ||
|
|
542e8e22bf | ||
|
|
e0426d6dc0 | ||
|
|
a09900c98d | ||
|
|
f563fcad7f | ||
|
|
34b76f8683 | ||
|
|
ec82bdda97 | ||
|
|
e4c2df4989 | ||
|
|
a1f577dc01 | ||
|
|
edbf92424d | ||
|
|
35c18664fc | ||
|
|
be568cdfa6 | ||
|
|
0bb90d764c | ||
|
|
34c8748b9c | ||
|
|
875c22346e | ||
|
|
c57d5a2408 | ||
|
|
825058472b | ||
|
|
b419f063dc | ||
|
|
0ebc803e22 | ||
|
|
cd2119707a | ||
|
|
8c27406a7a | ||
|
|
b6defc76a8 | ||
|
|
50529d7ab3 | ||
|
|
b695f3d47f | ||
|
|
90ce61fa47 | ||
|
|
7c2352f2d6 | ||
|
|
ef7194af85 | ||
|
|
09adc8f690 | ||
|
|
86b448445f | ||
|
|
ba9ba7da95 | ||
|
|
f02e1ea04a | ||
|
|
f88b31ec67 | ||
|
|
6906dd47e8 | ||
|
|
2a35c48498 | ||
|
|
ce0031934a | ||
|
|
a3cb1e6ecc | ||
|
|
dd6c066f5a | ||
|
|
1d54777d72 | ||
|
|
5e7bfc05d2 | ||
|
|
3c741f0686 | ||
|
|
6291e3c587 | ||
|
|
06b1c9aa40 | ||
|
|
3143cc9d92 | ||
|
|
84b711e130 | ||
|
|
4007b17b1e |
4
.github/FUNDING.yml
vendored
4
.github/FUNDING.yml
vendored
@@ -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
|
||||
|
||||
18
.github/ISSUE_TEMPLATE/release.md
vendored
18
.github/ISSUE_TEMPLATE/release.md
vendored
@@ -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.
|
||||
|
||||
1
.github/workflows/build.yml
vendored
1
.github/workflows/build.yml
vendored
@@ -36,7 +36,6 @@ jobs:
|
||||
specs:
|
||||
- "spec/controllers"
|
||||
- "spec/models"
|
||||
- "spec/features/admin/[a-o0-9]*_spec.rb"
|
||||
- "spec/lib"
|
||||
- "spec/migrations"
|
||||
- "spec/serializers"
|
||||
|
||||
13
.github/workflows/linters.yml
vendored
13
.github/workflows/linters.yml
vendored
@@ -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
4
.husky/pre-commit
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env sh
|
||||
. "$(dirname -- "$0")/_/husky.sh"
|
||||
|
||||
yarn pretty-quick --check --staged
|
||||
21
.prettierignore
Normal file
21
.prettierignore
Normal 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
1
.prettierrc.json
Normal file
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -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:
|
||||
|
||||
@@ -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
11
Gemfile
@@ -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
|
||||
|
||||
265
Gemfile.lock
265
Gemfile.lock
@@ -51,66 +51,66 @@ GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
Ascii85 (1.1.0)
|
||||
actioncable (6.1.6)
|
||||
actionpack (= 6.1.6)
|
||||
activesupport (= 6.1.6)
|
||||
actioncable (6.1.6.1)
|
||||
actionpack (= 6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
nio4r (~> 2.0)
|
||||
websocket-driver (>= 0.6.1)
|
||||
actionmailbox (6.1.6)
|
||||
actionpack (= 6.1.6)
|
||||
activejob (= 6.1.6)
|
||||
activerecord (= 6.1.6)
|
||||
activestorage (= 6.1.6)
|
||||
activesupport (= 6.1.6)
|
||||
actionmailbox (6.1.6.1)
|
||||
actionpack (= 6.1.6.1)
|
||||
activejob (= 6.1.6.1)
|
||||
activerecord (= 6.1.6.1)
|
||||
activestorage (= 6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
mail (>= 2.7.1)
|
||||
actionmailer (6.1.6)
|
||||
actionpack (= 6.1.6)
|
||||
actionview (= 6.1.6)
|
||||
activejob (= 6.1.6)
|
||||
activesupport (= 6.1.6)
|
||||
actionmailer (6.1.6.1)
|
||||
actionpack (= 6.1.6.1)
|
||||
actionview (= 6.1.6.1)
|
||||
activejob (= 6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
actionpack (6.1.6)
|
||||
actionview (= 6.1.6)
|
||||
activesupport (= 6.1.6)
|
||||
actionpack (6.1.6.1)
|
||||
actionview (= 6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
rack (~> 2.0, >= 2.0.9)
|
||||
rack-test (>= 0.6.3)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
||||
actionpack-action_caching (1.2.2)
|
||||
actionpack (>= 4.0.0)
|
||||
actiontext (6.1.6)
|
||||
actionpack (= 6.1.6)
|
||||
activerecord (= 6.1.6)
|
||||
activestorage (= 6.1.6)
|
||||
activesupport (= 6.1.6)
|
||||
actiontext (6.1.6.1)
|
||||
actionpack (= 6.1.6.1)
|
||||
activerecord (= 6.1.6.1)
|
||||
activestorage (= 6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
nokogiri (>= 1.8.5)
|
||||
actionview (6.1.6)
|
||||
activesupport (= 6.1.6)
|
||||
actionview (6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
||||
active_model_serializers (0.8.4)
|
||||
activemodel (>= 3.0)
|
||||
active_storage_validations (0.9.7)
|
||||
active_storage_validations (0.9.8)
|
||||
activejob (>= 5.2.0)
|
||||
activemodel (>= 5.2.0)
|
||||
activestorage (>= 5.2.0)
|
||||
activesupport (>= 5.2.0)
|
||||
activejob (6.1.6)
|
||||
activesupport (= 6.1.6)
|
||||
activejob (6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
globalid (>= 0.3.6)
|
||||
activemerchant (1.123.0)
|
||||
activesupport (>= 4.2)
|
||||
builder (>= 2.1.2, < 4.0.0)
|
||||
i18n (>= 0.6.9)
|
||||
nokogiri (~> 1.4)
|
||||
activemodel (6.1.6)
|
||||
activesupport (= 6.1.6)
|
||||
activerecord (6.1.6)
|
||||
activemodel (= 6.1.6)
|
||||
activesupport (= 6.1.6)
|
||||
activemodel (6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
activerecord (6.1.6.1)
|
||||
activemodel (= 6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
activerecord-import (1.4.0)
|
||||
activerecord (>= 4.2)
|
||||
activerecord-postgresql-adapter (0.0.1)
|
||||
@@ -121,14 +121,14 @@ GEM
|
||||
multi_json (~> 1.11, >= 1.11.2)
|
||||
rack (>= 2.0.8, < 3)
|
||||
railties (>= 5.2.4.1)
|
||||
activestorage (6.1.6)
|
||||
actionpack (= 6.1.6)
|
||||
activejob (= 6.1.6)
|
||||
activerecord (= 6.1.6)
|
||||
activesupport (= 6.1.6)
|
||||
activestorage (6.1.6.1)
|
||||
actionpack (= 6.1.6.1)
|
||||
activejob (= 6.1.6.1)
|
||||
activerecord (= 6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
marcel (~> 1.0)
|
||||
mini_mime (>= 1.1.0)
|
||||
activesupport (6.1.6)
|
||||
activesupport (6.1.6.1)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
@@ -141,12 +141,13 @@ GEM
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
afm (0.2.2)
|
||||
angular-rails-templates (1.1.0)
|
||||
railties (>= 4.2, < 7)
|
||||
angular-rails-templates (1.2.0)
|
||||
railties (>= 5.0, < 7.1)
|
||||
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)
|
||||
@@ -154,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)
|
||||
@@ -177,20 +177,19 @@ GEM
|
||||
bcrypt (3.1.18)
|
||||
bigdecimal (3.0.2)
|
||||
bindex (0.8.1)
|
||||
bootsnap (1.10.1)
|
||||
bootsnap (1.13.0)
|
||||
msgpack (~> 1.2)
|
||||
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)
|
||||
cancancan (1.15.0)
|
||||
capybara (3.36.0)
|
||||
capybara (3.37.1)
|
||||
addressable
|
||||
matrix
|
||||
mini_mime (>= 0.1.3)
|
||||
@@ -204,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)
|
||||
@@ -215,7 +213,8 @@ GEM
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.12.2)
|
||||
combine_pdf (1.0.21)
|
||||
combine_pdf (1.0.22)
|
||||
matrix
|
||||
ruby-rc4 (>= 0.1.5)
|
||||
concurrent-ruby (1.1.10)
|
||||
connection_pool (2.2.5)
|
||||
@@ -237,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)
|
||||
@@ -250,15 +252,15 @@ GEM
|
||||
devise (>= 4.8.0)
|
||||
devise-token_authenticatable (1.1.0)
|
||||
devise (>= 4.0.0, < 5.0.0)
|
||||
diff-lcs (1.4.4)
|
||||
diff-lcs (1.5.0)
|
||||
digest (3.1.0)
|
||||
docile (1.4.0)
|
||||
dotenv (2.7.6)
|
||||
dotenv-rails (2.7.6)
|
||||
dotenv (= 2.7.6)
|
||||
dotenv (2.8.1)
|
||||
dotenv-rails (2.8.1)
|
||||
dotenv (= 2.8.1)
|
||||
railties (>= 3.2)
|
||||
dry-inflector (0.2.1)
|
||||
erubi (1.10.0)
|
||||
erubi (1.11.0)
|
||||
et-orbi (1.2.7)
|
||||
tzinfo
|
||||
excon (0.81.0)
|
||||
@@ -326,7 +328,7 @@ GEM
|
||||
highline (2.0.3)
|
||||
hiredis (0.6.3)
|
||||
htmlentities (4.3.4)
|
||||
i18n (1.8.10)
|
||||
i18n (1.12.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
i18n-js (3.9.2)
|
||||
i18n (>= 0.6.6)
|
||||
@@ -335,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)
|
||||
@@ -343,7 +348,7 @@ GEM
|
||||
thor (>= 0.14, < 2.0)
|
||||
jquery-ui-rails (4.2.1)
|
||||
railties (>= 3.2.16)
|
||||
json (2.6.1)
|
||||
json (2.6.2)
|
||||
json-schema (2.8.1)
|
||||
addressable (>= 2.4)
|
||||
json_spec (1.1.5)
|
||||
@@ -351,13 +356,13 @@ GEM
|
||||
rspec (>= 2.0, < 4.0)
|
||||
jsonapi-serializer (2.2.0)
|
||||
activesupport (>= 4.2)
|
||||
jwt (2.3.0)
|
||||
jwt (2.5.0)
|
||||
knapsack (4.0.0)
|
||||
rake
|
||||
launchy (2.5.0)
|
||||
addressable (~> 2.7)
|
||||
letter_opener (1.7.0)
|
||||
launchy (~> 2.2)
|
||||
letter_opener (1.8.1)
|
||||
launchy (>= 2.2, < 3)
|
||||
libv8-node (15.14.0.1)
|
||||
listen (3.7.1)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
@@ -381,16 +386,16 @@ 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)
|
||||
i18n (>= 0.6.4, <= 2)
|
||||
msgpack (1.4.2)
|
||||
msgpack (1.5.4)
|
||||
multi_json (1.15.0)
|
||||
multi_xml (0.6.0)
|
||||
nio4r (2.5.8)
|
||||
nokogiri (1.13.6)
|
||||
nokogiri (1.13.8)
|
||||
mini_portile2 (~> 2.8.0)
|
||||
racc (~> 1.4)
|
||||
oauth2 (1.4.10)
|
||||
@@ -400,21 +405,22 @@ 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.21.0)
|
||||
paranoia (2.4.3)
|
||||
activerecord (>= 4.0, < 6.2)
|
||||
parser (3.1.0.0)
|
||||
parallel (1.22.1)
|
||||
paranoia (2.6.0)
|
||||
activerecord (>= 5.1, < 7.1)
|
||||
parser (3.1.2.1)
|
||||
ast (~> 2.4.1)
|
||||
paypal-sdk-core (0.3.4)
|
||||
multi_json (~> 1.0)
|
||||
xml-simple
|
||||
paypal-sdk-merchant (1.117.2)
|
||||
paypal-sdk-core (~> 0.3.0)
|
||||
pdf-reader (2.5.0)
|
||||
pdf-reader (2.10.0)
|
||||
Ascii85 (~> 1.0)
|
||||
afm (~> 0.2.1)
|
||||
hashery (~> 2.0)
|
||||
@@ -425,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)
|
||||
@@ -446,20 +449,20 @@ GEM
|
||||
rack-test (2.0.2)
|
||||
rack (>= 1.3)
|
||||
rack-timeout (0.6.3)
|
||||
rails (6.1.6)
|
||||
actioncable (= 6.1.6)
|
||||
actionmailbox (= 6.1.6)
|
||||
actionmailer (= 6.1.6)
|
||||
actionpack (= 6.1.6)
|
||||
actiontext (= 6.1.6)
|
||||
actionview (= 6.1.6)
|
||||
activejob (= 6.1.6)
|
||||
activemodel (= 6.1.6)
|
||||
activerecord (= 6.1.6)
|
||||
activestorage (= 6.1.6)
|
||||
activesupport (= 6.1.6)
|
||||
rails (6.1.6.1)
|
||||
actioncable (= 6.1.6.1)
|
||||
actionmailbox (= 6.1.6.1)
|
||||
actionmailer (= 6.1.6.1)
|
||||
actionpack (= 6.1.6.1)
|
||||
actiontext (= 6.1.6.1)
|
||||
actionview (= 6.1.6.1)
|
||||
activejob (= 6.1.6.1)
|
||||
activemodel (= 6.1.6.1)
|
||||
activerecord (= 6.1.6.1)
|
||||
activestorage (= 6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
bundler (>= 1.15.0)
|
||||
railties (= 6.1.6)
|
||||
railties (= 6.1.6.1)
|
||||
sprockets-rails (>= 2.0.0)
|
||||
rails-controller-testing (1.0.5)
|
||||
actionpack (>= 5.0.1.rc1)
|
||||
@@ -470,13 +473,13 @@ GEM
|
||||
nokogiri (>= 1.6)
|
||||
rails-html-sanitizer (1.4.3)
|
||||
loofah (~> 2.3)
|
||||
rails-i18n (7.0.1)
|
||||
rails-i18n (7.0.5)
|
||||
i18n (>= 0.7, < 2)
|
||||
railties (>= 6.0.0, < 8)
|
||||
rails_safe_tasks (1.0.0)
|
||||
railties (6.1.6)
|
||||
actionpack (= 6.1.6)
|
||||
activesupport (= 6.1.6)
|
||||
railties (6.1.6.1)
|
||||
actionpack (= 6.1.6.1)
|
||||
activesupport (= 6.1.6.1)
|
||||
method_source
|
||||
rake (>= 12.2)
|
||||
thor (~> 1.0)
|
||||
@@ -490,8 +493,10 @@ GEM
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
redcarpet (3.5.1)
|
||||
redis (4.7.1)
|
||||
regexp_parser (2.2.0)
|
||||
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)
|
||||
@@ -515,15 +520,15 @@ GEM
|
||||
rspec-core (~> 3.10.0)
|
||||
rspec-expectations (~> 3.10.0)
|
||||
rspec-mocks (~> 3.10.0)
|
||||
rspec-core (3.10.1)
|
||||
rspec-core (3.10.2)
|
||||
rspec-support (~> 3.10.0)
|
||||
rspec-expectations (3.10.1)
|
||||
rspec-expectations (3.10.2)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.10.0)
|
||||
rspec-mocks (3.10.2)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.10.0)
|
||||
rspec-rails (5.0.2)
|
||||
rspec-rails (5.1.2)
|
||||
actionpack (>= 5.2)
|
||||
activesupport (>= 5.2)
|
||||
railties (>= 5.2)
|
||||
@@ -533,28 +538,29 @@ GEM
|
||||
rspec-support (~> 3.10)
|
||||
rspec-retry (0.6.2)
|
||||
rspec-core (> 3.3)
|
||||
rspec-support (3.10.2)
|
||||
rswag-api (2.4.0)
|
||||
railties (>= 3.1, < 7.0)
|
||||
rswag-specs (2.4.0)
|
||||
activesupport (>= 3.1, < 7.0)
|
||||
rspec-support (3.10.3)
|
||||
rswag-api (2.5.1)
|
||||
railties (>= 3.1, < 7.1)
|
||||
rswag-specs (2.5.1)
|
||||
activesupport (>= 3.1, < 7.1)
|
||||
json-schema (~> 2.2)
|
||||
railties (>= 3.1, < 7.0)
|
||||
rswag-ui (2.4.0)
|
||||
actionpack (>= 3.1, < 7.0)
|
||||
railties (>= 3.1, < 7.0)
|
||||
rubocop (1.22.2)
|
||||
railties (>= 3.1, < 7.1)
|
||||
rswag-ui (2.5.1)
|
||||
actionpack (>= 3.1, < 7.1)
|
||||
railties (>= 3.1, < 7.1)
|
||||
rubocop (1.35.1)
|
||||
json (~> 2.3)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 3.0.0.0)
|
||||
parser (>= 3.1.2.1)
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
regexp_parser (>= 1.8, < 3.0)
|
||||
rexml
|
||||
rubocop-ast (>= 1.12.0, < 2.0)
|
||||
rexml (>= 3.2.5, < 4.0)
|
||||
rubocop-ast (>= 1.20.1, < 2.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 1.4.0, < 3.0)
|
||||
rubocop-ast (1.15.1)
|
||||
parser (>= 3.0.1.1)
|
||||
rubocop-rails (2.13.2)
|
||||
rubocop-ast (1.21.0)
|
||||
parser (>= 3.1.1.0)
|
||||
rubocop-rails (2.15.2)
|
||||
activesupport (>= 4.2.0)
|
||||
rack (>= 1.1)
|
||||
rubocop (>= 1.7.0, < 2.0)
|
||||
@@ -574,17 +580,13 @@ GEM
|
||||
sprockets-rails (>= 2.0, < 4.0)
|
||||
tilt (>= 1.1, < 3)
|
||||
sd_notify (0.1.1)
|
||||
selenium-webdriver (4.0.3)
|
||||
childprocess (>= 0.5, < 5.0)
|
||||
rexml (~> 3.2, >= 3.2.5)
|
||||
rubyzip (>= 1.2.2)
|
||||
semantic_range (3.0.0)
|
||||
shoulda-matchers (5.1.0)
|
||||
activesupport (>= 5.2.0)
|
||||
sidekiq (6.3.1)
|
||||
sidekiq (6.5.4)
|
||||
connection_pool (>= 2.2.2)
|
||||
rack (~> 2.0)
|
||||
redis (>= 4.2.0)
|
||||
redis (>= 4.5.0)
|
||||
sidekiq-scheduler (4.0.2)
|
||||
redis (>= 4.2.0)
|
||||
rufus-scheduler (~> 3.2)
|
||||
@@ -618,27 +620,28 @@ 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-unit (3.5.0)
|
||||
test-prof (1.0.10)
|
||||
test-unit (3.5.3)
|
||||
power_assert
|
||||
thor (1.2.1)
|
||||
thread-local (1.1.0)
|
||||
tilt (2.0.10)
|
||||
timecop (0.9.4)
|
||||
tilt (2.0.11)
|
||||
timecop (0.9.5)
|
||||
ttfunk (1.7.0)
|
||||
tzinfo (2.0.4)
|
||||
tzinfo (2.0.5)
|
||||
concurrent-ruby (~> 1.0)
|
||||
uglifier (4.2.0)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
unicode-display_width (2.1.0)
|
||||
unicode-display_width (2.2.0)
|
||||
uniform_notifier (1.16.0)
|
||||
valid_email2 (4.0.0)
|
||||
valid_email2 (4.0.4)
|
||||
activemodel (>= 3.2)
|
||||
mail (~> 2.5)
|
||||
view_component (2.57.1)
|
||||
view_component (2.69.0)
|
||||
activesupport (>= 5.0.0, < 8.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
method_source (~> 1.0)
|
||||
view_component_storybook (0.11.1)
|
||||
view_component (>= 2.36)
|
||||
@@ -649,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.14.0)
|
||||
webmock (3.18.1)
|
||||
addressable (>= 2.8.0)
|
||||
crack (>= 0.3.2)
|
||||
hashdiff (>= 0.4.0, < 2.0.0)
|
||||
@@ -694,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
|
||||
@@ -711,6 +708,7 @@ DEPENDENCIES
|
||||
database_cleaner
|
||||
db2fog!
|
||||
ddtrace
|
||||
debug (>= 1.0.0)
|
||||
debugger-linecache
|
||||
devise
|
||||
devise-encryptable
|
||||
@@ -760,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
|
||||
@@ -786,7 +783,6 @@ DEPENDENCIES
|
||||
rubocop-rails
|
||||
sd_notify
|
||||
select2-rails!
|
||||
selenium-webdriver
|
||||
shoulda-matchers
|
||||
sidekiq
|
||||
sidekiq-scheduler
|
||||
@@ -806,7 +802,6 @@ DEPENDENCIES
|
||||
view_component_storybook
|
||||
web!
|
||||
web-console
|
||||
webdrivers
|
||||
webmock
|
||||
webpacker (~> 5)
|
||||
whenever
|
||||
|
||||
@@ -39,7 +39,7 @@ We use [BrowserStack](https://www.browserstack.com/) as a manual testing tool. B
|
||||
|
||||
## Licence
|
||||
|
||||
Copyright (c) 2012 - 2021 Open Food Foundation, released under the AGPL licence.
|
||||
Copyright (c) 2012 - 2022 Open Food Foundation, released under the AGPL licence.
|
||||
|
||||
[survey]: https://docs.google.com/a/eaterprises.com.au/forms/d/1zxR5vSiU9CigJ9cEaC8-eJLgYid8CR8er7PPH9Mc-30/edit#
|
||||
[slack-invite]: https://join.slack.com/t/openfoodnetwork/shared_invite/zt-9sjkjdlu-r02kUMP1zbrTgUhZhYPF~A
|
||||
|
||||
@@ -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)
|
||||
@@ -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')
|
||||
@@ -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)
|
||||
|
||||
@@ -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,11 @@ 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"))
|
||||
end
|
||||
end
|
||||
|
||||
def welcome
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
17
app/controllers/errors_controller.rb
Normal file
17
app/controllers/errors_controller.rb
Normal 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
|
||||
@@ -21,6 +21,7 @@ class SplitCheckoutController < ::BaseController
|
||||
|
||||
def edit
|
||||
redirect_to_step_based_on_order unless params[:step]
|
||||
check_step if params[:step]
|
||||
end
|
||||
|
||||
def update
|
||||
@@ -145,4 +146,13 @@ 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
|
||||
end
|
||||
|
||||
@@ -42,6 +42,10 @@ module Spree
|
||||
@order.update_order!
|
||||
end
|
||||
|
||||
if params[:set_distribution_step] && @order.update(order_params)
|
||||
return redirect_to spree.admin_order_customer_path(@order)
|
||||
end
|
||||
|
||||
unless order_params.present? && @order.update(order_params) && @order.line_items.present?
|
||||
if @order.line_items.empty? && !params[:suppress_error_msg]
|
||||
@order.errors.add(:line_items, Spree.t('errors.messages.blank'))
|
||||
@@ -55,7 +59,7 @@ module Spree
|
||||
redirect_to spree.edit_admin_order_path(@order)
|
||||
else
|
||||
# Jump to next step if order is not complete
|
||||
redirect_to spree.admin_order_customer_path(@order)
|
||||
redirect_to spree.admin_order_payments_path(@order)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
57
app/controllers/spree/api_keys_controller.rb
Normal file
57
app/controllers/spree/api_keys_controller.rb
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -4,6 +4,7 @@ module Spree
|
||||
class OrdersController < ::BaseController
|
||||
include OrderCyclesHelper
|
||||
include Rails.application.routes.url_helpers
|
||||
include CablecarResponses
|
||||
|
||||
layout 'darkswarm'
|
||||
|
||||
@@ -99,7 +100,8 @@ module Spree
|
||||
else
|
||||
flash[:error] = I18n.t(:orders_could_not_cancel)
|
||||
end
|
||||
redirect_to request.referer || main_app.order_path(@order)
|
||||
render status: :found,
|
||||
operations: cable_car.redirect_to(url: request.referer || main_app.order_path(@order))
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -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
|
||||
|
||||
17
app/helpers/admin/enterprise_groups_helper.rb
Normal file
17
app/helpers/admin/enterprise_groups_helper.rb
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -10,7 +10,7 @@ class Customer < ApplicationRecord
|
||||
belongs_to :enterprise
|
||||
belongs_to :user, class_name: "Spree::User"
|
||||
has_many :orders, class_name: "Spree::Order"
|
||||
before_destroy :check_for_orders
|
||||
before_destroy :update_orders_and_delete_canceled_subscriptions
|
||||
|
||||
belongs_to :bill_address, class_name: "Spree::Address"
|
||||
alias_attribute :billing_address, :bill_address
|
||||
@@ -52,10 +52,12 @@ class Customer < ApplicationRecord
|
||||
self.user = user || Spree::User.find_by(email: email)
|
||||
end
|
||||
|
||||
def check_for_orders
|
||||
return true unless orders.any?
|
||||
|
||||
errors.add(:base, I18n.t('admin.customers.destroy.has_associated_orders'))
|
||||
throw :abort
|
||||
def update_orders_and_delete_canceled_subscriptions
|
||||
if Subscription.where(customer_id: id).not_canceled.any?
|
||||
errors.add(:base, I18n.t('admin.customers.destroy.has_associated_subscriptions'))
|
||||
throw :abort
|
||||
end
|
||||
Subscription.where(customer_id: id).destroy_all
|
||||
orders.update_all(customer_id: nil)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -84,8 +84,8 @@ class Enterprise < ApplicationRecord
|
||||
has_one_attached :promo_image
|
||||
has_one_attached :terms_and_conditions
|
||||
|
||||
validates :logo, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml)\Z}
|
||||
validates :promo_image, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml)\Z}
|
||||
validates :logo, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z}
|
||||
validates :promo_image, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z}
|
||||
validates :terms_and_conditions, content_type: {
|
||||
in: "application/pdf",
|
||||
message: I18n.t(:enterprise_terms_and_conditions_type_error),
|
||||
|
||||
@@ -28,8 +28,8 @@ class EnterpriseGroup < ApplicationRecord
|
||||
has_one_attached :logo
|
||||
has_one_attached :promo_image
|
||||
|
||||
validates :logo, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml)\Z}
|
||||
validates :promo_image, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml)\Z}
|
||||
validates :logo, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z}
|
||||
validates :promo_image, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z}
|
||||
|
||||
scope :by_position, -> { order('position ASC') }
|
||||
scope :on_front_page, -> { where(on_front_page: true) }
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# This reduces the need to keep Orders in sync with their parent Subscriptions
|
||||
|
||||
class ProxyOrder < ApplicationRecord
|
||||
belongs_to :order, class_name: 'Spree::Order', dependent: :destroy
|
||||
belongs_to :order, class_name: 'Spree::Order'
|
||||
belongs_to :subscription
|
||||
belongs_to :order_cycle
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ module Spree
|
||||
|
||||
has_one_attached :attachment
|
||||
|
||||
validates :attachment, attached: true, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml)\Z}
|
||||
validates :attachment, attached: true, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml|webp)\Z}
|
||||
validate :no_attachment_errors
|
||||
|
||||
def variant(name)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -17,9 +17,9 @@ class Subscription < ApplicationRecord
|
||||
belongs_to :payment_method, class_name: 'Spree::PaymentMethod'
|
||||
belongs_to :bill_address, class_name: "Spree::Address"
|
||||
belongs_to :ship_address, class_name: "Spree::Address"
|
||||
has_many :subscription_line_items, inverse_of: :subscription
|
||||
has_many :subscription_line_items, inverse_of: :subscription, dependent: :destroy
|
||||
has_many :order_cycles, through: :schedule
|
||||
has_many :proxy_orders
|
||||
has_many :proxy_orders, dependent: :destroy
|
||||
has_many :orders, through: :proxy_orders
|
||||
|
||||
alias_attribute :billing_address, :bill_address
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 }
|
||||
],
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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']]"}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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/
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -12,14 +12,13 @@
|
||||
%a= t('admin.whats_this')
|
||||
.eight.columns.omega
|
||||
= f.collection_select :group_ids, @groups, :id, :name, {}, class: "select2 fullwidth", 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')
|
||||
.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
|
||||
@@ -28,13 +27,13 @@
|
||||
%div{'ofn-with-tip' => t('.sells_tip')}
|
||||
%a= t('admin.whats_this')
|
||||
.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
|
||||
@@ -70,8 +69,8 @@
|
||||
%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}}
|
||||
- front_shop_path = "#{main_app.root_url}#{@enterprise.permalink}/shop"
|
||||
= link_to front_shop_path, front_shop_path , target: "_blank"
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= f.label :id, t('.ofn_uid')
|
||||
|
||||
@@ -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' }, |
|
||||
})
|
||||
|
||||
|
||||
|
||||
@@ -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] }")
|
||||
|
||||
|
||||
7
app/views/admin/shared/_tooltip.html.haml
Normal file
7
app/views/admin/shared/_tooltip.html.haml
Normal file
@@ -0,0 +1,7 @@
|
||||
%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"}
|
||||
= tooltip_text
|
||||
.arrow{"data-tooltip-target": "arrow"}
|
||||
|
||||
8
app/views/errors/internal_server_error.html.haml
Normal file
8
app/views/errors/internal_server_error.html.haml
Normal 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")
|
||||
8
app/views/errors/not_found.html.haml
Normal file
8
app/views/errors/not_found.html.haml
Normal 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")
|
||||
26
app/views/errors/unprocessable_entity.html.haml
Normal file
26
app/views/errors/unprocessable_entity.html.haml
Normal 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")
|
||||
@@ -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);
|
||||
})();
|
||||
|
||||
16
app/views/layouts/_matomo_tracking.html.haml
Normal file
16
app/views/layouts/_matomo_tracking.html.haml
Normal 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);
|
||||
})();
|
||||
@@ -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"
|
||||
|
||||
28
app/views/layouts/errors.html.haml
Normal file
28
app/views/layouts/errors.html.haml
Normal 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
|
||||
@@ -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"
|
||||
|
||||
@@ -24,8 +24,7 @@
|
||||
- if Spree::Config[:enable_invoices?]
|
||||
.ofn-drop-down-with-prepend
|
||||
.ofn-drop-down-prepend{"ng-class": "selected_orders.length == 0 ? 'disabled' : ''"}
|
||||
{{ selected_orders.length }}
|
||||
=t('.selected')
|
||||
{{ "spree.admin.orders.index.selected" | t:{count: selected_orders.length} }}
|
||||
.ofn-drop-down{"ng-class": "selected_orders.length == 0 ? 'disabled' : ''"}
|
||||
%span{ :class => 'icon-reorder' }
|
||||
="#{t('admin.actions')}".html_safe
|
||||
|
||||
@@ -77,3 +77,6 @@
|
||||
= @order.distributor.invoice_text
|
||||
|
||||
= render 'spree/shared/payment'
|
||||
|
||||
- if @order.note.present?
|
||||
= render partial: 'spree/shared/order_note'
|
||||
|
||||
@@ -89,3 +89,6 @@
|
||||
= @order.distributor.invoice_text
|
||||
|
||||
= render 'spree/shared/payment'
|
||||
|
||||
- if @order.note.present?
|
||||
= render partial: 'spree/shared/order_note'
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
\#
|
||||
= @order.number
|
||||
|
||||
= render 'spree/admin/shared/order_tabs', :current => 'Order Details'
|
||||
= render 'spree/admin/shared/order_tabs', :current => 'Customer Details'
|
||||
|
||||
= csrf_meta_tags
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
= render 'spree/admin/orders/_form/distribution_fields'
|
||||
-# This param passed to stop validation error in next page due to no line items in order yet:
|
||||
= hidden_field_tag 'suppress_error_msg', "true"
|
||||
= hidden_field_tag "set_distribution_step", "true"
|
||||
= button_tag :class => 'secondary radius expand small', :id => 'update-button' do
|
||||
%i.icon-arrow-right
|
||||
= t(:next)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
%fieldset#calculator_fields.no-border-bottom
|
||||
%legend{align: "center"}= t(:calculator)
|
||||
%legend{align: "center"}= t(:fees)
|
||||
#preference-settings
|
||||
.row
|
||||
.alpha.four.columns
|
||||
|
||||
@@ -44,22 +44,22 @@
|
||||
|
||||
%nav.menu
|
||||
%ul
|
||||
- order_details_classes = "active" if current == "Order Details"
|
||||
%li{ class: order_details_classes }
|
||||
= link_to_with_icon 'icon-edit', t(:order_details), spree.edit_admin_order_url(@order)
|
||||
|
||||
- customer_details_classes = "active" if current == "Customer Details"
|
||||
%li{ class: customer_details_classes }
|
||||
= link_to_with_icon 'icon-user', t(:customer_details), spree.admin_order_customer_url(@order)
|
||||
|
||||
- adjustments_classes = "active" if current == "Adjustments"
|
||||
%li{ class: adjustments_classes }
|
||||
= link_to_with_icon 'icon-cogs', t(:adjustments), spree.admin_order_adjustments_url(@order)
|
||||
- order_details_classes = "active" if current == "Order Details"
|
||||
%li{ class: order_details_classes }
|
||||
= link_to_with_icon 'icon-edit', t(:order_details), spree.edit_admin_order_url(@order)
|
||||
|
||||
- payments_classes = "active" if current == "Payments"
|
||||
%li{ class: payments_classes }
|
||||
= link_to_with_icon 'icon-credit-card', t(:payments), spree.admin_order_payments_url(@order)
|
||||
|
||||
- adjustments_classes = "active" if current == "Adjustments"
|
||||
%li{ class: adjustments_classes }
|
||||
= link_to_with_icon 'icon-cogs', t(:adjustments), spree.admin_order_adjustments_url(@order)
|
||||
|
||||
- if @order.completed?
|
||||
- authorizations_classes = "active" if current == "Return Authorizations"
|
||||
%li{ class: authorizations_classes }
|
||||
|
||||
@@ -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'
|
||||
|
||||
4
app/views/spree/shared/_order_note.html.haml
Normal file
4
app/views/spree/shared/_order_note.html.haml
Normal file
@@ -0,0 +1,4 @@
|
||||
%p.callout{style: "margin-top: 30px"}
|
||||
%strong= t :additional_information
|
||||
%p{style: "margin: 5px"}
|
||||
= @order.note
|
||||
7
app/views/spree/users/_api_keys.html.haml
Normal file
7
app/views/spree/users/_api_keys.html.haml
Normal 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")
|
||||
@@ -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" } }
|
||||
|
||||
3
app/views/spree/users/_developer_settings.html.haml
Normal file
3
app/views/spree/users/_developer_settings.html.haml
Normal file
@@ -0,0 +1,3 @@
|
||||
%script{ type: "text/ng-template", id: "account/developer_settings.html" }
|
||||
%h3= t('.title')
|
||||
= render partial: 'api_keys'
|
||||
@@ -11,8 +11,7 @@
|
||||
%th.order7.show-for-large-up.text-right= t('.cancel')
|
||||
%tbody.transaction-group{"ng-repeat" => "order in Orders.changeable", "ng-class-odd"=>"'odd'", "ng-class-even"=>"'even'"}
|
||||
%tr.order-row
|
||||
%td.order1
|
||||
%a{"ng-href" => "{{::order.path}}", "ng-bind" => "::order.number"}
|
||||
%td.order1{"ng-bind" => "::order.number"}
|
||||
%td.order2
|
||||
%a{"ng-href" => "{{::Orders.shopsByID[order.shop_id].hash}}#{main_app.shop_path}", "ng-bind" => "::Orders.shopsByID[order.shop_id].name"}
|
||||
%td.order3.show-for-large-up{"ng-bind" => "::order.changes_allowed_until"}
|
||||
|
||||
@@ -8,16 +8,16 @@
|
||||
%th.order4.show-for-large-up= t('.items')
|
||||
%th.order5.text-right= t('.total')
|
||||
%th.order6.text-right.show-for-large-up= t('.paid?')
|
||||
%th.order7.text-right= t('.view')
|
||||
%th.order7.text-right= t('.status')
|
||||
%tbody.transaction-group{"ng-repeat" => "order in Orders.all | filter:{changes_allowed:false} as pastOrders", "ng-class-odd"=>"'odd'", "ng-class-even"=>"'even'"}
|
||||
%tr.order-row
|
||||
%td.order1
|
||||
%a{"ng-href" => "{{::order.path}}", "ng-bind" => "::order.number"}
|
||||
%td.order1{"ng-bind" => "::order.number"}
|
||||
%td.order2
|
||||
%a{"ng-href" => "{{::Orders.shopsByID[order.shop_id].hash}}#{main_app.shop_path}", "ng-bind" => "::Orders.shopsByID[order.shop_id].name"}
|
||||
%td.order3.show-for-large-up{"ng-bind" => "::order.completed_at"}
|
||||
%td.order4.show-for-large-up{"ng-bind" => "::order.item_count"}
|
||||
%td.order5.text-right{"ng-class" => "{'debit': order.payment_state != 'paid', 'credit': order.payment_state == 'paid'}","ng-bind" => "::order.total | localizeCurrency"}
|
||||
%td.order6.text-right.show-for-large-up{"ng-class" => "{'debit': order.payment_state != 'paid', 'credit': order.payment_state == 'paid'}", "ng-bind" => "::(order.payment_state == 'paid' ? 'say_yes' : 'say_no') | t"}
|
||||
%td.order7.text-right
|
||||
%a{"ng-href" => "{{::order.path}}" }= t('.view')
|
||||
%td.order7.text-right{ "ng-switch" => "::order.state" }
|
||||
%a{ "ng-switch-when" => "complete", "ng-href" => "{{::order.path}}" }= t('.completed')
|
||||
%span{ "ng-switch-when" => "canceled" }= t('.cancelled')
|
||||
|
||||
@@ -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"
|
||||
|
||||
21
app/webpacker/controllers/csv_select_controller.js
Normal file
21
app/webpacker/controllers/csv_select_controller.js
Normal 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");
|
||||
}
|
||||
}
|
||||
@@ -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];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
30
app/webpacker/controllers/primary_details_controller.js
Normal file
30
app/webpacker/controllers/primary_details_controller.js
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ export default class extends Controller {
|
||||
static targets = ["stripeelements", "select"];
|
||||
|
||||
connect() {
|
||||
this.initSelectedCard()
|
||||
this.initSelectedCard();
|
||||
}
|
||||
|
||||
initSelectedCard() {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
40
app/webpacker/controllers/tabs_and_panels_controller.js
Normal file
40
app/webpacker/controllers/tabs_and_panels_controller.js
Normal 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`
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
49
app/webpacker/controllers/tooltip_controller.js
Normal file
49
app/webpacker/controllers/tooltip_controller.js
Normal 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 = "";
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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(
|
||||
@@ -226,6 +228,7 @@ module Openfoodnetwork
|
||||
config.active_record.belongs_to_required_by_default = false
|
||||
config.active_record.cache_versioning = false
|
||||
config.active_record.has_many_inversing = false
|
||||
config.active_record.yaml_column_permitted_classes = [BigDecimal, Symbol]
|
||||
|
||||
config.active_support.escape_html_entities_in_json = true
|
||||
|
||||
@@ -242,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
|
||||
|
||||
@@ -528,8 +528,6 @@ ar:
|
||||
guest_label: "الخروج كضيف"
|
||||
credit_owed: "الائتمان مدين"
|
||||
balance_due: "الرصيد المستحق"
|
||||
destroy:
|
||||
has_associated_orders: "فشل الحذف: قام العميل بربط الطلبات مع متجره"
|
||||
contents:
|
||||
edit:
|
||||
title: المحتوى
|
||||
@@ -3640,7 +3638,6 @@ ar:
|
||||
results_found: "تم العثور على النتائج %{number}."
|
||||
viewing: "عرض %{start} إلى %{end}."
|
||||
print_invoices: "طباعة الفواتير"
|
||||
selected: تم الاختيار
|
||||
sortable_header:
|
||||
payment_state: "حالة الدفعة"
|
||||
shipment_state: "حالة الشحن"
|
||||
@@ -3777,7 +3774,6 @@ ar:
|
||||
paypal:
|
||||
no_payment_via_admin_backend: لا يمكن التقاط مدفوعات Paypal في Backoffice
|
||||
products:
|
||||
image_upload_error: "لم يتم التعرف على صورة المنتج. يرجى تحميل صورة بتنسيق PNG أو JPG."
|
||||
new:
|
||||
title: "منتج جديد"
|
||||
new_product: "منتج جديد"
|
||||
@@ -4040,6 +4036,8 @@ ar:
|
||||
connection_failed: "تعذر الاتصال بـ PayPal."
|
||||
generic_error: "فشل PayPal. %{reasons}"
|
||||
users:
|
||||
api_keys:
|
||||
regenerate_key: "انشاء مفتاح"
|
||||
form:
|
||||
account_settings: إعدادت الحساب
|
||||
show:
|
||||
@@ -4073,7 +4071,8 @@ ar:
|
||||
items: المواد
|
||||
total: المجموع
|
||||
paid?: دفع؟
|
||||
view: عرض
|
||||
status: الحالة
|
||||
cancelled: ألغيت
|
||||
saved_cards:
|
||||
default?: الإفتراضي؟
|
||||
delete?: حذف؟
|
||||
|
||||
@@ -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."
|
||||
@@ -508,8 +503,6 @@ ca:
|
||||
guest_label: "Fer comanda com a convidat"
|
||||
credit_owed: "Crèdit a deure"
|
||||
balance_due: "A pagar"
|
||||
destroy:
|
||||
has_associated_orders: "S'ha produït un error en suprimir: la consumidora té comandes associades amb la seva botiga"
|
||||
contents:
|
||||
edit:
|
||||
title: Contingut
|
||||
@@ -3448,7 +3441,6 @@ ca:
|
||||
results_found: "%{number} Resultats trobats."
|
||||
viewing: "Veient %{start} a %{end}."
|
||||
print_invoices: "Imprimir factures"
|
||||
selected: seleccionat
|
||||
sortable_header:
|
||||
payment_state: "Estat del pagament"
|
||||
shipment_state: "Estat de la Tramesa"
|
||||
@@ -3585,7 +3577,6 @@ ca:
|
||||
paypal:
|
||||
no_payment_via_admin_backend: Els pagaments amb Paypal no es poden marcar com pagats des de l'administració
|
||||
products:
|
||||
image_upload_error: "No s'ha reconegut la imatge del producte. Carregueu una imatge en format PNG o JPG."
|
||||
new:
|
||||
title: "Nou producte"
|
||||
new_product: "Nou producte"
|
||||
@@ -3847,6 +3838,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:
|
||||
@@ -3880,7 +3873,8 @@ ca:
|
||||
items: Articles
|
||||
total: Total
|
||||
paid?: Pagat?
|
||||
view: Veure
|
||||
status: Estat
|
||||
cancelled: Cancel·lada
|
||||
saved_cards:
|
||||
default?: Per defecte?
|
||||
delete?: Suprimeix?
|
||||
|
||||
@@ -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"
|
||||
@@ -182,6 +161,7 @@ cy:
|
||||
signed_up_but_unconfirmed: "Anfonwyd neges gyda dolen gadarnhau i'ch cyfeiriad e-bost. Agorwch y ddolen i actifadu eich cyfrif."
|
||||
unknown_error: "Aeth rhywbeth o'i le wrth greu eich cyfrif. Gwiriwch eich cyfeiriad e-bost a rhoi cynnig arall arni."
|
||||
failure:
|
||||
disabled: "Analluogwyd eich cyfrif. Anfonwch ebost at: support@openfoodnetwork.org.uk i ddatrys y broblem hon."
|
||||
invalid: |
|
||||
Ebost neu gyfrinair annilys.
|
||||
Wnaethoch chi archebu fel gwestai'r tro diwethaf? Hwyrach bod angen ichi greu cyfrif, neu ailosod eich cyfrinair.
|
||||
@@ -502,6 +482,7 @@ cy:
|
||||
enable_invoices?: "Galluogi Anfonebau?"
|
||||
invoice_style2?: "Defnyddiwch y model anfoneb amgen sy'n cynnwys dadansoddiad treth cyfan fesul cyfradd a gwybodaeth cyfradd dreth fesul eitem (ddim yn addas eto ar gyfer gwledydd sy'n arddangos prisiau ac eithrio treth)"
|
||||
enable_receipt_printing?: "Dangos opsiynau ar gyfer argraffu derbynebau gan ddefnyddio argraffwyr thermol yn nhrefn y cwymplen?"
|
||||
enterprise_number_required_on_invoices?: "Angen rhif y cwmni i greu anfoneb?"
|
||||
stripe_connect_settings:
|
||||
edit:
|
||||
title: "Cyswllt Stripe"
|
||||
@@ -549,8 +530,6 @@ cy:
|
||||
guest_label: "Talu fel gwestai"
|
||||
credit_owed: "Credyd yn ddyledus"
|
||||
balance_due: "Balans sy'n ddyledus"
|
||||
destroy:
|
||||
has_associated_orders: "Wedi methu ei ddileu: mae gan y cwsmer archebion cysylltiedig gyda'i siop"
|
||||
contents:
|
||||
edit:
|
||||
title: Cynnwys
|
||||
@@ -778,6 +757,9 @@ cy:
|
||||
variants_without_unit_value: "RHYBUDD: Nid oes gwerth uned i rai amrywolion"
|
||||
all: "I gyd"
|
||||
select_variant: "Dewiswch amrywiolyn"
|
||||
note:
|
||||
note_label: "Noder:"
|
||||
no_note_present: "Ni ddarparwyd nodyn."
|
||||
enterprise:
|
||||
select_outgoing_oc_products_from: Dewiswch gynnyrch OC sy'n mynd allan o
|
||||
enterprises:
|
||||
@@ -826,7 +808,9 @@ cy:
|
||||
email_address_tip: "Dangosir y cyfeiriad e-bost hwn yn eich proffil cyhoeddus"
|
||||
phone: Ffôn
|
||||
phone_placeholder: e.e. 98 7654 3210
|
||||
whatsapp_phone: Rhif ffôn WhatsApp
|
||||
whatsapp_phone_placeholder: eg. +44 7545 123123
|
||||
whatsapp_phone_tip: "Caiff y rhif ei arddangos ar eich proffil cyhoeddus i’w agor fel dolen WhatsApp."
|
||||
website: Gwefan
|
||||
website_placeholder: ee. www.truffles.co.uk
|
||||
enterprise_fees:
|
||||
@@ -1171,6 +1155,7 @@ cy:
|
||||
cancel: Canslo
|
||||
proceed: Ewch ymlaen
|
||||
status:
|
||||
undated: dim dyddiad
|
||||
upcoming: i ddod
|
||||
open: agor
|
||||
closed: ar gau
|
||||
@@ -1201,6 +1186,7 @@ cy:
|
||||
unitsize: MAINT UNEDAU
|
||||
total: CYFANSWM
|
||||
total_items: CYFANSWM EITEMAU
|
||||
total_by_customer: Cyfanswm fesul Cwsmer
|
||||
total_by_supplier: Cyfanswm fesul Cyflenwr
|
||||
supplier_totals: Cyfanswm Cylch Archebu Cyflenwyr
|
||||
supplier_totals_by_distributor: Cyfanswm Cylch Archebu Cyflenwyr fesul Dosbarthwr
|
||||
@@ -1809,6 +1795,7 @@ cy:
|
||||
order_hub_info: Gwybodaeth Hwb
|
||||
order_back_to_store: Yn ôl i'r siop
|
||||
order_back_to_cart: Yn ôl i'r basged
|
||||
order_back_to_website: Yn ôl i’r Wefan
|
||||
bom_tip: "Defnyddiwch y dudalen hon i newid nifer cynnyrch ar draws sawl archeb. Gellir hefyd dileu cynnyrch o archebion yn gyfan gwbl, pe dymunir."
|
||||
unsaved_changes_warning: "Mae newidiadau heb eu cadw yn bodoli a byddant yn cael eu colli os byddwch yn parhau."
|
||||
unsaved_changes_error: "Mae'r meysydd â ffiniau coch yn cynnwys gwallau."
|
||||
@@ -1829,13 +1816,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"
|
||||
@@ -2071,7 +2058,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"
|
||||
@@ -2204,6 +2191,8 @@ cy:
|
||||
contact_field_placeholder: "Enw Cyswllt"
|
||||
contact_field_required: "Mae angen i chi nodi prif gyswllt."
|
||||
phone_field: "Rhif ffôn"
|
||||
whatsapp_phone_field: "Rhif ffôn WhatsApp"
|
||||
whatsapp_phone_tooltip: "Caiff y rhif ei arddangos ar eich proffil cyhoeddus i’w agor fel dolen WhatsApp."
|
||||
phone_field_placeholder: "e.e. 07123123123"
|
||||
whatsapp_phone_field_placeholder: "eg. +44 7545 123123"
|
||||
type:
|
||||
@@ -3652,7 +3641,6 @@ cy:
|
||||
results_found: "Cafwyd hyd i%{number} canlyniad."
|
||||
viewing: "Yn edrych ar %{start} i %{end}."
|
||||
print_invoices: "Argraffu anfonebau"
|
||||
selected: dewiswyd
|
||||
sortable_header:
|
||||
payment_state: "Cyflwr Talu"
|
||||
shipment_state: "Sir anfon"
|
||||
@@ -3667,6 +3655,9 @@ cy:
|
||||
from: "O"
|
||||
to: "Bil i"
|
||||
shipping: "Yn anfon"
|
||||
note:
|
||||
note_label: "Noder:"
|
||||
no_note_present: "Ni ddarparwyd nodyn."
|
||||
form:
|
||||
distribution_fields:
|
||||
title: "Dosbarthiad"
|
||||
@@ -3789,7 +3780,6 @@ cy:
|
||||
paypal:
|
||||
no_payment_via_admin_backend: Ni ellir cipio taliadau Paypal yn y Swyddfa Gefn
|
||||
products:
|
||||
image_upload_error: "Nid oedd yn bosib adnabod delwedd y cynnyrch. Lanlwythwch ddelwedd mewn fformat PNG neu JPG."
|
||||
new:
|
||||
title: "Cynnyrch Newydd"
|
||||
new_product: "Cynnyrch Newydd"
|
||||
@@ -3852,6 +3842,7 @@ cy:
|
||||
back_to_users_list: "Yn ôl i'r Rhestr Defnyddwyr"
|
||||
general_settings: "Gosodiadau Cyffredinol"
|
||||
form:
|
||||
disabled: "Analluogwyd?"
|
||||
email: "E-bost"
|
||||
roles: "Rolau"
|
||||
enterprise_limit: "Uchafswm Mentrau"
|
||||
@@ -4052,6 +4043,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:
|
||||
@@ -4085,7 +4078,8 @@ cy:
|
||||
items: Eitemau
|
||||
total: Cyfanswm
|
||||
paid?: Talwyd?
|
||||
view: Gweld
|
||||
status: Statws
|
||||
cancelled: Canslwyd
|
||||
saved_cards:
|
||||
default?: Yn ddiofyn?
|
||||
delete?: Dileu?
|
||||
|
||||
@@ -35,7 +35,7 @@ de_CH:
|
||||
verification_value: "Kartenprüfnummer (3-stellig)"
|
||||
year: "Jahr"
|
||||
order_cycle:
|
||||
orders_close_at: Schließzeitpunkt
|
||||
orders_close_at: Schliesszeitpunkt
|
||||
variant_override:
|
||||
count_on_hand: "Verfügbar"
|
||||
errors:
|
||||
@@ -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öß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."
|
||||
@@ -108,7 +87,7 @@ de_CH:
|
||||
fraudulent: "Die Zahlung wurde abgelehnt, da Stripe sie als potenziell betrügerisch einstuft."
|
||||
generic_decline: "Die Karte wurde aus unbekanntem Grund abgelehnt."
|
||||
incorrect_pin: "Die eingegebene PIN ist falsch. Dieser Ablehnungscode gilt nur für Zahlungen mit einem Kartenlesegerät."
|
||||
insufficient_funds: "Die Karte ist nicht ausreichend gedeckt, um den Kaufvorgang abzuschließen."
|
||||
insufficient_funds: "Die Karte ist nicht ausreichend gedeckt, um den Kaufvorgang abzuschliessen."
|
||||
invalid_account: "Die Karte oder das dazugehörige Konto sind ungültig."
|
||||
invalid_amount: "Der Zahlungsbetrag ist ungültig oder überschreitet den zulässigen Betrag."
|
||||
invalid_pin: "Die eingegebene PIN ist falsch. Dieser Ablehnungscode gilt nur für Zahlungen mit einem Kartenlesegerät."
|
||||
@@ -549,8 +528,6 @@ de_CH:
|
||||
guest_label: "Gasteinkauf"
|
||||
credit_owed: "Geschuldetes Guthaben"
|
||||
balance_due: "Offener Betrag"
|
||||
destroy:
|
||||
has_associated_orders: "Löschen fehlgeschlagen: Der Kunde hat Bestellungen bei diesem Laden."
|
||||
contents:
|
||||
edit:
|
||||
title: Inhalt
|
||||
@@ -560,7 +537,7 @@ de_CH:
|
||||
hub_signup_page: Registrierung für Läden
|
||||
group_signup_page: Registrierung für Gruppen
|
||||
main_links: Hauptmenü-Links
|
||||
footer_and_external_links: Fußzeile und externe Links
|
||||
footer_and_external_links: Fusszeile und externe Links
|
||||
your_content: Ihr Inhalt
|
||||
user_guide: Benutzerhandbuch
|
||||
map: Karte
|
||||
@@ -812,9 +789,9 @@ de_CH:
|
||||
disabled: Deaktiviert
|
||||
business_address:
|
||||
company_legal_name: Unternehmensname
|
||||
company_placeholder: z. B. Charlies großartige Farm
|
||||
address1: Straße + Hausnummer
|
||||
address1_placeholder: z. B. Gartenstraße 123
|
||||
company_placeholder: z. B. Charlies grossartige Farm
|
||||
address1: Strasse + Hausnummer
|
||||
address1_placeholder: z. B. Gartenstrasse 123
|
||||
address2: Adresszusatz (optional)
|
||||
legal_phone_number: Telefonnummer
|
||||
phone_placeholder: "z. B. +49 40 123 456"
|
||||
@@ -909,7 +886,7 @@ de_CH:
|
||||
allow_order_changes_false: "Kunden können Bestellungen nicht ändern oder stornieren "
|
||||
allow_order_changes_true: "Kunden können Bestellungen ändern oder stornieren, solange der Bestellzyklus geöffnet ist"
|
||||
enable_subscriptions: "Abonnements"
|
||||
enable_subscriptions_tip: "Aktivieren Sie Abonnements, um Kunden eine automatische, regelmäßige Bestellung Ihrer Produkte einzurichten. Dies kann z. B. das Abonnement einer wöchentlichen Gemüsekiste sein."
|
||||
enable_subscriptions_tip: "Aktivieren Sie Abonnements, um Kunden eine automatische, regelmässige Bestellung Ihrer Produkte einzurichten. Dies kann z. B. das Abonnement einer wöchentlichen Gemüsekiste sein."
|
||||
enable_subscriptions_false: "deaktiviert"
|
||||
enable_subscriptions_true: "aktiviert"
|
||||
customer_names_in_reports: "Kundennamen in Berichten anzeigen"
|
||||
@@ -918,7 +895,7 @@ de_CH:
|
||||
customer_names_true: "aktiviert"
|
||||
shopfront_message: "'Willkommen'-Nachricht im Laden"
|
||||
shopfront_message_placeholder: >
|
||||
Eine optionale Nachricht, um Kunden willkommen zu heißen und zu erklären,
|
||||
Eine optionale Nachricht, um Kunden willkommen zu heissen und zu erklären,
|
||||
wie sie bei Ihnen einkaufen können. Wenn hier Text eingegeben wird,
|
||||
wird dieser auf einer Startseite in Ihrem Laden angezeigt, wenn Kunden
|
||||
ihn zum ersten Mal besuchen.
|
||||
@@ -933,7 +910,7 @@ de_CH:
|
||||
shopfront_category_ordering: "Sortierung der Produktkategorien im Laden"
|
||||
shopfront_category_ordering_note: "(von oben nach unten)"
|
||||
open_date: "Öffnungszeitpunkt"
|
||||
close_date: "Schließzeitpunkt"
|
||||
close_date: "Schliesszeitpunkt"
|
||||
display_ordering_in_shopfront: "Reihenfolge der Anzeige im Online-Shop:"
|
||||
shopfront_sort_by_category: "Nach Kategorie"
|
||||
shopfront_sort_by_producer: "Nach Produzent"
|
||||
@@ -1113,7 +1090,7 @@ de_CH:
|
||||
add_distributor: 'Verteilstelle hinzufügen'
|
||||
advanced_settings:
|
||||
automatic_notifications: Automatische Benachrichtigungen
|
||||
automatic_notifications_tip: Benachrichtigen Sie die Produzenten automatisch per E-Mail über in diesem Bestellzyklus erhaltene Bestellungen, wenn der Bestellzyklus schließt.
|
||||
automatic_notifications_tip: Benachrichtigen Sie die Produzenten automatisch per E-Mail über in diesem Bestellzyklus erhaltene Bestellungen, wenn der Bestellzyklus schliesst.
|
||||
title: Erweiterte Einstellungen
|
||||
choose_product_tip: Sie können die eingehenden und ausgehenden Produkte auf den Katalog nur von %{inventory} beschränken.
|
||||
preferred_product_selection_from_coordinator_inventory_only_here: Nur vom Katalog des Koordinators
|
||||
@@ -1144,12 +1121,12 @@ de_CH:
|
||||
schedule: Zeitplan
|
||||
schedules: Zeitpläne
|
||||
new_schedule: Neuer Zeitplan
|
||||
new_schedule_tooltip: Regelmäßigkeit, mit der ein Abonnement ausgeführt wird (z. B. wöchentlich, monatlich).
|
||||
new_schedule_tooltip: Regelmässigkeit, mit der ein Abonnement ausgeführt wird (z. B. wöchentlich, monatlich).
|
||||
name_and_timing_form:
|
||||
name: Name des Bestellzyklus
|
||||
orders_open: Bestellzyklus öffnet
|
||||
coordinator: Koordinator
|
||||
orders_close: Bestellzyklus schließt
|
||||
orders_close: Bestellzyklus schliesst
|
||||
row:
|
||||
suppliers: Lieferanten
|
||||
distributors: Verteilstellen
|
||||
@@ -1163,7 +1140,7 @@ de_CH:
|
||||
fees: Gebühren
|
||||
tags: Stichwörter
|
||||
destroy_errors:
|
||||
orders_present: Dieser Bestellzyklus wurde von einem Kunden ausgewählt und kann nicht gelöscht werden. Um weitere Verwendung zu verhindern, können Sie ihn stattdessen schließen.
|
||||
orders_present: Dieser Bestellzyklus wurde von einem Kunden ausgewählt und kann nicht gelöscht werden. Um weitere Verwendung zu verhindern, können Sie ihn stattdessen schliessen.
|
||||
schedule_present: Dieser Bestellzyklus ist mit einem Zeitplan verknüpft und kann nicht gelöscht werden. Bitte heben Sie zuerst die Verknüpfung auf oder löschen Sie den Zeitplan.
|
||||
bulk_update:
|
||||
no_data: Hm, etwas ist schief gelaufen. Keine Bestellzyklusdaten gefunden.
|
||||
@@ -1429,7 +1406,7 @@ de_CH:
|
||||
edit_cart: "Warenkorb bearbeiten"
|
||||
items_in_cart_singular: "%{num} Artikel in Ihrem Warenkorb"
|
||||
items_in_cart_plural: "%{num} Artikel in Ihrem Warenkorb"
|
||||
close: "Schließen"
|
||||
close: "Schliessen"
|
||||
cart_empty: "Ihr Warenkorb ist leer."
|
||||
take_me_shopping: "Jetzt einkaufen!"
|
||||
signed_in:
|
||||
@@ -1533,7 +1510,7 @@ de_CH:
|
||||
phone: Telefonnummer
|
||||
next: Weiter
|
||||
address: Adresse
|
||||
address_placeholder: z. B. Gartenstraße 123
|
||||
address_placeholder: z. B. Gartenstrasse 123
|
||||
address2: Adresszusatz (optional)
|
||||
city: Ort
|
||||
city_placeholder: z. B. Nordwestheim
|
||||
@@ -1629,7 +1606,7 @@ de_CH:
|
||||
statistics_cookies_matomo_optout: "Möchten Sie Matomo Analytics deaktivieren? Wir sammeln keine persönlichen Daten und Matomo hilft uns, unseren Service zu verbessern, aber wir respektieren Ihre Wahl. :-)"
|
||||
cookie_matomo_basics_desc: "Matomo First Party Cookies zum Sammeln von Statistiken."
|
||||
cookie_matomo_heatmap_desc: "Matomo Heatmap & Session Aufnahme-Cookie."
|
||||
cookie_matomo_ignore_desc: "Cookie, um Benutzer von der Verfolgung im Internet auszuschließen."
|
||||
cookie_matomo_ignore_desc: "Cookie, um Benutzer von der Verfolgung im Internet auszuschliessen."
|
||||
disabling_cookies_header: "Warnung zum Deaktivieren von Cookies"
|
||||
disabling_cookies_desc: "Als Nutzer können Sie Cookies von Open Food Schweiz oder einer anderen Website immer zulassen, blockieren oder löschen, indem Sie die Einstellungen Ihres Browsers nutzen. Dies funktioniert in jedem Browser anders. Schauen Sie unter folgenden Links nach für genauere Beschreibungen:"
|
||||
disabling_cookies_firefox_link: "https://support.mozilla.org/de/kb/verbesserter-schutz-aktivitatenverfolgung-desktop"
|
||||
@@ -1648,7 +1625,7 @@ de_CH:
|
||||
brandstory_headline: "Regionale Lebensmittel direkt online kaufen"
|
||||
brandstory_intro: "Produkte von Produzenten vor Ort finden, online bestellen und abholen oder liefern lassen.\nWerden Sie Teil einer Bewegung, die mit jedem Einkauf ein Zeichen setzt für hochwertige regionale Produkte, faire Preise, Nachhaltigkeit und Transparenz. Helfen Sie uns bei ..."
|
||||
brandstory_part1: "... einem Neuanfang. Nehmen Sie Anonymität und Ausbeutung von Mensch, Tier und Umwelt in der Lebensmittelindustrie nicht länger hin. Lesen Sie die Geschichten stolzer Landwirte, Gemüsegärtner und Züchter hinter den Produkten. Sehen Sie sich an, welche Aufschläge Händler berechnen um faire Preise zu erhalten und zu zahlen. Lernen Sie die Menschen kennen, die mit ihrer täglichen Arbeit Ihre regionalen und saisonalen Lebensmittel herstellen."
|
||||
brandstory_part2: "Kaufen Sie ein in Hofläden, auf Bauernmärkten, in Food-Hubs oder schließen Sie sich zu Einkaufsgemeinschaften, Kooperativen, Genossenschaften oder einer solidarischen Landwirtschaft zusammen."
|
||||
brandstory_part2: "Kaufen Sie ein in Hofläden, auf Bauernmärkten, in Food-Hubs oder schliessen Sie sich zu Einkaufsgemeinschaften, Kooperativen, Genossenschaften oder einer solidarischen Landwirtschaft zusammen."
|
||||
brandstory_part3: "Die Anbieter bilden gemeinsam ein regionales Netzwerk, in dem sich Käufer und Verkäufer wieder kennen und mit Vertrauen wertschätzend umgegangen wird."
|
||||
brandstory_part4: "Der Programmcode dieser Internet-Plattform ist öffentlich frei verfügbar (Open Source), sie gehört also auch Ihnen und ist unverkäuflich. Alle Einnahmen werden wieder in die Weiterentwicklung des Netzwerks investiert!"
|
||||
brandstory_part5_strong: "Das ist das Open Food Schweiz."
|
||||
@@ -1657,7 +1634,7 @@ de_CH:
|
||||
system_step1: "1. Wo kann ich regionale und saisonale Produkte kaufen?"
|
||||
system_step1_text: "Auf der Seite \"Einkaufen\" finden Sie die Liste der Läden in Ihrer Nähe. Sie können nach einem Ort suchen oder die Liste nach Kategorien, Lieferoptionen oder Produkteigenschaften filtern. Klicken Sie auf den Namen eines Ladens, um dort einzukaufen.\nAlternativ verwenden Sie die Seite \"Karte\" und finden Sie Produzenten und Läden in Ihrer Region."
|
||||
system_step2: "2. Welche regionalen Lebensmittel kann ich online kaufen?"
|
||||
system_step2_text: "Im Online-Shop des Ladens finden Sie ein großes Sortiment regionaler und saisonaler Produkte. Von Obst und Gemüse über Eier, Milch, Käse, Wurst und Fleisch bis hin zu Backwaren, Süßigkeiten und Fertiggerichten werden Sie fündig. Nutzen Sie die Suche oder die Filter nach Kategorien und Eigenschaften, wie bio, unverpackt oder fair gehandelt."
|
||||
system_step2_text: "Im Online-Shop des Ladens finden Sie ein grosses Sortiment regionaler und saisonaler Produkte. Von Obst und Gemüse über Eier, Milch, Käse, Wurst und Fleisch bis hin zu Backwaren, Süssigkeiten und Fertiggerichten werden Sie fündig. Nutzen Sie die Suche oder die Filter nach Kategorien und Eigenschaften, wie bio, unverpackt oder fair gehandelt."
|
||||
system_step3: "3. Wie kommen regionale Lebensmittel zu mir nach Hause?"
|
||||
system_step3_text: "Jeder Laden kann seine Lieferoptionen selbst festlegen. Viele bieten einen Lieferservice an, oft ist auch die Abholung vor Ort oder an einer Abholstation möglich. Wählen Sie die gewünschte Option einfach beim Abschluss der Bestellung aus. Im Open Food Network kennt man sich - auch das Vereinbaren eines Ablageortes lässt sich sicher organisieren. "
|
||||
cta_headline: "Machen Sie die Welt mit Ihrem Einkauf ein kleines bisschen besser."
|
||||
@@ -1717,8 +1694,8 @@ de_CH:
|
||||
title: Rechnungsadresse
|
||||
address:
|
||||
address1:
|
||||
label: Straße + Hausnummer
|
||||
placeholder: z. B. Gartenstraße 123
|
||||
label: Strasse + Hausnummer
|
||||
placeholder: z. B. Gartenstrasse 123
|
||||
address2:
|
||||
label: Adresszusatz (optional)
|
||||
placeholder: z. B. c/o Familie Müller
|
||||
@@ -1827,13 +1804,13 @@ de_CH:
|
||||
email_confirmation_notice_unexpected: "Sie haben diese Nachricht erhalten, weil Sie sich im Open Food Network angemeldet haben oder von einer Person dazu eingeladen wurden. Wenn Sie nicht verstehen, warum Sie diese E-Mail erhalten, schreiben Sie bitte an %{contact}."
|
||||
email_social: "Verbinden Sie sich mit uns:"
|
||||
email_contact: "Schreiben Sie uns eine E-Mail:"
|
||||
email_signoff: "Viele Grüße,"
|
||||
email_signoff: "Viele Grüsse,"
|
||||
email_signature: "das Team des Open Food Network"
|
||||
email_confirm_customer_greeting: "Hallo %{name},"
|
||||
email_confirm_customer_intro_html: "vielen Dank für Ihren Einkauf bei <strong>%{distributor}</strong>!"
|
||||
email_confirm_customer_number_html: "<strong>Bestellbestätigung #%{number}</strong>"
|
||||
email_confirm_customer_details_html: "Nachfolgend finden Sie Ihre <strong>Bestelldaten</strong> bei <strong>%{distributor}</strong>:"
|
||||
email_confirm_customer_signoff: "Viele Grüße,"
|
||||
email_confirm_customer_signoff: "Viele Grüsse,"
|
||||
email_confirm_shop_greeting: "Hallo %{name},"
|
||||
email_confirm_shop_order_html: "gut gemacht! <strong>%{distributor}</strong> hat eine neue Bestellung erhalten!"
|
||||
email_confirm_shop_number_html: "<strong>Bestellbestätigung #%{number}</strong>"
|
||||
@@ -1854,7 +1831,7 @@ de_CH:
|
||||
email_so_placement_changes: "Leider waren nicht alle von Ihnen bestellten Produkte verfügbar. Die von Ihnen gewünschten Originalmengen sind unten durchgestrichen."
|
||||
email_so_payment_success_intro_html: "Es wurde eine automatische Zahlung für Ihre Bestellung bei <strong>%{distributor}</strong> vorgenommen."
|
||||
email_so_placement_explainer_html: "Diese Bestellung wurde automatisch für Sie erstellt."
|
||||
email_so_edit_true_html: "Sie können <a href='%{order_url}'>Änderungen vornehmen</a>, bis Bestellungen am %{orders_close_at} schließen."
|
||||
email_so_edit_true_html: "Sie können <a href='%{order_url}'>Änderungen vornehmen</a>, bis Bestellungen am %{orders_close_at} schliessen."
|
||||
email_so_edit_false_html: "Sie können jederzeit <a href='%{order_url}'>Details zu dieser Bestellung anzeigen</a>."
|
||||
email_so_contact_distributor_html: "Wenn Sie Fragen haben, können Sie sich mit <strong>%{distributor}</strong> über %{email} in Verbindung setzen."
|
||||
email_so_contact_distributor_to_change_order_html: "Diese Bestellung wurde automatisch für Sie erstellt. Sie können Änderungen vornehmen, bis die Bestellungen am %{orders_close_at} geschlossen werden, indem Sie <strong>%{distributor}</strong> über %{email} kontaktieren."
|
||||
@@ -1878,7 +1855,7 @@ de_CH:
|
||||
email_signup_welcome: "Willkommen im Open Food Network!"
|
||||
email_signup_confirmed_email: "Vielen Dank für die Bestätigung Ihrer E-Mail-Adresse."
|
||||
email_signup_shop_html: "Sie können sich jetzt unter %{link} einloggen."
|
||||
email_signup_text: "Danke, dass Sie dem Netzwerk beigetreten sind. Wenn Sie ein Kunde sind, freuen wir uns, Ihnen viele fantastische Landwirte, wunderbare Läden und leckeres Essen vorzustellen! Wenn Sie ein Produzent oder ein Lebensmittelunternehmer sind, freuen wir uns, Sie als Teil des Netzwerks zu begrüßen."
|
||||
email_signup_text: "Danke, dass Sie dem Netzwerk beigetreten sind. Wenn Sie ein Kunde sind, freuen wir uns, Ihnen viele fantastische Landwirte, wunderbare Läden und leckeres Essen vorzustellen! Wenn Sie ein Produzent oder ein Lebensmittelunternehmer sind, freuen wir uns, Sie als Teil des Netzwerks zu begrüssen."
|
||||
email_signup_help_html: "Wir freuen uns über Ihre Fragen und Rückmeldungen. Schreiben Sie uns gerne eine E-Mail an %{email}."
|
||||
invite_email:
|
||||
greeting: "Hallo!"
|
||||
@@ -1890,7 +1867,7 @@ de_CH:
|
||||
producer_mail_text_before: "wir informieren über den Stand des Bestellzyklus, bereit am:"
|
||||
producer_mail_order_text: "Nachfolgend finden Sie eine Zusammenfassung der Bestellungen Ihrer Produkte:"
|
||||
producer_mail_delivery_instructions: "Informationen zur Abholung/Lieferung:"
|
||||
producer_mail_signoff: "Viele Grüße,"
|
||||
producer_mail_signoff: "Viele Grüsse,"
|
||||
producer_mail_order_customer_text: "Nachfolgend finden Sie eine Zusammenfassung der Bestellungen, gruppiert nach Kunden:"
|
||||
shopping_oc_closed: Bestellzyklen sind derzeit geschlossen!
|
||||
shopping_oc_closed_description: "Bitte warten Sie, bis der nächste Bestellzyklus öffnet (oder kontaktieren Sie uns direkt, um zu erfahren, ob wir verspätete Bestellungen annehmen können)."
|
||||
@@ -1981,13 +1958,13 @@ de_CH:
|
||||
groups_contact_email: Schreiben Sie uns eine E-Mail
|
||||
groups_contact_website: Besuchen Sie unsere Homepage
|
||||
groups_contact_facebook: Folgen Sie uns auf Facebook
|
||||
groups_signup_title: Schließen Sie sich mit anderen Produzenten und Läden zu einer Gruppe zusammen
|
||||
groups_signup_title: Schliessen Sie sich mit anderen Produzenten und Läden zu einer Gruppe zusammen
|
||||
groups_signup_headline: Registrierung einer Gruppe
|
||||
groups_signup_intro: "Wir sind eine großartige Plattform für kollaboratives Marketing - der einfachste Weg für die Mitglieder Ihrer Gruppe neue Märkte zu erreichen. Wir sind gemeinnützig, erschwinglich und transparent."
|
||||
groups_signup_intro: "Wir sind eine grossartige Plattform für kollaboratives Marketing - der einfachste Weg für die Mitglieder Ihrer Gruppe neue Märkte zu erreichen. Wir sind gemeinnützig, erschwinglich und transparent."
|
||||
groups_signup_email: Schreiben Sie uns eine E-Mail
|
||||
groups_signup_motivation1: Wir verändern Lebensmittelsysteme fair.
|
||||
groups_signup_motivation2: Deshalb sind wir jeden Tag aufgestanden. Wir sind eine globale Non-Profit-Organisation, die auf Open-Source-Code basiert. Wir spielen fair. Sie können uns immer vertrauen.
|
||||
groups_signup_motivation3: Wir wissen, dass Sie große Ideen haben und wir helfen wollen. Wir teilen unser Wissen, Netzwerke und Ressourcen. Wir wissen, dass Isolation keine Veränderung verursacht, also werden wir mit Ihnen zusammenarbeiten.
|
||||
groups_signup_motivation3: Wir wissen, dass Sie grosse Ideen haben und wir helfen wollen. Wir teilen unser Wissen, Netzwerke und Ressourcen. Wir wissen, dass Isolation keine Veränderung verursacht, also werden wir mit Ihnen zusammenarbeiten.
|
||||
groups_signup_motivation4: Wir treffen Sie, wo Sie sind.
|
||||
groups_signup_motivation5: Sie könnten ein Zusammenschluss von Hubs, Produzenten oder Verteilstellen sein, eine Industrieorganisation oder eine Lokalbehörde.
|
||||
groups_signup_motivation6: Was auch immer Ihre Rolle in Ihrer lokalen Nahrungsmittelbewegung ist, wir sind bereit zu helfen. Wie auch immer Sie sich fragen, wie Open Food Schweiz in Ihrem Teil der Welt aussehen würde oder wird, lassen Sie uns das Gespräch beginnen.
|
||||
@@ -2052,7 +2029,7 @@ de_CH:
|
||||
shops_signup_pricing: Unternehmenskonten
|
||||
shops_signup_stories: Geschichten unserer Hubs
|
||||
shops_signup_help: Wir sind bereit zu helfen.
|
||||
shops_signup_help_text: Du brauchst eine bessere Rendite. Sie brauchen neue Käufer und Logistikpartner. Sie müssen Ihre Geschichte über den Großhandel, den Einzelhandel und den Küchentisch erzählen.
|
||||
shops_signup_help_text: Du brauchst eine bessere Rendite. Sie brauchen neue Käufer und Logistikpartner. Sie müssen Ihre Geschichte über den Grosshandel, den Einzelhandel und den Küchentisch erzählen.
|
||||
shops_signup_detail: Weitere Details folgen.
|
||||
orders: "Bestellungen"
|
||||
orders_fees: "Gebühren ..."
|
||||
@@ -2092,11 +2069,11 @@ de_CH:
|
||||
products_cart_distributor_choice: "Verteilstelle Ihrer Bestellung:"
|
||||
products_cart_distributor_change: "Die Verteilstelle für diese Bestellung wird in %{name} geändert, wenn Sie dieses Produkt zu Ihrem Warenkorb hinzufügen."
|
||||
products_cart_distributor_is: "Die Verteilstelle dieser Bestellung ist %{name}."
|
||||
products_distributor_error: "Bitte schließen Sie Ihre Bestellung bei %{link} ab, bevor Sie bei einem anderen Laden einkaufen."
|
||||
products_distributor_error: "Bitte schliessen Sie Ihre Bestellung bei %{link} ab, bevor Sie bei einem anderen Laden einkaufen."
|
||||
products_oc: "Bestellzyklus Ihrer Bestellung:"
|
||||
products_oc_change: "Der Bestellzyklus für diese Bestellung wird in %{name} geändert, wenn Sie dieses Produkt zu Ihrem Warenkorb hinzufügen."
|
||||
products_oc_is: "Der Bestellzyklus dieser Bestellung lautet %{name}."
|
||||
products_oc_error: "Bitte schließen Sie Ihre Bestellung bei %{link} ab, bevor Sie in einem anderen Bestellzyklus einkaufen."
|
||||
products_oc_error: "Bitte schliessen Sie Ihre Bestellung bei %{link} ab, bevor Sie in einem anderen Bestellzyklus einkaufen."
|
||||
products_oc_current: "Ihr aktueller Bestellzyklus"
|
||||
products_max_quantity: Max Menge
|
||||
products_distributor: Verteilstelle
|
||||
@@ -2105,7 +2082,7 @@ de_CH:
|
||||
remember_me: Eingeloggt bleiben
|
||||
are_you_sure: "Sind Sie sicher?"
|
||||
orders_open: "Geöffnet"
|
||||
closing: "Schließt"
|
||||
closing: "Schliesst"
|
||||
going_back_to_home_page: "Weiterleitung zur Startseite"
|
||||
creating: Erstellung
|
||||
updating: Aktualisierung
|
||||
@@ -2113,7 +2090,7 @@ de_CH:
|
||||
failed_to_create_enterprise_unknown: "Fehler beim Erstellen Ihres Unternehmens.\nBitte vergewissern Sie sich, dass alle Felder vollständig ausgefüllt sind."
|
||||
failed_to_update_enterprise_unknown: "Fehler beim Aktualisieren Ihres Unternehmens.\nBitte vergewissern Sie sich, dass alle Felder vollständig ausgefüllt sind."
|
||||
enterprise_confirm_delete_message: "Dadurch wird auch das von diesem Unternehmen bereitgestellte %{product} gelöscht. Sind Sie sicher, dass Sie das möchten?"
|
||||
order_not_saved_yet: "Ihre Bestellung wurde noch nicht gespeichert. Geben Sie uns ein paar Sekunden, um dies abzuschließen!"
|
||||
order_not_saved_yet: "Ihre Bestellung wurde noch nicht gespeichert. Geben Sie uns ein paar Sekunden, um dies abzuschliessen!"
|
||||
filter_by: "Filtern nach"
|
||||
hide_filters: "Filter ausblenden"
|
||||
one_filter_applied: "1 Filter angewendet"
|
||||
@@ -2177,11 +2154,11 @@ de_CH:
|
||||
producer: "Nennen Sie uns zunächst bitte den Namen und die Adresse Ihres Betriebs."
|
||||
enterprise_name_field: "Unternehmensname:"
|
||||
producer_name_field: "Name des Betriebs:"
|
||||
producer_name_field_placeholder: "z. B. Charlies großartige Farm"
|
||||
producer_name_field_placeholder: "z. B. Charlies grossartige Farm"
|
||||
producer_name_field_error: "Bitte wählen Sie einen eindeutigen Namen für Ihr Unternehmen."
|
||||
address1_field: "Straße + Hausnummer:"
|
||||
address1_field_placeholder: "z. B. Gartenstraße 123"
|
||||
address1_field_error: "Bitte geben Sie eine Straße und Hausnummer ein."
|
||||
address1_field: "Strasse + Hausnummer:"
|
||||
address1_field_placeholder: "z. B. Gartenstrasse 123"
|
||||
address1_field_error: "Bitte geben Sie eine Strasse und Hausnummer ein."
|
||||
address2_field: "Adresszusatz (optional):"
|
||||
suburb_field: "Ort:"
|
||||
suburb_field_placeholder: "z. B. Nordwestheim"
|
||||
@@ -2195,7 +2172,7 @@ de_CH:
|
||||
country_field_error: "Bitte wählen Sie das Land aus."
|
||||
map_location: "Position auf der Karte"
|
||||
locate_address: "Adresse auf der Karte zeigen"
|
||||
drag_pin: "Falls nötig, korrigieren Sie die Position Ihres Unternehmens, indem Sie die Markierung an den richtigen Ort ziehen. Bestätigen Sie dies anschließend durch das Setzen des Häkchens unter der Karte und klicken Sie dann ganz unten auf \"Weiter\"."
|
||||
drag_pin: "Falls nötig, korrigieren Sie die Position Ihres Unternehmens, indem Sie die Markierung an den richtigen Ort ziehen. Bestätigen Sie dies anschliessend durch das Setzen des Häkchens unter der Karte und klicken Sie dann ganz unten auf \"Weiter\"."
|
||||
confirm_address: "Ich bestätige, dass die auf der Karte angegebene Position des Unternehmens korrekt ist."
|
||||
drag_map_marker: "Die korrekte Position Ihres Unternehmens auf der Karte ist wichtig, damit Ihre Kunden Sie möglichst einfach finden können."
|
||||
contact:
|
||||
@@ -2214,7 +2191,7 @@ de_CH:
|
||||
no_producer: "Nein, es ist kein Produzent."
|
||||
producer_field_error: "Bitte wählen Sie: Ist das Unternehmen ein Produzent?"
|
||||
yes_producer_help: "Produzenten stellen leckere Lebensmittel oder Getränke her. Sie sind ein Produzent, wenn Sie anbauen, brauen, backen, fermentieren, melken oder sonst wie Lebenmittel produzieren."
|
||||
no_producer_help: "Wenn Sie kein Produzent sind, sind Sie wahrscheinlich jemand, der Lebensmittel verkauft und verteilt. Sie könnten ein Food Hub, eine Lebensmittelkooperative, eine Einkaufsgemeinschaft, ein Einzelhändler, Hofladen, Großhändler oder Vergleichbares sein."
|
||||
no_producer_help: "Wenn Sie kein Produzent sind, sind Sie wahrscheinlich jemand, der Lebensmittel verkauft und verteilt. Sie könnten ein Food Hub, eine Lebensmittelkooperative, eine Einkaufsgemeinschaft, ein Einzelhändler, Hofladen, Grosshändler oder Vergleichbares sein."
|
||||
create_profile: "Profil erstellen"
|
||||
about:
|
||||
title: "Über uns"
|
||||
@@ -2249,7 +2226,7 @@ de_CH:
|
||||
logo_placeholder: "Ihr Logo wird hier zur Überprüfung angezeigt, sobald es hochgeladen wurde."
|
||||
promo:
|
||||
select_promo_image: "Schritt 3: Laden Sie ein Hintergrundbild hoch (empfohlen)"
|
||||
promo_image_tip: "Tipp: Die als Banner dargestellte bevorzugte Größe beträgt 1200 × 260 Pixel."
|
||||
promo_image_tip: "Tipp: Die als Banner dargestellte bevorzugte Grösse beträgt 1200 × 260 Pixel."
|
||||
promo_image_label: "Bilddatei auswählen"
|
||||
promo_image_drag: "Ziehen Sie Ihr Bild hierher."
|
||||
review_promo_image: "Schritt 4: Überprüfen Sie Ihr Hintergrundbild"
|
||||
@@ -2337,7 +2314,7 @@ de_CH:
|
||||
admin_enterprise_groups_data_powertip_promo_image: "Dieses Bild wird oben im Gruppenprofil angezeigt."
|
||||
admin_enterprise_groups_contact: "Kontakt"
|
||||
admin_enterprise_groups_contact_phone_placeholder: "z. B. +40 40 123456"
|
||||
admin_enterprise_groups_contact_address1_placeholder: "z. B. Gartenstraße 123"
|
||||
admin_enterprise_groups_contact_address1_placeholder: "z. B. Gartenstrasse 123"
|
||||
admin_enterprise_groups_contact_city: "Ort"
|
||||
admin_enterprise_groups_contact_city_placeholder: "z. B. Nordwestheim"
|
||||
admin_enterprise_groups_contact_zipcode: "Postleitzahl"
|
||||
@@ -2349,7 +2326,7 @@ de_CH:
|
||||
admin_enterprise_groups_web_website_placeholder: "z. B. www.truffles.com"
|
||||
admin_order_cycles: "Bestellzyklen verwalten"
|
||||
open: "Öffnet"
|
||||
close: "Schließen"
|
||||
close: "Schliessen"
|
||||
create: "Neu"
|
||||
search: "Suche"
|
||||
supplier: "Lieferant"
|
||||
@@ -2433,7 +2410,7 @@ de_CH:
|
||||
change_package: "Paket ändern"
|
||||
spree_admin_single_enterprise_hint: "Tipp: Damit andere Nutzer Sie finden können, aktivieren Sie Ihre Sichtbarkeit unter:"
|
||||
spree_admin_eg_pickup_from_school: "z. B. \"Abholung von der Grundschule\""
|
||||
spree_admin_eg_collect_your_order: "z. B. 'Bitte holen Sie Ihre Bestellung in der Gartenstraße 123 in 30701 Nordwestheim ab.'"
|
||||
spree_admin_eg_collect_your_order: "z. B. 'Bitte holen Sie Ihre Bestellung in der Gartenstrasse 123 in 30701 Nordwestheim ab.'"
|
||||
spree_classification_primary_taxon_error: "Kategorie %{taxon} ist die primäre Kategorie von %{product} und kann nicht gelöscht werden."
|
||||
spree_order_availability_error: "Verteilstelle oder Bestellzyklus kann die Produkte in Ihrem Warenkorb nicht liefern"
|
||||
spree_order_populator_error: "Diese Verteilstelle oder dieser Bestellzyklus kann nicht alle Produkte aus Ihrem Warenkorb liefern. Bitte ändern Sie Ihre Auswahl."
|
||||
@@ -2526,15 +2503,15 @@ de_CH:
|
||||
report_header_shipping: Lieferung
|
||||
report_header_shipping_method: Lieferoption
|
||||
report_header_shipping_instructions: Informationen zur Lieferung
|
||||
report_header_ship_street: Lieferstraße
|
||||
report_header_ship_street: Lieferstrasse
|
||||
report_header_ship_street_2: Lieferadresszusatz
|
||||
report_header_ship_city: Lieferstadt
|
||||
report_header_ship_postcode: Lieferpostleitzahl
|
||||
report_header_ship_state: Lieferbundesland
|
||||
report_header_billing_street: Rechnungsstraße
|
||||
report_header_billing_street: Rechnungsstrasse
|
||||
report_header_billing_street_2: Rechnungsadresszusatz
|
||||
report_header_billing_street_3: Rechnungsstraße 3
|
||||
report_header_billing_street_4: Rechnungsstraße 4
|
||||
report_header_billing_street_3: Rechnungsstrasse 3
|
||||
report_header_billing_street_4: Rechnungsstrasse 4
|
||||
report_header_billing_city: Rechnungsstadt
|
||||
report_header_billing_postcode: Rechnungspostleitzahl
|
||||
report_header_billing_state: Rechnungsbundesland
|
||||
@@ -2759,14 +2736,14 @@ de_CH:
|
||||
cart:
|
||||
add_to_cart_failed: >
|
||||
Beim Hinzufügen dieses Produkts zum Warenkorb ist ein Fehler aufgetreten.
|
||||
Möglicherweise ist es nicht mehr verfügbar oder der Laden schließt gerade.
|
||||
Möglicherweise ist es nicht mehr verfügbar oder der Laden schliesst gerade.
|
||||
admin:
|
||||
unit_price_tooltip: "Grundpreis: Er ermöglicht einen einfachen Preisvergleich von Produkten, unabhängig von Packungsgröße und -gewicht. Der im Online-Shop angezeigte Grundpreis kann ggf. aufgrund hinzukommender Gebühren abweichen."
|
||||
unit_price_tooltip: "Grundpreis: Er ermöglicht einen einfachen Preisvergleich von Produkten, unabhängig von Packungsgrösse und -gewicht. Der im Online-Shop angezeigte Grundpreis kann ggf. aufgrund hinzukommender Gebühren abweichen."
|
||||
enterprise_limit_reached: "Sie haben die maximale Anzahl der Unternehmen pro Konto erreicht. Schreiben Sie an %{contact_email}, wenn Sie das Limit erhöhen möchten."
|
||||
deleting_item_will_cancel_order: "Das Löschen dieses Produkts führt zu einer oder mehreren leeren Bestellungen, die daher automatisch storniert werden. Möchten Sie fortfahren?"
|
||||
modals:
|
||||
got_it: "Verstanden"
|
||||
close: "Schließen"
|
||||
close: "Schliessen"
|
||||
continue: "Weiter"
|
||||
invite: "Einladen"
|
||||
invite_title: "Geben Sie die E-Mail-Adresse eines nicht registrierten Benutzers ein, um dieses Unternehmen zu verwalten."
|
||||
@@ -2779,7 +2756,7 @@ de_CH:
|
||||
Produkte und Bestellzyklen sein.
|
||||
by_default_rules: "'Standardregeln'"
|
||||
by_default_rules_text: >
|
||||
Mit 'Standardregeln' können Sie Elemente verbergen, so dass sie standardmäßig
|
||||
Mit 'Standardregeln' können Sie Elemente verbergen, so dass sie standardmässig
|
||||
nicht sichtbar sind. Durch die Verwendung von 'Regeln für Kunden mit
|
||||
Stichwort', können diese Elemente für bestimmte Kunden wieder angezeigt
|
||||
werden.
|
||||
@@ -2790,7 +2767,7 @@ de_CH:
|
||||
überschreiben und Elemente für bestimmte Kunden wieder anzeigen.
|
||||
terms_and_conditions_info:
|
||||
title: "Allgemeine Geschäftsbedingungen hochladen"
|
||||
message_1: "Allgemeine Geschäftsbedingungen sind der Vertrag zwischen Ihnen (dem Verkäufer) und dem Käufer. Wenn Sie hier eine Datei hochladen, müssen Käufer Ihren Allgemeinen Geschäftsbedingungen zustimmen, um die Kaufabwicklung abzuschließen. Für den Käufer wird dies als Kontrollkästchen an der Kasse angezeigt, das aktiviert werden muss, um mit der Bezahlung fortzufahren. Wir empfehlen Ihnen dringend, Allgemeine Geschäftsbedingungen in Übereinstimmung mit den nationalen Gesetzen hochzuladen."
|
||||
message_1: "Allgemeine Geschäftsbedingungen sind der Vertrag zwischen Ihnen (dem Verkäufer) und dem Käufer. Wenn Sie hier eine Datei hochladen, müssen Käufer Ihren Allgemeinen Geschäftsbedingungen zustimmen, um die Kaufabwicklung abzuschliessen. Für den Käufer wird dies als Kontrollkästchen an der Kasse angezeigt, das aktiviert werden muss, um mit der Bezahlung fortzufahren. Wir empfehlen Ihnen dringend, Allgemeine Geschäftsbedingungen in Übereinstimmung mit den nationalen Gesetzen hochzuladen."
|
||||
message_2: "Käufer müssen den Allgemeinen Geschäftsbedingungen nur einmal zustimmen. Wenn Sie jedoch Ihre Allgemeinen Geschäftsbedingungen ändern, müssen Käufer diesen erneut zustimmen, bevor sie zur Kasse gehen können."
|
||||
terms_and_conditions_warning:
|
||||
title: "Allgemeine Geschäftsbedingungen hochladen"
|
||||
@@ -2925,7 +2902,7 @@ de_CH:
|
||||
compiling_invoices: "Rechnungen werden erstellt ..."
|
||||
bulk_invoice_created: "Rechnungen wurden erstellt."
|
||||
bulk_invoice_failed: "Fehler beim Erstellen der Rechnungen."
|
||||
please_wait: "Bitte warten Sie, bis die pdf-Datei fertig ist, bevor Sie dieses Fenster schließen."
|
||||
please_wait: "Bitte warten Sie, bis die pdf-Datei fertig ist, bevor Sie dieses Fenster schliessen."
|
||||
order_state:
|
||||
address: "Adresse"
|
||||
adjustments: "Anpassungen"
|
||||
@@ -3023,7 +3000,7 @@ de_CH:
|
||||
min_quantity: "Minimale Menge"
|
||||
max_quantity: "Maximale Menge"
|
||||
price_breakdown: "Preisaufschlüsselung"
|
||||
unit_price_tooltip: "Grundpreis: Er ermöglicht einen einfachen Preisvergleich von Produkten, unabhängig von Packungsgröße und -gewicht."
|
||||
unit_price_tooltip: "Grundpreis: Er ermöglicht einen einfachen Preisvergleich von Produkten, unabhängig von Packungsgrösse und -gewicht."
|
||||
variants:
|
||||
on_demand:
|
||||
'yes': "Unbegrenzt/auf Bestellung"
|
||||
@@ -3078,9 +3055,9 @@ de_CH:
|
||||
select_shop: 'Bitte wählen Sie zuerst einen Laden aus.'
|
||||
could_not_create: 'Es tut uns leid! Konnte nicht erstellt werden:'
|
||||
subscriptions:
|
||||
closes: schließt
|
||||
closes: schliesst
|
||||
closed: geschlossen
|
||||
close_date_not_set: Schließzeitpunkt nicht eingestellt
|
||||
close_date_not_set: Schliesszeitpunkt nicht eingestellt
|
||||
spree:
|
||||
users:
|
||||
order: "Bestellung"
|
||||
@@ -3099,7 +3076,7 @@ de_CH:
|
||||
other: "pro Stück"
|
||||
bunch:
|
||||
one: "Bündel"
|
||||
other: "Sträuße"
|
||||
other: "Sträusse"
|
||||
pack:
|
||||
one: "Pack"
|
||||
other: "Packungen"
|
||||
@@ -3339,7 +3316,7 @@ de_CH:
|
||||
shipping_address: "Lieferadresse"
|
||||
first_name: "Vorname"
|
||||
last_name: "Nachname"
|
||||
street_address: "Straße + Hausnummer"
|
||||
street_address: "Strasse + Hausnummer"
|
||||
street_address_2: "Adresszusatz (optional)"
|
||||
city: "Ort"
|
||||
zip: "Postleitzahl"
|
||||
@@ -3518,7 +3495,7 @@ de_CH:
|
||||
testmail:
|
||||
delivery_success: "Test-E-Mail wurde gesendet."
|
||||
error: "Beim Senden der Test-E-Mail ist ein Fehler aufgetreten."
|
||||
unit_price_tooltip: "Grundpreis: Er ermöglicht einen einfachen Preisvergleich von Produkten, unabhängig von Packungsgröße und -gewicht. Der im Online-Shop angezeigte Grundpreis kann ggf. aufgrund hinzukommender Gebühren abweichen."
|
||||
unit_price_tooltip: "Grundpreis: Er ermöglicht einen einfachen Preisvergleich von Produkten, unabhängig von Packungsgrösse und -gewicht. Der im Online-Shop angezeigte Grundpreis kann ggf. aufgrund hinzukommender Gebühren abweichen."
|
||||
subscriptions:
|
||||
number: "Bestellnummer"
|
||||
tab:
|
||||
@@ -3541,7 +3518,7 @@ de_CH:
|
||||
groups: "Gruppen"
|
||||
product_properties:
|
||||
index:
|
||||
inherits_properties_checkbox_hint: "Übernahme der Eigenschaften von %{supplier} (außer oben überschrieben)?"
|
||||
inherits_properties_checkbox_hint: "Übernahme der Eigenschaften von %{supplier} (ausser oben überschrieben)?"
|
||||
add_product_properties: "Produkteigenschaften hinzufügen"
|
||||
properties:
|
||||
index:
|
||||
@@ -3591,7 +3568,7 @@ de_CH:
|
||||
orders:
|
||||
add_product:
|
||||
cannot_add_item_to_canceled_order: "Artikel kann nicht zu stornierter Bestellung hinzugefügt werden"
|
||||
include_out_of_stock_variants: "Produktvarianten ohne Lagerbestand mit einschließen"
|
||||
include_out_of_stock_variants: "Produktvarianten ohne Lagerbestand mit einschliessen"
|
||||
index:
|
||||
listing_orders: "Bestellungen verwalten"
|
||||
new_order: "Neue Bestellung"
|
||||
@@ -3609,7 +3586,6 @@ de_CH:
|
||||
results_found: "%{number} Ergebnisse gefunden."
|
||||
viewing: "Angezeigt wird %{start} bis %{end}."
|
||||
print_invoices: "Rechnungen drucken"
|
||||
selected: ausgewählt
|
||||
sortable_header:
|
||||
payment_state: "Zahlungsstatus"
|
||||
shipment_state: "Lieferstatus"
|
||||
@@ -3746,7 +3722,6 @@ de_CH:
|
||||
paypal:
|
||||
no_payment_via_admin_backend: Paypal-Zahlungen können nicht im Backoffice erfasst werden.
|
||||
products:
|
||||
image_upload_error: "Das Produktbild wurde nicht erkannt. Bitte laden Sie ein Bild im PNG- oder JPG-Format hoch."
|
||||
new:
|
||||
title: "Neues Produkt"
|
||||
new_product: "Neues Produkt"
|
||||
@@ -3882,7 +3857,7 @@ de_CH:
|
||||
flatpickr_datetime_format: "d.m.Y H:i"
|
||||
today: "heute"
|
||||
now: "Jetzt"
|
||||
close: "Schließen"
|
||||
close: "Schliessen"
|
||||
orders:
|
||||
error_flash_for_unavailable_items: "Ein Artikel in Ihrem Warenkorb ist nicht mehr verfügbar. Bitte passen Sie die ausgewählten Mengen an."
|
||||
edit:
|
||||
@@ -3990,7 +3965,7 @@ de_CH:
|
||||
paused: pausiert
|
||||
canceled: storniert
|
||||
paypal:
|
||||
already_refunded: "Diese Zahlung wurde zurückerstattet und es können keine weiteren Maßnahmen ergriffen werden."
|
||||
already_refunded: "Diese Zahlung wurde zurückerstattet und es können keine weiteren Massnahmen ergriffen werden."
|
||||
no_payment_via_admin_backend: "Sie können derzeit keine PayPal-Konten über das Administrationsmenü belasten."
|
||||
transaction: "PayPal-Transaktion"
|
||||
payer_id: "Zahler-ID"
|
||||
@@ -4008,6 +3983,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:
|
||||
@@ -4041,14 +4018,15 @@ de_CH:
|
||||
items: Artikel
|
||||
total: Gesamt
|
||||
paid?: Bezahlt?
|
||||
view: Ansehen
|
||||
status: Status
|
||||
cancelled: Storniert
|
||||
saved_cards:
|
||||
default?: Standard?
|
||||
delete?: Löschen?
|
||||
cards:
|
||||
authorised_shops: Autorisierte Läden
|
||||
authorised_shops_agreement: Dies ist die Liste der Läden, in denen Ihre Standardkreditkarte für eventuelle Abonnements (d. h. automatisch wiederholte Bestellungen) belastet werden darf. Ihre Kreditkartendaten werden sicher aufbewahrt und nicht an Ladenbesitzer weitergegeben. Sie werden immer benachrichtigt, wenn Ihre Kreditkarte belastet wird. Wenn Sie das Kontrollkästchen für einen Laden aktivieren, erlauben Sie diesem Laden Anweisungen an das Finanzinstitut, das Ihre Kreditkarte ausgestellt hat, zu senden, um Zahlungen gemäß der Bedingungen eines Abonnements, das Sie mit diesem Laden erstellen, entgegenzunehmen.
|
||||
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_agreement: Dies ist die Liste der Läden, in denen Ihre Standardkreditkarte für eventuelle Abonnements (d. h. automatisch wiederholte Bestellungen) belastet werden darf. Ihre Kreditkartendaten werden sicher aufbewahrt und nicht an Ladenbesitzer weitergegeben. Sie werden immer benachrichtigt, wenn Ihre Kreditkarte belastet wird. Wenn Sie das Kontrollkästchen für einen Laden aktivieren, erlauben Sie diesem Laden Anweisungen an das Finanzinstitut, das Ihre Kreditkarte ausgestellt hat, zu senden, um Zahlungen gemäss der Bedingungen eines Abonnements, das Sie mit diesem Laden erstellen, entgegenzunehmen.
|
||||
saved_cards_popover: Dies ist die Liste der Kreditkarten, die Sie für spätere Verwendung gespeichert haben. Ihr "Standard" wird automatisch beim Abschliessen 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?"
|
||||
|
||||
@@ -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:
|
||||
@@ -494,6 +474,8 @@ de_DE:
|
||||
terms_of_service: "Nutzungsbedingungen"
|
||||
delete: "Löschen"
|
||||
confirm_delete: "Sind Sie sicher, dass Sie die derzeitigen Nutzungsbedingungen löschen möchten?"
|
||||
attachment: "Datei hochladen"
|
||||
create_terms_of_service: "Nutzungsbedingungen hochladen "
|
||||
number_localization:
|
||||
number_localization_settings: "Zahlenformateinstellungen"
|
||||
enable_localized_number: "Verwenden Sie die internationale Tausendertrennungslogik"
|
||||
@@ -552,7 +534,7 @@ de_DE:
|
||||
credit_owed: "Geschuldetes Guthaben"
|
||||
balance_due: "Offener Betrag"
|
||||
destroy:
|
||||
has_associated_orders: "Löschen fehlgeschlagen: Der Kunde hat Bestellungen bei diesem Laden."
|
||||
has_associated_subscriptions: "Löschen fehlgeschlagen: Dieser Kunde hat aktive Abonnements. Bitte kündigen Sie diese zuerst."
|
||||
contents:
|
||||
edit:
|
||||
title: Inhalt
|
||||
@@ -3478,6 +3460,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"
|
||||
@@ -3623,7 +3606,10 @@ de_DE:
|
||||
results_found: "%{number} Ergebnisse gefunden."
|
||||
viewing: "Angezeigt wird %{start} bis %{end}."
|
||||
print_invoices: "Rechnungen drucken"
|
||||
selected: ausgewählt
|
||||
selected:
|
||||
zero: "Keine Bestellung ausgewählt"
|
||||
one: "1 Bestellung ausgewählt"
|
||||
other: "%{count} Bestellungen ausgewählt"
|
||||
sortable_header:
|
||||
payment_state: "Zahlungsstatus"
|
||||
shipment_state: "Lieferstatus"
|
||||
@@ -3763,7 +3749,7 @@ de_DE:
|
||||
paypal:
|
||||
no_payment_via_admin_backend: Paypal-Zahlungen können nicht im Backoffice erfasst werden.
|
||||
products:
|
||||
image_upload_error: "Das Produktbild wurde nicht erkannt. Bitte laden Sie ein Bild im PNG- oder JPG-Format hoch."
|
||||
image_upload_error: "Bitte laden Sie ein Bild im JPG-, PNG-, GIF-, SVG- oder WEBP-Format hoch."
|
||||
new:
|
||||
title: "Neues Produkt"
|
||||
new_product: "Neues Produkt"
|
||||
@@ -4026,10 +4012,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
|
||||
@@ -4059,7 +4051,9 @@ de_DE:
|
||||
items: Artikel
|
||||
total: Gesamt
|
||||
paid?: Bezahlt?
|
||||
view: Ansehen
|
||||
status: Status
|
||||
completed: Abgeschlossen
|
||||
cancelled: Storniert
|
||||
saved_cards:
|
||||
default?: Standard?
|
||||
delete?: Löschen?
|
||||
@@ -4069,7 +4063,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:
|
||||
@@ -4088,6 +4083,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:
|
||||
@@ -4134,3 +4130,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>"
|
||||
|
||||
@@ -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:
|
||||
@@ -606,8 +607,7 @@ en:
|
||||
credit_owed: "Credit Owed"
|
||||
balance_due: "Balance Due"
|
||||
destroy:
|
||||
has_associated_orders: "Delete failed: customer has associated orders with his shop"
|
||||
|
||||
has_associated_subscriptions: "Delete failed: This customer has active subscriptions. Cancel them first."
|
||||
contents:
|
||||
edit:
|
||||
title: Content
|
||||
@@ -3639,6 +3639,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"
|
||||
@@ -3786,7 +3787,10 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
results_found: "%{number} Results found."
|
||||
viewing: "Viewing %{start} to %{end}."
|
||||
print_invoices: "Print Invoices"
|
||||
selected: selected
|
||||
selected:
|
||||
zero: "No order selected"
|
||||
one: "1 order selected"
|
||||
other: "%{count} orders selected"
|
||||
sortable_header:
|
||||
payment_state: "Payment State"
|
||||
shipment_state: "Shipment State"
|
||||
@@ -3926,7 +3930,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
paypal:
|
||||
no_payment_via_admin_backend: Paypal payments cannot be captured in the Backoffice
|
||||
products:
|
||||
image_upload_error: "The product image was not recognised. Please upload an image in PNG or JPG format."
|
||||
image_upload_error: "Please upload the image in JPG, PNG, GIF, SVG or WEBP format."
|
||||
new:
|
||||
title: "New Product"
|
||||
new_product: "New Product"
|
||||
@@ -4190,10 +4194,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
|
||||
@@ -4223,7 +4233,9 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
items: Items
|
||||
total: Total
|
||||
paid?: Paid?
|
||||
view: View
|
||||
status: Status
|
||||
completed: Completed
|
||||
cancelled: Cancelled
|
||||
saved_cards:
|
||||
default?: Default?
|
||||
delete?: Delete?
|
||||
@@ -4234,6 +4246,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:
|
||||
@@ -4252,6 +4265,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:
|
||||
@@ -4298,3 +4312,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>"
|
||||
|
||||
@@ -414,8 +414,6 @@ en_AU:
|
||||
guest_label: "Guest checkout"
|
||||
credit_owed: "Credit Owed"
|
||||
balance_due: "Balance Due"
|
||||
destroy:
|
||||
has_associated_orders: "Delete failed: customer has associated orders with his shop"
|
||||
contents:
|
||||
edit:
|
||||
title: Content
|
||||
@@ -3257,7 +3255,6 @@ en_AU:
|
||||
results_found: "%{number} Results found."
|
||||
viewing: "Viewing %{start} to %{end}."
|
||||
print_invoices: "Print Invoices"
|
||||
selected: selected
|
||||
sortable_header:
|
||||
payment_state: "Payment State"
|
||||
shipment_state: "Shipment State"
|
||||
@@ -3383,7 +3380,6 @@ en_AU:
|
||||
paypal:
|
||||
no_payment_via_admin_backend: Paypal payments cannot be captured in the Backoffice
|
||||
products:
|
||||
image_upload_error: "The product image was not recognised. Please upload an image in PNG or JPG format."
|
||||
new:
|
||||
title: "New Product"
|
||||
new_product: "New Product"
|
||||
@@ -3609,6 +3605,8 @@ en_AU:
|
||||
paypal:
|
||||
refund_amount: "Amount"
|
||||
users:
|
||||
api_keys:
|
||||
regenerate_key: "Regenerate Key"
|
||||
form:
|
||||
account_settings: Account Settings
|
||||
show:
|
||||
@@ -3640,7 +3638,8 @@ en_AU:
|
||||
items: Items
|
||||
total: Total
|
||||
paid?: Paid?
|
||||
view: View
|
||||
status: Status
|
||||
cancelled: Cancelled
|
||||
saved_cards:
|
||||
default?: Default?
|
||||
delete?: Delete?
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user