Compare commits

...

365 Commits

Author SHA1 Message Date
Luis Ramos
9fd8613107 Update all locales with the latest Transifex translations 2020-08-21 14:56:26 +01:00
Luis Ramos
bea8c2035f Merge pull request #5909 from openfoodfoundation/transifex
Transifex
2020-08-21 14:54:49 +01:00
Luis Ramos
e616e32bbc Merge pull request #5931 from Matt-Yorkley/customer-totals-fees
Customer totals fee calculations
2020-08-21 14:09:00 +01:00
Luis Ramos
19b5a004dd Merge pull request #5877 from Matt-Yorkley/bugsnagger
BugsnagJS checkout errors
2020-08-21 14:01:48 +01:00
Luis Ramos
4a5a6a2242 Merge pull request #5906 from Matt-Yorkley/checkout_flash_errors
Fix flash error issues in checkout requests
2020-08-21 13:03:30 +01:00
Luis Ramos
d1b60e3778 Merge pull request #5905 from mkllnk/lost-decorators
Load previously lost decorator code and don't delete orders
2020-08-21 12:34:37 +01:00
Maikel
31fe8850b5 Merge pull request #5913 from openfoodfoundation/luisramos0-patch-1
Remove spree upgrade section from the PR template ❤️
2020-08-21 16:35:09 +10:00
Maikel
0309a20cb1 Merge pull request #5904 from Matt-Yorkley/favicon
Fix broken favicon path
2020-08-21 14:05:00 +10:00
Matt-Yorkley
9d772dbcc9 Merge pull request #5935 from luisramos0/fix_build
Fix master build - fix mail interceptor spec
2020-08-20 18:15:37 +02:00
Luis Ramos
0abcbc7b8f Fix specs in mail interceptor spec
This was due to an incompatibility between two recent PRs: 5763 and
5733. PR 5733 did not take into account 5763 (the confirm email method was removed) and so the specs introduced
were broken.
2020-08-20 12:52:54 +01:00
Matt-Yorkley
3badaa07d2 Fix adjustment calculations; only "eligible" adjustments should be regarded as applied to an order.
When an order is submitted and the payment fails, the failed payment's adjustments (payment fees) are set to `eligible: false` to indicate they do not apply. These should not be counted as being included in an order's adjustments.
2020-08-19 22:50:37 +01:00
Matt-Yorkley
977ab26b00 Add failing spec for payment fee calculation in customer totals report 2020-08-19 22:50:35 +01:00
Luis Ramos
d6160b5759 Merge pull request #5758 from luisramos0/order_updater
Bring Order Updater from spree_core
2020-08-19 20:47:27 +01:00
Luis Ramos
40d4ed2c95 Merge pull request #5733 from luisramos0/base_ctrl
Move lib/spree to OFN
2020-08-19 18:35:17 +01:00
Luis Ramos
72f5b1b251 Revert "Remove unreachable order recovery code"
This reverts commit 355c5f5c55.

This code is necessary to preserver cart contents across logins on
different browser sessions.
2020-08-19 17:36:36 +01:00
Luis Ramos
eb2d8e65ed Merge pull request #5910 from Matt-Yorkley/silky-mooth-sidebar-scrolling-for-danni
Add scrolling animate on sidebar hide
2020-08-19 11:47:39 +01:00
Maikel Linke
355c5f5c55 Remove unreachable order recovery code
Every page load creates a cart order if none is present. So when a user
logs in, they always have an order stored in their session. And
therefore, we never got to recover an old order.

We could have fixed the code to restore old orders. But as far as I can
tell, order recovery hasn't been working for years and I couldn't find
any issue requesting this feature.

If we wanted to implement order recovery, it should probably be designed
more carefully and included in the `current_order` method.
2020-08-19 12:06:58 +10:00
Maikel Linke
bb3f958dd2 Remove redundant includes 2020-08-19 10:37:18 +10:00
Luis Ramos
b367d4328e Remove spree upgrade section from the PR template ❤️ 2020-08-17 18:28:23 +01:00
Matt-Yorkley
ed346b3b54 Add scrolling animate on sidebar hide 2020-08-17 13:41:06 +01:00
Matt-Yorkley
290120d015 Fix broken favicon path
Ensures the non-fingerprinted version of the favicon will be used directly from `/public/favicon.ico`. Needed after recent changes to the Rails asset pipeline.
2020-08-17 11:59:22 +01:00
Matt-Yorkley
0fd163602d Rename method for clarity 2020-08-17 11:17:42 +01:00
Transifex-Openfoodnetwork
4c3a3d5d1a Updating translations for config/locales/en_GB.yml 2020-08-17 18:19:09 +10:00
Luis Ramos
9771fd7f13 Merge pull request #5902 from openfoodfoundation/dependabot/bundler/bugsnag-6.16.0
Bump bugsnag from 6.15.0 to 6.16.0
2020-08-16 16:19:36 +01:00
Luis Ramos
6a61bf7656 Merge pull request #5898 from mkllnk/remove-diffy
Remove unused dependency diffy
2020-08-16 16:04:42 +01:00
Luis Ramos
9754d8d754 Merge pull request #5616 from openfoodfoundation/dependabot/bundler/paper_trail-7.1.3
Bump paper_trail from 5.2.3 to 7.1.3
2020-08-15 21:53:33 +01:00
Matt-Yorkley
ce5bcaaa20 Explicitly notify Bugsnag on checkout failure 2020-08-14 18:06:30 +01:00
Matt-Yorkley
de22ad0000 Fix flash error issues in checkout requests 2020-08-14 12:41:56 +01:00
Maikel Linke
23706ec1d6 Load our version of the Spree environment
We didn't actually change any logic in our version of the Spree
environment file but if we do that in the future, we want to be sure
that it takes effect. Our file was ignored and not loaded before.
2020-08-14 15:38:10 +10:00
Maikel Linke
c3e0f45f1a Remove unused Report class from lib
Also removing related unused classes and their specs.
2020-08-14 15:38:10 +10:00
Maikel Linke
0a1947ae34 Remove unused module from lib
I was looking for library files that may be used but are not loaded.
I would then add the missing `require` statements. But I found that this
module isn't used any more.

Usage removed in:
310d1b3726
2020-08-14 15:38:10 +10:00
Maikel Linke
b79c568b08 Load our spree overrides instead of the originals
We changed some of Spree's logic and want to use that. And once we
remove the spree_core gem, we need to load those files before using
them.
2020-08-14 15:38:00 +10:00
Maikel Linke
e8139d3948 Keep old incomplete (cart) orders
We used to delete old cart orders so that they wouldn't re-appear after
a successful checkout of another order. Keeping them ensures that we
don't remove an order that is still used by another device. It also
makes sure that we keep references of failed payments.
2020-08-14 10:02:48 +10:00
Maikel Linke
5761014205 Restore Spree customisations for controllers 2020-08-13 16:59:15 +10:00
Maikel Linke
90bf4f312b Document and spec current controller behaviour
When we imported and merged Spree's controller modules with our
decorators, Rails started using Spree's original code again.

