mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-23 20:26:49 +00:00
Compare commits
322 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e2ea4d21f4 | ||
|
|
2f0e00370b | ||
|
|
b91bb8961f | ||
|
|
5e3b0cf47c | ||
|
|
ba46756cba | ||
|
|
f6c9246e20 | ||
|
|
11e9329b97 | ||
|
|
1a7598d96d | ||
|
|
2eec3d625a | ||
|
|
ba30606052 | ||
|
|
f6f62515b5 | ||
|
|
a75892ccc1 | ||
|
|
0082653170 | ||
|
|
cc0b23c0bd | ||
|
|
b3ad5aeaca | ||
|
|
ffe9756f50 | ||
|
|
40eb5e320b | ||
|
|
4e4a392a8c | ||
|
|
e3fa933699 | ||
|
|
78a6317c84 | ||
|
|
fa57e37467 | ||
|
|
7c24f6b26f | ||
|
|
f9f6abf740 | ||
|
|
e6c0dd95c4 | ||
|
|
ade2eda638 | ||
|
|
0a3d362282 | ||
|
|
08fb496f55 | ||
|
|
4cea7b1957 | ||
|
|
88607a3dce | ||
|
|
a39598d049 | ||
|
|
9a03023b6b | ||
|
|
d3e0ff269f | ||
|
|
eb67340c52 | ||
|
|
75ed68c9cb | ||
|
|
255fc64fdb | ||
|
|
c84ec148db | ||
|
|
eeb059ae17 | ||
|
|
7a5b7c4f64 | ||
|
|
613c693774 | ||
|
|
9ea9ac99f9 | ||
|
|
1cf55cde4d | ||
|
|
503e0ecba1 | ||
|
|
ecc2c7ba43 | ||
|
|
32fc1eae61 | ||
|
|
822f640997 | ||
|
|
2d0e64a7d3 | ||
|
|
f5e1cbca08 | ||
|
|
51272eef00 | ||
|
|
2f6a910a1c | ||
|
|
9ca25df934 | ||
|
|
a3e1193f28 | ||
|
|
889b132069 | ||
|
|
3e18445c36 | ||
|
|
3c158cd061 | ||
|
|
c464f3a43d | ||
|
|
84be4aec7b | ||
|
|
d9d18b086c | ||
|
|
80f015912a | ||
|
|
3b6202313a | ||
|
|
d05bb508de | ||
|
|
02ba8c1bf5 | ||
|
|
3c83b053ce | ||
|
|
64032c9207 | ||
|
|
dee797c427 | ||
|
|
68b60a11b0 | ||
|
|
3b8f2ee4b3 | ||
|
|
8c91e3d8fd | ||
|
|
045db5dd49 | ||
|
|
24e8c0f973 | ||
|
|
761a6731db | ||
|
|
b1ca2c90ce | ||
|
|
cd3897db30 | ||
|
|
f3ffeaf3b4 | ||
|
|
76c6b438b5 | ||
|
|
a08c7f7823 | ||
|
|
c9da3200eb | ||
|
|
b1d22f7982 | ||
|
|
d65b1bb386 | ||
|
|
2633ee3606 | ||
|
|
4027eacc06 | ||
|
|
236e77efd4 | ||
|
|
a486a08bfc | ||
|
|
292338d467 | ||
|
|
a3278ab6d3 | ||
|
|
416a2efea9 | ||
|
|
4cf45dcfe1 | ||
|
|
0f06c86008 | ||
|
|
f8cceef932 | ||
|
|
d5b0891a74 | ||
|
|
81b4433b02 | ||
|
|
b73d78c785 | ||
|
|
b7b80509dc | ||
|
|
57d36d2ff1 | ||
|
|
c38f1b88d3 | ||
|
|
8c6a32100d | ||
|
|
559b953e16 | ||
|
|
73d98bd1b4 | ||
|
|
fd278e0086 | ||
|
|
66a29e58d2 | ||
|
|
313fdab346 | ||
|
|
722b04a211 | ||
|
|
97b5a7f99c | ||
|
|
0ca7319e32 | ||
|
|
80ba228910 | ||
|
|
0f203a474c | ||
|
|
10bacea861 | ||
|
|
237b0f03b5 | ||
|
|
f4980fa84d | ||
|
|
c9e6d24eb0 | ||
|
|
f2b407c194 | ||
|
|
b48b3ad42b | ||
|
|
af5e44e3f3 | ||
|
|
68acca2530 | ||
|
|
180aabdb90 | ||
|
|
c82af88c48 | ||
|
|
40eae3f84d | ||
|
|
8bd890f311 | ||
|
|
64e6bd8248 | ||
|
|
e066e5ca74 | ||
|
|
9317cc41b9 | ||
|
|
1a35882fb6 | ||
|
|
ec3d7174de | ||
|
|
207a3c9ea7 | ||
|
|
9ff8433a8d | ||
|
|
6549ad7d2a | ||
|
|
7d1b71e640 | ||
|
|
bddd887dcd | ||
|
|
d00e75de70 | ||
|
|
06cbc120f5 | ||
|
|
e91c4f1318 | ||
|
|
428b8b0314 | ||
|
|
7d5ddb9cf6 | ||
|
|
cc5632fd14 | ||
|
|
9b2ed8846c | ||
|
|
e18454c55a | ||
|
|
785350a089 | ||
|
|
ef4731022e | ||
|
|
8adb8a5eaf | ||
|
|
a0d1183fc0 | ||
|
|
3b49ba4de1 | ||
|
|
ef4c99bf49 | ||
|
|
40d767928e | ||
|
|
5e689b12fe | ||
|
|
518a029b59 | ||
|
|
2b14269dae | ||
|
|
a463a39abc | ||
|
|
99a0056d7f | ||
|
|
0973e79a91 | ||
|
|
d0897ec677 | ||
|
|
915174b513 | ||
|
|
f5aae5f8b9 | ||
|
|
e94fff0d69 | ||
|
|
14189aef5c | ||
|
|
6dc54fbd22 | ||
|
|
1e3f754f96 | ||
|
|
095e520777 | ||
|
|
452b38fa36 | ||
|
|
496bc9120a | ||
|
|
a386d33197 | ||
|
|
762e27b015 | ||
|
|
29915cdbbd | ||
|
|
5cfedddba4 | ||
|
|
d5ae5c9af4 | ||
|
|
01c6a8b9ec | ||
|
|
44677fac87 | ||
|
|
dda85666e6 | ||
|
|
dd876dfd8d | ||
|
|
ef309c0fd0 | ||
|
|
de97c59632 | ||
|
|
5d4ab5c1f8 | ||
|
|
bf9cfd4990 | ||
|
|
d3251dc03f | ||
|
|
d3b80b7fc9 | ||
|
|
d9aa125903 | ||
|
|
444d689f14 | ||
|
|
801ebe5819 | ||
|
|
7f4e5d3f2e | ||
|
|
107bb3df66 | ||
|
|
dcbf2ae96b | ||
|
|
f2c0a77641 | ||
|
|
958a1bde9f | ||
|
|
cff06011f1 | ||
|
|
0e878d8ce1 | ||
|
|
678c60c9b6 | ||
|
|
83335cfab4 | ||
|
|
a762aa6ff9 | ||
|
|
6b1d6e33c0 | ||
|
|
24d29c6949 | ||
|
|
1609cc49e3 | ||
|
|
8c458c2d48 | ||
|
|
0fc108a8e6 | ||
|
|
f888a0eb21 | ||
|
|
994232f6d1 | ||
|
|
a97fb0f46b | ||
|
|
73c81e626c | ||
|
|
b35f9551eb | ||
|
|
4193cdb9f1 | ||
|
|
57678b7566 | ||
|
|
ee5f255fc9 | ||
|
|
408c2f7a04 | ||
|
|
1cfc13e66f | ||
|
|
110c594353 | ||
|
|
1748274e72 | ||
|
|
e6863f83fc | ||
|
|
e48ba1b5fa | ||
|
|
999440da0a | ||
|
|
1ea7304549 | ||
|
|
ad4670705e | ||
|
|
5e4afb765b | ||
|
|
d2d9e318fc | ||
|
|
a2a1d8b7e2 | ||
|
|
65d8337d3d | ||
|
|
7f3cf743f7 | ||
|
|
27e8d89325 | ||
|
|
882d7a1215 | ||
|
|
cec9d2987e | ||
|
|
2bba38134e | ||
|
|
428b589357 | ||
|
|
ab7e1ac39f | ||
|
|
0782447863 | ||
|
|
1a71e55029 | ||
|
|
f082dfdb79 | ||
|
|
10060be300 | ||
|
|
6424b37e70 | ||
|
|
ada164d29b | ||
|
|
8194ae1eae | ||
|
|
64b7ccc2ba | ||
|
|
3e8ec039f7 | ||
|
|
f917027cb1 | ||
|
|
5d7ab0973a | ||
|
|
ee07b81cd6 | ||
|
|
04e7b3b617 | ||
|
|
118d3a9d8e | ||
|
|
2fc935e99c | ||
|
|
00d9c2836d | ||
|
|
79887c0b44 | ||
|
|
5b6a855dfe | ||
|
|
d18d0ef6b1 | ||
|
|
d37fa9fc5f | ||
|
|
7b14afbabe | ||
|
|
bc788b6d60 | ||
|
|
3247c32191 | ||
|
|
251ab2ac9a | ||
|
|
dafe4b599f | ||
|
|
d7c99a9d8b | ||
|
|
53fb906861 | ||
|
|
54acfbf7f2 | ||
|
|
5708fb04a5 | ||
|
|
fa4ff7534b | ||
|
|
4bae28bbad | ||
|
|
e1b79db65e | ||
|
|
d413a39c3c | ||
|
|
d153adca9b | ||
|
|
38fe572943 | ||
|
|
ee1ad57c7f | ||
|
|
fa96f7339d | ||
|
|
78bbb08666 | ||
|
|
e260112eb8 | ||
|
|
a91ece8f3b | ||
|
|
6327370401 | ||
|
|
b91b85febc | ||
|
|
19df15d75b | ||
|
|
92c4bd9eb7 | ||
|
|
4822be532b | ||
|
|
c87c8ed0df | ||
|
|
f4a5130cb5 | ||
|
|
8823b2ac89 | ||
|
|
9bff2718c7 | ||
|
|
7dc14cc35a | ||
|
|
a4f388336a | ||
|
|
370e476fc5 | ||
|
|
8bfb17144c | ||
|
|
f984cd89c2 | ||
|
|
336210b898 | ||
|
|
9323394eb7 | ||
|
|
895fc94a75 | ||
|
|
aa725ec8a4 | ||
|
|
1313b55531 | ||
|
|
f921bbfe45 | ||
|
|
f8b8e79725 | ||
|
|
b559171d0e | ||
|
|
3e7e0e4d81 | ||
|
|
c5d94d372f | ||
|
|
c99ec38c85 | ||
|
|
37f359542e | ||
|
|
21b74386f9 | ||
|
|
53c701e04c | ||
|
|
ef572668d5 | ||
|
|
fa8e36fbeb | ||
|
|
1ea9c15bb8 | ||
|
|
cc838d2c88 | ||
|
|
99fcbad0f0 | ||
|
|
52959a913f | ||
|
|
097bfd953f | ||
|
|
b9039f4b1f | ||
|
|
f7d4d7595c | ||
|
|
28782775ad | ||
|
|
6f35b38fa8 | ||
|
|
9757ab2a6c | ||
|
|
381c4e6146 | ||
|
|
828c6e5427 | ||
|
|
7320a1714c | ||
|
|
9b4f9314bc | ||
|
|
455c11c289 | ||
|
|
31dc35c500 | ||
|
|
35791034cc | ||
|
|
1a874d6fcf | ||
|
|
85a748af99 | ||
|
|
121a4a08af | ||
|
|
b75b123cba | ||
|
|
61037aa5ad | ||
|
|
fd4fb53df1 | ||
|
|
5a61722f8b | ||
|
|
719025f98e | ||
|
|
a9097df112 | ||
|
|
7015cb30c3 | ||
|
|
702bf1b76e | ||
|
|
6e76bcac4a | ||
|
|
91af282ccc | ||
|
|
8958fe4199 | ||
|
|
2258af9cec | ||
|
|
a793fc9f99 |
@@ -2,3 +2,4 @@
|
||||
.gitignore
|
||||
log/*
|
||||
tmp/*
|
||||
node_modules/
|
||||
|
||||
11
.gitattributes
vendored
Normal file
11
.gitattributes
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
* text=auto
|
||||
|
||||
# Set line endings to LF, even on Windows. Otherwise, execution within Docker fails.
|
||||
# See https://docs.github.com/en/get-started/getting-started-with-git/configuring-git-to-handle-line-endings#per-repository-settings
|
||||
*.sh text eol=lf
|
||||
|
||||
# Same thing for following files, but they don't have an sh extension
|
||||
pre-commit eol=lf
|
||||
webpack-dev-server eol=lf
|
||||
install-bundler eol=lf
|
||||
4
.github/dependabot.yml
vendored
4
.github/dependabot.yml
vendored
@@ -6,10 +6,12 @@ updates:
|
||||
schedule:
|
||||
interval: "daily"
|
||||
open-pull-requests-limit: 10
|
||||
# Only specific requirements are specified in Gemfile, so don't touch it.
|
||||
versioning-strategy: lockfile-only
|
||||
|
||||
- package-ecosystem: "npm"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
versioning-strategy: lockfile-only
|
||||
# All versions are specified in package.json, so please update them.
|
||||
versioning-strategy: increase
|
||||
|
||||
2
.github/workflows/brakeman-analysis.yml
vendored
2
.github/workflows/brakeman-analysis.yml
vendored
@@ -33,7 +33,7 @@ jobs:
|
||||
|
||||
- name: Setup Brakeman
|
||||
env:
|
||||
BRAKEMAN_VERSION: '4.10' # SARIF support is provided in Brakeman version 4.10+
|
||||
BRAKEMAN_VERSION: '5.4.0'
|
||||
run: |
|
||||
gem install brakeman --version $BRAKEMAN_VERSION
|
||||
|
||||
|
||||
14
.github/workflows/build.yml
vendored
14
.github/workflows/build.yml
vendored
@@ -57,7 +57,7 @@ jobs:
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
node-version-file: .node-version
|
||||
|
||||
- name: Install JS dependencies
|
||||
run: yarn install --frozen-lockfile
|
||||
@@ -126,7 +126,7 @@ jobs:
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
node-version-file: .node-version
|
||||
|
||||
- name: Install JS dependencies
|
||||
run: yarn install --frozen-lockfile
|
||||
@@ -195,7 +195,7 @@ jobs:
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
node-version-file: .node-version
|
||||
|
||||
- name: Install JS dependencies
|
||||
run: yarn install --frozen-lockfile
|
||||
@@ -273,7 +273,7 @@ jobs:
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
node-version-file: .node-version
|
||||
|
||||
- name: Install JS dependencies
|
||||
run: yarn install --frozen-lockfile
|
||||
@@ -351,7 +351,7 @@ jobs:
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
node-version-file: .node-version
|
||||
|
||||
- name: Install JS dependencies
|
||||
run: yarn install --frozen-lockfile
|
||||
@@ -429,7 +429,7 @@ jobs:
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
node-version-file: .node-version
|
||||
|
||||
- name: Install JS dependencies
|
||||
run: yarn install --frozen-lockfile
|
||||
@@ -489,7 +489,7 @@ jobs:
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
node-version-file: .node-version
|
||||
|
||||
- name: Install JS dependencies
|
||||
run: yarn install --frozen-lockfile
|
||||
|
||||
8
.github/workflows/linters.yml
vendored
8
.github/workflows/linters.yml
vendored
@@ -24,6 +24,14 @@ jobs:
|
||||
steps:
|
||||
- name: Check out code
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version-file: .node-version
|
||||
|
||||
- name: Install JS dependencies
|
||||
run: yarn install --frozen-lockfile
|
||||
|
||||
- name: prettier
|
||||
uses: EPMatt/reviewdog-action-prettier@v1
|
||||
with:
|
||||
|
||||
@@ -1 +1 @@
|
||||
14.16.1
|
||||
14.21.2
|
||||
|
||||
@@ -35,7 +35,10 @@ ENV BUNDLE_PATH /bundles
|
||||
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
COPY .ruby-version .
|
||||
|
||||
# trim spaces and line return from .ruby-version file
|
||||
COPY .ruby-version .ruby-version.raw
|
||||
RUN cat .ruby-version.raw | tr -d '\r\t ' > .ruby-version
|
||||
|
||||
# Install Rbenv & Ruby
|
||||
RUN git clone --depth 1 https://github.com/rbenv/rbenv.git ${RBENV_ROOT} && \
|
||||
|
||||
@@ -11,6 +11,9 @@ Head to our wiki on [Learning Rails](https://github.com/openfoodfoundation/openf
|
||||
The fastest way to make it work locally is to use Docker, you only need to setup git, see the [Docker setup guide](docker/README.md).
|
||||
Otherwise, for a local setup you will need:
|
||||
* Ruby and bundler (check current Ruby version in [.ruby-version](https://github.com/openfoodfoundation/openfoodnetwork/blob/master/.ruby-version) file)
|
||||
- To manage versions, it's recommended to use [rbenv](https://github.com/rbenv/rbenv) or [RVM](https://rvm.io/)
|
||||
* Node and yarn (check current Node version in [.node-version](https://github.com/openfoodfoundation/openfoodnetwork/blob/master/.node-version) file)
|
||||
- [nodevn](https://github.com/nodenv/nodenv) is recommended.
|
||||
* PostgreSQL database
|
||||
* Redis (for background jobs)
|
||||
* Chrome (for testing)
|
||||
@@ -20,15 +23,13 @@ The following guides will provide OS-specific step-by-step instructions to get t
|
||||
- [Debian Setup Guide][debian]
|
||||
- [OSX Setup Guide][osx]
|
||||
|
||||
If you are likely to need to manage multiple version of ruby on your local machine, we recommend version managers such as [rbenv](https://github.com/rbenv/rbenv) or [RVM](https://rvm.io/).
|
||||
|
||||
For those new to Rails, the following tutorial will help get you up to speed with configuring a [Rails environment](http://guides.rubyonrails.org/getting_started.html).
|
||||
|
||||
### Get it
|
||||
|
||||
So you have set up your local environment according to the requirements listed above. If you're planning on contributing code to the project (which we [LOVE](CONTRIBUTING.md)), it is a good idea to begin by forking this repo using the `Fork` button in the top-right corner of this screen. You should then be able to use `git clone` to copy your fork onto your local machine:
|
||||
|
||||
git clone https://github.com/YOUR_GITHUB_USERNAME_HERE/openfoodnetwork
|
||||
git clone git@github.com:YOUR_GITHUB_USERNAME_HERE/openfoodnetwork.git
|
||||
|
||||
Jump into your new local copy of the Open Food Network:
|
||||
|
||||
@@ -36,7 +37,7 @@ Jump into your new local copy of the Open Food Network:
|
||||
|
||||
And then add an `upstream` remote that points to the main repo:
|
||||
|
||||
git remote add upstream https://github.com/openfoodfoundation/openfoodnetwork
|
||||
git remote add upstream git@github.com:openfoodfoundation/openfoodnetwork.git
|
||||
|
||||
Fetch the latest version of `master` from `upstream` (ie. the main repo):
|
||||
|
||||
|
||||
9
Gemfile
9
Gemfile
@@ -17,7 +17,7 @@ gem 'activemerchant', '>= 1.78.0'
|
||||
gem 'rexml'
|
||||
gem 'angular-rails-templates', '>= 0.3.0'
|
||||
gem 'awesome_nested_set'
|
||||
gem 'ransack', '2.4.2'
|
||||
gem 'ransack', '~> 2.6.0'
|
||||
gem 'responders'
|
||||
gem 'webpacker', '~> 5'
|
||||
|
||||
@@ -69,7 +69,7 @@ gem 'pagy', '~> 5.1'
|
||||
gem 'rswag-api'
|
||||
gem 'rswag-ui'
|
||||
|
||||
gem 'gitlab-omniauth-openid-connect', require: 'omniauth_openid_connect'
|
||||
gem 'omniauth_openid_connect'
|
||||
gem 'openid_connect', '~> 1.3'
|
||||
gem 'omniauth-rails_csrf_protection'
|
||||
|
||||
@@ -83,16 +83,15 @@ gem 'actionpack-action_caching'
|
||||
# AMS is deprecated, we will introduce an alternative at some point
|
||||
gem "active_model_serializers", "0.8.4"
|
||||
gem 'activerecord-session_store'
|
||||
gem 'acts-as-taggable-on', '~> 8.1'
|
||||
gem 'acts-as-taggable-on'
|
||||
gem 'angularjs-file-upload-rails', '~> 2.4.1'
|
||||
gem 'bigdecimal', '3.0.2'
|
||||
gem 'bootsnap', require: false
|
||||
gem 'geocoder'
|
||||
gem 'gmaps4rails'
|
||||
gem 'mimemagic', '> 0.3.5'
|
||||
gem 'paper_trail', '~> 12.1.0'
|
||||
gem 'paper_trail', '~> 12.1'
|
||||
gem 'rack-rewrite'
|
||||
gem 'rack-ssl', require: 'rack/ssl'
|
||||
gem 'roadie-rails'
|
||||
|
||||
gem 'hiredis'
|
||||
|
||||
276
Gemfile.lock
276
Gemfile.lock
@@ -51,42 +51,42 @@ GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
Ascii85 (1.1.0)
|
||||
actioncable (6.1.7)
|
||||
actionpack (= 6.1.7)
|
||||
activesupport (= 6.1.7)
|
||||
actioncable (6.1.7.2)
|
||||
actionpack (= 6.1.7.2)
|
||||
activesupport (= 6.1.7.2)
|
||||
nio4r (~> 2.0)
|
||||
websocket-driver (>= 0.6.1)
|
||||
actionmailbox (6.1.7)
|
||||
actionpack (= 6.1.7)
|
||||
activejob (= 6.1.7)
|
||||
activerecord (= 6.1.7)
|
||||
activestorage (= 6.1.7)
|
||||
activesupport (= 6.1.7)
|
||||
actionmailbox (6.1.7.2)
|
||||
actionpack (= 6.1.7.2)
|
||||
activejob (= 6.1.7.2)
|
||||
activerecord (= 6.1.7.2)
|
||||
activestorage (= 6.1.7.2)
|
||||
activesupport (= 6.1.7.2)
|
||||
mail (>= 2.7.1)
|
||||
actionmailer (6.1.7)
|
||||
actionpack (= 6.1.7)
|
||||
actionview (= 6.1.7)
|
||||
activejob (= 6.1.7)
|
||||
activesupport (= 6.1.7)
|
||||
actionmailer (6.1.7.2)
|
||||
actionpack (= 6.1.7.2)
|
||||
actionview (= 6.1.7.2)
|
||||
activejob (= 6.1.7.2)
|
||||
activesupport (= 6.1.7.2)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
actionpack (6.1.7)
|
||||
actionview (= 6.1.7)
|
||||
activesupport (= 6.1.7)
|
||||
actionpack (6.1.7.2)
|
||||
actionview (= 6.1.7.2)
|
||||
activesupport (= 6.1.7.2)
|
||||
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.7)
|
||||
actionpack (= 6.1.7)
|
||||
activerecord (= 6.1.7)
|
||||
activestorage (= 6.1.7)
|
||||
activesupport (= 6.1.7)
|
||||
actiontext (6.1.7.2)
|
||||
actionpack (= 6.1.7.2)
|
||||
activerecord (= 6.1.7.2)
|
||||
activestorage (= 6.1.7.2)
|
||||
activesupport (= 6.1.7.2)
|
||||
nokogiri (>= 1.8.5)
|
||||
actionview (6.1.7)
|
||||
activesupport (= 6.1.7)
|
||||
actionview (6.1.7.2)
|
||||
activesupport (= 6.1.7.2)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
@@ -98,19 +98,19 @@ GEM
|
||||
activemodel (>= 5.2.0)
|
||||
activestorage (>= 5.2.0)
|
||||
activesupport (>= 5.2.0)
|
||||
activejob (6.1.7)
|
||||
activesupport (= 6.1.7)
|
||||
activejob (6.1.7.2)
|
||||
activesupport (= 6.1.7.2)
|
||||
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.7)
|
||||
activesupport (= 6.1.7)
|
||||
activerecord (6.1.7)
|
||||
activemodel (= 6.1.7)
|
||||
activesupport (= 6.1.7)
|
||||
activemodel (6.1.7.2)
|
||||
activesupport (= 6.1.7.2)
|
||||
activerecord (6.1.7.2)
|
||||
activemodel (= 6.1.7.2)
|
||||
activesupport (= 6.1.7.2)
|
||||
activerecord-import (1.4.1)
|
||||
activerecord (>= 4.2)
|
||||
activerecord-postgresql-adapter (0.0.1)
|
||||
@@ -121,21 +121,21 @@ GEM
|
||||
multi_json (~> 1.11, >= 1.11.2)
|
||||
rack (>= 2.0.8, < 3)
|
||||
railties (>= 5.2.4.1)
|
||||
activestorage (6.1.7)
|
||||
actionpack (= 6.1.7)
|
||||
activejob (= 6.1.7)
|
||||
activerecord (= 6.1.7)
|
||||
activesupport (= 6.1.7)
|
||||
activestorage (6.1.7.2)
|
||||
actionpack (= 6.1.7.2)
|
||||
activejob (= 6.1.7.2)
|
||||
activerecord (= 6.1.7.2)
|
||||
activesupport (= 6.1.7.2)
|
||||
marcel (~> 1.0)
|
||||
mini_mime (>= 1.1.0)
|
||||
activesupport (6.1.7)
|
||||
activesupport (6.1.7.2)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
tzinfo (~> 2.0)
|
||||
zeitwerk (~> 2.3)
|
||||
acts-as-taggable-on (8.1.0)
|
||||
activerecord (>= 5.0, < 6.2)
|
||||
acts-as-taggable-on (9.0.1)
|
||||
activerecord (>= 6.0, < 7.1)
|
||||
acts_as_list (1.0.4)
|
||||
activerecord (>= 4.2)
|
||||
addressable (2.8.1)
|
||||
@@ -158,16 +158,16 @@ GEM
|
||||
awesome_nested_set (3.5.0)
|
||||
activerecord (>= 4.0.0, < 7.1)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.669.0)
|
||||
aws-sdk-core (3.168.2)
|
||||
aws-partitions (1.711.0)
|
||||
aws-sdk-core (3.170.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.60.0)
|
||||
aws-sdk-kms (1.62.0)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.117.2)
|
||||
aws-sdk-s3 (1.119.1)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.4)
|
||||
@@ -177,9 +177,9 @@ GEM
|
||||
bigdecimal (3.0.2)
|
||||
bindata (2.4.12)
|
||||
bindex (0.8.1)
|
||||
bootsnap (1.15.0)
|
||||
bootsnap (1.16.0)
|
||||
msgpack (~> 1.2)
|
||||
bugsnag (6.25.1)
|
||||
bugsnag (6.25.2)
|
||||
concurrent-ruby (~> 1.0)
|
||||
builder (3.2.4)
|
||||
bullet (7.0.7)
|
||||
@@ -221,7 +221,7 @@ GEM
|
||||
combine_pdf (1.0.22)
|
||||
matrix
|
||||
ruby-rc4 (>= 0.1.5)
|
||||
concurrent-ruby (1.1.10)
|
||||
concurrent-ruby (1.2.0)
|
||||
connection_pool (2.3.0)
|
||||
crack (0.4.5)
|
||||
rexml
|
||||
@@ -237,10 +237,13 @@ GEM
|
||||
activerecord (>= 5.a)
|
||||
database_cleaner-core (~> 2.0.0)
|
||||
database_cleaner-core (2.0.1)
|
||||
ddtrace (0.54.1)
|
||||
debase-ruby_core_source (= 0.10.12)
|
||||
date (3.3.3)
|
||||
ddtrace (1.9.0)
|
||||
debase-ruby_core_source (>= 0.10.16, <= 3.2.0)
|
||||
libdatadog (~> 1.0.1.1.0)
|
||||
libddwaf (~> 1.5.1.0.0)
|
||||
msgpack
|
||||
debase-ruby_core_source (0.10.12)
|
||||
debase-ruby_core_source (3.2.0)
|
||||
debug (1.7.1)
|
||||
irb (>= 1.5.0)
|
||||
reline (>= 0.3.1)
|
||||
@@ -264,7 +267,7 @@ GEM
|
||||
dotenv-rails (2.8.1)
|
||||
dotenv (= 2.8.1)
|
||||
railties (>= 3.2)
|
||||
erubi (1.11.0)
|
||||
erubi (1.12.0)
|
||||
et-orbi (1.2.7)
|
||||
tzinfo
|
||||
excon (0.81.0)
|
||||
@@ -313,18 +316,14 @@ GEM
|
||||
nokogiri (>= 1.5.11, < 2.0.0)
|
||||
foreman (0.87.2)
|
||||
formatador (0.2.5)
|
||||
fugit (1.7.1)
|
||||
fugit (1.8.1)
|
||||
et-orbi (~> 1, >= 1.2.7)
|
||||
raabro (~> 1.4)
|
||||
fuubar (2.5.1)
|
||||
rspec-core (~> 3.0)
|
||||
ruby-progressbar (~> 1.4)
|
||||
geocoder (1.8.1)
|
||||
gitlab-omniauth-openid-connect (0.10.0)
|
||||
addressable (~> 2.7)
|
||||
omniauth (>= 1.9, < 3)
|
||||
openid_connect (~> 1.2)
|
||||
globalid (1.0.0)
|
||||
globalid (1.1.0)
|
||||
activesupport (>= 5.0)
|
||||
gmaps4rails (2.1.2)
|
||||
good_migrations (0.2.1)
|
||||
@@ -374,13 +373,16 @@ GEM
|
||||
rspec (>= 2.0, < 4.0)
|
||||
jsonapi-serializer (2.2.0)
|
||||
activesupport (>= 4.2)
|
||||
jwt (2.6.0)
|
||||
jwt (2.7.0)
|
||||
knapsack_pro (3.7.0)
|
||||
rake
|
||||
launchy (2.5.0)
|
||||
addressable (~> 2.7)
|
||||
letter_opener (1.8.1)
|
||||
launchy (>= 2.2, < 3)
|
||||
libdatadog (1.0.1.1.0)
|
||||
libddwaf (1.5.1.0.0)
|
||||
ffi (~> 1.0)
|
||||
libv8-node (16.10.0.0)
|
||||
listen (3.8.0)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
@@ -388,8 +390,11 @@ GEM
|
||||
loofah (2.19.1)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.7.1)
|
||||
mail (2.8.1)
|
||||
mini_mime (>= 0.1.1)
|
||||
net-imap
|
||||
net-pop
|
||||
net-smtp
|
||||
marcel (1.0.2)
|
||||
matrix (0.4.2)
|
||||
method_source (1.0.0)
|
||||
@@ -412,12 +417,17 @@ GEM
|
||||
msgpack (1.6.0)
|
||||
multi_json (1.15.0)
|
||||
multi_xml (0.6.0)
|
||||
net-protocol (0.1.3)
|
||||
net-imap (0.3.4)
|
||||
date
|
||||
net-protocol
|
||||
net-pop (0.1.2)
|
||||
net-protocol
|
||||
net-protocol (0.2.1)
|
||||
timeout
|
||||
net-smtp (0.3.2)
|
||||
net-smtp (0.3.3)
|
||||
net-protocol
|
||||
nio4r (2.5.8)
|
||||
nokogiri (1.13.10)
|
||||
nokogiri (1.14.1)
|
||||
mini_portile2 (~> 2.8.0)
|
||||
racc (~> 1.4)
|
||||
oauth2 (1.4.11)
|
||||
@@ -433,6 +443,9 @@ GEM
|
||||
omniauth-rails_csrf_protection (1.0.1)
|
||||
actionpack (>= 4.2)
|
||||
omniauth (~> 2.0)
|
||||
omniauth_openid_connect (0.6.0)
|
||||
omniauth (>= 1.9, < 3)
|
||||
openid_connect (~> 1.1)
|
||||
openid_connect (1.4.2)
|
||||
activemodel
|
||||
attr_required (>= 1.0.0)
|
||||
@@ -447,7 +460,7 @@ GEM
|
||||
orm_adapter (0.5.0)
|
||||
pagy (5.10.1)
|
||||
activesupport
|
||||
paper_trail (12.1.0)
|
||||
paper_trail (12.3.0)
|
||||
activerecord (>= 5.2)
|
||||
request_store (~> 1.1)
|
||||
parallel (1.22.1)
|
||||
@@ -472,11 +485,11 @@ GEM
|
||||
coderay (~> 1.1)
|
||||
method_source (~> 1.0)
|
||||
public_suffix (5.0.0)
|
||||
puma (6.0.2)
|
||||
puma (6.1.0)
|
||||
nio4r (~> 2.0)
|
||||
raabro (1.4.0)
|
||||
racc (1.6.1)
|
||||
rack (2.2.4)
|
||||
racc (1.6.2)
|
||||
rack (2.2.6.2)
|
||||
rack-mini-profiler (2.3.4)
|
||||
rack (>= 1.2.0)
|
||||
rack-oauth2 (1.21.3)
|
||||
@@ -487,28 +500,26 @@ GEM
|
||||
rack (>= 2.1.0)
|
||||
rack-protection (2.1.0)
|
||||
rack
|
||||
rack-proxy (0.7.0)
|
||||
rack-proxy (0.7.6)
|
||||
rack
|
||||
rack-rewrite (1.5.1)
|
||||
rack-ssl (1.4.1)
|
||||
rack
|
||||
rack-test (2.0.2)
|
||||
rack (>= 1.3)
|
||||
rack-timeout (0.6.3)
|
||||
rails (6.1.7)
|
||||
actioncable (= 6.1.7)
|
||||
actionmailbox (= 6.1.7)
|
||||
actionmailer (= 6.1.7)
|
||||
actionpack (= 6.1.7)
|
||||
actiontext (= 6.1.7)
|
||||
actionview (= 6.1.7)
|
||||
activejob (= 6.1.7)
|
||||
activemodel (= 6.1.7)
|
||||
activerecord (= 6.1.7)
|
||||
activestorage (= 6.1.7)
|
||||
activesupport (= 6.1.7)
|
||||
rails (6.1.7.2)
|
||||
actioncable (= 6.1.7.2)
|
||||
actionmailbox (= 6.1.7.2)
|
||||
actionmailer (= 6.1.7.2)
|
||||
actionpack (= 6.1.7.2)
|
||||
actiontext (= 6.1.7.2)
|
||||
actionview (= 6.1.7.2)
|
||||
activejob (= 6.1.7.2)
|
||||
activemodel (= 6.1.7.2)
|
||||
activerecord (= 6.1.7.2)
|
||||
activestorage (= 6.1.7.2)
|
||||
activesupport (= 6.1.7.2)
|
||||
bundler (>= 1.15.0)
|
||||
railties (= 6.1.7)
|
||||
railties (= 6.1.7.2)
|
||||
sprockets-rails (>= 2.0.0)
|
||||
rails-controller-testing (1.0.5)
|
||||
actionpack (>= 5.0.1.rc1)
|
||||
@@ -522,37 +533,39 @@ GEM
|
||||
activesupport (>= 4.2)
|
||||
choice (~> 0.2.0)
|
||||
ruby-graphviz (~> 1.2)
|
||||
rails-html-sanitizer (1.4.4)
|
||||
rails-html-sanitizer (1.5.0)
|
||||
loofah (~> 2.19, >= 2.19.1)
|
||||
rails-i18n (7.0.6)
|
||||
i18n (>= 0.7, < 2)
|
||||
railties (>= 6.0.0, < 8)
|
||||
rails_safe_tasks (1.0.0)
|
||||
railties (6.1.7)
|
||||
actionpack (= 6.1.7)
|
||||
activesupport (= 6.1.7)
|
||||
railties (6.1.7.2)
|
||||
actionpack (= 6.1.7.2)
|
||||
activesupport (= 6.1.7.2)
|
||||
method_source
|
||||
rake (>= 12.2)
|
||||
thor (~> 1.0)
|
||||
rainbow (3.1.1)
|
||||
rake (13.0.6)
|
||||
ransack (2.4.2)
|
||||
activerecord (>= 5.2.4)
|
||||
activesupport (>= 5.2.4)
|
||||
ransack (2.6.0)
|
||||
activerecord (>= 6.0.4)
|
||||
activesupport (>= 6.0.4)
|
||||
i18n
|
||||
rb-fsevent (0.11.2)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
redcarpet (3.5.1)
|
||||
redis (4.8.0)
|
||||
regexp_parser (2.6.1)
|
||||
redcarpet (3.6.0)
|
||||
redis (4.8.1)
|
||||
redis-client (0.12.1)
|
||||
connection_pool
|
||||
regexp_parser (2.7.0)
|
||||
reline (0.3.2)
|
||||
io-console (~> 0.5)
|
||||
request_store (1.5.0)
|
||||
request_store (1.5.1)
|
||||
rack (>= 1.4)
|
||||
responders (3.0.1)
|
||||
actionpack (>= 5.0)
|
||||
railties (>= 5.0)
|
||||
responders (3.1.0)
|
||||
actionpack (>= 5.2)
|
||||
railties (>= 5.2)
|
||||
rexml (3.2.5)
|
||||
roadie (5.0.1)
|
||||
css_parser (~> 1.4)
|
||||
@@ -566,29 +579,29 @@ GEM
|
||||
roo (2.9.0)
|
||||
nokogiri (~> 1)
|
||||
rubyzip (>= 1.3.0, < 3.0.0)
|
||||
rspec (3.10.0)
|
||||
rspec-core (~> 3.10.0)
|
||||
rspec-expectations (~> 3.10.0)
|
||||
rspec-mocks (~> 3.10.0)
|
||||
rspec-core (3.10.2)
|
||||
rspec-support (~> 3.10.0)
|
||||
rspec-expectations (3.10.2)
|
||||
rspec (3.12.0)
|
||||
rspec-core (~> 3.12.0)
|
||||
rspec-expectations (~> 3.12.0)
|
||||
rspec-mocks (~> 3.12.0)
|
||||
rspec-core (3.12.1)
|
||||
rspec-support (~> 3.12.0)
|
||||
rspec-expectations (3.12.2)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.10.0)
|
||||
rspec-mocks (3.10.2)
|
||||
rspec-support (~> 3.12.0)
|
||||
rspec-mocks (3.12.3)
|
||||
diff-lcs (>= 1.2.0, < 2.0)
|
||||
rspec-support (~> 3.10.0)
|
||||
rspec-rails (5.1.2)
|
||||
actionpack (>= 5.2)
|
||||
activesupport (>= 5.2)
|
||||
railties (>= 5.2)
|
||||
rspec-core (~> 3.10)
|
||||
rspec-expectations (~> 3.10)
|
||||
rspec-mocks (~> 3.10)
|
||||
rspec-support (~> 3.10)
|
||||
rspec-support (~> 3.12.0)
|
||||
rspec-rails (6.0.1)
|
||||
actionpack (>= 6.1)
|
||||
activesupport (>= 6.1)
|
||||
railties (>= 6.1)
|
||||
rspec-core (~> 3.11)
|
||||
rspec-expectations (~> 3.11)
|
||||
rspec-mocks (~> 3.11)
|
||||
rspec-support (~> 3.11)
|
||||
rspec-retry (0.6.2)
|
||||
rspec-core (> 3.3)
|
||||
rspec-support (3.10.3)
|
||||
rspec-support (3.12.0)
|
||||
rswag-api (2.8.0)
|
||||
railties (>= 3.1, < 7.1)
|
||||
rswag-specs (2.8.0)
|
||||
@@ -599,7 +612,7 @@ GEM
|
||||
rswag-ui (2.8.0)
|
||||
actionpack (>= 3.1, < 7.1)
|
||||
railties (>= 3.1, < 7.1)
|
||||
rubocop (1.43.0)
|
||||
rubocop (1.45.1)
|
||||
json (~> 2.3)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 3.2.0.0)
|
||||
@@ -636,14 +649,14 @@ GEM
|
||||
semantic_range (3.0.0)
|
||||
shoulda-matchers (5.3.0)
|
||||
activesupport (>= 5.2.0)
|
||||
sidekiq (6.5.8)
|
||||
connection_pool (>= 2.2.5, < 3)
|
||||
rack (~> 2.0)
|
||||
redis (>= 4.5.0, < 5)
|
||||
sidekiq-scheduler (4.0.3)
|
||||
redis (>= 4.2.0)
|
||||
sidekiq (7.0.4)
|
||||
concurrent-ruby (< 2)
|
||||
connection_pool (>= 2.3.0)
|
||||
rack (>= 2.2.4)
|
||||
redis-client (>= 0.11.0)
|
||||
sidekiq-scheduler (5.0.1)
|
||||
rufus-scheduler (~> 3.2)
|
||||
sidekiq (>= 4, < 7)
|
||||
sidekiq (>= 4, < 8)
|
||||
tilt (>= 1.4.0)
|
||||
simplecov (0.22.0)
|
||||
docile (~> 1.1)
|
||||
@@ -694,13 +707,13 @@ GEM
|
||||
thread-local (1.1.0)
|
||||
tilt (2.0.11)
|
||||
timecop (0.9.6)
|
||||
timeout (0.3.0)
|
||||
timeout (0.3.1)
|
||||
ttfunk (1.7.0)
|
||||
tzinfo (2.0.5)
|
||||
tzinfo (2.0.6)
|
||||
concurrent-ruby (~> 1.0)
|
||||
unicode-display_width (2.4.2)
|
||||
uniform_notifier (1.16.0)
|
||||
valid_email2 (4.0.4)
|
||||
valid_email2 (4.0.5)
|
||||
activemodel (>= 3.2)
|
||||
mail (~> 2.5)
|
||||
validate_email (0.1.6)
|
||||
@@ -732,7 +745,7 @@ GEM
|
||||
addressable (>= 2.8.0)
|
||||
crack (>= 0.3.2)
|
||||
hashdiff (>= 0.4.0, < 2.0.0)
|
||||
webpacker (5.4.3)
|
||||
webpacker (5.4.4)
|
||||
activesupport (>= 5.2)
|
||||
rack-proxy (>= 0.6.1)
|
||||
railties (>= 5.2)
|
||||
@@ -749,7 +762,7 @@ GEM
|
||||
xml-simple (1.1.8)
|
||||
xpath (3.2.0)
|
||||
nokogiri (~> 1.8)
|
||||
zeitwerk (2.6.6)
|
||||
zeitwerk (2.6.7)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
@@ -762,7 +775,7 @@ DEPENDENCIES
|
||||
activerecord-import
|
||||
activerecord-postgresql-adapter
|
||||
activerecord-session_store
|
||||
acts-as-taggable-on (~> 8.1)
|
||||
acts-as-taggable-on
|
||||
acts_as_list (= 1.0.4)
|
||||
angular-rails-templates (>= 0.3.0)
|
||||
angular_rails_csrf
|
||||
@@ -803,7 +816,6 @@ DEPENDENCIES
|
||||
foreman
|
||||
fuubar (~> 2.5.1)
|
||||
geocoder
|
||||
gitlab-omniauth-openid-connect
|
||||
gmaps4rails
|
||||
good_migrations
|
||||
haml
|
||||
@@ -830,10 +842,11 @@ DEPENDENCIES
|
||||
oauth2 (~> 1.4.7)
|
||||
ofn-qz!
|
||||
omniauth-rails_csrf_protection
|
||||
omniauth_openid_connect
|
||||
openid_connect (~> 1.3)
|
||||
order_management!
|
||||
pagy (~> 5.1)
|
||||
paper_trail (~> 12.1.0)
|
||||
paper_trail (~> 12.1)
|
||||
paranoia (~> 2.4)
|
||||
paypal-sdk-merchant (= 1.117.2)
|
||||
pdf-reader
|
||||
@@ -842,14 +855,13 @@ DEPENDENCIES
|
||||
puma
|
||||
rack-mini-profiler (< 3.0.0)
|
||||
rack-rewrite
|
||||
rack-ssl
|
||||
rack-timeout
|
||||
rails (>= 6.1.4)
|
||||
rails-controller-testing
|
||||
rails-erd
|
||||
rails-i18n
|
||||
rails_safe_tasks (~> 1.0)
|
||||
ransack (= 2.4.2)
|
||||
ransack (~> 2.6.0)
|
||||
redcarpet
|
||||
redis (>= 4.0)
|
||||
responders
|
||||
|
||||
@@ -33,7 +33,7 @@ We also have a [Super Admin Guide][super-admin-guide] to help with configuration
|
||||
|
||||
## Testing
|
||||
|
||||
If you'd like to help out with testing, please introduce yourself on the #testing channel on [Slack][slack-invite] and download the [ZenHub browser extension][zenhub] to view the development pipeline. Also, do have a look in our [Welcome New QAs board](https://github.com/orgs/openfoodfoundation/projects/1) for some good first issues, both on manual and automated testing (RSpec/Capybara).
|
||||
If you'd like to help out with testing, please introduce yourself on the #testing channel on [Slack][slack-invite] and download the [ZenHub browser extension][zenhub] to view the development pipeline. Also, do have a look in our [Welcome New QAs board][welcome-qa] for some good first issues, both on manual and automated testing (RSpec/Capybara).
|
||||
|
||||
We use [BrowserStack](https://www.browserstack.com/) as a manual testing tool. BrowserStack provides open source projects with unlimited and free of charge accounts. A big thanks to them!
|
||||
|
||||
@@ -52,5 +52,6 @@ Copyright (c) 2012 - 2022 Open Food Foundation, released under the AGPL licence.
|
||||
[ofn-handbook]: https://ofn-user-guide.gitbook.io/ofn-handbook/
|
||||
[ofn-install]: https://github.com/openfoodfoundation/ofn-install
|
||||
[super-admin-guide]: https://ofn-user-guide.gitbook.io/ofn-super-admin-guide
|
||||
[welcome-dev]: https://github.com/orgs/openfoodfoundation/projects/2
|
||||
[welcome-dev]: https://github.com/orgs/openfoodfoundation/projects/5
|
||||
[welcome-qa]: https://github.com/orgs/openfoodfoundation/projects/6
|
||||
[zenhub]: https://www.zenhub.com/extension
|
||||
|
||||
@@ -9,41 +9,41 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
|
||||
$scope.sharedResource = false
|
||||
$scope.columns = Columns.columns
|
||||
$scope.sorting = SortOptions
|
||||
$scope.pagination = LineItems.pagination
|
||||
$scope.per_page_options = [
|
||||
{id: 15, name: t('js.admin.orders.index.per_page', results: 15)},
|
||||
{id: 50, name: t('js.admin.orders.index.per_page', results: 50)},
|
||||
{id: 100, name: t('js.admin.orders.index.per_page', results: 100)}
|
||||
]
|
||||
$scope.page = 1
|
||||
$scope.per_page = $scope.per_page_options[0].id
|
||||
|
||||
|
||||
$scope.confirmRefresh = ->
|
||||
LineItems.allSaved() || confirm(t("unsaved_changes_warning"))
|
||||
|
||||
$scope.initStartAndEnDate = ->
|
||||
$scope.startDate = moment().startOf('day').subtract(7, 'days').format('YYYY-MM-DD')
|
||||
$scope.endDate = moment().startOf('day').format('YYYY-MM-DD')
|
||||
|
||||
$scope.resetFilters = ->
|
||||
$scope.distributorFilter = ''
|
||||
$scope.supplierFilter = ''
|
||||
$scope.orderCycleFilter = ''
|
||||
$scope.quickSearch = ''
|
||||
$scope.initStartAndEnDate()
|
||||
event = new CustomEvent('flatpickr:change', {
|
||||
detail: {
|
||||
startDate: $scope.startDate,
|
||||
endDate: $scope.endDate
|
||||
}
|
||||
})
|
||||
$scope.startDate = undefined
|
||||
$scope.endDate = undefined
|
||||
event = new CustomEvent('flatpickr:clear')
|
||||
window.dispatchEvent(event)
|
||||
|
||||
$scope.resetSelectFilters = ->
|
||||
$scope.resetFilters()
|
||||
$scope.refreshData()
|
||||
|
||||
$scope.fetchResults = ->
|
||||
# creates indirection in order to factorize the code between orders and bulk orders
|
||||
# used in app/views/admin/shared/_angular_per_page_controls.html.haml
|
||||
$scope.refreshData()
|
||||
|
||||
$scope.refreshData = ->
|
||||
$scope.formattedStartDate = moment($scope.startDate).format()
|
||||
$scope.formattedEndDate = moment($scope.endDate).add(1,'day').format()
|
||||
|
||||
return unless moment($scope.formattedStartDate).isValid() and moment($scope.formattedEndDate).isValid()
|
||||
|
||||
return "cancel" unless $scope.confirmRefresh()
|
||||
|
||||
$scope.loadOrders()
|
||||
$scope.loadLineItems()
|
||||
|
||||
unless $scope.initialized
|
||||
@@ -51,33 +51,14 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
|
||||
|
||||
$scope.dereferenceLoadedData()
|
||||
|
||||
$scope.setOrderCycleDateRange = ->
|
||||
start_date = OrderCycles.byID[$scope.orderCycleFilter].orders_open_at
|
||||
end_date = OrderCycles.byID[$scope.orderCycleFilter].orders_close_at
|
||||
format = "YYYY-MM-DD HH:mm:ss Z"
|
||||
$scope.startDate = moment(start_date, format).format('YYYY-MM-DD')
|
||||
$scope.endDate = moment(end_date, format).startOf('day').format('YYYY-MM-DD')
|
||||
# throw a flatpickr:change event to change the date back in the datepicker
|
||||
event = new CustomEvent('flatpickr:change', {
|
||||
detail: {
|
||||
startDate: $scope.startDate,
|
||||
endDate: $scope.endDate
|
||||
}
|
||||
})
|
||||
window.dispatchEvent(event)
|
||||
|
||||
$scope.loadOrders = ->
|
||||
RequestMonitor.load $scope.orders = Orders.index(
|
||||
"q[state_not_eq]": "canceled",
|
||||
"q[shipment_state_not_eq]": "shipped",
|
||||
"q[completed_at_not_null]": "true",
|
||||
"q[distributor_id_eq]": $scope.distributorFilter,
|
||||
"q[order_cycle_id_eq]": $scope.orderCycleFilter,
|
||||
"q[completed_at_gteq]": $scope.formattedStartDate,
|
||||
"q[completed_at_lt]": $scope.formattedEndDate
|
||||
"q[id_in][]": $scope.line_items.map((line_item) -> line_item.order.id)
|
||||
)
|
||||
|
||||
$scope.loadLineItems = ->
|
||||
[formattedStartDate, formattedEndDate] = $scope.formatDates($scope.startDate, $scope.endDate)
|
||||
|
||||
RequestMonitor.load LineItems.index(
|
||||
"q[order_state_not_eq]": "canceled",
|
||||
"q[order_shipment_state_not_eq]": "shipped",
|
||||
@@ -85,23 +66,32 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
|
||||
"q[order_distributor_id_eq]": $scope.distributorFilter,
|
||||
"q[variant_product_supplier_id_eq]": $scope.supplierFilter,
|
||||
"q[order_order_cycle_id_eq]": $scope.orderCycleFilter,
|
||||
"q[order_completed_at_gteq]": $scope.formattedStartDate,
|
||||
"q[order_completed_at_lt]": $scope.formattedEndDate
|
||||
"q[order_completed_at_gteq]": if formattedStartDate then formattedStartDate else undefined,
|
||||
"q[order_completed_at_lt]": if formattedEndDate then formattedEndDate else undefined,
|
||||
"page": $scope.page,
|
||||
"per_page": $scope.per_page
|
||||
)
|
||||
|
||||
$scope.formatDates = (startDate, endDate) ->
|
||||
formattedStartDate = moment(startDate).format('YYYY-MM-DD') if startDate
|
||||
formattedEndDate = moment(endDate).add(1,'day').format('YYYY-MM-DD') if endDate
|
||||
return [formattedStartDate, formattedEndDate]
|
||||
|
||||
$scope.loadAssociatedData = ->
|
||||
RequestMonitor.load $scope.distributors = Enterprises.index(action: "visible", ams_prefix: "basic", "q[sells_in][]": ["own", "any"])
|
||||
RequestMonitor.load $scope.orderCycles = OrderCycles.index(ams_prefix: "basic", as: "distributor", "q[orders_close_at_gt]": "#{moment().subtract(90,'days').format()}")
|
||||
RequestMonitor.load $scope.suppliers = Enterprises.index(action: "visible", ams_prefix: "basic", "q[is_primary_producer_eq]": "true")
|
||||
|
||||
$scope.dereferenceLoadedData = ->
|
||||
RequestMonitor.load $q.all([$scope.orders.$promise, $scope.distributors.$promise, $scope.orderCycles.$promise, $scope.suppliers.$promise, $scope.line_items.$promise]).then ->
|
||||
Dereferencer.dereferenceAttr $scope.orders, "distributor", Enterprises.byID
|
||||
Dereferencer.dereferenceAttr $scope.orders, "order_cycle", OrderCycles.byID
|
||||
RequestMonitor.load $q.all([$scope.distributors.$promise, $scope.orderCycles.$promise, $scope.suppliers.$promise, $scope.line_items.$promise]).then ->
|
||||
Dereferencer.dereferenceAttr $scope.line_items, "supplier", Enterprises.byID
|
||||
Dereferencer.dereferenceAttr $scope.line_items, "order", Orders.byID
|
||||
$scope.bulk_order_form.$setPristine()
|
||||
StatusMessage.clear()
|
||||
$scope.loadOrders()
|
||||
RequestMonitor.load $q.all([$scope.orders.$promise]).then ->
|
||||
Dereferencer.dereferenceAttr $scope.line_items, "order", Orders.byID
|
||||
Dereferencer.dereferenceAttr $scope.orders, "distributor", Enterprises.byID
|
||||
Dereferencer.dereferenceAttr $scope.orders, "order_cycle", OrderCycles.byID
|
||||
$scope.bulk_order_form.$setPristine()
|
||||
StatusMessage.clear()
|
||||
|
||||
unless $scope.initialized
|
||||
$scope.initialized = true
|
||||
@@ -219,7 +209,7 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
|
||||
|
||||
$scope.getGroupBySizeFormattedValueWithUnitName = (value, unitsProduct, unitsVariant) ->
|
||||
scale = $scope.getScale(unitsProduct, unitsVariant)
|
||||
if scale
|
||||
if scale && value
|
||||
value = value / scale if scale != 28.35 && scale != 1 && scale != 453.6 # divide by scale if not smallest unit
|
||||
$scope.getFormattedValueWithUnitName(value, unitsProduct, unitsVariant, scale)
|
||||
else
|
||||
@@ -263,4 +253,8 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
|
||||
lineItem.final_weight_volume = LineItems.pristineByID[lineItem.id].final_weight_volume * lineItem.quantity / LineItems.pristineByID[lineItem.id].quantity
|
||||
$scope.weightAdjustedPrice(lineItem)
|
||||
|
||||
$scope.changePage = (newPage) ->
|
||||
$scope.page = newPage
|
||||
$scope.refreshData()
|
||||
|
||||
$scope.resetSelectFilters()
|
||||
|
||||
@@ -35,7 +35,11 @@ angular.module('admin.orderCycles')
|
||||
OrderCycle.removeExchangeFee(exchange, index)
|
||||
$scope.order_cycle_form.$dirty = true
|
||||
|
||||
$scope.setPickupTimeFieldDirty = (index) ->
|
||||
$scope.setPickupTimeFieldDirty = (index, pickup_time) ->
|
||||
# if the pickup_time is already set we are in edit mode, so no need to set pickup_time field as dirty
|
||||
# to show it is required (it has a red border when set to dirty)
|
||||
return if pickup_time
|
||||
|
||||
$timeout ->
|
||||
pickup_time_field_name = "order_cycle_outgoing_exchange_" + index + "_pickup_time"
|
||||
$scope.order_cycle_form[pickup_time_field_name].$setDirty()
|
||||
|
||||
@@ -17,9 +17,12 @@ angular.module('Darkswarm').directive "ofnFlash", (flash, $timeout, RailsFlashLo
|
||||
|
||||
# Callback when a new flash message is pushed to flash service
|
||||
show = (message, type)=>
|
||||
if message
|
||||
$scope.flashes.push({message: message, type: typePairings[type]})
|
||||
$timeout($scope.delete, 10000)
|
||||
return unless message
|
||||
# if same message already exists, don't add it again
|
||||
return if $scope.flashes.some((flash) -> flash.message == message)
|
||||
|
||||
$scope.flashes.push({message: message, type: typePairings[type]})
|
||||
$timeout($scope.delete, 10000)
|
||||
|
||||
$scope.delete = ->
|
||||
$scope.flashes.shift()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
angular.module('Darkswarm').directive "ofnOnHand", (StockQuantity) ->
|
||||
angular.module('Darkswarm').directive "ofnOnHand", (StockQuantity, Messages) ->
|
||||
restrict: 'A'
|
||||
require: "ngModel"
|
||||
scope: true
|
||||
@@ -16,7 +16,7 @@ angular.module('Darkswarm').directive "ofnOnHand", (StockQuantity) ->
|
||||
ngModel.$parsers.push (viewValue) ->
|
||||
available_quantity = scope.available_quantity()
|
||||
if parseInt(viewValue) > available_quantity
|
||||
alert t("js.insufficient_stock", {on_hand: available_quantity})
|
||||
Messages.flash({error: t("js.insufficient_stock", {on_hand: available_quantity})})
|
||||
viewValue = available_quantity
|
||||
ngModel.$setViewValue viewValue
|
||||
ngModel.$render()
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
$( document ).ready(function() {
|
||||
$("#closeie").click(function() {
|
||||
$("#ie-warning").hide();
|
||||
});
|
||||
})
|
||||
@@ -1,18 +1,26 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class ProductComponent < ViewComponentReflex::Component
|
||||
DATETIME_FORMAT = '%F %T'
|
||||
|
||||
def initialize(product:, columns:)
|
||||
super
|
||||
@product = product
|
||||
@image = @product.images[0] if product.images.any?
|
||||
@columns = columns.map { |c|
|
||||
@columns = columns.map do |c|
|
||||
{
|
||||
id: c[:value],
|
||||
value: column_value(c[:value])
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
# This must be define when using ProductComponent.with_collection()
|
||||
def collection_key
|
||||
@product.id
|
||||
end
|
||||
|
||||
# rubocop:disable Metrics/CyclomaticComplexity, Metrics/MethodLength
|
||||
def column_value(column)
|
||||
case column
|
||||
when 'name'
|
||||
@@ -25,6 +33,27 @@ class ProductComponent < ViewComponentReflex::Component
|
||||
@product.supplier.name
|
||||
when 'category'
|
||||
@product.taxons.map(&:name).join(', ')
|
||||
when 'sku'
|
||||
@product.sku
|
||||
when 'on_hand'
|
||||
@product.on_hand || 0
|
||||
when 'on_demand'
|
||||
@product.on_demand
|
||||
when 'tax_category'
|
||||
@product.tax_category.name
|
||||
when 'inherits_properties'
|
||||
@product.inherits_properties
|
||||
when 'available_on'
|
||||
format_date(@product.available_on)
|
||||
when 'import_date'
|
||||
format_date(@product.import_date)
|
||||
end
|
||||
end
|
||||
# rubocop:enable Metrics/CyclomaticComplexity, Metrics/MethodLength
|
||||
|
||||
private
|
||||
|
||||
def format_date(date)
|
||||
date&.strftime(DATETIME_FORMAT) || ''
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,27 +3,37 @@
|
||||
class ProductsTableComponent < ViewComponentReflex::Component
|
||||
include Pagy::Backend
|
||||
|
||||
SORTABLE_COLUMNS = ["name"].freeze
|
||||
SELECTABLE_COMUMNS = [{ label: I18n.t("admin.products_page.columns_selector.price"),
|
||||
value: "price" },
|
||||
{ label: I18n.t("admin.products_page.columns_selector.unit"),
|
||||
value: "unit" },
|
||||
{ label: I18n.t("admin.products_page.columns_selector.producer"),
|
||||
value: "producer" },
|
||||
{ label: I18n.t("admin.products_page.columns_selector.category"),
|
||||
value: "category" }].sort { |a, b|
|
||||
SORTABLE_COLUMNS = ['name', 'import_date'].freeze
|
||||
SELECTABLE_COLUMNS = [
|
||||
{ label: I18n.t("admin.products_page.columns_selector.price"), value: "price" },
|
||||
{ label: I18n.t("admin.products_page.columns_selector.unit"), value: "unit" },
|
||||
{ label: I18n.t("admin.products_page.columns_selector.producer"), value: "producer" },
|
||||
{ label: I18n.t("admin.products_page.columns_selector.category"), value: "category" },
|
||||
{ label: I18n.t("admin.products_page.columns_selector.sku"), value: "sku" },
|
||||
{ label: I18n.t("admin.products_page.columns_selector.on_hand"), value: "on_hand" },
|
||||
{ label: I18n.t("admin.products_page.columns_selector.on_demand"), value: "on_demand" },
|
||||
{ label: I18n.t("admin.products_page.columns_selector.tax_category"), value: "tax_category" },
|
||||
{
|
||||
label: I18n.t("admin.products_page.columns_selector.inherits_properties"),
|
||||
value: "inherits_properties"
|
||||
},
|
||||
{ label: I18n.t("admin.products_page.columns_selector.available_on"), value: "available_on" },
|
||||
{ label: I18n.t("admin.products_page.columns_selector.import_date"), value: "import_date" }
|
||||
].sort do |a, b|
|
||||
a[:label] <=> b[:label]
|
||||
}.freeze
|
||||
end.freeze
|
||||
|
||||
PER_PAGE_VALUE = [10, 25, 50, 100].freeze
|
||||
PER_PAGE = PER_PAGE_VALUE.map { |value| { label: value, value: value } }
|
||||
NAME_COLUMN = { label: I18n.t("admin.products_page.columns.name"), value: "name",
|
||||
sortable: true }.freeze
|
||||
NAME_COLUMN = {
|
||||
label: I18n.t("admin.products_page.columns.name"), value: "name", sortable: true
|
||||
}.freeze
|
||||
|
||||
def initialize(user:)
|
||||
super
|
||||
@user = user
|
||||
@selectable_columns = SELECTABLE_COMUMNS
|
||||
@columns_selected = ["price", "unit"]
|
||||
@selectable_columns = SELECTABLE_COLUMNS
|
||||
@columns_selected = ['unit', 'price', 'on_hand', 'category', 'import_date']
|
||||
@per_page = PER_PAGE
|
||||
@per_page_selected = [10]
|
||||
@categories = [{ label: "All", value: "all" }] +
|
||||
@@ -40,16 +50,20 @@ class ProductsTableComponent < ViewComponentReflex::Component
|
||||
@search_term = ""
|
||||
end
|
||||
|
||||
# any change on a "reflex_data_attributes" (defined in the template) will trigger a re render
|
||||
def before_render
|
||||
fetch_products
|
||||
refresh_columns
|
||||
end
|
||||
|
||||
# Element refers to the component the data is set on
|
||||
def search_term
|
||||
# Element is SearchInputComponent
|
||||
@search_term = element.dataset['value']
|
||||
end
|
||||
|
||||
def toggle_column
|
||||
# Element is SelectorComponent
|
||||
column = element.dataset['value']
|
||||
@columns_selected = if @columns_selected.include?(column)
|
||||
@columns_selected - [column]
|
||||
@@ -59,26 +73,33 @@ class ProductsTableComponent < ViewComponentReflex::Component
|
||||
end
|
||||
|
||||
def click_sort
|
||||
@sort = { column: element.dataset['sort-value'],
|
||||
direction: element.dataset['sort-direction'] == "asc" ? "desc" : "asc" }
|
||||
# Element is TableHeaderComponent
|
||||
@sort = {
|
||||
column: element.dataset['sort-value'],
|
||||
direction: element.dataset['sort-direction'] == "asc" ? "desc" : "asc"
|
||||
}
|
||||
end
|
||||
|
||||
def toggle_per_page
|
||||
# Element is SelectorComponent
|
||||
selected = element.dataset['value'].to_i
|
||||
@per_page_selected = [selected] if PER_PAGE_VALUE.include?(selected)
|
||||
end
|
||||
|
||||
def toggle_category
|
||||
# Element is SelectorWithFilterComponent
|
||||
category_clicked = element.dataset['value']
|
||||
@categories_selected = toggle_selector_with_filter(category_clicked, @categories_selected)
|
||||
end
|
||||
|
||||
def toggle_producer
|
||||
# Element is SelectorWithFilterComponent
|
||||
producer_clicked = element.dataset['value']
|
||||
@producers_selected = toggle_selector_with_filter(producer_clicked, @producers_selected)
|
||||
end
|
||||
|
||||
def change_page
|
||||
# Element is PaginationComponent
|
||||
page = element.dataset['page'].to_i
|
||||
@page = page if page > 0
|
||||
end
|
||||
@@ -86,10 +107,13 @@ class ProductsTableComponent < ViewComponentReflex::Component
|
||||
private
|
||||
|
||||
def refresh_columns
|
||||
@columns = @columns_selected.map { |column|
|
||||
{ label: I18n.t("admin.products_page.columns.#{column}"), value: column,
|
||||
sortable: SORTABLE_COLUMNS.include?(column) }
|
||||
}.sort! { |a, b| a[:label] <=> b[:label] }
|
||||
@columns = @columns_selected.map do |column|
|
||||
{
|
||||
label: I18n.t("admin.products_page.columns.#{column}"),
|
||||
value: column,
|
||||
sortable: SORTABLE_COLUMNS.include?(column)
|
||||
}
|
||||
end.sort! { |a, b| a[:label] <=> b[:label] }
|
||||
@columns.unshift(NAME_COLUMN)
|
||||
end
|
||||
|
||||
@@ -145,8 +169,13 @@ class ProductsTableComponent < ViewComponentReflex::Component
|
||||
def product_query_includes
|
||||
[
|
||||
master: [:images],
|
||||
variants: [:default_price, :stock_locations, :stock_items, :variant_overrides,
|
||||
{ option_values: :option_type }]
|
||||
variants: [
|
||||
:default_price,
|
||||
:stock_locations,
|
||||
:stock_items,
|
||||
:variant_overrides,
|
||||
{ option_values: :option_type }
|
||||
]
|
||||
]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -8,12 +8,12 @@ module Admin
|
||||
class EnterprisesController < Admin::ResourceController
|
||||
include GeocodeEnterpriseAddress
|
||||
include CablecarResponses
|
||||
include Pagy::Backend
|
||||
|
||||
# These need to run before #load_resource so that @object is initialised with sanitised values
|
||||
prepend_before_action :override_owner, only: :create
|
||||
prepend_before_action :override_sells, only: :create
|
||||
|
||||
before_action :load_enterprise_set, only: :index
|
||||
before_action :load_countries, except: [:index, :register, :check_permalink]
|
||||
before_action :load_methods_and_fees, only: [:edit, :update]
|
||||
before_action :load_groups, only: [:new, :edit, :update, :create]
|
||||
@@ -33,6 +33,8 @@ module Admin
|
||||
include OrderCyclesHelper
|
||||
|
||||
def index
|
||||
load_enterprise_set_on_index
|
||||
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.json {
|
||||
@@ -100,7 +102,8 @@ module Admin
|
||||
end
|
||||
|
||||
def bulk_update
|
||||
@enterprise_set = Sets::EnterpriseSet.new(collection, bulk_params)
|
||||
load_enterprise_set_with_params(bulk_params)
|
||||
|
||||
if @enterprise_set.save
|
||||
flash[:success] = I18n.t(:enterprise_bulk_update_success_notice)
|
||||
|
||||
@@ -148,8 +151,15 @@ module Admin
|
||||
|
||||
private
|
||||
|
||||
def load_enterprise_set
|
||||
@enterprise_set = Sets::EnterpriseSet.new(collection) if spree_current_user.admin?
|
||||
def load_enterprise_set_on_index
|
||||
return unless spree_current_user.admin?
|
||||
|
||||
load_enterprise_set_with_params
|
||||
end
|
||||
|
||||
def load_enterprise_set_with_params(params = {})
|
||||
@pagy, @paginated_collection = pagy(@collection)
|
||||
@enterprise_set = Sets::EnterpriseSet.new(@paginated_collection, params)
|
||||
end
|
||||
|
||||
def load_countries
|
||||
|
||||
@@ -61,7 +61,7 @@ module Api
|
||||
def search_customers
|
||||
customers = visible_customers.includes(:bill_address, :ship_address)
|
||||
customers = customers.where(enterprise_id: params[:enterprise_id]) if params[:enterprise_id]
|
||||
customers.ransack(params[:q]).result
|
||||
customers.ransack(params[:q]).result.order(:id)
|
||||
end
|
||||
|
||||
def visible_customers
|
||||
|
||||
@@ -4,6 +4,11 @@ class ErrorsController < ApplicationController
|
||||
layout "errors"
|
||||
|
||||
def not_found
|
||||
Bugsnag.notify("404") do |event|
|
||||
event.severity = "info"
|
||||
|
||||
event.add_metadata(:request, request.env)
|
||||
end
|
||||
render status: :not_found
|
||||
end
|
||||
|
||||
|
||||
@@ -36,11 +36,7 @@ class SplitCheckoutController < ::BaseController
|
||||
advance_order_state
|
||||
redirect_to_step
|
||||
else
|
||||
flash.now[:error] ||= I18n.t('split_checkout.errors.global')
|
||||
|
||||
render status: :unprocessable_entity, operations: cable_car.
|
||||
replace("#checkout", partial("split_checkout/checkout")).
|
||||
replace("#flashes", partial("shared/flashes", locals: { flashes: flash }))
|
||||
render_error
|
||||
end
|
||||
rescue Spree::Core::GatewayError => e
|
||||
flash[:error] = I18n.t(:spree_gateway_error_flash_for_checkout, error: e.message)
|
||||
@@ -50,6 +46,61 @@ class SplitCheckoutController < ::BaseController
|
||||
|
||||
private
|
||||
|
||||
def render_error
|
||||
flash.now[:error] ||= I18n.t(
|
||||
'split_checkout.errors.saving_failed',
|
||||
messages: order_error_messages
|
||||
)
|
||||
|
||||
render status: :unprocessable_entity, operations: cable_car.
|
||||
replace("#checkout", partial("split_checkout/checkout")).
|
||||
replace("#flashes", partial("shared/flashes", locals: { flashes: flash }))
|
||||
end
|
||||
|
||||
def order_error_messages
|
||||
# Remove ship_address.* errors if no shipping method is not selected
|
||||
remove_ship_address_errors if no_ship_address_needed?
|
||||
|
||||
# Reorder errors to make sure the most important ones are shown first
|
||||
# and finally, return the error messages to sentence
|
||||
reorder_errors.map(&:full_message).to_sentence
|
||||
end
|
||||
|
||||
def no_ship_address_needed?
|
||||
@order.errors[:shipping_method].present? || params[:ship_address_same_as_billing] == "1"
|
||||
end
|
||||
|
||||
def remove_ship_address_errors
|
||||
@order.errors.delete("ship_address.firstname")
|
||||
@order.errors.delete("ship_address.address1")
|
||||
@order.errors.delete("ship_address.city")
|
||||
@order.errors.delete("ship_address.phone")
|
||||
@order.errors.delete("ship_address.lastname")
|
||||
@order.errors.delete("ship_address.zipcode")
|
||||
end
|
||||
|
||||
def reorder_errors
|
||||
@order.errors.sort_by do |e|
|
||||
case e.attribute
|
||||
when /email/i then 0
|
||||
when /phone/i then 1
|
||||
when /bill_address/i then 2 + bill_address_error_order(e)
|
||||
else 20
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def bill_address_error_order(error)
|
||||
case error.attribute
|
||||
when /firstname/i then 0
|
||||
when /lastname/i then 1
|
||||
when /address1/i then 2
|
||||
when /city/i then 3
|
||||
when /zipcode/i then 4
|
||||
else 5
|
||||
end
|
||||
end
|
||||
|
||||
def flash_error_when_no_shipping_method_available
|
||||
flash[:error] = I18n.t('split_checkout.errors.no_shipping_methods_available')
|
||||
end
|
||||
|
||||
@@ -6,7 +6,6 @@ module Spree
|
||||
def edit
|
||||
@preferences_general = [:site_name, :default_seo_title, :default_meta_keywords,
|
||||
:default_meta_description, :site_url]
|
||||
@preferences_security = [:allow_ssl_in_production, :allow_ssl_in_staging]
|
||||
@preferences_currency = [:display_currency, :hide_cents]
|
||||
end
|
||||
|
||||
|
||||
@@ -11,6 +11,7 @@ module CheckoutHelper
|
||||
|
||||
def checkout_adjustments_for(order, opts = {})
|
||||
exclude = opts[:exclude] || {}
|
||||
reject_zero_amount = opts.fetch(:reject_zero_amount, true)
|
||||
|
||||
adjustments = order.all_adjustments.eligible.to_a
|
||||
|
||||
@@ -32,6 +33,10 @@ module CheckoutHelper
|
||||
}
|
||||
end
|
||||
|
||||
if reject_zero_amount
|
||||
adjustments.reject! { |a| a.amount == 0 }
|
||||
end
|
||||
|
||||
adjustments
|
||||
end
|
||||
|
||||
|
||||
@@ -26,6 +26,12 @@ module ReportsHelper
|
||||
end.uniq
|
||||
end
|
||||
|
||||
def customer_email_options(order_customers)
|
||||
order_customers.map do |customer|
|
||||
[customer&.email, customer&.id]
|
||||
end
|
||||
end
|
||||
|
||||
def currency_symbol
|
||||
Spree::Money.currency_symbol
|
||||
end
|
||||
|
||||
@@ -12,6 +12,16 @@ module TaxHelper
|
||||
end
|
||||
end
|
||||
|
||||
def display_line_items_taxes(line_item, display_zero: true)
|
||||
if line_item.included_tax.positive?
|
||||
Spree::Money.new(line_item.included_tax, currency: line_item.currency)
|
||||
elsif line_item.added_tax.positive?
|
||||
Spree::Money.new(line_item.added_tax, currency: line_item.currency)
|
||||
elsif display_zero
|
||||
Spree::Money.new(0.00, currency: line_item.currency)
|
||||
end
|
||||
end
|
||||
|
||||
def display_total_with_tax(taxable)
|
||||
total = taxable.amount + taxable.additional_tax_total
|
||||
Spree::Money.new(total, currency: taxable.currency)
|
||||
|
||||
@@ -7,7 +7,6 @@ module Calculator
|
||||
extend Spree::LocalizedNumber
|
||||
|
||||
preference :amount, :decimal, default: 0
|
||||
preference :currency, :string, default: Spree::Config[:currency]
|
||||
|
||||
localize_number :preferred_amount
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ module Calculator
|
||||
preference :first_item, :decimal, default: 0.0
|
||||
preference :additional_item, :decimal, default: 0.0
|
||||
preference :max_items, :integer, default: 0
|
||||
preference :currency, :string, default: Spree::Config[:currency]
|
||||
|
||||
localize_number :preferred_first_item,
|
||||
:preferred_additional_item
|
||||
|
||||
13
app/models/calculator/none.rb
Normal file
13
app/models/calculator/none.rb
Normal file
@@ -0,0 +1,13 @@
|
||||
# frozen_string_literal: false
|
||||
|
||||
module Calculator
|
||||
class None < Spree::Calculator
|
||||
def self.description
|
||||
I18n.t(:none)
|
||||
end
|
||||
|
||||
def compute(_object = nil)
|
||||
0
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -7,7 +7,6 @@ module Calculator
|
||||
extend Spree::LocalizedNumber
|
||||
|
||||
preference :amount, :decimal, default: 0
|
||||
preference :currency, :string, default: Spree::Config[:currency]
|
||||
|
||||
localize_number :preferred_amount
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ module Calculator
|
||||
preference :minimal_amount, :decimal, default: 0
|
||||
preference :normal_amount, :decimal, default: 0
|
||||
preference :discount_amount, :decimal, default: 0
|
||||
preference :currency, :string, default: Spree::Config[:currency]
|
||||
|
||||
localize_number :preferred_minimal_amount,
|
||||
:preferred_normal_amount,
|
||||
|
||||
@@ -33,8 +33,6 @@ module Spree
|
||||
preference :allow_backorder_shipping, :boolean, default: false
|
||||
preference :allow_checkout_on_gateway_error, :boolean, default: false
|
||||
preference :allow_guest_checkout, :boolean, default: true
|
||||
preference :allow_ssl_in_production, :boolean, default: true
|
||||
preference :allow_ssl_in_staging, :boolean, default: true
|
||||
# Replace with the name of a zone if you would like to limit the countries
|
||||
preference :checkout_zone, :string, default: nil
|
||||
preference :currency, :string, default: "USD"
|
||||
|
||||
@@ -186,6 +186,10 @@ module Spree
|
||||
adjustments.tax.inclusive.sum(:amount)
|
||||
end
|
||||
|
||||
def added_tax
|
||||
adjustments.tax.additional.sum(:amount)
|
||||
end
|
||||
|
||||
def tax_rates
|
||||
product.tax_category&.tax_rates || []
|
||||
end
|
||||
|
||||
@@ -13,7 +13,7 @@ module Spree
|
||||
include SetUnusedAddressFields
|
||||
|
||||
searchable_attributes :number, :state, :shipment_state, :payment_state, :distributor_id,
|
||||
:order_cycle_id, :email, :total
|
||||
:order_cycle_id, :email, :total, :customer_id
|
||||
searchable_associations :shipping_method, :bill_address
|
||||
searchable_scopes :complete, :incomplete
|
||||
|
||||
@@ -665,6 +665,7 @@ module Spree
|
||||
|
||||
def after_cancel
|
||||
shipments.each(&:cancel!)
|
||||
payments.checkout.each(&:void!)
|
||||
|
||||
OrderMailer.cancel_email(id).deliver_later if send_cancellation_email
|
||||
update(payment_state: updater.update_payment_state)
|
||||
@@ -672,6 +673,8 @@ module Spree
|
||||
|
||||
def after_resume
|
||||
shipments.each(&:resume!)
|
||||
payments.void.each(&:resume!)
|
||||
|
||||
update(payment_state: updater.update_payment_state)
|
||||
end
|
||||
|
||||
|
||||
@@ -47,9 +47,11 @@ module Spree
|
||||
scope :with_state, ->(s) { where(state: s.to_s) }
|
||||
scope :completed, -> { with_state('completed') }
|
||||
scope :incomplete, -> { where(state: %w(checkout pending requires_authorization)) }
|
||||
scope :checkout, -> { with_state('checkout') }
|
||||
scope :pending, -> { with_state('pending') }
|
||||
scope :failed, -> { with_state('failed') }
|
||||
scope :valid, -> { where.not(state: %w(failed invalid)) }
|
||||
scope :void, -> { with_state('void') }
|
||||
scope :authorization_action_required, -> { where.not(cvv_response_message: nil) }
|
||||
scope :requires_authorization, -> { with_state("requires_authorization") }
|
||||
scope :with_payment_intent, ->(code) { where(response_code: code) }
|
||||
@@ -89,6 +91,10 @@ module Spree
|
||||
event :complete_authorization do
|
||||
transition from: [:requires_authorization], to: :completed
|
||||
end
|
||||
event :resume do
|
||||
transition from: [:void], to: :checkout
|
||||
end
|
||||
|
||||
|
||||
after_transition to: :completed, do: :set_captured_at
|
||||
end
|
||||
|
||||
@@ -113,7 +113,7 @@ module Spree
|
||||
end
|
||||
|
||||
def init
|
||||
self.calculator ||= ::Calculator::FlatRate.new(preferred_amount: 0)
|
||||
self.calculator ||= ::Calculator::None.new
|
||||
end
|
||||
|
||||
def has_distributor?(distributor)
|
||||
|
||||
@@ -32,6 +32,8 @@ module Spree
|
||||
validate :at_least_one_shipping_category
|
||||
validates :display_on, inclusion: { in: DISPLAY_ON_OPTIONS.values }, allow_nil: true
|
||||
|
||||
after_initialize :init
|
||||
|
||||
after_save :touch_distributors
|
||||
|
||||
scope :managed_by, lambda { |user|
|
||||
@@ -67,10 +69,6 @@ module Spree
|
||||
tracking_url.gsub(/:tracking/, tracking) unless tracking.blank? || tracking_url.blank?
|
||||
end
|
||||
|
||||
def self.calculators
|
||||
spree_calculators.__send__ model_name_without_spree_namespace
|
||||
end
|
||||
|
||||
# Some shipping methods are only meant to be set via backend
|
||||
def frontend?
|
||||
display_on != "back_end"
|
||||
@@ -110,6 +108,10 @@ module Spree
|
||||
where(display_on: [nil, ""])
|
||||
end
|
||||
|
||||
def init
|
||||
self.calculator ||= ::Calculator::None.new if new_record?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def no_active_or_upcoming_order_cycle_distributors_with_only_one_shipping_method?
|
||||
|
||||
@@ -15,7 +15,7 @@ class DefaultAddressUpdater
|
||||
assign_bill_addresses
|
||||
assign_ship_addresses
|
||||
|
||||
customer.save
|
||||
customer&.save
|
||||
user&.save
|
||||
end
|
||||
|
||||
|
||||
@@ -19,8 +19,8 @@ class JobProcessor
|
||||
exit # rubocop:disable Rails/Exit
|
||||
end
|
||||
|
||||
# Wait for all forked child processes to exit
|
||||
Process.waitall
|
||||
# Wait for the forked child process to exit.
|
||||
Process.waitpid(child)
|
||||
ensure
|
||||
# If this Puma thread is interrupted then we need to detach the child
|
||||
# process to avoid it becoming a zombie.
|
||||
|
||||
@@ -4,7 +4,7 @@ module PermittedAttributes
|
||||
class Calculator
|
||||
def self.attributes
|
||||
[
|
||||
:id, :preferred_currency, :preferred_amount, :preferred_flat_percent,
|
||||
:id, :preferred_amount, :preferred_flat_percent,
|
||||
:preferred_minimal_amount, :preferred_normal_amount, :preferred_discount_amount,
|
||||
:preferred_unit_from_list, :preferred_per_unit, :preferred_first_item,
|
||||
:preferred_additional_item, :preferred_max_items
|
||||
|
||||
@@ -56,7 +56,7 @@ module VariantUnits
|
||||
def option_value_value_unit_scaled
|
||||
unit_scale, unit_name = scale_for_unit_value
|
||||
|
||||
value = BigDecimal(@variant.unit_value / unit_scale, 6)
|
||||
value = (@variant.unit_value / unit_scale).to_d.truncate(2)
|
||||
|
||||
[value, unit_name]
|
||||
end
|
||||
|
||||
@@ -38,3 +38,5 @@
|
||||
%tr
|
||||
%td{colspan: "4"}= t(:none)
|
||||
= f.submit t(:update)
|
||||
|
||||
= render partial: 'admin/shared/pagy_links', locals: { pagy: @pagy }
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
.row
|
||||
= t(:required_fields)
|
||||
(
|
||||
%span.required *
|
||||
)
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= bf.label :company, t(".company_legal_name")
|
||||
%span.required *
|
||||
%i.text-big.icon-question-sign{ "data-controller": "help-modal-link", "data-action": "click->help-modal-link#open", "data-help-modal-link-target-value": "business_address_info_modal" }
|
||||
.eight.columns.omega
|
||||
= bf.text_field :company, { placeholder: t(".company_placeholder") }
|
||||
@@ -8,6 +14,7 @@
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= bf.label :address1, t('.address1')
|
||||
%span.required *
|
||||
%i.text-big.icon-question-sign{ "data-controller": "help-modal-link", "data-action": "click->help-modal-link#open", "data-help-modal-link-target-value": "business_address_info_modal" }
|
||||
.eight.columns.omega
|
||||
= bf.text_field :address1, { placeholder: t(".address1_placeholder") }
|
||||
@@ -19,8 +26,10 @@
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= bf.label :city, t(:city)
|
||||
%span.required *
|
||||
\/
|
||||
= bf.label :zipcode, t(:postcode)
|
||||
%span.required *
|
||||
.four.columns
|
||||
= bf.text_field :city, { placeholder: t(:city_placeholder) }
|
||||
.four.columns.omega
|
||||
@@ -28,8 +37,10 @@
|
||||
.row{"data-controller": "dependent-select", "data-dependent-select-options-value": countries_with_states }
|
||||
.three.columns.alpha
|
||||
= bf.label :country_id, t(:country)
|
||||
%span.required *
|
||||
\/
|
||||
= bf.label :state_id, t(:state)
|
||||
%span.required *
|
||||
.four.columns
|
||||
= bf.select :country_id, options_for_select(available_countries.map { |c| [c.name, c.id] }, @enterprise.business_address.country_id), {}, { "data-controller": "tom-select", "data-dependent-select-target": "source", "data-action": "dependent-select#handleSelectChange", class: "primary" }
|
||||
.four.columns.omega
|
||||
@@ -39,6 +50,7 @@
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= bf.label :phone, t(".legal_phone_number")
|
||||
%span.required *
|
||||
%i.text-big.icon-question-sign{ "data-controller": "help-modal-link", "data-action": "click->help-modal-link#open", "data-help-modal-link-target-value": "business_address_info_modal" }
|
||||
.eight.columns.omega
|
||||
= bf.text_field :phone, { placeholder: t(".phone_placeholder") }
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
%td.tags.panel-toggle.text-center{ name: "tags", ng: { if: 'enterprises[exchange.enterprise_id].managed || order_cycle.viewing_as_coordinator' } }
|
||||
{{ exchange.tags.length }}
|
||||
%td.collection-details
|
||||
= text_field_tag 'order_cycle_outgoing_exchange_{{ $index }}_pickup_time', '', 'ng-init' => 'setPickupTimeFieldDirty($index)', 'id' => 'order_cycle_outgoing_exchange_{{ $index }}_pickup_time', 'required' => 'required', 'placeholder' => t('.pickup_time_placeholder'), 'ng-model' => 'exchange.pickup_time', 'ng-disabled' => '!enterprises[exchange.enterprise_id].managed && !order_cycle.viewing_as_coordinator', 'maxlength' => 35
|
||||
= text_field_tag 'order_cycle_outgoing_exchange_{{ $index }}_pickup_time', '', 'ng-init' => 'setPickupTimeFieldDirty($index, exchange.pickup_time)', 'id' => 'order_cycle_outgoing_exchange_{{ $index }}_pickup_time', 'required' => 'required', 'placeholder' => t('.pickup_time_placeholder'), 'ng-model' => 'exchange.pickup_time', 'ng-disabled' => '!enterprises[exchange.enterprise_id].managed && !order_cycle.viewing_as_coordinator', 'maxlength' => 35
|
||||
%span.icon-question-sign{'ofn-with-tip' => t('.pickup_time_tip')}
|
||||
%br/
|
||||
= text_field_tag 'order_cycle_outgoing_exchange_{{ $index }}_pickup_instructions', '', 'id' => 'order_cycle_outgoing_exchange_{{ $index }}_pickup_instructions', 'placeholder' => t('.pickup_instructions_placeholder'), 'ng-model' => 'exchange.pickup_instructions', 'ng-disabled' => '!enterprises[exchange.enterprise_id].managed && !order_cycle.viewing_as_coordinator'
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
- content_for :page_title do
|
||||
= t :edit_order_cycle
|
||||
|
||||
= form_for [main_app, :admin, @order_cycle], html: { class: "order_cycle" } do |f|
|
||||
|
||||
= form_for [main_app, :admin, @order_cycle], html: { class: "order_cycle" , data: { controller: 'unsaved-changes', action: 'beforeunload@window->unsaved-changes#leavingPage', 'unsaved-changes-changed': "false" } } do |f|
|
||||
= render 'wizard_progress'
|
||||
|
||||
%fieldset.no-border-bottom
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
.row
|
||||
.alpha.two.columns= label_tag nil, t(:report_producers)
|
||||
.omega.fourteen.columns= select_tag(:supplier_id_in, options_from_collection_for_select(@data.orders_suppliers, :id, :name, params[:supplier_id_in]), {class: "select2 fullwidth", multiple: true})
|
||||
|
||||
.row
|
||||
.alpha.two.columns= label_tag nil, t(:report_customers_cycle)
|
||||
.omega.fourteen.columns
|
||||
= f.select(:order_cycle_id_in, report_order_cycle_options(@data.order_cycles), {selected: params.dig(:q, :order_cycle_id_in)}, {class: "select2 fullwidth", multiple: true})
|
||||
|
||||
.row
|
||||
.alpha.two.columns= label_tag nil, t(:report_customers)
|
||||
.omega.fourteen.columns
|
||||
= f.select(:customer_id_in, customer_email_options(@data.order_customers), {selected: params.dig(:q, :customer_id_in)}, {class: "select2 fullwidth", multiple: true})
|
||||
@@ -5,6 +5,8 @@
|
||||
%fieldset.no-border-bottom.print-hidden
|
||||
%legend{ align: 'center'}= t(:report_filters)
|
||||
= render partial: "admin/reports/filters/#{@report_type}", locals: { f: f }
|
||||
- if @report_subtype && lookup_context.exists?(@report_subtype, "admin/reports/filters/", true)
|
||||
= render partial: "admin/reports/filters/#{@report_subtype}", locals: { f: f }
|
||||
|
||||
%fieldset.print-hidden
|
||||
%legend{ align: 'center'}= t(:report_render_options)
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
- position ||= ""
|
||||
.per-page{'ng-show' => "!RequestMonitor.loading && #{model}.length > 0", class: ("right" if position == "right") }
|
||||
%input.per-page-select.ofn-select2{type: 'number', data: 'per_page_options', 'min-search' => 999, 'ng-model' => 'per_page', 'ng-change' => 'fetchResults()'}
|
||||
|
||||
%span.per-page-feedback
|
||||
{{ "spree.admin.#{model}.index.results_found" | t:{number: pagination.results} }}
|
||||
{{ 'spree.admin.#{model}.index.viewing' | t:{start: ((pagination.page -1) * pagination.per_page) +1, end: ((pagination.page -1) * pagination.per_page) + #{model}.length} }}
|
||||
@@ -9,7 +9,7 @@
|
||||
= t :checkout_cart_total
|
||||
%td.cart-total.text-right= display_checkout_subtotal(@order)
|
||||
|
||||
- checkout_adjustments_for(current_order, exclude: [:shipping, :payment, :line_item]).reject{ |a| a.amount == 0 }.each do |adjustment|
|
||||
- checkout_adjustments_for(current_order, exclude: [:shipping, :payment, :line_item]).each do |adjustment|
|
||||
%tr.adjustment
|
||||
%th= adjustment.label
|
||||
%td.text-right= adjustment.display_amount.to_html
|
||||
|
||||
@@ -36,10 +36,6 @@
|
||||
= action_cable_meta_tag
|
||||
|
||||
%body{ class: body_classes, "body-scroll": "true", "data-turbo": "false" }
|
||||
/ [if lte IE 8]
|
||||
= render partial: "shared/ie_warning"
|
||||
= javascript_include_tag "iehack"
|
||||
|
||||
.off-canvas-wrap{ offcanvas: true }
|
||||
.fixed.off-canvas-fixed
|
||||
= render "shared/menu/menu" unless @hide_menu
|
||||
|
||||
@@ -19,10 +19,6 @@
|
||||
= csrf_meta_tags
|
||||
|
||||
%body.off-canvas{ style: "background-image: url(#{image_pack_path('tile-wide.png')})", "data-turbo": "false" }
|
||||
/ [if lte IE 8]
|
||||
= render partial: "shared/ie_warning"
|
||||
= javascript_include_tag "iehack"
|
||||
|
||||
.off-canvas-wrap{offcanvas: true}
|
||||
.inner-wrap
|
||||
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
.alert-box.alert#ie-warning{"data-alert" => ""}
|
||||
.row.ie-msg
|
||||
.small-4.large-2.columns
|
||||
%i.ofn-i_012-warning
|
||||
.small-8.large-10.columns
|
||||
%h3
|
||||
= t :ie_warning_headline
|
||||
%p
|
||||
= t :ie_warning_text
|
||||
.row
|
||||
.small-4.columns.browserbtn
|
||||
%a.browserlogo{href: "https://www.google.com/intl/en_au/chrome/browser/", target: "_blank"}
|
||||
%img{src: image_pack_path("browser-logos/chrome.png") }
|
||||
%a{href: "https://www.google.com/intl/en_au/chrome/browser/", target: "_blank"}
|
||||
= t :ie_warning_chrome
|
||||
.small-4.columns.browserbtn
|
||||
%a.browserlogo{href: "http://www.mozilla.org/en-US/firefox/new/", target: "_blank"}
|
||||
%img{src: image_pack_path("browser-logos/firefox.png") }
|
||||
%a{href: "http://www.mozilla.org/en-US/firefox/new/", target: "_blank"}
|
||||
= t :ie_warning_firefox
|
||||
.small-4.columns.browserbtn
|
||||
%a.browserlogo{href: "http://windows.microsoft.com/en-AU/internet-explorer/download-ie", target: "_blank"}
|
||||
%img{src: image_pack_path("browser-logos/internet-explorer.png") }
|
||||
%a{href: "http://windows.microsoft.com/en-AU/internet-explorer/download-ie", target: "_blank"}
|
||||
= t :ie_warning_ie
|
||||
.row.ie-msg
|
||||
.small-12.large-12.columns
|
||||
.text-center
|
||||
%em
|
||||
= t :ie_warning_other
|
||||
%a#closeie.close{href: "#"} ×
|
||||
@@ -1,3 +1,3 @@
|
||||
.already-ordered
|
||||
.panel.medium-6
|
||||
.panel
|
||||
= t("split_checkout.already_ordered.message_html", cart: link_to(t('split_checkout.already_ordered.cart'), "#{main_app.cart_path}#bought-products"))
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
%checkout.row#checkout
|
||||
.small-12.medium-12.columns
|
||||
= render partial: "split_checkout/tabs"
|
||||
= render partial: "split_checkout/already_ordered" if show_bought_items? && checkout_step?(:summary)
|
||||
= render partial: "split_checkout/form"
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
"data-action": "toggle#toggle shippingmethod#selectShippingMethod",
|
||||
"data-toggle-show": shipping_method.require_ship_address
|
||||
= shipping_method_form.label shipping_method.id, shipping_method.name, {for: "shipping_method_" + shipping_method.id.to_s }
|
||||
%em= payment_or_shipping_price(shipping_method, @order)
|
||||
%em.fees= payment_or_shipping_price(shipping_method, @order)
|
||||
- display_ship_address = display_ship_address || (ship_method_is_selected && shipping_method.require_ship_address)
|
||||
%div.checkout-input{"data-shippingmethod-target": "shippingMethodDescription", "data-shippingmethodid": shipping_method.id , style: "display: #{ship_method_is_selected ? 'block' : 'none'}" }
|
||||
#distributor_address.panel
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
- content_for :injection_data do
|
||||
= inject_saved_credit_cards
|
||||
|
||||
%div.checkout-step
|
||||
%div.checkout-step{"class": if checkout_step?(:summary) then "checkout-summary" end}
|
||||
= form_with url: checkout_update_path(checkout_step), model: @order, method: :put,
|
||||
data: { remote: "true" } do |form|
|
||||
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
name: "order[payments_attributes][][payment_method_id]",
|
||||
checked: (payment_method.id == selected_payment_method),
|
||||
"data-action": "paymentmethod#selectPaymentMethod",
|
||||
"data-paymentmethod-id": "paymentmethod#{payment_method.id}",
|
||||
"data-paymentmethod-id": "#{payment_method.id}",
|
||||
"data-paymentmethod-target": "input"
|
||||
= f.label :payment_method_id, "#{payment_method.name}", for: "payment_method_#{payment_method.id}"
|
||||
%em=payment_or_shipping_price(payment_method, @order)
|
||||
%em.fees=payment_or_shipping_price(payment_method, @order)
|
||||
|
||||
.paymentmethod-container{"data-paymentmethod-id": "paymentmethod#{payment_method.id}", style: "display: #{payment_method.id == selected_payment_method ? "block" : "none"}"}
|
||||
.paymentmethod-container{"data-paymentmethod-id": "#{payment_method.id}", style: "display: #{payment_method.id == selected_payment_method ? "block" : "none"}"}
|
||||
- if payment_method.description && !payment_method.description.empty?
|
||||
.paymentmethod-description.panel
|
||||
#{payment_method.description}
|
||||
|
||||
@@ -1,81 +1,95 @@
|
||||
.medium-10
|
||||
%div.checkout-substep
|
||||
%div.checkout-title
|
||||
= t("split_checkout.step3.your_details.title")
|
||||
|
||||
%div.summary
|
||||
%span.summary-label
|
||||
= t("split_checkout.step1.billing_address.first_name.label")
|
||||
%span.summary-value
|
||||
= @order.bill_address.firstname
|
||||
|
||||
%div.summary
|
||||
%span.summary-label
|
||||
= t("split_checkout.step1.billing_address.last_name.label")
|
||||
%span.summary-value
|
||||
= @order.bill_address.lastname
|
||||
|
||||
%div.summary
|
||||
%span.summary-label
|
||||
= t("split_checkout.step1.contact_information.email.label")
|
||||
%span.summary-value
|
||||
= @order.user ? @order.user.email : "Change me"
|
||||
|
||||
%div.summary
|
||||
%span.summary-label
|
||||
= t("split_checkout.step1.contact_information.phone.label")
|
||||
%span.summary-value
|
||||
= @order.bill_address.phone
|
||||
|
||||
%div.checkout-substep
|
||||
%div.checkout-title
|
||||
= t("split_checkout.step3.billing_address.title")
|
||||
= render "summary_address", address: @order.bill_address
|
||||
|
||||
%div.checkout-substep
|
||||
%div.checkout-title
|
||||
= t("split_checkout.step3.shipping_address.title")
|
||||
= render "summary_address", address: @order.shipping_address
|
||||
|
||||
%div.checkout-substep
|
||||
%div.checkout-title
|
||||
= t("split_checkout.step3.delivery_info.title")
|
||||
|
||||
%div.summary
|
||||
%span.summary-label
|
||||
= t("split_checkout.step1.shipping_info.title")
|
||||
%span.summary-value
|
||||
= @order.shipping_method.name
|
||||
%div.summary-description
|
||||
= @order.shipping_method.description
|
||||
|
||||
.summary-main
|
||||
= render partial: "split_checkout/already_ordered" if show_bought_items? && checkout_step?(:summary)
|
||||
.checkout-substep
|
||||
.checkout-title
|
||||
= t("split_checkout.step3.delivery_details.title")
|
||||
%a.summary-edit{href: main_app.checkout_step_path(:details)}
|
||||
= t("split_checkout.step3.your_details.edit")
|
||||
= t("split_checkout.step3.delivery_details.edit")
|
||||
|
||||
%div.checkout-substep
|
||||
%div.checkout-title
|
||||
.summary-subtitle
|
||||
= @order.shipping_method.name
|
||||
%em.fees= payment_or_shipping_price(@order.shipping_method, @order)
|
||||
.two-columns
|
||||
%div
|
||||
.summary-subtitle
|
||||
= t("split_checkout.step3.delivery_details.address")
|
||||
%span
|
||||
= @order.bill_address.firstname
|
||||
= @order.bill_address.lastname
|
||||
%div
|
||||
= @order.bill_address.phone
|
||||
%div
|
||||
= @order.user.email if @order.user
|
||||
%br
|
||||
%div
|
||||
= @order.bill_address.address1
|
||||
- unless @order.bill_address.address2.blank?
|
||||
%div
|
||||
= @order.bill_address.address2
|
||||
%div
|
||||
= @order.bill_address.city
|
||||
%div
|
||||
= @order.bill_address.state
|
||||
%div
|
||||
= @order.bill_address.zipcode
|
||||
%div
|
||||
= @order.bill_address.country
|
||||
- if @order.shipping_method.description.present?
|
||||
%div
|
||||
.summary-subtitle
|
||||
= t("split_checkout.step3.delivery_details.instructions")
|
||||
%div
|
||||
= @order.shipping_method.description
|
||||
|
||||
%hr
|
||||
|
||||
.checkout-substep
|
||||
.checkout-title
|
||||
= t("split_checkout.step3.payment_method.title")
|
||||
|
||||
%div.summary
|
||||
%span.summary-value
|
||||
= last_payment_method(@order)&.name
|
||||
%div.summary-description
|
||||
= last_payment_method(@order)&.description
|
||||
%a.summary-edit{href: main_app.checkout_step_path(:payment)}
|
||||
= t("split_checkout.step3.payment_method.edit")
|
||||
.two-columns
|
||||
%div
|
||||
- payment_method = last_payment_method(@order)
|
||||
= payment_method&.name
|
||||
%em.fees=payment_or_shipping_price(payment_method, @order)
|
||||
- if payment_method&.description.present?
|
||||
%div
|
||||
.summary-subtitle
|
||||
= t("split_checkout.step3.payment_method.instructions")
|
||||
%div
|
||||
= last_payment_method(@order)&.description
|
||||
|
||||
|
||||
%div.checkout-substep
|
||||
%div.checkout-title
|
||||
= t("split_checkout.step3.order.title")
|
||||
%a.summary-edit{href: main_app.cart_path}
|
||||
= t("split_checkout.step3.order.edit")
|
||||
|
||||
= render 'spree/orders/summary', order: @order
|
||||
= render 'spree/orders/summary', order: @order, display_footer: false
|
||||
|
||||
.checkout-step3{"data-controller": "sticky", "data-sticky-target": "container"}
|
||||
- if any_terms_required?(@order.distributor)
|
||||
= render partial: "terms_and_conditions", locals: { f: f }
|
||||
.medium-6
|
||||
.checkout-submit
|
||||
= f.submit t("split_checkout.step3.submit"), name: "confirm_order", class: "button primary", disabled: @terms_and_conditions_accepted == false || @platform_tos_accepted == false
|
||||
%a.button.cancel{href: main_app.checkout_step_path(:payment)}
|
||||
= t("split_checkout.step3.cancel")
|
||||
|
||||
.summary-right{ "data-controller": "sticky", "data-sticky-target": "container" }
|
||||
.summary-right-line.total
|
||||
.summary-right-line-label= t :order_total_price
|
||||
.summary-right-line-value#order_total= @order.display_total.to_html
|
||||
|
||||
.summary-right-line
|
||||
.summary-right-line-label= t :order_produce
|
||||
.summary-right-line-value= display_checkout_subtotal(@order)
|
||||
|
||||
- checkout_adjustments_for(@order, exclude: [:line_item]).reverse_each do |adjustment|
|
||||
.summary-right-line
|
||||
.summary-right-line-label= adjustment.label
|
||||
.summary-right-line-value= adjustment.display_amount.to_html
|
||||
|
||||
- if @order.total_tax > 0
|
||||
.summary-right-line
|
||||
.summary-right-line-label= t :order_includes_tax
|
||||
.summary-right-line-value#tax-row= display_checkout_tax_total(@order)
|
||||
|
||||
.checkout-submit
|
||||
- if any_terms_required?(@order.distributor)
|
||||
= render partial: "terms_and_conditions", locals: { f: f }
|
||||
= f.submit t("split_checkout.step3.submit"), name: "confirm_order", class: "button primary", disabled: @terms_and_conditions_accepted == false || @platform_tos_accepted == false
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
%div.summary
|
||||
%span.summary-label
|
||||
= t("split_checkout.step1.address.address1.label")
|
||||
%span.summary-value
|
||||
= address.address1
|
||||
|
||||
- unless @order.bill_address.address2.blank?
|
||||
%div.summary
|
||||
%span.summary-label
|
||||
= t("split_checkout.step1.address.address2.label")
|
||||
%span.summary-value
|
||||
= address.address2
|
||||
|
||||
%div.summary
|
||||
%span.summary-label
|
||||
= t("split_checkout.step1.address.city.label")
|
||||
%span.summary-value
|
||||
= address.city
|
||||
|
||||
%div.summary
|
||||
%span.summary-label
|
||||
= t("split_checkout.step1.address.state_id.label")
|
||||
%span.summary-value
|
||||
= address.state
|
||||
|
||||
%div.summary
|
||||
%span.summary-label
|
||||
= t("split_checkout.step1.address.zipcode.label")
|
||||
%span.summary-value
|
||||
= address.zipcode
|
||||
|
||||
%div.summary
|
||||
%span.summary-label
|
||||
= t("split_checkout.step1.address.country_id.label")
|
||||
%span.summary-value
|
||||
= address.country
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
%div.checkout-substep.medium-6
|
||||
%div.checkout-substep
|
||||
%div.checkout-input
|
||||
- if platform_terms_required? && distributor_terms_required?
|
||||
= f.check_box :accept_terms, { name: "accept_terms", checked: all_terms_and_conditions_already_accepted? }, 1, nil
|
||||
@@ -14,6 +14,3 @@
|
||||
= t('split_checkout.step3.terms_and_conditions.message_html', terms_and_conditions_link: link_to( t("split_checkout.step3.terms_and_conditions.link_text"), @order.distributor.terms_and_conditions, target: '_blank'))
|
||||
|
||||
= f.error_message_on :terms_and_conditions, standalone: true
|
||||
|
||||
%div.checkout-input
|
||||
= t("split_checkout.step3.agree")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
%div{"data-controller": "stripe-cards"}
|
||||
%div{"data-controller": "stripe-cards", "data-paymentmethod-id": "#{payment_method.id}" }
|
||||
- if @saved_credit_cards.any?
|
||||
.checkout-input
|
||||
%label
|
||||
|
||||
@@ -17,14 +17,6 @@
|
||||
|
||||
.row
|
||||
.alpha.six.columns
|
||||
%fieldset.security.no-border-bottom
|
||||
%legend{:align => "center"}= Spree.t(:security_settings)
|
||||
- @preferences_security.each do |key|
|
||||
- type = Spree::Config.preference_type(key)
|
||||
.field
|
||||
= label_tag(key, Spree.t(key) + ': ') + tag(:br) if type != :boolean
|
||||
= preference_field_tag(key, Spree::Config[key], :type => type)
|
||||
= label_tag(key, Spree.t(key)) + tag(:br) if type == :boolean
|
||||
%fieldset.legal.no-border-bottom
|
||||
%legend{:align => "center"}= t('.legal_settings')
|
||||
.field
|
||||
|
||||
@@ -20,11 +20,11 @@
|
||||
%td{:align => "right"}
|
||||
= item.quantity
|
||||
%td{:align => "right"}
|
||||
= item.included_tax > 0 ? item.display_included_tax : ""
|
||||
= display_line_items_taxes(item)
|
||||
%td{:align => "right"}
|
||||
= item.display_amount_with_adjustments
|
||||
|
||||
- checkout_adjustments_for(@order, exclude: [:line_item]).reject{ |a| a.amount == 0 }.reverse_each do |adjustment|
|
||||
- checkout_adjustments_for(@order, exclude: [:line_item]).reverse_each do |adjustment|
|
||||
- taxable = adjustment.adjustable_type == "Spree::Shipment" ? adjustment.adjustable : adjustment
|
||||
%tr
|
||||
%td
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
%td{:align => "right"}
|
||||
= display_line_item_tax_rates(item)
|
||||
|
||||
- checkout_adjustments_for(@order, exclude: [:line_item]).reject{ |a| a.amount == 0 }.reverse_each do |adjustment|
|
||||
- checkout_adjustments_for(@order, exclude: [:line_item]).reverse_each do |adjustment|
|
||||
%tr
|
||||
%td
|
||||
%strong= "#{raw(adjustment.label)}"
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
- position ||= ""
|
||||
.per-page{'ng-show' => '!RequestMonitor.loading && orders.length > 0', class: ("right" if position == "right") }
|
||||
%input.per-page-select.ofn-select2{type: 'number', data: 'per_page_options', 'min-search' => 999, 'ng-model' => 'per_page', 'ng-change' => 'fetchResults()'}
|
||||
|
||||
%span.per-page-feedback
|
||||
{{ 'spree.admin.orders.index.results_found' | t:{number: pagination.results} }}
|
||||
{{ 'spree.admin.orders.index.viewing' | t:{start: ((pagination.page -1) * pagination.per_page) +1, end: ((pagination.page -1) * pagination.per_page) + orders.length} }}
|
||||
@@ -32,7 +32,7 @@
|
||||
%label{ :for => 'order_cycle_filter' }
|
||||
= t("admin.order_cycle")
|
||||
%br
|
||||
%input#order_cycle_filter.ofn-select2.fullwidth{ type: 'number', 'min-search' => 5, data: 'orderCycles', placeholder: "#{t(:all)}", blank: "{ id: '', name: '#{t(:all)}' }", on: { selecting: "confirmRefresh" }, ng: { model: 'orderCycleFilter', change: "setOrderCycleDateRange()" } }
|
||||
%input#order_cycle_filter.ofn-select2.fullwidth{ type: 'number', 'min-search' => 5, data: 'orderCycles', placeholder: "#{t(:all)}", blank: "{ id: '', name: '#{t(:all)}' }", on: { selecting: "confirmRefresh" }, ng: { model: 'orderCycleFilter' } }
|
||||
.date_filter{class: "four columns"}
|
||||
%label
|
||||
= t("date_range")
|
||||
@@ -94,14 +94,20 @@
|
||||
= t("admin.orders.bulk_management.variants_without_unit_value")
|
||||
|
||||
%hr.divider.sixteen.columns.alpha.omega
|
||||
.clear
|
||||
|
||||
.controls.sixteen.columns.alpha.omega{ ng: { hide: 'RequestMonitor.loading || line_items.length == 0' } }
|
||||
%div.three.columns.alpha
|
||||
%div{ ng: { hide: 'RequestMonitor.loading || line_items.length == 0' }, style: "display: flex; justify-content: flex-start; column-gap: 10px; margin-bottom: 15px" }
|
||||
%div{ style: "flex-grow: 1" }
|
||||
%input.fullwidth{ :type => "text", :id => 'quick_search', 'ng-model' => 'quickSearch', :placeholder => 'Quick Search' }
|
||||
%div.three.columns
|
||||
-# This -20px is a hack to make the dropdowns align properly
|
||||
%div{ style: "margin-right: -20px;" }
|
||||
= render 'admin/shared/bulk_actions_dropdown'
|
||||
%div.ten.columns
|
||||
%div
|
||||
%columns-dropdown{ action: "#{controller_name}_#{action_name}" }
|
||||
%div{ style: "flex-grow: 1"}
|
||||
%div{ style: "float: right;"}
|
||||
= render partial: 'admin/shared/angular_per_page_controls', locals: { position: "right", model: "line_items" }
|
||||
|
||||
|
||||
%div.sixteen.columns.alpha#loading{ 'ng-if' => 'RequestMonitor.loading' }
|
||||
= render partial: "components/admin_spinner"
|
||||
@@ -184,4 +190,7 @@
|
||||
%td.actions
|
||||
%a{ 'ng-click' => "deleteLineItem(line_item)", :class => "delete-line-item icon-trash no-text" }
|
||||
|
||||
%div{'ng-show' => "!RequestMonitor.loading && line_items.length > 0" }
|
||||
= render partial: 'admin/shared/angular_pagination'
|
||||
|
||||
= render 'spree/admin/shared/custom-confirm'
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
%span.name{'ng-controller' => 'bulkCancelCtrl', 'ng-click' => 'cancelSelectedOrders()' }
|
||||
= t('.cancel_orders')
|
||||
|
||||
= render partial: 'per_page_controls', locals: { position: "right" }
|
||||
= render partial: 'admin/shared/angular_per_page_controls', locals: { position: "right", model: "orders" }
|
||||
|
||||
%table#listing_orders.index.responsive{width: "100%", 'ng-init' => 'initialise()', 'ng-show' => "!RequestMonitor.loading && orders.length > 0" }
|
||||
%colgroup
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
j(line_item.display_amount_with_adjustments.format(symbol: false, with_currency: false))] }
|
||||
.join('" + \'\x0A\' + "')}",
|
||||
'\x0A',
|
||||
"#{checkout_adjustments_for(@order, exclude: [:line_item])
|
||||
"#{checkout_adjustments_for(@order, exclude: [:line_item], reject_zero_amount: false)
|
||||
.reject{ |a| a.amount == 0 }
|
||||
.reverse.map { |adjustment| '%5s %-27.27s%8.8s' %
|
||||
["",
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
= t :email_order_summary_subtotal
|
||||
%td{align: "right"}
|
||||
= display_checkout_subtotal(@order)
|
||||
- checkout_adjustments_for(@order, exclude: [:line_item]).reject{ |a| a.amount == 0 }.reverse_each do |adjustment|
|
||||
- checkout_adjustments_for(@order, exclude: [:line_item]).reverse_each do |adjustment|
|
||||
%tr
|
||||
%td{align: "right", colspan: "3"}
|
||||
= "#{raw(adjustment.label)}:"
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
%span.order-total.item-total= display_checkout_subtotal(@order)
|
||||
%td
|
||||
|
||||
- checkout_adjustments_for(@order, exclude: [:line_item]).reject{ |a| a.amount == 0 }.reverse_each do |adjustment|
|
||||
- checkout_adjustments_for(@order, exclude: [:line_item]).reverse_each do |adjustment|
|
||||
%tr.order-adjustment
|
||||
%td.text-right{:colspan => "3"}
|
||||
= adjustment.label
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
- display_footer = true if display_footer.nil?
|
||||
|
||||
%table#line-items{"data-hook" => "order_details"}
|
||||
%col{valign: "middle"}/
|
||||
%col{halign: "center", valign: "middle", width: "5%"}/
|
||||
@@ -26,36 +28,4 @@
|
||||
%td.text-right.total{"data-hook" => "order_item_total"}
|
||||
%span= item.display_amount_with_adjustments.to_html
|
||||
|
||||
%tfoot
|
||||
#subtotal{"data-hook" => "order_details_subtotal"}
|
||||
%tr#subtotal-row.total
|
||||
%td.text-right{colspan: "3"}
|
||||
%strong
|
||||
= t :order_produce
|
||||
%td.text-right.total
|
||||
%span= display_checkout_subtotal(order)
|
||||
|
||||
#order-charges{"data-hook" => "order_details_adjustments"}
|
||||
- checkout_adjustments_for(order, exclude: [:line_item]).reject{ |a| a.amount == 0 }.reverse_each do |adjustment|
|
||||
%tr.total
|
||||
%td.text-right{:colspan => "3"}
|
||||
%strong
|
||||
= adjustment.label
|
||||
%td.text-right.total
|
||||
%span= adjustment.display_amount.to_html
|
||||
|
||||
#order-total{"data-hook" => "order_details_total"}
|
||||
%tr.total
|
||||
%td.text-right{colspan: "3"}
|
||||
%h5
|
||||
= t :order_total_price
|
||||
%td.text-right.total
|
||||
%h5#order_total= order.display_total.to_html
|
||||
|
||||
- if order.total_tax > 0
|
||||
#tax{"data-hook" => "order_details_tax"}
|
||||
%tr#tax-row.total
|
||||
%td.text-right{colspan: "3"}
|
||||
= t :order_includes_tax
|
||||
%td.text-right.total
|
||||
%span= display_checkout_tax_total(order)
|
||||
= render partial: "spree/orders/totals_footer", locals: { order: order } if display_footer
|
||||
|
||||
33
app/views/spree/orders/_totals_footer.html.haml
Normal file
33
app/views/spree/orders/_totals_footer.html.haml
Normal file
@@ -0,0 +1,33 @@
|
||||
%tfoot
|
||||
#subtotal{"data-hook" => "order_details_subtotal"}
|
||||
%tr#subtotal-row.total
|
||||
%td.text-right{colspan: "3"}
|
||||
%strong
|
||||
= t :order_produce
|
||||
%td.text-right.total
|
||||
%span= display_checkout_subtotal(order)
|
||||
|
||||
#order-charges{"data-hook" => "order_details_adjustments"}
|
||||
- checkout_adjustments_for(order, exclude: [:line_item]).reverse_each do |adjustment|
|
||||
%tr.total
|
||||
%td.text-right{:colspan => "3"}
|
||||
%strong
|
||||
= adjustment.label
|
||||
%td.text-right.total
|
||||
%span= adjustment.display_amount.to_html
|
||||
|
||||
#order-total{"data-hook" => "order_details_total"}
|
||||
%tr.total
|
||||
%td.text-right{colspan: "3"}
|
||||
%h5
|
||||
= t :order_total_price
|
||||
%td.text-right.total
|
||||
%h5#order_total= order.display_total.to_html
|
||||
|
||||
- if order.total_tax > 0
|
||||
#tax{"data-hook" => "order_details_tax"}
|
||||
%tr#tax-row.total
|
||||
%td.text-right{colspan: "3"}
|
||||
= t :order_includes_tax
|
||||
%td.text-right.total
|
||||
%span= display_checkout_tax_total(order)
|
||||
@@ -5,15 +5,6 @@ document.addEventListener("turbolinks:before-cache", () =>
|
||||
);
|
||||
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
setTimeout(this.fadeout.bind(this), 3000);
|
||||
}
|
||||
|
||||
fadeout() {
|
||||
this.element.classList.add("animate-hide-500");
|
||||
setTimeout(this.close.bind(this), 500);
|
||||
}
|
||||
|
||||
close() {
|
||||
this.element.remove();
|
||||
}
|
||||
|
||||
@@ -55,6 +55,7 @@ export default class extends Flatpickr {
|
||||
mode,
|
||||
};
|
||||
window.addEventListener("flatpickr:change", this.onChangeEvent.bind(this));
|
||||
window.addEventListener("flatpickr:clear", this.clear.bind(this));
|
||||
}
|
||||
|
||||
clear(e) {
|
||||
|
||||
@@ -12,17 +12,12 @@ export default class extends Controller {
|
||||
|
||||
selectPaymentMethod(event) {
|
||||
this.setPaymentMethod(event.target.dataset.paymentmethodId);
|
||||
|
||||
const stripeCardSelector =
|
||||
this.application.getControllerForElementAndIdentifier(
|
||||
document
|
||||
.querySelector(
|
||||
`[data-paymentmethod-id="${event.target.dataset.paymentmethodId}"]`
|
||||
)
|
||||
.querySelector('[data-controller="stripe-cards"]'),
|
||||
"stripe-cards"
|
||||
);
|
||||
stripeCardSelector?.initSelectedCard();
|
||||
// Send an event to the right (ie. the one with the same paymentmethodId)
|
||||
// StripeCardsController to initialize the form elements with the selected card
|
||||
const customEvent = new CustomEvent("stripecards:initSelectedCard", {
|
||||
detail: event.target.dataset.paymentmethodId,
|
||||
});
|
||||
document.dispatchEvent(customEvent);
|
||||
}
|
||||
|
||||
setPaymentMethod(paymentMethodContainerId) {
|
||||
|
||||
@@ -15,7 +15,7 @@ export default class extends Controller {
|
||||
this.containerTarget.style.bottom = "-1px";
|
||||
const observer = new IntersectionObserver(
|
||||
([e]) => {
|
||||
e.target.classList.toggle("sticked", e.intersectionRatio <= 1);
|
||||
e.target.classList.toggle("sticked", e.intersectionRatio < 1);
|
||||
},
|
||||
{ threshold: [1] }
|
||||
);
|
||||
|
||||
@@ -7,6 +7,11 @@ export default class extends Controller {
|
||||
|
||||
connect() {
|
||||
this.initSelectedCard();
|
||||
document.addEventListener("stripecards:initSelectedCard", (e) => {
|
||||
if (e.detail == this.element.dataset.paymentmethodId) {
|
||||
this.initSelectedCard();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
initSelectedCard() {
|
||||
|
||||
122
app/webpacker/controllers/unsaved_changes_controller.js
Normal file
122
app/webpacker/controllers/unsaved_changes_controller.js
Normal file
@@ -0,0 +1,122 @@
|
||||
import { Controller } from "stimulus";
|
||||
|
||||
// UnsavedChanges allows you to promp the user about unsaved changes when trying to leave the page
|
||||
//
|
||||
// Usage :
|
||||
// - with beforeunload event :
|
||||
// <form
|
||||
// data-controller="unsaved-changes"
|
||||
// data-action="beforeunload@window->unsaved-changes#leavingPage"
|
||||
// data-unsaved-changes-changed="true"
|
||||
// >
|
||||
// <input data-action="change->unsaved-changes#formIsChanged" />
|
||||
// </form>
|
||||
//
|
||||
// - with turbolinks :
|
||||
// <form
|
||||
// data-controller="unsaved-changes"
|
||||
// data-action="turbolinks:before-visit@window->unsaved-changes#leavingPage"
|
||||
// data-unsaved-changes-changed="true"
|
||||
// >
|
||||
// <input data-action="change->unsaved-changes#formIsChanged" />
|
||||
// </form>
|
||||
//
|
||||
// You can also combine the two event trigger ie :
|
||||
// <form
|
||||
// data-controller="unsaved-changes"
|
||||
// data-action="beforeunload@window->unsaved-changes#leavingPage turbolinks:before-visit@window->unsaved-changes#leavingPage"
|
||||
// data-unsaved-changes-changed="true"
|
||||
// >
|
||||
//
|
||||
// Optional, you can add 'data-unsaved-changes-disable-submit-button="true"' if you want to disable all
|
||||
// submit buttons when the form hasn't been interacted with
|
||||
//
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
// add onChange event to all form element
|
||||
this.element
|
||||
.querySelectorAll("input, select, textarea")
|
||||
.forEach((input) => {
|
||||
input.addEventListener("change", this.formIsChanged.bind(this));
|
||||
});
|
||||
|
||||
this.element.addEventListener("submit", this.handleSubmit.bind(this));
|
||||
|
||||
// disable submit button when first loading the page
|
||||
if (!this.isFormChanged() && this.isSubmitButtonDisabled()) {
|
||||
this.disableButtons();
|
||||
}
|
||||
}
|
||||
|
||||
formIsChanged(event) {
|
||||
// We only do something if the form hasn't already been changed
|
||||
if (!this.isFormChanged()) {
|
||||
this.setChanged("true");
|
||||
|
||||
if (this.isSubmitButtonDisabled()) {
|
||||
this.enableButtons();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
leavingPage(event) {
|
||||
const LEAVING_PAGE_MESSAGE = I18n.t("admin.unsaved_confirm_leave");
|
||||
|
||||
if (this.isFormChanged()) {
|
||||
if (event.type == "turbolinks:before-visit") {
|
||||
if (!window.confirm(LEAVING_PAGE_MESSAGE)) {
|
||||
event.preventDefault();
|
||||
}
|
||||
} else {
|
||||
// We cover our bases, according to the documentation we should be able to prompt the user
|
||||
// by calling event.preventDefault(), but it's not really supported yet.
|
||||
// Instead we set the value of event.returnValue, and return a string, both of them
|
||||
// should prompt the user.
|
||||
// Note, in most modern browser a generic string not under the control of the webpage is shown
|
||||
// instead of the returned string.
|
||||
//
|
||||
// More info : https://developer.mozilla.org/en-US/docs/Web/API/Window/beforeunload_event
|
||||
//
|
||||
event.returnValue = LEAVING_PAGE_MESSAGE;
|
||||
return event.returnValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
handleSubmit(event) {
|
||||
// if we are submitting the form, we don't want to trigger a warning so set changed to false
|
||||
this.setChanged("false");
|
||||
}
|
||||
|
||||
setChanged(changed) {
|
||||
this.data.set("changed", changed);
|
||||
}
|
||||
|
||||
isFormChanged() {
|
||||
return this.data.get("changed") == "true";
|
||||
}
|
||||
|
||||
isSubmitButtonDisabled() {
|
||||
if (this.data.has("disable-submit-button")) {
|
||||
return this.data.get("disable-submit-button") == "true";
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
enableButtons() {
|
||||
this.submitButtons().forEach((button) => {
|
||||
button.disabled = false;
|
||||
});
|
||||
}
|
||||
|
||||
disableButtons() {
|
||||
this.submitButtons().forEach((button) => {
|
||||
button.disabled = true;
|
||||
});
|
||||
}
|
||||
|
||||
submitButtons() {
|
||||
return this.element.querySelectorAll("input[type='submit']");
|
||||
}
|
||||
}
|
||||
@@ -39,7 +39,6 @@
|
||||
@import 'home_tagline';
|
||||
@import 'hub_node';
|
||||
@import 'hubs';
|
||||
@import 'ie_warning';
|
||||
@import 'images';
|
||||
@import 'lists';
|
||||
@import 'loading';
|
||||
|
||||
@@ -4,17 +4,6 @@
|
||||
|
||||
// ANIMATION FUNCTIONS
|
||||
|
||||
@keyframes fade-out-hide {
|
||||
0% {opacity: 1; visibility: visible;}
|
||||
99% {opacity: 0; visibility: visible;}
|
||||
100% {opacity: 0; visibility: hidden;}
|
||||
}
|
||||
|
||||
.animate-hide-500 {
|
||||
animation: fade-out-hide 0.5s;
|
||||
}
|
||||
|
||||
//
|
||||
@-webkit-keyframes slideInDown {
|
||||
0% {
|
||||
opacity: 0;
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
#ie-warning {
|
||||
margin-bottom: 0;
|
||||
padding-bottom: 2rem;
|
||||
|
||||
.ie-msg {
|
||||
background: rgba(255, 255, 255, 0.15);
|
||||
padding: 0.5rem;
|
||||
margin-bottom: 1rem;
|
||||
margin-top: 1rem;
|
||||
}
|
||||
|
||||
.browserbtn {
|
||||
text-align: center;
|
||||
margin-bottom: 1rem;
|
||||
|
||||
a {
|
||||
color: white;
|
||||
font-size: 1rem;
|
||||
filter: alpha(opacity = 70);
|
||||
opacity: 0.7;
|
||||
|
||||
&:hover, &:active, &:focus {
|
||||
filter: alpha(opacity = 100);
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
a.browserlogo {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
i {
|
||||
font-size: 5rem;
|
||||
color: white;
|
||||
text-align: center;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
@@ -62,8 +62,9 @@
|
||||
}
|
||||
|
||||
.already-ordered {
|
||||
margin-left: 20px;
|
||||
|
||||
.panel {
|
||||
margin-top: 3rem;
|
||||
background-color: $grey-250;
|
||||
border: 1px solid $tiny-blue;
|
||||
color: $grey-700;
|
||||
@@ -160,22 +161,24 @@
|
||||
|
||||
label {
|
||||
margin-top: 0.3rem;
|
||||
& + em {
|
||||
margin-left: -0.5rem;
|
||||
font-size: 14px; // same as label
|
||||
font-weight: bold;
|
||||
// Add opening and closing parentheses
|
||||
&:before {
|
||||
content: "(";
|
||||
}
|
||||
&:after {
|
||||
content: ")";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
em.fees {
|
||||
margin-left: -0.5rem;
|
||||
font-size: 14px; // same as label
|
||||
font-weight: bold;
|
||||
margin-left: 10px;
|
||||
// Add opening and closing parentheses
|
||||
&:before {
|
||||
content: "(";
|
||||
}
|
||||
&:after {
|
||||
content: ")";
|
||||
}
|
||||
}
|
||||
|
||||
.checkout-input span.formError, div.error.card-errors {
|
||||
background-color: rgba(193, 18, 43, 0.1);
|
||||
color: $red-700;
|
||||
@@ -203,42 +206,7 @@
|
||||
@include force-wrap;
|
||||
}
|
||||
|
||||
.checkout-step3 {
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
.checkout-submit {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
padding-top: 2rem;
|
||||
|
||||
.button {
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
&.sticked {
|
||||
background-color: $white;
|
||||
box-shadow: 0 -6px 12px -6px rgba(0, 0, 0, 0.33);
|
||||
border-left: 1px solid $light-grey;
|
||||
border-right: 1px solid $light-grey;
|
||||
border-top: 1px solid $light-grey;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 700px) {
|
||||
&.sticked {
|
||||
width: auto;
|
||||
margin-left: -15px;
|
||||
margin-right: -15px;
|
||||
box-shadow: 0 0px 10px 0px rgba(0, 0, 0, 0.33);
|
||||
|
||||
.checkout-submit {
|
||||
width: 100%;
|
||||
padding-left: 15px;
|
||||
padding-right: 15px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.checkout-submit {
|
||||
margin-top: 5rem;
|
||||
@@ -291,24 +259,44 @@
|
||||
}
|
||||
}
|
||||
|
||||
.summary {
|
||||
margin-bottom: 2px;
|
||||
font-size: 0.875rem;
|
||||
.checkout-summary {
|
||||
margin-top: 0;
|
||||
|
||||
.summary-label {
|
||||
font-weight: bold;
|
||||
}
|
||||
.checkout-substep {
|
||||
font-size: 0.875rem;
|
||||
margin-top: 1rem;
|
||||
|
||||
.summary-description {
|
||||
@include force-wrap;
|
||||
color: $min-accessible-grey;
|
||||
&:first-child {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.two-columns {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
grid-template-rows: 1fr;
|
||||
grid-column-gap: 10px;
|
||||
grid-row-gap: 0px;
|
||||
}
|
||||
}
|
||||
|
||||
.summary-edit {
|
||||
color: $teal-400;
|
||||
text-decoration: underline;
|
||||
display: block;
|
||||
margin-top: 5px;
|
||||
display: inline-block;
|
||||
margin-left: 15px;
|
||||
font-size: 0.875rem;
|
||||
font-weight: normal;
|
||||
font-family: $body-font;
|
||||
|
||||
&:hover {
|
||||
color: $teal-500;
|
||||
text-decoration: underline;
|
||||
|
||||
&:after {
|
||||
color: $teal-500;
|
||||
}
|
||||
}
|
||||
|
||||
&:after {
|
||||
background-image: url("../images/edit-with-pen.svg");
|
||||
content: " ";
|
||||
@@ -321,11 +309,94 @@
|
||||
top: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
.summary-subtitle {
|
||||
font-weight: bold;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.checkout-summary {
|
||||
form {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
|
||||
.summary-main {
|
||||
width: 66.66%;
|
||||
border-right: 1px solid #DDD;
|
||||
padding-right: 20px;
|
||||
padding-top: 20px;
|
||||
}
|
||||
.summary-right {
|
||||
width: calc(33.33% - 20px);
|
||||
padding-left: 20px;
|
||||
padding-right: 20px;
|
||||
border-right: 1px solid #DDD;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.summary-right {
|
||||
padding-top: 40px;
|
||||
|
||||
.checkout-submit {
|
||||
margin-top: 40px;
|
||||
|
||||
.button.primary {
|
||||
background-color: $clr-turquoise;
|
||||
&:hover {
|
||||
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.summary-right-line {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 10px;
|
||||
|
||||
.summary-right-line-label {
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
|
||||
.summary-right-line-value {
|
||||
font-size: 0.875rem;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
&.total {
|
||||
margin-bottom: 20px;
|
||||
@include headingFont;
|
||||
|
||||
.summary-right-line-label {
|
||||
font-weight: bold;
|
||||
font-size: 1.06rem;
|
||||
}
|
||||
.summary-right-line-value {
|
||||
font-size: 1.06rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.summary-right {
|
||||
.checkout-input {
|
||||
display: flex;
|
||||
align-items: baseline;
|
||||
|
||||
input[type=checkbox] + label {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#line-items {
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
|
||||
h5 {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.two-columns-inputs {
|
||||
@@ -381,3 +452,70 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Handle the mobile view for the summary step
|
||||
@media screen and (max-width: 800px) {
|
||||
.checkout-summary form {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.checkout-summary form .summary-right {
|
||||
width: calc(100% + 30px);
|
||||
margin-left: -15px;
|
||||
background-color: white;
|
||||
border-right: none;
|
||||
border-top: 1px solid #DDD;
|
||||
|
||||
padding-top: 20px;
|
||||
|
||||
&.sticked {
|
||||
box-shadow: 0 -4px 10px #DDD;
|
||||
}
|
||||
|
||||
.summary-right-line.total {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.checkout-submit {
|
||||
margin-top: 10px;
|
||||
|
||||
.checkout-input {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.button {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.checkout-summary form .summary-main {
|
||||
width: 100%;
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.checkout-summary .checkout-substep .two-columns {
|
||||
// only one column actually
|
||||
grid-template-columns: 1fr;
|
||||
|
||||
> :nth-child(2) {
|
||||
margin-top: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.checkout-summary .summary-subtitle {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
// For small screen or for iOS devices, increase to 16px the input font-size
|
||||
@media screen and (max-width: 700px) {
|
||||
.checkout-input input {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
@supports(-webkit-overflow-scrolling: touch) {
|
||||
.checkout-input input {
|
||||
font-size: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB |
@@ -114,7 +114,8 @@ module Openfoodnetwork
|
||||
Calculator::FlexiRate,
|
||||
Calculator::PerItem,
|
||||
Calculator::PriceSack,
|
||||
Calculator::Weight
|
||||
Calculator::Weight,
|
||||
Calculator::None
|
||||
]
|
||||
|
||||
app.config.spree.calculators.add_class('enterprise_fees')
|
||||
@@ -133,7 +134,8 @@ module Openfoodnetwork
|
||||
Calculator::FlatRate,
|
||||
Calculator::FlexiRate,
|
||||
Calculator::PerItem,
|
||||
Calculator::PriceSack
|
||||
Calculator::PriceSack,
|
||||
Calculator::None
|
||||
]
|
||||
|
||||
app.config.spree.calculators.add_class('tax_rates')
|
||||
@@ -213,7 +215,6 @@ module Openfoodnetwork
|
||||
# Instead, they must be explicitly included below
|
||||
# http://stackoverflow.com/questions/8012434/what-is-the-purpose-of-config-assets-precompile
|
||||
config.assets.initialize_on_precompile = true
|
||||
config.assets.precompile += ['iehack.js']
|
||||
config.assets.precompile += ['admin/*.js', 'admin/**/*.js']
|
||||
config.assets.precompile += ['web/all.js']
|
||||
config.assets.precompile += ['darkswarm/all.js']
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
if ENV['DATADOG_RAILS_APM']
|
||||
Datadog.configure do |c|
|
||||
c.use :rails, service_name: 'rails'
|
||||
c.tracing.instrument :rack, request_queuing: true
|
||||
c.tracing.instrument :rails, service_name: 'rails'
|
||||
|
||||
c.analytics_enabled = true
|
||||
c.runtime_metrics_enabled = true
|
||||
|
||||
c[:rack].request_queuing = true
|
||||
c.tracing.analytics.enabled = true
|
||||
c.runtime_metrics.enabled = true
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
redis_connection_settings = {
|
||||
url: ENV.fetch("OFN_REDIS_JOBS_URL", "redis://localhost:6381/0"),
|
||||
network_timeout: 5,
|
||||
expires_in: Rails.env.development? ? 90.minutes : nil
|
||||
}
|
||||
|
||||
Sidekiq.configure_server do |config|
|
||||
|
||||
@@ -5,6 +5,23 @@ ar:
|
||||
spree/product: المنتج
|
||||
spree/shipping_method: طريقة الشحن
|
||||
attributes:
|
||||
spree/order/ship_address:
|
||||
address1: "عنوان الشحن (الشارع + رقم المنزل)"
|
||||
address2: "عنوان الشحن 2"
|
||||
city: "عنوان الشحن المدينة"
|
||||
country: "عنوان الشحن الدولة"
|
||||
phone: "رقم الهاتف"
|
||||
firstname: "الاسم الاول"
|
||||
lastname: "الكنية"
|
||||
zipcode: "الرمز البريدي لعنوان الشحن"
|
||||
spree/order/bill_address:
|
||||
address1: "عنوان الفاتورة (الشارع + رقم المنزل)"
|
||||
zipcode: "الرمز البريدي لعنوان الفاتورة"
|
||||
city: "عنوان إرسال الفواتير المدينة "
|
||||
country: "عنوان إرسال الفواتير البلد "
|
||||
firstname: "عنوان إرسال الفواتير - الاسم الأول "
|
||||
lastname: "عنوان إرسال الفواتير - الاسم الأخير"
|
||||
phone: هاتف العميل
|
||||
spree/user:
|
||||
password: "كلمه السر"
|
||||
password_confirmation: "تأكيد كلمة المرور"
|
||||
@@ -416,11 +433,25 @@ ar:
|
||||
price: السعر
|
||||
producer: المنتج
|
||||
category: الفئة
|
||||
sku: SKU
|
||||
on_hand: "متوفر"
|
||||
on_demand: "على الطلب"
|
||||
tax_category: "الفئة الضريبية"
|
||||
inherits_properties: "الخصائص الموروثة؟"
|
||||
available_on: "متاح على"
|
||||
import_date: "تاريخ الاستيراد"
|
||||
columns_selector:
|
||||
unit: وحدة
|
||||
price: السعر
|
||||
producer: المنتج
|
||||
category: الفئة
|
||||
sku: SKU
|
||||
on_hand: "متوفر"
|
||||
on_demand: "على الطلب"
|
||||
tax_category: "الفئة الضريبية"
|
||||
inherits_properties: "الخصائص الموروثة؟"
|
||||
available_on: "متاح على"
|
||||
import_date: "تاريخ الاستيراد"
|
||||
adjustments:
|
||||
skipped_changing_canceled_order: "لا يمكنك تغيير الطلب الذي تم إلغاؤه."
|
||||
begins_at: يبدأ عند
|
||||
@@ -1292,6 +1323,7 @@ ar:
|
||||
total_by_customer: الإجمالي حسب العميل
|
||||
total_by_supplier: الإجمالي حسب المورد
|
||||
supplier_totals: اجمالي دورة الطلب الموردين
|
||||
percentage: "%{value}٪"
|
||||
supplier_totals_by_distributor: اجمالي دورة الطلب الموردين حسب الموزع
|
||||
totals_by_supplier: اجمالي دورة الطلب الموزعين من قبل المورد
|
||||
customer_totals: اجمالي دورة الطلب للعملاء
|
||||
@@ -1302,6 +1334,7 @@ ar:
|
||||
addresses: عناوين
|
||||
payment_methods: تقرير طرق الدفع
|
||||
delivery: إشعار بالإستلام
|
||||
sales_tax_totals_by_producer: إجمالي ضريبة المبيعات حسب المنتج
|
||||
tax_types: أنواع الضرائب
|
||||
tax_rates: معدلات الضريبة
|
||||
pack_by_customer: تم التعبئة من العملاء
|
||||
@@ -1481,6 +1514,13 @@ ar:
|
||||
stripe_connect_fail: عذرًا ، فشل اتصال حساب Stripe الخاص بك
|
||||
stripe_connect_settings:
|
||||
resource: تهيئة ربط Strip
|
||||
resend_confirmation_emails_feedback:
|
||||
zero: "تم إرسال رسائل التأكيد عبر البريد الإلكتروني لطلبات %{count}."
|
||||
one: "تم إرسال بريد إلكتروني للتأكيد لطلب واحد."
|
||||
two: "تم إرسال رسائل التأكيد عبر البريد الإلكتروني لطلبات %{count}."
|
||||
few: "تم إرسال رسائل التأكيد عبر البريد الإلكتروني لطلبات %{count}."
|
||||
many: "تم إرسال رسائل التأكيد عبر البريد الإلكتروني لطلبات %{count}."
|
||||
other: "تم إرسال رسائل التأكيد عبر البريد الإلكتروني لطلبات %{count}."
|
||||
api:
|
||||
unknown_error: "هناك خطأ ما. تم إخطار فريقنا."
|
||||
invalid_api_key: "مفتاح API المحدد غير صالح (%{key})."
|
||||
@@ -1606,11 +1646,11 @@ ar:
|
||||
menu_4_title: "مجموعات"
|
||||
menu_4_url: "/groups"
|
||||
menu_5_title: "حول"
|
||||
menu_5_url: "https://about.flaha.org/"
|
||||
menu_5_url: "https://about.flaha.org"
|
||||
menu_6_title: "الاتصال"
|
||||
menu_6_url: "https://openfoodnetwork.org/au/connect/"
|
||||
menu_6_url: "https://join.slack.com/t/flahaqaopenfo-2gd5913/shared_invite/zt-1pg0uzd4j-tFxELTtA9iA78ipnO3NZ5w"
|
||||
menu_7_title: "تعلم"
|
||||
menu_7_url: "https://openfoodnetwork.org/au/learn/"
|
||||
menu_7_url: "https://kh.flaha.org"
|
||||
logo: "الشعار (640 × 130)"
|
||||
logo_mobile: "شعار الجوال (75 × 26)"
|
||||
logo_mobile_svg: "شعار الجوال (SVG)"
|
||||
@@ -1703,12 +1743,6 @@ ar:
|
||||
card_has_been_removed: "تمت إزالة بطاقتك (الرقم: %{number})"
|
||||
card_could_not_be_removed: عذرًا ، تعذرت إزالة البطاقة
|
||||
invalid_credit_card: "بطاقة الائتمان غير صالحة"
|
||||
ie_warning_headline: "متصفحك غير محدث :-("
|
||||
ie_warning_text: "للحصول على أفضل تجربة لشبكة الغذاء المفتوح ، نوصي بشدة بترقية متصفحك:"
|
||||
ie_warning_chrome: تحميل متصفح كروم
|
||||
ie_warning_firefox: تحميل متصفح فايرفوكس
|
||||
ie_warning_ie: ترقية Internet Explorer
|
||||
ie_warning_other: "لا يمكنك ترقية متصفحك؟ جرب شبكة الغذاء المفتوح على هاتفك الذكي :-)"
|
||||
legal:
|
||||
cookies_policy:
|
||||
header: "كيف نستخدم ملفات تعريف الارتباط"
|
||||
@@ -1851,20 +1885,18 @@ ar:
|
||||
submit: التالي - ملخص الطلب
|
||||
cancel: العودة إلى التفاصيل الخاصة بك
|
||||
step3:
|
||||
your_details:
|
||||
title: تفاصيلك
|
||||
edit: تحرير التفاصيل الخاصة بك
|
||||
billing_address:
|
||||
title: عنوان وصول الفواتير
|
||||
shipping_address:
|
||||
title: عنوان الشحن
|
||||
delivery_info:
|
||||
title: معلومات التوصيل
|
||||
delivery_details:
|
||||
title: تفاصيل التسليم
|
||||
edit: تعديل
|
||||
address: عنوان التسليم
|
||||
instructions: التعليمات
|
||||
payment_method:
|
||||
title: 'طريقة الدفع '
|
||||
edit: تحرير طريقة الدفع
|
||||
edit: تعديل
|
||||
instructions: التعليمات
|
||||
order:
|
||||
title: الطلب الكلي
|
||||
title: تفاصيل الطلب
|
||||
edit: تعديل
|
||||
terms_and_conditions:
|
||||
message_html: "أوافق على %{terms_and_conditions_link} للبائع."
|
||||
link_text: "الأحكام والشروط"
|
||||
@@ -1873,11 +1905,10 @@ ar:
|
||||
all_terms_and_conditions:
|
||||
message_html: "أوافق على %{terms_and_conditions_link} البائع والمنصة %{tos_link}."
|
||||
terms_and_conditions: "الأحكام والشروط"
|
||||
agree: بالنقر فوق "إكمال الطلب" فإنك توافق على معالجة طلبك.
|
||||
submit: اكمل الطلب
|
||||
cancel: العودة إلى طريقة الدفع
|
||||
errors:
|
||||
global: "فشل الحفظ ، يرجى تحديث الحقول المميزة."
|
||||
saving_failed: "فشل الحفظ ، يرجى تحديث الحقول المميزة. %{messages}"
|
||||
terms_not_accepted: الرجاء قبول الشروط والأحكام
|
||||
required: لا يمكن أن يكون الحقل فارغًا
|
||||
invalid_number: "يرجى إدخال رقم هاتف صالح"
|
||||
@@ -2578,6 +2609,7 @@ ar:
|
||||
report_customers_cycle: "ترتيب الدورة"
|
||||
report_customers_type: "نوع التقرير"
|
||||
report_customers_csv: "تنزيل بتنسيق CSV"
|
||||
report_customers: عميل
|
||||
report_producers: "المنتجين"
|
||||
report_type: "نوع التقرير"
|
||||
report_hubs: "مراكز بيع"
|
||||
@@ -2655,8 +2687,12 @@ ar:
|
||||
report_header_taxable_items_total: "إجمالي العناصر الخاضعة للضريبة (%{currency_symbol})"
|
||||
report_header_sales_tax: "ضريبة المبيعات (%{currency_symbol})"
|
||||
report_header_delivery_charge: "رسوم التوصيل (%{currency_symbol})"
|
||||
report_header_tax: "ضريبة"
|
||||
report_header_tax_on_delivery: "الضريبة على التسليم (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "الضريبة على الرسوم (%{currency_symbol})"
|
||||
report_header_tax_category: "الفئة الضريبية"
|
||||
report_header_tax_rate_name: "اسم معدل الضريبة"
|
||||
report_header_tax_rate: "معدل الضريبة"
|
||||
report_header_total_tax: "إجمالي الضريبة (%{currency_symbol})"
|
||||
report_header_total_excl_tax: "المجموع باستثناء الضريبة (%{currency_symbol})"
|
||||
report_header_total_incl_tax: "إجمالي مدفوع الضريبة (%{currency_symbol})"
|
||||
@@ -2679,6 +2715,7 @@ ar:
|
||||
report_header_supplier: المورد
|
||||
report_header_producer: المنتج
|
||||
report_header_producer_suburb: منتج الضاحية
|
||||
report_header_producer_tax_status: الوضع الضريبي للمنتج
|
||||
report_header_producer_charges_sales_tax?: مسجل في ضريبة السلع والخدمات / ضريبة القيمة المضافة
|
||||
report_header_unit: وحدة
|
||||
report_header_group_buy_unit_quantity: مجموعة شراء وحدة الكمية
|
||||
@@ -2695,6 +2732,7 @@ ar:
|
||||
report_header_distributor_address: عنوان الموزع
|
||||
report_header_distributor_city: مدينة الموزع
|
||||
report_header_distributor_postcode: الرمز البريدي للموزع
|
||||
report_header_distributor_tax_status: الوضع الضريبي للموزع
|
||||
report_header_delivery_address: عنوان التسليم
|
||||
report_header_delivery_postcode: تسليم الرمز البريدي
|
||||
report_header_bulk_unit_size: حجم الوحدة بالجملة
|
||||
@@ -2874,6 +2912,7 @@ ar:
|
||||
deleting_item_will_cancel_order: "ستؤدي هذه العملية إلى أمر واحد أو أكثر من الطلبات الفارغة ، والتي سيتم إلغاؤها. هل ترغب في المتابعة؟"
|
||||
modals:
|
||||
got_it: "فهمتك"
|
||||
confirm: "التأكيد"
|
||||
close: "إغلاق"
|
||||
continue: "تابع"
|
||||
cancel: "إلغاء"
|
||||
@@ -3488,6 +3527,8 @@ ar:
|
||||
server_error: "خطأ في الخادم"
|
||||
shipping_method_names:
|
||||
UPS Ground: "UPS الأرضي"
|
||||
pick_up: "التسليم من المزرعة مباشرة"
|
||||
delivery: "موقعة ومختومة وتم التسليم"
|
||||
start_date: "تاريخ البدء"
|
||||
successfully_removed: "تمت الإزالة بنجاح"
|
||||
taxonomy_edit: "التصنيف"
|
||||
@@ -3564,9 +3605,6 @@ ar:
|
||||
default_seo_title: "العنوان الافتراضي ل SEO"
|
||||
default_meta_description: "وصف التعريف الافتراضي"
|
||||
default_meta_keywords: "الكلمات الرئيسية الوصفية الافتراضية"
|
||||
security_settings: "اعدادات الامان"
|
||||
allow_ssl_in_production: "السماح باستخدام طبقة المقابس الآمنة في وضع الإنتاج"
|
||||
allow_ssl_in_staging: "اسمح باستخدام طبقة المقابس الآمنة في وضع التدريج"
|
||||
currency_decimal_mark: "العملة العشرية"
|
||||
currency_settings: "إعدادات العملة"
|
||||
currency_symbol_position: ضع "رمز العملة قبل أو بعد مبلغ الدولار؟"
|
||||
@@ -3575,7 +3613,7 @@ ar:
|
||||
display_currency: "عرض العملة"
|
||||
choose_currency: "اختر العملة"
|
||||
mail_method_settings: "إعدادات طريقة البريد"
|
||||
mail_settings_notice_html: "لا يمكن تحرير بعض الإعدادات التالية وهي مدرجة هنا فقط لأغراض التصحيح. يمكن إجراء التغييرات عن طريق تحديث أسرار المثيل وتوفيرها باستخدام <a href='https://github.com/openfoodfoundation/ofn-install'>ofn-install</a> . تواصل مع فريق OFN العالمي لمزيد من التفاصيل."
|
||||
mail_settings_notice_html: "<b>التغييرات التي يتم إجراؤها هنا ستكون مؤقتة</b> للتصحيح فقط ، وقد يتم التراجع عنها في المستقبل.<br> يمكن إجراء تغييرات دائمة عن طريق تحديث أسرار المثيل وتوفيرها باستخدام <a href='https://github.com/openfoodfoundation/ofn-install'>ofn-install</a> . تواصل مع فريق OFN العالمي لمزيد من التفاصيل."
|
||||
general: "عام"
|
||||
enable_mail_delivery: "تمكين تسليم البريد"
|
||||
send_mails_as: "إرسال رسائل ب"
|
||||
@@ -3782,6 +3820,10 @@ ar:
|
||||
authorized: "مخول"
|
||||
received: "تم الاستلام"
|
||||
canceled: "ألغيت"
|
||||
line_items:
|
||||
index:
|
||||
results_found: "تم العثور على النتائج %{number}."
|
||||
viewing: "عرض %{start} إلى %{end}."
|
||||
orders:
|
||||
add_product:
|
||||
cannot_add_item_to_canceled_order: "لا يمكن إضافة عنصر إلى الطلب الملغى"
|
||||
@@ -3805,6 +3847,7 @@ ar:
|
||||
print_invoices: "طباعة الفواتير"
|
||||
cancel_orders: "إلغاء الطلبات"
|
||||
resend_confirmation: "أعد إرسال التأكيد"
|
||||
resend_confirmation_confirm_html: "سيؤدي هذا إلى إعادة إرسال البريد الإلكتروني للتأكيد إلى العميل.<br /> هل انت متأكد انك تريد المتابعة؟"
|
||||
selected:
|
||||
zero: "لم يتم اختيار أي طلب"
|
||||
one: "طلب واحد تم اختياره"
|
||||
|
||||
@@ -5,6 +5,10 @@ ca:
|
||||
spree/product: Producte
|
||||
spree/shipping_method: Mètode d'enviament
|
||||
attributes:
|
||||
spree/order/ship_address:
|
||||
phone: "Número de telèfon "
|
||||
firstname: "Nom"
|
||||
lastname: "Cognom"
|
||||
spree/user:
|
||||
password: "Contrasenya"
|
||||
password_confirmation: "confirmació de la contrasenya"
|
||||
@@ -413,11 +417,25 @@ ca:
|
||||
price: Preu
|
||||
producer: Productora
|
||||
category: Categoria
|
||||
sku: Número de referència (SKU)
|
||||
on_hand: "Disponibles"
|
||||
on_demand: "Sota demanda"
|
||||
tax_category: "Categoria d'impostos"
|
||||
inherits_properties: "Hereda propietats?"
|
||||
available_on: "Disponible el"
|
||||
import_date: "Data d'importació"
|
||||
columns_selector:
|
||||
unit: Unitat
|
||||
price: Preu
|
||||
producer: Productora
|
||||
category: Categoria
|
||||
sku: Número de referència (SKU)
|
||||
on_hand: "Disponibles"
|
||||
on_demand: "Sota demanda"
|
||||
tax_category: "Categoria d'impostos"
|
||||
inherits_properties: "Hereda propietats?"
|
||||
available_on: "Disponible el"
|
||||
import_date: "Data d'importació"
|
||||
adjustments:
|
||||
skipped_changing_canceled_order: "No podeu canviar una comanda cancel·lada."
|
||||
begins_at: Comença a
|
||||
@@ -1671,12 +1689,6 @@ ca:
|
||||
card_has_been_removed: "S'ha eliminat la teva targeta (número: %{number})"
|
||||
card_could_not_be_removed: Ho sentim, no s'ha pogut eliminar la targeta
|
||||
invalid_credit_card: "Targeta de crèdit no vàlida"
|
||||
ie_warning_headline: "El vostre navegador no està actualitzat :-("
|
||||
ie_warning_text: "Per obtenir la millor experiència a Open Food Network et recomanem que actualitzis el teu navegador:"
|
||||
ie_warning_chrome: Descarrega Chrome
|
||||
ie_warning_firefox: Descarrega Firefox
|
||||
ie_warning_ie: Actualitza Internet Explorer
|
||||
ie_warning_other: "No pots actualitzar el navegador? Prova Open Food Network al telèfon mòbil :-)"
|
||||
legal:
|
||||
cookies_policy:
|
||||
header: "Com utilitzem les cookies"
|
||||
@@ -1797,10 +1809,14 @@ ca:
|
||||
card_year:
|
||||
label: Any
|
||||
step3:
|
||||
your_details:
|
||||
title: Els teus detalls
|
||||
billing_address:
|
||||
title: Adreça de facturació
|
||||
delivery_details:
|
||||
title: Detalls de lliurament
|
||||
edit: Editar
|
||||
address: Adreça de lliurament
|
||||
payment_method:
|
||||
edit: Editar
|
||||
order:
|
||||
edit: Editar
|
||||
terms_and_conditions:
|
||||
message_html: "Accepto el %{terms_and_conditions_link} del venedor."
|
||||
link_text: "Termes i condicions"
|
||||
@@ -2498,6 +2514,7 @@ ca:
|
||||
report_customers_cycle: "Cicle de Comanda"
|
||||
report_customers_type: "Tipus d'informe"
|
||||
report_customers_csv: "Descarrega com a csv"
|
||||
report_customers: Consumidora
|
||||
report_producers: "Productors"
|
||||
report_type: "Tipus d'informe"
|
||||
report_hubs: "Grups"
|
||||
@@ -2562,6 +2579,8 @@ ca:
|
||||
report_header_delivery_charge: "Càrrec de lliurament (%{currency_symbol})"
|
||||
report_header_tax_on_delivery: "Impost sobre el lliurament (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "Impost sobre les comissions (%{currency_symbol})"
|
||||
report_header_tax_category: "Categoria d'impostos"
|
||||
report_header_tax_rate: "Impost"
|
||||
report_header_total_tax: "Impost total (%{currency_symbol})"
|
||||
report_header_total_excl_tax: "Total excl. impostos (%{currency_symbol})"
|
||||
report_header_total_incl_tax: "Total incl. impostos (%{currency_symbol})"
|
||||
@@ -3365,9 +3384,6 @@ ca:
|
||||
default_seo_title: "Títol Seo predeterminat "
|
||||
default_meta_description: "Descripció Meta predeterminada"
|
||||
default_meta_keywords: "Paraules clau meta predeterminades"
|
||||
security_settings: "Configuració de seguretat"
|
||||
allow_ssl_in_production: "Permet que SSL s'utilitzi en mode de producció"
|
||||
allow_ssl_in_staging: "Permet que SSL s'utilitzi en mode de staging"
|
||||
currency_decimal_mark: "Separador decimal de moneda"
|
||||
currency_settings: "Configuració de moneda"
|
||||
currency_symbol_position: Posa "símbol de moneda abans o després d'una quantitat"?
|
||||
@@ -3376,7 +3392,6 @@ ca:
|
||||
display_currency: "Moneda de visualització"
|
||||
choose_currency: "Escull la moneda"
|
||||
mail_method_settings: "Configuració del mètode de correu"
|
||||
mail_settings_notice_html: "Algunes de les opcions de configuració següents no es poden editar i es mostren aquí només amb finalitats de depuració. Es poden fer canvis actualitzant els secrets de la instància i provisionant-los mitjançant <a href='https://github.com/openfoodfoundation/ofn-install'>ofn-install</a> . Contacteu amb l'equip global d'OFN per obtenir més informació."
|
||||
general: "General"
|
||||
enable_mail_delivery: "Habilita el lliurament de correu"
|
||||
send_mails_as: "Enviar missatges com"
|
||||
@@ -3581,6 +3596,10 @@ ca:
|
||||
authorized: "Autoritzat"
|
||||
received: "Rebut"
|
||||
canceled: "Cancel·lat"
|
||||
line_items:
|
||||
index:
|
||||
results_found: "%{number} Resultats trobats."
|
||||
viewing: "Veient %{start} a %{end}."
|
||||
orders:
|
||||
add_product:
|
||||
cannot_add_item_to_canceled_order: "No es pot afegir l'article a la comanda cancel·lada"
|
||||
|
||||
@@ -5,6 +5,10 @@ cy:
|
||||
spree/product: Cynnyrch
|
||||
spree/shipping_method: Dull Anfon
|
||||
attributes:
|
||||
spree/order/ship_address:
|
||||
phone: "Rhif ffôn"
|
||||
firstname: "Enw cyntaf"
|
||||
lastname: "Enw olaf"
|
||||
spree/user:
|
||||
password: "Cyfrinair"
|
||||
password_confirmation: "Cadarnhau'r cyfrinair"
|
||||
@@ -416,11 +420,25 @@ cy:
|
||||
price: Pris
|
||||
producer: Cynhyrchydd
|
||||
category: Categori
|
||||
sku: Cod y Cynnyrch
|
||||
on_hand: "Ar gael"
|
||||
on_demand: "Ar alw"
|
||||
tax_category: "Categori Treth"
|
||||
inherits_properties: "Yn etifeddu manylion cynnyrch?"
|
||||
available_on: "Ar gael ar"
|
||||
import_date: "Dyddiad Mewnforio"
|
||||
columns_selector:
|
||||
unit: Uned
|
||||
price: Pris
|
||||
producer: Cynhyrchydd
|
||||
category: Categori
|
||||
sku: Cod y Cynnyrch
|
||||
on_hand: "Ar gael"
|
||||
on_demand: "Ar alw"
|
||||
tax_category: "Categori Treth"
|
||||
inherits_properties: "Yn etifeddu manylion cynnyrch?"
|
||||
available_on: "Ar gael ar"
|
||||
import_date: "Dyddiad Mewnforio"
|
||||
adjustments:
|
||||
skipped_changing_canceled_order: "Nid yw'n bosib newid archeb a ganslwyd"
|
||||
begins_at: Yn dechrau am
|
||||
@@ -1293,6 +1311,7 @@ cy:
|
||||
total_by_customer: Cyfanswm fesul Cwsmer
|
||||
total_by_supplier: Cyfanswm fesul Cyflenwr
|
||||
supplier_totals: Cyfanswm Cylch Archebu Cyflenwyr
|
||||
percentage: "%{value} %"
|
||||
supplier_totals_by_distributor: Cyfanswm Cylch Archebu Cyflenwyr fesul Dosbarthwr
|
||||
totals_by_supplier: Cyfanswm Cylch Dosbarthu Archebion fesul Cyflenwr
|
||||
customer_totals: Archebu Cyfansymiau Cwsmer Beicio
|
||||
@@ -1704,12 +1723,6 @@ cy:
|
||||
card_has_been_removed: "Dilëwyd eich cerdyn (rhif: %{number})"
|
||||
card_could_not_be_removed: Mae'n ddrwg gennym, nid oedd yn bosib dileu'r cerdyn
|
||||
invalid_credit_card: "Cerdyn credyd annilys"
|
||||
ie_warning_headline: "Mae eich porwr yn hen :-("
|
||||
ie_warning_text: "I gael y profiad gorau gyda'r Open Food Network rydym yn argymell yn gryf uwchraddio'ch porwr:"
|
||||
ie_warning_chrome: Dadlwytho Chrome
|
||||
ie_warning_firefox: Dadlwytho Firefox
|
||||
ie_warning_ie: Uwchraddio Internet Explorer
|
||||
ie_warning_other: "Methu uwchraddio'ch porwr? Rhowch gynnig ar y Open Food Network ar eich ffôn clyfar :-)"
|
||||
legal:
|
||||
cookies_policy:
|
||||
header: "Sut Rydym yn Defnyddio Cwcis"
|
||||
@@ -1851,20 +1864,15 @@ cy:
|
||||
submit: Nesaf - Crynodeb o'r Archeb
|
||||
cancel: Nôl at Eich Manylion
|
||||
step3:
|
||||
your_details:
|
||||
title: Eich manylion
|
||||
edit: Golygu Eich Manylion
|
||||
billing_address:
|
||||
title: Cyfeiriad bilio
|
||||
shipping_address:
|
||||
title: Cyfeiriad cludo
|
||||
delivery_info:
|
||||
title: Gwybodaeth cludo
|
||||
delivery_details:
|
||||
title: Manylion dosbarthu
|
||||
edit: Golygu
|
||||
address: Cyfeiriad dosbarthu
|
||||
payment_method:
|
||||
title: Dull talu
|
||||
edit: Golygu'r Dull Talu
|
||||
edit: Golygu
|
||||
order:
|
||||
title: Cyfanswm yr Archeb
|
||||
edit: Golygu
|
||||
terms_and_conditions:
|
||||
message_html: "Rwy'n cytuno i %{terms_and_conditions_link} y gwerthwr."
|
||||
link_text: "Telerau ac Amodau"
|
||||
@@ -1873,11 +1881,9 @@ cy:
|
||||
all_terms_and_conditions:
|
||||
message_html: "Rwyf yn cytuno â %{terms_and_conditions_link}y gwerthwr a'r platfform %{tos_link}"
|
||||
terms_and_conditions: "Telerau ac Amodau"
|
||||
agree: Trwy glicio 'Cwblhau'r Archeb' rydych yn cytuno inni brosesu eich archeb.
|
||||
submit: Cwblhau'r archeb
|
||||
cancel: Nôl at y Dull Talu
|
||||
errors:
|
||||
global: "Wedi methu ei gadw, gofynnir ichi ddiweddaru'r meysydd a amlygwyd."
|
||||
terms_not_accepted: Mae angen ichi dderbyn y Telerau ac Amodau
|
||||
required: Ni chaniateir gadael maes yn wag
|
||||
invalid_number: "Noder rhif ffôn dilys os gwelwch yn dda"
|
||||
@@ -2578,6 +2584,7 @@ cy:
|
||||
report_customers_cycle: "Cylch archebu "
|
||||
report_customers_type: "Math o Adroddiad"
|
||||
report_customers_csv: "Lawrlwytho fel csv"
|
||||
report_customers: Cwsmer
|
||||
report_producers: "Prynu bwyd"
|
||||
report_type: "Math o Adroddiad"
|
||||
report_hubs: "Hybiau"
|
||||
@@ -2623,6 +2630,9 @@ cy:
|
||||
report_header_hub_phone: "Rhif Ffôn yr Hyb"
|
||||
report_header_hub_address_line1: "Llinell 1af Cyfeiriad yr Hyb"
|
||||
report_header_hub_address_line2: "2ail Linell Cyfeiriad yr Hyb"
|
||||
report_header_hub_address_city: "Maestref yr Hyb"
|
||||
report_header_hub_address_zipcode: "Cod post yr Hyb"
|
||||
report_header_hub_address_state_name: "Talaith/Sir yr Hyb"
|
||||
report_header_code: Côd
|
||||
report_header_paid: Wedi talu?
|
||||
report_header_delivery: Dosbarthu?
|
||||
@@ -2652,16 +2662,20 @@ cy:
|
||||
report_header_taxable_items_total: "Cyfanswm Eitemau Trethadwy (%{currency_symbol})"
|
||||
report_header_sales_tax: "Treth Gwerthu (%{currency_symbol})"
|
||||
report_header_delivery_charge: "Tâl Dosbarthu (%{currency_symbol})"
|
||||
report_header_tax: "Treth"
|
||||
report_header_tax_on_delivery: "Treth ar Gyflenwi (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "Treth ar Ffioedd (%{currency_symbol})"
|
||||
report_header_tax_category: "Categori Treth"
|
||||
report_header_total_tax: "Cyfanswm Treth (%{currency_symbol})"
|
||||
report_header_total_excl_tax: "Cyfanswm heb dreth (%{currency_symbol})"
|
||||
report_header_total_incl_tax: "Cyfanswm gan gynnwys treth (%{currency_symbol})"
|
||||
report_header_total_orders: "Cyfanswm nifer yr Archebion"
|
||||
report_header_enterprise: Menter
|
||||
report_header_customer: Cwsmer
|
||||
report_header_customer_code: Cod Cwsmer
|
||||
report_header_product: Cynnyrch
|
||||
report_header_product_properties: Manylion Cynnyrch
|
||||
report_header_product_tax_category: Categori Treth y Cynnyrch
|
||||
report_header_quantity: Nifer
|
||||
report_header_max_quantity: Uchafswm nifer
|
||||
report_header_variant: Amrywiolyn
|
||||
@@ -2674,6 +2688,7 @@ cy:
|
||||
report_header_supplier: Cyflenwr
|
||||
report_header_producer: Cynhyrchydd
|
||||
report_header_producer_suburb: Maestref y Cynhyrchydd
|
||||
report_header_producer_charges_sales_tax?: Cofrestrwyd ar gyfer GST/TAW
|
||||
report_header_unit: Uned
|
||||
report_header_group_buy_unit_quantity: Nifer Unedau Grŵp Prynu
|
||||
report_header_cost: Cost
|
||||
@@ -3518,9 +3533,6 @@ cy:
|
||||
default_seo_title: "Teitl SEO diofyn"
|
||||
default_meta_description: "Disgrifiad Meta diofyn"
|
||||
default_meta_keywords: "Allweddeiriau Meta diofyn"
|
||||
security_settings: "Gosodiadau Diogelwch"
|
||||
allow_ssl_in_production: "Caniatáu defnyddio SSL yn y modd cynhyrchu"
|
||||
allow_ssl_in_staging: "Caniatáu defnyddio SSL yn y modd llwyfannu"
|
||||
currency_decimal_mark: "Marc degol arian cyfred"
|
||||
currency_settings: "Gosodiadau Arian Parod"
|
||||
currency_symbol_position: Noder "symbol arian cyfred cyn neu ar ôl swm doler?"
|
||||
@@ -3529,7 +3541,6 @@ cy:
|
||||
display_currency: "Arddangos arian cyfred"
|
||||
choose_currency: "Dewis Arian Cyfred"
|
||||
mail_method_settings: "Gosodiadau Dull Postio"
|
||||
mail_settings_notice_html: "Nid yw'n bosib golygu rhai o'r gosodiadau canlynol, ac fe'u rhestrir yma at ddibenion dadfygio'n unig. Gellir eu newid trwy ddiweddaru cyfrinachau'r achos a'u darparu trwy ddefnyddio ofn-install . Cysylltwch <a href='https://github.com/openfoodfoundation/ofn-install'></a>â thîm byd-eang y Open Food Network am fanylion pellach."
|
||||
general: "Cyffredinol"
|
||||
enable_mail_delivery: "Galluogi Dosbarthu trwy'r Post"
|
||||
send_mails_as: "Anfon eitemau drwy'r Post fel"
|
||||
@@ -3652,6 +3663,7 @@ cy:
|
||||
messages:
|
||||
included_price_validation: "ni ellir dewis hwn oni bai bod gennych Barth Treth Diofyn"
|
||||
blank: "ni chaniateir ei adael yn wag"
|
||||
invalid_instagram_url: "Defnyddiwch yr enw defnyddiwr yn unig e.e. yr_athro"
|
||||
layouts:
|
||||
admin:
|
||||
login_nav:
|
||||
@@ -3735,6 +3747,10 @@ cy:
|
||||
authorized: "Awdurdodwyd"
|
||||
received: "Derbyniwyd"
|
||||
canceled: "Canslwyd"
|
||||
line_items:
|
||||
index:
|
||||
results_found: "Cafwyd hyd i%{number} canlyniad."
|
||||
viewing: "Yn edrych ar %{start} i %{end}."
|
||||
orders:
|
||||
add_product:
|
||||
cannot_add_item_to_canceled_order: "Nid yw'n bosib ychwanegu'r eitem i archeb a ganslwyd."
|
||||
@@ -3951,6 +3967,9 @@ cy:
|
||||
select_and_search: "Dewis hidlwyr a chlicio ar %{option} i gael mynediad i'ch data."
|
||||
customer_names_message:
|
||||
customer_names_tip: "Os cuddiwyd enwau cwsmeriaid ar gyfer archebion a gyflenwyd gennych, gallwch gysylltu â'r dosbarthwr a gofyn a yw'n bosib iddyn nhw ddiweddaru eu dewisiadau siop i ganiatáu i'w cyflenwyr weld enwau cwsmeriaid."
|
||||
products_and_inventory:
|
||||
all_products:
|
||||
message: "Noder y caiff lefelau stoc eu hadrodd o restrau cynnyrch cyflenwyr yn unig. Os ydych yn defnyddio’r rhestr stoc i reoli maint eich stoc, caiff y gwerthoedd hyn eu hanwybyddu yn yr adroddiad hwn."
|
||||
users:
|
||||
index:
|
||||
listing_users: "Yn rhestru Defnyddwyr"
|
||||
@@ -4119,6 +4138,8 @@ cy:
|
||||
thanks: "Diolch am archebu gyda ni."
|
||||
track_information: "Gwybodaeth Tracio: %{tracking}"
|
||||
track_link: "Dolen Tracio: %{url}"
|
||||
picked_up_instructions: "Casglwyd eich archeb gan %{distributor}"
|
||||
picked_up_subject: "Hysbysiad Casglu"
|
||||
test_mailer:
|
||||
test_email:
|
||||
greeting: "Llongyfarchiadau!"
|
||||
@@ -4311,11 +4332,16 @@ cy:
|
||||
errors:
|
||||
not_found:
|
||||
title: "Nid yw'r dudalen rydych yn chwilio amdani'n bodoli (404)"
|
||||
message_html: "<b>Rhowch gynnig arall</b> <p>. Hwyrach taw problem dros dro yw hon. Cliciwch y botwm ‘yn ôl’ i ddychwelyd at y sgrin flaenorol, neu ewch yn ôl i’r <a href='/'> Hafan </a>, a rhowch gynnig arall </p>. <b> Cysylltwch â’r ddesg</b> <p>Gymorth os bydd y broblem yn parhau neu os bydd yn fater brys, cofiwch ddweud wrthym amdano. Mae ein manylion cyswllt ar gael ar dudalen ‘Lleol’ <a href='https://openfoodnetwork.org/ofn-local/' target='blank'> y Rhwydwaith Bwyd Agored byd-eang </a>. </p> <p> Bydd o gymorth mawr inni os gallwch roi cymaint o fanylion â phosibl am y dudalen sydd ar goll.</p>"
|
||||
internal_server_error:
|
||||
title: "Mae'n ddrwg gennym, aeth rhywbeth o'i le (500)"
|
||||
message_html: "<b>Rhowch gynnig arall</b> <p>. Hwyrach taw problem dros dro yw hon. Cliciwch y botwm ‘yn ôl’ i ddychwelyd at y sgrin flaenorol, neu ewch yn ôl i’r <a href='/''> Hafan </a>, a rhowch gynnig arall </p>. <b>Rydym yn gwybod am hyn</b><p>. Os ydych chi wedi gweld y broblem hon o’r blaen, mae’n debyg ein bod yn gwybod amdano, ac yn gweithio i’w drwsio. Byddwn yn cofnodi pob nam sy'n digwydd.</p><b>Cysylltwch â’r ddesg Gymorth</b><p>os bydd y broblem yn parhau neu os bydd yn fater brys, cofiwch ddweud wrthym amdano. Mae ein manylion cyswllt ar gael ar dudalen ‘Lleol’<a href='https://openfoodnetwork.org/ofn-local/' target='blank'>y Rhwydwaith Bwyd Agored byd-eang</a>. </p><p> Bydd o gymorth mawr inni os gallwch roi cymaint o fanylion â phosibl inni am yr hyn roeddech yn ei wneud pan ddigwyddodd y nam hwn.</p>"
|
||||
unprocessable_entity:
|
||||
title: "Gwrthodwyd y newid roeddech chi am ei wneud (422)"
|
||||
message_html: "<p>Gwrthodwyd y newid roeddech chi am ei wneud. Hwyrach ichi geisio newid rhywbeth nad oes gennych fynediad ato.<br><h3><a href='/' >Ewch yn ôl i’r Hafan.</a></h3></p>"
|
||||
components:
|
||||
multiple_checked_select:
|
||||
filter_placeholder: "Opsiynau hidlo"
|
||||
search_input:
|
||||
placeholder: Chwilio
|
||||
selector_with_filter:
|
||||
|
||||
@@ -5,6 +5,10 @@ de_CH:
|
||||
spree/product: Produkt
|
||||
spree/shipping_method: Lieferoption
|
||||
attributes:
|
||||
spree/order/ship_address:
|
||||
phone: "Telefonnummer (optional)"
|
||||
firstname: "Vorname"
|
||||
lastname: "Nachname"
|
||||
spree/user:
|
||||
password: "Passwort"
|
||||
password_confirmation: "Passwort erneut eingeben"
|
||||
@@ -408,11 +412,25 @@ de_CH:
|
||||
price: Preis
|
||||
producer: Produzent
|
||||
category: Kategorie
|
||||
sku: Artikelnummer
|
||||
on_hand: "Verfügbar"
|
||||
on_demand: "Unbegrenzt/auf Bestellung"
|
||||
tax_category: "Steuerkategorie"
|
||||
inherits_properties: "Übernimmt Eigenschaften des Ladens?"
|
||||
available_on: "Verfügbar am"
|
||||
import_date: "Importdatum"
|
||||
columns_selector:
|
||||
unit: Einheit
|
||||
price: Preis
|
||||
producer: Produzent
|
||||
category: Kategorie
|
||||
sku: Artikelnummer
|
||||
on_hand: "Verfügbar"
|
||||
on_demand: "Unbegrenzt/auf Bestellung"
|
||||
tax_category: "Steuerkategorie"
|
||||
inherits_properties: "Übernimmt Eigenschaften des Ladens?"
|
||||
available_on: "Verfügbar am"
|
||||
import_date: "Importdatum"
|
||||
adjustments:
|
||||
skipped_changing_canceled_order: "Eine stornierte Bestellung kann nicht geändert werden."
|
||||
begins_at: Beginnt
|
||||
@@ -1666,12 +1684,6 @@ de_CH:
|
||||
card_has_been_removed: "Ihre Kreditkarte wurde entfernt (Nummer: %{number})."
|
||||
card_could_not_be_removed: Die Kreditkarte konnte nicht entfernt werden.
|
||||
invalid_credit_card: "Ungültige Kreditkarte"
|
||||
ie_warning_headline: "Ihr Browser ist veraltet. :-("
|
||||
ie_warning_text: "Für das beste Open-Food-Schweiz-Erlebnis empfehlen wir dringend, Ihren Browser zu aktualisieren:"
|
||||
ie_warning_chrome: Chrome herunterladen
|
||||
ie_warning_firefox: Firefox herunterladen
|
||||
ie_warning_ie: Internet Explorer aktualisieren
|
||||
ie_warning_other: "Können Sie Ihren Browser nicht aktualisieren? Versuchen Sie Open Food Schweiz auf Ihrem Smartphone! :-)"
|
||||
legal:
|
||||
cookies_policy:
|
||||
header: "Wie wir Cookies verwenden"
|
||||
@@ -1813,20 +1825,15 @@ de_CH:
|
||||
submit: Weiter - Bestellübersicht
|
||||
cancel: Zurück - Ihre Daten
|
||||
step3:
|
||||
your_details:
|
||||
title: Ihre Daten
|
||||
edit: Ihre Daten ändern
|
||||
billing_address:
|
||||
title: Rechnungsadresse
|
||||
shipping_address:
|
||||
title: Lieferadresse
|
||||
delivery_info:
|
||||
title: Abhol-/Lieferinformationen
|
||||
delivery_details:
|
||||
title: Lieferdetails
|
||||
edit: Bearbeiten
|
||||
address: Lieferadresse
|
||||
payment_method:
|
||||
title: Zahlungsart
|
||||
edit: Zahlungsart ändern
|
||||
edit: Bearbeiten
|
||||
order:
|
||||
title: Bestellübersicht
|
||||
edit: Bearbeiten
|
||||
terms_and_conditions:
|
||||
message_html: "Ich stimme den %{terms_and_conditions_link} des Verkäufers zu."
|
||||
link_text: "Allgemeinen Geschäftsbedingungen (AGB)"
|
||||
@@ -1835,11 +1842,9 @@ de_CH:
|
||||
all_terms_and_conditions:
|
||||
message_html: "Ich stimme den %{terms_and_conditions_link} des Verkäufers und den %{tos_link} des Open Food Network zu."
|
||||
terms_and_conditions: "Allgemeinen Geschäftsbedingungen (AGB)"
|
||||
agree: Durch Klicken auf "Zahlungspflichtig bestellen" stimmen Sie der Verarbeitung Ihrer Bestellung zu.
|
||||
submit: Zahlungspflichtig bestellen
|
||||
cancel: Zurück - Zahlungsart
|
||||
errors:
|
||||
global: "Speichern fehlgeschlagen. Bitte prüfen Sie die markierten Felder."
|
||||
terms_not_accepted: Bitte akzeptieren Sie die Allgemeinen Geschäftsbedingungen.
|
||||
required: Feld darf nicht leer sein.
|
||||
invalid_number: "Bitte geben Sie eine gültige Telefonnummer ein."
|
||||
@@ -2536,6 +2541,7 @@ de_CH:
|
||||
report_customers_cycle: "Bestellzyklus"
|
||||
report_customers_type: "Berichtsart"
|
||||
report_customers_csv: "Als csv-Datei herunterladen"
|
||||
report_customers: Kunde
|
||||
report_producers: "Unsere Produzenten"
|
||||
report_type: "Berichtsart"
|
||||
report_hubs: "Hubs"
|
||||
@@ -2601,8 +2607,10 @@ de_CH:
|
||||
report_header_taxable_items_total: "Steuerpflichtige Posten insgesamt (%{currency_symbol})"
|
||||
report_header_sales_tax: "Umsatzsteuer (%{currency_symbol})"
|
||||
report_header_delivery_charge: "Liefergebühr (%{currency_symbol})"
|
||||
report_header_tax: "Steuern"
|
||||
report_header_tax_on_delivery: "Steuer auf Lieferkosten (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "Steuer auf Gebühren (%{currency_symbol})"
|
||||
report_header_tax_category: "Steuerkategorie"
|
||||
report_header_total_tax: "Summe Steuern (%{currency_symbol})"
|
||||
report_header_total_excl_tax: "Summe exkl. Steuern (%{currency_symbol})"
|
||||
report_header_total_incl_tax: "Summe inkl. Steuern (%{currency_symbol})"
|
||||
@@ -3423,9 +3431,6 @@ de_CH:
|
||||
default_seo_title: "Standard SEO-Titel"
|
||||
default_meta_description: "Standard Meta-Beschreibung"
|
||||
default_meta_keywords: "Standard Meta-Schlüsselwörter"
|
||||
security_settings: "Sicherheitseinstellungen"
|
||||
allow_ssl_in_production: "Zulassen, dass SSL im Produktionsmodus verwendet wird"
|
||||
allow_ssl_in_staging: "Zulassen, dass SSL im Staging-Modus verwendet wird"
|
||||
currency_decimal_mark: "Dezimalzeichen der Währung"
|
||||
currency_settings: "Währungseinstellungen"
|
||||
currency_symbol_position: Währungssymbol (CHF) vor oder nach dem Betrag?
|
||||
@@ -3434,7 +3439,6 @@ de_CH:
|
||||
display_currency: "Währung anzeigen"
|
||||
choose_currency: "Währung auswählen"
|
||||
mail_method_settings: "E-Mail-Methodeneinstellungen"
|
||||
mail_settings_notice_html: "Einige der folgenden Einstellungen können nicht geändert werden und werden hier nur zu Zwecken der Fehlerbehebung aufgeführt. Änderungen können vorgenommen werden, indem die Einstellungen der deutschen Instanz aktualisiert und mithilfe von <a href='https://github.com/openfoodfoundation/ofn-install'>ofn-install</a> bereitgestellt werden. Wenden Sie sich an das globale Team des Open Food Network, um weitere Informationen zu erhalten."
|
||||
general: "Allgemeines"
|
||||
enable_mail_delivery: "E-Mail-Versand aktivieren"
|
||||
send_mails_as: "E-Mails senden als"
|
||||
@@ -3639,6 +3643,10 @@ de_CH:
|
||||
authorized: "Autorisiert"
|
||||
received: "Empfangen"
|
||||
canceled: "abgebrochen"
|
||||
line_items:
|
||||
index:
|
||||
results_found: "%{number} Ergebnisse gefunden."
|
||||
viewing: "Angezeigt wird %{start} bis %{end}."
|
||||
orders:
|
||||
add_product:
|
||||
cannot_add_item_to_canceled_order: "Artikel kann nicht zu stornierter Bestellung hinzugefügt werden"
|
||||
|
||||
@@ -5,6 +5,13 @@ de_DE:
|
||||
spree/product: Produkt
|
||||
spree/shipping_method: Lieferoption
|
||||
attributes:
|
||||
spree/order/ship_address:
|
||||
address2: "Lieferadresse Adresszusatz"
|
||||
country: "Lieferadresse Land"
|
||||
phone: "Telefonnummer"
|
||||
firstname: "Vorname"
|
||||
lastname: "Nachname"
|
||||
zipcode: "Lieferadresse Postleitzahl"
|
||||
spree/user:
|
||||
password: "Passwort"
|
||||
password_confirmation: "Passwort erneut eingeben"
|
||||
@@ -404,8 +411,11 @@ de_DE:
|
||||
filters:
|
||||
categories:
|
||||
title: Lieferkategorien
|
||||
selected_categories: "%{count} Kategorien ausgewählt"
|
||||
producers:
|
||||
title: Unsere Produzenten
|
||||
selected_producers: "%{count} Produzenten ausgewählt"
|
||||
per_page: "%{count} Produkte pro Seite"
|
||||
colums: Spalten
|
||||
columns:
|
||||
name: Name
|
||||
@@ -413,11 +423,25 @@ de_DE:
|
||||
price: Preis
|
||||
producer: Produzent
|
||||
category: Kategorie
|
||||
sku: Artikelnummer
|
||||
on_hand: "Verfügbar"
|
||||
on_demand: "Unbegrenzt/auf Bestellung"
|
||||
tax_category: "Steuerkategorie"
|
||||
inherits_properties: "Übernimmt Eigenschaften des Ladens?"
|
||||
available_on: "Verfügbar am"
|
||||
import_date: "Importdatum"
|
||||
columns_selector:
|
||||
unit: Einheit
|
||||
price: Preis
|
||||
producer: Produzent
|
||||
category: Kategorie
|
||||
sku: Artikelnummer
|
||||
on_hand: "Verfügbar"
|
||||
on_demand: "Unbegrenzt/auf Bestellung"
|
||||
tax_category: "Steuerkategorie"
|
||||
inherits_properties: "Übernimmt Eigenschaften des Ladens?"
|
||||
available_on: "Verfügbar am"
|
||||
import_date: "Importdatum"
|
||||
adjustments:
|
||||
skipped_changing_canceled_order: "Eine stornierte Bestellung kann nicht geändert werden."
|
||||
begins_at: Beginnt
|
||||
@@ -590,7 +614,7 @@ de_DE:
|
||||
form_users:
|
||||
users: "Benutzer"
|
||||
form_about:
|
||||
about: "Verkaufen"
|
||||
about: "Über uns"
|
||||
form_images:
|
||||
images: "Bilder"
|
||||
form_address:
|
||||
@@ -642,13 +666,14 @@ de_DE:
|
||||
model:
|
||||
no_file: "Fehler: Es wurde keine Datei hochgeladen."
|
||||
could_not_process: "Die Datei konnte nicht verarbeitet werden: Ungültiges Datenformat."
|
||||
incorrect_value: Der eingetragene Wert ist fehlerhaft.
|
||||
conditional_blank: Darf nicht leer sein, wenn das Feld 'unit_type' leer ist.
|
||||
no_product: Es konnten keine passenden Produkte in der Datenbank gefunden werden.
|
||||
not_found: Konnte nicht in der Datenbank gefunden werden.
|
||||
incorrect_value: enthält einen fehlerhaften Wert.
|
||||
conditional_blank: darf nicht leer sein, wenn das Feld 'unit_type' leer ist.
|
||||
no_product: entspricht keinem passenden Produkt in der Datenbank.
|
||||
not_found: konnte nicht in der Datenbank gefunden werden.
|
||||
category_not_found: stimmt nicht mit den verfügbaren Kategorien überein. Diese finden Sie auf der Seite zum Produktimport. Überprüfen Sie zusätzlich Ihre Angaben auf Tippfehler.
|
||||
not_updatable: Kann über den Produktimport nicht auf bestehende Produkte aktualisiert werden.
|
||||
blank: darf nicht leer sein
|
||||
not_updatable: kann über den Produktimport nicht für bestehende Produkte aktualisiert werden.
|
||||
values_must_be_same: muss für gleichnamige Produkte gleich sein.
|
||||
blank: darf nicht leer sein.
|
||||
products_no_permission: Sie sind nicht berechtigt, Produkte dieses Unternehmens zu verwalten.
|
||||
inventory_no_permission: Sie sind nicht berechtigt, für diesen Produzenten Produkte in den Katalog aufzunehmen.
|
||||
none_saved: Es konnten keine Produkte erfolgreich gespeichert werden.
|
||||
@@ -690,8 +715,8 @@ de_DE:
|
||||
options_and_defaults: Importoptionen und Voreinstellungen
|
||||
no_permission: Sie sind nicht berechtigt, dieses Unternehmen zu verwalten.
|
||||
not_found: Das Unternehmen konnte nicht in der Datenbank gefunden werden.
|
||||
no_name: Für einige Produkte ist kein Name definiert.
|
||||
blank_enterprise: Für einige Produkte ist kein Unternehmen definiert.
|
||||
no_name: Für einige Produkte ist kein Name angegeben.
|
||||
blank_enterprise: Für einige Produkte ist kein Unternehmen angegeben.
|
||||
reset_absent?: Fehlende Produkte zurücksetzen?
|
||||
reset_absent_tip: Den Lagerbestand für alle nicht in der Datei vorhandenen Produkte auf Null setzen.
|
||||
overwrite_all: Alle überschreiben
|
||||
@@ -813,7 +838,7 @@ de_DE:
|
||||
manage: Verwalten
|
||||
form:
|
||||
about_us:
|
||||
legend: "Verkaufen"
|
||||
legend: "Über uns"
|
||||
desc_short: Kurzbeschreibung
|
||||
desc_short_placeholder: Schreiben Sie etwas in ein oder zwei Sätzen über Ihr Unternehmen.
|
||||
desc_long: Über uns
|
||||
@@ -1257,7 +1282,7 @@ de_DE:
|
||||
address: "Adresse"
|
||||
contact: "Kontaktdaten"
|
||||
social: "Soziale Medien"
|
||||
about: "Verkaufen"
|
||||
about: "Über uns"
|
||||
business_details: "Geschäftsdetails"
|
||||
images: "Bilder"
|
||||
properties: "Eigenschaften"
|
||||
@@ -1272,7 +1297,7 @@ de_DE:
|
||||
enterprise_group:
|
||||
primary_details: "Unternehmen"
|
||||
users: "Benutzer"
|
||||
about: "Verkaufen"
|
||||
about: "Über uns"
|
||||
images: "Bilder"
|
||||
contact: "Kontaktdaten"
|
||||
web: "Homepage"
|
||||
@@ -1291,6 +1316,7 @@ de_DE:
|
||||
total_by_customer: Gesamtsummen nach Kunden
|
||||
total_by_supplier: Gesamtsummen nach Lieferanten
|
||||
supplier_totals: Lieferantengesamtsummen
|
||||
percentage: "%{value} %"
|
||||
supplier_totals_by_distributor: Lieferantengesamtsummen nach Verteilstelle
|
||||
totals_by_supplier: Verteilstellengesamtsummen nach Lieferanten
|
||||
customer_totals: Kundengesamtsummen
|
||||
@@ -1301,6 +1327,7 @@ de_DE:
|
||||
addresses: Adressen
|
||||
payment_methods: Zahlungsarten
|
||||
delivery: Lieferungen
|
||||
sales_tax_totals_by_producer: Umsatzsteuer nach Produzenten
|
||||
tax_types: Steuerarten
|
||||
tax_rates: Steuersätze
|
||||
pack_by_customer: Packliste nach Kunden
|
||||
@@ -1480,6 +1507,9 @@ de_DE:
|
||||
stripe_connect_fail: Die Verbindung Ihres Stripe-Kontos ist fehlgeschlagen.
|
||||
stripe_connect_settings:
|
||||
resource: Konfiguration für Stripe Connect
|
||||
resend_confirmation_emails_feedback:
|
||||
one: "Bestätigungs-E-Mail für 1 Bestellung gesendet."
|
||||
other: "E-Mail-Bestätigung wurde für %{count} Bestellungen gesendet."
|
||||
api:
|
||||
unknown_error: "Etwas ist schief gelaufen. Unser Team wurde benachrichtigt."
|
||||
invalid_api_key: "Ungültiger API-Schlüssel (%{key}) angegeben."
|
||||
@@ -1645,7 +1675,7 @@ de_DE:
|
||||
use_geocoder: Breiten- und Längengrad automatisch aus der Adresse bestimmen
|
||||
postcode: Postleitzahl
|
||||
postcode_placeholder: z. B. 30701
|
||||
suburb: Vorort
|
||||
suburb: Ort
|
||||
state: Bundesland
|
||||
country: Land
|
||||
unauthorized: Nicht autorisiert
|
||||
@@ -1702,12 +1732,6 @@ de_DE:
|
||||
card_has_been_removed: "Ihre Kreditkarte wurde entfernt (Nummer: %{number})."
|
||||
card_could_not_be_removed: Die Kreditkarte konnte nicht entfernt werden.
|
||||
invalid_credit_card: "Ungültige Kreditkarte"
|
||||
ie_warning_headline: "Ihr Browser ist veraltet. :-("
|
||||
ie_warning_text: "Für das beste Open-Food-Network-Erlebnis empfehlen wir dringend, Ihren Browser zu aktualisieren:"
|
||||
ie_warning_chrome: Chrome herunterladen
|
||||
ie_warning_firefox: Firefox herunterladen
|
||||
ie_warning_ie: Internet Explorer aktualisieren
|
||||
ie_warning_other: "Können Sie Ihren Browser nicht aktualisieren? Versuchen Sie Open Food Network auf Ihrem Smartphone! :-)"
|
||||
legal:
|
||||
cookies_policy:
|
||||
header: "Wie wir Cookies verwenden"
|
||||
@@ -1794,12 +1818,13 @@ de_DE:
|
||||
split_checkout:
|
||||
your_details_without_number: Ihre Daten
|
||||
payment_method_without_number: Zahlungsart
|
||||
order_summary_without_number: Bestellübersicht
|
||||
order_summary_without_number: Bestellabschluss
|
||||
already_ordered:
|
||||
cart: "im Warenkorb"
|
||||
message_html: "Sie haben bereits eine Bestellung für diesen Bestellzyklus. Überprüfen Sie den %{cart}, um die Artikel zu sehen, die Sie zuvor bestellt haben. Sie können Artikel auch stornieren, solange der Bestellzyklus geöffnet ist."
|
||||
step1:
|
||||
contact_information:
|
||||
title: Kontaktdaten
|
||||
email:
|
||||
label: E-Mail-Adresse
|
||||
phone:
|
||||
@@ -1846,23 +1871,21 @@ de_DE:
|
||||
save_card: Kreditkarte für zukünftige Verwendung speichern
|
||||
create_new_card: oder geben Sie unten neue Kreditkartendetails ein
|
||||
explaination: Sie können Ihre Bestellung im nächsten Schritt überprüfen und die endgültigen Kosten bestätigen.
|
||||
submit: Weiter - Bestellübersicht
|
||||
submit: Weiter - Bestellabschluss
|
||||
cancel: Zurück - Ihre Daten
|
||||
step3:
|
||||
your_details:
|
||||
title: Ihre Daten
|
||||
edit: Ihre Daten ändern
|
||||
billing_address:
|
||||
title: Rechnungsadresse
|
||||
shipping_address:
|
||||
title: Lieferadresse
|
||||
delivery_info:
|
||||
title: Abhol-/Lieferinformationen
|
||||
delivery_details:
|
||||
title: Lieferdetails
|
||||
edit: Bearbeiten
|
||||
address: Liefer-/Abholinformationen
|
||||
instructions: Informationen
|
||||
payment_method:
|
||||
title: Zahlungsart
|
||||
edit: Zahlungsart ändern
|
||||
edit: Bearbeiten
|
||||
instructions: Informationen
|
||||
order:
|
||||
title: Bestellübersicht
|
||||
edit: Bearbeiten
|
||||
terms_and_conditions:
|
||||
message_html: "Ich stimme den %{terms_and_conditions_link} des Verkäufers zu."
|
||||
link_text: "Allgemeinen Geschäftsbedingungen (AGB)"
|
||||
@@ -1871,11 +1894,10 @@ de_DE:
|
||||
all_terms_and_conditions:
|
||||
message_html: "Ich stimme den %{terms_and_conditions_link} des Verkäufers und den %{tos_link} des Open Food Network zu."
|
||||
terms_and_conditions: "Allgemeinen Geschäftsbedingungen (AGB)"
|
||||
agree: Durch Klicken auf "Zahlungspflichtig bestellen" stimmen Sie der Verarbeitung Ihrer Bestellung zu.
|
||||
submit: Zahlungspflichtig bestellen
|
||||
cancel: Zurück - Zahlungsart
|
||||
errors:
|
||||
global: "Speichern fehlgeschlagen. Bitte prüfen Sie die markierten Felder."
|
||||
saving_failed: "Speichern fehlgeschlagen. Bitte prüfen Sie die markierten Felder. %{messages}"
|
||||
terms_not_accepted: Bitte akzeptieren Sie die Allgemeinen Geschäftsbedingungen.
|
||||
required: Feld darf nicht leer sein.
|
||||
invalid_number: "Bitte geben Sie eine gültige Telefonnummer ein."
|
||||
@@ -2576,6 +2598,7 @@ de_DE:
|
||||
report_customers_cycle: "Bestellzyklus"
|
||||
report_customers_type: "Berichtsart"
|
||||
report_customers_csv: "Als csv-Datei herunterladen"
|
||||
report_customers: Kunde
|
||||
report_producers: "Unsere Produzenten"
|
||||
report_type: "Berichtsart"
|
||||
report_hubs: "Hubs"
|
||||
@@ -2653,8 +2676,12 @@ de_DE:
|
||||
report_header_taxable_items_total: "Steuerpflichtige Posten insgesamt (%{currency_symbol})"
|
||||
report_header_sales_tax: "Umsatzsteuer (%{currency_symbol})"
|
||||
report_header_delivery_charge: "Liefergebühr (%{currency_symbol})"
|
||||
report_header_tax: "Steuern"
|
||||
report_header_tax_on_delivery: "Steuer auf Lieferkosten (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "Steuer auf Gebühren (%{currency_symbol})"
|
||||
report_header_tax_category: "Steuerkategorie"
|
||||
report_header_tax_rate_name: "Steuersatzname"
|
||||
report_header_tax_rate: "Steuersatz"
|
||||
report_header_total_tax: "Summe Steuern (%{currency_symbol})"
|
||||
report_header_total_excl_tax: "Summe exkl. Steuern (%{currency_symbol})"
|
||||
report_header_total_incl_tax: "Summe inkl. Steuern (%{currency_symbol})"
|
||||
@@ -2664,6 +2691,7 @@ de_DE:
|
||||
report_header_customer_code: Kundennummer
|
||||
report_header_product: Produkt
|
||||
report_header_product_properties: Produkteigenschaften
|
||||
report_header_product_tax_category: Steuerkategorie
|
||||
report_header_quantity: Menge
|
||||
report_header_max_quantity: Max Menge
|
||||
report_header_variant: Produktvariante
|
||||
@@ -2676,6 +2704,8 @@ de_DE:
|
||||
report_header_supplier: Lieferant
|
||||
report_header_producer: Produzent
|
||||
report_header_producer_suburb: Produzentenort
|
||||
report_header_producer_tax_status: Produzent berechnet Steuern
|
||||
report_header_producer_charges_sales_tax?: Berechnet Steuern
|
||||
report_header_unit: Einheit
|
||||
report_header_group_buy_unit_quantity: Gruppenkauf Einheitsmenge
|
||||
report_header_cost: Summe
|
||||
@@ -2691,10 +2721,12 @@ de_DE:
|
||||
report_header_distributor_address: Verteilstellenadresse
|
||||
report_header_distributor_city: Verteilstellen-Stadt
|
||||
report_header_distributor_postcode: Verteilstellen-Postleitzahl
|
||||
report_header_distributor_tax_status: Verteilstelle berechnet Steuern
|
||||
report_header_delivery_address: Lieferadresse
|
||||
report_header_delivery_postcode: Lieferpostleitzahl
|
||||
report_header_bulk_unit_size: Gruppenkauf-Einheit
|
||||
report_header_weight: Gewicht
|
||||
report_header_final_weight_volume: Tatsächliche Menge
|
||||
report_header_height: Höhe
|
||||
report_header_width: Breite
|
||||
report_header_depth: Tiefe
|
||||
@@ -2871,6 +2903,7 @@ de_DE:
|
||||
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"
|
||||
confirm: "Bestätigen"
|
||||
close: "Schließen"
|
||||
continue: "Weiter"
|
||||
cancel: "Stornieren"
|
||||
@@ -3401,6 +3434,8 @@ de_DE:
|
||||
server_error: "Serverfehler"
|
||||
shipping_method_names:
|
||||
UPS Ground: "UPS Ground"
|
||||
pick_up: "Abholung"
|
||||
delivery: "Lieferung"
|
||||
start_date: "Anfangsdatum"
|
||||
successfully_removed: "Erfolgreich gelöscht"
|
||||
taxonomy_edit: "Kategorien bearbeiten"
|
||||
@@ -3477,9 +3512,6 @@ de_DE:
|
||||
default_seo_title: "Standard SEO-Titel"
|
||||
default_meta_description: "Standard Meta-Beschreibung"
|
||||
default_meta_keywords: "Standard Meta-Schlüsselwörter"
|
||||
security_settings: "Sicherheitseinstellungen"
|
||||
allow_ssl_in_production: "Zulassen, dass SSL im Produktionsmodus verwendet wird"
|
||||
allow_ssl_in_staging: "Zulassen, dass SSL im Staging-Modus verwendet wird"
|
||||
currency_decimal_mark: "Dezimalzeichen der Währung"
|
||||
currency_settings: "Währungseinstellungen"
|
||||
currency_symbol_position: Währungssymbol (€) vor oder nach dem Betrag?
|
||||
@@ -3488,7 +3520,7 @@ de_DE:
|
||||
display_currency: "Währung anzeigen"
|
||||
choose_currency: "Währung auswählen"
|
||||
mail_method_settings: "E-Mail-Methodeneinstellungen"
|
||||
mail_settings_notice_html: "Einige der folgenden Einstellungen können nicht geändert werden und werden hier nur zu Zwecken der Fehlerbehebung aufgeführt. Änderungen können vorgenommen werden, indem die Einstellungen der deutschen Instanz aktualisiert und mithilfe von <a href='https://github.com/openfoodfoundation/ofn-install'>ofn-install</a> bereitgestellt werden. Wenden Sie sich an das globale Team des Open Food Network, um weitere Informationen zu erhalten."
|
||||
mail_settings_notice_html: "<b>Hier vorgenommene Änderungen sind nur vorübergehend</b> zum Debuggen und können in Zukunft rückgängig gemacht werden.<br> Dauerhafte Änderungen können vorgenommen werden, indem die Daten der Instanz aktualisiert und mithilfe von <a href='https://github.com/openfoodfoundation/ofn-install'>ofn-install bereitgestellt</a> werden. Wenden Sie sich für weitere Einzelheiten an das globale OFN-Team."
|
||||
general: "Allgemeines"
|
||||
enable_mail_delivery: "E-Mail-Versand aktivieren"
|
||||
send_mails_as: "E-Mails senden als"
|
||||
@@ -3578,7 +3610,7 @@ de_DE:
|
||||
zipcode: Postleitzahl
|
||||
weight: Gewicht (pro kg oder lb)
|
||||
error_user_destroy_with_orders: "Benutzer mit abgeschlossenen Bestellungen dürfen nicht gelöscht werden."
|
||||
cannot_create_payment_without_payment_methods: "Sie können keine Zahlung für eine Bestellung erstellen, ohne dass Zahlungsarten definiert sind."
|
||||
cannot_create_payment_without_payment_methods: "Sie können keine Zahlung für eine Bestellung erstellen, wenn keine Zahlungsarten angelegt sind."
|
||||
please_define_payment_methods: "Bitte definieren Sie zunächst die Zahlungsarten."
|
||||
options: "Optionen"
|
||||
has_no_shipped_units: "hat keine gelieferten Einheiten"
|
||||
@@ -3611,6 +3643,7 @@ de_DE:
|
||||
messages:
|
||||
included_price_validation: "kann nur ausgewählt werden, wenn Sie eine Standardsteuerzone festgelegt haben"
|
||||
blank: "darf nicht leer sein"
|
||||
invalid_instagram_url: "darf nur den Benutzernamen enthalten, z. B. the_prof"
|
||||
layouts:
|
||||
admin:
|
||||
login_nav:
|
||||
@@ -3694,6 +3727,10 @@ de_DE:
|
||||
authorized: "autorisiert"
|
||||
received: "empfangen"
|
||||
canceled: "storniert"
|
||||
line_items:
|
||||
index:
|
||||
results_found: "%{number} Ergebnisse gefunden."
|
||||
viewing: "Angezeigt wird %{start} bis %{end}."
|
||||
orders:
|
||||
add_product:
|
||||
cannot_add_item_to_canceled_order: "Einer stornierten Bestellung können keine Produkte hinzugefügt werden. "
|
||||
@@ -3717,6 +3754,7 @@ de_DE:
|
||||
print_invoices: "Rechnungen drucken"
|
||||
cancel_orders: "Bestellungen stornieren"
|
||||
resend_confirmation: "Bestätigung erneut senden"
|
||||
resend_confirmation_confirm_html: "Sind Sie sicher, dass Sie die E-Mail-Bestätigungen erneut senden wollen?"
|
||||
selected:
|
||||
zero: "Keine Bestellung ausgewählt"
|
||||
one: "1 Bestellung ausgewählt"
|
||||
@@ -3865,6 +3903,7 @@ de_DE:
|
||||
title: "Neues Produkt"
|
||||
new_product: "Neues Produkt"
|
||||
supplier: "Lieferant"
|
||||
supplier_select_placeholder: "Lieferant wählen"
|
||||
product_name: "Produktname"
|
||||
units: "Einheit"
|
||||
value: "Menge"
|
||||
@@ -3910,6 +3949,9 @@ de_DE:
|
||||
select_and_search: "Treffen Sie Ihre Auswahl und klicken Sie auf %{option}, um den Bericht zu erstellen."
|
||||
customer_names_message:
|
||||
customer_names_tip: "Wenn Kundennamen für von Ihnen gelieferte Bestellungen ausgeblendet sind, können Sie sich an den Händler wenden und ihn bitten, seine Ladeneinstellungen anzupassen, damit seine Lieferanten Kundennamen anzeigen können."
|
||||
products_and_inventory:
|
||||
all_products:
|
||||
message: "Beachten Sie, dass die gemeldeten Lagerbestände nur aus den Produktlisten der Lieferanten stammen. Wenn Sie den Katalog verwenden, um Ihre Lagerbestand zu verwalten, werden diese Werte in diesem Bericht ignoriert."
|
||||
users:
|
||||
index:
|
||||
listing_users: "Benutzer verwalten"
|
||||
@@ -4258,6 +4300,7 @@ de_DE:
|
||||
search_input:
|
||||
placeholder: Suche
|
||||
selector_with_filter:
|
||||
selected_items: "%{count} ausgewählt"
|
||||
search_placeholder: Suche
|
||||
pagination:
|
||||
next: Nächste
|
||||
|
||||
@@ -26,6 +26,23 @@ en:
|
||||
spree/product: Product
|
||||
spree/shipping_method: Shipping Method
|
||||
attributes:
|
||||
spree/order/ship_address:
|
||||
address1: "Shipping address (Street + House number)"
|
||||
address2: "Shipping address line 2"
|
||||
city: "Shipping address city"
|
||||
country: "Shipping address country"
|
||||
phone: "Phone number"
|
||||
firstname: "First name"
|
||||
lastname: "Last name"
|
||||
zipcode: "Shipping address postcode"
|
||||
spree/order/bill_address:
|
||||
address1: "Billing address (Street + House number)"
|
||||
zipcode: "Billing address postcode"
|
||||
city: "Billing address city"
|
||||
country: "Billing address country"
|
||||
firstname: "Billing address first name"
|
||||
lastname: "Billing address last name"
|
||||
phone: Customer phone
|
||||
spree/user:
|
||||
password: "Password"
|
||||
password_confirmation: "Password confirmation"
|
||||
@@ -475,11 +492,25 @@ en:
|
||||
price: Price
|
||||
producer: Producer
|
||||
category: Category
|
||||
sku: SKU
|
||||
on_hand: "On Hand"
|
||||
on_demand: "On Demand"
|
||||
tax_category: "Tax Category"
|
||||
inherits_properties: "Inherits Properties?"
|
||||
available_on: "Available On"
|
||||
import_date: "Import Date"
|
||||
columns_selector:
|
||||
unit: Unit
|
||||
price: Price
|
||||
producer: Producer
|
||||
category: Category
|
||||
sku: SKU
|
||||
on_hand: "On Hand"
|
||||
on_demand: "On Demand"
|
||||
tax_category: "Tax Category"
|
||||
inherits_properties: "Inherits Properties?"
|
||||
available_on: "Available On"
|
||||
import_date: "Import Date"
|
||||
adjustments:
|
||||
skipped_changing_canceled_order: "You can't change a cancelled order."
|
||||
# Common properties / models
|
||||
@@ -1373,6 +1404,7 @@ en:
|
||||
total_by_customer: Total By Customer
|
||||
total_by_supplier: Total By Supplier
|
||||
supplier_totals: Order Cycle Supplier Totals
|
||||
percentage: "%{value} %"
|
||||
supplier_totals_by_distributor: Order Cycle Supplier Totals by Distributor
|
||||
totals_by_supplier: Order Cycle Distributor Totals by Supplier
|
||||
customer_totals: Order Cycle Customer Totals
|
||||
@@ -1383,6 +1415,7 @@ en:
|
||||
addresses: Addresses
|
||||
payment_methods: Payment Methods Report
|
||||
delivery: Delivery Report
|
||||
sales_tax_totals_by_producer: Sales Tax Totals By Producer
|
||||
tax_types: Tax Types
|
||||
tax_rates: Tax Rates
|
||||
pack_by_customer: Pack By Customer
|
||||
@@ -1815,12 +1848,6 @@ en:
|
||||
card_could_not_be_removed: Sorry, the card could not be removed
|
||||
invalid_credit_card: "Invalid credit card"
|
||||
|
||||
ie_warning_headline: "Your browser is out of date :-("
|
||||
ie_warning_text: "For the best Open Food Network experience, we strongly recommend upgrading your browser:"
|
||||
ie_warning_chrome: Download Chrome
|
||||
ie_warning_firefox: Download Firefox
|
||||
ie_warning_ie: Upgrade Internet Explorer
|
||||
ie_warning_other: "Can't upgrade your browser? Try Open Food Network on your smartphone :-)"
|
||||
legal:
|
||||
cookies_policy:
|
||||
header: "How We Use Cookies"
|
||||
@@ -1973,20 +2000,18 @@ en:
|
||||
submit: Next - Order summary
|
||||
cancel: Back to Your details
|
||||
step3:
|
||||
your_details:
|
||||
title: Your details
|
||||
edit: Edit your details
|
||||
billing_address:
|
||||
title: Billing address
|
||||
shipping_address:
|
||||
title: Shipping address
|
||||
delivery_info:
|
||||
title: Delivery info
|
||||
delivery_details:
|
||||
title: Delivery details
|
||||
edit: Edit
|
||||
address: Delivery address
|
||||
instructions: Instructions
|
||||
payment_method:
|
||||
title: Payment method
|
||||
edit: Edit payment method
|
||||
edit: Edit
|
||||
instructions: Instructions
|
||||
order:
|
||||
title: Order total
|
||||
title: Order details
|
||||
edit: Edit
|
||||
terms_and_conditions:
|
||||
message_html: "I agree to the seller's %{terms_and_conditions_link}."
|
||||
link_text: "Terms and Conditions"
|
||||
@@ -1995,11 +2020,10 @@ en:
|
||||
all_terms_and_conditions:
|
||||
message_html: "I agree to the seller's %{terms_and_conditions_link} and the platform %{tos_link}."
|
||||
terms_and_conditions: "Terms and Conditions"
|
||||
agree: By clicking 'Complete order' you agree to your order being processed.
|
||||
submit: Complete order
|
||||
cancel: Back to Payment method
|
||||
errors:
|
||||
global: "Saving failed, please update the highlighted fields."
|
||||
saving_failed: "Saving failed, please update the highlighted fields. %{messages}"
|
||||
terms_not_accepted: Please accept Terms and Conditions
|
||||
required: Field cannot be blank
|
||||
invalid_number: "Please enter a valid phone number"
|
||||
@@ -2740,6 +2764,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
report_customers_cycle: "Order Cycle"
|
||||
report_customers_type: "Report Type"
|
||||
report_customers_csv: "Download as csv"
|
||||
report_customers: Customer
|
||||
report_producers: "Producers"
|
||||
report_type: "Report Type"
|
||||
report_hubs: "Hubs"
|
||||
@@ -2818,8 +2843,12 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
report_header_taxable_items_total: "Taxable Items Total (%{currency_symbol})"
|
||||
report_header_sales_tax: "Sales Tax (%{currency_symbol})"
|
||||
report_header_delivery_charge: "Delivery Charge (%{currency_symbol})"
|
||||
report_header_tax: "Tax"
|
||||
report_header_tax_on_delivery: "Tax on Delivery (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "Tax on Fees (%{currency_symbol})"
|
||||
report_header_tax_category: "Tax Category"
|
||||
report_header_tax_rate_name: "Tax Rate Name"
|
||||
report_header_tax_rate: "Tax Rate"
|
||||
report_header_total_tax: "Total Tax (%{currency_symbol})"
|
||||
report_header_total_excl_tax: "Total excl. tax (%{currency_symbol})"
|
||||
report_header_total_incl_tax: "Total incl. tax (%{currency_symbol})"
|
||||
@@ -2842,6 +2871,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
report_header_supplier: Supplier
|
||||
report_header_producer: Producer
|
||||
report_header_producer_suburb: Producer Suburb
|
||||
report_header_producer_tax_status: Producer Tax Status
|
||||
report_header_producer_charges_sales_tax?: GST/VAT Registered
|
||||
report_header_unit: Unit
|
||||
report_header_group_buy_unit_quantity: Group Buy Unit Quantity
|
||||
@@ -2858,6 +2888,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
report_header_distributor_address: Distributor address
|
||||
report_header_distributor_city: Distributor city
|
||||
report_header_distributor_postcode: Distributor postcode
|
||||
report_header_distributor_tax_status: Distributor Tax Status
|
||||
report_header_delivery_address: Delivery Address
|
||||
report_header_delivery_postcode: Delivery Postcode
|
||||
report_header_bulk_unit_size: Bulk Unit Size
|
||||
@@ -3577,6 +3608,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
server_error: "Server error"
|
||||
shipping_method_names:
|
||||
UPS Ground: "UPS Ground"
|
||||
pick_up: "Pick-up at the farm"
|
||||
delivery: "Signed, sealed, delivered"
|
||||
start_date: "Start date"
|
||||
successfully_removed: "Successfully Removed"
|
||||
taxonomy_edit: "Taxonomy edit"
|
||||
@@ -3654,9 +3687,6 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
default_seo_title: "Default Seo Title"
|
||||
default_meta_description: "Default Meta Description"
|
||||
default_meta_keywords: "Default Meta Keywords"
|
||||
security_settings: "Security Settings"
|
||||
allow_ssl_in_production: "Allow SSL to be used in production mode"
|
||||
allow_ssl_in_staging: "Allow SSL to be used in staging mode"
|
||||
currency_decimal_mark: "Currency decimal mark"
|
||||
currency_settings: "Currency Settings"
|
||||
currency_symbol_position: Put "currency symbol before or after dollar amount?"
|
||||
@@ -3666,7 +3696,7 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
choose_currency: "Choose Currency"
|
||||
|
||||
mail_method_settings: "Mail Method Settings"
|
||||
mail_settings_notice_html: "Some of the following settings can't be edited and are listed here just for debugging purposes. Changes can be made by updating the instance's secrets and provisioning them using <a href='https://github.com/openfoodfoundation/ofn-install'>ofn-install</a>. Reach out to the OFN global team for further details."
|
||||
mail_settings_notice_html: "<b>Changes made here will be temporary</b> for debugging only, and may get reverted in the future. <br>Permanent changes can be made by updating the instance's secrets and provisioning them using <a href='https://github.com/openfoodfoundation/ofn-install'>ofn-install</a>. Reach out to the OFN global team for further details."
|
||||
general: "General"
|
||||
enable_mail_delivery: "Enable Mail Delivery"
|
||||
send_mails_as: "Send Mails As"
|
||||
@@ -3889,6 +3919,10 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
authorized: "Authorized"
|
||||
received: "Received"
|
||||
canceled: "Canceled"
|
||||
line_items:
|
||||
index:
|
||||
results_found: "%{number} Results found."
|
||||
viewing: "Viewing %{start} to %{end}."
|
||||
orders:
|
||||
add_product:
|
||||
cannot_add_item_to_canceled_order: "Cannot add item to canceled order"
|
||||
|
||||
@@ -5,6 +5,10 @@ en_AU:
|
||||
spree/product: Product
|
||||
spree/shipping_method: Shipping Method
|
||||
attributes:
|
||||
spree/order/ship_address:
|
||||
phone: "Phone number"
|
||||
firstname: "First name"
|
||||
lastname: "Last name"
|
||||
spree/user:
|
||||
password: "Password"
|
||||
reset_password_token: Reset password token
|
||||
@@ -309,11 +313,25 @@ en_AU:
|
||||
price: Price
|
||||
producer: Producer
|
||||
category: Category
|
||||
sku: SKU
|
||||
on_hand: "On Hand"
|
||||
on_demand: "On Demand"
|
||||
tax_category: "Tax Category"
|
||||
inherits_properties: "Inherits Properties?"
|
||||
available_on: "Available On"
|
||||
import_date: "Import Date"
|
||||
columns_selector:
|
||||
unit: Unit
|
||||
price: Price
|
||||
producer: Producer
|
||||
category: Category
|
||||
sku: SKU
|
||||
on_hand: "On Hand"
|
||||
on_demand: "On Demand"
|
||||
tax_category: "Tax Category"
|
||||
inherits_properties: "Inherits Properties?"
|
||||
available_on: "Available On"
|
||||
import_date: "Import Date"
|
||||
begins_at: Begins At
|
||||
begins_on: Begins On
|
||||
customer: Customer
|
||||
@@ -1499,12 +1517,6 @@ en_AU:
|
||||
card_has_been_removed: "Your card has been removed (number: %{number})"
|
||||
card_could_not_be_removed: Sorry, the card could not be removed
|
||||
invalid_credit_card: "Invalid credit card"
|
||||
ie_warning_headline: "Your browser is out of date :-("
|
||||
ie_warning_text: "For the best Open Food Network experience, we strongly recommend upgrading your browser:"
|
||||
ie_warning_chrome: Download Chrome
|
||||
ie_warning_firefox: Download Firefox
|
||||
ie_warning_ie: Upgrade Internet Explorer
|
||||
ie_warning_other: "Can't upgrade your browser? Try Open Food Network on your smartphone :-)"
|
||||
legal:
|
||||
cookies_policy:
|
||||
header: "How We Use Cookies"
|
||||
@@ -1623,10 +1635,14 @@ en_AU:
|
||||
card_year:
|
||||
label: Year
|
||||
step3:
|
||||
your_details:
|
||||
title: Your details
|
||||
billing_address:
|
||||
title: Billing address
|
||||
delivery_details:
|
||||
title: Delivery details
|
||||
edit: Edit
|
||||
address: Delivery address
|
||||
payment_method:
|
||||
edit: Edit
|
||||
order:
|
||||
edit: Edit
|
||||
terms_and_conditions:
|
||||
message_html: "I agree to the seller's %{terms_and_conditions_link}."
|
||||
link_text: "Terms and Conditions"
|
||||
@@ -2308,6 +2324,7 @@ en_AU:
|
||||
report_customers_cycle: "Order Cycle"
|
||||
report_customers_type: "Report Type"
|
||||
report_customers_csv: "Download as csv"
|
||||
report_customers: Customer
|
||||
report_producers: "Producers"
|
||||
report_type: "Report Type"
|
||||
report_hubs: "Hubs"
|
||||
@@ -2371,6 +2388,7 @@ en_AU:
|
||||
report_header_delivery_charge: "Delivery Charge (%{currency_symbol})"
|
||||
report_header_tax_on_delivery: "Tax on Delivery (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "Tax on Fees (%{currency_symbol})"
|
||||
report_header_tax_category: "Tax Category"
|
||||
report_header_total_tax: "Total Tax (%{currency_symbol})"
|
||||
report_header_total_excl_tax: "Total excl. tax (%{currency_symbol})"
|
||||
report_header_total_incl_tax: "Total incl. tax (%{currency_symbol})"
|
||||
@@ -3114,9 +3132,6 @@ en_AU:
|
||||
default_seo_title: "Default Seo Title"
|
||||
default_meta_description: "Default Meta Description"
|
||||
default_meta_keywords: "Default Meta Keywords"
|
||||
security_settings: "Security Settings"
|
||||
allow_ssl_in_production: "Allow SSL to be used in production mode"
|
||||
allow_ssl_in_staging: "Allow SSL to be used in staging mode"
|
||||
currency_decimal_mark: "Currency decimal mark"
|
||||
currency_settings: "Currency Settings"
|
||||
currency_symbol_position: Put "currency symbol before or after dollar amount?"
|
||||
@@ -3319,6 +3334,10 @@ en_AU:
|
||||
authorized: "Authorized"
|
||||
received: "Received"
|
||||
canceled: "Canceled"
|
||||
line_items:
|
||||
index:
|
||||
results_found: "%{number} Results found."
|
||||
viewing: "Viewing %{start} to %{end}."
|
||||
orders:
|
||||
index:
|
||||
listing_orders: "Listing Orders"
|
||||
|
||||
@@ -5,6 +5,10 @@ en_BE:
|
||||
spree/product: Product
|
||||
spree/shipping_method: Shipping Method
|
||||
attributes:
|
||||
spree/order/ship_address:
|
||||
phone: "Phone number"
|
||||
firstname: "First name"
|
||||
lastname: "Last name"
|
||||
spree/user:
|
||||
password: "Password"
|
||||
reset_password_token: Reset password token
|
||||
@@ -283,11 +287,25 @@ en_BE:
|
||||
price: Price
|
||||
producer: Producer
|
||||
category: Category
|
||||
sku: SKU
|
||||
on_hand: "On Hand"
|
||||
on_demand: "On Demand"
|
||||
tax_category: "Tax Category"
|
||||
inherits_properties: "Inherits Properties?"
|
||||
available_on: "Available On"
|
||||
import_date: "Import Date"
|
||||
columns_selector:
|
||||
unit: Unit
|
||||
price: Price
|
||||
producer: Producer
|
||||
category: Category
|
||||
sku: SKU
|
||||
on_hand: "On Hand"
|
||||
on_demand: "On Demand"
|
||||
tax_category: "Tax Category"
|
||||
inherits_properties: "Inherits Properties?"
|
||||
available_on: "Available On"
|
||||
import_date: "Import Date"
|
||||
begins_at: Begins At
|
||||
begins_on: Begins On
|
||||
customer: Customer
|
||||
@@ -1393,12 +1411,6 @@ en_BE:
|
||||
saving_credit_card: Saving credit card...
|
||||
card_has_been_removed: "Your card has been removed (number: %{number})"
|
||||
card_could_not_be_removed: Sorry, the card could not be removed
|
||||
ie_warning_headline: "Your browser is out of date :-("
|
||||
ie_warning_text: "For the best Open Food Network experience, we strongly recommend upgrading your browser:"
|
||||
ie_warning_chrome: Download Chrome
|
||||
ie_warning_firefox: Download Firefox
|
||||
ie_warning_ie: Upgrade Internet Explorer
|
||||
ie_warning_other: "Can't upgrade your browser? Try Open Food Network on your smartphone :-)"
|
||||
legal:
|
||||
cookies_policy:
|
||||
header: "How We Use Cookies"
|
||||
@@ -1511,10 +1523,14 @@ en_BE:
|
||||
shipping_info:
|
||||
title: Shipping info
|
||||
step3:
|
||||
your_details:
|
||||
title: Your details
|
||||
billing_address:
|
||||
title: Billing address
|
||||
delivery_details:
|
||||
title: Delivery details
|
||||
edit: Edit
|
||||
address: Delivery address
|
||||
payment_method:
|
||||
edit: Edit
|
||||
order:
|
||||
edit: Edit
|
||||
errors:
|
||||
invalid_email: "Please enter a valid email address"
|
||||
order_paid: PAID
|
||||
@@ -2173,6 +2189,7 @@ en_BE:
|
||||
report_customers_cycle: "Order Cycle"
|
||||
report_customers_type: "Report Type"
|
||||
report_customers_csv: "Download as csv"
|
||||
report_customers: Customer
|
||||
report_producers: "Producers"
|
||||
report_type: "Report Type"
|
||||
report_hubs: "Hubs"
|
||||
@@ -2236,6 +2253,8 @@ en_BE:
|
||||
report_header_delivery_charge: "Delivery Charge (%{currency_symbol})"
|
||||
report_header_tax_on_delivery: "Tax on Delivery (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "Tax on Fees (%{currency_symbol})"
|
||||
report_header_tax_category: "Tax Category"
|
||||
report_header_tax_rate: "Tax Rate"
|
||||
report_header_total_tax: "Total Tax (%{currency_symbol})"
|
||||
report_header_total_excl_tax: "Total excl. tax (%{currency_symbol})"
|
||||
report_header_total_incl_tax: "Total incl. tax (%{currency_symbol})"
|
||||
@@ -2854,9 +2873,6 @@ en_BE:
|
||||
default_seo_title: "Default Seo Title"
|
||||
default_meta_description: "Default Meta Description"
|
||||
default_meta_keywords: "Default Meta Keywords"
|
||||
security_settings: "Security Settings"
|
||||
allow_ssl_in_production: "Allow SSL to be used in production mode"
|
||||
allow_ssl_in_staging: "Allow SSL to be used in staging mode"
|
||||
currency_decimal_mark: "Currency decimal mark"
|
||||
currency_settings: "Currency Settings"
|
||||
currency_symbol_position: Put "currency symbol before or after euros amount?"
|
||||
@@ -3008,6 +3024,10 @@ en_BE:
|
||||
form:
|
||||
product: "Product"
|
||||
amount: "Amount"
|
||||
line_items:
|
||||
index:
|
||||
results_found: "%{number} Results found."
|
||||
viewing: "Viewing %{start} to %{end}."
|
||||
orders:
|
||||
index:
|
||||
listing_orders: "Listing Orders"
|
||||
|
||||
@@ -5,6 +5,13 @@ en_CA:
|
||||
spree/product: Product
|
||||
spree/shipping_method: Shipping/Pick-up Method
|
||||
attributes:
|
||||
spree/order/ship_address:
|
||||
address2: "Shipping address line 2"
|
||||
country: "Shipping address country"
|
||||
phone: "Phone number"
|
||||
firstname: "First name"
|
||||
lastname: "Last name"
|
||||
zipcode: "Shipping address postal code"
|
||||
spree/user:
|
||||
password: "Password"
|
||||
password_confirmation: "Password confirmation"
|
||||
@@ -404,8 +411,11 @@ en_CA:
|
||||
filters:
|
||||
categories:
|
||||
title: Categories
|
||||
selected_categories: "%{count} categories selected"
|
||||
producers:
|
||||
title: Producers
|
||||
selected_producers: "%{count} producers selected"
|
||||
per_page: "%{count} items per page"
|
||||
colums: Columns
|
||||
columns:
|
||||
name: Name
|
||||
@@ -413,11 +423,25 @@ en_CA:
|
||||
price: Price
|
||||
producer: Producer
|
||||
category: Category
|
||||
sku: SKU
|
||||
on_hand: "On Hand"
|
||||
on_demand: "On Demand"
|
||||
tax_category: "Tax Category"
|
||||
inherits_properties: "Inherits Properties?"
|
||||
available_on: "Available"
|
||||
import_date: "Import Date"
|
||||
columns_selector:
|
||||
unit: Unit
|
||||
price: Price
|
||||
producer: Producer
|
||||
category: Category
|
||||
sku: SKU
|
||||
on_hand: "On Hand"
|
||||
on_demand: "On Demand"
|
||||
tax_category: "Tax Category"
|
||||
inherits_properties: "Inherits Properties?"
|
||||
available_on: "Available"
|
||||
import_date: "Import Date"
|
||||
adjustments:
|
||||
skipped_changing_canceled_order: "You can't change a cancelled order."
|
||||
begins_at: Begins At
|
||||
@@ -648,6 +672,7 @@ en_CA:
|
||||
not_found: not found in database
|
||||
category_not_found: doesn't match allowed categories. See the correct categories to choose from on the product import page, or check that there's no misspelling.
|
||||
not_updatable: cannot be updated on existing products via product import
|
||||
values_must_be_same: must be the same for products with the same name
|
||||
blank: can't be blank
|
||||
products_no_permission: you do not have permission to manage products for this enterprise
|
||||
inventory_no_permission: you do not have permission to create inventory for this producer
|
||||
@@ -1478,6 +1503,9 @@ en_CA:
|
||||
stripe_connect_fail: Sorry, the connection of your Stripe account failed
|
||||
stripe_connect_settings:
|
||||
resource: Stripe Connect configuration
|
||||
resend_confirmation_emails_feedback:
|
||||
one: "Confirmation email sent for 1 order."
|
||||
other: "Confirmation emails sent for %{count} orders."
|
||||
api:
|
||||
unknown_error: "Something went wrong. Our team has been notified."
|
||||
invalid_api_key: "Invalid API key (%{key}) specified."
|
||||
@@ -1700,12 +1728,6 @@ en_CA:
|
||||
card_has_been_removed: "Your card has been removed (number: %{number})"
|
||||
card_could_not_be_removed: Sorry, the card could not be removed
|
||||
invalid_credit_card: "Invalid credit card"
|
||||
ie_warning_headline: "Your browser is out of date :-("
|
||||
ie_warning_text: "For the best Open Food Network experience, we strongly recommend upgrading your browser:"
|
||||
ie_warning_chrome: Download Chrome
|
||||
ie_warning_firefox: Download Firefox
|
||||
ie_warning_ie: Upgrade Internet Explorer
|
||||
ie_warning_other: "Can't upgrade your browser? Try Open Food Network on your smartphone :-)"
|
||||
legal:
|
||||
cookies_policy:
|
||||
header: "How We Use Cookies"
|
||||
@@ -1798,6 +1820,7 @@ en_CA:
|
||||
message_html: "You have an order for this order cycle already. Check the %{cart} to see the items you ordered before. You can also cancel items as long as the order cycle is open."
|
||||
step1:
|
||||
contact_information:
|
||||
title: Contact information
|
||||
email:
|
||||
label: Email
|
||||
phone:
|
||||
@@ -1847,20 +1870,18 @@ en_CA:
|
||||
submit: Next - Order Summary
|
||||
cancel: Back to your details
|
||||
step3:
|
||||
your_details:
|
||||
title: Your details
|
||||
edit: Edit your details
|
||||
billing_address:
|
||||
title: Billing address
|
||||
shipping_address:
|
||||
title: Shipping address
|
||||
delivery_info:
|
||||
title: Delivery info
|
||||
delivery_details:
|
||||
title: Delivery details
|
||||
edit: Edit
|
||||
address: Delivery address
|
||||
instructions: Instructions
|
||||
payment_method:
|
||||
title: Payment Method
|
||||
edit: Edit payment method
|
||||
edit: Edit
|
||||
instructions: Instructions
|
||||
order:
|
||||
title: Order total
|
||||
title: Order details
|
||||
edit: Edit
|
||||
terms_and_conditions:
|
||||
message_html: "I agree to the seller's %{terms_and_conditions_link}."
|
||||
link_text: "Terms and Conditions"
|
||||
@@ -1869,11 +1890,10 @@ en_CA:
|
||||
all_terms_and_conditions:
|
||||
message_html: "I agree to the seller's %{terms_and_conditions_link} and the platform %{tos_link}"
|
||||
terms_and_conditions: "Terms and Conditions"
|
||||
agree: By clicking 'Complete order' you agree to your order being processed.
|
||||
submit: Complete order
|
||||
cancel: Back to Payment method
|
||||
errors:
|
||||
global: "Saving failed, please update the highlighted fields."
|
||||
saving_failed: "Saving failed, please update the highlighted fields. %{messages}"
|
||||
terms_not_accepted: Please accept Terms and Conditions
|
||||
required: Field cannot be blank
|
||||
invalid_number: "Please enter a valid phone number"
|
||||
@@ -2574,6 +2594,7 @@ en_CA:
|
||||
report_customers_cycle: "Order Cycle"
|
||||
report_customers_type: "Report Type"
|
||||
report_customers_csv: "Download as csv"
|
||||
report_customers: Customer
|
||||
report_producers: "Producers"
|
||||
report_type: "Report Type"
|
||||
report_hubs: "Hubs"
|
||||
@@ -2651,8 +2672,11 @@ en_CA:
|
||||
report_header_taxable_items_total: "Taxable Items Total (%{currency_symbol})"
|
||||
report_header_sales_tax: "Sales Tax (%{currency_symbol})"
|
||||
report_header_delivery_charge: "Delivery Charge (%{currency_symbol})"
|
||||
report_header_tax: "Tax"
|
||||
report_header_tax_on_delivery: "Tax on Delivery (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "Tax on Fees (%{currency_symbol})"
|
||||
report_header_tax_category: "Tax Category"
|
||||
report_header_tax_rate: "Tax Rate"
|
||||
report_header_total_tax: "Total Tax (%{currency_symbol})"
|
||||
report_header_total_excl_tax: "Total excl. tax (%{currency_symbol})"
|
||||
report_header_total_incl_tax: "Total incl. tax (%{currency_symbol})"
|
||||
@@ -2662,6 +2686,7 @@ en_CA:
|
||||
report_header_customer_code: Customer Code
|
||||
report_header_product: Product
|
||||
report_header_product_properties: Product Properties
|
||||
report_header_product_tax_category: Product Tax Category
|
||||
report_header_quantity: Quantity
|
||||
report_header_max_quantity: Max Quantity
|
||||
report_header_variant: Variant
|
||||
@@ -2674,6 +2699,7 @@ en_CA:
|
||||
report_header_supplier: Supplier
|
||||
report_header_producer: Producer
|
||||
report_header_producer_suburb: Producer City/Town
|
||||
report_header_producer_charges_sales_tax?: Tax registered
|
||||
report_header_unit: Unit
|
||||
report_header_group_buy_unit_quantity: Group Buy Unit Quantity
|
||||
report_header_cost: Cost
|
||||
@@ -2693,6 +2719,7 @@ en_CA:
|
||||
report_header_delivery_postcode: Delivery Postal Code
|
||||
report_header_bulk_unit_size: Bulk Unit Size
|
||||
report_header_weight: Weight
|
||||
report_header_final_weight_volume: Final (Weight/Volume)
|
||||
report_header_height: Height
|
||||
report_header_width: Width
|
||||
report_header_depth: Depth
|
||||
@@ -2869,6 +2896,7 @@ en_CA:
|
||||
deleting_item_will_cancel_order: "This operation will result in one or more empty orders, which will be cancelled. Do you wish to proceed?"
|
||||
modals:
|
||||
got_it: "Got it"
|
||||
confirm: "Confirm"
|
||||
close: "Close"
|
||||
continue: "Continue"
|
||||
cancel: "Cancel"
|
||||
@@ -3391,6 +3419,8 @@ en_CA:
|
||||
server_error: "Server error"
|
||||
shipping_method_names:
|
||||
UPS Ground: "UPS Ground"
|
||||
pick_up: "Pick-up at the farm"
|
||||
delivery: "Signed, sealed, delivered"
|
||||
start_date: "Start date"
|
||||
successfully_removed: "Successfully Removed"
|
||||
taxonomy_edit: "Taxonomy edit"
|
||||
@@ -3467,9 +3497,6 @@ en_CA:
|
||||
default_seo_title: "Default Seo Title"
|
||||
default_meta_description: "Default Meta Description"
|
||||
default_meta_keywords: "Default Meta Keywords"
|
||||
security_settings: "Security Settings"
|
||||
allow_ssl_in_production: "Allow SSL to be used in production mode"
|
||||
allow_ssl_in_staging: "Allow SSL to be used in staging mode"
|
||||
currency_decimal_mark: "Currency decimal mark"
|
||||
currency_settings: "Currency Settings"
|
||||
currency_symbol_position: Put "currency symbol before or after dollar amount?"
|
||||
@@ -3478,7 +3505,7 @@ en_CA:
|
||||
display_currency: "Display currency"
|
||||
choose_currency: "Choose Currency"
|
||||
mail_method_settings: "Mail Method Settings"
|
||||
mail_settings_notice_html: "Some of the following settings can't be edited and are listed here just for debugging purposes. Changes can be made by updating the instance's secrets and provisioning them using <a href='https://github.com/openfoodfoundation/ofn-install'>ofn-install</a>. Reach out to the OFN global team for further details."
|
||||
mail_settings_notice_html: "<b>Changes made here will be temporary</b> for debugging only, and may get reverted in the future. <br>Permanent changes can be made by updating the instance's secrets and provisioning them using <a href='https://github.com/openfoodfoundation/ofn-install'>ofn-install</a>. Reach out to the OFN global team for further details. "
|
||||
general: "General"
|
||||
enable_mail_delivery: "Enable Mail Delivery"
|
||||
send_mails_as: "Send Mails As"
|
||||
@@ -3601,6 +3628,7 @@ en_CA:
|
||||
messages:
|
||||
included_price_validation: "cannot be selected unless you have set a Default Tax Zone"
|
||||
blank: "can't be blank"
|
||||
invalid_instagram_url: "Must be user name only eg. the_prof"
|
||||
layouts:
|
||||
admin:
|
||||
login_nav:
|
||||
@@ -3684,6 +3712,10 @@ en_CA:
|
||||
authorized: "Authorized"
|
||||
received: "Received"
|
||||
canceled: "Canceled"
|
||||
line_items:
|
||||
index:
|
||||
results_found: " %{number} Results found."
|
||||
viewing: "Viewing %{start} to %{end}."
|
||||
orders:
|
||||
add_product:
|
||||
cannot_add_item_to_canceled_order: "You cannot add an item to a cancelled order."
|
||||
@@ -3707,6 +3739,7 @@ en_CA:
|
||||
print_invoices: "Print Invoices"
|
||||
cancel_orders: "Cancel Orders"
|
||||
resend_confirmation: "Resend Confirmation"
|
||||
resend_confirmation_confirm_html: "This will resend the confirmation email to the customer. <br />Are you sure you want to proceed?"
|
||||
selected:
|
||||
zero: "No order selected"
|
||||
one: "1 order selected"
|
||||
@@ -3855,6 +3888,7 @@ en_CA:
|
||||
title: "New Product"
|
||||
new_product: "New Product"
|
||||
supplier: "Supplier"
|
||||
supplier_select_placeholder: "Select a supplier"
|
||||
product_name: "Product Name"
|
||||
units: "Unit Size"
|
||||
value: "Value"
|
||||
@@ -3900,6 +3934,9 @@ en_CA:
|
||||
select_and_search: "Select filters and click on %{option} to access your data."
|
||||
customer_names_message:
|
||||
customer_names_tip: "If customer names are hidden for the items you have supplied, you can contact the seller and ask if they can update their preferences and allow you to view customer names."
|
||||
products_and_inventory:
|
||||
all_products:
|
||||
message: "Note that stock levels reported are from supplier product lists only. If you are using Inventory to manage your stock quantities, these values will be ignored in this report. "
|
||||
users:
|
||||
index:
|
||||
listing_users: "Listing Users"
|
||||
@@ -4249,6 +4286,7 @@ en_CA:
|
||||
search_input:
|
||||
placeholder: Search
|
||||
selector_with_filter:
|
||||
selected_items: "%{count} selected"
|
||||
search_placeholder: Search
|
||||
pagination:
|
||||
next: Next
|
||||
|
||||
@@ -35,8 +35,6 @@ en_CH:
|
||||
menu_5_url: "https://www.openfoodswitzerland.ch/"
|
||||
menu_6_url: "https://www.openfoodswitzerland.ch"
|
||||
menu_7_url: "https://www.openfoodswitzerland.ch/"
|
||||
ie_warning_text: "For the best Open Food Switzerland experience, we strongly recommend upgrading your browser:"
|
||||
ie_warning_other: "Can't upgrade your browser? Try Open Food Switzerland on your smartphone :-)"
|
||||
legal:
|
||||
cookies_policy:
|
||||
disabling_cookies_desc: "As a user you can always allow, block or delete Open Food Switzerland’s or any other website cookies whenever you want to through your browser’s setting control. Each browser has a different operative. Here are the links:"
|
||||
|
||||
@@ -5,6 +5,10 @@ en_DE:
|
||||
spree/product: Product
|
||||
spree/shipping_method: Shipping Method
|
||||
attributes:
|
||||
spree/order/ship_address:
|
||||
phone: "Phone number"
|
||||
firstname: "First name"
|
||||
lastname: "Last name"
|
||||
spree/user:
|
||||
password: "Password"
|
||||
reset_password_token: Reset password token
|
||||
@@ -288,11 +292,25 @@ en_DE:
|
||||
price: Price
|
||||
producer: Producer
|
||||
category: Category
|
||||
sku: SKU
|
||||
on_hand: "On Hand"
|
||||
on_demand: "On Demand"
|
||||
tax_category: "Tax Category"
|
||||
inherits_properties: "Inherits Properties?"
|
||||
available_on: "Available On"
|
||||
import_date: "Import Date"
|
||||
columns_selector:
|
||||
unit: Unit
|
||||
price: Price
|
||||
producer: Producer
|
||||
category: Category
|
||||
sku: SKU
|
||||
on_hand: "On Hand"
|
||||
on_demand: "On Demand"
|
||||
tax_category: "Tax Category"
|
||||
inherits_properties: "Inherits Properties?"
|
||||
available_on: "Available On"
|
||||
import_date: "Import Date"
|
||||
begins_at: Begins At
|
||||
begins_on: Begins On
|
||||
customer: Customer
|
||||
@@ -1403,12 +1421,6 @@ en_DE:
|
||||
saving_credit_card: Saving credit card...
|
||||
card_has_been_removed: "Your card has been removed (number: %{number})"
|
||||
card_could_not_be_removed: Sorry, the card could not be removed
|
||||
ie_warning_headline: "Your browser is out of date :-("
|
||||
ie_warning_text: "For the best Open Food Network experience, we strongly recommend upgrading your browser:"
|
||||
ie_warning_chrome: Download Chrome
|
||||
ie_warning_firefox: Download Firefox
|
||||
ie_warning_ie: Upgrade Internet Explorer
|
||||
ie_warning_other: "Can't upgrade your browser? Try Open Food Network on your smartphone :-)"
|
||||
legal:
|
||||
cookies_policy:
|
||||
header: "How We Use Cookies"
|
||||
@@ -1521,10 +1533,14 @@ en_DE:
|
||||
shipping_info:
|
||||
title: Shipping info
|
||||
step3:
|
||||
your_details:
|
||||
title: Your details
|
||||
billing_address:
|
||||
title: Billing address
|
||||
delivery_details:
|
||||
title: Delivery details
|
||||
edit: Edit
|
||||
address: Delivery address
|
||||
payment_method:
|
||||
edit: Edit
|
||||
order:
|
||||
edit: Edit
|
||||
errors:
|
||||
invalid_email: "Please enter a valid email address"
|
||||
order_paid: PAID
|
||||
@@ -2182,6 +2198,7 @@ en_DE:
|
||||
report_customers_cycle: "Order Cycle"
|
||||
report_customers_type: "Report Type"
|
||||
report_customers_csv: "Download as csv"
|
||||
report_customers: Customer
|
||||
report_producers: "Producers"
|
||||
report_type: "Report Type"
|
||||
report_hubs: "Hubs"
|
||||
@@ -2245,6 +2262,7 @@ en_DE:
|
||||
report_header_delivery_charge: "Delivery Charge (%{currency_symbol})"
|
||||
report_header_tax_on_delivery: "Tax on Delivery (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "Tax on Fees (%{currency_symbol})"
|
||||
report_header_tax_category: "Tax Category"
|
||||
report_header_total_tax: "Total Tax (%{currency_symbol})"
|
||||
report_header_total_excl_tax: "Total excl. tax (%{currency_symbol})"
|
||||
report_header_total_incl_tax: "Total incl. tax (%{currency_symbol})"
|
||||
@@ -2866,9 +2884,6 @@ en_DE:
|
||||
default_seo_title: "Default Seo Title"
|
||||
default_meta_description: "Default Meta Description"
|
||||
default_meta_keywords: "Default Meta Keywords"
|
||||
security_settings: "Security Settings"
|
||||
allow_ssl_in_production: "Allow SSL to be used in production mode"
|
||||
allow_ssl_in_staging: "Allow SSL to be used in staging mode"
|
||||
currency_decimal_mark: "Currency decimal mark"
|
||||
currency_settings: "Currency Settings"
|
||||
currency_symbol_position: Put "currency symbol before or after dollar amount?"
|
||||
@@ -3024,6 +3039,10 @@ en_DE:
|
||||
form:
|
||||
product: "Product"
|
||||
amount: "Amount"
|
||||
line_items:
|
||||
index:
|
||||
results_found: "%{number} Results found."
|
||||
viewing: "Viewing %{start} to %{end}."
|
||||
orders:
|
||||
index:
|
||||
listing_orders: "Listing Orders"
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user