This was first included in v3.2.0 and deployed on 28 July 2020.
2020-08-13 16:59:15 +10:00
Maikel Linke
63a9765fea Update rubocop todo lists 2020-08-13 16:33:47 +10:00
dependabot-preview[bot]
5c6cb4840e Bump bugsnag from 6.15.0 to 6.16.0
Bumps [bugsnag](https://github.com/bugsnag/bugsnag-ruby) from 6.15.0 to 6.16.0.
- [Release notes](https://github.com/bugsnag/bugsnag-ruby/releases)
- [Changelog](https://github.com/bugsnag/bugsnag-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bugsnag/bugsnag-ruby/compare/v6.15.0...v6.16.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-13 01:56:14 +00:00
Maikel Linke
271d1ec103 Update translations from Transifex 2020-08-13 10:52:55 +10:00
Maikel
2271a57ffe Merge pull request #5880 from openfoodfoundation/transifex
Transifex
2020-08-13 10:35:00 +10:00
Transifex-Openfoodnetwork
95e048b37f Updating translations for config/locales/en_CA.yml 2020-08-13 02:50:37 +10:00
Maikel Linke
99ca0adf64 Remove unused dependency diffy
It was used to show differences in the product cache. But we removed the
cache in ab330e882e and the gem hasn't
been used since.
2020-08-12 13:10:51 +10:00
Maikel
a8207128df Merge pull request #5889 from Matt-Yorkley/suppress-selenium-warings
Suppress Selenium warnings in test log output.
2020-08-12 11:29:30 +10:00
Transifex-Openfoodnetwork
47bde1e77c Updating translations for config/locales/tr.yml 2020-08-12 00:50:03 +10:00
Matt-Yorkley
0edeb82c32 Update spec/spec_helper.rb
Co-authored-by: Maikel <maikel@email.org.au>
2020-08-11 14:02:49 +02:00
Transifex-Openfoodnetwork
acf984699e Updating translations for config/locales/en_US.yml 2020-08-11 12:02:26 +10:00
Pau Pérez Fabregat
70e2fb759c Merge pull request #5751 from luisramos0/subs_jobs
Add rescue statements with bugsnag alerts to subs jobs
2020-08-10 12:50:54 +02:00
Matt-Yorkley
74252e9d13 Suppress Selenium warnings in test log output. 2020-08-09 14:02:07 +01:00
Luis Ramos
78fbac8ff2 Merge pull request #5882 from coopdevs/fix-doc-ocd
Fix docs OCD in Gemfile
2020-08-07 16:38:40 +01:00
Pau Perez
4e22787386 Fix docs OCD in Gemfile
@luisramos0 and I can't cope with reading TWO and seeing THREE items listed.
2020-08-07 17:20:14 +02:00
Transifex-Openfoodnetwork
f6c85af4da Updating translations for config/locales/fr.yml 2020-08-08 00:21:32 +10:00
Matt-Yorkley
1123e08a98 Update BugsnagJS to latest version and update initialization syntax 2020-08-07 12:59:33 +01:00
Matt-Yorkley
3a2802f5aa Merge pull request #5871 from coopdevs/fix-paypal-ssl-error
Point better_spree_paypal_express to its latest commit
2020-08-07 11:43:52 +02:00
Matt-Yorkley
766b7449d8 Update all locales with the latest Transifex translations 2020-08-07 10:00:21 +01:00
Matt-Yorkley
2caa559869 Merge pull request #5860 from openfoodfoundation/transifex
Transifex
2020-08-07 10:58:25 +02:00
Luis Ramos
04feccaef3 Merge pull request #5863 from romale/patch-7
Missing translation key 'item', 'qty'
2020-08-07 09:22:34 +01:00
Pau Pérez Fabregat
dfc31b9338 Merge pull request #5864 from openfoodfoundation/dependabot/bundler/ddtrace-0.39.0
Bump ddtrace from 0.38.0 to 0.39.0
2020-08-07 08:22:17 +02:00
Pau Perez
2ccb7c3eb0 Point spree_paypal_express to its latest commit
This brings in the fix for the intermittent PayPal connection failures
due to SSL verification failed. Checkout that gem's commit for details.
2020-08-07 08:18:24 +02:00
Transifex-Openfoodnetwork
f92d05656c Updating translations for config/locales/en_FR.yml 2020-08-06 17:17:36 +10:00
Transifex-Openfoodnetwork
1e2c092b70 Updating translations for config/locales/fr.yml 2020-08-06 17:14:33 +10:00
dependabot-preview[bot]
6e626447d0 Bump ddtrace from 0.38.0 to 0.39.0
Bumps [ddtrace](https://github.com/DataDog/dd-trace-rb) from 0.38.0 to 0.39.0.
- [Release notes](https://github.com/DataDog/dd-trace-rb/releases)
- [Changelog](https://github.com/DataDog/dd-trace-rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/DataDog/dd-trace-rb/compare/v0.38.0...v0.39.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-05 23:48:20 +00:00
Luis Ramos
f14bb280c1 Merge pull request #5680 from cillian/prevent-blank-open-street-map
If no enterprises have been geocoded yet make sure Open Street Map displays correctly
2020-08-05 20:27:40 +01:00
Luis Ramos
f093656c6b Merge pull request #5763 from luisramos0/mailers
Bring Mailers from Spree and make order shipped email translatable
2020-08-05 18:09:12 +01:00
romale
dd86e00913 Update en.yml 2020-08-05 18:17:14 +03:00
Transifex-Openfoodnetwork
b2309f8673 Updating translations for config/locales/en_FR.yml 2020-08-06 00:21:16 +10:00
Transifex-Openfoodnetwork
5404efcbce Updating translations for config/locales/fr.yml 2020-08-06 00:21:09 +10:00
Luis Ramos
d8acf90240 Merge pull request #5770 from openfoodfoundation/revert-5601-enhancement/5454-links-to-shops-in-new-tabs
Revert "Enhancement/5454 make links to shops under Groups > Producers open in new tab"
2020-08-05 11:51:48 +01:00
Luis Ramos
6cc296926c Merge pull request #5847 from rmklaus12/5579-missing-translation-subscriptions
5579 missing translation subscriptions
2020-08-05 11:29:34 +01:00
Pau Pérez Fabregat
6e1dd78e9f Merge pull request #5828 from luisramos0/ent_user
Clean up AuthenticationWorkflow spec helper
2020-08-04 12:07:54 +02:00
Pau Perez
6e39ab779c Make RSpec infer the file type from its location
Apparently, although we tend to add the type of spec file some RSpec
methods are not working without it. We're getting:

```
NoMethodError:
  undefined method `helper' for RSpec::ExampleGroups::SpreeSharedOrderDetailsHtmlHaml:Class
```

```
NameError:
   undefined local variable or method `controller' for #<RSpec::ExampleGroups::SpreeAdminUsersController::AuthorizeAdmin:0x00007fa8b32addf8>
 # ./spec/controllers/spree/admin/users_controller_spec.rb:10:in `block (3 levels) in <top (required)>'
```

It needs more investigation but another day.
2020-08-04 11:24:49 +02:00
Transifex-Openfoodnetwork
8792ec1de3 Updating translations for config/locales/es.yml 2020-08-04 18:14:45 +10:00
Transifex-Openfoodnetwork
b91f1578c9 Updating translations for config/locales/ca.yml 2020-08-04 18:14:27 +10:00
Pau Pérez Fabregat
9b91c490cb Merge pull request #5859 from openfoodfoundation/transifex
Transifex
2020-08-04 10:13:37 +02:00
Transifex-Openfoodnetwork
e8ba44f958 Updating translations for config/locales/en_FR.yml 2020-08-04 17:27:10 +10:00
Transifex-Openfoodnetwork
800ac0cabf Updating translations for config/locales/fr.yml 2020-08-04 17:26:53 +10:00
Pau Perez
9ef59f440b Remove commented out includes 2020-08-04 08:50:14 +02:00
Pau Perez
61c14cb61d Remove unneeded RSpec config block
Spec files individually include the module and we specify the type of
spec in each RSpec's describe so none of this settings are needed. They
are just Spree's legacy I bet.
2020-08-04 08:48:08 +02:00
Pau Pérez Fabregat
467fa7e566 Merge pull request #5856 from openfoodfoundation/transifex
Transifex
2020-08-04 08:37:32 +02:00
Pau Pérez Fabregat
ef48187332 Merge pull request #5745 from openfoodfoundation/dependabot/bundler/rswag-2.3.1
Bump rswag from 2.2.0 to 2.3.1
2020-08-04 08:00:32 +02:00
Luis Ramos
425901fa7a Add some paragraphs and breaklines to the tempalte that used to be text and is now html
This template needs to be revisited, this is just a quick fix
2020-08-03 16:43:11 +01:00
Luis Ramos
6e57e1ad56 Fix conflict between unused Spree::CheckoutHelper in spree_core and the required ::CheckoutHelper in OFN
The OFN checkoutHelper was not being included and instead the Spree::CheckoutHelper, that doesnt have the necessary helpers, was used
2020-08-03 16:25:18 +01:00
Luis Ramos
6b4a518371 Merge pull request #5845 from romale/patch-6
Missing translation key for "height", "width", "depth"
2020-08-03 16:02:20 +01:00
Cillian O'Ruanaidh
e6ab2ae753 Remove unused positiveAngles and negativeAngles arrays from map centre calculator service.
I forgot to remove these when I was refactoring this earlier.
2020-08-03 15:12:40 +01:00
Transifex-Openfoodnetwork
c97fc45109 Updating translations for config/locales/nb.yml 2020-08-03 22:53:31 +10:00
Transifex-Openfoodnetwork
1d44d463e7 Updating translations for config/locales/tr.yml 2020-08-03 22:48:36 +10:00
Luis Ramos
13b72154fa Merge pull request #5852 from openfoodfoundation/dependabot/bundler/activerecord-import-1.0.6
Bump activerecord-import from 1.0.5 to 1.0.6
2020-08-03 11:54:00 +01:00
dependabot-preview[bot]
619e13ccba Bump rswag from 2.2.0 to 2.3.1
Bumps [rswag](https://github.com/rswag/rswag) from 2.2.0 to 2.3.1.
- [Release notes](https://github.com/rswag/rswag/releases)
- [Changelog](https://github.com/rswag/rswag/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rswag/rswag/compare/2.2.0...2.3.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-03 08:32:45 +00:00
Pau Pérez Fabregat
bc66c10a52 Merge pull request #5848 from openfoodfoundation/transifex
Transifex
2020-08-03 09:59:12 +02:00
Pau Pérez Fabregat
06e77372be Merge pull request #5842 from openfoodfoundation/dependabot/bundler/bugsnag-6.15.0
Bump bugsnag from 6.14.0 to 6.15.0
2020-08-03 09:58:52 +02:00
dependabot-preview[bot]
e615674541 Bump bugsnag from 6.14.0 to 6.15.0
Bumps [bugsnag](https://github.com/bugsnag/bugsnag-ruby) from 6.14.0 to 6.15.0.
- [Release notes](https://github.com/bugsnag/bugsnag-ruby/releases)
- [Changelog](https://github.com/bugsnag/bugsnag-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bugsnag/bugsnag-ruby/compare/v6.14.0...v6.15.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-01 14:57:18 +00:00
Luis Ramos
327d6c43d9 Merge pull request #4084 from openfoodfoundation/dependabot/bundler/devise-3.5.10
[Security] Bump devise from 2.2.8 to 3.5.10
2020-08-01 15:55:19 +01:00
Luis Ramos
cc7363d9e7 Merge pull request #5824 from luisramos0/improve_checkout
Reset order state to cart in case the stripe SCA authorization step fails
2020-08-01 15:53:41 +01:00
dependabot-preview[bot]
ff82a1b73f Bump activerecord-import from 1.0.5 to 1.0.6
Bumps [activerecord-import](https://github.com/zdennis/activerecord-import) from 1.0.5 to 1.0.6.
- [Release notes](https://github.com/zdennis/activerecord-import/releases)
- [Changelog](https://github.com/zdennis/activerecord-import/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zdennis/activerecord-import/compare/v1.0.5...v1.0.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-08-01 07:31:53 +00:00
Luis Ramos
b025d5a600 Merge pull request #5822 from luisramos0/improve_ocs_perf
Performance improvement of the outgoing products page when editing OCs
2020-07-31 16:07:16 +01:00
Luis Ramos
2aa6c70dc6 Remove select from relation
This relation is only used above for a call to empty? so we don't need to worry about the select part of the query, specially not introducing an expensive DISTINCT
2020-07-31 09:26:04 +01:00
Luis Ramos
d052a7b796 Verify the user is confirmed before returning a reset password token
Co-authored-by: Maikel <maikel@email.org.au>
2020-07-31 09:14:07 +01:00
Transifex-Openfoodnetwork
9d1e12da68 Updating translations for config/locales/en_FR.yml 2020-07-31 18:11:19 +10:00
Transifex-Openfoodnetwork
aae0a6533a Updating translations for config/locales/fr.yml 2020-07-31 18:10:57 +10:00
Luis Ramos
7c498a573c Make shopfront redirect work when logging out by storing it outside session data 2020-07-31 09:05:42 +01:00
Luis Ramos
86afa6f413 Adapt to devise 3.2 and use after_confirmation callback to send welcome email 2020-07-31 09:05:42 +01:00
Luis Ramos
ca9898839a Confirm! is deprecated and only redirects to confirm now in devise 3.5 2020-07-31 09:05:42 +01:00
Luis Ramos
f31d790714 Add auth spec to cover case where user tries to reset password before confirming their email 2020-07-31 09:05:42 +01:00
Luis Ramos
0f29806198 Adapt code to devise 3.2 where the reset_password_token stored in the db is a encrypted version of the token sent in the email
In this particular case, the user confirmations controller is redirecting to the reset password page but it doesnt know what is the raw reset_password_token

So we regenerate the reset password token so that it can know what's the raw value for the redirect

The method User#regenerate_reset_password_token is a proxy to the protected method in Devise::Recoverable
2020-07-31 09:05:42 +01:00
Luis Ramos
c0f9f8c8bf Remove comment refering to old spree upgrade 2020-07-31 09:05:42 +01:00
Luis Ramos
a2ae78bde9 Replay commit from spree_auth_devise that upgrades to devise 3
fe7941f674
2020-07-31 09:05:42 +01:00
Luis Ramos
26ca374a76 Adpat user mailer to devise v3 2020-07-31 09:05:42 +01:00
Luis Ramos
40e065eada Add gem for Devise::TokenAuthenticatable and configure it 2020-07-31 09:05:42 +01:00
dependabot-preview[bot]
f7ee6ce6c5 [Security] Bump devise from 2.2.8 to 3.5.10
Bumps [devise](https://github.com/plataformatec/devise) from 2.2.8 to 3.5.10. **This update includes a security fix.**
- [Release notes](https://github.com/plataformatec/devise/releases)
- [Changelog](https://github.com/plataformatec/devise/blob/v3.5.10/CHANGELOG.md)
- [Commits](https://github.com/plataformatec/devise/compare/v2.2.8...v3.5.10)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-31 09:05:42 +01:00
Luis Ramos
85e9819c3b Make more translation keys use lazy look ups 2020-07-31 09:00:48 +01:00
Transifex-Openfoodnetwork
1ea06763f8 Updating translations for config/locales/es.yml 2020-07-31 17:00:19 +10:00
Transifex-Openfoodnetwork
5064769717 Updating translations for config/locales/ca.yml 2020-07-31 16:59:55 +10:00
Robin Klaus
581a246b4f Added translation key for subscriptions heading 2020-07-31 16:29:04 +10:00
Maikel Linke
bee7990c60 Update translations 2020-07-31 15:58:04 +10:00
romale
27404872de Missing translation key for "height", "width", "depth"
When edit product in path admin/products/PRODUCT_NAME/varians/NN/edit
2020-07-31 00:20:55 +03:00
Luis Ramos
1e9b11d209 Merge pull request #5807 from romale/patch-5
Add Russian to list of momentJS locales
2020-07-30 19:01:38 +01:00
Luis Ramos
df465cf45b Merge pull request #5698 from rmklaus12/5575-backofficepay-missing-translation
Added translation key to locale/en.yml for backoffice admin payment
2020-07-30 19:01:11 +01:00
Luis Ramos
f524560624 Merge pull request #5800 from romale/patch-4
Missing translation key for "permalink" and "shipping_categories"
2020-07-30 18:00:45 +01:00
Luis Ramos
7af47df570 Merge pull request #5843 from andrewpbrett/master
Update Docker instructions to recommend creating your own fork
2020-07-30 17:57:33 +01:00
dependabot-preview[bot]
18cb0e0980 Bump paper_trail from 5.2.3 to 7.1.3
Bumps [paper_trail](https://github.com/airblade/paper_trail) from 5.2.3 to 7.1.3.
- [Release notes](https://github.com/airblade/paper_trail/releases)
- [Changelog](https://github.com/paper-trail-gem/paper_trail/blob/master/CHANGELOG.md)
- [Commits](https://github.com/airblade/paper_trail/compare/v5.2.3...v7.1.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-30 16:56:15 +00:00
Luis Ramos
354b76205e Merge pull request #5839 from openfoodfoundation/dependabot/bundler/oj-3.10.8
Bump oj from 3.10.7 to 3.10.8
2020-07-30 17:54:12 +01:00
Luis Ramos
fbc7eea1a5 Merge pull request #5811 from jttyeung/master
Fix #5730 content header overlap with long product names
2020-07-30 17:53:09 +01:00
Luis Ramos
0359d103b2 Improve code comments on dodgy and/but critical checkout process method 2020-07-30 17:18:34 +01:00
Luis Ramos
1400b3667b Merge pull request #5788 from romale/patch-2
Missing translation key for shipping_method and new_order
2020-07-30 16:54:07 +01:00
Luis Ramos
e739c5185e Add specs to verify that Spree::Core::Gateway exceptions are handled correctly 2020-07-29 23:56:52 +01:00
Luis Ramos
2136eecd09 Avoid reloading the payment every time, so that in-memory data is not wiped out
When checkout fails and the payment states dont match (inside the if), in-memory data of the failed payment can be lost but updating the payment state is the fundamental part here so that further checkout attempts work. We may improve this update statement so that all the data of the failed payment is persisted
2020-07-29 22:50:30 +01:00
Luis Ramos
9e9e0d0bd8 Remove rescue_from and just add the rescue to the edit action, the update action has a different logic where there is a generic rescue StandardError after the GatewayError rescue 2020-07-29 22:50:25 +01:00
Luis Ramos
da4abf6617 Add a comment to explain the necessity of the first rescue in the update action 2020-07-29 22:50:20 +01:00
Luis Ramos
ad00971ca8 Improve readability and add bugsnag error (now in the checkout_failed method) when checkout_fails while handling stripe redirect 2020-07-29 22:50:18 +01:00
Andy Brett
54cb479fa1 Update Docker instructions to mention the recommendation to create one's own fork 2020-07-29 13:04:34 -07:00
Pau Pérez Fabregat
e9787552c8 Merge pull request #5713 from Matt-Yorkley/taxon-icons
Remove taxon icons
2020-07-29 18:43:06 +02:00
Luis Ramos
bea472623d Merge pull request #5834 from openfoodfoundation/dependabot/bundler/unicorn-5.6.0
Bump unicorn from 5.5.5 to 5.6.0
2020-07-29 14:33:04 +01:00
Pau Perez
84178c637e Add missing momentjs languages to back-office 2020-07-29 13:02:46 +02:00
Pau Perez
9bf58a8258 Add missing Catalan, Arabic & Turkish for momentjs 2020-07-29 12:53:34 +02:00
Pau Perez
c923edd3bb Replace hardcoded URL with path helper 2020-07-29 11:36:49 +02:00
Pau Pérez Fabregat
bcaa308ac8 Merge pull request #5825 from openfoodfoundation/transifex
Transifex
2020-07-29 11:20:56 +02:00
Maikel Linke
fe0c04b650 Complete renaming of AdvanceOrderService to OrderWorkflow 2020-07-29 12:24:18 +10:00
Robin Klaus
4375a34ef8 Updated message to Paypal payments cannot be captured in the Backoffice 2020-07-29 10:18:25 +10:00
Luis Ramos
07005594ff Move payments persistence code to order workflow service 2020-07-28 23:56:43 +01:00
Luis Ramos
ac5882e3e6 Refactor OrderWorkflow 2020-07-28 23:55:36 +01:00
Luis Ramos
9cbcf14485 Move shipping method id setting code to OrderWorkflow service 2020-07-28 23:50:47 +01:00
Luis Ramos
c3f99050fd Move advance_order_state from checkout_controller to OrderWorkflow service 2020-07-28 23:43:07 +01:00
Luis Ramos
26eee4631f Rename AdvanceOrderService to OrderWorkflow 2020-07-28 23:40:49 +01:00
Luis Ramos
734fce5ce7 Add code to persist payments after failed payments. The state machine
rollbacks the transactions, with this we keep record of what went wrong.
2020-07-28 23:29:49 +01:00
Luis Ramos
e80337a458 Transpec checkout_spec 2020-07-28 23:29:49 +01:00
Luis Ramos
51de5269dc Fix specs in checkout_spec 2020-07-28 23:29:49 +01:00
Luis Ramos
e99f0dc6b7 Rubocop autocorrect and easy rubocop issues 2020-07-28 23:29:49 +01:00
Luis Ramos
d8a96c9d34 Bring order checkout workflow and some of its specs from spree_core 2020-07-28 23:29:49 +01:00
dependabot-preview[bot]
555a74c9e6 Bump oj from 3.10.7 to 3.10.8
Bumps [oj](https://github.com/ohler55/oj) from 3.10.7 to 3.10.8.
- [Release notes](https://github.com/ohler55/oj/releases)
- [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/ohler55/oj/compare/v3.10.7...v3.10.8)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-28 21:10:22 +00:00
Pau Perez
be3a10b2b1 Fix some easy rubocop issues 2020-07-28 19:01:14 +02:00
Luis Ramos
275a864e51 Merge pull request #5815 from coopdevs/eager-load-option-values-line-items
Eager load spree_option_values_line_items
2020-07-28 17:21:02 +01:00
Luis Ramos
61453968dd Merge pull request #5833 from luisramos0/pend_payments
Add unit tests for order.charge_shipping_and_payment_fees!
2020-07-28 17:18:57 +01:00
Transifex-Openfoodnetwork
8263e2e373 Updating translations for config/locales/es.yml 2020-07-29 00:39:21 +10:00
Transifex-Openfoodnetwork
aff8933d25 Updating translations for config/locales/ca.yml 2020-07-29 00:36:57 +10:00
Pau Pérez Fabregat
d4570240ae Merge pull request #5826 from openfoodfoundation/luisramos0-patch-1
Update GETTING_STARTED.md
2020-07-28 15:59:38 +02:00
dependabot-preview[bot]
d0a7f8e1af Bump unicorn from 5.5.5 to 5.6.0
Bumps [unicorn](https://yhbt.net/unicorn/) from 5.5.5 to 5.6.0.

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-27 23:44:40 +00:00
Luis Ramos
d673f278ce Add unit test to order.charge_shipping_and_payment_fees! 2020-07-27 21:27:23 +01:00
Luis Ramos
a002ec1894 Simplify login_as_admin by using existing factory admin_user 2020-07-27 16:02:59 +01:00
Luis Ramos
ecc58cedd9 Fix navigation problem in spec 2020-07-27 16:02:59 +01:00
Luis Ramos
27ace50eb7 Fix general settings path in specs 2020-07-27 16:02:57 +01:00
Luis Ramos
4df81f0864 Remove unnecesasary and now broken require statement from spec and fix rubocop todo files 2020-07-27 15:32:35 +01:00
Luis Ramos
95a9ca7775 Remove redundant method, login_as is the name of the test helper in warden 2020-07-27 15:32:35 +01:00
Luis Ramos
d6a5ad70a8 Adapt specs in order mgmt engine to new authentication helper 2020-07-27 15:32:35 +01:00
Luis Ramos
a2ebc614d9 Rename AuthenticationWorkflow to AuthenticationHelper 2020-07-27 15:32:35 +01:00
Luis Ramos
10b07aabd9 Rename quick_login_as to login_as 2020-07-27 15:32:35 +01:00
Luis Ramos
5738ec0542 Rename login_to_admin_and_visit to login_as_admin_and_visit 2020-07-27 15:32:34 +01:00
Luis Ramos
c6bb756531 Rename quick_login_as_admin to login_as_admin and also re-use login_to_admin_and_visit when applicable 2020-07-27 15:31:23 +01:00
Luis Ramos
8b04e45ea5 Create login_to_admin_and_visit to avoid loading the admin dashboard unnecessarily
This commit removes 19 unnecessary page loads of the admin dashboard
2020-07-27 15:31:11 +01:00
Luis Ramos
f1a3814c0d Rename login_as_enterprise_user to a more specific name controller_login_as_enterprise_user 2020-07-27 14:44:25 +01:00
Luis Ramos
8e84754f35 Rename login_as_admin to a more specific name controller_login_as_admin 2020-07-27 14:44:25 +01:00
Luis Ramos
81710a2704 Remove now dead create_enterprise_user, the user factory should be used instead 2020-07-27 14:44:25 +01:00
Luis Ramos
1af4bf6994 Replace usage of create_enterprise_user with :user factory 2020-07-27 14:44:23 +01:00
Luis Ramos
3217b3ba86 Delete dead commented code 2020-07-27 12:28:53 +01:00
Luis Ramos
16b9c8c814 Replace usage of create_enterprise_user with :user factory 2020-07-27 12:28:33 +01:00
Transifex-Openfoodnetwork
79aadf5c86 Updating translations for config/locales/tr.yml 2020-07-27 03:23:28 +10:00
Luis Ramos
ec0d06af54 Reuse update_failed method as the code needed is exactly the same 2020-07-25 19:39:46 +01:00
Luis Ramos
b23b707b5d Notify bugsnag and execute post checkout actions (reset to cart state) whenever there's a payment gateway exceeption raised 2020-07-25 19:39:46 +01:00
Luis Ramos
1bf946d124 Reused code in checkout controller, the reponse for the case when there is a stripe exception anywhere is the same as when the update action fails 2020-07-25 19:39:46 +01:00
Luis Ramos
5266d95910 Move method closer to related/similar methods 2020-07-25 19:39:46 +01:00
Luis Ramos
df22ad46d6 Update GETTING_STARTED.md
Clarify users landing on this page that they should use ofn-install for server deployments.
2020-07-25 14:53:35 +01:00
Transifex-Openfoodnetwork
227892b629 Updating translations for config/locales/en_FR.yml 2020-07-25 23:36:58 +10:00
Transifex-Openfoodnetwork
ffc98c63fa Updating translations for config/locales/fr.yml 2020-07-25 23:36:48 +10:00
Luis Ramos
add7bb489f Update all locales with the latest Transifex translations 2020-07-25 13:13:35 +01:00
Cillian O'Ruanaidh
702669e61c Merge branch 'master' into prevent-blank-open-street-map 2020-07-24 16:00:37 +01:00
Cillian O'Ruanaidh
cc317bc8c9 Move the :initialLatitude and :initialLongitude methods from the OpenStreetMap service to the MapCenterCalculator service. 2020-07-24 16:00:30 +01:00
Luis Ramos
752d9e9bb8 Merge pull request #5806 from openfoodfoundation/bring-in-payment-model
Bring in payment model
2020-07-24 14:52:20 +01:00
Luis Ramos
d93c1684b9 Merge pull request #5780 from coopdevs/handle-credit-validation-errors
Handle credit validation errors
2020-07-24 14:49:52 +01:00
Luis Ramos
603991996f Merge pull request #5799 from luisramos0/calcs_bug
Add migration to fix calculator preferences
2020-07-24 14:22:55 +01:00
Luis Ramos
32d45f6fe5 Merge pull request #5747 from mbudm/issue/5434
Make keyboard UI close on iOS when done searching
2020-07-24 13:25:39 +01:00
Luis Ramos
8f4395a6ea We need to clear Rails cache after updating preferences so that the app picks the new values immediately 2020-07-24 13:17:43 +01:00
Luis Ramos
1b31b727c7 Add migration to fix calculator preferences 2020-07-24 13:17:43 +01:00
Pau Perez
97f551a2dd Replace literal with AR's 4 #not 2020-07-23 20:24:31 +02:00
Pau Perez
357037e429 Recalculate adjustments when invalidating payments
Switching from `#invalidate` to `#update_column` skipped both
validations and callbacks and thus, `#ensure_correct_adjustments` was no
longer called for older payments.
2020-07-23 20:24:31 +02:00
Pau Perez
e6943ce554 Fix simple Rubocop issues 2020-07-23 20:24:31 +02:00
Pau Perez
4d9fbb68d6 Add missing attribute to skip source validation 2020-07-23 20:24:31 +02:00
Pau Perez
813459ee38 Clarify method documentation 2020-07-23 20:24:31 +02:00
Pau Perez
c0f72f89f2 Handle #refund! as we do with #credit! 2020-07-23 20:24:31 +02:00
Pau Perez
0f0a704147 Skip source validation when applying credit
The original payment may not be valid because its credit card may be
expired. Stripe gives this as a valid scenario returning a success and
we should do too.

When creating the credit payment we end up validating all sources in
a chain as follows.

```
Payment being persisted -> source payment -> original credit card.
```

The source payment was valid when created (It would not be persisted
otherwise) but its source card may now be expired, and that's legit.

There was also an issue with the `#invalidate_old_payments` callback. It
was causing the original payment to be validated again and thus the
credit payment failed to be persisted due to the original credit card
being expired. Switching this callback to use `#update_column` skips
validations and so we don't validate the source payment. We only care
about the state there, so it should be fine.
2020-07-23 20:24:31 +02:00
Pau Perez
f2b28a198d Replace before_validation with custom validation
No reason to use a callback when custom validation methods can be
defined.
2020-07-23 20:24:31 +02:00
Pau Perez
f2fd426c4a Fix old Spree specs
Given the importance of this code, it doesn't bring me much confidence.
Apparently, this specs where using a non-existent state by mistake and
this went unnoticed because the payment creation was failing silently in
payment/processing.rb.

This unearthed the fact that our `#ensure_correct_adjustment` needs the
order to be persisted to succeed.
2020-07-23 20:24:31 +02:00
Pau Perez
1c026479f5 Replace spec's syntax to RSpec 3 2020-07-23 20:24:31 +02:00
Pau Perez
73b1b1f172 DRY specs and fix rubocop failures 2020-07-23 20:24:31 +02:00
Pau Perez
59da07de66 Handle all errors when dealing with payment event
This basically catches ActiveRecord::RecordInvalid caused by an invalid
credit record, for instance, but also other situations we haven't
forseen.
2020-07-23 20:24:31 +02:00
Pau Perez
26ed601996 Test the payment controller handles GatewayError
After that, we can TDD a second one that also handles validation errors.
2020-07-23 20:24:31 +02:00
Pau Perez
6ca6938df4 Merge branch 'master' into bring-in-payment-model
* master: (91 commits)
  Bump ddtrace from 0.37.0 to 0.38.0
  Add spec to cover SQL query issue with OCs where the only products from the coordinator inventory are renderer
  Remove unnecessary order statement, the relation will only be used for counting products
  Move select out of scope visible_for because it is breaking exchange_product queries and it's just not needed there. The only other use of this product's scope visible_for is the enterprise serializer so we add the select to it.
  Make OC advanced settings work by permitting the extra parameter
  Remove conflicting and duplicate route
  Bump bugsnag from 6.13.1 to 6.14.0
  Make charges update method update the first pending payment
  Move require_login_then_redirect_to to the only place where it is called
  Make broken spec fail reliably and set it pending
  Updating translations for config/locales/en_GB.yml
  Update all locales with the latest Transifex translations
  Doc defensive coding needed by pin payments
  Make method a little simple by extracting method
  Simplify spec, the 2 minutes wait is not necessary anylonger
  Make unauthorized in ControllerHelpers::Auth the same as in Spree::Admin::BaseController
  Move unauthorized view to HomeController only, all other calls to unauthorized will go through Auth which will redirect to the home controller IF the user is logged in or to login if user is not logged in
  Adapt specs to the move of unauthorized route from the spree routes to the main app routes
  Delete spree_user_signup which is from spree promotions code that we dont use
  Remove try_spree_current_user
  ...
2020-07-23 20:20:43 +02:00
Joanne Yeung
abc132d3db Remove trailing whitespace 2020-07-23 09:37:10 -06:00
Joanne Yeung
b16f486dcc Address missing semi-colon 2020-07-23 09:25:56 -06:00
Luis Ramos
6cc91d457e Merge pull request #5796 from coopdevs/remove-conlicting-spree-route
Remove conflicting and duplicate route
2020-07-23 14:29:12 +01:00
Luis Ramos
438aef1e7a Merge pull request #5798 from luisramos0/payment_fees_master
Make charges update method update the first pending payment
2020-07-23 14:23:03 +01:00
Pau Perez
c8b738cbd5 Eager load spree_option_values_line_items
For the BulkCoop report to speed up. We move from an output like

```
web_1     |   CACHE (0.3ms)  SELECT id FROM "spree_line_items" WHERE "spree_line_items"."order_id" IN (SELECT id FROM "spree_orders" WHERE (("spree_orders"."distributor_id" IN (SELECT enterprises.id FROM "enterprises") OR "spree_orders"."order_cycle_id" IN (SELECT id FROM "order_cycles"))))
web_1     |   CACHE (0.0ms)  SELECT "spree_option_values".* FROM "spree_option_values" INNER JOIN "spree_option_types" ON "spree_option_types"."id" = "spree_option_values"."option_type_id" INNER JOIN "spree_option_values_line_items" ON "spree_option_values"."id" = "spree_option_values_line_items"."option_value_id" WHERE "spree_option_values_line_items"."line_item_id" = $1 ORDER BY spree_option_types.position asc  [["line_item_id", 4]]
web_1     |   CACHE (0.0ms)  SELECT "spree_option_values".* FROM "spree_option_values" INNER JOIN "spree_option_types" ON "spree_option_types"."id" = "spree_option_values"."option_type_id" INNER JOIN "spree_option_values_line_items" ON "spree_option_values"."id" = "spree_option_values_line_items"."option_value_id" WHERE "spree_option_values_line_items"."line_item_id" = $1 ORDER BY spree_option_types.position asc  [["line_item_id", 6]]
web_1     |   CACHE (0.0ms)  SELECT "spree_option_values".* FROM "spree_option_values" INNER JOIN "spree_option_types" ON "spree_option_types"."id" = "spree_option_values"."option_type_id" INNER JOIN "spree_option_values_line_items" ON "spree_option_values"."id" = "spree_option_values_line_items"."option_value_id" WHERE "spree_option_values_line_items"."line_item_id" = $1 ORDER BY spree_option_types.position asc  [["line_item_id", 8]]
web_1     |   CACHE (0.0ms)  SELECT "spree_option_values".* FROM "spree_option_values" INNER JOIN "spree_option_types" ON "spree_option_types"."id" = "spree_option_values"."option_type_id" INNER JOIN "spree_option_values_line_items" ON "spree_option_values"."id" = "spree_option_values_line_items"."option_value_id" WHERE "spree_option_values_line_items"."line_item_id" = $1 ORDER BY spree_option_types.position asc  [["line_item_id", 5]]
web_1     |   CACHE (0.0ms)  SELECT "spree_option_values".* FROM "spree_option_values" INNER JOIN "spree_option_types" ON "spree_option_types"."id" = "spree_option_values"."option_type_id" INNER JOIN "spree_option_values_line_items" ON "spree_option_values"."id" = "spree_option_values_line_items"."option_value_id" WHERE "spree_option_values_line_items"."line_item_id" = $1 ORDER BY spree_option_types.position asc  [["line_item_id", 7]]
web_1     |   CACHE (0.0ms)  SELECT "spree_option_values".* FROM "spree_option_values" INNER JOIN "spree_option_types" ON "spree_option_types"."id" = "spree_option_values"."option_type_id" INNER JOIN "spree_option_values_line_items" ON "spree_option_values"."id" = "spree_option_values_line_items"."option_value_id" WHERE "spree_option_values_line_items"."line_item_id" = $1 ORDER BY spree_option_types.position asc  [["line_item_id", 4]]
web_1     |   CACHE (0.0ms)  SELECT "spree_option_values".* FROM "spree_option_values" INNER JOIN "spree_option_types" ON "spree_option_types"."id" = "spree_option_values"."option_type_id" INNER JOIN "spree_option_values_line_items" ON "spree_option_values"."id" = "spree_option_values_line_items"."option_value_id" WHERE "spree_option_values_line_items"."line_item_id" = $1 ORDER BY spree_option_types.position asc  [["line_item_id", 5]]
web_1     |   Rendered engines/order_management/app/views/order_management/reports/_report.html.haml (158.5ms)
web_1     |   Rendered engines/order_management/app/views/order_management/reports/bulk_coop/create.html.haml within spree/layouts/admin (187.3ms)
```

to

```
web_1     |   CACHE (0.0ms)  SELECT id FROM "spree_line_items" WHERE "spree_line_items"."order_id" IN (SELECT id FROM "spree_orders" WHERE (("spree_orders"."distributor_id" IN (SELECT enterprises.id FROM "enterprises") OR "spree_orders"."order_cycle_id" IN (SELECT id FROM "order_cycles"))))
web_1     |   CACHE (0.0ms)  SELECT "spree_option_types".* FROM "spree_option_types" WHERE "spree_option_types"."id" = $1 ORDER BY spree_option_types.position LIMIT 1  [["id", 1]]
web_1     |   Rendered engines/order_management/app/views/order_management/reports/_report.html.haml (101.1ms)
web_1     |   Rendered engines/order_management/app/views/order_management/reports/bulk_coop/create.html.haml within spree/layouts/admin (107.9ms)
```
2020-07-23 12:34:39 +02:00
Joanne Yeung
6419036a26 Fix content header overlap with long product names 2020-07-22 15:53:44 -06:00
Luis Ramos
3dc9548fb3 Merge pull request #5775 from luisramos0/oc_inv_bug
Make OC advanced settings work by permitting the extra parameter and make the OC edit page work with that option activated
2020-07-22 22:23:28 +01:00
romale
daa3f00302 Update all.js.coffee 2020-07-22 20:30:21 +03:00
romale
77c920daab Update all.js 2020-07-22 20:29:15 +03:00
Pau Pérez Fabregat
d3296dd5ee Merge pull request #5801 from openfoodfoundation/dependabot/bundler/ddtrace-0.38.0
Bump ddtrace from 0.37.0 to 0.38.0
2020-07-22 17:42:15 +02:00
dependabot-preview[bot]
48efb42b1a Bump ddtrace from 0.37.0 to 0.38.0
Bumps [ddtrace](https://github.com/DataDog/dd-trace-rb) from 0.37.0 to 0.38.0.
- [Release notes](https://github.com/DataDog/dd-trace-rb/releases)
- [Changelog](https://github.com/DataDog/dd-trace-rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/DataDog/dd-trace-rb/compare/v0.37.0...v0.38.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-21 21:27:14 +00:00
Luis Ramos
e445fc33a1 Add spec to cover SQL query issue with OCs where the only products from the coordinator inventory are renderer 2020-07-21 20:48:16 +01:00
Luis Ramos
aadbc9ed5d Remove unnecessary order statement, the relation will only be used for counting products 2020-07-21 19:44:43 +01:00
Luis Ramos
9b5875a7d1 Move select out of scope visible_for because it is breaking exchange_product queries and it's just not needed there. The only other use of this product's scope visible_for is the enterprise serializer so we add the select to it. 2020-07-21 19:44:43 +01:00
Luis Ramos
7ba8c5ace1 Make OC advanced settings work by permitting the extra parameter 2020-07-21 19:44:41 +01:00
Luis Ramos
8d7b383b72 Merge pull request #5794 from openfoodfoundation/dependabot/bundler/bugsnag-6.14.0
Bump bugsnag from 6.13.1 to 6.14.0
2020-07-21 17:58:30 +01:00
romale
4d6920bd92 Missing translation key for "permalink" and "shipping_categories"
When edit product in path admin/products/PRODUCT_NAME/edit
2020-07-21 18:49:24 +03:00
Pau Pérez Fabregat
426c536750 Merge pull request #5677 from luisramos0/remove_spree_root_path
Bring ControllerHelpers from Spree and remove spree root path
2020-07-21 16:15:21 +02:00
Pau Perez
9be199a6cc Remove conflicting and duplicate route
This Spree route conflicts with the one we define:

```
get "/login", to: redirect("/#/login")
```

for whatever reason there are 7 users that managed to hit the Spree one
instead of ours when confirming their signup email. It's not clear to me
though when this `/login?validation=confirmed` is really hit. The
confirmation email link passes a token in the query params and this is
not the case.

The idea is that `GET /login` makes the login modal to show up instead
of Devise's default behaviour (through inheritance) of showing a login
form page. OFN was never prepared to handle this as this bug proofs.
2020-07-21 13:27:06 +02:00
dependabot-preview[bot]
bb178c71b2 Bump bugsnag from 6.13.1 to 6.14.0
Bumps [bugsnag](https://github.com/bugsnag/bugsnag-ruby) from 6.13.1 to 6.14.0.
- [Release notes](https://github.com/bugsnag/bugsnag-ruby/releases)
- [Changelog](https://github.com/bugsnag/bugsnag-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bugsnag/bugsnag-ruby/compare/v6.13.1...v6.14.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-07-20 23:35:34 +00:00
Robin Klaus
d43a3ac65e Added translation key to locale/en.yml for backoffice admin payment and added lazy loading 2020-07-20 13:07:41 +10:00
romale
19c7d11df5 Missing translation key for new_order
admin/orders/new
2020-07-19 22:06:07 +03:00
romale
eb2e894802 Missing translation key for shipping_method
admin/orders
2020-07-19 21:55:37 +03:00
Luis Ramos
62a3b6b720 Merge pull request #5406 from kristinalim/fix/5300-optimistic_locking_in_stock_items
5300 Avoid race conditions in Spree::StockItem
2020-07-17 22:24:59 +01:00
Luis Ramos
152e432f78 Merge pull request #5749 from mbudm/issue/1253
Ensure the hero image doesn't pixelate on hamburger menu open
2020-07-17 22:15:46 +01:00
Pau Pérez Fabregat
89906f581d Merge pull request #5778 from openfoodfoundation/transifex
Transifex
2020-07-17 18:37:22 +02:00
Luis Ramos
001d40d691 Move require_login_then_redirect_to to the only place where it is called
This fixes a class loading issue where orders controllers was getting a undefined method require_login_then_redirect_to
2020-07-17 14:35:42 +01:00
Transifex-Openfoodnetwork
f31a1ff59c Updating translations for config/locales/en_GB.yml 2020-07-17 04:10:57 +10:00
Pau Perez
dd5e679f69 Address code review comments
Mostly styling issues.
2020-07-16 15:30:28 +02:00
Luis Ramos
efacca6292 Revert "Enhancement/5454 make links to shops under Groups > Producers open in new tab" 2020-07-15 15:33:03 +01:00
Luis Ramos
2605c4249b Simplify spec, the 2 minutes wait is not necessary anylonger 2020-07-15 14:54:53 +01:00
Luis Ramos
3599cb2047 Make unauthorized in ControllerHelpers::Auth the same as in Spree::Admin::BaseController
It adapts the method in ControllerHelpers::Auth to also use the after_login mechanism.

Ideally we would remove one of the two after_login mechanisms after_login and spree_user_return_to but they might still be in use.
2020-07-15 14:54:53 +01:00
Luis Ramos
8fac1bc9ca Move unauthorized view to HomeController only, all other calls to unauthorized will go through Auth which will redirect to the home controller IF the user is logged in or to login if user is not logged in 2020-07-15 14:54:52 +01:00
Luis Ramos
7f1797de58 Adapt specs to the move of unauthorized route from the spree routes to the main app routes 2020-07-15 14:54:52 +01:00
Luis Ramos
bf3150ddc8 Delete spree_user_signup which is from spree promotions code that we dont use 2020-07-15 14:53:35 +01:00
Luis Ramos
1666ffb191 Remove try_spree_current_user
This can be done because the method is defined in OFN's ApplicationController, so spree_current_user is available in all controllers
2020-07-15 14:53:35 +01:00
Luis Ramos
144811268e Adapt require statements to new undecorated classes 2020-07-15 14:53:35 +01:00
Luis Ramos
d2e52f3136 Update rubocop manual todo 2020-07-15 14:53:35 +01:00
Luis Ramos
046c5f6585 Fix easy rubocop issues 2020-07-15 14:53:08 +01:00
Luis Ramos
97f00153ad Bring controller_helpers/ssl.rb from spree 2020-07-15 14:53:08 +01:00
Luis Ramos
643a82c73c Fix easy rubocop issues, some early returns make the indentation changes 2020-07-15 14:53:08 +01:00
Luis Ramos
a3ea4b757d Merge decorator into the class brought from spree 2020-07-15 14:53:08 +01:00
Luis Ramos
1167a1a9bb Bring ControllerHelpers respond_with from spree 2020-07-15 14:53:08 +01:00
Luis Ramos
20f610fbee Merge controller_helpers/order with decorator 2020-07-15 14:53:08 +01:00
Luis Ramos
d5744572f7 Fix easy rubocop issues 2020-07-15 14:53:08 +01:00
Luis Ramos
23ff9d6fbb Bring controller_helpers/order to OFN 2020-07-15 14:53:08 +01:00
Luis Ramos
10849504c3 Fix easy rubocop issues 2020-07-15 14:53:08 +01:00
Luis Ramos
2452202e92 Move lib/spree/core/controller_helpers/common.rb from spree 2020-07-15 14:53:08 +01:00
Luis Ramos
96839a03aa Move lib/spree/core/controller_helpers.rb from spree 2020-07-15 14:53:08 +01:00
Luis Ramos
4ee30d7cac Remove spree.root route and respective controller. Also move
unauthorized route to main app.

This route is no longer used in OFN
2020-07-15 14:53:08 +01:00
Luis Ramos
7e75581da6 Merge class brought from spree with decorator 2020-07-15 14:53:08 +01:00
Luis Ramos
c8dd841c48 Fix some rubocop issues 2020-07-15 14:53:08 +01:00
Luis Ramos
2ea026ea31 Bring controller helper auth from spree 2020-07-15 14:53:08 +01:00
Pau Perez
70afcee3fc Fix Spree's spec clashing with a customization
`#save_requested_by_customer` is an accessor we added and thus, the
Spree's spec didn't consider.
2020-07-15 14:18:36 +02:00
Pau Perez
3a64cc426a Reuse #calculate_refund_amount method 2020-07-15 14:01:58 +02:00
Pau Perez
a8af3a27b1 Fix all but Metrics Rubocop cops in processing.rb 2020-07-15 14:01:58 +02:00
Pau Perez
42658b5255 Refactor #process! nested ifs to guard clauses
Following Rubocop's indications.
2020-07-15 14:01:58 +02:00
Pau Perez
66dbd85eb4 Run rubocop autocorrect on payment/processing.rb 2020-07-15 14:01:58 +02:00
Pau Perez
3435d5ac97 Fix Rubocop non-metrics issues in payment model 2020-07-15 14:01:30 +02:00
Steve Roberts
dbc7632c4e Add inline comment to explain two height properties 2020-07-15 09:52:04 +10:00
Luis Ramos
646f48f0af Add translation keys for test and shipment emails and make them lazy lookups 2020-07-14 14:35:36 +01:00
Luis Ramos
f66538d2cb Convert test and shipment email templates to haml 2020-07-14 14:26:05 +01:00
Luis Ramos
55f160c309 Bring test and shipment email templates from spree_core 2020-07-14 14:23:09 +01:00
Luis Ramos
5835a0ee3a Transpec mailer specs 2020-07-14 14:20:30 +01:00
Luis Ramos
e96d9c1f45 Fix mailer specs brought from spree_core 2020-07-14 14:19:19 +01:00
Luis Ramos
5162964936 Fix easy rubocop issues 2020-07-14 13:46:01 +01:00
Luis Ramos
d12495f3db Merge decorators with original classes brought from spree and merge order_mailer specs 2020-07-14 13:38:11 +01:00
Luis Ramos
c6cd695b3c Bring remaing mailers from spree_core 2020-07-14 13:28:11 +01:00
Steve Roberts
c4d7899a99 Use vh units for new browsers and align tagline bg to top. 2020-07-14 19:26:12 +10:00
Steve Roberts
60870a1215 Fix linting errors 2020-07-14 12:58:48 +10:00
Steve Roberts
63a080266e Merge branch 'master' of https://github.com/openfoodfoundation/openfoodnetwork into issue/1253 2020-07-14 12:45:14 +10:00
Luis Ramos
ebf9be41bb Transpec specs 2020-07-11 17:02:03 +01:00
Luis Ramos
95ffff5087 Fix specs brought from spree 2020-07-11 16:59:35 +01:00
Luis Ramos
03bb1f053a Fix easy rubocop issues 2020-07-11 16:43:42 +01:00
Luis Ramos
2e3702550d Bring a number of files from spree_core needed in OFN 2020-07-11 16:09:13 +01:00
Luis Ramos
56b83b6bb5 Fix easy rubocop issues 2020-07-11 15:56:08 +01:00
Luis Ramos
e367cbd1e6 Fix one rubocop issues and add the remaining to the manual todo 2020-07-11 15:53:06 +01:00
Luis Ramos
bdf9c1e405 Simplify update_shipment_state based on the fact there's only one shipment per order in OFN 2020-07-11 15:53:06 +01:00
Luis Ramos
2070cfd5bb Fix easy rubocop issues 2020-07-11 15:44:23 +01:00
Luis Ramos
8001e63f77 Unnest OrderManagement::Order declaration in two module declaration 2020-07-11 15:44:23 +01:00
Luis Ramos
aed384183b Move Spree::OrderUpdater to OrderManagement engine 2020-07-11 15:44:23 +01:00
Luis Ramos
e453b130e4 Bring core/lib/spree/core/ext/active_record.rb to OFN and add it to Spree::Order, the only place where it is used 2020-07-11 15:44:23 +01:00
Luis Ramos
7e355a3248 Remove hash rockets 2020-07-11 15:44:23 +01:00
Luis Ramos
a8a81f8023 Merge and fix OrderUpdater spec with Spree::OrderUpdater spec 2020-07-11 15:44:23 +01:00
Luis Ramos
d4c48e2b94 Merge OrderUpdate Delegator into Spree::OrderUpdater 2020-07-11 15:44:23 +01:00
Luis Ramos
872cfcfc58 Remove unused promotions code 2020-07-11 15:44:23 +01:00
Luis Ramos
5b3fbe0aed Merge decorator OrderUpdater 2020-07-11 15:44:23 +01:00
Luis Ramos
ebeeeb7ed3 Fix easy rubocop issues 2020-07-11 15:44:23 +01:00
Luis Ramos
a929d82580 Transpec order_updater_spec 2020-07-11 15:44:23 +01:00
Luis Ramos
1f39731068 Modernize and fix spec brought from spree 2020-07-11 15:44:23 +01:00
Luis Ramos
d2f0d96174 Bring Spree::OrderUpdater spec 2020-07-11 15:44:23 +01:00
Luis Ramos
7218bb0c7d Bring Spree::OrderUpdater from spree 2020-07-11 15:44:23 +01:00
Luis Ramos
58da11fde7 Bring Environment Calculators and Environment Extension from spree_core 2020-07-11 15:43:20 +01:00
Luis Ramos
2c65cea911 Fix easy rubocop issues 2020-07-11 15:41:26 +01:00
Luis Ramos
95698fac37 Bring responder from spree_core 2020-07-11 15:41:26 +01:00
Luis Ramos
7b30008e8b Run transpec 2020-07-11 15:41:26 +01:00
Luis Ramos
50e6ce92b3 Fix easy rubocop issues 2020-07-11 15:41:26 +01:00
Luis Ramos
a78d615936 Bring money_spec from spree_core 2020-07-11 15:41:26 +01:00
Luis Ramos
cd8355ea66 Bring money.rb from spree 2020-07-11 15:41:26 +01:00
Luis Ramos
724a88344e Run transpec 2020-07-11 15:41:26 +01:00
Luis Ramos
9a09f420c1 Modernize spec 2020-07-11 15:41:26 +01:00
Luis Ramos
12a5a266fd Fix easy rubocop issues 2020-07-11 15:41:26 +01:00
Luis Ramos
efeda61e40 Bring i18n.rb from spree 2020-07-11 15:41:26 +01:00
Luis Ramos
38c5a9e105 Remove coupon applicator, it's not used in ofn 2020-07-11 15:41:26 +01:00
Luis Ramos
89e5221dc5 Fix easy rubocop issues 2020-07-11 15:41:26 +01:00
Luis Ramos
c75341838e Bring core.rb from spree_core 2020-07-11 15:41:26 +01:00
Luis Ramos
84d7538b1b Bring i18n code from spree 2020-07-11 15:41:26 +01:00
Luis Ramos
388d575cc8 Remove strong parameters and search helpers, they are not used in OFN 2020-07-11 15:41:26 +01:00
Luis Ramos
fdd21d7d7d Fix easy rubocop issues 2020-07-11 15:41:26 +01:00
Luis Ramos
ab67a4f80c Bring base controller from spree 2020-07-11 15:41:26 +01:00
Pau Perez
cf64d3a290 Merge skipped callback from decorator into model
If we don't want that callback we can just as well remove it now that we
own that code.
2020-07-10 15:07:12 +02:00
Pau Perez
55d52b875f Run rubocop autocorrect on payment model 2020-07-10 15:04:29 +02:00
Luis Ramos
5afb862ce1 Extract setup and authorize to a new method called prepare_for_payment to fix rubocop ABCsize issue
It looks like this rubocop rule weights a raise over a return...
2020-07-10 13:14:07 +01:00
Pau Perez
6389fdb16e Simplify code related to error handling 2020-07-10 13:14:07 +01:00
Luis Ramos
01ab974a3b Add rescue statment to failed payment email so that the processing of other orders continues if there is a problem while sending the email 2020-07-10 13:14:07 +01:00
Luis Ramos
7a9f9a5624 Log bugsnag and still send failed payment email when any exception is caught during the confirmation process 2020-07-10 13:14:05 +01:00
Pau Perez
683794636b Rename spec file 2020-07-10 11:57:36 +02:00
Pau Perez
2f4648342f Merge decorator specs with Spree's ones
They are now isolated from each other.
2020-07-10 11:50:20 +02:00
Pau Perez
562f397b22 Isolate Spree's specs into their own context
This way we don't mix contexts while merging in our own decorator tests.
2020-07-10 11:46:59 +02:00
Pau Perez
8fbbb0bb64 Bring back our card factory modification
Merging Spree's an our factory didn't really work.
2020-07-10 11:42:56 +02:00
Pau Perez
d8b748a851 Merge alias_method method and its original version 2020-07-10 10:41:44 +02:00
Pau Perez
d49068ce66 Move method delegation from decorator to model 2020-07-10 10:41:44 +02:00
Pau Perez
cf6138da66 Replace model method with its decorated version 2020-07-10 10:41:44 +02:00
Pau Perez
3fb6193098 Move adjustments logic from decorator into model 2020-07-10 10:41:44 +02:00
Pau Perez
861726200c Move localize_number from decorator to model 2020-07-10 10:41:44 +02:00
Pau Perez
48910aeb77 Move #refund! to the processing.rb 2020-07-10 10:41:44 +02:00
Pau Perez
6d9a518616 Move method from decorator to model 2020-07-10 10:41:44 +02:00
Pau Perez
322c4d0f3f Move decorator's callbacks to model 2020-07-10 10:41:44 +02:00
Pau Perez
eafaa97b0e Temporarily skip spec
I'll move on to other easier issues and get back to it when we're in
a better position.
2020-07-10 10:41:44 +02:00
Pau Perez
31d0d4bcae Fix error "no parent is saved"
The exact error is

```
ActiveRecord::RecordNotSaved:
       You cannot call create unless the parent is saved
```

raised from app/models/spree/payment_decorator.rb:29:in `ensure_correct_adjustment'
2020-07-10 10:41:44 +02:00
Pau Perez
9935df9f2d Move Pin payment method from decorator into model 2020-07-10 10:41:44 +02:00
Pau Perez
0ad8dcc2c5 Fix payment log entries specs
The tight coupling between doesn't give other option but to check the
private method is called. The specs successfully stub
`log_entries#create` but for some reason the model instance that gets
evaluated it's not the stubbed one.
2020-07-10 10:41:44 +02:00
Pau Perez
a01f601363 Fix yet another spec 2020-07-10 10:41:44 +02:00
Pau Perez
34de219233 Bring in missing translation 2020-07-10 10:41:44 +02:00
Pau Perez
e1ea5dbcb3 Fix all but the 7 last payment specs 2020-07-10 10:41:44 +02:00
Pau Perez
abacd06f6b Fix credit card instance in specs 2020-07-10 10:41:44 +02:00
Pau Perez
06aa56164f Bring in Payment model from Spree 2020-07-10 10:41:44 +02:00
Luis Ramos
5648b2e281 Add rescue statements to subs jobs so that when an order placement or confirmation fails, there's a bugsnag alert for it and the job continues processing the rest of the orders 2020-07-08 18:41:14 +01:00
Steve Roberts
2f562809c0 Ensure the hero image doesn't attempt to use the full height of all page content
Not sure exactly why this happens, but when the mobile nav is opened the hero image at #tagline:before uses the height of the full window - often around 4000px. Adding max-height of 100% to the nearest safe parent prevents this behaviour.
2020-07-08 21:31:52 +10:00
Steve Roberts
eda9293619 Change to new directive that prevents enter default and blurs the input field 2020-07-08 19:19:46 +10:00
Matt-Yorkley
26c511d47e Remove taxon icons
These icons are inconsistently used across instances and have already been removed in a few places in the app in the mobile UX redesign.
2020-07-02 11:25:17 +02:00
Cillian O'Ruanaidh
1199a356c4 Extract out a JS service for calculating where to centre the map when given a set of coordinates.
Also removing the hardcoded default latitude/longitude from open_street_map directive because it's probably not very likely that it will be needed.
2020-06-26 22:26:39 +01:00
Cillian O'Ruanaidh
c40697cf61 If no enterprises have been geocoded yet make sure Open Street Map still displays correctly.
Before it would display a gray/blank div instead of map because the map latitude, longitude couldn't be calculated without geocoded enterprises. This adds a setting so the default coordinates can be set even if no geocoded enterprises present.
2020-06-26 15:45:58 +01:00
Luis Ramos
ba50491c6d Restructure the spec a little 2020-06-24 16:16:58 +01:00
Luis Ramos
34207fc20f Bring changes to stock_item from spree 2.1, the previous version was from spree 2.0.4 2020-06-24 16:16:58 +01:00
Luis Ramos
e12e50aa84 Move rubocop exception to rubocop todo 2020-06-24 16:16:58 +01:00
Kristina Lim
20fd3c2642 Reset negative count on hand in existing non backorderable stock items 2020-06-24 16:16:58 +01:00
Kristina Lim
4694f1b21a Require count on hand in non backorderable StockItem to be positive or zero
Fix setting of count on hand in line item specs
2020-06-24 16:16:45 +01:00
Kristina Lim
e53913756c Add lock_version to Spree::StockItem 2020-06-24 16:15:37 +01:00
Kristina Lim
774b3720d5 Update stock item count on hand in Spree core specs 2020-06-24 16:15:09 +01:00
Kristina Lim
13ecf0ec73 Update specs for StockItem with transpec 2020-06-24 16:15:09 +01:00
Kristina Lim
fb20f220c0 Use break instead of return in StockItem#process_backorders
We are not using the return value of this method anywhere.
2020-06-24 16:15:09 +01:00
Kristina Lim
0a1cb71ee4 Ignore Rails/UniqueValidationWithoutIndex for unique index of StockItem#stock_location 2020-06-24 16:15:09 +01:00
Kristina Lim
bc530b92b5 Address violation of Rubocop Rails/Validation: 2020-06-24 16:15:09 +01:00
Kristina Lim
2acf61fd0f Address violation of Rubocop Rails/Delegate 2020-06-24 16:15:09 +01:00
Kristina Lim
1e8543dfe7 Address violation of Rubocop Rails/ReadWriteAttribute 2020-06-24 16:15:09 +01:00
Kristina Lim
22c0693beb Address violation of Rubocop Style/NumericPredicate 2020-06-24 16:15:09 +01:00
Kristina Lim
d1725014c4 Auto-correct violationso of Rubocop Layout/* 2020-06-24 16:15:09 +01:00
Kristina Lim
0fd66f9a55 Auto-correct violationso of Rubocop Style/* 2020-06-24 16:15:09 +01:00
Kristina Lim
b783118700 Auto-correct violationso of Rubocop Style/RedundantSelf 2020-06-24 16:15:09 +01:00
Kristina Lim
84d973d383 Specify RSpec.describe in StockItem spec file 2020-06-24 16:15:09 +01:00
Kristina Lim
0e711832fd Bring Spree::StockItem code from spree_core into the app 2020-06-24 16:15:09 +01:00
338 changed files with 7338 additions and 2310 deletions

View File

@@ -23,10 +23,6 @@ The categories are based on https://keepachangelog.com/en/1.0.0/. -->
Changelog Category: Added | Changed | Deprecated | Removed | Fixed | Security
#### How is this related to the Spree upgrade?
<!-- Any known conflicts with the Spree Upgrade?
Explain them or remove this section. -->
#### Discourse thread

View File

@@ -108,7 +108,6 @@ Layout/LineLength:
- lib/open_food_network/scope_variants_for_search.rb
- lib/open_food_network/variant_and_line_item_naming.rb
- lib/open_food_network/xero_invoices_report.rb
- lib/spree/core/controller_helpers/respond_with_decorator.rb
- lib/spree/localized_number.rb
- lib/spree/product_filters.rb
- lib/tasks/data.rake
@@ -322,6 +321,15 @@ Layout/LineLength:
- spec/support/request/shop_workflow.rb
- spec/support/request/web_helper.rb
- spec/support/seeds.rb
- engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb
- spec/controllers/base_controller2_spec.rb
- spec/features/consumer/caching/darkswarm_caching_spec.rb
- spec/models/calculator/flexi_rate_spec.rb
- spec/models/calculator/price_sack_spec.rb
- spec/models/spree/stock_item_spec.rb
- spec/requests/api/orders_spec.rb
- spec/swagger_helper.rb
- spec/views/spree/admin/payment_methods/index.html.haml_spec.rb
Metrics/AbcSize:
Max: 15
@@ -400,6 +408,7 @@ Metrics/AbcSize:
- app/services/create_order_cycle.rb
- app/services/order_cycle_form.rb
- app/services/order_syncer.rb
- engines/order_management/app/services/order_management/order/updater.rb
- engines/order_management/app/services/order_management/stock/estimator.rb
- engines/order_management/app/services/order_management/stock/package.rb
- engines/order_management/app/services/order_management/stock/packer.rb
@@ -427,7 +436,9 @@ Metrics/AbcSize:
- lib/open_food_network/variant_and_line_item_naming.rb
- lib/open_food_network/xero_invoices_report.rb
- lib/spree/api/controller_setup.rb
- lib/spree/core/controller_helpers/respond_with_decorator.rb
- lib/spree/core/controller_helpers/order.rb
- lib/spree/core/controller_helpers/respond_with.rb
- lib/spree/core/controller_helpers/ssl.rb
- lib/spree/localized_number.rb
- lib/stripe/account_connector.rb
- lib/tasks/enterprises.rake
@@ -443,6 +454,11 @@ Metrics/AbcSize:
- spec/models/product_importer_spec.rb
- spec/services/order_checkout_restart_spec.rb
- spec/support/performance_helper.rb
- app/controllers/application_controller.rb
- app/models/spree/order/checkout.rb
- app/models/spree/payment/processing.rb
- app/models/spree/payment.rb
- engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb
Metrics/BlockLength:
Max: 25
@@ -461,6 +477,8 @@ Metrics/BlockLength:
]
Exclude:
- app/models/spree/shipment.rb
- lib/spree/core/controller_helpers/common.rb
- lib/spree/core/controller_helpers/ssl.rb
- lib/tasks/data.rake
- spec/controllers/spree/admin/invoices_controller_spec.rb
- spec/factories/enterprise_factory.rb
@@ -479,6 +497,10 @@ Metrics/BlockLength:
- spec/support/delayed_job_helper.rb
- spec/support/matchers/select2_matchers.rb
- spec/support/matchers/table_matchers.rb
- app/models/spree/order/checkout.rb
- app/models/spree/payment/processing.rb
- spec/requests/api/orders_spec.rb
- spec/swagger_helper.rb
Metrics/CyclomaticComplexity:
Max: 6
@@ -505,10 +527,14 @@ Metrics/CyclomaticComplexity:
- lib/discourse/single_sign_on.rb
- lib/open_food_network/bulk_coop_report.rb
- lib/open_food_network/enterprise_issue_validator.rb
- lib/spree/core/controller_helpers/order_decorator.rb
- lib/spree/core/controller_helpers/respond_with_decorator.rb
- lib/spree/core/controller_helpers/order.rb
- lib/spree/core/controller_helpers/respond_with.rb
- lib/spree/core/controller_helpers/ssl.rb
- lib/spree/localized_number.rb
- spec/models/product_importer_spec.rb
- app/models/spree/order/checkout.rb
- app/models/spree/payment.rb
- engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb
Metrics/PerceivedComplexity:
Max: 7
@@ -530,10 +556,13 @@ Metrics/PerceivedComplexity:
- lib/discourse/single_sign_on.rb
- lib/open_food_network/bulk_coop_report.rb
- lib/open_food_network/enterprise_issue_validator.rb
- lib/spree/core/controller_helpers/order_decorator.rb
- lib/spree/core/controller_helpers/respond_with_decorator.rb
- lib/spree/core/controller_helpers/order.rb
- lib/spree/core/controller_helpers/respond_with.rb
- lib/spree/core/controller_helpers/ssl.rb
- lib/spree/localized_number.rb
- spec/models/product_importer_spec.rb
- app/models/spree/order/checkout.rb
- engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb
Metrics/MethodLength:
Max: 10
@@ -596,6 +625,7 @@ Metrics/MethodLength:
- app/serializers/api/cached_enterprise_serializer.rb
- app/services/order_cycle_form.rb
- app/services/permitted_attributes/checkout.rb
- engines/order_management/app/services/order_management/order/updater.rb
- engines/order_management/app/services/order_management/reports/enterprise_fee_summary/scope.rb
- engines/order_management/app/services/order_management/stock/estimator.rb
- engines/order_management/app/services/order_management/stock/package.rb
@@ -626,7 +656,10 @@ Metrics/MethodLength:
- lib/open_food_network/users_and_enterprises_report.rb
- lib/open_food_network/xero_invoices_report.rb
- lib/spree/api/controller_setup.rb
- lib/spree/core/controller_helpers/respond_with_decorator.rb
- lib/spree/core/controller_helpers/auth.rb
- lib/spree/core/controller_helpers/order.rb
- lib/spree/core/controller_helpers/respond_with.rb
- lib/spree/core/controller_helpers/ssl.rb
- lib/spree/localized_number.rb
- lib/stripe/profile_storer.rb
- lib/tasks/data/truncate_data.rb
@@ -636,7 +669,12 @@ Metrics/MethodLength:
- spec/features/consumer/shopping/checkout_paypal_spec.rb
- spec/features/consumer/shopping/variant_overrides_spec.rb
- spec/models/product_importer_spec.rb
- spec/support/request/authentication_workflow.rb
- spec/support/request/authentication_helper.rb
- app/models/spree/order/checkout.rb
- app/models/spree/payment/processing.rb
- engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_allocation_report.rb
- engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb
- engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_supplier_report.rb
Metrics/ClassLength:
Max: 100
@@ -666,6 +704,7 @@ Metrics/ClassLength:
- app/serializers/api/cached_enterprise_serializer.rb
- app/serializers/api/enterprise_shopfront_serializer.rb
- app/services/cart_service.rb
- engines/order_management/app/services/order_management/order/updater.rb
- engines/order_management/app/services/order_management/reports/enterprise_fee_summary/scope.rb
- lib/active_merchant/billing/gateways/stripe_payment_intents.rb
- lib/open_food_network/bulk_coop_report.rb
@@ -678,6 +717,8 @@ Metrics/ClassLength:
- lib/open_food_network/permissions.rb
- lib/open_food_network/users_and_enterprises_report.rb
- lib/open_food_network/xero_invoices_report.rb
- app/models/spree/payment.rb
- engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb
Metrics/ModuleLength:
Max: 100
@@ -686,6 +727,7 @@ Metrics/ModuleLength:
- app/helpers/injection_helper.rb
- app/helpers/spree/admin/base_helper.rb
- app/helpers/spree/admin/navigation_helper.rb
- engines/order_management/spec/services/order_management/order/updater_spec.rb
- engines/order_management/spec/services/order_management/stock/package_spec.rb
- engines/order_management/spec/services/order_management/subscriptions/estimator_spec.rb
- engines/order_management/spec/services/order_management/subscriptions/form_spec.rb
@@ -720,6 +762,8 @@ Metrics/ModuleLength:
- spec/models/spree/variant_spec.rb
- spec/services/permissions/order_spec.rb
- spec/support/request/web_helper.rb
- app/models/spree/order/checkout.rb
- app/models/spree/payment/processing.rb
Metrics/ParameterLists:
Max: 5
@@ -728,3 +772,8 @@ Metrics/ParameterLists:
- app/models/product_import/entry_processor.rb
- lib/open_food_network/xero_invoices_report.rb
- spec/features/admin/reports_spec.rb
Lint/UselessAssignment:
Exclude:
- 'spec/**/*'
- 'lib/spree/core/controller_helpers/common.rb'

View File

@@ -1,79 +1,214 @@
# This configuration was generated by
# `rubocop --auto-gen-config --exclude-limit 1400`
# on 2020-06-22 13:28:10 +0100 using RuboCop version 0.81.0.
# on 2020-08-13 16:05:53 +1000 using RuboCop version 0.81.0.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.
# Offense count: 139
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: with_first_argument, with_fixed_indentation
Layout/ArgumentAlignment:
Exclude:
- 'spec/models/spree/order/checkout_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyleAlignWith.
# SupportedStylesAlignWith: either, start_of_block, start_of_line
Layout/BlockAlignment:
Exclude:
- 'spec/models/spree/order/checkout_spec.rb'
# Offense count: 2
# Cop supports --auto-correct.
Layout/EmptyLines:
Exclude:
- 'spec/models/spree/payment_spec.rb'
# Offense count: 3
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: empty_lines, no_empty_lines
Layout/EmptyLinesAroundBlockBody:
Exclude:
- 'spec/models/spree/payment_spec.rb'
# Offense count: 3
# Cop supports --auto-correct.
# Configuration parameters: AllowForAlignment, AllowBeforeTrailingComments, ForceEqualSignAlignment.
Layout/ExtraSpacing:
Exclude:
- 'spec/models/spree/payment_spec.rb'
- 'spec/requests/api/orders_spec.rb'
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: special_inside_parentheses, consistent, align_brackets
Layout/FirstArrayElementIndentation:
Exclude:
- 'spec/views/spree/admin/payment_methods/index.html.haml_spec.rb'
# Offense count: 3
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: special_inside_parentheses, consistent, align_braces
Layout/FirstHashElementIndentation:
Exclude:
- 'spec/models/spree/payment_spec.rb'
- 'spec/swagger_helper.rb'
# Offense count: 5
# Cop supports --auto-correct.
# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
# SupportedHashRocketStyles: key, separator, table
# SupportedColonStyles: key, separator, table
# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
Layout/HashAlignment:
Exclude:
- 'spec/models/spree/payment_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: normal, indented_internal_methods
Layout/IndentationConsistency:
Exclude:
- 'spec/models/spree/order/checkout_spec.rb'
# Offense count: 26
# Cop supports --auto-correct.
# Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
# URISchemes: http, https
Layout/LineLength:
Max: 268
Max: 409
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: symmetrical, new_line, same_line
Layout/MultilineHashBraceLayout:
Exclude:
- 'spec/models/spree/payment_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: AllowForAlignment, EnforcedStyleForExponentOperator.
# SupportedStylesForExponentOperator: space, no_space
Layout/SpaceAroundOperators:
Exclude:
- 'spec/models/spree/payment_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
# SupportedStyles: space, no_space
# SupportedStylesForEmptyBraces: space, no_space
Layout/SpaceInsideBlockBraces:
Exclude:
- 'spec/models/spree/payment_spec.rb'
# Offense count: 11
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces.
# SupportedStyles: space, no_space, compact
# SupportedStylesForEmptyBraces: space, no_space
Layout/SpaceInsideHashLiteralBraces:
Exclude:
- 'spec/models/spree/payment_spec.rb'
- 'spec/requests/api/orders_spec.rb'
- 'spec/services/checkout/form_data_adapter_spec.rb'
- 'spec/services/user_locale_setter_spec.rb'
# Offense count: 6
# Cop supports --auto-correct.
# Configuration parameters: AllowInHeredoc.
Layout/TrailingWhitespace:
Exclude:
- 'spec/controllers/base_controller2_spec.rb'
- 'spec/features/consumer/shopping/shopping_spec.rb'
- 'spec/requests/api/orders_spec.rb'
# Offense count: 2
Lint/DuplicateMethods:
Exclude:
- 'lib/discourse/single_sign_on.rb'
# Offense count: 9
# Offense count: 8
Lint/IneffectiveAccessModifier:
Exclude:
- 'app/models/column_preference.rb'
- 'app/models/spree/user.rb'
- 'app/services/mail_configuration.rb'
- 'lib/open_food_network/feature_toggle.rb'
- 'spec/lib/open_food_network/reports/report_spec.rb'
# Offense count: 5
# Offense count: 4
# Cop supports --auto-correct.
# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods, IgnoreNotImplementedMethods.
Lint/UnusedMethodArgument:
Exclude:
- 'spec/views/spree/admin/payment_methods/index.html.haml_spec.rb'
# Offense count: 3
# Configuration parameters: ContextCreatingMethods, MethodCreatingMethods.
Lint/UselessAccessModifier:
Exclude:
- 'app/models/column_preference.rb'
- 'app/services/mail_configuration.rb'
- 'lib/open_food_network/feature_toggle.rb'
- 'lib/open_food_network/reports/bulk_coop_report.rb'
- 'spec/lib/open_food_network/reports/report_spec.rb'
# Offense count: 6
# Configuration parameters: IgnoredMethods.
Metrics/AbcSize:
Max: 37
# Offense count: 1
Lint/UselessAssignment:
Exclude:
- 'spec/**/*'
- 'lib/spree/core/controller_helpers/common.rb'
# Offense count: 19
# Configuration parameters: IgnoredMethods.
Metrics/AbcSize:
Max: 126
# Offense count: 7
# Configuration parameters: CountComments, ExcludedMethods.
# ExcludedMethods: refine
Metrics/BlockLength:
Max: 27
Max: 102
# Offense count: 1
# Offense count: 2
# Configuration parameters: CountComments.
Metrics/ClassLength:
Max: 101
Max: 231
# Offense count: 1
# Offense count: 3
# Configuration parameters: IgnoredMethods.
Metrics/CyclomaticComplexity:
Max: 7
Max: 23
# Offense count: 6
# Offense count: 19
# Configuration parameters: CountComments, ExcludedMethods.
Metrics/MethodLength:
Max: 20
Max: 140
# Offense count: 1
# Offense count: 2
# Configuration parameters: CountComments.
Metrics/ModuleLength:
Max: 121
Max: 208
# Offense count: 8
# Offense count: 2
# Configuration parameters: IgnoredMethods.
Metrics/PerceivedComplexity:
Max: 24
# Offense count: 9
Naming/AccessorMethodName:
Exclude:
- 'app/controllers/spree/admin/taxonomies_controller.rb'
- 'app/models/spree/adjustment_decorator.rb'
- 'app/models/spree/order_decorator.rb'
- 'lib/spree/core/controller_helpers/common.rb'
- 'spec/support/request/shop_workflow.rb'
- 'spec/support/request/web_helper.rb'
@@ -117,6 +252,15 @@ Naming/PredicateName:
- 'lib/open_food_network/packing_report.rb'
- 'lib/tasks/data.rake'
# Offense count: 7
# Cop supports --auto-correct.
Rails/ActiveRecordAliases:
Exclude:
- 'spec/controllers/line_items_controller_spec.rb'
- 'spec/controllers/spree/orders_controller_spec.rb'
- 'spec/features/consumer/shopping/orders_spec.rb'
- 'spec/requests/api/orders_spec.rb'
# Offense count: 1
# Configuration parameters: EnforcedStyle.
# SupportedStyles: strict, flexible
@@ -124,6 +268,13 @@ Rails/Date:
Exclude:
- 'app/models/order_cycle.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforceForPrefixed.
Rails/Delegate:
Exclude:
- 'engines/order_management/app/services/order_management/reports/bulk_coop/renderers/html_renderer.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: Whitelist.
@@ -150,7 +301,7 @@ Rails/FilePath:
- 'spec/serializers/api/admin/enterprise_serializer_spec.rb'
- 'spec/support/downloads_helper.rb'
# Offense count: 7
# Offense count: 9
# Cop supports --auto-correct.
# Configuration parameters: Include.
# Include: app/models/**/*.rb
@@ -160,15 +311,17 @@ Rails/FindBy:
- 'app/models/product_import/entry_processor.rb'
- 'app/models/product_import/entry_validator.rb'
- 'app/models/product_import/spreadsheet_data.rb'
- 'app/models/spree/shipment.rb'
- 'app/models/spree/user.rb'
# Offense count: 1
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/FindEach:
Exclude:
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/shipment.rb'
# Offense count: 5
# Configuration parameters: Include.
@@ -180,7 +333,7 @@ Rails/HasAndBelongsToMany:
- 'app/models/spree/concerns/payment_method_distributors.rb'
- 'app/models/spree/line_item_decorator.rb'
# Offense count: 25
# Offense count: 26
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/HasManyOrHasOneDependent:
@@ -192,6 +345,7 @@ Rails/HasManyOrHasOneDependent:
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/payment_method_decorator.rb'
- 'app/models/spree/property.rb'
- 'app/models/spree/shipment.rb'
- 'app/models/spree/shipping_method_decorator.rb'
- 'app/models/spree/user.rb'
- 'app/models/spree/variant_decorator.rb'
@@ -268,7 +422,7 @@ Rails/ReflectionClassName:
- 'app/models/enterprise_role.rb'
- 'app/models/subscription.rb'
# Offense count: 227
# Offense count: 233
# Configuration parameters: Blacklist, Whitelist.
# Blacklist: decrement!, decrement_counter, increment!, increment_counter, toggle!, touch, update_all, update_attribute, update_column, update_columns, update_counters
Rails/SkipsModelValidations:
@@ -287,7 +441,8 @@ Rails/SkipsModelValidations:
- 'app/models/spree/address_decorator.rb'
- 'app/models/spree/credit_card_decorator.rb'
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/payment_decorator.rb'
- 'app/models/spree/payment.rb'
- 'app/models/spree/shipment.rb'
- 'app/models/spree/shipping_method_decorator.rb'
- 'app/models/subscription.rb'
- 'app/models/variant_override.rb'
@@ -355,20 +510,22 @@ Rails/SkipsModelValidations:
- 'spec/support/request/shop_workflow.rb'
- 'spec/views/spree/shared/_order_details.html.haml_spec.rb'
# Offense count: 2
# Offense count: 3
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/UniqueValidationWithoutIndex:
Exclude:
- 'app/models/customer.rb'
- 'app/models/exchange.rb'
- 'app/models/spree/stock_item.rb'
# Offense count: 1
# Offense count: 2
# Configuration parameters: Environments.
# Environments: development, test, production
Rails/UnknownEnv:
Exclude:
- 'app/models/spree/app_configuration_decorator.rb'
- 'lib/spree/core/controller_helpers/ssl.rb'
# Offense count: 2
Style/CaseEquality:
@@ -376,7 +533,7 @@ Style/CaseEquality:
- 'app/helpers/angular_form_helper.rb'
- 'spec/models/spree/payment_spec.rb'
# Offense count: 75
# Offense count: 71
# Cop supports --auto-correct.
# Configuration parameters: AutoCorrect, EnforcedStyle.
# SupportedStyles: nested, compact
@@ -440,20 +597,10 @@ Style/ClassAndModuleChildren:
- 'app/serializers/api/property_serializer.rb'
- 'app/serializers/api/shipping_method_serializer.rb'
- 'app/serializers/api/state_serializer.rb'
- 'app/serializers/api/taxon_image_serializer.rb'
- 'app/serializers/api/taxon_serializer.rb'
- 'app/serializers/api/variant_serializer.rb'
- 'lib/open_food_network/locking.rb'
- 'lib/open_food_network/reports/bulk_coop_allocation_report.rb'
- 'lib/open_food_network/reports/bulk_coop_report.rb'
- 'lib/open_food_network/reports/bulk_coop_supplier_report.rb'
- 'lib/open_food_network/reports/report.rb'
- 'lib/open_food_network/reports/row.rb'
- 'lib/open_food_network/reports/rule.rb'
- 'spec/controllers/spree/admin/base_controller_spec.rb'
- 'spec/lib/open_food_network/reports/report_spec.rb'
- 'spec/lib/open_food_network/reports/row_spec.rb'
- 'spec/lib/open_food_network/reports/rule_spec.rb'
# Offense count: 2
Style/ClassVars:
@@ -468,7 +615,7 @@ Style/FormatStringToken:
- 'lib/open_food_network/sales_tax_report.rb'
- 'spec/features/admin/bulk_order_management_spec.rb'
# Offense count: 874
# Offense count: 847
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: always, always_true, never
@@ -562,7 +709,6 @@ Style/FrozenStringLiteralComment:
- 'app/controllers/spree/admin/variants_controller.rb'
- 'app/controllers/spree/admin/zones_controller.rb'
- 'app/controllers/spree/credit_cards_controller.rb'
- 'app/controllers/spree/home_controller.rb'
- 'app/controllers/spree/orders_controller.rb'
- 'app/controllers/spree/store_controller.rb'
- 'app/controllers/spree/user_passwords_controller.rb'
@@ -617,8 +763,6 @@ Style/FrozenStringLiteralComment:
- 'app/jobs/subscription_placement_job.rb'
- 'app/jobs/welcome_enterprise_job.rb'
- 'app/mailers/enterprise_mailer.rb'
- 'app/mailers/spree/base_mailer_decorator.rb'
- 'app/mailers/spree/order_mailer_decorator.rb'
- 'app/mailers/spree/user_mailer.rb'
- 'app/mailers/subscription_mailer.rb'
- 'app/models/adjustment_metadata.rb'
@@ -677,12 +821,6 @@ Style/FrozenStringLiteralComment:
- 'app/models/spree/address_decorator.rb'
- 'app/models/spree/adjustment_decorator.rb'
- 'app/models/spree/app_configuration_decorator.rb'
- 'app/models/spree/calculator/default_tax_decorator.rb'
- 'app/models/spree/calculator/flat_percent_item_total_decorator.rb'
- 'app/models/spree/calculator/flat_rate_decorator.rb'
- 'app/models/spree/calculator/flexi_rate_decorator.rb'
- 'app/models/spree/calculator/per_item_decorator.rb'
- 'app/models/spree/calculator/price_sack_decorator.rb'
- 'app/models/spree/calculator_decorator.rb'
- 'app/models/spree/classification_decorator.rb'
- 'app/models/spree/concerns/payment_method_distributors.rb'
@@ -695,7 +833,6 @@ Style/FrozenStringLiteralComment:
- 'app/models/spree/line_item_decorator.rb'
- 'app/models/spree/option_type_decorator.rb'
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/payment_decorator.rb'
- 'app/models/spree/payment_method_decorator.rb'
- 'app/models/spree/preferences/file_configuration.rb'
- 'app/models/spree/price_decorator.rb'
@@ -704,15 +841,12 @@ Style/FrozenStringLiteralComment:
- 'app/models/spree/product_property_decorator.rb'
- 'app/models/spree/product_set.rb'
- 'app/models/spree/property.rb'
- 'app/models/spree/shipment_decorator.rb'
- 'app/models/spree/shipping_method_decorator.rb'
- 'app/models/spree/stock/availability_validator_decorator.rb'
- 'app/models/spree/stock_location_decorator.rb'
- 'app/models/spree/tax_rate_decorator.rb'
- 'app/models/spree/taxon_decorator.rb'
- 'app/models/spree/user.rb'
- 'app/models/spree/variant_decorator.rb'
- 'app/models/stock/package.rb'
- 'app/models/stripe_account.rb'
- 'app/models/subscription.rb'
- 'app/models/subscription_line_item.rb'
@@ -796,7 +930,6 @@ Style/FrozenStringLiteralComment:
- 'app/serializers/api/shipping_method_serializer.rb'
- 'app/serializers/api/shop_for_orders_serializer.rb'
- 'app/serializers/api/state_serializer.rb'
- 'app/serializers/api/taxon_image_serializer.rb'
- 'app/serializers/api/taxon_jstree_attribute_serializer.rb'
- 'app/serializers/api/taxon_jstree_serializer.rb'
- 'app/serializers/api/taxon_serializer.rb'
@@ -804,7 +937,6 @@ Style/FrozenStringLiteralComment:
- 'app/serializers/api/user_serializer.rb'
- 'app/serializers/api/variant_serializer.rb'
- 'app/services/action_callbacks.rb'
- 'app/services/advance_order_service.rb'
- 'app/services/bulk_invoice_service.rb'
- 'app/services/cart_service.rb'
- 'app/services/create_order_cycle.rb'
@@ -824,6 +956,7 @@ Style/FrozenStringLiteralComment:
- 'app/services/order_factory.rb'
- 'app/services/order_syncer.rb'
- 'app/services/order_update_issues.rb'
- 'app/services/order_workflow.rb'
- 'app/services/permissions/order.rb'
- 'app/services/product_tag_rules_filterer.rb'
- 'app/services/products_renderer.rb'
@@ -886,7 +1019,6 @@ Style/FrozenStringLiteralComment:
- 'lib/discourse/single_sign_on.rb'
- 'lib/open_food_network/address_finder.rb'
- 'lib/open_food_network/available_payment_method_filter.rb'
- 'lib/open_food_network/bulk_coop_report.rb'
- 'lib/open_food_network/column_preference_defaults.rb'
- 'lib/open_food_network/customers_report.rb'
- 'lib/open_food_network/enterprise_fee_applicator.rb'
@@ -899,7 +1031,6 @@ Style/FrozenStringLiteralComment:
- 'lib/open_food_network/i18n_config.rb'
- 'lib/open_food_network/lettuce_share_report.rb'
- 'lib/open_food_network/locking.rb'
- 'lib/open_food_network/model_class_from_controller_name.rb'
- 'lib/open_food_network/order_and_distributor_report.rb'
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/open_food_network/order_cycle_management_report.rb'
@@ -921,14 +1052,8 @@ Style/FrozenStringLiteralComment:
- 'lib/open_food_network/property_merge.rb'
- 'lib/open_food_network/rack_request_blocker.rb'
- 'lib/open_food_network/referer_parser.rb'
- 'lib/open_food_network/reports/bulk_coop_allocation_report.rb'
- 'lib/open_food_network/reports/bulk_coop_report.rb'
- 'lib/open_food_network/reports/bulk_coop_supplier_report.rb'
- 'lib/open_food_network/reports/line_items.rb'
- 'lib/open_food_network/reports/list.rb'
- 'lib/open_food_network/reports/report.rb'
- 'lib/open_food_network/reports/row.rb'
- 'lib/open_food_network/reports/rule.rb'
- 'lib/open_food_network/sales_tax_report.rb'
- 'lib/open_food_network/scope_product_to_hub.rb'
- 'lib/open_food_network/scope_variant_to_hub.rb'
@@ -942,9 +1067,6 @@ Style/FrozenStringLiteralComment:
- 'lib/spree/api/controller_setup.rb'
- 'lib/spree/api/testing_support/setup.rb'
- 'lib/spree/authentication_helpers.rb'
- 'lib/spree/core/controller_helpers/auth_decorator.rb'
- 'lib/spree/core/controller_helpers/order_decorator.rb'
- 'lib/spree/core/controller_helpers/respond_with_decorator.rb'
- 'lib/spree/localized_number.rb'
- 'lib/spree/money_decorator.rb'
- 'lib/spree/product_filters.rb'
@@ -973,7 +1095,6 @@ Style/FrozenStringLiteralComment:
- 'lib/tasks/sample_data/user_factory.rb'
- 'lib/tasks/specs.rake'
- 'lib/tasks/users.rake'
- 'spec/config/application_spec.rb'
- 'spec/controllers/admin/bulk_line_items_controller_spec.rb'
- 'spec/controllers/admin/column_preferences_controller_spec.rb'
- 'spec/controllers/admin/customers_controller_spec.rb'
@@ -1004,9 +1125,9 @@ Style/FrozenStringLiteralComment:
- 'spec/controllers/api/taxonomies_controller_spec.rb'
- 'spec/controllers/api/taxons_controller_spec.rb'
- 'spec/controllers/api/variants_controller_spec.rb'
- 'spec/controllers/base_controller2_spec.rb'
- 'spec/controllers/base_controller_spec.rb'
- 'spec/controllers/cart_controller_spec.rb'
- 'spec/controllers/checkout_controller_concurrency_spec.rb'
- 'spec/controllers/checkout_controller_spec.rb'
- 'spec/controllers/enterprises_controller_spec.rb'
- 'spec/controllers/groups_controller_spec.rb'
@@ -1023,7 +1144,6 @@ Style/FrozenStringLiteralComment:
- 'spec/controllers/spree/admin/orders_controller_spec.rb'
- 'spec/controllers/spree/admin/overview_controller_spec.rb'
- 'spec/controllers/spree/admin/payment_methods_controller_spec.rb'
- 'spec/controllers/spree/admin/payments_controller_spec.rb'
- 'spec/controllers/spree/admin/products_controller_spec.rb'
- 'spec/controllers/spree/admin/reports_controller_spec.rb'
- 'spec/controllers/spree/admin/search_controller_spec.rb'
@@ -1032,7 +1152,6 @@ Style/FrozenStringLiteralComment:
- 'spec/controllers/spree/admin/variants_controller_spec.rb'
- 'spec/controllers/spree/credit_cards_controller_spec.rb'
- 'spec/controllers/spree/orders_controller_spec.rb'
- 'spec/controllers/spree/store_controller_spec.rb'
- 'spec/controllers/spree/user_sessions_controller_spec.rb'
- 'spec/controllers/spree/users_controller_spec.rb'
- 'spec/controllers/stripe/callbacks_controller_spec.rb'
@@ -1140,7 +1259,6 @@ Style/FrozenStringLiteralComment:
- 'spec/jobs/subscription_placement_job_spec.rb'
- 'spec/jobs/welcome_enterprise_job_spec.rb'
- 'spec/lib/open_food_network/address_finder_spec.rb'
- 'spec/lib/open_food_network/bulk_coop_report_spec.rb'
- 'spec/lib/open_food_network/customers_report_spec.rb'
- 'spec/lib/open_food_network/enterprise_fee_applicator_spec.rb'
- 'spec/lib/open_food_network/enterprise_fee_calculator_spec.rb'
@@ -1166,9 +1284,6 @@ Style/FrozenStringLiteralComment:
- 'spec/lib/open_food_network/products_and_inventory_report_spec.rb'
- 'spec/lib/open_food_network/property_merge_spec.rb'
- 'spec/lib/open_food_network/referer_parser_spec.rb'
- 'spec/lib/open_food_network/reports/report_spec.rb'
- 'spec/lib/open_food_network/reports/row_spec.rb'
- 'spec/lib/open_food_network/reports/rule_spec.rb'
- 'spec/lib/open_food_network/sales_tax_report_spec.rb'
- 'spec/lib/open_food_network/scope_variant_to_hub_spec.rb'
- 'spec/lib/open_food_network/scope_variants_to_search_spec.rb'
@@ -1183,12 +1298,16 @@ Style/FrozenStringLiteralComment:
- 'spec/lib/tasks/enterprises_rake_spec.rb'
- 'spec/lib/tasks/users_rake_spec.rb'
- 'spec/mailers/enterprise_mailer_spec.rb'
- 'spec/mailers/order_mailer_spec.rb'
- 'spec/mailers/producer_mailer_spec.rb'
- 'spec/mailers/subscription_mailer_spec.rb'
- 'spec/mailers/user_mailer_spec.rb'
- 'spec/models/adjustment_metadata_spec.rb'
- 'spec/models/calculator/flat_percent_item_total_spec.rb'
- 'spec/models/calculator/flat_percent_per_item_spec.rb'
- 'spec/models/calculator/flat_rate_spec.rb'
- 'spec/models/calculator/flexi_rate_spec.rb'
- 'spec/models/calculator/per_item_spec.rb'
- 'spec/models/calculator/price_sack_spec.rb'
- 'spec/models/calculator/weight_spec.rb'
- 'spec/models/column_preference_spec.rb'
- 'spec/models/concerns/order_shipment_spec.rb'
@@ -1214,11 +1333,6 @@ Style/FrozenStringLiteralComment:
- 'spec/models/spree/ability_spec.rb'
- 'spec/models/spree/addresses_spec.rb'
- 'spec/models/spree/adjustment_spec.rb'
- 'spec/models/spree/calculator/flat_percent_item_total_spec.rb'
- 'spec/models/spree/calculator/flat_rate_spec.rb'
- 'spec/models/spree/calculator/flexi_rate_spec.rb'
- 'spec/models/spree/calculator/per_item_spec.rb'
- 'spec/models/spree/calculator/price_sack_spec.rb'
- 'spec/models/spree/calculator_spec.rb'
- 'spec/models/spree/classification_spec.rb'
- 'spec/models/spree/credit_card_spec.rb'
@@ -1233,14 +1347,12 @@ Style/FrozenStringLiteralComment:
- 'spec/models/spree/price_spec.rb'
- 'spec/models/spree/product_set_spec.rb'
- 'spec/models/spree/product_spec.rb'
- 'spec/models/spree/shipment_spec.rb'
- 'spec/models/spree/shipping_method_spec.rb'
- 'spec/models/spree/stock/availability_validator_spec.rb'
- 'spec/models/spree/tax_rate_spec.rb'
- 'spec/models/spree/taxon_spec.rb'
- 'spec/models/spree/user_spec.rb'
- 'spec/models/spree/variant_spec.rb'
- 'spec/models/stock/package_spec.rb'
- 'spec/models/stripe_account_spec.rb'
- 'spec/models/subscription_line_item_spec.rb'
- 'spec/models/subscription_spec.rb'
@@ -1282,7 +1394,6 @@ Style/FrozenStringLiteralComment:
- 'spec/serializers/api/product_serializer_spec.rb'
- 'spec/serializers/api/shipping_method_serializer_spec.rb'
- 'spec/serializers/api/variant_serializer_spec.rb'
- 'spec/services/advance_order_service_spec.rb'
- 'spec/services/bulk_invoice_service_spec.rb'
- 'spec/services/cart_service_spec.rb'
- 'spec/services/default_shipping_category_spec.rb'
@@ -1298,6 +1409,7 @@ Style/FrozenStringLiteralComment:
- 'spec/services/order_cycle_warning_spec.rb'
- 'spec/services/order_factory_spec.rb'
- 'spec/services/order_syncer_spec.rb'
- 'spec/services/order_workflow_spec.rb'
- 'spec/services/permissions/order_spec.rb'
- 'spec/services/product_tag_rules_filterer_spec.rb'
- 'spec/services/products_renderer_spec.rb'
@@ -1331,7 +1443,7 @@ Style/FrozenStringLiteralComment:
- 'spec/support/performance_helper.rb'
- 'spec/support/products_helper.rb'
- 'spec/support/request/admin_helper.rb'
- 'spec/support/request/authentication_workflow.rb'
- 'spec/support/request/authentication_helper.rb'
- 'spec/support/request/checkout_workflow.rb'
- 'spec/support/request/cookie_helper.rb'
- 'spec/support/request/distribution_helper.rb'
@@ -1348,8 +1460,9 @@ Style/FrozenStringLiteralComment:
- 'spec/validators/integer_array_validator_spec.rb'
- 'spec/views/spree/admin/orders/edit.html.haml_spec.rb'
- 'spec/views/spree/admin/orders/index.html.haml_spec.rb'
- 'spec/views/spree/admin/payment_methods/index.html.haml_spec.rb'
# Offense count: 51
# Offense count: 48
# Configuration parameters: MinBodyLength.
Style/GuardClause:
Exclude:
@@ -1369,32 +1482,35 @@ Style/GuardClause:
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/price_decorator.rb'
- 'app/models/spree/product_decorator.rb'
- 'app/services/advance_order_service.rb'
- 'app/services/order_syncer.rb'
- 'lib/discourse/single_sign_on.rb'
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/open_food_network/rack_request_blocker.rb'
- 'lib/open_food_network/variant_and_line_item_naming.rb'
- 'lib/spree/core/controller_helpers/order_decorator.rb'
- 'lib/spree/core/controller_helpers/respond_with_decorator.rb'
- 'spec/support/delayed_job_helper.rb'
- 'spec/support/request/distribution_helper.rb'
- 'spec/support/request/shop_workflow.rb'
# Offense count: 54
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
Style/HashSyntax:
Exclude:
- 'spec/models/spree/payment_spec.rb'
# Offense count: 1
Style/MissingRespondToMissing:
Exclude:
- 'app/helpers/application_helper.rb'
# Offense count: 4
# Offense count: 2
Style/MixinUsage:
Exclude:
- 'lib/open_food_network/orders_and_fulfillments_report.rb'
- 'spec/lib/open_food_network/bulk_coop_report_spec.rb'
- 'spec/lib/open_food_network/order_cycle_management_report_spec.rb'
- 'spec/lib/open_food_network/packing_report_spec.rb'
# Offense count: 41
# Offense count: 39
# Cop supports --auto-correct.
# Configuration parameters: AutoCorrect, EnforcedStyle, IgnoredMethods.
# SupportedStyles: predicate, comparison
@@ -1409,11 +1525,9 @@ Style/NumericPredicate:
- 'app/models/product_import/product_importer.rb'
- 'app/models/product_import/spreadsheet_entry.rb'
- 'app/models/spree/adjustment_decorator.rb'
- 'app/models/spree/calculator/flexi_rate_decorator.rb'
- 'app/models/spree/gateway/stripe_connect.rb'
- 'app/models/spree/line_item_decorator.rb'
- 'app/models/spree/order_decorator.rb'
- 'app/models/spree/shipment_decorator.rb'
- 'app/models/spree/user.rb'
- 'app/models/variant_override.rb'
- 'app/services/cart_service.rb'
@@ -1426,6 +1540,22 @@ Style/NumericPredicate:
- 'lib/spree/money_decorator.rb'
- 'lib/tasks/sample_data.rake'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: compact, exploded
Style/RaiseArgs:
Exclude:
- 'spec/controllers/checkout_controller_spec.rb'
# Offense count: 1
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, AllowInnerSlashes.
# SupportedStyles: slashes, percent_r, mixed
Style/RegexpLiteral:
Exclude:
- 'lib/spree/core/controller_helpers/auth.rb'
# Offense count: 231
Style/Send:
Exclude:

View File

@@ -17,7 +17,13 @@ Better to have at least 2GB free on your computer in order to download images an
Open a terminal with a shell.
Clone the repository:
Clone the repository. 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.
```sh
$ git clone https://github.com/YOUR_GITHUB_USERNAME_HERE/openfoodnetwork
```
Otherwise, if you just want to get things running, clone from the OFN main repo:
```sh
$ git clone git@github.com:openfoodfoundation/openfoodnetwork.git

View File

@@ -1,6 +1,6 @@
### Getting Started
This is a general guide to setting up an Open Food Network development environment on your local machine.
This is a general guide to setting up an Open Food Network **development environment on your local machine**. If you want to setup OFN on a server, please have a look at the [ofn-install deployment guide](https://github.com/openfoodfoundation/ofn-install/wiki).
### Requirements

10
Gemfile
View File

@@ -39,18 +39,21 @@ gem 'stringex', '~> 1.5.1'
gem 'spree_i18n', github: 'spree/spree_i18n', branch: '1-3-stable'
# Our branch contains two changes
# Our branch contains the following changes:
# - Pass customer email and phone number to PayPal (merged to upstream master)
# - Change type of password from string to password to hide it in the form
# - Skip CA cert file and use the ones provided by the OS
gem 'spree_paypal_express', github: 'openfoodfoundation/better_spree_paypal_express', branch: '2-1-0-stable'
gem 'stripe'
# We need at least this version to have Digicert's root certificate
# which is needed for Pin Payments (and possibly others).
gem 'activemerchant', '~> 1.78.0'
gem 'devise', '~> 3.0.1'
gem 'devise', '~> 3.5.10' # v4.0.0 needs rails 4.1
gem 'devise-encryptable'
gem 'devise-token_authenticatable', '~> 0.4.10' # v0.5.0 needs devise v4
gem 'jwt', '~> 2.2'
gem 'oauth2', '~> 1.4.4' # Used for Stripe Connect
@@ -83,12 +86,11 @@ gem 'acts-as-taggable-on', '~> 4.0'
gem 'angularjs-file-upload-rails', '~> 2.4.1'
gem 'custom_error_message', github: 'jeremydurham/custom-err-msg'
gem 'dalli'
gem 'diffy'
gem 'figaro'
gem 'geocoder'
gem 'gmaps4rails'
gem 'oj'
gem 'paper_trail', '~> 5.2.3'
gem 'paper_trail', '~> 7.1.3'
gem 'paperclip', '~> 3.4.1'
gem 'rack-rewrite'
gem 'rack-ssl', require: 'rack/ssl'

View File

@@ -6,7 +6,7 @@ GIT
GIT
remote: https://github.com/openfoodfoundation/better_spree_paypal_express.git
revision: e28e4a8c5cedba504eea9cdad4be440d277d7e68
revision: 1736e3268239a841576d2719a1f276cf9b74c5c5
branch: 2-1-0-stable
specs:
spree_paypal_express (2.0.3)
@@ -108,7 +108,7 @@ GEM
activesupport (= 4.0.13)
arel (~> 4.0.0)
activerecord-deprecated_finders (1.0.4)
activerecord-import (1.0.5)
activerecord-import (1.0.6)
activerecord (>= 3.2)
activerecord-postgresql-adapter (0.0.1)
pg
@@ -148,9 +148,7 @@ GEM
nokogiri (>= 1.4.4)
uuidtools (~> 2.1)
bcrypt (3.1.13)
bcrypt-ruby (3.1.5)
bcrypt (>= 3.1.3)
bugsnag (6.13.1)
bugsnag (6.16.0)
concurrent-ruby (~> 1.0)
builder (3.1.4)
byebug (11.0.1)
@@ -194,7 +192,7 @@ GEM
compass (~> 1.0.0)
sass-rails (< 5.1)
sprockets (< 4.0)
concurrent-ruby (1.1.6)
concurrent-ruby (1.1.7)
crack (0.4.3)
safe_yaml (~> 1.0.0)
css_parser (1.7.1)
@@ -206,7 +204,7 @@ GEM
activerecord (>= 3.2.0, < 5.0)
fog (~> 1.0)
rails (>= 3.2.0, < 5.0)
ddtrace (0.37.0)
ddtrace (0.39.0)
msgpack
debugger-linecache (1.2.0)
delayed_job (4.1.8)
@@ -219,15 +217,18 @@ GEM
delayed_job (> 2.0.3)
rack-protection (>= 1.5.5)
sinatra (>= 1.4.4)
devise (3.0.4)
bcrypt-ruby (~> 3.0)
devise (3.5.10)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 3.2.6, < 5)
responders
thread_safe (~> 0.1)
warden (~> 1.2.3)
devise-encryptable (0.2.0)
devise (>= 2.1.0)
devise-token_authenticatable (0.4.10)
devise (>= 3.5.2, < 4.0.0)
diff-lcs (1.3)
diffy (3.3.0)
docile (1.3.2)
dry-inflector (0.1.2)
erubis (2.7.0)
@@ -466,7 +467,7 @@ GEM
money (5.1.1)
i18n (~> 0.6.0)
msgpack (1.3.3)
multi_json (1.14.1)
multi_json (1.15.0)
multi_xml (0.6.0)
multipart-post (2.1.1)
newrelic_rpm (3.18.1.330)
@@ -478,11 +479,11 @@ GEM
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 3)
oj (3.10.7)
oj (3.10.8)
optimist (3.0.0)
orm_adapter (0.5.0)
paper_trail (5.2.3)
activerecord (>= 3.0, < 6.0)
paper_trail (7.1.3)
activerecord (>= 4.0, < 5.2)
request_store (~> 1.1)
paperclip (3.4.2)
activemodel (>= 3.0.0)
@@ -508,7 +509,7 @@ GEM
pry-byebug (3.7.0)
byebug (~> 11.0)
pry (~> 0.10)
public_suffix (4.0.3)
public_suffix (4.0.5)
rack (1.5.5)
rack-mini-profiler (2.0.2)
rack (>= 1.2.0)
@@ -553,8 +554,10 @@ GEM
nokogiri (~> 1.5)
optimist (~> 3.0)
redcarpet (3.5.0)
request_store (1.4.1)
request_store (1.5.0)
rack (>= 1.4)
responders (1.1.2)
railties (>= 3.2, < 4.2)
rexml (3.2.4)
roadie (3.4.0)
css_parser (~> 1.4)
@@ -588,19 +591,19 @@ GEM
rspec-retry (0.6.2)
rspec-core (> 3.3)
rspec-support (3.9.2)
rswag (2.2.0)
rswag-api (= 2.2.0)
rswag-specs (= 2.2.0)
rswag-ui (= 2.2.0)
rswag-api (2.2.0)
railties (>= 3.1, < 6.1)
rswag-specs (2.2.0)
activesupport (>= 3.1, < 6.1)
rswag (2.3.1)
rswag-api (= 2.3.1)
rswag-specs (= 2.3.1)
rswag-ui (= 2.3.1)
rswag-api (2.3.1)
railties (>= 3.1, < 7.0)
rswag-specs (2.3.1)
activesupport (>= 3.1, < 7.0)
json-schema (~> 2.2)
railties (>= 3.1, < 6.1)
rswag-ui (2.2.0)
actionpack (>= 3.1, < 6.1)
railties (>= 3.1, < 6.1)
railties (>= 3.1, < 7.0)
rswag-ui (2.3.1)
actionpack (>= 3.1, < 7.0)
railties (>= 3.1, < 7.0)
rubocop (0.81.0)
jaro_winkler (~> 1.5.1)
parallel (~> 1.10)
@@ -668,7 +671,7 @@ GEM
uglifier (4.2.0)
execjs (>= 0.3.0, < 3)
unicode-display_width (1.7.0)
unicorn (5.5.5)
unicorn (5.6.0)
kgio (~> 2.6)
raindrops (~> 0.7)
unicorn-rails (2.2.1)
@@ -735,10 +738,10 @@ DEPENDENCIES
debugger-linecache
delayed_job_active_record
delayed_job_web
devise (~> 3.0.1)
devise (~> 3.5.10)
devise-encryptable
devise-token_authenticatable (~> 0.4.10)
dfc_provider!
diffy
eventmachine (>= 1.2.3)
factory_bot_rails (= 4.10.0)
ffaker (~> 1.16)
@@ -772,7 +775,7 @@ DEPENDENCIES
ofn-qz!
oj
order_management!
paper_trail (~> 5.2.3)
paper_trail (~> 7.1.3)
paperclip (~> 3.4.1)
paranoia (~> 2.0)
pg (~> 0.21.0)

View File

@@ -80,7 +80,11 @@
//= require moment/nb.js
//= require moment/pt-br.js
//= require moment/pt.js
//= require moment/ru.js
//= require moment/sv.js
//= require moment/ca.js
//= require moment/ar.js
//= require moment/tr.js
// foundation
//= require ../shared/mm-foundation-tpls-0.9.0-20180826174721.min.js

View File

@@ -37,7 +37,11 @@
#= require moment/nb.js
#= require moment/pt-br.js
#= require moment/pt.js
#= require moment/ru.js
#= require moment/sv.js
#= require moment/ca.js
#= require moment/ar.js
#= require moment/tr.js
#
#= require modernizr
#

View File

@@ -0,0 +1,9 @@
Darkswarm.directive "disableEnterWithBlur", ()->
# Stops enter from doing normal enter things, and blurs the input
restrict: 'A'
link: (scope, element, attrs)->
element.bind "keydown keypress", (e)->
code = e.keyCode || e.which
if code == 13
element.blur()
e.preventDefault()

View File

@@ -1,4 +1,4 @@
Darkswarm.directive 'ofnOpenStreetMap', ($window, Enterprises, EnterpriseModal, availableCountries, openStreetMapConfig) ->
Darkswarm.directive 'ofnOpenStreetMap', ($window, MapCentreCalculator, Enterprises, EnterpriseModal, availableCountries, openStreetMapConfig) ->
restrict: 'E'
replace: true
scope: true
@@ -11,34 +11,6 @@ Darkswarm.directive 'ofnOpenStreetMap', ($window, Enterprises, EnterpriseModal,
openStreetMapProviderName = openStreetMapConfig.open_street_map_provider_name
openStreetMapProviderOptions = JSON.parse(openStreetMapConfig.open_street_map_provider_options)
average = (values) ->
total = values.reduce (sum, value) ->
sum = sum + value
, 0
total / values.length
averageAngle = (angleName) ->
positiveAngles = []
negativeAngles = []
for enterprise in Enterprises.enterprises
if enterprise.latitude? && enterprise.longitude?
if enterprise[angleName] > 0
positiveAngles.push(enterprise[angleName])
else
negativeAngles.push(enterprise[angleName])
averageNegativeAngle = average(negativeAngles)
averagePositiveAngle = average(positiveAngles)
if negativeAngles.length == 0
averagePositiveAngle
else if positiveAngles.length == 0
averageNegativeAngle
else if averagePositiveAngle > averageNegativeAngle
averagePositiveAngle - averageNegativeAngle
else
averageNegativeAngle - averagePositiveAngle
buildMarker = (enterprise, latlng, title) ->
icon = L.icon
iconUrl: enterprise.icon
@@ -61,28 +33,31 @@ Darkswarm.directive 'ofnOpenStreetMap', ($window, Enterprises, EnterpriseModal,
displayMap = ->
setMapDimensions()
averageLatitude = averageAngle("latitude")
averageLongitude = averageAngle("longitude")
zoomLevel = 6
map = L.map('open-street-map')
L.tileLayer.provider(openStreetMapProviderName, openStreetMapProviderOptions).addTo(map)
map.setView([averageLatitude, averageLongitude], zoomLevel)
map.setView([MapCentreCalculator.initialLatitude(), MapCentreCalculator.initialLongitude()], zoomLevel)
displayEnterprises = ->
for enterprise in Enterprises.enterprises
if enterprise.latitude? && enterprise.longitude?
marker = buildMarker(enterprise, { lat: enterprise.latitude, lng: enterprise.longitude }, enterprise.name).addTo(map)
enterpriseNames.push(enterpriseName(enterprise))
markers.push(marker)
for enterprise in Enterprises.geocodedEnterprises()
marker = buildMarker(enterprise, { lat: enterprise.latitude, lng: enterprise.longitude }, enterprise.name).addTo(map)
enterpriseNames.push(enterpriseName(enterprise))
markers.push(marker)
disableSearchField = () =>
$('#open-street-map--search input').prop("disabled", true)
displaySearchField = () ->
new Autocomplete('#open-street-map--search',
onSubmit: goToEnterprise
search: searchEnterprises
)
overwriteInlinePositionRelativeToPositionSearchField = ->
$('#open-street-map--search').css("position", "absolute")
overwriteInlinePositionRelativeToPositionSearchField()
overwriteInlinePositionRelativeToAbsoluteOnSearchField()
if Enterprises.geocodedEnterprises().length == 0
disableSearchField()
overwriteInlinePositionRelativeToAbsoluteOnSearchField = ->
$('#open-street-map--search').css("position", "absolute")
searchEnterprises = (input) ->
if input.length < 1

View File

@@ -24,7 +24,8 @@ Darkswarm.factory 'Checkout', ($injector, CurrentOrder, ShippingMethods, StripeE
try
@loadFlash(error: t("checkout.failed")) # inform the user about the unexpected error
finally
throw error # generate a BugsnagJS alert
Bugsnag.notify(error)
throw error
handle_checkout_error_response: (response) =>
throw response unless response.data?

View File

@@ -84,3 +84,8 @@ Darkswarm.factory 'Enterprises', (enterprises, ShopsResource, CurrentHub, Taxons
resetDistance: ->
enterprise.distance = null for enterprise in @enterprises
geocodedEnterprises: =>
@enterprises.filter (enterprise) ->
enterprise.latitude? && enterprise.longitude?

View File

@@ -2,9 +2,7 @@ Darkswarm.factory "OfnMap", (Enterprises, EnterpriseListModal, MapConfiguration)
new class OfnMap
constructor: ->
@coordinates = {}
@enterprises = Enterprises.enterprises.filter (enterprise) ->
# Remove enterprises w/o lat or long
enterprise.latitude != null || enterprise.longitude != null
@enterprises = Enterprises.geocodedEnterprises()
@enterprises = @enterprise_markers(@enterprises)
enterprise_markers: (enterprises) ->

View File

@@ -0,0 +1,30 @@
Darkswarm.factory 'MapCentreCalculator', (Enterprises, openStreetMapConfig) ->
new class MapCentreCalculator
initialLatitude: =>
if Enterprises.geocodedEnterprises().length > 0
@_calculate("latitude", Enterprises.geocodedEnterprises())
else
openStreetMapConfig.open_street_map_default_latitude
initialLongitude: =>
if Enterprises.geocodedEnterprises().length > 0
@_calculate("longitude", Enterprises.geocodedEnterprises())
else
openStreetMapConfig.open_street_map_default_longitude
_calculate: (angleName, coordinates) =>
angles = []
for coordinate in coordinates
angles.push(coordinate[angleName])
minimumAngle = Math.min.apply(null, angles)
maximumAngle = Math.max.apply(null, angles)
distanceBetweenMinimumAndMaximum = if maximumAngle > minimumAngle
maximumAngle - minimumAngle
else
minimumAngle - maximumAngle
minimumAngle + (distanceBetweenMinimumAndMaximum / 2)

View File

@@ -20,9 +20,11 @@
&:first-child {
padding-left: 0;
width: 70%;
}
&:last-child {
padding-right: 0;
width: 30%;
}
}
}

View File

@@ -16,12 +16,14 @@
width: 100%;
background-color: $shop-sidebar-overlay;
opacity: 0;
transition: opacity $transition-sidebar;
visibility: hidden;
transition: all $transition-sidebar;
}
&.shown {
.background {
opacity: 1;
visibility: visible;
}
.sidebar,

View File

@@ -17,10 +17,12 @@
position: fixed;
left: 0;
right: 0;
bottom: 0;
top: 0;
z-index: -1;
width: 100%;
height: 100%;
// Use vh units for new browsers - fixed issue 1253
height: 100vh;
}
h1 {

View File

@@ -1,5 +1,6 @@
# Base controller for OFN's API
require_dependency 'spree/api/controller_setup'
require "spree/core/controller_helpers/ssl"
module Api
class BaseController < ActionController::Metal
@@ -53,7 +54,7 @@ module Api
# Use logged in user (spree_current_user) for API authentication (current_api_user)
def authenticate_user
return if @current_api_user = try_spree_current_user
return if @current_api_user = spree_current_user
if api_key.blank?
# An anonymous user

View File

@@ -62,11 +62,15 @@ class ApplicationController < ActionController::Base
end
def after_sign_out_path_for(_resource_or_scope)
session[:shopfront_redirect] || main_app.root_path
shopfront_redirect || main_app.root_path
end
private
def shopfront_redirect
session[:shopfront_redirect]
end
def restrict_iframes
response.headers['X-Frame-Options'] = 'DENY'
response.headers['Content-Security-Policy'] = "frame-ancestors 'none'"

View File

@@ -1,8 +1,10 @@
require 'spree/core/controller_helpers/respond_with_decorator'
require 'spree/core/controller_helpers/auth'
require 'spree/core/controller_helpers/common'
require 'spree/core/controller_helpers/order'
require 'spree/core/controller_helpers/respond_with'
require 'open_food_network/tag_rule_applicator'
class BaseController < ApplicationController
include Spree::Core::ControllerHelpers
include Spree::Core::ControllerHelpers::Auth
include Spree::Core::ControllerHelpers::Common
include Spree::Core::ControllerHelpers::Order

View File

@@ -1,4 +1,4 @@
require 'spree/core/controller_helpers/order_decorator'
require 'spree/core/controller_helpers/order'
class CartController < BaseController
before_action :check_authorization

View File

@@ -32,20 +32,20 @@ class CheckoutController < Spree::StoreController
helper 'spree/orders'
rescue_from Spree::Core::GatewayError, with: :rescue_from_spree_gateway_error
def edit
return handle_redirect_from_stripe if valid_payment_intent_provided?
# This is only required because of spree_paypal_express. If we implement
# a version of paypal that uses this controller, and more specifically
# the #update_failed method, then we can remove this call
# the #action_failed method, then we can remove this call
OrderCheckoutRestart.new(@order).call
rescue Spree::Core::GatewayError => e
rescue_from_spree_gateway_error(e)
end
def update
params_adapter = Checkout::FormDataAdapter.new(permitted_params, @order, spree_current_user)
return update_failed unless @order.update(params_adapter.params[:order])
return action_failed unless @order.update(params_adapter.params[:order])
fire_event('spree.checkout.update')
@@ -54,7 +54,7 @@ class CheckoutController < Spree::StoreController
rescue_from_spree_gateway_error(e)
rescue StandardError => e
flash[:error] = I18n.t("checkout.failed")
update_failed(e)
action_failed(e)
end
# Clears the cached order. Required for #current_order to return a new order
@@ -138,14 +138,6 @@ class CheckoutController < Spree::StoreController
current_order.payments.destroy_all if request.put?
end
def rescue_from_spree_gateway_error(error)
flash[:error] = t(:spree_gateway_error_flash_for_checkout, error: error.message)
respond_to do |format|
format.html { render :edit }
format.json { render json: { flash: flash.to_hash }, status: :bad_request }
end
end
def valid_payment_intent_provided?
return false unless params["payment_intent"]&.starts_with?("pi_")
@@ -156,11 +148,10 @@ class CheckoutController < Spree::StoreController
end
def handle_redirect_from_stripe
if advance_order_state(@order) && order_complete?
if OrderWorkflow.new(@order).next && order_complete?
checkout_succeeded
redirect_to(order_path(@order)) && return
else
flash[:error] = order_error
checkout_failed
end
end
@@ -171,11 +162,9 @@ class CheckoutController < Spree::StoreController
return if redirect_to_payment_gateway
end
@order.select_shipping_method(shipping_method_id) if @order.state == "delivery"
next if OrderWorkflow.new(@order).next({ shipping_method_id: shipping_method_id })
next if advance_order_state(@order)
return update_failed
return action_failed
end
update_response
@@ -190,15 +179,6 @@ class CheckoutController < Spree::StoreController
true
end
# Perform order.next, guarding against StaleObjectErrors
def advance_order_state(order)
tries ||= 3
order.next
rescue ActiveRecord::StaleObjectError
retry unless (tries -= 1).zero?
false
end
def order_error
if @order.errors.present?
@order.errors.full_messages.to_sentence
@@ -212,7 +192,7 @@ class CheckoutController < Spree::StoreController
checkout_succeeded
update_succeeded_response
else
update_failed(RuntimeError.new("Order not complete after the checkout workflow"))
action_failed(RuntimeError.new("Order not complete after the checkout workflow"))
end
end
@@ -238,30 +218,42 @@ class CheckoutController < Spree::StoreController
end
end
def update_failed(error = RuntimeError.new(order_error))
Bugsnag.notify(error)
flash[:error] = order_error if flash.blank?
checkout_failed
update_failed_response
def action_failed(error = RuntimeError.new(order_error))
checkout_failed(error)
action_failed_response
end
def checkout_failed
def checkout_failed(error = RuntimeError.new(order_error))
Bugsnag.notify(error)
flash[:error] = order_error if flash.blank?
Checkout::PostCheckoutActions.new(@order).failure
end
def update_failed_response
def action_failed_response
respond_to do |format|
format.html do
render :edit
end
format.json do
discard_flash_errors
render json: { errors: @order.errors, flash: flash.to_hash }.to_json, status: :bad_request
end
end
end
def rescue_from_spree_gateway_error(error)
flash[:error] = t(:spree_gateway_error_flash_for_checkout, error: error.message)
action_failed(error)
end
def permitted_params
PermittedAttributes::Checkout.new(params).call
end
def discard_flash_errors
# Marks flash errors for deletion after the current action has completed.
# This ensures flash errors generated during XHR requests are not persisted in the
# session for longer than expected.
flash.discard(:error)
end
end

View File

@@ -68,7 +68,7 @@ class EnterprisesController < BaseController
# reset_distributor must be called before any call to current_customer or current_distributor
order_cart_reset = OrderCartReset.new(order, params[:id])
order_cart_reset.reset_distributor
order_cart_reset.reset_other!(try_spree_current_user, current_customer)
order_cart_reset.reset_other!(spree_current_user, current_customer)
rescue ActiveRecord::RecordNotFound
flash[:error] = I18n.t(:enterprise_shop_show_error)
redirect_to shops_path

View File

@@ -16,6 +16,10 @@ class HomeController < BaseController
def sell; end
def unauthorized
render 'shared/unauthorized', status: :unauthorized
end
private
# Cache the value of the query count

View File

@@ -24,7 +24,7 @@ module Spree
# This is in Spree::Core::ControllerHelpers::Auth
# But you can't easily reopen modules in Ruby
def unauthorized
if try_spree_current_user
if spree_current_user
flash[:error] = t(:authorization_failure)
redirect_to '/unauthorized'
else

View File

@@ -15,7 +15,7 @@ module Spree
end
def testmail
if TestMailer.test_email(try_spree_current_user).deliver
if TestMailer.test_email(spree_current_user).deliver
flash[:success] = Spree.t('admin.mail_methods.testmail.delivery_success')
else
flash[:error] = Spree.t('admin.mail_methods.testmail.delivery_error')

View File

@@ -23,7 +23,7 @@ module Spree
@order.associate_user!(Spree.user_class.find_by(email: @order.email))
end
AdvanceOrderService.new(@order).call
OrderWorkflow.new(@order).complete
@order.shipments.map(&:refresh_rates)
flash[:success] = Spree.t('customer_details_updated')

View File

@@ -27,7 +27,7 @@ module Spree
def new
@order = Order.create
@order.created_by = try_spree_current_user
@order.created_by = spree_current_user
@order.save
redirect_to edit_admin_order_url(@order)
end
@@ -35,7 +35,7 @@ module Spree
def edit
@order.shipments.map(&:refresh_rates)
AdvanceOrderService.new(@order).call
OrderWorkflow.new(@order).complete
# The payment step shows an error of 'No pending payments'
# Clearing the errors from the order object will stop this error

View File

@@ -37,7 +37,7 @@ module Spree
redirect_to admin_order_payments_path(@order)
else
AdvanceOrderService.new(@order).call!
OrderWorkflow.new(@order).complete!
flash[:success] = Spree.t(:new_order_completed)
redirect_to edit_admin_order_url(@order)
@@ -61,7 +61,7 @@ module Spree
else
flash[:error] = t(:cannot_perform_operation)
end
rescue Spree::Core::GatewayError => e
rescue StandardError => e
flash[:error] = e.message
ensure
redirect_to request.referer

View File

@@ -0,0 +1,16 @@
# frozen_string_literal: true
require 'cancan'
module Spree
class BaseController < ApplicationController
include Spree::Core::ControllerHelpers::Auth
include Spree::Core::ControllerHelpers::RespondWith
include Spree::Core::ControllerHelpers::SSL
include Spree::Core::ControllerHelpers::Common
respond_to :html
end
end
require 'spree/i18n/initializer'

View File

@@ -1,7 +0,0 @@
module Spree
class HomeController < Spree::StoreController
respond_to :html
def index; end
end
end

View File

@@ -1,5 +1,5 @@
require 'spree/core/controller_helpers/order_decorator'
require 'spree/core/controller_helpers/auth_decorator'
require 'spree/core/controller_helpers/order'
require 'spree/core/controller_helpers/auth'
module Spree
class OrdersController < Spree::StoreController
@@ -194,7 +194,7 @@ module Spree
return if session[:access_token] || params[:token] || spree_current_user
flash[:error] = I18n.t("spree.orders.edit.login_to_view_order")
require_login_then_redirect_to request.env['PATH_INFO']
redirect_to main_app.root_path(anchor: "login?after_login=#{request.env['PATH_INFO']}")
end
def order_to_update

View File

@@ -6,9 +6,5 @@ module Spree
include I18nHelper
before_action :set_locale
def unauthorized
render 'shared/unauthorized', status: :unauthorized
end
end
end

View File

@@ -1,3 +1,10 @@
# frozen_string_literal: true
require "spree/core/controller_helpers/auth"
require "spree/core/controller_helpers/common"
require "spree/core/controller_helpers/order"
require "spree/core/controller_helpers/ssl"
module Spree
class UserPasswordsController < Devise::PasswordsController
helper 'spree/base', 'spree/store'

View File

@@ -1,3 +1,10 @@
# frozen_string_literal: true
require "spree/core/controller_helpers/auth"
require "spree/core/controller_helpers/common"
require "spree/core/controller_helpers/order"
require "spree/core/controller_helpers/ssl"
module Spree
class UserRegistrationsController < Devise::RegistrationsController
helper 'spree/base', 'spree/store'
@@ -23,7 +30,6 @@ module Spree
if resource.save
set_flash_message(:notice, :signed_up)
sign_in(:spree_user, @user)
session[:spree_user_signup] = true
associate_user
respond_with resource, location: after_sign_up_path_for(resource)
else

View File

@@ -1,3 +1,10 @@
# frozen_string_literal: true
require "spree/core/controller_helpers/auth"
require "spree/core/controller_helpers/common"
require "spree/core/controller_helpers/order"
require "spree/core/controller_helpers/ssl"
module Spree
class UserSessionsController < Devise::SessionsController
helper 'spree/base', 'spree/store'
@@ -39,8 +46,18 @@ module Spree
end
end
def destroy
# Logout will clear session data including shopfront_redirect
# Here we store it before actually logging out so that the redirect works correctly
@shopfront_redirect = session[:shopfront_redirect]
super
end
private
attr_reader :shopfront_redirect
def accurate_title
Spree.t(:login)
end

View File

@@ -59,7 +59,7 @@ module Spree
if @user
authorize! params[:action].to_sym, @user
else
redirect_to spree.login_path
redirect_to main_app.login_path
end
end

View File

@@ -44,9 +44,10 @@ class UserConfirmationsController < DeviseController
'not_confirmed'
end
if resource.reset_password_token.present?
if result == 'confirmed' && resource.reset_password_token.present?
raw_reset_password_token = resource.regenerate_reset_password_token
return spree.edit_spree_user_password_path(
reset_password_token: resource.reset_password_token
reset_password_token: raw_reset_password_token
)
end

View File

@@ -10,7 +10,7 @@ class UserPasswordsController < Spree::UserPasswordsController
if resource.errors.empty?
set_flash_message(:success, :send_instructions) if is_navigational_format?
respond_with resource, location: spree.login_path
respond_with resource, location: main_app.login_path
else
respond_to do |format|
format.html do

View File

@@ -16,7 +16,6 @@ class UserRegistrationsController < Spree::UserRegistrationsController
return render_error(@user.errors)
end
session[:spree_user_signup] = true
session[:confirmation_return_url] = params[:return_url]
associate_user

View File

@@ -45,27 +45,33 @@ class SubscriptionConfirmJob
def confirm_order!(order)
record_order(order)
if process_payment!(order)
send_confirmation_email(order)
else
process_payment!(order)
send_confirmation_email(order)
rescue StandardError => e
if order.errors.any?
send_failed_payment_email(order)
else
Bugsnag.notify(e, order: order)
send_failed_payment_email(order, e.message)
end
end
# Process the order payment and raise if it's not successful
def process_payment!(order)
return false if order.errors.present?
return true unless order.payment_required?
raise if order.errors.present?
return unless order.payment_required?
prepare_for_payment!(order)
order.process_payments!
raise if order.errors.any?
end
def prepare_for_payment!(order)
setup_payment!(order)
return false if order.errors.any?
raise if order.errors.any?
authorize_payment!(order)
return false if order.errors.any?
order.process_payments!
return false if order.errors.any?
true
raise if order.errors.any?
end
def setup_payment!(order)
@@ -87,9 +93,11 @@ class SubscriptionConfirmJob
SubscriptionMailer.confirmation_email(order).deliver
end
def send_failed_payment_email(order)
def send_failed_payment_email(order, error_message = nil)
order.update!
record_and_log_error(:failed_payment, order)
record_and_log_error(:failed_payment, order, error_message)
SubscriptionMailer.failed_payment_email(order).deliver
rescue StandardError => e
Bugsnag.notify(e, order: order, error_message: error_message)
end
end

View File

@@ -29,10 +29,16 @@ class SubscriptionPlacementJob
def place_order_for(proxy_order)
JobLogger.logger.info("Placing Order for Proxy Order #{proxy_order.id}")
proxy_order.initialise_order!
initialise_order(proxy_order)
place_order(proxy_order.order)
end
def initialise_order(proxy_order)
proxy_order.initialise_order!
rescue StandardError => e
Bugsnag.notify(e, subscription: proxy_order.subscription, proxy_order: proxy_order)
end
def place_order(order)
record_order(order)
return record_issue(:complete, order) if order.completed?
@@ -42,8 +48,9 @@ class SubscriptionPlacementJob
move_to_completion(order)
send_placement_email(order, changes)
rescue StateMachine::InvalidTransition
record_and_log_error(:processing, order)
rescue StandardError => e
record_and_log_error(:processing, order, e.message)
Bugsnag.notify(e, order: order)
end
def cap_quantity_and_store_changes(order)
@@ -66,7 +73,7 @@ class SubscriptionPlacementJob
end
def move_to_completion(order)
AdvanceOrderService.new(order).call!
OrderWorkflow.new(order).complete!
end
def unavailable_stock_lines_for(order)

View File

@@ -0,0 +1,26 @@
# frozen_string_literal: true
module Spree
class BaseMailer < ActionMailer::Base
# Inline stylesheets
include Roadie::Rails::Automatic
layout 'mailer'
def from_address
Spree::Config[:mails_from]
end
def money(amount)
Spree::Money.new(amount).to_s
end
helper_method :money
protected
def roadie_options
# This lets us specify assets using relative paths in email templates
super.merge(url_options: { host: URI(main_app.root_url).host })
end
end
end

View File

@@ -1,14 +0,0 @@
Spree::BaseMailer.class_eval do
# Inline stylesheets
include Roadie::Rails::Automatic
# Define layout
layout 'mailer'
protected
def roadie_options
# This lets us specify assets using relative paths in email templates
super.merge(url_options: { host: URI(main_app.root_url).host })
end
end

View File

@@ -0,0 +1,68 @@
# frozen_string_literal: true
module Spree
class OrderMailer < BaseMailer
helper HtmlHelper
helper ::CheckoutHelper
helper SpreeCurrencyHelper
helper OrderHelper
include I18nHelper
def cancel_email(order_or_order_id, resend = false)
@order = find_order(order_or_order_id)
I18n.with_locale valid_locale(@order.user) do
mail(to: @order.email,
from: from_address,
subject: mail_subject(t('spree.order_mailer.cancel_email.subject'), resend))
end
end
def confirm_email_for_customer(order_or_order_id, resend = false)
@order = find_order(order_or_order_id)
I18n.with_locale valid_locale(@order.user) do
subject = mail_subject(t('spree.order_mailer.confirm_email.subject'), resend)
mail(to: @order.email,
from: from_address,
subject: subject,
reply_to: @order.distributor.contact.email)
end
end
def confirm_email_for_shop(order_or_order_id, resend = false)
@order = find_order(order_or_order_id)
I18n.with_locale valid_locale(@order.user) do
subject = mail_subject(t('spree.order_mailer.confirm_email.subject'), resend)
mail(to: @order.distributor.contact.email,
from: from_address,
subject: subject)
end
end
def invoice_email(order_or_order_id, pdf)
@order = find_order(order_or_order_id)
attach_file("invoice-#{@order.number}.pdf", pdf)
I18n.with_locale valid_locale(@order.user) do
mail(to: @order.email,
from: from_address,
subject: mail_subject(t(:invoice), false),
reply_to: @order.distributor.contact.email)
end
end
private
# Finds an order instance from an order or from an order id
def find_order(order_or_order_id)
order_or_order_id.respond_to?(:id) ? order_or_order_id : Spree::Order.find(order_or_order_id)
end
def mail_subject(base_subject, resend)
resend_prefix = (resend ? "[#{t(:resend).upcase}] " : '')
"#{resend_prefix}#{Spree::Config[:site_name]} #{base_subject} ##{@order.number}"
end
def attach_file(filename, file)
attachments[filename] = file if file.present?
end
end
end

View File

@@ -1,64 +0,0 @@
Spree::OrderMailer.class_eval do
helper HtmlHelper
helper CheckoutHelper
helper SpreeCurrencyHelper
helper OrderHelper
include I18nHelper
def cancel_email(order_or_order_id, resend = false)
@order = find_order(order_or_order_id)
I18n.with_locale valid_locale(@order.user) do
mail(to: @order.email,
from: from_address,
subject: mail_subject(t('spree.order_mailer.cancel_email.subject'), resend))
end
end
def confirm_email_for_customer(order_or_order_id, resend = false)
@order = find_order(order_or_order_id)
I18n.with_locale valid_locale(@order.user) do
subject = mail_subject(t('spree.order_mailer.confirm_email.subject'), resend)
mail(to: @order.email,
from: from_address,
subject: subject,
reply_to: @order.distributor.contact.email)
end
end
def confirm_email_for_shop(order_or_order_id, resend = false)
@order = find_order(order_or_order_id)
I18n.with_locale valid_locale(@order.user) do
subject = mail_subject(t('spree.order_mailer.confirm_email.subject'), resend)
mail(to: @order.distributor.contact.email,
from: from_address,
subject: subject)
end
end
def invoice_email(order_or_order_id, pdf)
@order = find_order(order_or_order_id)
attach_file("invoice-#{@order.number}.pdf", pdf)
I18n.with_locale valid_locale(@order.user) do
mail(to: @order.email,
from: from_address,
subject: mail_subject(t(:invoice), false),
reply_to: @order.distributor.contact.email)
end
end
private
# Finds an order instance from an order or from an order id
def find_order(order_or_order_id)
order_or_order_id.respond_to?(:id) ? order_or_order_id : Spree::Order.find(order_or_order_id)
end
def mail_subject(base_subject, resend)
resend_prefix = (resend ? "[#{t(:resend).upcase}] " : '')
"#{resend_prefix}#{Spree::Config[:site_name]} #{base_subject} ##{@order.number}"
end
def attach_file(filename, file)
attachments[filename] = file if file.present?
end
end

View File

@@ -0,0 +1,13 @@
# frozen_string_literal: true
module Spree
class ShipmentMailer < BaseMailer
def shipped_email(shipment, resend = false)
@shipment = shipment.respond_to?(:id) ? shipment : Spree::Shipment.find(shipment)
subject = (resend ? "[#{Spree.t(:resend).upcase}] " : '')
base_subject = t('spree.shipment_mailer.shipped_email.subject')
subject += "#{Spree::Config[:site_name]} #{base_subject} ##{@shipment.order.number}"
mail(to: @shipment.order.email, from: from_address, subject: subject)
end
end
end

View File

@@ -0,0 +1,11 @@
# frozen_string_literal: true
module Spree
class TestMailer < BaseMailer
def test_email(user)
recipient = user.respond_to?(:id) ? user : Spree.user_class.find(user)
subject = "#{Spree::Config[:site_name]} #{t('spree.test_mailer.test_email.subject')}"
mail(to: recipient.email, from: from_address, subject: subject)
end
end
end

View File

@@ -5,12 +5,11 @@ module Spree
include I18nHelper
# Overrides `Devise::Mailer.reset_password_instructions`
def reset_password_instructions(user)
recipient = user.respond_to?(:id) ? user : Spree.user_class.find(user)
def reset_password_instructions(user, token, _opts = {})
@edit_password_reset_url = spree.
edit_spree_user_password_url(reset_password_token: recipient.reset_password_token)
edit_spree_user_password_url(reset_password_token: token)
mail(to: recipient.email, from: from_address,
mail(to: user.email, from: from_address,
subject: Spree::Config[:site_name] + ' ' +
I18n.t(:subject, scope: [:devise, :mailer, :reset_password_instructions]))
end
@@ -25,8 +24,9 @@ module Spree
end
# Overrides `Devise::Mailer.confirmation_instructions`
def confirmation_instructions(user, _opts)
def confirmation_instructions(user, token, _opts = {})
@user = user
@token = token
@instance = Spree::Config[:site_name]
@contact = ContentConfig.footer_email

View File

@@ -21,6 +21,8 @@ class ContentConfiguration < Spree::Preferences::FileConfiguration
preference :open_street_map_enabled, :boolean, default: false
preference :open_street_map_provider_name, :string, default: "OpenStreetMap.Mapnik"
preference :open_street_map_provider_options, :text, default: "{}"
preference :open_street_map_default_latitude, :string, default: "-37.4713077"
preference :open_street_map_default_longitude, :string, default: "144.7851531"
# Producer sign-up page
# All the following defaults using I18n don't work.

View File

@@ -1,92 +0,0 @@
require 'delegate'
class OrderUpdater < SimpleDelegator
# TODO: This logic adapted from Spree 2.4, remove when we get there
# Handles state updating in a much more logical way than < 2.4
# Specifically, doesn't depend on payments.last to determine payment state
# Also swapped: == 0 for .zero?, .size == 0 for empty? and .size > 0 for !empty?
# See:
# https://github.com/spree/spree/commit/38b8456183d11fc1e00e395e7c9154c76ef65b85
# https://github.com/spree/spree/commit/7b264acff7824f5b3dc6651c106631d8f30b147a
def update_payment_state
last_payment_state = order.payment_state
order.payment_state = infer_payment_state
track_payment_state_change(last_payment_state)
order.payment_state
end
def before_save_hook
shipping_address_from_distributor
end
# Sets the distributor's address as shipping address of the order for those
# shipments using a shipping method that doesn't require address, such us
# a pickup.
def shipping_address_from_distributor
return if order.shipping_method.blank? || order.shipping_method.require_ship_address
order.ship_address = order.address_from_distributor
end
private
def infer_payment_state
if failed_payments?
'failed'
elsif canceled_and_not_paid_for?
'void'
else
infer_payment_state_from_balance
end
end
def infer_payment_state_from_balance
# This part added so that we don't need to override
# order.outstanding_balance
balance = order.outstanding_balance
balance = -1 * order.payment_total if canceled_and_paid_for?
infer_state(balance)
end
def infer_state(balance)
if balance > 0
'balance_due'
elsif balance < 0
'credit_owed'
elsif balance.zero?
'paid'
end
end
# Tracks the state transition through a state_change for this order. It
# does so until the last state is reached. That is, when the infered next
# state is the same as the order has now.
#
# @param last_payment_state [String]
def track_payment_state_change(last_payment_state)
return if last_payment_state == order.payment_state
order.state_changed('payment')
end
# Taken from order.outstanding_balance in Spree 2.4
# See: https://github.com/spree/spree/commit/7b264acff7824f5b3dc6651c106631d8f30b147a
def canceled_and_paid_for?
order.canceled? && paid?
end
def canceled_and_not_paid_for?
order.state == 'canceled' && order.payment_total.zero?
end
def paid?
payments.present? && !payments.completed.empty?
end
def failed_payments?
payments.present? && payments.valid.empty?
end
end

View File

@@ -10,7 +10,9 @@ module PreferenceSections
[
:open_street_map_enabled,
:open_street_map_provider_name,
:open_street_map_provider_options
:open_street_map_provider_options,
:open_street_map_default_latitude,
:open_street_map_default_longitude
]
end
end

View File

@@ -0,0 +1,191 @@
# frozen_string_literal: true
module Spree
class Order < ActiveRecord::Base
module Checkout
def self.included(klass)
klass.class_eval do
class_attribute :next_event_transitions
class_attribute :previous_states
class_attribute :checkout_flow
class_attribute :checkout_steps
class_attribute :removed_transitions
def self.checkout_flow(&block)
if block_given?
@checkout_flow = block
define_state_machine!
else
@checkout_flow
end
end
def self.define_state_machine!
self.checkout_steps = {}
self.next_event_transitions = []
self.previous_states = [:cart]
self.removed_transitions = []
# Build the checkout flow using the checkout_flow defined either
# within the Order class, or a decorator for that class.
#
# This method may be called multiple times depending on if the
# checkout_flow is re-defined in a decorator or not.
instance_eval(&checkout_flow)
klass = self
# To avoid a ton of warnings when the state machine is re-defined
StateMachine::Machine.ignore_method_conflicts = true
# To avoid multiple occurrences of the same transition being defined
# On first definition, state_machines will not be defined
state_machines.clear if respond_to?(:state_machines)
state_machine :state, initial: :cart do
klass.next_event_transitions.each { |t| transition(t.merge(on: :next)) }
# Persist the state on the order
after_transition do |order|
order.state = order.state
order.save
end
event :cancel do
transition to: :canceled, if: :allow_cancel?
end
event :return do
transition to: :returned, from: :awaiting_return, unless: :awaiting_returns?
end
event :resume do
transition to: :resumed, from: :canceled, if: :allow_resume?
end
event :authorize_return do
transition to: :awaiting_return
end
if states[:payment]
before_transition to: :complete do |order|
order.process_payments! if order.payment_required?
end
end
before_transition from: :cart, do: :ensure_line_items_present
before_transition to: :delivery, do: :create_proposed_shipments
before_transition to: :delivery, do: :ensure_available_shipping_rates
after_transition to: :complete, do: :finalize!
after_transition to: :delivery, do: :create_tax_charge!
after_transition to: :resumed, do: :after_resume
after_transition to: :canceled, do: :after_cancel
end
end
def self.go_to_state(name, options = {})
checkout_steps[name] = options
previous_states.each do |state|
add_transition({ from: state, to: name }.merge(options))
end
if options[:if]
previous_states << name
else
self.previous_states = [name]
end
end
def self.insert_checkout_step(name, options = {})
before = options.delete(:before)
after = options.delete(:after) unless before
after = checkout_steps.keys.last unless before || after
cloned_steps = checkout_steps.clone
cloned_removed_transitions = removed_transitions.clone
checkout_flow do
cloned_steps.each_pair do |key, value|
go_to_state(name, options) if key == before
go_to_state(key, value)
go_to_state(name, options) if key == after
end
cloned_removed_transitions.each do |transition|
remove_transition(transition)
end
end
end
def self.remove_checkout_step(name)
cloned_steps = checkout_steps.clone
cloned_removed_transitions = removed_transitions.clone
checkout_flow do
cloned_steps.each_pair do |key, value|
go_to_state(key, value) unless key == name
end
cloned_removed_transitions.each do |transition|
remove_transition(transition)
end
end
end
def self.remove_transition(options = {})
removed_transitions << options
next_event_transitions.delete(find_transition(options))
end
def self.find_transition(options = {})
return nil if options.nil? || !options.include?(:from) || !options.include?(:to)
next_event_transitions.detect do |transition|
transition[options[:from].to_sym] == options[:to].to_sym
end
end
def self.next_event_transitions
@next_event_transitions ||= []
end
def self.checkout_steps
@checkout_steps ||= {}
end
def self.add_transition(options)
next_event_transitions << { options.delete(:from) => options.delete(:to) }.
merge(options)
end
def checkout_steps
steps = self.class.checkout_steps.
each_with_object([]) { |(step, options), checkout_steps|
next if options.include?(:if) && !options[:if].call(self)
checkout_steps << step
}.map(&:to_s)
# Ensure there is always a complete step
steps << "complete" unless steps.include?("complete")
steps
end
def checkout_step?(step)
step.present? ? checkout_steps.include?(step) : false
end
def checkout_step_index(step)
checkout_steps.index(step)
end
def self.removed_transitions
@removed_transitions ||= []
end
def can_go_to_state?(state)
return false unless self.state.present? &&
checkout_step?(state) &&
checkout_step?(self.state)
checkout_step_index(state) > checkout_step_index(self.state)
end
end
end
end
end
end

View File

@@ -89,6 +89,10 @@ Spree::Order.class_eval do
where("state != ?", state)
}
def updater
@updater ||= OrderManagement::Order::Updater.new(self)
end
def create_proposed_shipments
adjustments.shipping.delete_all
shipments.destroy_all
@@ -374,6 +378,13 @@ Spree::Order.class_eval do
address
end
# Update attributes of a record in the database without callbacks, validations etc.
# This was originally an extension to ActiveRecord in Spree but only used for Spree::Order
def update_attributes_without_callbacks(attributes)
assign_attributes(attributes)
Spree::Order.where(id: id).update_all(attributes)
end
private
def adjustments_fetcher

View File

@@ -1,8 +0,0 @@
# frozen_string_literal: true
Spree::OrderUpdater.class_eval do
# Override spree method to make it update all adjustments as in Spree v2.0.4
def update_shipping_adjustments
order.adjustments.reload.each(&:update!)
end
end

216
app/models/spree/payment.rb Normal file
View File

@@ -0,0 +1,216 @@
# frozen_string_literal: true
module Spree
class Payment < ActiveRecord::Base
include Spree::Payment::Processing
extend Spree::LocalizedNumber
localize_number :amount
IDENTIFIER_CHARS = (('A'..'Z').to_a + ('0'..'9').to_a - %w(0 1 I O)).freeze
delegate :line_items, to: :order
delegate :currency, to: :order
belongs_to :order, class_name: 'Spree::Order'
belongs_to :source, polymorphic: true
belongs_to :payment_method, class_name: 'Spree::PaymentMethod'
has_many :offsets, -> { where("source_type = 'Spree::Payment' AND amount < 0").completed },
class_name: "Spree::Payment", foreign_key: :source_id
has_many :log_entries, as: :source, dependent: :destroy
has_one :adjustment, as: :source, dependent: :destroy
validate :validate_source
before_save :set_unique_identifier
after_save :create_payment_profile, if: :profiles_supported?
# update the order totals, etc.
after_save :ensure_correct_adjustment, :update_order
# invalidate previously entered payments
after_create :invalidate_old_payments
# Skips the validation of the source (for example, credit card) of the payment.
#
# This is used in refunds as the validation of the card can fail but the refund can go through,
# we trust the payment gateway in these cases. For example, Stripe is accepting refunds with
# source cards that were valid when the payment was placed but are now expired, and we
# consider them invalid.
attr_accessor :skip_source_validation
attr_accessor :source_attributes
after_initialize :build_source
scope :from_credit_card, -> { where(source_type: 'Spree::CreditCard') }
scope :with_state, ->(s) { where(state: s.to_s) }
scope :completed, -> { with_state('completed') }
scope :pending, -> { with_state('pending') }
scope :failed, -> { with_state('failed') }
scope :valid, -> { where('state NOT IN (?)', %w(failed invalid)) }
# order state machine (see http://github.com/pluginaweek/state_machine/tree/master for details)
state_machine initial: :checkout do
# With card payments, happens before purchase or authorization happens
event :started_processing do
transition from: [:checkout, :pending, :completed, :processing], to: :processing
end
# When processing during checkout fails
event :failure do
transition from: [:pending, :processing], to: :failed
end
# With card payments this represents authorizing the payment
event :pend do
transition from: [:checkout, :processing], to: :pending
end
# With card payments this represents completing a purchase or capture transaction
event :complete do
transition from: [:processing, :pending, :checkout], to: :completed
end
event :void do
transition from: [:pending, :completed, :checkout], to: :void
end
# when the card brand isnt supported
event :invalidate do
transition from: [:checkout], to: :invalid
end
end
def money
Spree::Money.new(amount, currency: currency)
end
alias display_amount money
def offsets_total
offsets.pluck(:amount).sum
end
def credit_allowed
amount - offsets_total
end
def can_credit?
credit_allowed.positive?
end
def build_source
return if source_attributes.nil?
return unless payment_method.andand.payment_source_class
self.source = payment_method.payment_source_class.new(source_attributes)
source.payment_method_id = payment_method.id
source.user_id = order.user_id if order
end
# Pin payments lacks void and credit methods, but it does have refund
# Here we swap credit out for refund and remove void as a possible action
def actions
return [] unless payment_source&.respond_to?(:actions)
actions = payment_source.actions.select do |action|
!payment_source.respond_to?("can_#{action}?") ||
payment_source.__send__("can_#{action}?", self)
end
if payment_method.is_a? Gateway::Pin
actions << 'refund' if actions.include? 'credit'
actions.reject! { |a| ['credit', 'void'].include? a }
end
actions
end
def payment_source
res = source.is_a?(Payment) ? source.source : source
res || payment_method
end
def ensure_correct_adjustment
revoke_adjustment_eligibility if ['failed', 'invalid'].include?(state)
return if adjustment.try(:finalized?)
if adjustment
adjustment.originator = payment_method
adjustment.label = adjustment_label
adjustment.save
else
payment_method.create_adjustment(adjustment_label, order, self, true)
association(:adjustment).reload
end
end
def adjustment_label
I18n.t('payment_method_fee')
end
private
# Don't charge fees for invalid or failed payments.
# This is called twice for failed payments, because the persistence of the 'failed'
# state is acheived through some trickery using an after_rollback callback on the
# payment model. See Spree::Payment#persist_invalid
def revoke_adjustment_eligibility
return unless adjustment.try(:reload)
return if adjustment.finalized?
adjustment.update_attribute(:eligible, false)
adjustment.finalize!
end
def validate_source
if source && !skip_source_validation && !source.valid?
source.errors.each do |field, error|
field_name = I18n.t("activerecord.attributes.#{source.class.to_s.underscore}.#{field}")
errors.add(Spree.t(source.class.to_s.demodulize.underscore), "#{field_name} #{error}")
end
end
errors.blank?
end
def profiles_supported?
payment_method.respond_to?(:payment_profiles_supported?) &&
payment_method.payment_profiles_supported?
end
def create_payment_profile
return unless source.is_a?(CreditCard)
return unless source.try(:save_requested_by_customer?)
return unless source.number || source.gateway_payment_profile_id
return unless source.gateway_customer_profile_id.nil?
payment_method.create_profile(self)
rescue ActiveMerchant::ConnectionError => e
gateway_error e
end
# Makes newly entered payments invalidate previously entered payments so the most recent payment
# is used by the gateway.
def invalidate_old_payments
order.payments.with_state('checkout').where.not(id: id).each do |payment|
# Using update_column skips validations and so it skips validate_source. As we are just
# invalidating past payments here, we don't want to validate all of them at this stage.
payment.update_column(:state, 'invalid')
payment.ensure_correct_adjustment
end
end
def update_order
order.payments.reload
order.update!
end
# Necessary because some payment gateways will refuse payments with
# duplicate IDs. We *were* using the Order number, but that's set once and
# is unchanging. What we need is a unique identifier on a per-payment basis,
# and this is it. Related to #1998.
# See https://github.com/spree/spree/issues/1998#issuecomment-12869105
def set_unique_identifier
self.identifier = generate_identifier while self.class.exists?(identifier: identifier)
end
def generate_identifier
Array.new(8){ IDENTIFIER_CHARS.sample }.join
end
end
end

View File

@@ -0,0 +1,277 @@
# frozen_string_literal: true
module Spree
class Payment < ActiveRecord::Base
module Processing
def process!
return unless payment_method&.source_required?
raise Core::GatewayError, Spree.t(:payment_processing_failed) unless source
return if processing?
unless payment_method.supports?(source)
invalidate!
raise Core::GatewayError, Spree.t(:payment_method_not_supported)
end
if payment_method.auto_capture?
purchase!
else
authorize!
end
end
def authorize!
started_processing!
gateway_action(source, :authorize, :pend)
end
def purchase!
started_processing!
gateway_action(source, :purchase, :complete)
end
def capture!
return true if completed?
started_processing!
protect_from_connection_error do
check_environment
response = if payment_method.payment_profiles_supported?
# Gateways supporting payment profiles will need access to credit
# card object because this stores the payment profile information
# so supply the authorization itself as well as the credit card,
# rather than just the authorization code
payment_method.capture(self, source, gateway_options)
else
# Standard ActiveMerchant capture usage
payment_method.capture(money.money.cents,
response_code,
gateway_options)
end
handle_response(response, :complete, :failure)
end
end
def void_transaction!
return true if void?
protect_from_connection_error do
check_environment
response = if payment_method.payment_profiles_supported?
# Gateways supporting payment profiles will need access to credit
# card object because this stores the payment profile information
# so supply the authorization itself as well as the credit card,
# rather than just the authorization code
payment_method.void(response_code, source, gateway_options)
else
# Standard ActiveMerchant void usage
payment_method.void(response_code, gateway_options)
end
record_response(response)
if response.success?
self.response_code = response.authorization
void
else
gateway_error(response)
end
end
end
def credit!(credit_amount = nil)
protect_from_connection_error do
check_environment
credit_amount = calculate_refund_amount(credit_amount)
response = if payment_method.payment_profiles_supported?
payment_method.credit(
(credit_amount * 100).round,
source,
response_code,
gateway_options
)
else
payment_method.credit(
(credit_amount * 100).round,
response_code,
gateway_options
)
end
record_response(response)
if response.success?
self.class.create!(
order: order,
source: self,
payment_method: payment_method,
amount: credit_amount.abs * -1,
response_code: response.authorization,
state: 'completed',
skip_source_validation: true
)
else
gateway_error(response)
end
end
end
def refund!(refund_amount = nil)
protect_from_connection_error do
check_environment
refund_amount = calculate_refund_amount(refund_amount)
response = if payment_method.payment_profiles_supported?
payment_method.refund(
(refund_amount * 100).round,
source,
response_code,
gateway_options
)
else
payment_method.refund(
(refund_amount * 100).round,
response_code,
gateway_options
)
end
record_response(response)
if response.success?
self.class.create!(
order: order,
source: self,
payment_method: payment_method,
amount: refund_amount.abs * -1,
response_code: response.authorization,
state: 'completed',
skip_source_validation: true
)
else
gateway_error(response)
end
end
end
def partial_credit(amount)
return if amount > credit_allowed
started_processing!
credit!(amount)
end
def gateway_options
options = { email: order.email,
customer: order.email,
ip: order.last_ip_address,
# Need to pass in a unique identifier here to make some
# payment gateways happy.
#
# For more information, please see Spree::Payment#set_unique_identifier
order_id: gateway_order_id }
options.merge!({ shipping: order.ship_total * 100,
tax: order.tax_total * 100,
subtotal: order.item_total * 100,
discount: order.promo_total * 100,
currency: currency })
options.merge!({ billing_address: order.bill_address.try(:active_merchant_hash),
shipping_address: order.ship_address.try(:active_merchant_hash) })
options
end
private
def calculate_refund_amount(refund_amount = nil)
refund_amount ||= if credit_allowed >= order.outstanding_balance.abs
order.outstanding_balance.abs
else
credit_allowed.abs
end
refund_amount.to_f
end
def gateway_action(source, action, success_state)
protect_from_connection_error do
check_environment
response = payment_method.public_send(
action,
(amount * 100).round,
source,
gateway_options
)
handle_response(response, success_state, :failure)
end
end
def handle_response(response, success_state, failure_state)
record_response(response)
if response.success?
unless response.authorization.nil?
self.response_code = response.authorization
self.avs_response = response.avs_result['code']
if response.cvv_result
self.cvv_response_code = response.cvv_result['code']
self.cvv_response_message = response.cvv_result['message']
end
end
__send__("#{success_state}!")
else
__send__(failure_state)
gateway_error(response)
end
end
def record_response(response)
log_entries.create(details: response.to_yaml)
end
def protect_from_connection_error
yield
rescue ActiveMerchant::ConnectionError => e
gateway_error(e)
end
def gateway_error(error)
text = if error.is_a? ActiveMerchant::Billing::Response
error.params['message'] || error.params['response_reason_text'] || error.message
elsif error.is_a? ActiveMerchant::ConnectionError
Spree.t(:unable_to_connect_to_gateway)
else
error.to_s
end
logger.error(Spree.t(:gateway_error))
logger.error(" #{error.to_yaml}")
raise Core::GatewayError, text
end
# Saftey check to make sure we're not accidentally performing operations on a live gateway.
# Ex. When testing in staging environment with a copy of production data.
def check_environment
return if payment_method.environment == Rails.env
message = Spree.t(:gateway_config_unavailable) + " - #{Rails.env}"
raise Core::GatewayError, message
end
# The unique identifier to be passed in to the payment gateway
def gateway_order_id
"#{order.number}-#{identifier}"
end
end
end
end

View File

@@ -1,117 +0,0 @@
require 'spree/localized_number'
module Spree
Payment.class_eval do
extend Spree::LocalizedNumber
delegate :line_items, to: :order
has_one :adjustment, as: :source, dependent: :destroy
after_save :ensure_correct_adjustment, :update_order
localize_number :amount
# We bypass this after_rollback callback that is setup in Spree::Payment
# The issues the callback fixes are not experienced in OFN:
# if a payment fails on checkout the state "failed" is persisted correctly
def persist_invalid; end
def ensure_correct_adjustment
revoke_adjustment_eligibility if ['failed', 'invalid'].include?(state)
return if adjustment.try(:finalized?)
if adjustment
adjustment.originator = payment_method
adjustment.label = adjustment_label
adjustment.save
else
payment_method.create_adjustment(adjustment_label, order, self, true)
association(:adjustment).reload
end
end
def adjustment_label
I18n.t('payment_method_fee')
end
# Pin payments lacks void and credit methods, but it does have refund
# Here we swap credit out for refund and remove void as a possible action
def actions_with_pin_payment_adaptations
actions = actions_without_pin_payment_adaptations
if payment_method.is_a? Gateway::Pin
actions << 'refund' if actions.include? 'credit'
actions.reject! { |a| ['credit', 'void'].include? a }
end
actions
end
alias_method_chain :actions, :pin_payment_adaptations
def refund!(refund_amount = nil)
protect_from_connection_error do
check_environment
refund_amount = calculate_refund_amount(refund_amount)
if payment_method.payment_profiles_supported?
response = payment_method.refund((refund_amount * 100).round, source, response_code, gateway_options)
else
response = payment_method.refund((refund_amount * 100).round, response_code, gateway_options)
end
record_response(response)
if response.success?
self.class.create(order: order,
source: self,
payment_method: payment_method,
amount: refund_amount.abs * -1,
response_code: response.authorization,
state: 'completed')
else
gateway_error(response)
end
end
end
# Import from future Spree v.2.3.0 d470b31798f37
def build_source
return if source_attributes.nil?
return unless payment_method.andand.payment_source_class
self.source = payment_method.payment_source_class.new(source_attributes)
source.payment_method_id = payment_method.id
source.user_id = order.user_id if order
end
private
def calculate_refund_amount(refund_amount = nil)
refund_amount ||= credit_allowed >= order.outstanding_balance.abs ? order.outstanding_balance.abs : credit_allowed.abs
refund_amount.to_f
end
def create_payment_profile
return unless source.is_a?(CreditCard)
return unless source.try(:save_requested_by_customer?)
return unless source.number || source.gateway_payment_profile_id
return unless source.gateway_customer_profile_id.nil?
payment_method.create_profile(self)
rescue ActiveMerchant::ConnectionError => e
gateway_error e
end
# Don't charge fees for invalid or failed payments.
# This is called twice for failed payments, because the persistence of the 'failed'
# state is acheived through some trickery using an after_rollback callback on the
# payment model. See Spree::Payment#persist_invalid
def revoke_adjustment_eligibility
return unless adjustment.try(:reload)
return if adjustment.finalized?
adjustment.update_attribute(:eligible, false)
adjustment.finalize!
end
end
end

View File

@@ -63,8 +63,7 @@ Spree::Product.class_eval do
scope :visible_for, lambda { |enterprise|
joins('LEFT OUTER JOIN spree_variants AS o_spree_variants ON (o_spree_variants.product_id = spree_products.id)').
joins('LEFT OUTER JOIN inventory_items AS o_inventory_items ON (o_spree_variants.id = o_inventory_items.variant_id)').
where('o_inventory_items.enterprise_id = (?) AND visible = (?)', enterprise, true).
select('DISTINCT spree_products.*')
where('o_inventory_items.enterprise_id = (?) AND visible = (?)', enterprise, true)
}
# -- Scopes

View File

@@ -0,0 +1,58 @@
# frozen_string_literal: true
module Spree
class StockItem < ActiveRecord::Base
acts_as_paranoid
belongs_to :stock_location, class_name: 'Spree::StockLocation'
belongs_to :variant, class_name: 'Spree::Variant'
has_many :stock_movements, dependent: :destroy
validates :stock_location, :variant, presence: true
validates :variant_id, uniqueness: { scope: [:stock_location_id, :deleted_at] }
validates :count_on_hand, numericality: { greater_than_or_equal_to: 0, unless: :backorderable? }
delegate :weight, to: :variant
delegate :name, to: :variant, prefix: true
def backordered_inventory_units
Spree::InventoryUnit.backordered_for_stock_item(self)
end
def adjust_count_on_hand(value)
with_lock do
self.count_on_hand = count_on_hand + value
process_backorders if in_stock?
save!
end
end
def in_stock?
count_on_hand.positive?
end
# Tells whether it's available to be included in a shipment
def available?
in_stock? || backorderable?
end
def variant
Spree::Variant.unscoped { super }
end
private
def count_on_hand=(value)
self[:count_on_hand] = value
end
def process_backorders
backordered_inventory_units.each do |unit|
break unless in_stock?
unit.fill_backorder
end
end
end
end

View File

@@ -1,9 +1,6 @@
Spree::Taxon.class_eval do
has_many :classifications, dependent: :destroy
attachment_definitions[:icon][:path] = 'public/images/spree/taxons/:id/:style/:basename.:extension'
attachment_definitions[:icon][:url] = '/images/spree/taxons/:id/:style/:basename.:extension'
# Indicate which filters should be used for this taxon
def applicable_filters
fs = []

View File

@@ -34,10 +34,6 @@ module Spree
# We use the same options as Spree and add :confirmable
devise :confirmable, reconfirmable: true
# TODO: Later versions of devise have a dedicated after_confirmation callback, so use that
after_update :welcome_after_confirm, if: lambda {
confirmation_token_changed? && confirmation_token.nil?
}
class DestroyWithOrdersError < StandardError; end
@@ -49,14 +45,14 @@ module Spree
has_spree_role?('admin')
end
def send_reset_password_instructions
generate_reset_password_token!
UserMailer.reset_password_instructions(id).deliver
end
# handle_asynchronously will define send_reset_password_instructions_with_delay.
# If handle_asynchronously is called twice, we get an infinite job loop.
handle_asynchronously :send_reset_password_instructions unless method_defined? :send_reset_password_instructions_with_delay
def regenerate_reset_password_token
set_reset_password_token
end
def known_users
if admin?
Spree::User.where(nil)
@@ -82,9 +78,9 @@ module Spree
customers.find_by(enterprise_id: enterprise)
end
def welcome_after_confirm
# Send welcome email if we are confirming an user's email
# Note: this callback only runs on email confirmation
# This is a Devise Confirmable callback that runs on email confirmation
# It sends a welcome email after the user email is confirmed
def after_confirmation
return unless confirmed? && unconfirmed_email.nil? && !unconfirmed_email_changed?
send_signup_confirmation

View File

@@ -30,9 +30,10 @@ class Api::Admin::ForOrderCycle::EnterpriseSerializer < ActiveModel::Serializer
def products_scope
products_relation = object.supplied_products
if order_cycle.prefers_product_selection_from_coordinator_inventory_only?
products_relation = products_relation.visible_for(order_cycle.coordinator)
products_relation = products_relation.
visible_for(order_cycle.coordinator)
end
products_relation.order(:name)
products_relation
end
def products

View File

@@ -4,7 +4,9 @@ module Api
class OpenStreetMapConfigSerializer < ActiveModel::Serializer
attributes :open_street_map_enabled,
:open_street_map_provider_name,
:open_street_map_provider_options
:open_street_map_provider_options,
:open_street_map_default_latitude,
:open_street_map_default_longitude
def open_street_map_enabled
ContentConfig.open_street_map_enabled
@@ -17,5 +19,13 @@ module Api
def open_street_map_provider_options
ContentConfig.open_street_map_provider_options.to_json
end
def open_street_map_default_latitude
ContentConfig.open_street_map_default_latitude
end
def open_street_map_default_longitude
ContentConfig.open_street_map_default_longitude
end
end
end

View File

@@ -1,11 +0,0 @@
class Api::TaxonImageSerializer < ActiveModel::Serializer
attributes :id, :alt, :small_url, :large_url
def small_url
object.attachment.url(:small, false)
end
def large_url
object.attachment.url(:large, false)
end
end

View File

@@ -2,9 +2,5 @@ class Api::TaxonSerializer < ActiveModel::Serializer
cached
delegate :cache_key, to: :object
attributes :id, :name, :permalink, :icon, :pretty_name, :position, :parent_id, :taxonomy_id
def icon
object.icon(:original)
end
attributes :id, :name, :permalink, :pretty_name, :position, :parent_id, :taxonomy_id
end

View File

@@ -1,43 +0,0 @@
class AdvanceOrderService
attr_reader :order
def initialize(order)
@order = order
end
def call
advance_order(advance_order_options)
end
def call!
advance_order!(advance_order_options)
end
private
def advance_order_options
shipping_method_id = order.shipping_method.id if order.shipping_method.present?
{ shipping_method_id: shipping_method_id }
end
def advance_order(options)
until order.state == "complete"
break unless order.next
after_transition_hook(options)
end
end
def advance_order!(options)
until order.completed?
order.next!
after_transition_hook(options)
end
end
def after_transition_hook(options)
if order.state == "delivery"
order.select_shipping_method(options[:shipping_method_id]) if options[:shipping_method_id]
end
end
end

View File

@@ -57,11 +57,12 @@ class OrderAdjustmentsFetcher
if adjustments_eager_loaded?
adjustment_scope = public_send("#{scope}_scope")
# Adjustments are already loaded here, this block is using `Array#select`
adjustments.select do |adjustment|
match_by_scope(adjustment, adjustment_scope)
match_by_scope(adjustment, adjustment_scope) && match_by_scope(adjustment, eligible_scope)
end
else
adjustments.where(nil).public_send scope
adjustments.where(nil).eligible.public_send scope
end
end

View File

@@ -0,0 +1,79 @@
class OrderWorkflow
attr_reader :order
def initialize(order)
@order = order
end
def complete
advance_order(advance_order_options)
end
def complete!
advance_order!(advance_order_options)
end
def next(options = {})
result = advance_order_one_step
after_transition_hook(options)
result
end
private
def advance_order_options
shipping_method_id = order.shipping_method.id if order.shipping_method.present?
{ shipping_method_id: shipping_method_id }
end
def advance_order(options)
until order.state == "complete"
break unless order.next
after_transition_hook(options)
end
end
def advance_order!(options)
until order.completed?
order.next!
after_transition_hook(options)
end
end
def advance_order_one_step
tries ||= 3
order.next
rescue ActiveRecord::StaleObjectError
retry unless (tries -= 1).zero?
false
end
def after_transition_hook(options)
if order.state == "delivery"
order.select_shipping_method(options[:shipping_method_id]) if options[:shipping_method_id]
end
persist_all_payments if order.state == "payment"
end
# When a payment fails, the order state machine stays in 'payment' and rollbacks all transactions
# This rollback also reverts the payment state from 'failed', 'void' or 'invalid' to 'pending'
# Despite the rollback, the in-memory payment still has the correct state, so we persist it
def persist_all_payments
order.payments.each do |payment|
in_memory_payment_state = payment.state
if different_from_db_payment_state?(in_memory_payment_state, payment.id)
payment.reload.update(state: in_memory_payment_state)
end
end
end
# Verifies if the in-memory payment state is different from the one stored in the database
# This is be done without reloading the payment so that in-memory data is not changed
def different_from_db_payment_state?(in_memory_payment_state, payment_id)
in_memory_payment_state != Spree::Payment.find(payment_id).state
end
end

View File

@@ -11,6 +11,7 @@ module PermittedAttributes
@params.require(:order_cycle).permit(
:name, :orders_open_at, :orders_close_at, :coordinator_id,
:preferred_product_selection_from_coordinator_inventory_only,
incoming_exchanges: permitted_exchange_attributes,
outgoing_exchanges: permitted_exchange_attributes,
schedule_ids: [], coordinator_fee_ids: []

View File

@@ -4,7 +4,7 @@
%a.button{ href: main_app.admin_subscriptions_path, ng: { show: "['details','review'].indexOf(view) >= 0" } }= t(:cancel)
%input{ type: "button", value: t(:back), ng: { click: 'back()', show: '!!backCallbacks[view]'} }
%input.red{ type: "button", value: t(:next), ng: { click: 'next()', show: '!!nextCallbacks[view]' } }
%input.red{ type: "submit", value: t('admin.subscriptions.create'), ng: { show: "view == 'review'" } }
%input.red{ type: "submit", value: t('.create'), ng: { show: "view == 'review'" } }
%div{ ng: { show: 'subscription.id' } }
%a.button{ href: main_app.admin_subscriptions_path }= t(:close)
%input.red{ type: "button", value: t(:review), ng: { click: "setView('review')", show: "view != 'review'" } }

View File

@@ -1,5 +1,5 @@
- content_for :page_title do
=t('admin.subscriptions.edit')
=t('.title')
-# - content_for :page_actions do
-# %li= button_link_to "Back to subscriptions list", main_app.admin_subscriptions_path, icon: 'icon-arrow-left'

View File

@@ -1,5 +1,5 @@
- content_for :page_title do
= t('admin.subscriptions.subscriptions')
= t('.title')
- content_for :main_ng_app_name do
= "admin.subscriptions"
@@ -7,7 +7,7 @@
- content_for :page_actions do
%li
%a.button.icon-plus#new-subscription{ href: "javascript:void(0)", "new-subscription-dialog" => true }
= t('admin.subscriptions.new')
= t('.new')
= render :partial => 'spree/admin/shared/order_sub_menu'

View File

@@ -1,7 +1,7 @@
-# = render :partial => 'spree/shared/error_messages', :locals => { :target => @enterprise }
- content_for :page_title do
=t('admin.subscriptions.new')
=t('.title')
-# - content_for :page_actions do
-# %li= button_link_to "Back to subscriptions list", main_app.admin_subscriptions_path, icon: 'icon-arrow-left'

View File

@@ -1,4 +1,4 @@
%h1.text-center.margin-bottom-30= t('admin.subscription.subscriptions')
%h1.text-center.margin-bottom-30= t('.title')
.row
.four.columns.alpha &nbsp;

View File

@@ -1,10 +1,8 @@
- bugsnag_js_key = ENV['BUGSNAG_JS_KEY'] || ENV['BUGSNAG_API_KEY']
- if bugsnag_js_key.present?
%script{src: "//d2wy8f7a9ursnm.cloudfront.net/v6/bugsnag.min.js"}
%script{src: "//d2wy8f7a9ursnm.cloudfront.net/v7/bugsnag.min.js"}
:javascript
window.bugsnagClient = bugsnag({
Bugsnag.start({
apiKey: "#{bugsnag_js_key}",
beforeSend: function (report) {
report.app.releaseStage = "#{Rails.env}"
}
});
releaseStage: "#{Rails.env}"
})

View File

@@ -9,7 +9,7 @@
%meta{name: "robots", content: "noindex"}
%title= content_for?(:title) ? "#{yield(:title)} - #{t(:title)}".html_safe : "#{t(:welcome_to)} #{t(:title)}"
- if Rails.env.production?
= favicon_link_tag
= favicon_link_tag "/favicon.ico"
- else
= favicon_link_tag "/favicon-staging.ico"
%link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"}

View File

@@ -5,7 +5,7 @@
%title= content_for?(:title) ? "#{yield(:title)} - #{Spree::Config[:site_name]}" : "#{t(:welcome_to)} #{Spree::Config[:site_name]}"
- if Rails.env.production?
= favicon_link_tag
= favicon_link_tag "/favicon.ico"
- else
= favicon_link_tag "/favicon-staging.ico"
%link{href: "https://fonts.googleapis.com/css?family=Roboto:400,300italic,400italic,300,700,700italic|Oswald:300,400,700", rel: "stylesheet", type: "text/css"}

View File

@@ -22,7 +22,6 @@
%p.trans-sentence
%div
%span.fat-taxons{"ng-repeat" => "taxon in producer.supplied_taxons"}
%render-svg{path: "{{taxon.icon}}"}
%span{"ng-bind" => "::taxon.name"}
%div
%span.fat-properties{"ng-repeat" => "property in producer.supplied_properties"}
@@ -79,8 +78,8 @@
.row.cta-container
.columns.small-12
%a.cta-hub{"ng-repeat" => "hub in producer.hubs | orderBy:'-active'",
"ng-href" => "{{::hub.path}}", "ng-attr-target" => "_blank",
"ng-class" => "::{primary: hub.active, secondary: !hub.active}", "target" => "_blank"}
"ng-href" => "{{::hub.path}}", "ng-attr-target" => "{{ embedded_layout ? '_blank' : undefined }}",
"ng-class" => "::{primary: hub.active, secondary: !hub.active}"}
%i.ofn-i_068-shop-reversed{"ng-if" => "::hub.active"}
%i.ofn-i_068-shop-reversed{"ng-if" => "::!hub.active"}
.hub-name{"ng-bind" => "::hub.name"}

View File

@@ -3,7 +3,7 @@
%span{"ng-if" => "::producer.is_distributor" }
.row.vertical-align-middle
.columns.small-12
%a.is_distributor{"ng-href" => "{{::producer.path}}", "ng-attr-target" => "_blank", "data-is-link" => "true", "target" => "_blank"}
%a.is_distributor{"ng-href" => "{{::producer.path}}", "ng-attr-target" => "{{ embedded_layout ? '_blank' : undefined}}", "data-is-link" => "true"}
%i{ng: {class: "::producer.producer_icon_font"}}
%span.margin-top
%strong{"ng-bind" => "::producer.name"}

View File

@@ -1,4 +1,4 @@
.expanding-sidebar.cart-sidebar{ng: {controller: 'CartCtrl', show: 'showCartSidebar', class: "{'shown': showCartSidebar, 'hidden': !showCartSidebar}"}}
.expanding-sidebar.cart-sidebar{ng: {controller: 'CartCtrl', class: "{'shown': showCartSidebar}"}}
.background{ng: {click: 'toggleCartSidebar()'}}
.sidebar
.cart-header

View File

@@ -6,7 +6,7 @@
type: 'search',
placeholder: t(:products_search),
"ng-debounce" => "200",
"ofn-disable-enter" => true}
"disable-enter-with-blur" => true}
%a.clear{type: 'button', ng: {show: 'query', click: 'clearQuery()'}, 'focus-search' => true}
= image_tag "icn-close.png"

View File

@@ -18,4 +18,3 @@
%span{"ng-bind" => "::enterprise.name"}
.small-2.medium-2.large-1.columns.text-center
.taxon-flag
%render-svg{path: "{{::product.primary_taxon.icon}}"}

View File

@@ -10,7 +10,6 @@
.trans-sentence
%div
%span.fat-taxons{"ng-repeat" => "taxon in hub.taxons"}
%render-svg{path: "{{taxon.icon}}"}
%span{"ng-bind" => "::taxon.name"}
%div
%span.fat-properties{"ng-repeat" => "property in hub.distributed_properties"}

View File

@@ -5,4 +5,4 @@
-# of the views we are using, so the warning below wasn't displaying without this override.
#paypal-warning
%strong= t('no_payment_via_admin_backend', :scope => 'paypal')
%strong= t('.no_payment_via_admin_backend', :scope => 'paypal')

View File

@@ -12,11 +12,6 @@
%br/
= @taxon.permalink.split("/")[0...-1].join("/") + "/"
= text_field_tag :permalink_part, @permalink_part
= f.field_container :icon do
= f.label :icon, t(:icon)
%br/
= f.file_field :icon
%img{src: @taxon.icon(:original)}
= f.field_container :meta_title do
= f.label :meta_title, t(:meta_title)
%br/

View File

@@ -66,4 +66,4 @@
%div{"data-hook" => "admin_footer_scripts"}
%script
= raw "Spree.api_key = \"#{try_spree_current_user.try(:spree_api_key).to_s}\";"
= raw "Spree.api_key = \"#{spree_current_user.try(:spree_api_key).to_s}\";"

View File

@@ -0,0 +1,30 @@
%p
= t('.dear_customer')
%p
= t('.instructions')
%p
= "============================================================"
%br
= t('.shipment_summary')
%br
= "============================================================"
%p
- @shipment.manifest.each do |item|
= item.variant.sku
= item.variant.product.name
= item.variant.options_text
%br
= "============================================================"
- if @shipment.tracking
%p
= t('.track_information', tracking: @shipment.tracking)
- if @shipment.tracking_url
%p
= t('.track_link', url: @shipment.tracking_url)
%p
= t('.thanks')

View File

@@ -0,0 +1,4 @@
= t('.greeting')
= "================"
= t('.message')

View File

@@ -90,10 +90,6 @@ Devise.setup do |config|
# Time interval to unlock the account if :time is enabled as unlock_strategy.
# config.unlock_in = 1.hour
# ==> Configuration for :token_authenticatable
# Defines name of the authentication token params key
config.token_authentication_key = :auth_token
# ==> Scopes configuration
# Turn scoped views on. Before rendering 'sessions/new', it will first check for
# 'users/sessions/new'. It's turned off by default because it's slower if you
@@ -141,3 +137,8 @@ Devise.setup do |config|
config.case_insensitive_keys = [:email]
end
Devise::TokenAuthenticatable.setup do |config|
# Defines name of the authentication token params key
config.token_authentication_key = :auth_token
end

View File

@@ -6,6 +6,7 @@
# In order to initialize a setting do:
# config.setting_name = 'new value'
require "spree/core/environment"
require 'spree/product_filters'
# Due to a bug in ActiveRecord we need to load the tagging code in Gateway which
@@ -30,8 +31,6 @@ Spree.config do |config|
config.auto_capture = true
#config.override_actionmailer_config = false
config.order_updater_decorator = OrderUpdater
# S3 settings
config.s3_bucket = ENV['S3_BUCKET'] if ENV['S3_BUCKET']
config.s3_access_key = ENV['S3_ACCESS_KEY'] if ENV['S3_ACCESS_KEY']

View File

@@ -13,6 +13,7 @@ ar:
email: الايميل الالكتروني للعميل
spree/payment:
amount: القيمة
state: ولاية
spree/product:
primary_taxon: "نوع المنتج "
supplier: "المورد"
@@ -1020,10 +1021,13 @@ ar:
name: "ملخص رسوم الشركات"
description: "ملخص رسوم الشركات التي تم جمعها"
subscriptions:
subscriptions: الاشتراكات
new: اشتراك جديد
create: إنشاء اشتراك
edit: تحرير الاشتراك
index:
title: "الاشتراكات"
new: "اشتراك جديد"
new:
title: "اشتراك جديد"
edit:
title: "تحرير الاشتراك"
table:
edit_subscription: تحرير الاشتراك
pause_subscription: وقف مؤقت الاشتراك
@@ -1032,6 +1036,7 @@ ar:
filters:
query_placeholder: "البحث عن طريق البريد الإلكتروني ..."
setup_explanation:
title: "الاشتراكات"
just_a_few_more_steps: 'فقط بضع خطوات أخرى قبل أن تبدأ:'
enable_subscriptions: "تمكين الاشتراكات في واحد على الأقل من المتاجر الخاصة بك"
enable_subscriptions_step_1_html: 1. انتقل إلى صفحة %{enterprises_link} ، وابحث عن متجرك ، وانقر على &quot;إدارة&quot;
@@ -1045,6 +1050,8 @@ ar:
create_at_least_one_schedule_step_3: 3. انقر فوق &quot;+ جدول جديد&quot; ، واملأ النموذج
once_you_are_done_you_can_html: بمجرد الانتهاء من ذلك ، يمكنك %{reload_this_page_link}
reload_this_page: اعد تحميل هذه الصفحة
form:
create: "إنشاء اشتراك"
steps:
details: 1. التفاصيل الأساسية
address: 2. العنوان
@@ -1280,6 +1287,8 @@ ar:
cart_updating: "جارٍ تحديث العربة ..."
cart_empty: "السلة فارغة"
cart_edit: "تعديل عربة التسوق"
item: "بند"
qty: "الكمية"
card_number: رقم البطاقة
card_securitycode: "رمز الحماية"
card_expiry_date: تاريخ الانتهاء
@@ -1934,6 +1943,7 @@ ar:
supplier: "المورد"
product_name: "اسم المنتج"
product_description: "وصف المنتج"
shipping_categories: "فئات الشحن"
units: "حجم الوحدة"
coordinator: "منسق"
distributor: "الموزع"
@@ -2030,6 +2040,7 @@ ar:
remove_tax: "إزالة الضريبة"
first_name_begins_with: "الاسم الأول يبدأ بـ"
last_name_begins_with: "اسم العائلة يبدأ بـ"
new_order: "طلب جديد"
enterprise_tos_link: "شروط المؤسسة لخدمة الرابط"
enterprise_tos_message: "نريد العمل مع أشخاص يشاركوننا أهدافنا وقيمنا. على هذا النحو ، نطلب من المؤسسات الجديدة الموافقة على"
enterprise_tos_link_text: "شروط الخدمة."
@@ -3241,6 +3252,27 @@ ar:
invoice_email:
hi: "مرحبًا %{name}"
invoice_attached_text: يرجى الاطلاع على فاتورة مرفقة لطلبك الأخير من
user_mailer:
reset_password_instructions:
request_sent_text: |
تم تقديم طلب لإعادة تعيين كلمة المرور الخاصة بك.
إذا لم تقدم هذا الطلب ، ببساطة تجاهل هذا البريد الإلكتروني.
link_text: >
إذا قمت بهذا الطلب ، فما عليك سوى النقر فوق الرابط أدناه:
issue_text: |
إذا لم يعمل عنوان URL أعلاه ، فحاول نسخه ولصقه في متصفحك.
إذا كنت لا تزال تواجه مشاكل ، فلا تتردد في الاتصال بنا.
confirmation_instructions:
subject: "يرجى تأكيد حسابك OFN"
shipment_mailer:
shipped_email:
dear_customer: "عزيزي العميل،"
instructions: "تم شحن طلبك"
shipment_summary: "ملخص الشحن"
subject: "إشعار الشحن"
thanks: "شكرا لك على اعمالك."
track_information: "معلومات التتبع : %{tracking}"
track_link: "رابط التتبع: %{url}"
order_state:
address: العنوان
adjustments: التعديلات
@@ -3262,18 +3294,6 @@ ar:
ended: انتهى
paused: التعليق
canceled: الالغاء
user_mailer:
reset_password_instructions:
request_sent_text: |
تم تقديم طلب لإعادة تعيين كلمة المرور الخاصة بك.
إذا لم تقدم هذا الطلب ، ببساطة تجاهل هذا البريد الإلكتروني.
link_text: >
إذا قمت بهذا الطلب ، فما عليك سوى النقر فوق الرابط أدناه:
issue_text: |
إذا لم يعمل عنوان URL أعلاه ، فحاول نسخه ولصقه في متصفحك.
إذا كنت لا تزال تواجه مشاكل ، فلا تتردد في الاتصال بنا.
confirmation_instructions:
subject: يرجى تأكيد حسابك OFN
users:
form:
account_settings: إعدادت الحساب

View File

@@ -13,6 +13,8 @@ ca:
email: Correu electrònic de la consumidora
spree/payment:
amount: Import
state: Estat
source: Source
spree/product:
primary_taxon: "Categoria del producte"
supplier: "Proveïdora"
@@ -271,6 +273,9 @@ ca:
on hand: "Disponibles"
ship: "Enviament"
shipping_category: "Categoria d'enviament"
height: "Alçada"
width: "Amplada"
depth: "Profunditat"
actions:
create_and_add_another: "Crea i afegeix-ne una altra"
create: "Crear"
@@ -1037,10 +1042,13 @@ ca:
name: "Resum de les comissions de l'organització"
description: "Resum de les comissions de l'organització recollides"
subscriptions:
subscriptions: Subscripcions
new: Nova subscripció
create: Crea una subscripció
edit: Edita la subscripció
index:
title: "Subscripcions"
new: "Nova subscripció"
new:
title: "Nova subscripció"
edit:
title: "Edita la subscripció"
table:
edit_subscription: Edita la subscripció
pause_subscription: Pausa la subscripció
@@ -1049,6 +1057,7 @@ ca:
filters:
query_placeholder: "Cerca per correu electrònic ..."
setup_explanation:
title: "Subscripcions"
just_a_few_more_steps: 'Només uns quants passos més abans de començar:'
enable_subscriptions: "Activa les subscripcions d'almenys una de les teves botigues"
enable_subscriptions_step_1_html: 1. Aneu a la pàgina %{enterprises_link}, cerqueu la vostra botiga i feu clic a "Gestionar"
@@ -1062,6 +1071,8 @@ ca:
create_at_least_one_schedule_step_3: 3. Fes clic a '+ Nova programació' i omple el formulari
once_you_are_done_you_can_html: Un cop hagueu acabat, podeu %{reload_this_page_link}
reload_this_page: tornar a carregar aquesta pàgina
form:
create: "Crea una subscripció"
steps:
details: 1. Detalls bàsics
address: 2. Adreça
@@ -1306,6 +1317,8 @@ ca:
cart_updating: "Actualitzant la cistella..."
cart_empty: "Cistella buida"
cart_edit: "Edita la teva cistella"
item: "Article"
qty: "quant."
card_number: Número de targeta
card_securitycode: "Codi de seguretat"
card_expiry_date: Data de caducitat
@@ -1527,7 +1540,7 @@ ca:
shopping_contact_social: "Segueix"
shopping_groups_part_of: "forma part de:"
shopping_producers_of_hub: "Productores de%{hub}:"
enterprises_next_closing: "Tancament de la comanda següent"
enterprises_next_closing: "La següent comanda tanca"
enterprises_ready_for: "Llest per"
enterprises_choose: "Escull quan vols la teva comanda:"
maps_open: "Obert"
@@ -1936,7 +1949,7 @@ ca:
admin_enterprise_groups: "Grups d'organització"
admin_enterprise_groups_name: "Nom"
admin_enterprise_groups_owner: "Propietària"
admin_enterprise_groups_on_front_page: "A la primera pàgina?"
admin_enterprise_groups_on_front_page: "Visible a la web"
admin_enterprise_groups_enterprise: "Organitzacions"
admin_enterprise_groups_data_powertip: "La usuària principal responsable d'aquest grup."
admin_enterprise_groups_data_powertip_logo: "Això és el logotip del grup"
@@ -1961,6 +1974,8 @@ ca:
supplier: "Proveïdora"
product_name: "Nom del producte"
product_description: "Descripció del producte"
permalink: "Enllaç permanent"
shipping_categories: "Tipus d'enviament"
units: "Mida d'unitat"
coordinator: "Coordinador"
distributor: "Distribuïdora"
@@ -2057,6 +2072,8 @@ ca:
remove_tax: "Suprimeix comissions"
first_name_begins_with: "El nom comença amb"
last_name_begins_with: "El cognom comença amb"
shipping_method: "Mètode d'enviament"
new_order: "Nova comanda"
enterprise_tos_link: "Enllaç a les condicions d'ús de l'organització"
enterprise_tos_message: "Volem treballar amb persones que comparteixen els nostres objectius i valors. Com a tal, demanem a les noves organitzacions que acceptin la nostra"
enterprise_tos_link_text: "Termes del servei."
@@ -3172,6 +3189,8 @@ ca:
stripe:
error_saving_payment: Error en desar el pagament
submitting_payment: S'està lliurant el pagament...
paypal:
no_payment_via_admin_backend: Els pagaments amb Paypal no es poden capturar des de l'administració
products:
image_upload_error: "No s'ha reconegut la imatge del producte. Carregueu una imatge en format PNG o JPG."
new:
@@ -3349,6 +3368,27 @@ ca:
invoice_email:
hi: "Hola %{name}"
invoice_attached_text: Trobareu adjunta un comprovant de la compra per a la vostra comanda recent
user_mailer:
reset_password_instructions:
request_sent_text: |
S'ha fet una sol·licitud per restablir la teva contrasenya.
Si no has fet aquesta sol·licitud, simplement ignora aquest correu electrònic.
link_text: >
Si has fet aquesta sol·licitud, fes clic a l'enllaç següent:
issue_text: |
Si l'URL anterior no funciona, prova de copiar-lo i enganxar-lo al navegador.
Si continues tenint problemes, no dubtis en contactar-nos.
confirmation_instructions:
subject: "Si us plau confirma el teu compte d'OFN"
shipment_mailer:
shipped_email:
dear_customer: "Benvolguda consumidora:"
instructions: "La vostra comanda s'ha enviat"
shipment_summary: "Resum de l'enviament"
subject: "Notificació d'enviament"
thanks: "Gràcies per la teva compra."
track_information: "Informació del seguiment: %{tracking}"
track_link: "Enllaç del seguiment: %{url}"
order_state:
address: adreça
adjustments: ajustaments
@@ -3370,18 +3410,6 @@ ca:
ended: acabat
paused: en pausa
canceled: cancel·lat
user_mailer:
reset_password_instructions:
request_sent_text: |
S'ha fet una sol·licitud per restablir la teva contrasenya.
Si no has fet aquesta sol·licitud, simplement ignora aquest correu electrònic.
link_text: >
Si has fet aquesta sol·licitud, fes clic a l'enllaç següent:
issue_text: |
Si l'URL anterior no funciona, prova de copiar-lo i enganxar-lo al navegador.
Si continues tenint problemes, no dubtis en contactar-nos.
confirmation_instructions:
subject: Si us plau confirma el teu compte d'OFN
users:
form:
account_settings: Configuració del compte

View File

@@ -13,6 +13,7 @@ de_DE:
email: E-Mail des Kunden
spree/payment:
amount: Betrag
state: Status
spree/product:
primary_taxon: "Produktkategorie"
supplier: "Anbieter"
@@ -1028,10 +1029,13 @@ de_DE:
name: "Unternehmensgebühr Zusammenfassung"
description: "Zusammenfassung der erhobenen Zuschläge"
subscriptions:
subscriptions: Abonnements
new: Neues Abonnement
create: Abonnement erstellen
edit: Abonnement bearbeiten
index:
title: "Abonnements"
new: "Neues Abonnement"
new:
title: "Neues Abonnement"
edit:
title: "Abonnement bearbeiten"
table:
edit_subscription: Abonnement bearbeiten
pause_subscription: Abonement pausieren
@@ -1040,6 +1044,7 @@ de_DE:
filters:
query_placeholder: "Suche per E-Mail ..."
setup_explanation:
title: "Abonnements"
just_a_few_more_steps: 'Nur noch ein paar Schritte bevor Sie beginnen können:'
enable_subscriptions: "Aktivieren Sie Abonnements für mindestens einen Ihrer Läden"
enable_subscriptions_step_1_html: 1. Gehen Sie zur Seite %{enterprises_link}, suchen Sie Ihren Laden und klicken Sie auf "Verwalten"
@@ -1053,6 +1058,8 @@ de_DE:
create_at_least_one_schedule_step_3: 3. Klicken Sie auf "+ Neuer Zeitplan" und füllen Sie das Formular aus
once_you_are_done_you_can_html: Sobald Sie fertig sind, können Sie %{reload_this_page_link}
reload_this_page: diese Seite neu laden
form:
create: "Abonnement erstellen"
steps:
details: 1. Grundlegendes
address: 2. Adresse
@@ -1285,6 +1292,8 @@ de_DE:
cart_updating: "Warenkorb aktualisieren..."
cart_empty: "Warenkorb leer"
cart_edit: "Warenkorb bearbeiten"
item: "Artikel"
qty: "Menge"
card_number: Kartennummer
card_securitycode: "Sicherheitscode"
card_expiry_date: Ablaufdatum
@@ -1930,6 +1939,7 @@ de_DE:
supplier: "Anbieter"
product_name: "Produktname"
product_description: "Produktbeschreibung"
shipping_categories: "Versandkategorien"
units: "Einheitsgröße"
coordinator: "Koordinator"
distributor: "Verteiler"
@@ -3257,6 +3267,27 @@ de_DE:
invoice_email:
hi: "Hallo %{name}"
invoice_attached_text: Im Anhang findest Du eine Rechnung für die letzte Bestellung vom
user_mailer:
reset_password_instructions:
request_sent_text: |
Es wurde angefragt, das Passwort zurückzusetzen.
Sollte kein neues Passwort angefordert werden, bitte dieses E-Mail ignorieren.
link_text: >
Sollte ein neues Passwort angefordert werden, bitte den folgenden Aktivierungslink
bestätigen.
issue_text: |
Falls die URL nicht funktioniert, bitte den Link kopieren und in die Adresszeile Ihres Browsers einfügen
confirmation_instructions:
subject: "Bitte OFN-Konto bestätigen"
shipment_mailer:
shipped_email:
dear_customer: "Sehr geehrter Kunde,"
instructions: "Ihre Bestellung wurde versandt"
shipment_summary: "Übersicht"
subject: "Versandbenachrichtigung"
thanks: "Danke für Ihren Einkauf."
track_information: "Tracking-Informationen: %{tracking}"
track_link: "Tracking-Link: %{url}"
order_state:
address: Adresse
adjustments: Verbesserungen
@@ -3278,18 +3309,6 @@ de_DE:
ended: beendet
paused: pausiert
canceled: storniert
user_mailer:
reset_password_instructions:
request_sent_text: |
Es wurde angefragt, das Passwort zurückzusetzen.
Sollte kein neues Passwort angefordert werden, bitte dieses E-Mail ignorieren.
link_text: >
Sollte ein neues Passwort angefordert werden, bitte den folgenden Aktivierungslink
bestätigen.
issue_text: |
Falls die URL nicht funktioniert, bitte den Link kopieren und in die Adresszeile Ihres Browsers einfügen
confirmation_instructions:
subject: Bitte OFN-Konto bestätigen
users:
form:
account_settings: Konto Einstellungen

View File

@@ -34,6 +34,8 @@ en:
email: Customer E-Mail
spree/payment:
amount: Amount
state: State
source: Source
spree/product:
primary_taxon: "Product Category"
supplier: "Supplier"
@@ -303,6 +305,9 @@ en:
"on hand": "On Hand"
ship: "Ship"
shipping_category: "Shipping Category"
height: "Height"
width: "Width"
depth: "Depth"
actions:
create_and_add_another: "Create and Add Another"
@@ -1091,10 +1096,13 @@ en:
name: "Enterprise Fee Summary"
description: "Summary of Enterprise Fees collected"
subscriptions:
subscriptions: Subscriptions
new: New Subscription
create: Create Subscription
edit: Edit Subscription
index:
title: "Subscriptions"
new: "New Subscription"
new:
title: "New Subscription"
edit:
title: "Edit Subscription"
table:
edit_subscription: Edit Subscription
pause_subscription: Pause Subscription
@@ -1103,6 +1111,7 @@ en:
filters:
query_placeholder: "Search by email..."
setup_explanation:
title: "Subscriptions"
just_a_few_more_steps: 'Just a few more steps before you can begin:'
enable_subscriptions: "Enable subscriptions for at least one of your shops"
enable_subscriptions_step_1_html: 1. Go to the %{enterprises_link} page, find your shop, and click "Manage"
@@ -1116,6 +1125,8 @@ en:
create_at_least_one_schedule_step_3: 3. Click '+ New Schedule', and fill out the form
once_you_are_done_you_can_html: Once you are done, you can %{reload_this_page_link}
reload_this_page: reload this page
form:
create: "Create Subscription"
steps:
details: 1. Basic Details
address: 2. Address
@@ -1384,6 +1395,8 @@ en:
cart_updating: "Updating cart..."
cart_empty: "Cart empty"
cart_edit: "Edit your cart"
item: "Item"
qty: "Qty"
card_number: Card Number
card_securitycode: "Security Code"
@@ -2088,6 +2101,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
supplier: "Supplier"
product_name: "Product Name"
product_description: "Product Description"
permalink: "Permalink"
shipping_categories: "Shipping Categories"
units: "Unit Size"
coordinator: "Coordinator"
distributor: "Distributor"
@@ -2184,6 +2199,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
remove_tax: "Remove tax"
first_name_begins_with: "First name begins with"
last_name_begins_with: "Last name begins with"
shipping_method: "Shipping method"
new_order: "New Order"
enterprise_tos_link: "Enterprise Terms of Service link"
enterprise_tos_message: "We want to work with people that share our aims and values. As such we ask new enterprises to agree to our "
@@ -3331,6 +3348,8 @@ See the %{link} to find out more about %{sitename}'s features and to start using
stripe:
error_saving_payment: Error saving payment
submitting_payment: Submitting payment...
paypal:
no_payment_via_admin_backend: Paypal payments cannot be captured in the Backoffice
products:
image_upload_error: "The product image was not recognised. Please upload an image in PNG or JPG format."
new:
@@ -3508,6 +3527,32 @@ See the %{link} to find out more about %{sitename}'s features and to start using
invoice_email:
hi: "Hi %{name}"
invoice_attached_text: Please find attached an invoice for your recent order from
user_mailer:
reset_password_instructions:
request_sent_text: |
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
link_text: >
If you did make this request just click the link below:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
confirmation_instructions:
subject: "Please confirm your OFN account"
shipment_mailer:
shipped_email:
dear_customer: "Dear Customer,"
instructions: "Your order has been shipped"
shipment_summary: "Shipment Summary"
subject: "Shipment Notification"
thanks: "Thank you for your business."
track_information: ! "Tracking Information: %{tracking}"
track_link: ! "Tracking Link: %{url}"
test_mailer:
test_email:
greeting: "Congratulations!"
message: "If you have received this email, then your email settings are correct."
subject: "Test Mail"
order_state:
address: address
adjustments: adjustments
@@ -3529,18 +3574,6 @@ See the %{link} to find out more about %{sitename}'s features and to start using
ended: ended
paused: paused
canceled: cancelled
user_mailer:
reset_password_instructions:
request_sent_text: |
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
link_text: >
If you did make this request just click the link below:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
confirmation_instructions:
subject: Please confirm your OFN account
users:
form:
account_settings: Account Settings

View File

@@ -13,6 +13,7 @@ en_AU:
email: Customer E-Mail
spree/payment:
amount: Amount
state: State
spree/product:
primary_taxon: "Product Category"
supplier: "Supplier"
@@ -1027,10 +1028,13 @@ en_AU:
name: "Enterprise Fee Summary"
description: "Summary of Enterprise Fees collected"
subscriptions:
subscriptions: Subscriptions
new: New Subscription
create: Create Subscription
edit: Edit Subscription
index:
title: "Subscriptions"
new: "New Subscription"
new:
title: "New Subscription"
edit:
title: "Edit Subscription"
table:
edit_subscription: Edit Subscription
pause_subscription: Pause Subscription
@@ -1039,6 +1043,7 @@ en_AU:
filters:
query_placeholder: "Search by email..."
setup_explanation:
title: "Subscriptions"
just_a_few_more_steps: 'Just a few more steps before you can begin:'
enable_subscriptions: "Enable subscriptions for at least one of your shops"
enable_subscriptions_step_1_html: 1. Go to the %{enterprises_link} page, find your shop, and click "Manage"
@@ -1052,6 +1057,8 @@ en_AU:
create_at_least_one_schedule_step_3: 3. Click '+ New Schedule', and fill out the form
once_you_are_done_you_can_html: Once you are done, you can %{reload_this_page_link}
reload_this_page: reload this page
form:
create: "Create Subscription"
steps:
details: 1. Basic Details
address: 2. Address
@@ -1284,6 +1291,8 @@ en_AU:
cart_updating: "Updating cart..."
cart_empty: "Cart empty"
cart_edit: "Edit your cart"
item: "Item"
qty: "Qty"
card_number: Card Number
card_securitycode: "Security Code"
card_expiry_date: Expiry Date
@@ -1927,6 +1936,7 @@ en_AU:
supplier: "Supplier"
product_name: "Product Name"
product_description: "Product Description"
shipping_categories: "Shipping Categories"
units: "Unit Size"
coordinator: "Coordinator"
distributor: "Distributor"
@@ -2022,6 +2032,7 @@ en_AU:
remove_tax: "Remove tax"
first_name_begins_with: "First name begins with"
last_name_begins_with: "Last name begins with"
new_order: "New Order"
enterprise_tos_link: "Enterprise Terms of Service link"
enterprise_tos_message: "We want to work with people that share our aims and values. As such we ask new enterprises to agree to our "
enterprise_tos_link_text: "Terms of Service."
@@ -3184,6 +3195,27 @@ en_AU:
invoice_email:
hi: "Hi %{name}"
invoice_attached_text: Please find attached an invoice for your recent order from
user_mailer:
reset_password_instructions:
request_sent_text: |
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
link_text: >
If you did make this request just click the link below:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
confirmation_instructions:
subject: "Please confirm your OFN account"
shipment_mailer:
shipped_email:
dear_customer: "Dear Customer,"
instructions: "Your order has been shipped"
shipment_summary: "Shipment Summary"
subject: "Shipment Notification"
thanks: "Thank you for your business."
track_information: "Tracking Information: %{tracking}"
track_link: "Tracking Link: %{url}"
order_state:
address: address
adjustments: adjustments
@@ -3205,18 +3237,6 @@ en_AU:
ended: ended
paused: paused
canceled: cancelled
user_mailer:
reset_password_instructions:
request_sent_text: |
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
link_text: >
If you did make this request just click the link below:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
confirmation_instructions:
subject: Please confirm your OFN account
users:
form:
account_settings: Account Settings

View File

@@ -13,6 +13,7 @@ en_BE:
email: Customer E-Mail
spree/payment:
amount: Amount
state: State
spree/product:
primary_taxon: "Product Category"
supplier: "Supplier"
@@ -990,10 +991,13 @@ en_BE:
name: "Enterprise Fee Summary"
description: "Summary of Enterprise Fees collected"
subscriptions:
subscriptions: Subscriptions
new: New Subscription
create: Create Subscription
edit: Edit Subscription
index:
title: "Subscriptions"
new: "New Subscription"
new:
title: "New Subscription"
edit:
title: "Edit Subscription"
table:
edit_subscription: Edit Subscription
pause_subscription: Pause Subscription
@@ -1002,6 +1006,7 @@ en_BE:
filters:
query_placeholder: "Search by email..."
setup_explanation:
title: "Subscriptions"
just_a_few_more_steps: 'Just a few more steps before you can begin:'
enable_subscriptions: "Enable subscriptions for at least one of your shops"
enable_subscriptions_step_1_html: 1. Go to the %{enterprises_link} page, find your shop, and click "Manage"
@@ -1015,6 +1020,8 @@ en_BE:
create_at_least_one_schedule_step_3: 3. Click '+ New Schedule', and fill out the form
once_you_are_done_you_can_html: Once you are done, you can %{reload_this_page_link}
reload_this_page: reload this page
form:
create: "Create Subscription"
steps:
details: 1. Basic Details
address: 2. Address
@@ -1245,6 +1252,8 @@ en_BE:
cart_updating: "Updating cart..."
cart_empty: "Cart empty"
cart_edit: "Edit your cart"
item: "Item"
qty: "Qty"
card_number: Card Number
card_securitycode: "Security Code"
card_expiry_date: Expiry Date
@@ -1887,6 +1896,7 @@ en_BE:
supplier: "Supplier"
product_name: "Product Name"
product_description: "Product Description"
shipping_categories: "Shipping Categories"
units: "Unit Size"
coordinator: "Coordinator"
distributor: "Distributor"
@@ -1982,6 +1992,7 @@ en_BE:
remove_tax: "Remove tax"
first_name_begins_with: "First name begins with"
last_name_begins_with: "Last name begins with"
new_order: "New Order"
enterprise_tos_link: "Enterprise Terms of Service link"
enterprise_tos_message: "We want to work with people that share our aims and values. As such we ask new enterprises to agree to our "
enterprise_tos_link_text: "Terms of Service."
@@ -3093,6 +3104,27 @@ en_BE:
invoice_email:
hi: "Hi %{name}"
invoice_attached_text: Please find attached an invoice for your recent order from
user_mailer:
reset_password_instructions:
request_sent_text: |
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
link_text: >
If you did make this request just click the link below:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
confirmation_instructions:
subject: "Please confirm your OFN account"
shipment_mailer:
shipped_email:
dear_customer: "Dear Customer,"
instructions: "Your order has been shipped"
shipment_summary: "Shipment Summary"
subject: "Shipment Notification"
thanks: "Thank you for your business."
track_information: "Tracking Information: %{tracking}"
track_link: "Tracking Link: %{url}"
order_state:
address: address
adjustments: adjustments
@@ -3114,18 +3146,6 @@ en_BE:
ended: ended
paused: paused
canceled: cancelled
user_mailer:
reset_password_instructions:
request_sent_text: |
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
link_text: >
If you did make this request just click the link below:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
confirmation_instructions:
subject: Please confirm your OFN account
users:
form:
account_settings: Account Settings

View File

@@ -13,6 +13,8 @@ en_CA:
email: Customer E-Mail
spree/payment:
amount: Amount
state: State
source: Source
spree/product:
primary_taxon: "Product Category"
supplier: "Supplier"
@@ -271,6 +273,9 @@ en_CA:
on hand: "On Hand"
ship: "Ship"
shipping_category: "Shipping Category"
height: "Height"
width: "Width"
depth: "Depth"
actions:
create_and_add_another: "Create and Add Another"
create: "Create"
@@ -1034,10 +1039,13 @@ en_CA:
name: "Enterprise Fee Summary"
description: "Summary of Enterprise Fees collected"
subscriptions:
subscriptions: Subscriptions
new: New Subscription
create: Create Subscription
edit: Edit Subscription
index:
title: "Subscriptions"
new: "New Subscription"
new:
title: "New Subscription"
edit:
title: "Edit Subscription"
table:
edit_subscription: Edit Subscription
pause_subscription: Pause Subscription
@@ -1046,6 +1054,7 @@ en_CA:
filters:
query_placeholder: "Search by email..."
setup_explanation:
title: "Subscriptions"
just_a_few_more_steps: 'Just a few more steps before you can begin:'
enable_subscriptions: "Enable subscriptions for at least one of your shops"
enable_subscriptions_step_1_html: 1. Go to the %{enterprises_link} page, find your shop, and click "Manage"
@@ -1059,6 +1068,8 @@ en_CA:
create_at_least_one_schedule_step_3: 3. Click '+ New Schedule', and fill out the form
once_you_are_done_you_can_html: Once you are done, you can %{reload_this_page_link}
reload_this_page: reload this page
form:
create: "Create Subscription"
steps:
details: 1. Basic Details
address: 2. Address
@@ -1161,7 +1172,7 @@ en_CA:
mobile_menu:
cart: "Cart"
register_call:
selling_on_ofn: "Interested in getting on the Open Food Network?"
selling_on_ofn: "Interested in selling on the Open Food Network?"
register: "Register here"
footer:
footer_secure: "Secure and trusted."
@@ -1303,6 +1314,8 @@ en_CA:
cart_updating: "Updating cart..."
cart_empty: "Cart empty"
cart_edit: "Edit your cart"
item: "Item"
qty: "Qty"
card_number: Card Number
card_securitycode: "Security Code"
card_expiry_date: Expiry Date
@@ -1958,6 +1971,8 @@ en_CA:
supplier: "Supplier"
product_name: "Product Name"
product_description: "Product Description"
permalink: "Permalink"
shipping_categories: "Shipping Categories"
units: "Unit Size"
coordinator: "Coordinator"
distributor: "Distributor"
@@ -2054,6 +2069,8 @@ en_CA:
remove_tax: "Remove tax"
first_name_begins_with: "First name begins with"
last_name_begins_with: "Last name begins with"
shipping_method: "Shipping method"
new_order: "New Order"
enterprise_tos_link: "Enterprise Terms of Service link"
enterprise_tos_message: "We want to work with people that share our aims and values. As such we ask new enterprises to agree to our "
enterprise_tos_link_text: "Terms of Service."
@@ -3165,6 +3182,8 @@ en_CA:
stripe:
error_saving_payment: Error saving payment
submitting_payment: Submitting payment...
paypal:
no_payment_via_admin_backend: Paypal payments cannot be captured in the backoffice.
products:
image_upload_error: "The product image was not recognised. Please upload an image in PNG or JPG format."
new:
@@ -3342,6 +3361,32 @@ en_CA:
invoice_email:
hi: "Hi %{name}"
invoice_attached_text: Please find attached an invoice for your recent order from
user_mailer:
reset_password_instructions:
request_sent_text: |
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
link_text: >
If you did make this request just click the link below:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
confirmation_instructions:
subject: "Please confirm your OFN account"
shipment_mailer:
shipped_email:
dear_customer: "Dear Customer, "
instructions: "Your order has been shipped or picked up."
shipment_summary: "Shipment/Pick Up Summary"
subject: "Shipment/Pick Up Notification"
thanks: "Thank you for your business."
track_information: "Tracking Information: %{tracking}"
track_link: "Tracking Link: %{url}"
test_mailer:
test_email:
greeting: "Congratulations!"
message: "If you have received this email, then your OFN email settings are correct."
subject: "Test Mail"
order_state:
address: address
adjustments: adjustments
@@ -3363,18 +3408,6 @@ en_CA:
ended: ended
paused: paused
canceled: cancelled
user_mailer:
reset_password_instructions:
request_sent_text: |
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
link_text: >
If you did make this request just click the link below:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
confirmation_instructions:
subject: Please confirm your OFN account
users:
form:
account_settings: Account Settings

View File

@@ -13,6 +13,7 @@ en_DE:
email: Customer E-Mail
spree/payment:
amount: Amount
state: State
spree/product:
primary_taxon: "Product Category"
supplier: "Supplier"
@@ -998,10 +999,13 @@ en_DE:
name: "Enterprise Fee Summary"
description: "Summary of Enterprise Fees collected"
subscriptions:
subscriptions: Subscriptions
new: New Subscription
create: Create Subscription
edit: Edit Subscription
index:
title: "Subscriptions"
new: "New Subscription"
new:
title: "New Subscription"
edit:
title: "Edit Subscription"
table:
edit_subscription: Edit Subscription
pause_subscription: Pause Subscription
@@ -1010,6 +1014,7 @@ en_DE:
filters:
query_placeholder: "Search by email..."
setup_explanation:
title: "Subscriptions"
just_a_few_more_steps: 'Just a few more steps before you can begin:'
enable_subscriptions: "Enable subscriptions for at least one of your shops"
enable_subscriptions_step_1_html: 1. Go to the %{enterprises_link} page, find your shop, and click "Manage"
@@ -1023,6 +1028,8 @@ en_DE:
create_at_least_one_schedule_step_3: 3. Click '+ New Schedule', and fill out the form
once_you_are_done_you_can_html: Once you are done, you can %{reload_this_page_link}
reload_this_page: reload this page
form:
create: "Create Subscription"
steps:
details: 1. Basic Details
address: 2. Address
@@ -1255,6 +1262,8 @@ en_DE:
cart_updating: "Updating cart..."
cart_empty: "Cart empty"
cart_edit: "Edit your cart"
item: "Item"
qty: "Qty"
card_number: Card Number
card_securitycode: "Security Code"
card_expiry_date: Expiry Date
@@ -1897,6 +1906,7 @@ en_DE:
supplier: "Supplier"
product_name: "Product Name"
product_description: "Product Description"
shipping_categories: "Shipping Categories"
units: "Unit Size"
coordinator: "Coordinator"
distributor: "Distributor"
@@ -1992,6 +2002,7 @@ en_DE:
remove_tax: "Remove tax"
first_name_begins_with: "First name begins with"
last_name_begins_with: "Last name begins with"
new_order: "New Order"
enterprise_tos_link: "Enterprise Terms of Service link"
enterprise_tos_message: "We want to work with people that share our aims and values. As such we ask new enterprises to agree to our "
enterprise_tos_link_text: "Terms of Service."
@@ -3110,6 +3121,27 @@ en_DE:
invoice_email:
hi: "Hi %{name}"
invoice_attached_text: Please find attached an invoice for your recent order from
user_mailer:
reset_password_instructions:
request_sent_text: |
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
link_text: >
If you did make this request just click the link below:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
confirmation_instructions:
subject: "Please confirm your OFN account"
shipment_mailer:
shipped_email:
dear_customer: "Dear Customer,"
instructions: "Your order has been shipped"
shipment_summary: "Shipment Summary"
subject: "Shipment Notification"
thanks: "Thank you for your business."
track_information: "Tracking Information: %{tracking}"
track_link: "Tracking Link: %{url}"
order_state:
address: address
adjustments: adjustments
@@ -3131,18 +3163,6 @@ en_DE:
ended: ended
paused: paused
canceled: cancelled
user_mailer:
reset_password_instructions:
request_sent_text: |
A request to reset your password has been made.
If you did not make this request, simply ignore this email.
link_text: >
If you did make this request just click the link below:
issue_text: |
If the above URL does not work try copying and pasting it into your browser.
If you continue to have problems please feel free to contact us.
confirmation_instructions:
subject: Please confirm your OFN account
users:
form:
account_settings: Account Settings

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