Compare commits

...

1185 Commits

Author SHA1 Message Date
Gaetan Craig-Riou
4f961098c4 Update all locales with the latest Transifex translations 2023-10-27 11:36:13 +11:00
Filipe
f1d4ec9fe7 Merge pull request #11684 from ccozkan/issue-11609
Fix content aligning in subscriptions table
2023-10-26 16:20:33 +01:00
Filipe
aa9cacada8 Merge pull request #11676 from openfoodfoundation/dependabot/bundler/stripe-10.0.0
chore(deps): bump stripe from 9.4.0 to 10.0.0
2023-10-26 15:41:49 +01:00
Filipe
a54de4b522 Merge pull request #11691 from openfoodfoundation/dependabot/bundler/combine_pdf-1.0.24
chore(deps): bump combine_pdf from 1.0.23 to 1.0.24
2023-10-26 13:56:44 +01:00
Filipe
b67acaae21 Merge pull request #11694 from prateek0411999/bugfix/11666-warning_forfeit_remaining_amount
add condition on warning_forfeit_remaining_amount note
2023-10-26 13:44:22 +01:00
Filipe
3da8341946 Merge pull request #11695 from ccozkan/issue-8943
Make update button on enterprises primary details form clickable upon input to name field
2023-10-26 13:12:27 +01:00
Filipe
7b3c6e9f58 Merge pull request #11688 from mkllnk/enterprise-fee-report
Avoid error when generating Enterprise fees w/ Tax Report by Producer
2023-10-26 12:43:19 +01:00
David Cook
ed520ea679 Merge pull request #11703 from abdellani/remove-mini-portile2
removes mini_portile2
2023-10-26 09:40:38 +11:00
David Cook
7195314dc6 Merge pull request #11697 from openfoodfoundation/dependabot/bundler/mini_portile2-2.8.5
chore(deps): bump mini_portile2 from 2.8.4 to 2.8.5
2023-10-26 09:23:06 +11:00
Çağrı Özkan
924cee0876 Trigger build (empty commit) 2023-10-25 18:21:39 +03:00
Çağrı Özkan
7b21126a9c Use both onchange and oninput on ng_form.html.haml 2023-10-25 17:32:25 +03:00
Filipe
6280bfcebe Merge pull request #11706 from yasirazgar/11318_flaky_packing_report_spec
11318 - Fix flaky packing_report_spec.rb
2023-10-25 15:22:04 +01:00
Çağrı Özkan
38d1de896c Use oninput on ng_form.html.haml instead of onchange 2023-10-25 17:11:30 +03:00
dependabot[bot]
8fc4d6cd4d chore(deps): bump mini_portile2 from 2.8.4 to 2.8.5
Bumps [mini_portile2](https://github.com/flavorjones/mini_portile) from 2.8.4 to 2.8.5.
- [Release notes](https://github.com/flavorjones/mini_portile/releases)
- [Changelog](https://github.com/flavorjones/mini_portile/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flavorjones/mini_portile/compare/v2.8.4...v2.8.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-25 08:20:25 +00:00
Mohamed ABDELLANI
d77a94d377 add comment about mini_protile2 gem 2023-10-25 09:17:21 +01:00
David Cook
fac354e678 Merge pull request #11700 from macanudo527/fix_stylehash_12
Fix Style/HashSyntax 13/13
2023-10-25 10:40:52 +11:00
yasir azgar
3ba208e3d3 11318 - fix flaky packing_report_spec
fix rubocop DurationArithmetic
2023-10-24 22:21:42 +05:30
Neal Chambers
cf072fb56f Update .rubocop_todo.yml 2023-10-24 08:49:48 +09:00
Neal Chambers
dc607b654d Fix Style/HashSyntax 2023-10-24 08:49:34 +09:00
David Cook
a2f8b0db16 Update ansible group name 2023-10-24 10:37:32 +11:00
Maikel
42f5469de5 Merge pull request #11674 from mkllnk/money
Format money amounts according to locale, not currency
2023-10-24 09:47:37 +11:00
Sigmund Petersen
0d557eb0f2 Merge branch 'master' into dependabot/bundler/combine_pdf-1.0.24 2023-10-23 09:38:02 +02:00
prateek0411999
a113b5ba01 add condition on warning_forfeit_remaining_amount note 2023-10-23 10:45:35 +05:30
Gaetan Craig-Riou
9f426add8d Merge pull request #11690 from openfoodfoundation/dependabot/npm_and_yarn/tom-select-2.2.3
chore(deps): bump tom-select from 2.2.2 to 2.2.3
2023-10-23 09:48:48 +11:00
Çağrı Özkan
e465015184 Add oninput:"make form dirty" to enterprise_form/name text field 2023-10-21 01:19:41 +03:00
Filipe
44a675bcda Merge branch 'master' into dependabot/bundler/combine_pdf-1.0.24 2023-10-20 16:44:08 +01:00
filipefurtad0
e645ef72a7 Update all locales with the latest Transifex translations 2023-10-20 12:27:28 +01:00
Konrad
2ba5ab7dc1 Merge pull request #11577 from jibees/10956-use-cable_ready-instead-of-morph
Admin, Orders list: when capturing an order, fix an issue that makes the tooltip invisible (+ errors in the console)
2023-10-20 11:56:53 +02:00
dependabot[bot]
06eac95a48 chore(deps): bump combine_pdf from 1.0.23 to 1.0.24
Bumps [combine_pdf](https://github.com/boazsegev/combine_pdf) from 1.0.23 to 1.0.24.
- [Release notes](https://github.com/boazsegev/combine_pdf/releases)
- [Changelog](https://github.com/boazsegev/combine_pdf/blob/master/CHANGELOG.md)
- [Commits](https://github.com/boazsegev/combine_pdf/compare/v1.0.23...v1.0.24)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-20 09:20:47 +00:00
dependabot[bot]
c734f982a1 chore(deps): bump tom-select from 2.2.2 to 2.2.3
Bumps [tom-select](https://github.com/orchidjs/tom-select) from 2.2.2 to 2.2.3.
- [Release notes](https://github.com/orchidjs/tom-select/releases)
- [Commits](https://github.com/orchidjs/tom-select/compare/v2.2.2...v2.2.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-20 09:06:10 +00:00
Maikel Linke
b83651a7ae Avoid error when generating fee report
Instead some data is missing from the report. A slightly better outcome
but still wrong. This is tracked in another issue though.
2023-10-20 15:45:32 +11:00
Maikel Linke
4fc66f6585 Spec fee report failing on removed variant
Well, creating a unit test level spec in the first place. Edge cases
like this don't need to be tested in slow system specs.
2023-10-20 15:35:17 +11:00
Maikel Linke
43b1eca026 Remove unneeded report spec
Testing for the absence of behaviour is useful when changing code to
assert that the change is successful but in the long term, it doesn't
add any value. If you don't have any reason to believe that the report
may delete parameters then we don't need to test for that.
2023-10-20 14:22:43 +11:00
Maikel
d45fe44c9f Remove unused Code Climate badge
It always gave us a good score anyway because we ignored the bad code.
2023-10-20 10:22:42 +11:00
David Cook
8fad8b9f80 Merge pull request #11687 from filipefurtad0/fix_flaky_spec_#11686
Moves assertions within before do block
2023-10-20 09:57:41 +11:00
David Cook
801c30f4d5 Merge pull request #11685 from openfoodfoundation/dependabot/bundler/roadie-rails-3.1.0
chore(deps): bump roadie-rails from 3.0.0 to 3.1.0
2023-10-20 09:55:42 +11:00
David Cook
2d68d49c1f Merge pull request #11683 from openfoodfoundation/dependabot/npm_and_yarn/babel/traverse-7.23.2
chore(deps): bump @babel/traverse from 7.21.5 to 7.23.2
2023-10-20 09:51:32 +11:00
David Cook
3805988c6e Merge pull request #11682 from filipefurtad0/assert_status_on_order_confirmation_screen
Adds coverage on order confirmation page
2023-10-20 09:49:10 +11:00
Maikel
5d2d925eb6 Merge pull request #11547 from filipefurtad0/legal_invoices_associations_comparator_spec
Adds coverage on order-associated attributes
2023-10-20 08:52:27 +11:00
filipefurtad0
8d6ed5ec23 Moves assertions within before do block
Doing so, assures the removal of the invoice is finished, before clicking the 'Next - Order summary' button
2023-10-19 17:38:27 +01:00
filipefurtad0
c05716cea9 Addresses review suggestions from @dacook
I've noticed that it was necessary to include a reference to the order like 'order.adjustments << create(:adjustment, order:)' for the tests to pass

Updates test case description
2023-10-19 15:49:28 +01:00
dependabot[bot]
91f94505c2 chore(deps): bump roadie-rails from 3.0.0 to 3.1.0
Bumps [roadie-rails](https://github.com/Mange/roadie-rails) from 3.0.0 to 3.1.0.
- [Changelog](https://github.com/Mange/roadie-rails/blob/master/Changelog.md)
- [Commits](https://github.com/Mange/roadie-rails/compare/v3.0.0...v3.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-19 09:22:55 +00:00
dependabot[bot]
f35388ef3a chore(deps): bump @babel/traverse from 7.21.5 to 7.23.2
Bumps [@babel/traverse](https://github.com/babel/babel/tree/HEAD/packages/babel-traverse) from 7.21.5 to 7.23.2.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.23.2/packages/babel-traverse)

---
updated-dependencies:
- dependency-name: "@babel/traverse"
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-19 02:28:53 +00:00
Çağrı Özkan
a6bcac8a7d Remove text-center from subscription table td's 2023-10-19 05:16:20 +03:00
filipefurtad0
27ecd4224e Sets tests as shared example (further DRYes spec) 2023-10-18 19:12:58 +01:00
filipefurtad0
461ef48c3a DRYes spec 2023-10-18 18:26:42 +01:00
filipefurtad0
80f0b30e5c Adds coverage on order confirmation page
Related to the changes from PRs #11668 and #11114.
2023-10-18 16:02:31 +01:00
Filipe
caa655f500 Merge pull request #11668 from drummer83/master
Don't show credit owed when = 0 in order confirmation
2023-10-18 12:16:54 +01:00
Konrad
448eb8b3b1 Merge branch 'openfoodfoundation:master' into master 2023-10-18 12:41:12 +02:00
filipefurtad0
2004abc8be Sets pending test - issue #11350
changing the payment_total should not generate a new invoice; rather, it should update the current invoice
2023-10-18 11:20:48 +01:00
filipefurtad0
530cdacc77 Restructures tests as shared examples
Merges test files
2023-10-18 11:20:06 +01:00
filipefurtad0
8a1a14112b Moves tests to shared examples file 2023-10-18 11:20:05 +01:00
filipefurtad0
8b249ee050 Adds unit tests for different attributes 2023-10-18 11:19:03 +01:00
Maikel
0477bef53a Merge pull request #11657 from mkllnk/report-job-retries
Notify user about errors raised in reports
2023-10-18 15:38:34 +11:00
dependabot[bot]
83269af410 chore(deps): bump stripe from 9.4.0 to 10.0.0
Bumps [stripe](https://github.com/stripe/stripe-ruby) from 9.4.0 to 10.0.0.
- [Release notes](https://github.com/stripe/stripe-ruby/releases)
- [Changelog](https://github.com/stripe/stripe-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-ruby/compare/v9.4.0...v10.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-17 09:19:18 +00:00
Rachel Arnould
aecb55beb3 Merge pull request #11660 from dacook/products_v3_path
Hide old products screen when admin_style_v3 enabled
2023-10-17 10:45:01 +02:00
Gaetan Craig-Riou
d2952d46a6 Add the highlighted version of the "ship" icon 2023-10-17 13:35:01 +11:00
Gaetan Craig-Riou
7ce3fea7d5 Refactor tooltip on the backoffice orders page 2023-10-17 13:35:01 +11:00
Gaetan Craig-Riou
6a1664d2fd Refactor "What's this" tooltip 2023-10-17 13:33:15 +11:00
Gaetan Craig-Riou
01a13a814a Improve tooltip partial 2023-10-17 13:33:15 +11:00
Gaetan Craig-Riou
4639e53673 Remove insertToolTipMarkup
It's not great to have Stimulus controller rendering markup on `connect`
Stimulus is intended to add behavior to existing markup.
Plus add some documentation
2023-10-17 13:33:15 +11:00
Gaetan Craig-Riou
31c537c5e0 Revert to using morph instead of cable_ready
The issue is with with the stimilus tooltip controller, it add some
element to the DOM which create issue when it's modified by
StimulusReflex. See here for a more detailed explanation:
https://github.com/stimulusreflex/stimulus_reflex/issues/314#issuecomment-702479357
2023-10-17 13:33:15 +11:00
Jean-Baptiste Bellet
3525320590 We should use cable_ready.inner_html instead of morph
To be sure that every stimulus controllers attached to the DOM that is replaced is will connected.
What I saw is that when using `morph`, the stimulus controller (specially `tooltip_controller`) were not attached to the DOM (and not disconnected as well) that triggered some errors in the console.

Adds test case for payment capture thanks to @filipefurtad0
2023-10-17 13:33:15 +11:00
David Cook
ad9048c595 Merge pull request #11627 from dacook/reflex-locale
Ensure dynamic modals always use selected locale
2023-10-17 10:23:58 +11:00
Maikel Linke
c0938d1607 Simplify view with number helpers 2023-10-16 16:37:47 +11:00
Maikel Linke
fcb6e36480 Format money amounts according to locale
It used to be formatted according to the currency. So even if the
default currency is USD but your locale is French then you should see it
formatted as $10.000,00 instead of the US formatting of $10,000.00.
2023-10-16 11:19:11 +11:00
Maikel
c87a10a855 Merge pull request #11672 from openfoodfoundation/dependabot/bundler/bullet-7.1.2
chore(deps-dev): bump bullet from 7.1.1 to 7.1.2
2023-10-16 10:54:38 +11:00
Maikel
ba00106e38 Merge pull request #11671 from openfoodfoundation/dependabot/bundler/acts-as-taggable-on-10.0.0
chore(deps): bump acts-as-taggable-on from 9.0.1 to 10.0.0
2023-10-16 10:54:12 +11:00
dependabot[bot]
d76dbb3592 chore(deps-dev): bump bullet from 7.1.1 to 7.1.2
Bumps [bullet](https://github.com/flyerhzm/bullet) from 7.1.1 to 7.1.2.
- [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyerhzm/bullet/compare/7.1.1...7.1.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-15 23:24:48 +00:00
dependabot[bot]
c4adcf93c0 chore(deps): bump acts-as-taggable-on from 9.0.1 to 10.0.0
Bumps [acts-as-taggable-on](https://github.com/mbleigh/acts-as-taggable-on) from 9.0.1 to 10.0.0.
- [Release notes](https://github.com/mbleigh/acts-as-taggable-on/releases)
- [Changelog](https://github.com/mbleigh/acts-as-taggable-on/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mbleigh/acts-as-taggable-on/compare/v9.0.1...v10.0.0)

---
updated-dependencies:
- dependency-name: acts-as-taggable-on
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-15 23:23:51 +00:00
Maikel
9c5b986ab6 Merge pull request #11664 from openfoodfoundation/dependabot/bundler/rubocop-1.57.1
chore(deps-dev): bump rubocop from 1.57.0 to 1.57.1
2023-10-16 10:05:14 +11:00
Maikel
08e799c5fa Merge pull request #11663 from dacook/tag_release
Update tag_release script
2023-10-16 10:02:41 +11:00
drummer83
c2b82651ee Don't show credit owed when = 0 2023-10-13 20:51:12 +02:00
Konrad
246fceb214 Merge pull request #11634 from lauriejefferson/11610-left-align-all-table-content
[BUU] Left-align headers of new orders table
2023-10-13 19:58:09 +02:00
David Cook
6e6854f564 Fix payment state indicator
Now the correct class is added, we can see the little coloured circles again.
2023-10-13 19:25:12 +02:00
lauriejefferson
e234b71b25 removed empty spaces 2023-10-13 19:25:12 +02:00
lauriejefferson
2020a9fa76 changed table row alignment to align-left and removed padding from table header 2023-10-13 19:25:12 +02:00
Konrad
5859d2ff78 Merge pull request #11114 from lauriejefferson/not-paid-order-confirmations-resemble-paid-orders-7603
Not paid order confirmations resemble paid orders 7603
2023-10-13 18:52:10 +02:00
Konrad
d7b234c062 Merge pull request #11593 from rioug/11363-vouchers-fix-tax-included-in-price-amount
[Vouchers] Fix tax included in price amount
2023-10-13 18:22:11 +02:00
David Cook
8f30b27b58 Guard against nil values
These are validated and shouldn't be nil, but I suspect we have corrupt data causing problems here.
2023-10-13 15:54:24 +02:00
David Cook
a0b64cb58a Remove unnecessary set_locale calls
The locale is now set in ApplicationReflex
2023-10-13 15:54:24 +02:00
David Cook
2915048afa Always set locale for reflexes
I considered using I18nHelper like we do in controllers, but that is for choosing a locale, which we don't need to do for reflexes.
2023-10-13 15:54:24 +02:00
dependabot[bot]
52498b6bf4 chore(deps-dev): bump rubocop from 1.57.0 to 1.57.1
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.57.0 to 1.57.1.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.57.0...v1.57.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-13 09:58:15 +00:00
David Cook
9276469c53 Update checklist 2023-10-13 11:56:21 +11:00
David Cook
4eb169ea0d Add a shortcut to draft new release
Next time, we can add a script to randomly choose a food-related release name ;)
2023-10-13 11:30:25 +11:00
David Cook
a13c95433e Merge pull request #11548 from macanudo527/add_foreign_key_script
Add Spec that Generates Migrations for Missing Foreign Keys
2023-10-13 11:20:47 +11:00
David Cook
0b2a0d9e58 Update all locales with the latest Transifex translations 2023-10-13 11:15:45 +11:00
David Cook
655c16cca0 New bulk products screen shares path with old
The feature toggle will determine which bulk products screen shows. An additional products_old path is also temporarily added for easy reference.

Later, when the old screen is full removed, we'll probably rename the _v3 classes to tidy up.
2023-10-13 10:39:45 +11:00
Maikel
45db61be53 Merge pull request #11655 from openfoodfoundation/dependabot/bundler/devise-4.9.3
chore(deps): bump devise from 4.9.2 to 4.9.3
2023-10-13 08:30:08 +11:00
Maikel
604cc10c3f Merge pull request #11654 from openfoodfoundation/dependabot/bundler/rubocop-1.57.0
chore(deps-dev): bump rubocop from 1.56.4 to 1.57.0
2023-10-13 08:29:29 +11:00
lauriejefferson
43232a5d63 removed not-paid styling for credit owed 2023-10-12 11:50:30 -04:00
Konrad
cc8898e074 Merge pull request #11219 from abdellani/fix-tax-rates-rendering-when-invoice-enabled
fix Viewing an invoice with the instance's invoice setting set to alternative model leads to an error 500
2023-10-12 17:47:27 +02:00
Konrad
26fa85d89b Merge pull request #11651 from HillaryOkello/master
Display ordered lists uniform with unordered lists in Trix editor
2023-10-12 17:00:43 +02:00
Konrad
f87186373c Merge pull request #11647 from dacook/image-validation
Only validate image when changed
2023-10-12 15:42:22 +02:00
Maikel Linke
702f3b7784 Notify user about errors raised in reports 2023-10-12 16:31:13 +11:00
Maikel Linke
f61a2fa2bf Rescue errors in report generation
So we can report them to Bugsnag and the job isn't marked as failed and
therefore won't repeat.
2023-10-12 16:01:52 +11:00
Maikel Linke
477ca39e58 Update spec 2023-10-12 15:40:06 +11:00
Maikel Linke
f4fde0a42c Trying to clarify voucher tax amount
The whole concept is confusing. Maybe translators will find better
versions.
2023-10-12 15:20:17 +11:00
Maikel Linke
f83e78a5b8 Clarify adjustment data only for display
We are not creating a new adjustment here.
2023-10-12 15:16:38 +11:00
Maikel Linke
74c8f06e80 Simplify helper with extracted method 2023-10-12 14:17:41 +11:00
Maikel Linke
45dd5cc40a Style/SingleLineDoEndBlock: Prefer multiline do...end block 2023-10-12 10:10:42 +11:00
dependabot[bot]
4b38817aff chore(deps-dev): bump rubocop from 1.56.4 to 1.57.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.56.4 to 1.57.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.56.4...v1.57.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 22:55:03 +00:00
Maikel
17c1ccc509 Merge pull request #11653 from openfoodfoundation/dependabot/bundler/paranoia-2.6.3
chore(deps): bump paranoia from 2.6.2 to 2.6.3
2023-10-12 09:52:39 +11:00
Maikel
e3e7031a91 Merge pull request #11649 from openfoodfoundation/dependabot/bundler/rswag-specs-2.11.0
chore(deps-dev): bump rswag-specs from 2.10.1 to 2.11.0
2023-10-12 09:51:41 +11:00
Maikel
5526006add Merge pull request #11652 from openfoodfoundation/dependabot/bundler/responders-3.1.1
chore(deps): bump responders from 3.1.0 to 3.1.1
2023-10-12 09:27:56 +11:00
dependabot[bot]
1efff07953 chore(deps): bump devise from 4.9.2 to 4.9.3
Bumps [devise](https://github.com/heartcombo/devise) from 4.9.2 to 4.9.3.
- [Release notes](https://github.com/heartcombo/devise/releases)
- [Changelog](https://github.com/heartcombo/devise/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heartcombo/devise/compare/v4.9.2...v4.9.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 22:18:53 +00:00
dependabot[bot]
a8b4e9b070 chore(deps-dev): bump rswag-specs from 2.10.1 to 2.11.0
Bumps [rswag-specs](https://github.com/rswag/rswag) from 2.10.1 to 2.11.0.
- [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.10.1...2.11.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 22:12:51 +00:00
Maikel
903bf8a725 Merge pull request #11650 from openfoodfoundation/dependabot/bundler/rswag-api-2.11.0
chore(deps): bump rswag-api from 2.10.1 to 2.11.0
2023-10-12 09:11:17 +11:00
dependabot[bot]
b8b6641a05 chore(deps): bump paranoia from 2.6.2 to 2.6.3
Bumps [paranoia](https://github.com/rubysherpas/paranoia) from 2.6.2 to 2.6.3.
- [Release notes](https://github.com/rubysherpas/paranoia/releases)
- [Changelog](https://github.com/rubysherpas/paranoia/blob/core/CHANGELOG.md)
- [Commits](https://github.com/rubysherpas/paranoia/compare/v2.6.2...v2.6.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 22:07:31 +00:00
dependabot[bot]
0d3a1417d6 chore(deps): bump responders from 3.1.0 to 3.1.1
Bumps [responders](https://github.com/heartcombo/responders) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/heartcombo/responders/releases)
- [Changelog](https://github.com/heartcombo/responders/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heartcombo/responders/compare/v3.1.0...v3.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 22:06:10 +00:00
Maikel
c047a2c70c Merge pull request #11648 from openfoodfoundation/dependabot/bundler/rswag-ui-2.11.0
chore(deps): bump rswag-ui from 2.10.1 to 2.11.0
2023-10-12 09:03:14 +11:00
Konrad
047360e839 Merge pull request #11646 from dacook/buu-products-menu
Show only the new products page in the menu
2023-10-11 21:31:38 +02:00
HillaryOkello
d8e5f7ae4c Remove padding-top for the ordered lists 2023-10-11 15:55:52 +03:00
Mohamed ABDELLANI
1c2aa1c370 fix linter issue 2023-10-11 11:00:37 +01:00
Mohamed ABDELLANI
c750602b52 remove duplicated code 2023-10-11 10:38:45 +01:00
dependabot[bot]
54d3b39b2e chore(deps): bump rswag-api from 2.10.1 to 2.11.0
Bumps [rswag-api](https://github.com/rswag/rswag) from 2.10.1 to 2.11.0.
- [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.10.1...2.11.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 09:27:01 +00:00
dependabot[bot]
61bfde4e80 chore(deps): bump rswag-ui from 2.10.1 to 2.11.0
Bumps [rswag-ui](https://github.com/rswag/rswag) from 2.10.1 to 2.11.0.
- [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.10.1...2.11.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 09:24:44 +00:00
Mohamed ABDELLANI
7cb200e21e fix linting errors 2023-10-11 09:27:16 +01:00
Mohamed ABDELLANI
4a74396bcc add 'app/models/invoice/data_presenter.rb' to Metrics/ClassLength:Exclude 2023-10-11 09:27:16 +01:00
Mohamed ABDELLANI
9950dd90f7 fix display_checkout_taxes_hash 2023-10-11 09:27:16 +01:00
Mohamed ABDELLANI
7eabb9a170 move include ::ActionView::Helpers::NumberHelper to Invoice::DataPresenter::Base 2023-10-11 09:27:16 +01:00
Mohamed ABDELLANI
aa4798d35c add adjustables to the list of objects to serialize when creating an invoice 2023-10-11 09:27:16 +01:00
Mohamed ABDELLANI
fc519da83b update the invoice system tests to run with invoice feature (enabled/disabled) 2023-10-11 09:27:16 +01:00
Mohamed ABDELLANI
d40338bed5 add adjustment originators to the order serialization
for some helpers like display_checkout_taxes_hash, it's needed to access the tax rates through the adjument's originator.
The adjustment's originator will store the minimal details: id, type and amount
2023-10-11 09:26:50 +01:00
Mohamed ABDELLANI
a2b06fa200 fix cloning all_eligible_adjustments array on DataPresenter#checkout_adjustments 2023-10-11 09:26:50 +01:00
Mohamed ABDELLANI
b027387bee add :originator_type to Invoice::AdjustmentSerializer 2023-10-11 09:26:50 +01:00
Mohamed ABDELLANI
68a6fb132a implement display_adjustment_tax_rates helper on the adjustment presenter
For every adjustment a list of tax rates will be created using TaxRateFinder.tax_rates_of.
This will prevent running the queries to find the tax rates during the invoice generation.
2023-10-11 09:26:50 +01:00
Mohamed ABDELLANI
33826631a3 reimplement the display_line_item_tax_rates helper on the line item presenter
1. reimplment the helper on the LintItem presenter
2. add the tax rate associated to the line items to the list of objects to serialize during the order serialization.
3. implement a presenter for the introducer tax rates.
2023-10-11 09:26:49 +01:00
Maikel
7fe7176e5d Merge pull request #11641 from dacook/release-template
Update feature toggle title
2023-10-11 16:56:56 +11:00
David Cook
472cd9b55c Merge pull request #11639 from openfoodfoundation/dependabot/bundler/bullet-7.1.1
chore(deps-dev): bump bullet from 7.1.0 to 7.1.1
2023-10-11 14:14:27 +11:00
David Cook
32b2e572b3 Merge pull request #11643 from openfoodfoundation/dependabot/bundler/sidekiq-7.1.6
chore(deps): bump sidekiq from 7.1.5 to 7.1.6
2023-10-11 14:01:13 +11:00
dependabot[bot]
ca2d175650 chore(deps-dev): bump bullet from 7.1.0 to 7.1.1
Bumps [bullet](https://github.com/flyerhzm/bullet) from 7.1.0 to 7.1.1.
- [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyerhzm/bullet/compare/7.1.0...7.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 02:52:50 +00:00
David Cook
64ba01a55c Merge pull request #11637 from mkllnk/spec-report-order
Test customer report filtering without sorting
2023-10-11 13:49:25 +11:00
David Cook
69b2386c52 Merge pull request #11631 from openfoodfoundation/dependabot/bundler/awesome_nested_set-3.6.0
chore(deps): bump awesome_nested_set from 3.5.0 to 3.6.0
2023-10-11 13:47:55 +11:00
David Cook
fd6bd72e7a Merge pull request #11630 from openfoodfoundation/dependabot/bundler/stripe-9.4.0
chore(deps): bump stripe from 9.3.0 to 9.4.0
2023-10-11 13:46:49 +11:00
David Cook
b42cf9735f Only validate an image if it has been changed
Best viewed with whitespace ignored.
2023-10-11 10:12:52 +11:00
David Cook
31b5be73f9 Add spec 2023-10-11 10:12:52 +11:00
lauriejefferson
e056ba42db added 'credit owed' label and removed red styling when balance <= 0 2023-10-10 17:14:16 -04:00
David Cook
99205e435c Show only the new products page in the menu
When the feature toggle is enabled, we don't want to see the old products page. It's a bit broken and causes confusion. But we still want to be able to access it by the URL for now.
2023-10-10 22:09:26 +11:00
Konrad
0bd4fe315c Merge pull request #11620 from openfoodfoundation/dependabot/bundler/devise-i18n-1.12.0
chore(deps): bump devise-i18n from 1.11.0 to 1.12.0
2023-10-10 12:36:42 +02:00
dependabot[bot]
f57d139909 chore(deps): bump sidekiq from 7.1.5 to 7.1.6
Bumps [sidekiq](https://github.com/sidekiq/sidekiq) from 7.1.5 to 7.1.6.
- [Changelog](https://github.com/sidekiq/sidekiq/blob/main/Changes.md)
- [Commits](https://github.com/sidekiq/sidekiq/compare/v7.1.5...v7.1.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-10 10:05:08 +00:00
David Cook
3d821722e1 Update feature toggle title
[skip ci] because this isn't covered (and doesn't need to be).
2023-10-10 16:30:49 +11:00
Maikel Linke
228f69f13e Test customer report filtering without sorting
The report doesn't seem to sort. So the specs don't expect that either
now. These specs were flaky before, depending on the random order in the
database query result.
2023-10-09 12:05:24 +11:00
Maikel
90c25d604b Merge pull request #11441 from macanudo527/fix_rails_HasManyOrHasOneDependent
Fix Rails/HasManyOrHasOneDependent
2023-10-09 11:44:23 +11:00
Maikel
b8f15ca52f Merge pull request #11632 from openfoodfoundation/dependabot/bundler/bullet-7.1.0
chore(deps-dev): bump bullet from 7.0.7 to 7.1.0
2023-10-09 10:56:00 +11:00
Konrad
6cfc20fcaa Merge pull request #11345 from abdellani/support-enabling-invoices-to-individual-users
Support enabling invoices to individual users
2023-10-08 22:22:33 +02:00
David Cook
1c0ebfe61e Add comment 2023-10-08 21:47:17 +02:00
Mohamed ABDELLANI
95e7900585 test print invoice button under ACTIONS 2023-10-08 21:47:17 +02:00
Mohamed ABDELLANI
13b366e7ff list send invoice and print invoice under actions even when the invoice feature is enabled 2023-10-08 21:47:17 +02:00
Mohamed ABDELLANI
a9719a798f fix order mailer tests 2023-10-08 21:47:17 +02:00
Mohamed ABDELLANI
f047deaf12 load the latest invoice when user tries to print an order 2023-10-08 21:47:17 +02:00
Mohamed ABDELLANI
3f4eab2a0a update the invoice renderer to check if the feature is enable for individual user 2023-10-08 21:47:17 +02:00
Mohamed ABDELLANI
dce096a56e check if invoices feature is enabled for the current user before showing invoices tab 2023-10-08 21:47:17 +02:00
Mohamed ABDELLANI
614c8a5060 update order mailer to check if invoices feature is enabled for the current user 2023-10-08 21:47:17 +02:00
Mohamed ABDELLANI
adecf64cf3 update bulk invoice job to check if the invoices feature is enabled for the current user 2023-10-08 21:47:17 +02:00
Mohamed ABDELLANI
bd2a1b3e22 check if invoices feature is enabled for the current user before printing a single invoice 2023-10-08 21:47:17 +02:00
Konrad
944925eb06 Merge pull request #11603 from murjax/prevent-customer-edit-shipped-9235
Prevent customers from editing shipped orders
2023-10-08 21:42:18 +02:00
Konrad
0a36f7983f Merge pull request #11623 from ccozkan/issue-11607-timeshift-in-customers-report
Fix occurring time shift in customers report results
2023-10-08 19:02:02 +02:00
Çağrı Özkan
877ea12645 Call in_time_zone on boundary parameters 2023-10-08 17:44:24 +02:00
Konrad
eb9c8bd678 Merge pull request #11618 from openfoodfoundation/dependabot/npm_and_yarn/trix-2.0.7
chore(deps): bump trix from 2.0.6 to 2.0.7
2023-10-08 17:34:41 +02:00
Konrad
ef855e8887 Merge pull request #11619 from ccozkan/issue-11611
Add ability to customers report to filter with open ended boundaries
2023-10-08 16:28:52 +02:00
dependabot[bot]
ebfacea17b chore(deps): bump stripe from 9.3.0 to 9.4.0
Bumps [stripe](https://github.com/stripe/stripe-ruby) from 9.3.0 to 9.4.0.
- [Release notes](https://github.com/stripe/stripe-ruby/releases)
- [Changelog](https://github.com/stripe/stripe-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-ruby/compare/v9.3.0...v9.4.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-06 12:25:38 +00:00
Rachel Arnould
abfd316b3d Merge pull request #11565 from dacook/buu-editing-part4-11059
[BUU] Inline error messages and validation
2023-10-06 14:23:58 +02:00
David Cook
117085aeba Transform weight before validation
I guess validates_length_from_database also validates numbers. That's not a bad thing.
So now it's being validated, we should validate the transformed value that will be saved to the database.
2023-10-06 14:15:07 +02:00
David Cook
9a9be8dacd Validate length of variant fields 2023-10-06 14:15:07 +02:00
David Cook
875d083a1d There's a gem for that [add gem] 2023-10-06 14:15:07 +02:00
David Cook
3ec6386e1c Validate length of some product fields
We know if the values are too long, so let's provide a useful message rather than generating an unhandled database error.
This code seems rather repetetive, it would be good to use a shared module. I wonder if there's a gem for that.

Note that the existing /products/*/edit screen doesn't even handle validation errors yet, but that's something for another day..
2023-10-06 14:15:07 +02:00
David Cook
fee126d6e1 Style form error messages
With an icon, and sentence case (upcase_first is similar to humanize, but simpler (https://dev.to/junko911/rails-helper-methods-to-change-the-form-of-strings-1h9c#upcase-first))
2023-10-06 14:15:07 +02:00
David Cook
3b19a19776 Show inline errors for product fields
The form helper () doesn't work for this case, but it seems we can call it directly like this instead. I'd like to fix the helper, but got stuck this time.
2023-10-06 14:15:07 +02:00
David Cook
5e478b8a76 Vertically align non-input content in table rows 2023-10-06 14:15:07 +02:00
David Cook
836f5a1fb3 Remove unused withError class
It added specificity but had no use.
I reviewed a couple of screens to make sure:
  - /admin/orders/Rx/customer
  - /admin/properties/new

I have to confess I don't know how Spree::Admin::BaseHelper is included, or where it's used.

Best viewed with whitespace ignored.
2023-10-06 14:15:07 +02:00
dependabot[bot]
734e80880b chore(deps-dev): bump bullet from 7.0.7 to 7.1.0
Bumps [bullet](https://github.com/flyerhzm/bullet) from 7.0.7 to 7.1.0.
- [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyerhzm/bullet/compare/7.0.7...7.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-06 09:23:35 +00:00
dependabot[bot]
0adf44e525 chore(deps): bump awesome_nested_set from 3.5.0 to 3.6.0
Bumps [awesome_nested_set](https://github.com/collectiveidea/awesome_nested_set) from 3.5.0 to 3.6.0.
- [Release notes](https://github.com/collectiveidea/awesome_nested_set/releases)
- [Changelog](https://github.com/collectiveidea/awesome_nested_set/blob/master/CHANGELOG)
- [Commits](https://github.com/collectiveidea/awesome_nested_set/compare/v3.5.0...v3.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-06 09:16:36 +00:00
David Cook
9e04dc36d1 Merge pull request #11629 from mkllnk/tag-release
Add script to create patch release tags
2023-10-06 15:16:45 +11:00
Maikel Linke
74a8b1e721 Add script to create patch release tags 2023-10-06 13:58:37 +11:00
Neal Chambers
085d0f27f7 Move Timestamp Generation into its own Method 2023-10-06 11:19:31 +09:00
Neal Chambers
aaa42ce410 Add Filtering for Optional Relationships 2023-10-06 11:06:54 +09:00
Neal Chambers
3c51b48225 Fix Formatting and Bugs 2023-10-06 11:06:54 +09:00
Neal Chambers
6d22ec5605 Improve Migration Timestamping 2023-10-06 11:06:54 +09:00
Neal Chambers
2b4bf185d6 Replace Duplicate Model Detection with Column Specific Foreign Key Check 2023-10-06 11:06:54 +09:00
Neal Chambers
f02da9f59e Update schema.rb with new Foreign Keys 2023-10-06 11:06:54 +09:00
Neal Chambers
f1c61fa3aa Add Option to Write Migrations to Disk 2023-10-06 11:06:54 +09:00
Neal Chambers
fd8e94cb50 Update Migrations to Include Commented-Out Orphaned Record Query 2023-10-06 11:06:54 +09:00
Neal Chambers
2d6784b88d Allow Full Modulized Class Name to be Used for TODOs 2023-10-06 11:06:54 +09:00
Neal Chambers
d4c363ac39 Reduce Cyclomatic Complexity 2023-10-06 11:06:54 +09:00
Neal Chambers
099b2f455f Remove Unified Orphaned Records SQLs 2023-10-06 11:06:54 +09:00
Neal Chambers
9df42f596c Add SQL to Migration Files 2023-10-06 11:06:54 +09:00
Neal Chambers
7ec1f69e2a Create Foreign Key TODO 2023-10-06 11:06:54 +09:00
Neal Chambers
800d50d732 Add Foreign Key Column to Migrations 2023-10-06 11:06:54 +09:00
Neal Chambers
816ffe6e32 Convert rake task to spec 2023-10-06 11:06:54 +09:00
Neal Chambers
6729218846 Improve SQL query to Allow for Optional Relationships 2023-10-06 11:06:54 +09:00
Neal Chambers
72e75c0e2d Remove Delete on Cascade from Migrations 2023-10-06 11:06:54 +09:00
Neal Chambers
3590da6106 Remove Old Migrations 2023-10-06 11:06:54 +09:00
Neal Chambers
bf2c6128a7 Add Foreign Key Column 2023-10-06 11:06:54 +09:00
Neal Chambers
78cb4c6adc Add migrations to add foreign keys to database 2023-10-06 11:06:54 +09:00
Neal Chambers
5b87890141 Add SQL script to check for Orphaned Records 2023-10-06 11:06:54 +09:00
Neal Chambers
cb864411ee Add Rake Task that Generates Migrations for Missing Foreign Keys 2023-10-06 11:06:50 +09:00
David Cook
cd34e160bf Fix deleting of return_authorizations
return_authorizations have a stock_location_id, not the other way round. So there's no dependent field to nullify.
2023-10-06 10:58:49 +09:00
Neal Chambers
fec59e5ae2 Apply Changes Suggested by Code Review 2023-10-06 10:58:49 +09:00
Neal Chambers
cf07a055d0 Fix Rails/HasManyOrHasOneDependent with nil 2023-10-06 10:58:49 +09:00
Neal Chambers
e49489cd1c Fix invoices dependent relationship 2023-10-06 10:58:49 +09:00
Neal Chambers
d295a3bdae Update .rubocop_todo.yml for Reversions 2023-10-06 10:58:49 +09:00
Neal Chambers
2520d222bb Fix Rails/HasManyOrHasDependent with restrict_with_exception 2023-10-06 10:58:49 +09:00
Neal Chambers
180cd4abe6 Revert Complicated Rails/HasManyOrHasOneDependent Errors 2023-10-06 10:58:49 +09:00
Neal Chambers
e22e08e666 Change destroy to nullify 2023-10-06 10:58:49 +09:00
Neal Chambers
7c9bc58a4b Add nullify to orders relationship, instead of manually nullifying 2023-10-06 10:58:49 +09:00
Neal Chambers
921347f0f2 Update .rubocop_todo.yml 2023-10-06 10:58:49 +09:00
Neal Chambers
7f8ac94933 Fix Rails/HasManyOrHasOneDependent with nil 2023-10-06 10:58:49 +09:00
Neal Chambers
019b54ea95 Fix Rails/HasManyOrHasOneDependent with delete_all 2023-10-06 10:58:49 +09:00
Neal Chambers
070d2cb855 Fix stock_movements relation in variant 2023-10-06 10:58:49 +09:00
Neal Chambers
825342914d Fix Rails/HasManyOrHasOneDependent with nullify 2023-10-06 10:58:49 +09:00
Neal Chambers
b76fb10d46 Fix Rails/HasManyOrHasOneDependent with Destroy 2023-10-06 10:58:49 +09:00
Neal Chambers
53f5d63e4a Delete Rails/HasManyOrHasOneDependent TODOs 2023-10-06 10:58:49 +09:00
Maikel Linke
ff60dacebd Update all locales with the latest Transifex translations 2023-10-06 11:23:43 +11:00
David Cook
3f27fb69b3 Merge pull request #11625 from aisayo/patch-1
Update README.md
2023-10-05 09:52:03 +11:00
David Cook
ee13d1072c Merge pull request #11624 from filipefurtad0/make_seed_data_enteprise_visible
[dev ENV only] Adds attribute to enterprise factory
2023-10-05 09:10:23 +11:00
aisayo
97f315b363 Update README.md
Outdated instructions
2023-10-04 15:34:37 -04:00
filipefurtad0
0e699e9cee Adds attribute to enterprise factory
so that sample data rake task creates visible enterprises by default
2023-10-04 18:00:36 +01:00
lauriejefferson
0cda8d7d4c removed paid styling and added currency formatter to payment_total 2023-10-04 09:30:05 -04:00
Sigmund Petersen
4e8cd330b3 Merge pull request #11571 from dacook/buu-editing-fixups
[BUU] editing fixups
2023-10-04 13:48:31 +02:00
David Cook
6f43165006 Show generic error message when StimulusReflex fails
I decided not to invest the time to figure out how to test this..

The messages should have the same effect as the 500 error, but not technically a 500 because it's not handling a HTTP response. The documentation seems to state this covers server-side errors only (not network errors for example). I couldn't find any way to handle network errors with action cable.
2023-10-04 13:40:36 +02:00
David Cook
6d35b1ac71 Fix bulk form input styles
'header' fields are meant to be bold, and the field backgrounds are meant to match the cell background colour.
2023-10-04 13:40:36 +02:00
David Cook
cd63ab63d8 Refactor form code
Co-authored-by: Maikel <maikel@email.org.au>
2023-10-04 13:40:36 +02:00
David Cook
ed207e3df6 DRY up code 2023-10-04 13:40:36 +02:00
David Cook
4467758a9f Apply code suggestion
Co-authored-by: Jean-Baptiste Bellet <jb.bellet@gmail.com>
2023-10-04 13:40:36 +02:00
David Cook
136b370de1 Merge pull request #11621 from openfoodfoundation/dependabot/bundler/valid_email2-5.1.0
chore(deps): bump valid_email2 from 5.0.5 to 5.1.0
2023-10-04 15:33:26 +11:00
David Cook
7ffe318352 Merge pull request #11616 from openfoodfoundation/dependabot/bundler/sidekiq-7.1.5
chore(deps): bump sidekiq from 7.1.4 to 7.1.5
2023-10-04 15:21:03 +11:00
dependabot[bot]
2b2bb6d46b chore(deps): bump valid_email2 from 5.0.5 to 5.1.0
Bumps [valid_email2](https://github.com/micke/valid_email2) from 5.0.5 to 5.1.0.
- [Changelog](https://github.com/micke/valid_email2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micke/valid_email2/compare/v5.0.5...v5.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-04 03:50:57 +00:00
dependabot[bot]
34829ea53e chore(deps): bump devise-i18n from 1.11.0 to 1.12.0
Bumps [devise-i18n](https://github.com/tigrish/devise-i18n) from 1.11.0 to 1.12.0.
- [Release notes](https://github.com/tigrish/devise-i18n/releases)
- [Changelog](https://github.com/tigrish/devise-i18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/tigrish/devise-i18n/compare/v1.11.0...v1.12.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-04 03:49:24 +00:00
David Cook
057a9f73ed Merge pull request #11605 from openfoodfoundation/dependabot/bundler/rubocop-rails-2.21.2
chore(deps-dev): bump rubocop-rails from 2.21.1 to 2.21.2
2023-10-04 14:49:03 +11:00
Maikel
05b30a72e5 Merge pull request #11604 from openfoodfoundation/dependabot/bundler/valid_email2-5.0.5
chore(deps): bump valid_email2 from 5.0.3 to 5.0.5
2023-10-04 14:45:45 +11:00
Maikel
2ac2b30b14 Merge pull request #11588 from filipefurtad0/split_subscription_spec
Splits bottleneck system/admin/subscriptions_spec.rb
2023-10-04 13:33:20 +11:00
Çağrı Özkan
f93fcd347b Rubocop fix 2023-10-04 02:00:21 +03:00
Çağrı Özkan
a5a13761a8 Filter with open ended boundaries upon missing params 2023-10-04 01:05:41 +03:00
Ryan Murphy
4db6570039 9235: Prevent customers from editing shipped orders 2023-10-03 08:36:57 -04:00
dependabot[bot]
f4fce6e69c chore(deps): bump trix from 2.0.6 to 2.0.7
Bumps [trix](https://github.com/basecamp/trix) from 2.0.6 to 2.0.7.
- [Release notes](https://github.com/basecamp/trix/releases)
- [Commits](https://github.com/basecamp/trix/compare/v2.0.6...v2.0.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-03 09:52:21 +00:00
filipefurtad0
14caf3b25c Moves helper into support folder
Wraps SubscripionHelper module around definitions
2023-10-03 09:49:26 +01:00
filipefurtad0
181ddcefbc Updates rubocop_todo file
Removes local untracked files
2023-10-03 09:49:26 +01:00
filipefurtad0
bc73d09438 Declares enable_subscriptions separately 2023-10-03 09:49:26 +01:00
filipefurtad0
96432ebec2 Splits files into new folder
Creates helper file for existing methods
2023-10-03 09:49:26 +01:00
filipefurtad0
8bc2feda23 Asserts for subscription instructions and tab 2023-10-03 09:49:26 +01:00
filipefurtad0
b554308f10 Sets correct context 2023-10-03 09:49:26 +01:00
dependabot[bot]
db3cdd95a3 chore(deps): bump sidekiq from 7.1.4 to 7.1.5
Bumps [sidekiq](https://github.com/sidekiq/sidekiq) from 7.1.4 to 7.1.5.
- [Changelog](https://github.com/sidekiq/sidekiq/blob/main/Changes.md)
- [Commits](https://github.com/sidekiq/sidekiq/compare/v7.1.4...v7.1.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-03 05:28:17 +00:00
David Cook
2558855ad5 Merge pull request #11595 from openfoodfoundation/dependabot/bundler/rubocop-1.56.4
chore(deps-dev): bump rubocop from 1.56.3 to 1.56.4
2023-10-03 16:26:21 +11:00
dependabot[bot]
372defe20f chore(deps-dev): bump rubocop-rails from 2.21.1 to 2.21.2
Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.21.1 to 2.21.2.
- [Release notes](https://github.com/rubocop/rubocop-rails/releases)
- [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.21.1...v2.21.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 09:18:16 +00:00
dependabot[bot]
0cd87a7bbf chore(deps): bump valid_email2 from 5.0.3 to 5.0.5
Bumps [valid_email2](https://github.com/micke/valid_email2) from 5.0.3 to 5.0.5.
- [Changelog](https://github.com/micke/valid_email2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micke/valid_email2/compare/v5.0.3...v5.0.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 09:06:58 +00:00
Maikel
b122c93055 Merge pull request #11586 from macanudo527/fix_stylehash_11
Fix Style/HashSyntax 12/13
2023-10-02 16:25:21 +11:00
Maikel Linke
fec6caf576 Remove unnecessary Rubocop disable 2023-10-02 16:18:51 +11:00
Gaetan Craig-Riou
7f2c1feaf8 Fix rubocop warning 2023-10-02 15:58:13 +11:00
Gaetan Craig-Riou
1a66f3d94f Fix system spec to take into account discounted tax 2023-10-02 15:58:13 +11:00
Gaetan Craig-Riou
8d639c14cb Add a fake adjustment voucher tax on admin order page
When tax are included in price, voucher tax is stored in the voucher
adjustment and not as its own adjustment. So we add a "fake adjustment"
for display purposes.
2023-10-02 15:58:12 +11:00
Gaetan Craig-Riou
8254bd9625 Take into account voucher tax part when displaying tax included in price 2023-10-02 15:58:12 +11:00
Maikel
350ca3b778 Merge pull request #11479 from filipefurtad0/split_split_checkout
Splits checkout files
2023-10-02 12:01:20 +11:00
Konrad
8150a8b04a Merge pull request #11579 from macanudo527/remove_delegate_belongs_to
Remove Deprecated delegate_belongs_to
2023-10-01 13:19:22 +02:00
Konrad
11ea4d93a9 Merge pull request #11584 from openfoodfoundation/dependabot/npm_and_yarn/trix-2.0.6
chore(deps): bump trix from 2.0.5 to 2.0.6
2023-10-01 12:49:32 +02:00
Konrad
33d9ed4000 Merge pull request #11591 from dacook/admin-users-api-key-9833
Redirect to admin users edit path on success
2023-10-01 12:20:46 +02:00
Konrad
06ebeeac0f Merge pull request #11543 from rioug/11364-Voucher-fix-tax-report
[Vouchers] Fix Sales Tax Totals By Order report
2023-10-01 02:09:33 +02:00
dependabot[bot]
89414ba821 chore(deps-dev): bump rubocop from 1.56.3 to 1.56.4
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.56.3 to 1.56.4.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.56.3...v1.56.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-29 09:53:53 +00:00
lauriejefferson
7320bb5af1 removed styling for paid orders and removed row for non oustanding balance 2023-09-28 20:02:58 -04:00
Neal Chambers
f3382d78c4 Update .rubocop_todo.yml 2023-09-29 08:51:48 +09:00
Neal Chambers
57d2f04330 Fix Style/HashSyntax 2023-09-29 08:51:48 +09:00
Gaetan Craig-Riou
dd0279c983 Update all locales with the latest Transifex translations 2023-09-28 11:52:49 +02:00
David Cook
e844d71abc Redirect to edit path on success
Simply rendering the edit form on the posted path is problematic. For example if you refresh the path you get a 404.
But if there's errors, we want to render the form with unsaved values so you can see the errors and try again.
2023-09-28 09:41:44 +10:00
Maikel
c1587b689a Merge pull request #11589 from openfoodfoundation/dependabot/bundler/aws-sdk-s3-1.136.0
chore(deps): bump aws-sdk-s3 from 1.135.0 to 1.136.0
2023-09-28 09:20:36 +10:00
Maikel Linke
3fc78e1f7f Update Rubocop todo file 2023-09-28 08:26:35 +10:00
filipefurtad0
a634283ec5 Removes unecessary shipping method setup - guest 2023-09-27 22:20:31 +01:00
filipefurtad0
adede9df03 Removes unecessary shipping method setup - details 2023-09-27 22:19:37 +01:00
filipefurtad0
6763095f26 Removes unecessary shipping method setup - payment 2023-09-27 22:19:37 +01:00
filipefurtad0
3702a2e7b1 Removes unecessary shipping method setup - summary 2023-09-27 22:19:31 +01:00
filipefurtad0
25c58426db Moves split-checkout files to own folder
Removes split_ prefix
2023-09-27 21:45:03 +01:00
dependabot[bot]
4d7f21eec4 chore(deps): bump aws-sdk-s3 from 1.135.0 to 1.136.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.135.0 to 1.136.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-27 09:05:00 +00:00
Gaetan Craig-Riou
33f3c660a4 Fix rubocop warning 2023-09-26 11:21:05 +02:00
filipefurtad0
a4abedf3e3 Fixes rubocop issues 2023-09-26 10:18:28 +01:00
filipefurtad0
d3f9f989f6 Moves summary-step scenarios into dedicated file 2023-09-26 10:18:28 +01:00
filipefurtad0
67793c78ad Moves payment-step scenarios into dedicated file 2023-09-26 10:18:28 +01:00
filipefurtad0
a0611057f0 Moves details-step/not selecting shipping method scenarios into dedicated file 2023-09-26 10:18:28 +01:00
filipefurtad0
b8f7d6102e Moves guest/out of stock scenarios into dedicated file 2023-09-26 10:18:28 +01:00
Gaetan Craig-Riou
b129b9f1d0 DRY up specs 2023-09-26 10:50:58 +02:00
Gaetan Craig-Riou
e9051f5c58 As per review comment, clarify specs
And some DRYing
2023-09-26 10:26:06 +02:00
David Cook
91b251acd4 Refactor 2023-09-26 10:56:44 +10:00
Neal Chambers
50eb8f31f2 Remove Deprecated delegate_belongs_to 2023-09-26 09:50:08 +09:00
David Cook
4e05047cc6 Merge pull request #11583 from macanudo527/fix_stylehash_10
Fix Style/HashSyntax 11/13
2023-09-26 10:38:54 +10:00
dependabot[bot]
8797132117 chore(deps): bump trix from 2.0.5 to 2.0.6
Bumps [trix](https://github.com/basecamp/trix) from 2.0.5 to 2.0.6.
- [Release notes](https://github.com/basecamp/trix/releases)
- [Commits](https://github.com/basecamp/trix/compare/v2.0.5...v2.0.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-25 09:14:02 +00:00
Gaetan Craig-Riou
02aaf6f692 Remove voucher validation on code format
The code doesn't rely on label match any more so this restriction
is not necessary anymore
2023-09-25 09:49:55 +02:00
Gaetan Craig-Riou
097b775fa0 Add metadata before saving adjustment
Rails may put it all in one transaction

Co-authored-by: Maikel <maikel@email.org.au>
2023-09-25 17:44:16 +10:00
Neal Chambers
48132b055f Update .rubocop_todo.yml 2023-09-25 13:15:54 +09:00
Neal Chambers
70e218d2e9 Fix Style/HashSyntax 2023-09-25 13:15:38 +09:00
Maikel
51f125e301 Merge pull request #11582 from macanudo527/fix_stylehash_9
Fix Style/HashSyntax 10/13
2023-09-25 13:43:38 +10:00
Neal Chambers
232ffb1eb8 Update .rubocop_todo.yml 2023-09-24 22:41:48 +09:00
Neal Chambers
35e8f88943 Fix Style/HashSyntax 2023-09-24 22:41:27 +09:00
Rachel Arnould
aa489d4cd6 Merge pull request #11185 from jibees/11155-improve-customer-addresses-report
Admin, reports: improve customer addresses report
2023-09-22 18:06:47 +02:00
Jean-Baptiste Bellet
2803f1c6b2 Group all orders by customer_id, email and distributor_id
Therefore have one (and only) row per customer

Co-Authored-By: Maikel <maikel@email.org.au>
2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
9ce89125a4 Fix linter error: line is too long 2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
d6c10170da Use plain text instead of computed date in specs
https://github.com/openfoodfoundation/openfoodnetwork/wiki/Code-Conventions#prefer-plain-text-over-method-calls-in-expected-values
2023-09-22 16:44:33 +01:00
jibees
5eab033a80 Improve indentation
Co-Authored-By: Maikel <maikel@email.org.au>
2023-09-22 16:44:33 +01:00
Maikel Linke
adc5bf6e93 Simplify date filter in customers report 2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
82ccdcca70 Customers report has only one report: Customers
No more `addresses` report

+ Fix pre-existing rubocop issues

+ Create method to simplify and remove CyclomaticComplexity error
2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
5edc8d8ce1 Delete Mailing List report 2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
c6c9cdca65 Add last completed order date 2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
d2fbaa7cfd Add total amount spent at the shop for the customer 2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
d55098f94f Add the number of orders for the customer 2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
1378202732 Disable rubocop warning. Not sure how to handle it actually 2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
cc26da6560 We'll need to get all the orders per line to count and sum them; prepare it 2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
c134de850c Add filter on completed_at of an order 2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
4f332504af Add new line at the end of file 2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
9e295146cb Remove supplier filter 2023-09-22 16:44:33 +01:00
Jean-Baptiste Bellet
baff4b5399 Rename 'distributor' to 'hub' 2023-09-22 16:44:33 +01:00
Gaetan Craig-Riou
19fc1fab8c As per review, visit page directly to save time
We still visit the page as user would do once to make sure it is
working.
2023-09-22 11:35:56 +02:00
filipefurtad0
b913e5c851 Update all locales with the latest Transifex translations 2023-09-22 10:29:52 +01:00
Gaetan Craig-Riou
03ce39d5c5 Add metadata to tax related voucher adjustment
In the scenario where you have tax excluded from price, when adding
a voucher to an order, we create 2 voucher adjusments. One of them
represent the tax part of the voucher, and has a label starting with
"Tax". To better differentiate them and allow a reliable way to
query it, we add a metadata entry.
2023-09-22 11:16:21 +02:00
Rachel Arnould
a3ca7e9032 Merge pull request #11568 from jibees/11069-buu-fully-update-the-details-of-my-products-and-variants-1
🚧 [BUU] Add `Edit` link into a small menu on the last Actions column to the right of the table
2023-09-22 10:30:01 +02:00
Gaetan Craig-Riou
0a68300e40 Remove Voucher scenario
It is now covered by unit test
2023-09-22 10:22:47 +02:00
Gaetan Craig-Riou
25adaaa6ea Simplify test set up 2023-09-22 10:17:50 +02:00
Gaetan Craig-Riou
f54846829d Add test for #voucher_tax_adjustment
And mock calls to VoucherAdjustmentsService
2023-09-22 10:17:50 +02:00
Gaetan Craig-Riou
9e49da8fae Add unit test for Reporting::Reports::SalesTax::SalesTaxTotalsByOrder
And a small refactoring.
Currently it only covers tax excluded from price
2023-09-22 10:17:50 +02:00
Gaetan Craig-Riou
3197480121 Prevent voucher from starting with "Tax"
Plus spec
2023-09-22 10:17:50 +02:00
Gaetan Craig-Riou
bec5ad55dd Use VoucherAdjustmentsService to retrieve tax part of the voucher 2023-09-22 10:17:50 +02:00
Gaetan Craig-Riou
7c34145ed7 Add voucher_included_tax and voucher_excluded_tax
It retrieves the tax part of the voucher adjustment for tax included
in price and tax excluded from price respectively.
2023-09-22 10:17:40 +02:00
Gaetan Craig-Riou
b620e413f4 Merge pull request #11378 from mkllnk/dfc-ofn-product-group-id
[DFC API] Add custom OFN product id to DFC SuppliedProduct
2023-09-22 17:57:11 +10:00
Jean-Baptiste Bellet
b9cd8ee462 Factorize elements into beforeEach block 2023-09-22 09:34:36 +02:00
Jean-Baptiste Bellet
458a031558 Create a private function for event listener 2023-09-22 09:30:40 +02:00
Maikel Linke
847ddab4e6 Improve readability of assignment without blank lines 2023-09-22 17:18:49 +10:00
Maikel
886988e24a Merge pull request #11578 from macanudo527/fix_stylehash_8
Fix Style/HashSyntax 9/13
2023-09-22 15:09:46 +10:00
Neal Chambers
4a3a246e7a Update .rubocop_todo.yml 2023-09-22 09:08:50 +09:00
Neal Chambers
fe88a88206 Fix Style/HashSyntax 2023-09-22 09:08:50 +09:00
Maikel
3ed92312dd Merge pull request #11576 from openfoodfoundation/dependabot/bundler/puma-6.4.0
chore(deps): bump puma from 6.3.1 to 6.4.0
2023-09-22 09:57:07 +10:00
Maikel
998370163c Merge pull request #11575 from openfoodfoundation/dependabot/bundler/aws-sdk-s3-1.135.0
chore(deps): bump aws-sdk-s3 from 1.134.0 to 1.135.0
2023-09-22 09:55:32 +10:00
Maikel
a2f9289031 Merge pull request #11570 from macanudo527/fix_stylehash_7
Fix Style/HashSyntax 8/13
2023-09-22 09:54:46 +10:00
Neal Chambers
22e3542de3 Update .rubocop_todo.yml 2023-09-21 22:58:42 +09:00
Neal Chambers
7ecd4a149b Fix Style/HashSyntax 2023-09-21 22:58:42 +09:00
Konrad
a55797d727 Merge pull request #11510 from rioug/11421-deactivate-voucher
[Vouchers] add activate/deactivate feature
2023-09-21 15:03:47 +02:00
Konrad
1e877f4183 Merge pull request #11555 from mkllnk/spree-orders
Remove duplicate association from Spree::User
2023-09-21 13:23:51 +02:00
Filipe
a587a10dfe Merge pull request #11573 from mkllnk/flaky-invoice-spec
Compare adjustments in deterministic order for invoices
2023-09-21 11:34:29 +01:00
jibees
4c82d27a7d Merge pull request #11574 from openfoodfoundation/dependabot/bundler/knapsack_pro-5.7.0
chore(deps-dev): bump knapsack_pro from 5.6.0 to 5.7.0
2023-09-21 11:34:01 +02:00
dependabot[bot]
252c86ccc0 chore(deps): bump puma from 6.3.1 to 6.4.0
Bumps [puma](https://github.com/puma/puma) from 6.3.1 to 6.4.0.
- [Release notes](https://github.com/puma/puma/releases)
- [Changelog](https://github.com/puma/puma/blob/master/History.md)
- [Commits](https://github.com/puma/puma/compare/v6.3.1...v6.4.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-21 09:31:34 +00:00
dependabot[bot]
d54a09f26a chore(deps): bump aws-sdk-s3 from 1.134.0 to 1.135.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.134.0 to 1.135.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-21 09:20:35 +00:00
dependabot[bot]
f44eae2d6b chore(deps-dev): bump knapsack_pro from 5.6.0 to 5.7.0
Bumps [knapsack_pro](https://github.com/KnapsackPro/knapsack_pro-ruby) from 5.6.0 to 5.7.0.
- [Changelog](https://github.com/KnapsackPro/knapsack_pro-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v5.6.0...v5.7.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-21 09:16:47 +00:00
David Cook
52fb4f5287 Remove unused workflow
Sadly this one can't work for PRs created from forks.
2023-09-21 16:42:27 +10:00
Maikel Linke
6386a997d3 Compare adjustments in deterministic order for invoices
The comparator would sometimes compare two different adjustments when it
should have compared two versions of the same adjustment.
2023-09-21 16:37:07 +10:00
Maikel Linke
ee1611904b Fix typos in spec description 2023-09-21 16:37:07 +10:00
David Cook
f2e8063a22 Merge pull request #11572 from dacook/test-api-changes
Remove unnecessary space
2023-09-21 15:57:42 +10:00
David Cook
ec29038372 Remove unnecessary space 2023-09-21 15:54:40 +10:00
David Cook
23959c96bc Send a Slack notification when api-changes PRs are merged 2023-09-21 15:53:34 +10:00
Maikel Linke
07ac381a97 Ignore block length of response blocks
In Rswag request specs, the `response` block is like `describe` and is
just used to group several other blocks. It can be long and that's okay.
2023-09-21 09:19:21 +10:00
Maikel Linke
02f251c900 Import DFC SuppliedProduct as new variant of existing product 2023-09-21 09:04:57 +10:00
Maikel Linke
db5b6e5406 Enable DFC importer to import OFN objects 2023-09-21 09:04:28 +10:00
Maikel Linke
fcf7b94278 Add our own SuppliedProduct with custom property 2023-09-21 09:02:20 +10:00
Maikel Linke
c42f62e09f Add custom OFN product id to DFC SuppliedProduct
The Spree::Variant in OFN corresponds to a DFC SuppliedProduct. But
several Spree::Variant can be grouped under one Spree::Product which
wasn't exposed on the DFC API.

I'm adding a custom property here which can be used internally and
shouldn't break any other DFC tools.

A gotcha of this first test implementation:

The `ofn:` prefix has not been defined in the context. Software needs
to know that this is an Open Food Network attribute or ignore it.
We could define our own context and ontology and publish it on our
website but I don't see any benefit of that at this point.
2023-09-21 08:54:32 +10:00
Maikel Linke
2175c59a6b Load spec helper not knowing Rails
When the application is not preloaded then running Rspec doesn't know
Rails until the spec helper is loaded. So we can't use Rails to find the
path of the spec helper. This has been fixed before but the DFC Address
code was developed at the same time and missed.
2023-09-21 08:54:32 +10:00
Maikel
458767fe13 Merge pull request #11569 from macanudo527/fix_stylehash_6
Fix Style/HashSyntax 7/13
2023-09-21 08:35:39 +10:00
Rachel Arnould
15137caed2 Merge pull request #11509 from dacook/buu-editing-part3-11059
[BUU] Bulk form editing features
2023-09-20 19:27:05 +02:00
Neal Chambers
bad1f55cdd Update .rubocop_todo.yml 2023-09-20 23:47:52 +09:00
Neal Chambers
29df80945d Fix Style/HashSyntax 2023-09-20 23:46:26 +09:00
Maikel
d216b68993 Merge pull request #11562 from macanudo527/fix_stylehash_5
Fix Style/HashSyntax 6/13
2023-09-20 12:00:30 +10:00
jibees
964373ce2b Merge pull request #11566 from openfoodfoundation/dependabot/bundler/valid_email2-5.0.3
chore(deps): bump valid_email2 from 5.0.2 to 5.0.3
2023-09-19 16:25:46 +02:00
jibees
34d605111a Merge pull request #11567 from openfoodfoundation/dependabot/bundler/ffaker-2.23.0
chore(deps): bump ffaker from 2.22.0 to 2.23.0
2023-09-19 16:25:01 +02:00
Jean-Baptiste Bellet
2a98789571 Add vertical-ellipsis-menu as product/variant actions menu in products table
+ add specs
2023-09-19 16:08:27 +02:00
Jean-Baptiste Bellet
c76bc07f7f Creates a vertical-ellipsis-menu component 2023-09-19 15:32:50 +02:00
Jean-Baptiste Bellet
2c478f1d8e Link to product/variant edit page 2023-09-19 14:26:14 +02:00
Jean-Baptiste Bellet
0847f6b0f6 Create a new column actions for each rows (product+variant) 2023-09-19 14:25:55 +02:00
dependabot[bot]
f9aa4a9d67 chore(deps): bump ffaker from 2.22.0 to 2.23.0
Bumps [ffaker](https://github.com/ffaker/ffaker) from 2.22.0 to 2.23.0.
- [Release notes](https://github.com/ffaker/ffaker/releases)
- [Changelog](https://github.com/ffaker/ffaker/blob/main/Changelog.md)
- [Commits](https://github.com/ffaker/ffaker/compare/v2.22.0...v2.23.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-19 09:56:46 +00:00
dependabot[bot]
5eeb45ed25 chore(deps): bump valid_email2 from 5.0.2 to 5.0.3
Bumps [valid_email2](https://github.com/micke/valid_email2) from 5.0.2 to 5.0.3.
- [Changelog](https://github.com/micke/valid_email2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micke/valid_email2/compare/v5.0.2...v5.0.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-19 09:46:32 +00:00
David Cook
759705efcf Add spec for onKeyup 2023-09-19 14:48:39 +10:00
David Cook
6bfdd1bc12 Split spec into multiple examples 2023-09-19 14:48:34 +10:00
David Cook
693d5bad4a Merge pull request #11551 from mkllnk/setup-node-version
Install the current node version in setup
2023-09-19 13:49:43 +10:00
David Cook
0af497ab23 Merge pull request #11539 from filipefurtad0/improve_tests_around_bulk_invoice_printing
[Release test automation] Adds assertions on bulk invoice creation
2023-09-19 13:49:19 +10:00
David Cook
fb93aeb195 Optimise spec 2023-09-19 13:39:36 +10:00
Neal Chambers
d1b8edaa94 Update .rubocop_todo.yml 2023-09-19 08:26:15 +09:00
Neal Chambers
42a6a02353 Fix Style/HashSyntax 2023-09-19 08:25:56 +09:00
filipefurtad0
6a31849fb4 Asserts on url from View File link 2023-09-18 10:43:13 +01:00
Gaetan Craig-Riou
c6e9a84633 Merge pull request #11557 from openfoodfoundation/dependabot/bundler/valid_email2-5.0.2
chore(deps): bump valid_email2 from 5.0.0 to 5.0.2
2023-09-18 19:29:08 +10:00
Rachel Arnould
00b7ae9600 Merge pull request #11496 from jibees/buu-css/ui-tweaks-on-legacy-backoffice-to-be-consitent-and-usable
🚧  BUU: update and tweak UI and CSS to fit V3 style to legacy
2023-09-18 10:53:28 +02:00
filipefurtad0
06ca2979dd Adds assertions on bulk invoice creation 2023-09-18 09:29:44 +01:00
Maikel
2c3561d47f Merge pull request #11554 from macanudo527/fix_stylehash_4
Fix Style/HashSyntax 5/13
2023-09-18 15:34:06 +10:00
Maikel
a1e3bae9b6 Merge pull request #11550 from openfoodfoundation/dependabot/bundler/stripe-9.3.0
chore(deps): bump stripe from 9.2.0 to 9.3.0
2023-09-18 15:31:42 +10:00
dependabot[bot]
6cf46c9bdc chore(deps): bump valid_email2 from 5.0.0 to 5.0.2
Bumps [valid_email2](https://github.com/micke/valid_email2) from 5.0.0 to 5.0.2.
- [Changelog](https://github.com/micke/valid_email2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micke/valid_email2/compare/v5.0.0...v5.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-18 04:21:35 +00:00
Maikel
e2783cda05 Merge pull request #11549 from openfoodfoundation/dependabot/bundler/view_component-3.6.0
chore(deps): bump view_component from 3.5.0 to 3.6.0
2023-09-18 14:14:35 +10:00
Maikel Linke
4ebfe73f60 Remove duplicate association
Probably a relict from a Spree upgrade.
2023-09-18 12:38:01 +10:00
Neal Chambers
4beacfb970 Update .rubocop_todo.yml 2023-09-16 09:07:22 +09:00
Neal Chambers
4596997547 Fix Style/HashSyntax 2023-09-16 09:05:31 +09:00
Gaetan Craig-Riou
776f478038 Make update the only public method
I think this got lost when refactoring, but only `update` is meant
to be a public method, other than `new`.
2023-09-15 11:42:04 +02:00
jibees
0b4d0a1438 Merge pull request #11552 from openfoodfoundation/dependabot/npm_and_yarn/floating-ui/dom-1.5.3
chore(deps): bump @floating-ui/dom from 1.5.2 to 1.5.3
2023-09-15 11:28:38 +02:00
dependabot[bot]
727afbc115 chore(deps): bump @floating-ui/dom from 1.5.2 to 1.5.3
Bumps [@floating-ui/dom](https://github.com/floating-ui/floating-ui/tree/HEAD/packages/dom) from 1.5.2 to 1.5.3.
- [Release notes](https://github.com/floating-ui/floating-ui/releases)
- [Changelog](https://github.com/floating-ui/floating-ui/blob/master/packages/dom/CHANGELOG.md)
- [Commits](https://github.com/floating-ui/floating-ui/commits/@floating-ui/dom@1.5.3/packages/dom)

---
updated-dependencies:
- dependency-name: "@floating-ui/dom"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-15 09:14:48 +00:00
Jean-Baptiste Bellet
02bbd9a9ba Adjust colors and height for sidebar-item component 2023-09-15 11:05:59 +02:00
Jean-Baptiste Bellet
657f4d95d7 move sidebar-item into admin v3 context 2023-09-15 11:02:45 +02:00
Jean-Baptiste Bellet
fe81900639 Update select2.scss 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
10b6df6bd7 Tweak dashboard for a hub manager 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
7326241c70 Move pages/changetypeform to admin v3 context 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
ae04063643 Create and adjust big button 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
4aaf0ddc18 Move dashboard-single-ent into admin v3 context 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
a59c8adbbf Adjust color for edit action to $teal 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
241dbd1ded move plugins/powertip into admin v3 context 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
62465b9bbc Move components/actions into admin_v3 context 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
dfe79396f6 Use $teal color for some info in the order page 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
f71ace1d39 Move sections/orders scss file into admin v3 context 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
f110c55531 Add product_import into admin_v3 context and adjust some colors 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
8ae68b15a0 Adjust select2 multiple choices colors 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
beba709827 Move buttons/input stuff into related file
And adjust design for v3 style
2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
371e064f82 Adjust padding left right size for text-angular component in v3 context 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
6a771ad09c Move text-angular component rules to admin_style_v3 context 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
e3359dd240 Move text-angular rules into its own file 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
351fe1b430 Date / date range (flatpickr) colors customization 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
7e1c2dac45 Move flatpickr customization into admin_v3 context 2023-09-15 10:47:44 +02:00
Jean-Baptiste Bellet
4b3688f878 Move date picker into admin_v3 context 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
d72a4a758b Add border to table 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
705ec5e5f8 Change color of tagging component in admin/customers page 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
2fd5390374 Design background color of dropdown component 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
102f20ad9e Add enterprise_index_panels into admin_v3 context 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
3cfd4cdc9b No need to have light in v3 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
0d410d27ae No more green but $red (which is almost orange btw) for navigation 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
e434f7112a Add sidebar to admin_v3 context 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
8b0fc875da Use the same arrow 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
b355d8beb3 Change colors for dropdown components
It's a bit annoying: we do have several "selector" components.
 - built-in select
 - dropdown directive
 - select2 component
 - tom-select component

Each has its own design, and having common design a loooong time job ;)
2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
db4d6c8010 Don't need to change background color hovering 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
b0e6062bec Create a arrowDown mixin in order to display arrow for select compoentns 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
aacdeac1e5 Move dropdown into admin_v3 context 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
99d0b3f092 Prefer to use color-btn-hover-bg var instead of color-10
The variable name is easier to understand.
2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
549e9259d9 Fix comment 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
6ee48a04fc Remove file admin/plugins/select2 for adminV3 and copy content into
already used file: `components/select2`
2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
ccc59926f1 Update button background color when hovering on dashboard 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
5df211137e Tweak stimulus pagination (used on orders) to be up to date 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
f2941f9275 form legend are red 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
1b9a7aa81e Adjust height, border and background colors for inputs 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
98f9303c99 Tweak colors, size, ... for select2 to looks like tom-select
One day, we'll remplace select2 by tom-select
2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
e5086ce057 Adjust colors for select2 and remove useless ones 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
3a67f5c9d7 Integrate select2 to admin_v3 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
b8406be4b9 Add trix editor to admin_v3 css
That was an omission when installing trix
2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
03d5f8acc4 No need to specify padding when having a line height 2023-09-15 10:47:43 +02:00
Jean-Baptiste Bellet
48f1c65a91 Include dashboard_item into admin_v3 2023-09-15 10:47:43 +02:00
David Cook
e075d40525 Prevent accidentally leaving the page 2023-09-15 16:00:41 +10:00
David Cook
99ac48a258 Discarding changes reloads from DB
But it also clears any search filters. To confirm exactly what behaviour is desired before fixing...
2023-09-15 15:46:02 +10:00
David Cook
8ff67aca41 Disable filters and sorting when form is modified
Stimulus controllers aren't supposed to reach outside their own element (so we can't do this with targets). Perhaps the controller should be bigger to encompass more, but I wanted to see if I could avoid making a mega component that does everything. For now it seems appropriate just to pass a selector in.
Another option is to publish events on other controllers using Outlets, but I don't know if we need to go there just yet.
2023-09-15 15:45:48 +10:00
David Cook
e047f49998 Make form actions float over sort controls. 2023-09-15 15:45:48 +10:00
David Cook
15f7a8299b Show form actions only when modified 2023-09-15 15:45:48 +10:00
David Cook
daefada5a9 Show summary of modified records
I found myself trying to write Ruby in Javascript, and it's not nearly as pretty..
Javascript now has more advanced data structures like Map, but it's rather useless because it doesn't have the usual iterator methods (such as filter, map, reduce etc).

Also for the spec I wasn't sure of the best approach, so will gladly recieve feedback.
2023-09-15 15:45:48 +10:00
David Cook
18e40bebd0 Mark modified fields 2023-09-15 15:45:45 +10:00
Maikel Linke
ab157246df Install the current node version in setup 2023-09-15 15:25:16 +10:00
dependabot[bot]
b1f42c14ee chore(deps): bump stripe from 9.2.0 to 9.3.0
Bumps [stripe](https://github.com/stripe/stripe-ruby) from 9.2.0 to 9.3.0.
- [Release notes](https://github.com/stripe/stripe-ruby/releases)
- [Changelog](https://github.com/stripe/stripe-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-ruby/compare/v9.2.0...v9.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-15 03:07:27 +00:00
dependabot[bot]
86b5791268 chore(deps): bump view_component from 3.5.0 to 3.6.0
Bumps [view_component](https://github.com/viewcomponent/view_component) from 3.5.0 to 3.6.0.
- [Release notes](https://github.com/viewcomponent/view_component/releases)
- [Changelog](https://github.com/ViewComponent/view_component/blob/main/docs/CHANGELOG.md)
- [Commits](https://github.com/viewcomponent/view_component/compare/v3.5.0...v3.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-15 03:02:49 +00:00
Maikel
aad58f1c8b Merge pull request #11546 from openfoodfoundation/dependabot/bundler/rubocop-rails-2.21.1
chore(deps-dev): bump rubocop-rails from 2.21.0 to 2.21.1
2023-09-15 12:59:54 +10:00
Maikel
2994227c35 Merge pull request #11542 from dacook/update-templates
Update templates
2023-09-15 11:42:12 +10:00
Maikel
0c87c16847 Merge pull request #11540 from macanudo527/fix_stylehash_3
Fix Style/HashSyntax 4/13
2023-09-15 11:32:03 +10:00
dependabot[bot]
f9aab96332 chore(deps-dev): bump rubocop-rails from 2.21.0 to 2.21.1
Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.21.0 to 2.21.1.
- [Release notes](https://github.com/rubocop/rubocop-rails/releases)
- [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.21.0...v2.21.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-14 09:48:33 +00:00
Gaetan Craig-Riou
0c005ad734 Sales Tax Totals by order included tax, fix tax amount when voucher applied
Plus specs
2023-09-14 10:21:50 +02:00
Gaetan Craig-Riou
e7a52e4733 Update app/controllers/admin/enterprises_controller.rb
Simplify code

Co-authored-by: Maikel <maikel@email.org.au>
2023-09-14 17:57:31 +10:00
Neal Chambers
0c1cb5282c Update .rubocop_todo.yml 2023-09-14 16:25:49 +09:00
Neal Chambers
bf9db13bb3 Fix Style/HashSyntax 2023-09-14 16:25:49 +09:00
David Cook
814144d77d Remember to mention API changes
[skip ci]
2023-09-14 15:04:01 +10:00
David Cook
00b2c70239 Release categories are now automatically generated. 2023-09-14 15:03:56 +10:00
David Cook
b0c822c63b Remember to consider webhook changes as API changes too 2023-09-14 15:03:54 +10:00
David Cook
7ef4df0087 Update all locales with the latest Transifex translations 2023-09-14 13:47:58 +10:00
David Cook
0966864589 Merge pull request #11511 from dacook/fix-update-button-11349
Fix Update button sizing
2023-09-14 13:37:19 +10:00
David Cook
2e6e083667 [fixup] Fix Update button sizing
By disabling line wrap we can consistently predict how it will appear. The longest translation we currently have is 14 characters so this should be fine.
2023-09-14 09:37:10 +10:00
Maikel
8e226bc473 Merge pull request #11537 from filipefurtad0/fix_flaky_orders_cycle_supplier_totals_report_spec.rb
Renames product so it always appears first on the report results
2023-09-14 09:08:16 +10:00
Maikel
758c6e033f Merge pull request #11533 from macanudo527/fix_stylehash_2
Fix Style/HashSyntax 3/13
2023-09-14 09:04:03 +10:00
Maikel
0382b4c80a Merge pull request #11535 from openfoodfoundation/dependabot/bundler/newrelic_rpm-9.5.0
chore(deps): bump newrelic_rpm from 9.4.2 to 9.5.0
2023-09-14 08:45:44 +10:00
Konrad
c36c5be2c9 Merge pull request #11497 from Matt-Yorkley/import-tax-category
Fix error when importing entries with a tax category
2023-09-13 23:28:16 +02:00
Konrad
29a12c7235 Merge pull request #11013 from filipefurtad0/add_enterprise_fees_w_tax_report_by_producer
Adds enterprise fees w tax report by producer
2023-09-13 21:55:59 +02:00
David Cook
ee2520a1f6 Visit page directly to save time
Shaved a couple of seconds off, 35->33 sec.

And make it easier to hide from the list.
2023-09-13 19:09:55 +02:00
David Cook
b27f63fa60 Refactor: DRY up init code 2023-09-13 19:09:55 +02:00
David Cook
ef1ccca4fa Temporarily 'hide' report
The reports framework doesn't currently support hidden reports, but we can mark it with a strike-through at least.
2023-09-13 19:09:55 +02:00
David Cook
db8392ce81 Temporarily hide report 2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
4cb91da8b2 load only enterprise fees connected to incoming exchanges on the OC 2023-09-13 19:09:55 +02:00
filipefurtad0
af525f9f7f Fixes rubocop issues 2023-09-13 19:09:55 +02:00
filipefurtad0
131474e91d Updates test case
should list all the tax rates (2)
2023-09-13 19:09:55 +02:00
filipefurtad0
57f058eeb2 Updates test case
should list all the tax rates
2023-09-13 19:09:55 +02:00
filipefurtad0
fc9826b44a Updates test case
should filter by fee name
2023-09-13 19:09:55 +02:00
filipefurtad0
86e6697723 Updates test case
should filter by producer
2023-09-13 19:09:55 +02:00
filipefurtad0
7734b0417d Updates test case
should filter by distributor and order cycle (2)
2023-09-13 19:09:55 +02:00
filipefurtad0
d7a6db3eb0 Updates test case
should filter by distributor and order cycle
2023-09-13 19:09:55 +02:00
filipefurtad0
d8501e7d83 Updates test case
generates the report and displays fees for the respective suppliers
2023-09-13 19:09:55 +02:00
David Cook
47d5fe909e Deduplicate order2 setup 2023-09-13 19:09:55 +02:00
David Cook
8c514b2fe9 Deduplicate order setup 2023-09-13 19:09:55 +02:00
David Cook
b574e71fc9 Refactor: set included_in_price once
This saves the need for an update, and more importantly moves setup out of the before block which means we can finally deduplicate order setup.
2023-09-13 19:09:55 +02:00
David Cook
6e15049728 Refactor distributor 2023-09-13 19:09:55 +02:00
David Cook
bf2298829f Refactor order cycle setup more
Moving more code out of before blocks which will help us reduce duplication in following commits.
2023-09-13 19:09:55 +02:00
David Cook
ce57ac65f3 Refactor order cycle lets
It turns out the outgoing exchanges were never even used.
2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
9a22cdc5e7 test scenario: 'multiple orders, same enterprise fee, different tax rates' 2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
624b4c8ad2 fix calculation of the summary row's total excl tax 2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
a3f012c9fe calculate tax total using existing rows 2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
f0c3d7685e replace string reference with the translated string 2023-09-13 19:09:55 +02:00
David Cook
420494715f Tighten up spec
I noticed that the tests don't check if the right totals are shown for each section. Now we can be certain.
2023-09-13 19:09:55 +02:00
David Cook
b7e1a660c3 Rename supplier to be more specific
To ensure specs are matching the right supplier.
2023-09-13 19:09:55 +02:00
David Cook
e934bc7cb9 Ignore ClassLength
I'm never quite sure the best way to deal with these, so I added a comment to at least explain my justification.
2023-09-13 19:09:55 +02:00
David Cook
93cca56e68 Style/HashSyntax 2023-09-13 19:09:55 +02:00
filipefurtad0
019c7b3e71 Splits filtering tests between orders
Sets pending test case for orders with more than one supplier
2023-09-13 19:09:55 +02:00
filipefurtad0
e43661fd3c Adds/corrects comments around Added tax section 2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
080e81e0fe optimize join_supplier 2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
44e8d2d735 fix pending lint issues 2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
219c581f9a remove pending from "should filter by producer" 2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
6dd70d310c fix the calculation of the cost of produce
we want the cost of produce to only include the items produced by the supplier used to group the rows.
2023-09-13 19:09:55 +02:00
filipefurtad0
9837a4fcf2 Removes pending (3)
Reverts Included Tax values
2023-09-13 19:09:55 +02:00
filipefurtad0
1b4235eb1d Extends tests to inclusive tax scenario 2023-09-13 19:09:55 +02:00
filipefurtad0
bb0f9a6758 Adds pending test
on fees from order with line items from different suppliers

Adds pending test on producer filter
2023-09-13 19:09:55 +02:00
filipefurtad0
928337c3fd Adds a second supplier and product to the setup 2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
7a875723ca fix order_cycle summary row.
the summary row has to only include the line items coming from the supplier used in the grouping key
2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
7b0a99c652 fix enterprise fees listing
For every producer, we want to only show the enterprise fees that are applied to at lease one of his products.
To do that, we use the order cycle to build a list of the enterprise fees for every variant.
Every variant will have coordinator fee + additional fees coming from incoming/outgoing exchanges.
2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
1cd0f88c1e fix supplier filter 2023-09-13 19:09:55 +02:00
David Cook
9ae65e135b Rails/Pick
Prefer pick("sum(amount)") over pluck("sum(amount)").first
2023-09-13 19:09:55 +02:00
David Cook
55742f40d1 Show a line for cost of produce
Utilising a second group_by rule, we can add a second summary_row. The cost of produce is also inserted into the TOTALS row as per requirements.
2023-09-13 19:09:55 +02:00
David Cook
cc54e2e6c7 Add long report class to .rubocop_todo.yml
Long classes are a problem that would be good to resolve one day. But it's hard to resolve with the current reports framework.
2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
ee7668e713 implement enterprise fee report filters
squash Reformat/Refactor spec
2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
481b09edda test enterprise summary fee with tax report by producer
Reformat/Refactor spec
2023-09-13 19:09:55 +02:00
Mohamed ABDELLANI
2880fd5a87 implement EnterpriseFeesWithTaxReportByProducer
squash Re-format code

squash Apply suggestions from code review

Co-authored-by: Maikel <maikel@email.org.au>

squash More refactor

squash Update lib/reporting/reports/enterprise_fee_summary/enterprise_fees_with_tax_report_by_producer.rb
2023-09-13 19:09:55 +02:00
Filipe
0f47ec0094 Merge pull request #11525 from jibees/11524-enlarged-unit-price-tooltip-image-on-variant-edit-page
BUU: Fix question mark icon for tooltip
2023-09-13 16:52:15 +01:00
Filipe
dae05e31ab Merge pull request #11501 from jibees/9146-improve-user-feedback-in-oc-edit-page-for-hidden-inventory
Improve user feedback in oc edit page for hidden inventory
2023-09-13 16:26:39 +01:00
jibees
9f675fed32 Merge pull request #11534 from openfoodfoundation/dependabot/bundler/faraday-2.7.11
chore(deps): bump faraday from 2.7.10 to 2.7.11
2023-09-13 15:02:29 +02:00
jibees
f7dd94268e Merge pull request #11536 from openfoodfoundation/dependabot/bundler/sidekiq-7.1.4
chore(deps): bump sidekiq from 7.1.3 to 7.1.4
2023-09-13 14:59:06 +02:00
filipefurtad0
263b5e280e Renames product so it always appears first on the report results 2023-09-13 11:33:58 +01:00
dependabot[bot]
2c79a8be3c chore(deps): bump sidekiq from 7.1.3 to 7.1.4
Bumps [sidekiq](https://github.com/sidekiq/sidekiq) from 7.1.3 to 7.1.4.
- [Changelog](https://github.com/sidekiq/sidekiq/blob/main/Changes.md)
- [Commits](https://github.com/sidekiq/sidekiq/compare/v7.1.3...v7.1.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-13 10:02:05 +00:00
dependabot[bot]
866f9b9d9d chore(deps): bump newrelic_rpm from 9.4.2 to 9.5.0
Bumps [newrelic_rpm](https://github.com/newrelic/newrelic-ruby-agent) from 9.4.2 to 9.5.0.
- [Release notes](https://github.com/newrelic/newrelic-ruby-agent/releases)
- [Changelog](https://github.com/newrelic/newrelic-ruby-agent/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/newrelic/newrelic-ruby-agent/compare/9.4.2...9.5.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-13 10:00:35 +00:00
dependabot[bot]
8adc0a9144 chore(deps): bump faraday from 2.7.10 to 2.7.11
Bumps [faraday](https://github.com/lostisland/faraday) from 2.7.10 to 2.7.11.
- [Release notes](https://github.com/lostisland/faraday/releases)
- [Changelog](https://github.com/lostisland/faraday/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lostisland/faraday/compare/v2.7.10...v2.7.11)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-13 09:59:46 +00:00
Neal Chambers
1fa0dc99fe Update .rubocop_todo.yml 2023-09-13 16:45:00 +09:00
Neal Chambers
ed06edda3f Fix Style/HashSyntax 2023-09-13 16:45:00 +09:00
Maikel
ead4f784ba Merge pull request #11528 from macanudo527/fix_stylehash_1
Fix Style/HashSyntax 2/13
2023-09-13 17:17:26 +10:00
Maikel
463ecf2880 Merge pull request #11508 from mkllnk/dfc-enterprise-groups
[DFC API] Add endpoint for enterprise groups
2023-09-13 16:50:05 +10:00
Maikel Linke
7e222ad83e Include address when showing group
It may be nice to show more data like social media URLs but the DFC
Connector hasn't implemented that yet and it's not specified in the
current issue.
2023-09-13 16:36:36 +10:00
Maikel Linke
88a3615de7 List groups when showing DFC Enterprise 2023-09-13 16:36:36 +10:00
Maikel Linke
cf18229e5b Avoid loading DFC catalog for Person or Groups endpoint 2023-09-13 16:36:36 +10:00
Maikel Linke
95d3987752 List enterprise groups on DFC API 2023-09-13 16:36:36 +10:00
Maikel Linke
a03fb01a8c List enterprises within groups on DFC API 2023-09-13 16:36:36 +10:00
Maikel Linke
2d91a61dcb Add DFC API EnterpriseGroups#show 2023-09-13 16:36:36 +10:00
David Cook
ae72158e87 Merge pull request #11494 from mkllnk/dfc-swagger-config
Group DFC API operations by endpoint in documentation
2023-09-13 14:57:14 +10:00
Neal Chambers
7c3e61104a Update .rubocop_todo.yml 2023-09-12 23:19:25 +09:00
Neal Chambers
4ffd3759cc Fix Style/HashSyntax 2023-09-12 23:19:05 +09:00
jibees
0ebdc8abca Merge pull request #11526 from openfoodfoundation/dependabot/bundler/sidekiq-7.1.3
chore(deps): bump sidekiq from 7.1.2 to 7.1.3
2023-09-12 15:54:25 +02:00
Gaetan Craig-Riou
9925399292 Sales Tax Totals by order, fix tax amount when voucher applied
Apply the tax discount to the tax collumn when a voucher is added
to the order, and update total excluding tax accordingly.
2023-09-12 14:36:28 +02:00
Gaetan Craig-Riou
a7bceb0b28 Add spec scenario where a voucher is added to the order
Voucher tax portion needs to be removed from the tax amount so we
can display the correct tax in the report.
2023-09-12 14:14:01 +02:00
Gaetan Craig-Riou
29a4bf88d7 DRY up specs 2023-09-12 14:13:04 +02:00
dependabot[bot]
1d430265a2 chore(deps): bump sidekiq from 7.1.2 to 7.1.3
Bumps [sidekiq](https://github.com/sidekiq/sidekiq) from 7.1.2 to 7.1.3.
- [Changelog](https://github.com/sidekiq/sidekiq/blob/main/Changes.md)
- [Commits](https://github.com/sidekiq/sidekiq/compare/v7.1.2...v7.1.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-12 09:32:05 +00:00
Gaetan Craig-Riou
57f563f4bc Merge pull request #11516 from macanudo527/fix_rubocop_9
Fix Style/HashSyntax 1
2023-09-12 18:56:47 +10:00
Jean-Baptiste Bellet
637096534f Implement spec for #9146 issue 2023-09-12 10:20:26 +02:00
Jean-Baptiste Bellet
ff8b9465c7 Display info on outgoing products panel when some variants hidden 2023-09-12 10:20:26 +02:00
Jean-Baptiste Bellet
ff7629ba2c Display information on outgoing product when variant aren't available
Update en.yml
2023-09-12 10:20:26 +02:00
jibees
eecc0d5772 Merge pull request #11519 from openfoodfoundation/dependabot/bundler/rubocop-rails-2.21.0
chore(deps-dev): bump rubocop-rails from 2.20.2 to 2.21.0
2023-09-11 16:31:03 +02:00
jibees
a08d9e5a3c Merge pull request #11523 from openfoodfoundation/dependabot/bundler/rubocop-1.56.3
chore(deps-dev): bump rubocop from 1.56.2 to 1.56.3
2023-09-11 16:30:23 +02:00
Jean-Baptiste Bellet
edc6ac801d Use the right colors for the question mark icon tooltip in admin style v3 2023-09-11 15:44:08 +02:00
Jean-Baptiste Bellet
75751f07b8 Move question-mark-icon into admin_style_v3 context 2023-09-11 15:31:30 +02:00
Jean-Baptiste Bellet
99ea4a63e0 No need to have a button: not conflicting with button styles 2023-09-11 15:29:09 +02:00
jibees
f05ed020f3 Merge pull request #11522 from openfoodfoundation/dependabot/npm_and_yarn/floating-ui/dom-1.5.2
chore(deps): bump @floating-ui/dom from 1.5.1 to 1.5.2
2023-09-11 15:03:16 +02:00
Gaetan Craig-Riou
e44a0092ea Fix edge case when trying to deactivate the only availabe voucher
Plus spec
2023-09-11 12:00:48 +02:00
Gaetan Craig-Riou
48956b9bd1 As per review comment, simplify voucher view a little 2023-09-11 11:59:34 +02:00
dependabot[bot]
fe83be1853 chore(deps-dev): bump rubocop from 1.56.2 to 1.56.3
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.56.2 to 1.56.3.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.56.2...v1.56.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-11 09:18:20 +00:00
dependabot[bot]
5b0b03dc5d chore(deps): bump @floating-ui/dom from 1.5.1 to 1.5.2
Bumps [@floating-ui/dom](https://github.com/floating-ui/floating-ui/tree/HEAD/packages/dom) from 1.5.1 to 1.5.2.
- [Release notes](https://github.com/floating-ui/floating-ui/releases)
- [Changelog](https://github.com/floating-ui/floating-ui/blob/master/packages/dom/CHANGELOG.md)
- [Commits](https://github.com/floating-ui/floating-ui/commits/@floating-ui/dom@1.5.2/packages/dom)

---
updated-dependencies:
- dependency-name: "@floating-ui/dom"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-11 09:17:54 +00:00
Maikel
f885e80413 Merge pull request #11520 from openfoodfoundation/dependabot/bundler/rails-7.0.8
chore(deps): bump rails from 7.0.7.2 to 7.0.8
2023-09-11 15:48:37 +10:00
Maikel Linke
99529ff599 Put new rubocop violations on todo list 2023-09-11 15:44:15 +10:00
Maikel Linke
df3fc83c8e Remove version from DFC API URL in specs
We were aiming to use stable URLs to identify resources but the URL
helpers were still using dfc-v1.7 because that was the last and
overriding path of the mounted DFC Provider engine.
2023-09-11 15:00:08 +10:00
Maikel Linke
7654d37fc3 DRY, shorten swagger file names 2023-09-11 14:57:39 +10:00
Maikel Linke
fe2eecb69e DRY swagger-ui config with relative path 2023-09-11 14:57:38 +10:00
Maikel Linke
fc7c8757d9 Move DFC patches into our DFC engine
It seems to belong there and it's avoiding some loading issues with
Spring.
2023-09-11 14:57:38 +10:00
Maikel Linke
73193fbfd0 Explicitely load our DFC Connector patches
It makes sure we can extend functionality without conflicts.
2023-09-11 14:57:38 +10:00
Maikel Linke
191c4a79db Load spec helpers before Rails is loaded
Using Spring was hiding an loading error. When you start Rspec, Rails
and its engines are not loaded yet. So our way to load the spec helper
via `Rails.root` did not work when you ran specs on their own without
loading Rails with Spring first.
2023-09-11 14:57:38 +10:00
Maikel Linke
6316974146 Group DFC API operations by endpoint
Previously they were all in one long list called "default".
2023-09-11 14:57:38 +10:00
dependabot[bot]
ce7c9f0895 chore(deps): bump rails from 7.0.7.2 to 7.0.8
Bumps [rails](https://github.com/rails/rails) from 7.0.7.2 to 7.0.8.
- [Release notes](https://github.com/rails/rails/releases)
- [Commits](https://github.com/rails/rails/compare/v7.0.7.2...v7.0.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-11 04:05:35 +00:00
dependabot[bot]
29f476e559 chore(deps-dev): bump rubocop-rails from 2.20.2 to 2.21.0
Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.20.2 to 2.21.0.
- [Release notes](https://github.com/rubocop/rubocop-rails/releases)
- [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.20.2...v2.21.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-11 04:01:42 +00:00
Maikel
ecc04b05e3 Merge pull request #11512 from openfoodfoundation/dependabot/bundler/stripe-9.2.0
chore(deps): bump stripe from 9.1.0 to 9.2.0
2023-09-11 14:00:15 +10:00
Neal Chambers
e69e5eb0ec Update .rubocop_todo.yml 2023-09-09 09:02:14 +09:00
Neal Chambers
416d6e538a Fix Style/HashSyntax 2023-09-09 09:00:38 +09:00
Matt-Yorkley
839e580878 Fix error when importing entries with a tax category 2023-09-08 19:24:50 +01:00
Gaetan Craig-Riou
8face3d182 Merge pull request #11488 from macanudo527/fix_helperinstancevariable_2
Fix Rails/HelperInstanceVariable 2
2023-09-08 19:51:39 +10:00
dependabot[bot]
eb4517cf0b chore(deps): bump stripe from 9.1.0 to 9.2.0
Bumps [stripe](https://github.com/stripe/stripe-ruby) from 9.1.0 to 9.2.0.
- [Release notes](https://github.com/stripe/stripe-ruby/releases)
- [Changelog](https://github.com/stripe/stripe-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-ruby/compare/v9.1.0...v9.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-08 09:15:23 +00:00
David Cook
99da60921f Fix Update button sizing
This was broken when upgrading [Foundation](https://github.com/openfoodfoundation/openfoodnetwork/pull/11349). For some reason the button.expand class now sets larger font size and padding, which overrides the button.small class. It's probably a bug but we'll have to work around it.
2023-09-08 10:20:26 +10:00
Maikel
1991970185 Merge pull request #11377 from mkllnk/dfc-update-request
[DFC API] Import known units when creating new products
2023-09-08 09:05:26 +10:00
Filipe
b64c1c2675 Merge pull request #11349 from dacook/foundation-sites-5.5.3
chore(deps): bump foundation-sites from 5.5.2 to 5.5.3
2023-09-07 18:33:43 +01:00
Filipe
ccabf5936d Merge pull request #11505 from drummer83/master
[Super admin] Highlight 'Configuration' tab on 'Terms of Service' page
2023-09-07 18:00:18 +01:00
Konrad
ea622cd2d7 Merge pull request #11487 from pedrocarmona/feature/invitation-email-locale
Send translated email when creating users via super admin interface
2023-09-07 16:41:59 +02:00
Gaetan Craig-Riou
f225cd78df Handle unique voucher code exception
Rails validation doesn't handle unique validation for soft deleted
object. So we rescue the exception raise by the database and display
a nice error message. We don't want an enterprise to be able to reuse
a code in case the voucher get reactivated.
2023-09-07 15:13:47 +02:00
Gaetan Craig-Riou
63cd8ccf28 Test scenario where a voucher is deactivated before end of checkout
A customer should be able to complete the checkout even if the voucher
has been deactivated after being added to the order.
2023-09-07 14:00:26 +02:00
Gaetan Craig-Riou
b955e0b25d Use depedend: nil on adjustment association
We want to keep the voucher adjustment associated with the Voucher
event when the voucher as been soft deleted, as we use this
functionality as activate/deactivate feature
2023-09-07 13:58:07 +02:00
David Cook
ab5e16effb chore(deps): bump foundation-sites from 5.5.2 to 5.5.3
Better 7 years late than never...

This resolves CWE-79: https://security.snyk.io/vuln/npm:foundation-sites:20150619
2023-09-07 11:45:37 +10:00
drummer83
a7ddf99ee4 Fix typo 2023-09-06 23:20:12 +02:00
drummer83
13d5b954e6 Add 'Terms of Service' to the tabs 2023-09-06 23:18:00 +02:00
Konrad
3b9ebf4e07 Merge pull request #11396 from abdellani/fix-if-tos-is-not-set
fix If ToS file is not set, customer needs to accept Terms on each checkout
2023-09-06 16:56:21 +02:00
Neal Chambers
dbb758b73a Update .rubocop_todo.yml 2023-09-06 22:36:51 +09:00
Neal Chambers
2da9ffd3cb Delete Unused Helper Functions 2023-09-06 22:36:51 +09:00
Neal Chambers
b1e40ed605 Fix Rails/HelperInstanceVariable 2023-09-06 22:36:46 +09:00
jibees
d8f4f58c77 Merge pull request #11499 from openfoodfoundation/dependabot/bundler/web-console-4.2.1
chore(deps-dev): bump web-console from 4.2.0 to 4.2.1
2023-09-06 08:52:58 +02:00
dependabot[bot]
954e080cbf chore(deps-dev): bump web-console from 4.2.0 to 4.2.1
Bumps [web-console](https://github.com/rails/web-console) from 4.2.0 to 4.2.1.
- [Release notes](https://github.com/rails/web-console/releases)
- [Changelog](https://github.com/rails/web-console/blob/main/CHANGELOG.markdown)
- [Commits](https://github.com/rails/web-console/compare/v4.2.0...v4.2.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-06 01:44:08 +00:00
David Cook
aaa3bebb93 Merge pull request #11495 from openfoodfoundation/dependabot/bundler/valid_email2-5.0.0
chore(deps): bump valid_email2 from 4.0.6 to 5.0.0
2023-09-06 11:39:26 +10:00
Gaetan Craig-Riou
d1b5dcab88 Add ability to activate deactivate a voucher
Plus controller specs
2023-09-05 15:48:59 +02:00
Gaetan Craig-Riou
79f4caaee2 Clean up spec 2023-09-05 15:48:30 +02:00
dependabot[bot]
3405865c0f chore(deps): bump valid_email2 from 4.0.6 to 5.0.0
Bumps [valid_email2](https://github.com/micke/valid_email2) from 4.0.6 to 5.0.0.
- [Changelog](https://github.com/micke/valid_email2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micke/valid_email2/compare/v4.0.6...v5.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-05 09:48:34 +00:00
David Cook
a096c56658 Merge pull request #11484 from openfoodfoundation/mkllnk-patch-1
Add release note category "API changes"
2023-09-05 13:29:55 +10:00
Maikel Linke
997c8a49ca Combine system specs for efficiency 2023-09-05 10:51:38 +10:00
Pedro Carmona
51050036d4 Use instance default locale as the default locale for a new user 2023-09-05 01:00:35 +01:00
Pedro Carmona
c4830e3baa Send localized email when creating users via admin interface
Based on the current user locale
2023-09-05 01:00:35 +01:00
David Cook
0874c7ddb8 Merge pull request #11309 from filipefurtad0/legal_invoices_spec_comparator
[Invoices] Adds unit level test coverage order model attributes
2023-09-05 09:45:00 +10:00
Maikel
b1a88ab7a9 Merge pull request #11490 from mkllnk/sample-data-validation
Skip online validation of sample emails
2023-09-05 09:28:16 +10:00
Konrad
c50a3b4f86 Merge pull request #11489 from mkllnk/order_cycle_schedule
Require associations on join model
2023-09-04 21:37:30 +02:00
Konrad
fd6f2338e5 Merge pull request #11450 from mkllnk/feature-toggle-enterprise
Activate vouchers feature per user or enterprise
2023-09-04 21:30:41 +02:00
filipefurtad0
82ca115931 Removes unnecessary && operator
reloads instead of saving order again
2023-09-04 19:35:28 +01:00
filipefurtad0
4e54279b05 Rearranges relevant and non-relevant test cases 2023-09-04 19:32:06 +01:00
Konrad
406577ed2a Merge pull request #11140 from jibees/11129-add-trix-editor-to-product-description-editor
Admin, add trix editor to product description editor (both new and edit)
2023-09-04 20:22:14 +02:00
Gaetan Craig-Riou
08c131680d Merge pull request #11471 from mkllnk/variant-supplier
[DFC API] Replace service class with simple AR association
2023-09-04 23:59:37 +10:00
Jean-Baptiste Bellet
b6b64e9439 Add trix editor to new product form 2023-09-04 15:46:54 +02:00
Jean-Baptiste Bellet
1d5d1c5405 Include trix-styles mixin in where content from trix is displayed 2023-09-04 15:46:54 +02:00
Jean-Baptiste Bellet
34dab4003d Create a mixin that include list of styles for trix editor + content
Will be used elsewhere (in shopfront in particular)
2023-09-04 15:46:54 +02:00
Jean-Baptiste Bellet
c402093081 Special case for unordered list in trix editor: should be overwritten 2023-09-04 15:46:54 +02:00
Jean-Baptiste Bellet
ca6d12e8ed Actually, used in the shopfront context, links are orange 2023-09-04 15:46:54 +02:00
Jean-Baptiste Bellet
3225c52898 Actually, this should not be sanitize before going through trix editor 2023-09-04 15:46:54 +02:00
Jean-Baptiste Bellet
a8a35318f5 Add horizontal rule to trix editor 2023-09-04 15:46:54 +02:00
Jean-Baptiste Bellet
4c27e79519 Sanitize content when display it on shop
Use the TrixSanitizer | TrixScrubber
2023-09-04 15:46:54 +02:00
Jean-Baptiste Bellet
f9bc00e5cd We used to use <p> to seperate block between them. now use <div>
trix doesn't allow the use of `<p>` as block separator since it can not contain `<figure>`: use `<div>` and _emulate_ as `<p>` with margin bottom
2023-09-04 15:46:54 +02:00
Jean-Baptiste Bellet
b6e047086a Update trixEditor rendering <a /> element: should be green 2023-09-04 15:46:54 +02:00
Jean-Baptiste Bellet
e200eccc42 Replace angular editor by trix editor 2023-09-04 15:46:54 +02:00
Gaetan Craig-Riou
50693dd5d2 Merge pull request #11468 from dacook/buu-editing-part2-11059
[BUU] Editing - part 2 (product and variant text fields) 🚧
2023-09-04 23:41:44 +10:00
Gaetan Craig-Riou
db52b29b8f Merge pull request #11476 from macanudo527/fix_rails_helperinstancevariable
Fix Rails/HelperInstanceVariable in injection_helper.rb
2023-09-04 22:30:14 +10:00
Maikel Linke
ae63a50719 Skip online validation of sample emails 2023-09-04 17:15:52 +10:00
Maikel Linke
38869cba2f Require associations on join model
It's actually required in the database already. This just simplifies the
code.
2023-09-04 17:07:07 +10:00
Maikel
8b9425a206 Merge pull request #11486 from openfoodfoundation/dependabot/bundler/activerecord-session_store-2.1.0
chore(deps): bump activerecord-session_store from 2.0.0 to 2.1.0
2023-09-04 13:16:11 +10:00
Maikel
2d090042a3 Merge pull request #11485 from openfoodfoundation/dependabot/bundler/stripe-9.1.0
chore(deps): bump stripe from 9.0.0 to 9.1.0
2023-09-04 12:49:26 +10:00
Maikel
4f981417a9 Merge pull request #11477 from mkllnk/flaky-enterprise-fee
Stabilise flaky enterprise fee spec
2023-09-04 12:45:46 +10:00
dependabot[bot]
8bd749301e chore(deps): bump activerecord-session_store from 2.0.0 to 2.1.0
Bumps [activerecord-session_store](https://github.com/rails/activerecord-session_store) from 2.0.0 to 2.1.0.
- [Release notes](https://github.com/rails/activerecord-session_store/releases)
- [Commits](https://github.com/rails/activerecord-session_store/compare/v2.0.0...v2.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 09:28:13 +00:00
dependabot[bot]
34fa41dac2 chore(deps): bump stripe from 9.0.0 to 9.1.0
Bumps [stripe](https://github.com/stripe/stripe-ruby) from 9.0.0 to 9.1.0.
- [Release notes](https://github.com/stripe/stripe-ruby/releases)
- [Changelog](https://github.com/stripe/stripe-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-ruby/compare/v9.0.0...v9.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-01 09:26:36 +00:00
Maikel
f27ecb6bcd Add release note category "API changes"
[skip ci]
2023-09-01 14:14:47 +10:00
Maikel
bcfc15f102 Enable copy of translation update commands
The added `code` tag makes Github add the copy button.
2023-09-01 13:53:20 +10:00
Maikel Linke
ee3fe08378 Update all locales with the latest Transifex translations 2023-09-01 13:51:29 +10:00
David Cook
441b9febc8 Merge pull request #11454 from macanudo527/fix_rubocop_8
Fix Rubocop Style Errors
2023-09-01 13:22:38 +10:00
David Cook
32c0b5a3e2 Remove unnecessary details
As far as I can tell we didn't need to specify these for the tests.
2023-09-01 12:04:27 +10:00
Neal Chambers
4feb8f922e Fix Rails/HelperInstanceVariable in injection_helper.rb 2023-09-01 11:03:26 +09:00
David Cook
381ce1c2b9 Simplify order definition
There only needs to be one order at a time, and it can be created on-demand. We can simply override it in the specs that need to.
2023-09-01 12:00:29 +10:00
Maikel Linke
c439aaf32f Spec trying to ready a shipment twice 2023-09-01 08:55:56 +09:00
Neal Chambers
b0bb97a22f Fix ready to execute only if it isn't ready
Co-authored-by: Maikel <maikel@email.org.au>
2023-09-01 08:55:56 +09:00
Neal Chambers
819fa611e8 Fix Rails/Blank 2023-09-01 08:55:56 +09:00
Neal Chambers
8ae5b61252 Manually Fix Style/GuardClause 2023-09-01 08:55:56 +09:00
Neal Chambers
70e765bff6 Safely autocorrect Style/GuardClause
Inspecting 1488 files
......................C....C.C..........................C.........C.........................C............................................C..............................................................................................................C.C........................................CC..............................C...........C...........................................................................................................................................................................................................C........................................................................................................C.......................................................C.............C...........................................................................................C..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................C...C....................................................................................................................C.............

Offenses:

app/controllers/admin/enterprises_controller.rb:50:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return unless params[:stimulus]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:50:7: C: [Corrected] Style/GuardClause: Use a guard clause (return unless params[:stimulus]) instead of wrapping the code inside a conditional expression.
      if params[:stimulus]
      ^^
app/controllers/admin/enterprises_controller.rb:51:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        @enterprise.is_primary_producer = params[:is_primary_producer]
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:52:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        @enterprise.sells = params[:enterprise_sells]
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:53:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        render cable_ready: cable_car.morph("#side_menu", partial("admin/shared/side_menu")) ...
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:55:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/enterprises_controller.rb:56:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/admin/enterprises_controller.rb:266:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return unless user_id.positive? && @enterprise.user_ids.include?(user_id)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:266:7: C: [Corrected] Style/GuardClause: Use a guard clause (return unless user_id.positive? && @enterprise.user_ids.include?(user_id)) instead of wrapping the code inside a conditional expression.
      if user_id.positive? && @enterprise.user_ids.include?(user_id)
      ^^
app/controllers/admin/enterprises_controller.rb:267:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        @enterprise.update_contact(user_id)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:268:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/enterprises_controller.rb:270:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/admin/enterprises_controller.rb:272:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return unless attrs[:calculator_type].present? && attrs[:calculator_attributes].present?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:272:7: C: [Corrected] Style/GuardClause: Use a guard clause (return unless attrs[:calculator_type].present? && attrs[:calculator_attributes].present?) instead of wrapping the code inside a conditional expression.
      if attrs[:calculator_type].present? && attrs[:calculator_attributes].present?
      ^^
app/controllers/admin/enterprises_controller.rb:273:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        rule.update(calculator_type: attrs[:calculator_type])
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:274:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        attrs[:calculator_attributes].merge!( id: rule.calculator.id )
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:275:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/enterprises_controller.rb:278:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/admin/enterprises_controller.rb:279:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return if spree_current_user.admin?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:279:7: C: [Corrected] Style/GuardClause: Use a guard clause (return if spree_current_user.admin?) instead of wrapping the code inside a conditional expression.
      unless spree_current_user.admin?
      ^^^^^^
app/controllers/admin/enterprises_controller.rb:280:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        params[:sets_enterprise_set][:collection_attributes].each do |_i, enterprise_params| ...
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:285:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/enterprises_controller.rb:289:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/admin/enterprises_controller.rb:289:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return if spree_current_user.admin? || spree_current_user == @enterprise.owner
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:289:7: C: [Corrected] Style/GuardClause: Use a guard clause (return if spree_current_user.admin? || spree_current_user == @enterprise.owner) instead of wrapping the code inside a conditional expression.
      unless spree_current_user.admin? || spree_current_user == @enterprise.owner
      ^^^^^^
app/controllers/admin/enterprises_controller.rb:290:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        enterprise_params.delete :sells
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:291:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/enterprises_controller.rb:296:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/admin/enterprises_controller.rb:299:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return if spree_current_user.admin?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:299:7: C: [Corrected] Style/GuardClause: Use a guard clause (return if spree_current_user.admin?) instead of wrapping the code inside a conditional expression.
      unless spree_current_user.admin?
      ^^^^^^
app/controllers/admin/enterprises_controller.rb:300:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        has_hub = spree_current_user.owned_enterprises.is_hub.any?
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:301:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        new_enterprise_is_producer = Enterprise.new(enterprise_params).is_primary_producer
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:302:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        enterprise_params[:sells] = has_hub && !new_enterprise_is_producer ? 'any' : 'none'
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:303:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/enterprises_controller.rb:307:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return if ( spree_current_user == @enterprise.owner ) || spree_current_user.admin?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:307:7: C: [Corrected] Style/GuardClause: Use a guard clause (return if ( spree_current_user == @enterprise.owner ) || spree_current_user.admin?) instead of wrapping the code inside a conditional expression.
      unless ( spree_current_user == @enterprise.owner ) || spree_current_user.admin?
      ^^^^^^
app/controllers/admin/enterprises_controller.rb:308:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        enterprise_params.delete :owner_id
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:309:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/admin/enterprises_controller.rb:309:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/enterprises_controller.rb:313:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return if spree_current_user.admin?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:313:7: C: [Corrected] Style/GuardClause: Use a guard clause (return if spree_current_user.admin?) instead of wrapping the code inside a conditional expression.
      unless spree_current_user.admin?
      ^^^^^^
app/controllers/admin/enterprises_controller.rb:314:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        bulk_params[:collection_attributes].each do |_i, enterprise_params| ...
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:316:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/admin/enterprises_controller.rb:317:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/enterprises_controller.rb:321:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return if ( spree_current_user == @enterprise.owner ) || spree_current_user.admin?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:321:7: C: [Corrected] Style/GuardClause: Use a guard clause (return if ( spree_current_user == @enterprise.owner ) || spree_current_user.admin?) instead of wrapping the code inside a conditional expression.
      unless ( spree_current_user == @enterprise.owner ) || spree_current_user.admin?
      ^^^^^^
app/controllers/admin/enterprises_controller.rb:322:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        enterprise_params.delete :user_ids
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/enterprises_controller.rb:323:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/enterprises_controller.rb:325:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/admin/enterprises_controller.rb:332:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/admin/order_cycles_controller.rb:185:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return unless json_request?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/order_cycles_controller.rb:185:7: C: [Corrected] Style/GuardClause: Use a guard clause (return unless json_request?) instead of wrapping the code inside a conditional expression.
      if json_request?
      ^^
app/controllers/admin/order_cycles_controller.rb:188:9: C: [Corrected] Layout/CommentIndentation: Incorrect indentation detected (column 8 instead of 6).
        #   to limit returned ocs to recent or undated
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/order_cycles_controller.rb:188:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        orders_close_at_gt = raw_params[:q]&.delete(:orders_close_at_gt) || 31.days.ago
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/order_cycles_controller.rb:189:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        raw_params[:q] = { ...
        ^^^^^^^^^^^^^^^^^^
app/controllers/admin/order_cycles_controller.rb:194:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        @collection = collection
        ^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/order_cycles_controller.rb:195:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/order_cycles_controller.rb:196:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/admin/order_cycles_controller.rb:248:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return if Enterprise.managed_by(spree_current_user).include?(@order_cycle.coordinator)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/order_cycles_controller.rb:248:7: C: [Corrected] Style/GuardClause: Use a guard clause (return if Enterprise.managed_by(spree_current_user).include?(@order_cycle.coordinator)) instead of wrapping the code inside a conditional expression.
      unless Enterprise.managed_by(spree_current_user).include?(@order_cycle.coordinator)
      ^^^^^^
app/controllers/admin/order_cycles_controller.rb:249:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        order_cycle_params.delete_if do |k, _v| ...
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/order_cycles_controller.rb:252:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/order_cycles_controller.rb:254:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/admin/product_import_controller.rb:59:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return if params[:file] || (params[:filepath] && File.exist?(params[:filepath]))
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/product_import_controller.rb:59:7: C: [Corrected] Style/GuardClause: Use a guard clause (return if params[:file] || (params[:filepath] && File.exist?(params[:filepath]))) instead of wrapping the code inside a conditional expression.
      unless params[:file] || (params[:filepath] && File.exist?(params[:filepath]))
      ^^^^^^
app/controllers/admin/product_import_controller.rb:60:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        redirect_to '/admin/product_import', notice: I18n.t(:product_import_file_not_found_notice)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/product_import_controller.rb:61:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/product_import_controller.rb:62:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/admin/product_import_controller.rb:93:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return if importer.item_count
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/product_import_controller.rb:93:7: C: [Corrected] Style/GuardClause: Use a guard clause (return if importer.item_count) instead of wrapping the code inside a conditional expression.
      unless importer.item_count
      ^^^^^^
app/controllers/admin/product_import_controller.rb:94:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        redirect_to '/admin/product_import', ...
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/product_import_controller.rb:96:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        true
        ^^^^
app/controllers/admin/product_import_controller.rb:97:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/admin/product_import_controller.rb:99:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/api/v0/shipments_controller.rb:48:11: C: Style/GuardClause: Use a guard clause (unless @shipment.can_ready?; render(json: { error: I18n.t(:cannot_ready, scope: "spree.api.shipment") },
                   status: :unprocessable_entity) && return; end) instead of wrapping the code inside a conditional expression.
          if @shipment.can_ready?
          ^^
app/controllers/application_controller.rb:118:5: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
    return if (@distributor = current_distributor)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/application_controller.rb:118:5: C: [Corrected] Style/GuardClause: Use a guard clause (return if (@distributor = current_distributor)) instead of wrapping the code inside a conditional expression.
    unless (@distributor = current_distributor)
    ^^^^^^
app/controllers/application_controller.rb:119:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      redirect_to main_app.root_path
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/application_controller.rb:120:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      false
      ^^^^^
app/controllers/application_controller.rb:121:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/application_controller.rb:122:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/application_controller.rb:125:5: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
    return if current_order_cycle
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/application_controller.rb:125:5: C: [Corrected] Style/GuardClause: Use a guard clause (return if current_order_cycle) instead of wrapping the code inside a conditional expression.
    unless current_order_cycle
    ^^^^^^
app/controllers/application_controller.rb:126:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      redirect_to main_app.shop_path
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/application_controller.rb:127:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/application_controller.rb:129:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/application_controller.rb:131:5: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
    return unless current_distributor_closed?
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/application_controller.rb:131:5: C: [Corrected] Style/GuardClause: Use a guard clause (return unless current_distributor_closed?) instead of wrapping the code inside a conditional expression.
    if current_distributor_closed?
    ^^
app/controllers/application_controller.rb:132:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      current_order.empty!
      ^^^^^^^^^^^^^^^^^^^^
app/controllers/application_controller.rb:133:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      current_order.set_distribution! nil, nil
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/application_controller.rb:134:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      flash[:info] = I18n.t('order_cycles_closed_for_hub')
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/application_controller.rb:135:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      redirect_to main_app.root_url
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/application_controller.rb:136:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/application_controller.rb:139:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/home_controller.rb:7:5: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
    return unless ContentConfig.home_show_stats
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/home_controller.rb:7:5: C: [Corrected] Style/GuardClause: Use a guard clause (return unless ContentConfig.home_show_stats) instead of wrapping the code inside a conditional expression.
    if ContentConfig.home_show_stats
    ^^
app/controllers/home_controller.rb:8:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      @num_distributors = cached_count('distributors', Enterprise.is_distributor.activated.visible)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/home_controller.rb:9:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      @num_producers = cached_count('producers', Enterprise.is_primary_producer.activated.visible)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/home_controller.rb:10:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      @num_orders = cached_count('orders', Spree::Order.complete)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/home_controller.rb:11:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      @num_users = cached_count( ...
      ^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/home_controller.rb:14:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/home_controller.rb:15:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/spree/orders_controller.rb:136:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return unless params[:order] && params[:order][:line_items_attributes]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/spree/orders_controller.rb:136:7: C: [Corrected] Style/GuardClause: Use a guard clause (return unless params[:order] && params[:order][:line_items_attributes]) instead of wrapping the code inside a conditional expression.
      if params[:order] && params[:order][:line_items_attributes]
      ^^
app/controllers/spree/orders_controller.rb:137:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        params[:order][:line_items_attributes] = ...
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/spree/orders_controller.rb:139:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/spree/orders_controller.rb:140:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/controllers/spree/orders_controller.rb:183:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return unless items.empty?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/spree/orders_controller.rb:183:7: C: [Corrected] Style/GuardClause: Use a guard clause (return unless items.empty?) instead of wrapping the code inside a conditional expression.
      if items.empty?
      ^^
app/controllers/spree/orders_controller.rb:184:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        flash[:error] = I18n.t(:orders_cannot_remove_the_final_item)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/spree/orders_controller.rb:185:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        redirect_to main_app.order_path(order_to_update)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/spree/orders_controller.rb:186:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/controllers/spree/orders_controller.rb:188:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/models/enterprise.rb:518:5: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
    return if owner.can_own_more_enterprises?
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:518:5: C: [Corrected] Style/GuardClause: Use a guard clause (return if owner.can_own_more_enterprises?) instead of wrapping the code inside a conditional expression.
    unless owner.can_own_more_enterprises?
    ^^^^^^
app/models/enterprise.rb:519:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      errors.add(:owner, I18n.t(:enterprise_owner_error, email: owner.email, ...
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:521:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/models/enterprise.rb:522:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/models/enterprise.rb:546:5: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
    return unless is_hub
    ^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:546:5: C: [Corrected] Style/GuardClause: Use a guard clause (return unless is_hub) instead of wrapping the code inside a conditional expression.
    if is_hub
    ^^
app/models/enterprise.rb:547:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      enterprises.is_primary_producer.each do |enterprise| ...
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:553:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/models/enterprise.rb:555:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/models/enterprise.rb:557:5: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
    return if preferred_shopfront_taxon_order =~ /\A((\d+,)*\d+)?\z/
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:557:5: C: [Corrected] Style/GuardClause: Use a guard clause (return if preferred_shopfront_taxon_order =~ /\A((\d+,)*\d+)?\z/) instead of wrapping the code inside a conditional expression.
    unless preferred_shopfront_taxon_order =~ /\A((\d+,)*\d+)?\z/
    ^^^^^^
app/models/enterprise.rb:558:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      errors.add(:shopfront_category_ordering, "must contain a list of taxons.")
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:559:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/models/enterprise.rb:562:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/models/enterprise.rb:563:5: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
    return if preferred_shopfront_producer_order =~ /\A((\d+,)*\d+)?\z/
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:563:5: C: [Corrected] Style/GuardClause: Use a guard clause (return if preferred_shopfront_producer_order =~ /\A((\d+,)*\d+)?\z/) instead of wrapping the code inside a conditional expression.
    unless preferred_shopfront_producer_order =~ /\A((\d+,)*\d+)?\z/
    ^^^^^^
app/models/enterprise.rb:564:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      errors.add(:shopfront_category_ordering, "must contain a list of producers.")
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:565:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/models/enterprise.rb:569:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/models/enterprise_group.rb:80:5: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
    return unless permalink.blank? || permalink_changed?
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_group.rb:80:5: C: [Corrected] Style/GuardClause: Use a guard clause (return unless permalink.blank? || permalink_changed?) instead of wrapping the code inside a conditional expression.
    if permalink.blank? || permalink_changed?
    ^^
app/models/enterprise_group.rb:81:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      requested = permalink.presence || permalink_was.presence || name.presence || 'group'
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_group.rb:82:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      self.permalink = create_unique_permalink(requested.parameterize)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_group.rb:83:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/models/enterprise_group.rb:84:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/models/producer_property.rb:16:5: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
    return unless name.present?
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/producer_property.rb:16:5: C: [Corrected] Style/GuardClause: Use a guard clause (return unless name.present?) instead of wrapping the code inside a conditional expression.
    if name.present?
    ^^
app/models/producer_property.rb:16:12: C: [Correctable] Rails/Blank: Use if name.blank? instead of unless name.present?.
    return unless name.present?
           ^^^^^^^^^^^^^^^^^^^^
app/models/producer_property.rb:17:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      self.property = Spree::Property.find_by(name: name) || ...
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/producer_property.rb:19:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/models/producer_property.rb:20:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/models/product_import/entry_processor.rb:42:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return unless total_saved_count.zero?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/product_import/entry_processor.rb:42:7: C: [Corrected] Style/GuardClause: Use a guard clause (return unless total_saved_count.zero?) instead of wrapping the code inside a conditional expression.
      if total_saved_count.zero?
      ^^
app/models/product_import/entry_processor.rb:43:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        @importer.errors.add(:importer, ...
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/product_import/entry_processor.rb:45:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/models/product_import/entry_processor.rb:46:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/models/spree/order.rb:506:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return unless !completed? && shipments.any?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/order.rb:506:7: C: [Corrected] Style/GuardClause: Use a guard clause (return unless !completed? && shipments.any?) instead of wrapping the code inside a conditional expression.
      if !completed? && shipments.any?
      ^^
app/models/spree/order.rb:507:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        shipments.destroy_all
        ^^^^^^^^^^^^^^^^^^^^^
app/models/spree/order.rb:508:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        restart_checkout_flow
        ^^^^^^^^^^^^^^^^^^^^^
app/models/spree/order.rb:509:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/models/spree/order.rb:510:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/models/spree/preferences/preferable_class_methods.rb:67:9: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
        return unless method_defined? preference_description_getter_method(name)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/preferences/preferable_class_methods.rb:67:9: C: [Corrected] Style/GuardClause: Use a guard clause (return unless method_defined? preference_description_getter_method(name)) instead of wrapping the code inside a conditional expression.
        if method_defined? preference_description_getter_method(name)
        ^^
app/models/spree/preferences/preferable_class_methods.rb:68:11: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
          remove_method preference_description_getter_method(name)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/preferences/preferable_class_methods.rb:69:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/models/spree/preferences/preferable_class_methods.rb:70:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
app/services/order_syncer.rb:90:5: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
    return unless !pickup_to_delivery || order.shipment.blank?
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/services/order_syncer.rb:90:5: C: [Corrected] Style/GuardClause: Use a guard clause (return unless !pickup_to_delivery || order.shipment.blank?) instead of wrapping the code inside a conditional expression.
    if !pickup_to_delivery || order.shipment.blank?
    ^^
app/services/order_syncer.rb:91:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      order.updater.shipping_address_from_distributor
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/services/order_syncer.rb:92:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
app/services/order_syncer.rb:93:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
engines/order_management/app/services/order_management/order/updater.rb:166:9: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
        return unless payment.completed? || order.completed?
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
engines/order_management/app/services/order_management/order/updater.rb:166:9: C: [Corrected] Style/GuardClause: Use a guard clause (return unless payment.completed? || order.completed?) instead of wrapping the code inside a conditional expression.
        if payment.completed? || order.completed?
        ^^
engines/order_management/app/services/order_management/order/updater.rb:167:11: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
          persist_totals
          ^^^^^^^^^^^^^^
engines/order_management/app/services/order_management/order/updater.rb:168:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
engines/order_management/app/services/order_management/order/updater.rb:169:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
lib/discourse/single_sign_on.rb:33:9: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
        raise "Bad signature for payload #{diags}" unless parsed["sso"] =~ %r{[^a-zA-Z0-9=\r\n/+]}m
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/discourse/single_sign_on.rb:33:9: C: [Corrected] Style/GuardClause: Use a guard clause (raise "Bad signature for payload #{diags}" unless parsed["sso"] =~ %r{[^a-zA-Z0-9=\r\n/+]}m) instead of wrapping the code inside a conditional expression.
        if parsed["sso"] =~ %r{[^a-zA-Z0-9=\r\n/+]}m
        ^^
lib/discourse/single_sign_on.rb:34:11: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
          raise "The SSO field should be Base64 encoded, using only A-Z, a-z, 0-9, +, /, " \ ...
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/discourse/single_sign_on.rb:37:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
lib/discourse/single_sign_on.rb:38:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
lib/discourse/single_sign_on.rb:39:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
lib/discourse/single_sign_on.rb:39:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
lib/discourse/single_sign_on.rb:40:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
lib/open_food_network/order_cycle_form_applicator.rb:76:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return unless manages_coordinator?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/open_food_network/order_cycle_form_applicator.rb:76:7: C: [Corrected] Style/GuardClause: Use a guard clause (return unless manages_coordinator?) instead of wrapping the code inside a conditional expression.
      if manages_coordinator?
      ^^
lib/open_food_network/order_cycle_form_applicator.rb:77:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        exchange.save!
        ^^^^^^^^^^^^^^
lib/open_food_network/order_cycle_form_applicator.rb:78:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        ExchangeVariantBulkUpdater.new(exchange).update!(variant_ids) unless variant_ids.nil?
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/open_food_network/order_cycle_form_applicator.rb:80:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        @touched_exchanges << exchange
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/open_food_network/order_cycle_form_applicator.rb:81:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
lib/open_food_network/order_cycle_form_applicator.rb:82:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
lib/open_food_network/order_cycle_form_applicator.rb:107:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return unless manages_coordinator?
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/open_food_network/order_cycle_form_applicator.rb:107:7: C: [Corrected] Style/GuardClause: Use a guard clause (return unless manages_coordinator?) instead of wrapping the code inside a conditional expression.
      if manages_coordinator?
      ^^
lib/open_food_network/order_cycle_form_applicator.rb:108:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        untouched_exchanges.each(&:destroy)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/open_food_network/order_cycle_form_applicator.rb:109:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
lib/open_food_network/order_cycle_form_applicator.rb:111:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
lib/spree/core/controller_helpers/respond_with.rb:42:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      raise ActionController::UnknownFormat unless format
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/spree/core/controller_helpers/respond_with.rb:42:7: C: [Corrected] Style/GuardClause: Use a guard clause (raise ActionController::UnknownFormat unless format) instead of wrapping the code inside a conditional expression.
      if format
      ^^
lib/spree/core/controller_helpers/respond_with.rb:43:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        _process_format(format)
        ^^^^^^^^^^^^^^^^^^^^^^^
lib/spree/core/controller_helpers/respond_with.rb:44:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        collector
        ^^^^^^^^^
lib/spree/core/controller_helpers/respond_with.rb:45:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
lib/spree/core/controller_helpers/respond_with.rb:46:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
lib/spree/core/controller_helpers/respond_with.rb:46:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
lib/spree/core/controller_helpers/respond_with.rb:47:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
lib/spree/core/controller_helpers/respond_with.rb:47:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
lib/spree/core/controller_helpers/respond_with.rb:48:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
lib/spree/core/controller_helpers/respond_with.rb:48:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
spec/support/request/distribution_helper.rb:10:7: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
      return unless order_cycle && page.has_select?('order_order_cycle_id')
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/request/distribution_helper.rb:10:7: C: [Corrected] Style/GuardClause: Use a guard clause (return unless order_cycle && page.has_select?('order_order_cycle_id')) instead of wrapping the code inside a conditional expression.
      if order_cycle && page.has_select?('order_order_cycle_id')
      ^^
spec/support/request/distribution_helper.rb:11:9: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
        select_by_value order_cycle.id, from: 'order_order_cycle_id'
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/request/distribution_helper.rb:12:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
spec/support/request/distribution_helper.rb:13:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
spec/support/request/shop_workflow.rb:127:5: C: [Corrected] Layout/EmptyLineAfterGuardClause: Add empty line after guard clause.
    return unless oc.exchanges.from_enterprise(supplier).incoming.empty?
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/request/shop_workflow.rb:127:5: C: [Corrected] Style/GuardClause: Use a guard clause (return unless oc.exchanges.from_enterprise(supplier).incoming.empty?) instead of wrapping the code inside a conditional expression.
    if oc.exchanges.from_enterprise(supplier).incoming.empty?
    ^^
spec/support/request/shop_workflow.rb:128:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      create(:exchange, order_cycle: oc, incoming: true, ...
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/request/shop_workflow.rb:130:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
spec/support/request/shop_workflow.rb:131:1: C: [Corrected] Layout/EmptyLinesAroundMethodBody: Extra empty line detected at method body end.
spec/system/support/precompile_assets.rb:18:5: C: [Corrected] Style/GuardClause: Use a guard clause (next if Webpacker.dev_server.running?) instead of wrapping the code inside a conditional expression.
    if Webpacker.dev_server.running?
    ^^
spec/system/support/precompile_assets.rb:19:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
spec/system/support/precompile_assets.rb:20:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
spec/system/support/precompile_assets.rb:20:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
spec/system/support/precompile_assets.rb:21:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      $stdout.puts "\n Precompiling assets.\n"
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/support/precompile_assets.rb:23:7: C: [Corrected] Layout/IndentationConsistency: Inconsistent indentation detected.
      Webpacker.compile
      ^^^^^^^^^^^^^^^^^
spec/system/support/precompile_assets.rb:24:1: C: [Corrected] Layout/EmptyLinesAroundBlockBody: Extra empty line detected at block body end.
spec/system/support/precompile_assets.rb:24:1: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.

1488 files inspected, 220 offenses detected, 218 offenses corrected, 1 more offense can be corrected with `rubocop -A`
2023-09-01 08:55:56 +09:00
Neal Chambers
afdddc9237 Safely autocorrect Style/FileRead
Inspecting 1488 files
.........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................C.........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................C............................................................................................................................................................................

Offenses:

lib/tasks/karma.rake:33:15: C: [Corrected] Style/FileRead: Use File.read.
    unit_js = File.open('config/ng-test.conf.js', 'r').read
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/services/upload_sanitizer_spec.rb:13:41: C: [Corrected] Style/FileRead: Use File.read.
    let(:service) { UploadSanitizer.new(File.open(upload).read) }
                                        ^^^^^^^^^^^^^^^^^^^^^^

1488 files inspected, 2 offenses detected, 2 offenses corrected
2023-09-01 08:55:56 +09:00
Neal Chambers
4cce85378c Safely autocorrect Rails/WhereNot
Inspecting 1488 files
...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................C....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Offenses:

lib/reporting/reports/users_and_enterprises/base.rb:27:14: C: [Corrected] Rails/WhereNot: Use where.not(enterprises: { id: nil }) instead of manually constructing negated SQL in where.
            .where("enterprises.id IS NOT NULL")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/users_and_enterprises/base.rb:39:14: C: [Corrected] Rails/WhereNot: Use where.not(enterprise_id: nil) instead of manually constructing negated SQL in where.
            .where("enterprise_id IS NOT NULL")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/users_and_enterprises/base.rb:40:14: C: [Corrected] Rails/WhereNot: Use where.not(user_id: nil) instead of manually constructing negated SQL in where.
            .where("user_id IS NOT NULL")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1488 files inspected, 3 offenses detected, 3 offenses corrected
2023-09-01 08:55:56 +09:00
Neal Chambers
f71ee22d2f Regenerate Rubocop's TODO file 2023-09-01 08:55:56 +09:00
filipefurtad0
e0031225d1 Covers order special instruction 2023-08-31 14:25:18 +01:00
filipefurtad0
3374c38d5c Covers order state - cancelled, resumed - changes 2023-08-31 14:25:18 +01:00
filipefurtad0
301c070fc3 Covers order currency change 2023-08-31 14:25:18 +01:00
filipefurtad0
2e72fe1bce Covers order number change 2023-08-31 14:25:18 +01:00
filipefurtad0
38eb84b1d8 Covers order total change 2023-08-31 14:25:18 +01:00
filipefurtad0
b0c362f75e Corrects description, if the order didn't change 2023-08-31 14:25:18 +01:00
filipefurtad0
79a38345e9 Passes order as argument
to invoice comparator
2023-08-31 14:25:18 +01:00
filipefurtad0
a223675e74 Covers shipping method change 2023-08-31 14:25:18 +01:00
filipefurtad0
0540548893 Adds coverage for included/added taxes
at the order-object level
2023-08-31 14:25:18 +01:00
filipefurtad0
8d382f3de4 Corrects description
for order-level, non-relevant attribute change
2023-08-31 14:25:18 +01:00
Maikel
67d5ffdc54 Merge pull request #11475 from filipefurtad0/uncomment_i18n_inflections_spec
Uncomments pluralize test
2023-08-31 17:20:35 +10:00
Maikel Linke
57b4f615e8 Fix DFC context in spec example 2023-08-31 17:06:20 +10:00
David Cook
63383e8ea1 Enable editing of variant price
Formatting of the price was copied from the existing bulk product screen.
2023-08-31 16:41:41 +10:00
David Cook
26d6dedd4d Fix FrozenString error
An error was apparent in specs when trying to assign a string as the price. It's not a problem when submitting the form in the browser, I don't know why.

But in any case, it shouldn't be trying to modify a variable passed as a parameter.
2023-08-31 16:41:41 +10:00
David Cook
b955cd8fee Enable editing of variant SKU
I'm not sure what the point of the product SKU was to be honest.. it will probably be removed in the product refactor.
2023-08-31 16:41:41 +10:00
David Cook
f69fc67d5e Refactor: using Rails form magic
Now we don't have to specify the field names on products, yay!

I tried desparately to get it working for the nested variant forms too, but sadly the form builder refuses to acknowledge the relationship. The form builder simply doesn't support a collection of objects in this way.

We could try creating a fake model similar to ProductSet that accepts_nested_attributes_for :products. But it woudl be better to create a custom form builder to do it.

Or, just manually specify field names for now!
2023-08-31 16:41:41 +10:00
David Cook
7f05a4913c Remove explicit index numbers from form names
I have to admit I don't fully understand why, but it seems to work, even though the rails guide says "only one level of arrayness is allowed (https://guides.rubyonrails.org/form_helpers.html#combining-them). Maybe it's ok here because it's not an array of arrays.

(I think this format is what the reflex spec was already testing).
2023-08-31 16:41:41 +10:00
David Cook
e17d16cb52 Enable editing of variant display_name
Best viewed with whitespace ignored.
Using Rails' nested attributes feature, which ModelSet already supports.
2023-08-31 16:41:41 +10:00
David Cook
5356e42efc Enable editing of product SKU 2023-08-31 16:41:41 +10:00
David Cook
9fe9d8557c Remove line-clamp for inputs
It doesn't work and we don't currently have a better solution for that.
2023-08-31 16:41:41 +10:00
David Cook
aff33b79ae Simplify form code
The form elements shouldn't need an `id` attribute.
2023-08-31 16:41:36 +10:00
Maikel Linke
514b8fa6ab Import DFC unit labels like bunch and jar 2023-08-31 16:27:55 +10:00
Maikel Linke
427d806b13 Remove ambiguous unit "cup"
The DFC doesn't actually specify which cup it means. I don't expect
anyone providing "cup" as unit to measure their produce and expect it to
calculate as a regular volume. It can just be seen as items.
2023-08-31 16:11:50 +10:00
Maikel Linke
5bfbf43a38 Spec bulk enterprise fee edit without row ids
It makes the spec robust to different sorting of the rows. It also hides
the knowledge of the full element ids.
2023-08-31 16:03:46 +10:00
Maikel Linke
bb336ff9c4 Avoid unnecessary requests in system specs
This spec was nested within another block that executed a form submit
which we don't actually need here. So I flattened the structure and
repeated the few missing lines of code. This speeds up the execution.

The fee type is important in the setup because it determines the order
of the fees on the page and we access the rows by their row index.

This commit is best viewed without whitespace changes.
2023-08-31 13:44:33 +10:00
Maikel Linke
1abbfc01d2 Stabilise enterprise fee spec
The problem here was that the second fee was created in a `let!` block
that came after a `before` block which visited the page. In some cases
it worked but sometimes the fee wasn't created yet when the page was
loaded. Form changes in the second row were not affecting the second fee
as intended.
2023-08-31 10:02:06 +10:00
Maikel Linke
50f7177a38 Use existing service to label weight&volume units
We still have the scale stored in two places but in our current system
that's part of a unit's "id".

If the DFC adds that value to its standard then we can use it for lookup
and don't need to repeat it.

* https://github.com/datafoodconsortium/taxonomies/issues/7
2023-08-31 09:48:24 +10:00
filipefurtad0
6bc8a1a850 Uncomments pluralize test 2023-08-30 22:57:46 +01:00
Maikel Linke
0da1b27795 Simplify code with association #supplied_variants
Rails makes it so easy.
2023-08-30 15:55:10 +10:00
Maikel Linke
01e1dc137e Simplify access of an enterprise's variants 2023-08-30 15:47:03 +10:00
Maikel
dea96fd3ab Merge pull request #11469 from openfoodfoundation/dependabot/bundler/rubocop-1.56.2
chore(deps-dev): bump rubocop from 1.56.1 to 1.56.2
2023-08-30 12:14:36 +10:00
Konrad
077bb41412 Merge pull request #11348 from abdellani/fix-non-empty-orders-in-cart-state-not-appearing
fix Non-empty orders in the cart state do not appear in orders page
2023-08-29 15:33:49 +02:00
David Cook
ff3802fe69 Merge pull request #11457 from filipefurtad0/renames_knapsack_nodes
Renames Knapsack nodes
2023-08-29 21:04:43 +10:00
dependabot[bot]
091544583f chore(deps-dev): bump rubocop from 1.56.1 to 1.56.2
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.56.1 to 1.56.2.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.56.1...v1.56.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-29 09:38:31 +00:00
David Cook
78585afc9c Fix format 2023-08-29 16:00:26 +10:00
filipefurtad0
0d1f3f82fd Balances build time
Two nodes were removed from models and three engines; these were and added to system_consumer and system_admin, respectively
2023-08-28 10:28:14 +01:00
filipefurtad0
3a6ca38432 Renames Knapsack nodes 2023-08-28 10:28:14 +01:00
Filipe
67fdc56270 Merge pull request #11427 from mkllnk/release-template
Generate all release note categories with labels
2023-08-28 10:04:57 +01:00
Maikel Linke
8114430248 Refactor DFC unit mapping for easier reading
I also updated the comments.
2023-08-28 17:13:04 +10:00
Maikel Linke
f96ab7c432 Import DFC bundle units like dozen or 6 pack 2023-08-28 17:13:04 +10:00
Maikel Linke
f096783098 Import all metric DFC units 2023-08-28 17:13:04 +10:00
Maikel Linke
43346e2671 Import imperial DFC units 2023-08-28 17:13:04 +10:00
Maikel Linke
9ddf536fa3 Import DFC milligram 2023-08-28 17:13:04 +10:00
Maikel Linke
5a8d95c443 Import DFC kilogram 2023-08-28 17:13:04 +10:00
Maikel Linke
996f3bb235 Spec current quantity unit conversion 2023-08-28 17:13:04 +10:00
Maikel Linke
96b79bce2d Encapsulate DFC-OFN data model bridge
Re-uses existing code and takes knowledge out of the controller.
2023-08-28 17:13:04 +10:00
Maikel Linke
9ab75e086a Use DFC Connector for SuppliedProduct update 2023-08-28 17:13:04 +10:00
Maikel Linke
faa112c3ae Spec DFC SuppliedProduct#update with new Prototype
I observed new data from the DFC Prototype. It now uses the DFC 1.8
ontology with the hasQuantity object.

It now also uses PUT requests for updates because PATCH is not as well
supported. Rails doesn't care though.

I couldn't observe a request for the CatalogItem yet because the
Prototype failed to send it.
2023-08-28 17:13:04 +10:00
Maikel
cf8d5a584e Merge pull request #11455 from openfoodfoundation/dependabot/npm_and_yarn/jasmine-core-5.1.1
chore(deps-dev): bump jasmine-core from 5.1.0 to 5.1.1
2023-08-28 11:51:36 +10:00
Maikel
7e44c75456 Merge pull request #11453 from dacook/buu-labels
Buu labels
2023-08-28 11:50:35 +10:00
Maikel
86842847ad Merge pull request #11452 from dacook/flaky-spec-products_v3-11328
[Flaky] spec/system/admin/products_v3/products_spec.rb
2023-08-28 11:45:12 +10:00
Maikel
dd79761186 Merge pull request #11448 from openfoodfoundation/dependabot/bundler/aws-sdk-s3-1.134.0
chore(deps): bump aws-sdk-s3 from 1.133.0 to 1.134.0
2023-08-28 11:43:31 +10:00
Maikel
0b869f2abe Merge pull request #11451 from mkllnk/flaky-voucher-specs
De-flake voucher specs by checking success
2023-08-28 11:16:43 +10:00
dependabot[bot]
00ea2e5b07 chore(deps-dev): bump jasmine-core from 5.1.0 to 5.1.1
Bumps [jasmine-core](https://github.com/jasmine/jasmine) from 5.1.0 to 5.1.1.
- [Release notes](https://github.com/jasmine/jasmine/releases)
- [Changelog](https://github.com/jasmine/jasmine/blob/main/RELEASE.md)
- [Commits](https://github.com/jasmine/jasmine/compare/v5.1.0...v5.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-25 09:09:08 +00:00
David Cook
7d6ba2d31f Clean up unneeded override 2023-08-25 17:23:05 +10:00
David Cook
451513ad04 Markup labels as.. labels
This means you can click on the label name to select the field, and accessibility software can read the label name.  I was motivated to do this so that we could update the spec to use label text rather than IDs. But it seems we can't do that with tom-select.

I've updated the styles for all form labels (in admin_style_v3 toggle) to match the design.
2023-08-25 17:19:46 +10:00
Maikel Linke
200729f198 Show incomplete orders when sorting by name
An inner join with the billing address was hiding some orders when
sorting by billing address name. Telling Rails that those fields are
referenced triggers an outer left join including orders without billing
address.

But when the Bulk Order Management page sorts by `bill_address_lastname`
then Ransack does most of the magic, except that we need to override the
select in combination with distinct results.
2023-08-25 16:15:11 +10:00
David Cook
4d79cdb0ea Ensure records are created before visiting the page
'let!' is executed in the same way as 'before', so it matters which order they are defined in.

For contexts with a single example, I just put it straight into the example.
2023-08-25 16:09:52 +10:00
Maikel Linke
d8da808901 Resolve pending spec, reported issue is fixed 2023-08-25 15:48:31 +10:00
David Cook
ccafdc4494 Remove redundant code
bill_address is already joined in this query.
The class variable isn't needed outside this scope.

Arguably I think the condition on the select isn't needed; it wouldn't hurt to always select spree_addresses. But I'll try to avoid changing too much..
2023-08-25 15:48:31 +10:00
Mohamed ABDELLANI
04312b05c6 add orders without billing address to SearchOrders#fetch_orders' results 2023-08-25 15:48:31 +10:00
David Cook
4f9651f5c9 Wait for pagination message to update
Hopefully this fixes openfoodfoundation/openfoodnetwork#11328
2023-08-25 14:52:50 +10:00
Maikel Linke
1a95476634 Combine some voucher system specs to save time
It also simplifies the spec code a bit not having a shared example.
2023-08-25 13:56:41 +10:00
Maikel Linke
233171a9ce De-flake voucher specs by checking success
Vouchers are applied via a reflex and we need to check for success
before trying to navigate further. The new helper does this in a
consistent way.
2023-08-25 13:56:41 +10:00
Maikel Linke
4be38ba8da Remove redundant system spec
System specs are expensive. And this spec just looked for the visibility
of certain elements while other tests actually use them and therefore
verify their function much more thoroughly.
2023-08-25 13:56:41 +10:00
Maikel
7414b5cbc9 Merge pull request #11397 from rioug/11331-add-required-field-dcf-enterprise
Add required enterprise fields to DFC API
2023-08-25 11:44:49 +10:00
Maikel
56f4eca79e Update engines/dfc_provider/app/controllers/dfc_provider/addresses_controller.rb
Fix type in comment

Co-authored-by: David Cook <david@redcliffs.net>
2023-08-25 11:31:00 +10:00
Maikel
a7e2d23e3b Merge pull request #11449 from openfoodfoundation/dependabot/bundler/knapsack_pro-5.6.0
chore(deps-dev): bump knapsack_pro from 5.4.1 to 5.6.0
2023-08-25 10:50:32 +10:00
Maikel Linke
467d72dc31 Test voucher UI with most common feature toggle
People want to test vouchers mainly on a per-enterprise basis.
Replicating this in the system spec makes sure that we are testing the
conditionals in views.
2023-08-25 10:19:17 +10:00
Maikel Linke
e12cf2aa4c Simplify feature check for multiple actors at once
I think that it's a valid case to check a feature toggle against the
user and an enterprise. You may want to check with only one user first,
then activate it for a whole enterprise and lastly activate the feature
globally.
2023-08-25 10:19:17 +10:00
Maikel Linke
0cc450e815 Allow Vouchers feature per enterprise
I also kept the per-user check to be backwards-compatible. Some
instances have that enabled already. And for early testing, you may want
to test with only one user first before all customer see it.
2023-08-25 10:19:17 +10:00
Maikel Linke
02edd829b9 Allow to admin vouchers if you know the URL
The generic FeatureToggleConstraint in routing knows about the current
user but not about the enterprise to edit. We could create a new custom
constraint for routing but it's much easier to handle permissions in the
controller. Let's keep routes simple.
2023-08-25 10:19:17 +10:00
David Cook
aea0a629ee Merge pull request #11425 from macanudo527/fix_rails_activerecordoverride
Fix Rails/ActiveRecordOverride
2023-08-25 09:22:05 +10:00
dependabot[bot]
5b25fa80a2 chore(deps-dev): bump knapsack_pro from 5.4.1 to 5.6.0
Bumps [knapsack_pro](https://github.com/KnapsackPro/knapsack_pro-ruby) from 5.4.1 to 5.6.0.
- [Changelog](https://github.com/KnapsackPro/knapsack_pro-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v5.4.1...v5.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-24 23:01:05 +00:00
dependabot[bot]
61109259e4 chore(deps): bump aws-sdk-s3 from 1.133.0 to 1.134.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.133.0 to 1.134.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-24 23:00:22 +00:00
Maikel
54e8df7c88 Merge pull request #11443 from openfoodfoundation/dependabot/bundler/ffaker-2.22.0
chore(deps): bump ffaker from 2.21.0 to 2.22.0
2023-08-25 08:56:34 +10:00
Maikel
0441453469 Merge pull request #11439 from mkllnk/unflake-customer-report-spec
Report customers in deterministic order
2023-08-25 08:54:21 +10:00
Neal Chambers
2bfa51cbb1 Fix Rails/ActiveRecordOverride 2023-08-25 08:51:27 +10:00
filipefurtad0
a39c465692 Update all locales with the latest Transifex translations 2023-08-24 21:36:53 +01:00
Filipe
cc3b7c68ae Merge pull request #11208 from dacook/buu-editing-11059
[BUU] Change name of my products 🚧
2023-08-24 21:19:52 +01:00
Filipe
10bc2a3ee6 Merge pull request #11430 from abdellani/fix-updating-invoices-data
fix order invoice generator must update the latest invoice
2023-08-24 20:58:37 +01:00
dependabot[bot]
221eea227f chore(deps): bump ffaker from 2.21.0 to 2.22.0
Bumps [ffaker](https://github.com/ffaker/ffaker) from 2.21.0 to 2.22.0.
- [Release notes](https://github.com/ffaker/ffaker/releases)
- [Changelog](https://github.com/ffaker/ffaker/blob/main/Changelog.md)
- [Commits](https://github.com/ffaker/ffaker/compare/v2.21.0...v2.22.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-24 09:58:42 +00:00
Filipe
020276a248 Merge pull request #11418 from macanudo527/fix_rubocop_7
Fix Rails and Style Autocorrect Rubocop Errors
2023-08-24 10:29:45 +01:00
Filipe
c5e1444613 Merge pull request #11206 from macanudo527/fix_class_length
Add Form Object to Schedules Controller
2023-08-24 09:28:50 +01:00
Konrad
c90b244a96 Merge pull request #11415 from abdellani/snail-when-setting-unit-value-to-0
fix Snail when setting "0" in the unit value field
2023-08-24 10:04:26 +02:00
Konrad
6ec022b731 Merge pull request #11391 from rioug/11362-fix-error-creating-percentage-voucher
[Vouchers] fix error when creating a percentage voucher
2023-08-24 09:09:30 +02:00
Maikel Linke
1c3574ce79 Include address in DFC Enterprise endpoint 2023-08-24 16:51:36 +10:00
Maikel Linke
20b09b5352 Add DFC Address API endpoint 2023-08-24 16:20:13 +10:00
Gaetan Craig-Riou
a8d15154a2 Link address to enterprise
+ spec
2023-08-24 15:55:15 +10:00
Gaetan Craig-Riou
86bb77ab9f Add AddressBuilder
It will let us include address in the various DFC API endpoint
2023-08-24 15:55:15 +10:00
Gaetan Craig-Riou
f5fb760128 Update Enterprise request spec
Check all the attributes supported by the DFC connector
2023-08-24 15:55:14 +10:00
Maikel Linke
244b9abd21 Spec with given data included in examples
And use in-memory data where possible to speed up specs.
2023-08-24 15:55:14 +10:00
Maikel Linke
5d05c3c0f1 DRY DFC enterprise spec 2023-08-24 15:55:14 +10:00
Gaetan Craig-Riou
18565f4a85 Add all the enterpise attributes supported by DFC connector 2023-08-24 15:55:14 +10:00
David Cook
3c617a51e0 Merge pull request #11433 from openfoodfoundation/dependabot/bundler/mime-types-3.5.1
chore(deps): bump mime-types from 3.5.0 to 3.5.1
2023-08-24 15:11:09 +10:00
David Cook
a96b712eb2 Merge pull request #11432 from openfoodfoundation/dependabot/bundler/activerecord-import-1.5.0
chore(deps): bump activerecord-import from 1.4.1 to 1.5.0
2023-08-24 15:10:02 +10:00
David Cook
4a877fe019 Merge pull request #11426 from mkllnk/style-has-many
Allow has_and_belongs_to_many to reduce code
2023-08-24 15:03:17 +10:00
dependabot[bot]
f0dce7765c chore(deps): bump activerecord-import from 1.4.1 to 1.5.0
Bumps [activerecord-import](https://github.com/zdennis/activerecord-import) from 1.4.1 to 1.5.0.
- [Changelog](https://github.com/zdennis/activerecord-import/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zdennis/activerecord-import/compare/v1.4.1...v1.5.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-24 02:54:17 +00:00
Maikel
79211bd856 Merge pull request #11438 from openfoodfoundation/dependabot/bundler/aws-sdk-s3-1.133.0
chore(deps): bump aws-sdk-s3 from 1.132.1 to 1.133.0
2023-08-24 12:52:39 +10:00
Maikel
fba55fe9fd Merge pull request #11437 from openfoodfoundation/dependabot/bundler/rails-7.0.7.2
chore(deps): bump rails from 7.0.7 to 7.0.7.2
2023-08-24 12:51:08 +10:00
Maikel
d6572d9fde Merge pull request #11434 from openfoodfoundation/dependabot/bundler/knapsack_pro-5.4.1
chore(deps-dev): bump knapsack_pro from 5.3.5 to 5.4.1
2023-08-24 12:46:33 +10:00
Neal Chambers
a363f88f2c Put Subscriptions back into Schedules Controller 2023-08-24 09:18:35 +09:00
Neal Chambers
7eab4d64ba Update .rubocop_todo.yml 2023-08-24 09:17:55 +09:00
Neal Chambers
134cbb4f04 Add Form Object to Fix Metrics/ClassLength 2023-08-24 09:17:53 +09:00
David Cook
a8d37d0899 Apply suggestions from code review
Rails is clever enough to not query the database without ids

Co-authored-by: Maikel <maikel@email.org.au>
2023-08-24 08:48:27 +10:00
Filipe
1021fd94b5 Merge pull request #11419 from openfoodfoundation/dependabot/bundler/stripe-9.0.0
chore(deps): bump stripe from 8.6.0 to 9.0.0
2023-08-23 17:35:29 +01:00
Mohamed ABDELLANI
928494af23 use Invoice#latest to fetch the most recent invoice 2023-08-23 11:57:30 +01:00
Mohamed ABDELLANI
f9e6f8bfa5 fix existing tests 2023-08-23 11:50:33 +01:00
dependabot[bot]
cd9bf6a62e chore(deps): bump stripe from 8.6.0 to 9.0.0
Bumps [stripe](https://github.com/stripe/stripe-ruby) from 8.6.0 to 9.0.0.
- [Release notes](https://github.com/stripe/stripe-ruby/releases)
- [Changelog](https://github.com/stripe/stripe-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/stripe/stripe-ruby/compare/v8.6.0...v9.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-23 11:42:43 +01:00
Maikel Linke
4c3d619260 Report customers in deterministic order
The result could be random before which led to a flaky spec. I could
have adjusted the spec but I thought that it may be better UX as well to
be deterministic, especially when exporting into spreadsheets.
2023-08-23 17:03:30 +10:00
Maikel Linke
226d270cc1 Remove now obsolete comment 2023-08-23 14:30:46 +10:00
Maikel Linke
58fc9fc8bb Update symbol for technical changes 2023-08-23 14:29:52 +10:00
Maikel
7e55421ab8 Convey feature toggle release category more clearly
Co-authored-by: David Cook <david@redcliffs.net>
2023-08-23 12:38:49 +10:00
dependabot[bot]
ea46d15ad4 chore(deps): bump aws-sdk-s3 from 1.132.1 to 1.133.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.132.1 to 1.133.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-23 02:28:35 +00:00
dependabot[bot]
752d77110d chore(deps): bump rails from 7.0.7 to 7.0.7.2
Bumps [rails](https://github.com/rails/rails) from 7.0.7 to 7.0.7.2.
- [Release notes](https://github.com/rails/rails/releases)
- [Commits](https://github.com/rails/rails/compare/v7.0.7...v7.0.7.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-23 02:28:07 +00:00
Maikel
57c44ffc72 Merge pull request #11429 from openfoodfoundation/dependabot/bundler/newrelic_rpm-9.4.2
chore(deps): bump newrelic_rpm from 9.4.1 to 9.4.2
2023-08-23 12:24:53 +10:00
Maikel
9bfb59d45f Merge pull request #11428 from openfoodfoundation/dependabot/bundler/rubocop-1.56.1
chore(deps-dev): bump rubocop from 1.56.0 to 1.56.1
2023-08-23 12:23:43 +10:00
Mohamed ABDELLANI
c689e2da8b remove ToS link on mails if ToS file is not set 2023-08-22 11:33:04 +01:00
Mohamed ABDELLANI
93c2cfd6c0 hide ToS from footer if the file is not set 2023-08-22 11:27:20 +01:00
Konrad
3aca33b8a6 Merge pull request #11230 from macanudo527/fix_products_controller
Add Query Object to Product Model to Fix Metrics/ClassLength
2023-08-22 11:38:09 +02:00
Mohamed ABDELLANI
b082475c35 update product's unit_value validation 2023-08-22 10:28:27 +01:00
Mohamed ABDELLANI
423163c4e9 hide agree to the ToS when not ToS file is set 2023-08-22 10:22:26 +01:00
Mohamed ABDELLANI
d47b47627c tos_accepted? returns true if the ToS file is not set 2023-08-22 10:22:26 +01:00
dependabot[bot]
067ddb7bcd chore(deps-dev): bump knapsack_pro from 5.3.5 to 5.4.1
Bumps [knapsack_pro](https://github.com/KnapsackPro/knapsack_pro-ruby) from 5.3.5 to 5.4.1.
- [Changelog](https://github.com/KnapsackPro/knapsack_pro-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v5.3.5...v5.4.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-22 09:04:55 +00:00
dependabot[bot]
238249e8ec chore(deps): bump mime-types from 3.5.0 to 3.5.1
Bumps [mime-types](https://github.com/mime-types/ruby-mime-types) from 3.5.0 to 3.5.1.
- [Changelog](https://github.com/mime-types/ruby-mime-types/blob/main/History.md)
- [Commits](https://github.com/mime-types/ruby-mime-types/compare/v3.5.0...v3.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-22 09:03:13 +00:00
Mohamed ABDELLANI
a896d414c2 optimize system test 2023-08-22 09:16:47 +01:00
Mohamed ABDELLANI
3ab288f435 fix product's unit value validation 2023-08-22 09:16:47 +01:00
Mohamed ABDELLANI
d4dbc0adb5 fix unit_value initialization on the product duplicator 2023-08-22 09:16:47 +01:00
Mohamed ABDELLANI
a9e4159839 validate unit_value > 0 on product model 2023-08-22 09:16:47 +01:00
David Cook
2edf504d65 Ignore long classes for now
As much as I hate to add to this list, this is still a work in progress so it's not worth refactoring at this point.
2023-08-22 11:51:05 +10:00
David Cook
b0e77df226 Style form actions area 2023-08-22 11:51:05 +10:00
David Cook
fccde964bf Enable 'medium' style for reset buttons 2023-08-22 11:46:56 +10:00
David Cook
7bf79441c8 Update link colours to match new design 2023-08-22 11:40:58 +10:00
David Cook
3cc5d7ba1d Copy form styles to v3 2023-08-22 11:40:58 +10:00
David Cook
37d1113e4c Align row headers with input contents
Inputs add extra padding, so we add the same padding to the header. Using an opt-in class, because I think we won't want this on all columns.
2023-08-22 11:40:58 +10:00
David Cook
8440c44a6f Remove unused style 2023-08-22 11:40:58 +10:00
David Cook
2b09ec7c21 [fixup] Left line for row hover 2023-08-22 11:40:58 +10:00
David Cook
be24247df2 [wip] Left line for row hover
But it's not perfect. Can we use a pseudo element instead?
2023-08-22 11:40:58 +10:00
David Cook
565ea23175 Hide borders from inputs until hover 2023-08-22 11:40:58 +10:00
David Cook
ef63c520c0 Aggregate errors 2023-08-22 11:40:58 +10:00
David Cook
a70f392654 Show error messages
It's kinda hard to test reflexes..
2023-08-22 11:40:58 +10:00
David Cook
a0dba001bc Attempt to save all records in bulk update
Before, it would abort after the first invalid record, and it doesn't tell you about the others. This way you find out about all at once.

This affects the existing Bulk Edit Products screen, and can result in longer error messages than before. But I would argue that's a good thing.

I think this is technically optional for BUU at this point, but a helpful improvement.
2023-08-22 11:40:58 +10:00
David Cook
71c36585bc Retain order when saving.
Perhaps this should be tested in the system spec too ("I can rename a product and still see it after saving"). But I'd like to find the compromise to avoid bulking up system specs too much. I think it's covered well enough by the reflex spec?
2023-08-22 11:40:58 +10:00
David Cook
6ffe1ec1ad Retain the order of products in the collection 2023-08-22 11:40:58 +10:00
David Cook
ae3cd6f7e0 Add bulk_update product form for product name
(For now at least,) we use one big standard Rails form, and ModelSet to update each record.
Submitting with Reflex allows us to manage the loading state along with the rest of the page (although I would rather use the built in HTTP POST standard).

Aria-label makes it a bit easier for testing (and accessibility software of course!). Technically it should have been aria-labelledby="id_of_column_header" but that would have resulted in more HTML and processing, which seemed silly.

Best viewed with whitespace ignored.
2023-08-22 11:40:58 +10:00
David Cook
a98242e5b4 Capybara: enable_aria_label 2023-08-22 11:40:58 +10:00
David Cook
e37a499125 Merge pull request #11383 from jibees/11274-buu-as-a-single-producer-i-should-not-be-able-to-see-the-producer-dropdown
🚧 Products V3: Do not display "Producers" selector if only one is possible
2023-08-22 11:33:12 +10:00
Maikel Linke
31d87ca087 Show producer filter only when multiple options
Also introducing a view spec here because the code was incorrectly
refactored before. The execution of the view spec takes only 100ms
which is much faster than a system spec.
2023-08-22 10:00:06 +10:00
Jean-Baptiste Bellet
6582a875c6 Do not display "Producers" selector if only one is possible
Fix #11274

Co-Authored-By: David Cook <david@redcliffs.net>
2023-08-22 10:00:06 +10:00
David Cook
71b297b5b5 Merge pull request #11417 from jibees/11410-go-back-to-top-after-selecting-a-page-in-pagination
🚧 BUU: Once products are loaded, scroll higher, ie. just above filters
2023-08-22 09:20:31 +10:00
Konrad
391d06130d Merge pull request #11395 from duleorlovic/google-map-region
Add Google map region parameter
2023-08-21 18:14:56 +02:00
Mohamed ABDELLANI
aaf1d22ccc fix order invoice generator must update the latest invoice 2023-08-21 16:10:05 +01:00
dependabot[bot]
397f365fe6 chore(deps): bump newrelic_rpm from 9.4.1 to 9.4.2
Bumps [newrelic_rpm](https://github.com/newrelic/newrelic-ruby-agent) from 9.4.1 to 9.4.2.
- [Release notes](https://github.com/newrelic/newrelic-ruby-agent/releases)
- [Changelog](https://github.com/newrelic/newrelic-ruby-agent/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/newrelic/newrelic-ruby-agent/compare/9.4.1...9.4.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-21 09:28:35 +00:00
dependabot[bot]
c97b5b3693 chore(deps-dev): bump rubocop from 1.56.0 to 1.56.1
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.56.0 to 1.56.1.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.56.0...v1.56.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-21 09:27:48 +00:00
Maikel
af73720157 Merge pull request #11423 from openfoodfoundation/dependabot/bundler/puma-6.3.1
chore(deps): bump puma from 6.3.0 to 6.3.1
2023-08-21 14:04:20 +10:00
Maikel Linke
2917e2f849 Generate all release note categories with labels
If reviewers add the right labels to pull requests then the release
note categories can be generated automatically.
2023-08-21 10:39:52 +10:00
Maikel Linke
ff18270898 Allow has_and_belongs_to_many to reduce code
The Rails/HasAndBelongsToMany rule wants model classes for all
many-to-many relationship tables in the database. But our team thinks
that it's useful to declare has_and_belongs_to_many relationships which
don't require an additional model.
2023-08-21 10:12:33 +10:00
Neal Chambers
0b6b750706 Clarify Product Scope Query Spec 2023-08-20 13:01:34 +09:00
Neal Chambers
fc47c57603 Add helper method to products controller and Use query object 2023-08-20 13:00:39 +09:00
Neal Chambers
9e82ab8a0f Remove query scopes from product model 2023-08-20 13:00:39 +09:00
Neal Chambers
c125c42a6d Add Tests for Product Scope Query 2023-08-20 13:00:39 +09:00
Neal Chambers
a867f7c543 Add Product Scope Query 2023-08-20 13:00:36 +09:00
Maikel Linke
eb204c9e5b Style HashSyntax and reduce line length 2023-08-20 12:33:43 +09:00
Maikel Linke
e0acc25808 Fix subscription spec and add more coverage
One spec was only passing due to a bug. The setup wasn't complete and
despite the variant being unavailable in the order cycle it was reported
as being available. The order cycle has now been set up correctly.

Another spec was added to cover an edge case lead to a bug before this
pull request. When all subscription items where unavailable, all were
marked as available.
2023-08-20 12:33:43 +09:00
Neal Chambers
bc559b966c Safely autocorrect Style/FetchEnvVar
Inspecting 1483 files
..............................................................................................................................................................C.............................................................................................................................................................................CC.............................................................................................................................................................................C.................................................................................................................................................................................................................................................................................................................................................................C.................................................................................C..............................................................................................................................................................................................C.....................................................................................................................................................................................................................................C......................................................................................................................

Offenses:

app/helpers/discourse_helper.rb:9:5: C: [Corrected] Style/FetchEnvVar: Use ENV.fetch('DISCOURSE_URL') or ENV.fetch('DISCOURSE_URL', nil) instead of ENV['DISCOURSE_URL'].
    ENV['DISCOURSE_URL']
    ^^^^^^^^^^^^^^^^^^^^
app/models/spree/preferences/configuration.rb:35:10: C: [Corrected] Style/FetchEnvVar: Use ENV.fetch('RAILS_CACHE_ID') or ENV.fetch('RAILS_CACHE_ID', nil) instead of ENV['RAILS_CACHE_ID'].
        [ENV['RAILS_CACHE_ID'], self.class.name, name].flatten.join('::').underscore
         ^^^^^^^^^^^^^^^^^^^^^
app/models/spree/preferences/preferable.rb:84:10: C: [Corrected] Style/FetchEnvVar: Use ENV.fetch("RAILS_CACHE_ID") or ENV.fetch("RAILS_CACHE_ID", nil) instead of ENV["RAILS_CACHE_ID"].
        [ENV["RAILS_CACHE_ID"], self.class.name, name, id].join('::').underscore
         ^^^^^^^^^^^^^^^^^^^^^
app/services/default_country.rb:13:40: C: [Corrected] Style/FetchEnvVar: Use ENV.fetch("DEFAULT_COUNTRY_CODE") or ENV.fetch("DEFAULT_COUNTRY_CODE", nil) instead of ENV["DEFAULT_COUNTRY_CODE"].
    Spree::Country.cached_find_by(iso: ENV["DEFAULT_COUNTRY_CODE"]) || Spree::Country.first
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/services/default_country.rb:13:73: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
    Spree::Country.cached_find_by(iso: ENV.fetch("DEFAULT_COUNTRY_CODE",
                                                                        ^
app/services/default_country.rb:13:101: C: [Corrected] Layout/LineLength: Line is too long. [102/100]
    Spree::Country.cached_find_by(iso: ENV.fetch("DEFAULT_COUNTRY_CODE", nil)) || Spree::Country.first
                                                                                                    ^^
app/services/default_country.rb:14:1: C: [Corrected] Layout/ArgumentAlignment: Align the arguments of a method call if they span more than one line.
nil)) || Spree::Country.first
^^^
spec/base_spec_helper.rb:51:49: C: [Corrected] Style/FetchEnvVar: Use ENV.fetch("SITE_URL") or ENV.fetch("SITE_URL", nil) instead of ENV["SITE_URL"].
ActionMailer::Base.default_url_options[:host] = ENV["SITE_URL"]
                                                ^^^^^^^^^^^^^^^
spec/controllers/spree/credit_cards_controller_spec.rb:8:20: C: [Corrected] Style/FetchEnvVar: Use ENV.fetch('STRIPE_SECRET_TEST_API_KEY') or ENV.fetch('STRIPE_SECRET_TEST_API_KEY', nil) instead of ENV['STRIPE_SECRET_TEST_API_KEY'].
    let(:secret) { ENV['STRIPE_SECRET_TEST_API_KEY'] }
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/models/order_balance_spec.rb:48:70: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
      expect(order_balance.display_amount).to eq(Spree::Money.new(20,
                                                                     ^
spec/models/order_balance_spec.rb:48:81: C: [Corrected] Style/FetchEnvVar: Use ENV.fetch('currency') or ENV.fetch('currency', nil) instead of ENV['currency'].
      expect(order_balance.display_amount).to eq(Spree::Money.new(20, currency: ENV['currency']))
                                                                                ^^^^^^^^^^^^^^^
spec/models/order_balance_spec.rb:48:101: C: [Corrected] Layout/LineLength: Line is too long. [108/100]
      expect(order_balance.display_amount).to eq(Spree::Money.new(20, currency: ENV.fetch('currency', nil)))
                                                                                                    ^^^^^^^^
spec/models/order_balance_spec.rb:49:1: C: [Corrected] Layout/ArgumentAlignment: Align the arguments of a method call if they span more than one line.
currency: ENV.fetch('currency', nil)))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/models/order_balance_spec.rb:49:98: C: [Corrected] Layout/TrailingWhitespace: Trailing whitespace detected.
                                                                  currency: ENV.fetch('currency',
                                                                                                 ^
spec/models/order_balance_spec.rb:49:101: C: [Corrected] Layout/LineLength: Line is too long. [104/100]
                                                                  currency: ENV.fetch('currency', nil)))
                                                                                                    ^^^^
spec/models/order_balance_spec.rb:50:1: C: [Corrected] Layout/ArgumentAlignment: Align the arguments of a method call if they span more than one line.
nil)))
^^^
spec/support/vcr_setup.rb:10:50: C: [Corrected] Style/FetchEnvVar: Use ENV.fetch('STRIPE_SECRET_TEST_API_KEY') or ENV.fetch('STRIPE_SECRET_TEST_API_KEY', nil) instead of ENV['STRIPE_SECRET_TEST_API_KEY'].
  config.filter_sensitive_data('<HIDDEN_KEY>') { ENV['STRIPE_SECRET_TEST_API_KEY'] }
                                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/vcr_setup.rb:11:55: C: [Corrected] Style/FetchEnvVar: Use ENV.fetch('STRIPE_CUSTOMER') or ENV.fetch('STRIPE_CUSTOMER', nil) instead of ENV['STRIPE_CUSTOMER'].
  config.filter_sensitive_data('<HIDDEN_CUSTOMER>') { ENV['STRIPE_CUSTOMER'] }
                                                      ^^^^^^^^^^^^^^^^^^^^^^

1483 files inspected, 18 offenses detected, 18 offenses corrected
2023-08-20 12:33:43 +09:00
Neal Chambers
fd795d8513 Safely autocorrect Style/BlockComments
Inspecting 1483 files
....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................C......................................................

Offenses:

spec/system/admin/tag_rules_spec.rb:209:1: C: [Corrected] Style/BlockComments: Do not use block comments.
=begin ...
^^^^^^
spec/system/admin/tag_rules_spec.rb:217:101: C: Layout/LineLength: Line is too long. [103/100]
      #       expect(default_fsm_tag_rule.preferred_matched_shipping_methods_visibility).to eq "hidden"
                                                                                                    ^^^
spec/system/admin/tag_rules_spec.rb:241:1: C: [Corrected] Layout/CommentIndentation: Incorrect indentation detected (column 0 instead of 6).
#       expect(foc_tag_rule.preferred_matched_order_cycles_visibility).to eq "hidden"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1483 files inspected, 3 offenses detected, 2 offenses corrected
2023-08-20 12:33:43 +09:00
Neal Chambers
06e217c527 Safely autocorrect Rails/WhereNot
Inspecting 1483 files
........................................................................................................................C..................................................................................................................C...........CC.C..........................................C......C..........C.........................C......................CC..........C........................................................................................................................C.......................................................................................................C........................................................C...........................................................................................................................................C......................................C.........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Offenses:

app/controllers/spree/admin/products_controller.rb:183:11: C: [Corrected] Rails/WhereNot: Use where.not(spree_variants: { import_date: nil }) instead of manually constructing negated SQL in where.
          where('spree_variants.import_date IS NOT NULL').
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/concerns/permalink_generator.rb:37:26: C: [Corrected] Rails/WhereNot: Use where.not(id: id) instead of manually constructing negated SQL in where.
      scope_with_deleted.where('id != ?', id)
                         ^^^^^^^^^^^^^^^^^^^^
app/models/concerns/permalink_generator.rb:37:40: C: [Corrected] Style/HashSyntax: Omit the hash value.
      scope_with_deleted.where.not(id: id)
                                       ^^
app/models/enterprise.rb:152:7: C: [Corrected] Rails/WhereNot: Use where.not(enterprises: { id: ready_enterprises }) instead of manually constructing negated SQL in where.
      where("enterprises.id NOT IN (?)", ready_enterprises)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:158:31: C: [Corrected] Rails/WhereNot: Use where.not(sells: 'none') instead of manually constructing negated SQL in where.
  scope :is_distributor, -> { where('sells != ?', 'none') }
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:479:17: C: [Corrected] Rails/WhereNot: Use where.not(id: id) instead of manually constructing negated SQL in where.
    dups = dups.where('id != ?', id) unless new_record?
                ^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:534:43: C: [Corrected] Rails/WhereNot: Use where.not(enterprises: { id: self }) instead of manually constructing negated SQL in where.
    enterprises = owner.owned_enterprises.where('enterprises.id != ?', self)
                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:583:7: C: [Corrected] Rails/WhereNot: Use where.not(enterprises: { id: id }) instead of manually constructing negated SQL in where.
      where('enterprises.id != ?', id).
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_fee.rb:40:24: C: [Corrected] Rails/WhereNot: Use where.not(spree_calculators: { type: PER_ORDER_CALCULATORS }) instead of manually constructing negated SQL in where.
    joins(:calculator).where('spree_calculators.type NOT IN (?)', PER_ORDER_CALCULATORS)
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_relationship.rb:78:19: C: [Corrected] Rails/WhereNot: Use where.not(name: perms) instead of manually constructing negated SQL in where.
      permissions.where('name NOT IN (?)', perms).destroy_all
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/product_import/inventory_reset_strategy.rb:27:16: C: [Corrected] Rails/WhereNot: Use where.not(id: excluded_items_ids) instead of manually constructing negated SQL in where.
      relation.where('id NOT IN (?)', excluded_items_ids)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/proxy_order.rb:19:25: C: [Corrected] Rails/WhereNot: Use where.not(proxy_orders: { canceled_at: nil }) instead of manually constructing negated SQL in where.
  scope :canceled, -> { where('proxy_orders.canceled_at IS NOT NULL') }
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/credit_card.rb:26:39: C: [Corrected] Rails/WhereNot: Use where.not(gateway_customer_profile_id: nil) instead of manually constructing negated SQL in where.
    scope :with_payment_profile, -> { where('gateway_customer_profile_id IS NOT NULL') }
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/product.rb:166:9: C: [Corrected] Rails/WhereNot: Use where.not(order_cycles: { id: nil }) instead of manually constructing negated SQL in where.
        where('order_cycles.id IS NOT NULL')
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/variant.rb:94:30: C: [Corrected] Rails/WhereNot: Use where.not(deleted_at: nil) instead of manually constructing negated SQL in where.
    scope :deleted, lambda { where('deleted_at IS NOT NULL') }
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/variant.rb:165:43: C: [Corrected] Rails/WhereNot: Use where.not(spree_prices: { amount: nil }) instead of manually constructing negated SQL in where.
                                          where('spree_prices.amount IS NOT NULL').
                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/zone.rb:141:19: C: [Corrected] Rails/WhereNot: Use where.not(id: id) instead of manually constructing negated SQL in where.
      Spree::Zone.where('id != ?', id).update_all(default_tax: false) if default_tax
                  ^^^^^^^^^^^^^^^^^^^^
app/models/spree/zone.rb:141:33: C: [Corrected] Style/HashSyntax: Omit the hash value.
      Spree::Zone.where.not(id: id).update_all(default_tax: false) if default_tax
                                ^^
app/models/variant_override.rb:32:7: C: [Corrected] Rails/WhereNot: Use where.not(variant_overrides: { import_date: nil }) instead of manually constructing negated SQL in where.
      where('variant_overrides.import_date IS NOT NULL').
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/services/cap_quantity.rb:45:22: C: [Corrected] Rails/WhereNot: Use where.not(variant_id: available_variants_for.select(&:id)) instead of manually constructing negated SQL in where.
    order.line_items.where('variant_id NOT IN (?)', available_variants_for.select(&:id))
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
engines/catalog/app/services/catalog/product_import/products_reset_strategy.rb:32:18: C: [Corrected] Rails/WhereNot: Use where.not(spree_variants: { id: excluded_items_ids }) instead of manually constructing negated SQL in where.
        relation.where('spree_variants.id NOT IN (?)', excluded_items_ids)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
engines/order_management/app/services/order_management/subscriptions/proxy_order_syncer.rb:78:18: C: [Corrected] Rails/WhereNot: Use where.not(order_cycle_id: order_cycle_ids) instead of manually constructing negated SQL in where.
        orphaned.where('order_cycle_id NOT IN (?)', order_cycle_ids)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/users_and_enterprises/base.rb:27:14: C: [Corrected] Rails/WhereNot: Use where.not(enterprises: { id: nil }) instead of manually constructing negated SQL in where.
            .where("enterprises.id IS NOT NULL")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/users_and_enterprises/base.rb:39:14: C: [Corrected] Rails/WhereNot: Use where.not(enterprise_id: nil) instead of manually constructing negated SQL in where.
            .where("enterprise_id IS NOT NULL")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/users_and_enterprises/base.rb:40:14: C: [Corrected] Rails/WhereNot: Use where.not(user_id: nil) instead of manually constructing negated SQL in where.
            .where("user_id IS NOT NULL")
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/tasks/data/anonymize_data.rake:50:16: C: [Corrected] Rails/WhereNot: Use where.not(user_id: nil) instead of manually constructing negated SQL in where.
      Customer.where("user_id IS NOT NULL")
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1483 files inspected, 26 offenses detected, 26 offenses corrected
2023-08-20 12:33:43 +09:00
Konrad
241239ac68 Merge pull request #11379 from dacook/respond_to-not_found
Respond to all formats for "not found" error
2023-08-18 18:47:09 +02:00
Konrad
0dc8996701 Merge pull request #11295 from Matt-Yorkley/scope-error
Remove product display_as cell
2023-08-18 18:16:16 +02:00
Konrad
df7d42a420 Merge pull request #11352 from abdellani/remove-dead-code-bulk-invoice
Remove dead code related to bulk invoice printing
2023-08-18 18:14:01 +02:00
Matt-Yorkley
2b9b79c828 Remove product display_as cell
This was attempting to reference the master variant, which is now gone. Fixes an Angular scope error.
2023-08-18 17:38:36 +02:00
Konrad
f3b09508ff Merge pull request #11347 from abdellani/fix-edit-order-button
fix cancel order button
2023-08-18 17:07:42 +02:00
Konrad
d8bc479a70 Merge pull request #11387 from jibees/10957-missing-translation-invalid-url
Admin, White Label: add translation for invalid URL in white label context
2023-08-18 15:59:39 +02:00
dependabot[bot]
fcb3a74b64 chore(deps): bump puma from 6.3.0 to 6.3.1
Bumps [puma](https://github.com/puma/puma) from 6.3.0 to 6.3.1.
- [Release notes](https://github.com/puma/puma/releases)
- [Changelog](https://github.com/puma/puma/blob/master/History.md)
- [Commits](https://github.com/puma/puma/compare/v6.3.0...v6.3.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-18 09:10:32 +00:00
Jean-Baptiste Bellet
2abfa623f0 Once products start loading, scroll higher, ie. just above filters
can see the loading spinner then
2023-08-18 10:20:10 +02:00
jibees
5395bc56f8 Merge pull request #11416 from jibees/11197-buu-no-results-page-and-number-of-results-tweaks
🚧 BUU: No results page and number of results tweaks
2023-08-18 10:14:09 +02:00
Jean-Baptiste Bellet
06fccd8618 Totally hide input above its container 2023-08-18 09:46:57 +02:00
Jean-Baptiste Bellet
47115a0daf Change default label for searched products 2023-08-18 09:46:57 +02:00
Jean-Baptiste Bellet
721baa4d3f Increase button size 2023-08-18 09:46:57 +02:00
Jean-Baptiste Bellet
117c373985 Add "remove-sign" icon before text in disruptive button 2023-08-18 09:46:57 +02:00
Jean-Baptiste Bellet
d27b2084ed Do not underline text when it's a button 2023-08-18 09:46:56 +02:00
Jean-Baptiste Bellet
e4479e7935 Increase button height when no result 2023-08-18 09:46:56 +02:00
Jean-Baptiste Bellet
f5e7738c78 Introduce relaxed, regular and condensed button for specify height 2023-08-18 09:46:56 +02:00
Jean-Baptiste Bellet
5de0d79ca2 Increase distance from search container to 136px
116px + 20px (gap) = 136px
2023-08-18 09:46:56 +02:00
Jean-Baptiste Bellet
4219d0aa08 Change font size and weight 2023-08-18 09:46:56 +02:00
Maikel Linke
0acdf5833f Update all locales with the latest Transifex translations 2023-08-18 15:54:00 +10:00
David Cook
01f0de2f4e Merge pull request #11405 from macanudo527/fix_rubocop_rails_errors
Fix rubocop rails errors
2023-08-18 11:54:17 +10:00
David Cook
7a04f63d62 Merge pull request #11407 from jibees/10878-buu-pagination-tweaks
🚧 BUU: Pagination tweaks
2023-08-18 09:25:55 +10:00
jibees
e82ff80582 Merge pull request #11420 from openfoodfoundation/dependabot/bundler/newrelic_rpm-9.4.1
chore(deps): bump newrelic_rpm from 9.4.0 to 9.4.1
2023-08-17 13:46:47 +02:00
dependabot[bot]
47ca35c38e chore(deps): bump newrelic_rpm from 9.4.0 to 9.4.1
Bumps [newrelic_rpm](https://github.com/newrelic/newrelic-ruby-agent) from 9.4.0 to 9.4.1.
- [Release notes](https://github.com/newrelic/newrelic-ruby-agent/releases)
- [Changelog](https://github.com/newrelic/newrelic-ruby-agent/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/newrelic/newrelic-ruby-agent/compare/9.4.0...9.4.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-17 09:28:40 +00:00
Neal Chambers
fe5288c015 Update .rubocop_todo.yml 2023-08-17 16:45:52 +09:00
Neal Chambers
3c9afcf360 Fix Rails/CompactBlank 2023-08-17 16:43:13 +09:00
Neal Chambers
871a8e6f2c Fix Rails/Blank 2023-08-17 16:42:46 +09:00
Neal Chambers
b78bbd2629 Fix Rails/ApplicationController 2023-08-17 16:42:41 +09:00
Jean-Baptiste Bellet
fa4dda9976 Finally, remove disabled rule that is unused
We only display active link
2023-08-17 09:26:10 +02:00
Jean-Baptiste Bellet
394e964b91 Specify for element that have href attr: the ones we want to hover 2023-08-17 09:26:10 +02:00
Jean-Baptiste Bellet
e7d36ed772 Let link have the cursor: pointer by default, and specify only for current 2023-08-17 09:26:10 +02:00
Jean-Baptiste Bellet
2405dfdaa3 Refine and adjust position of icon in button 2023-08-17 09:26:10 +02:00
Jean-Baptiste Bellet
1a8a4ee72b Change size of pagination
"it becomes extremely long for big catalogues"
2023-08-17 09:26:10 +02:00
Jean-Baptiste Bellet
66a106b1c9 hide pagination for single page catalogue
+ update specs then
2023-08-17 09:26:10 +02:00
Jean-Baptiste Bellet
3fb8726c6a Do not display arrows if they're disabled 2023-08-17 09:06:26 +02:00
Jean-Baptiste Bellet
b1ea77e611 Remove white background from dots 2023-08-17 09:06:26 +02:00
Jean-Baptiste Bellet
c252de87b6 Specify cursor in order to not be text 2023-08-17 09:06:26 +02:00
Jean-Baptiste Bellet
5fc4f7bdaf Design hover (like current) 2023-08-17 09:06:26 +02:00
Jean-Baptiste Bellet
9d8325c0d9 font weight to be 600 2023-08-17 09:06:26 +02:00
Jean-Baptiste Bellet
d914644c35 change not selected font color to $near-black, also for arrows 2023-08-17 09:06:26 +02:00
Jean-Baptiste Bellet
06af58e923 increase distance between arrows and numbers to be 36px 2023-08-17 09:06:26 +02:00
Jean-Baptiste Bellet
6e29dd95ef Increase distance between numbers to be 8px 2023-08-17 09:06:26 +02:00
Jean-Baptiste Bellet
a2da3c2f61 Better management of margin/gap between each button with flex display 2023-08-17 09:06:26 +02:00
Jean-Baptiste Bellet
9396e75806 Increase padding top and padding bottom 2023-08-17 09:06:26 +02:00
Maikel
5762492511 Merge pull request #11392 from dacook/release-template
Release template
2023-08-17 16:47:49 +10:00
Maikel
6377149e18 Merge pull request #11400 from jibees/buu-update/refactor-tests
🚧 BUU: refactor/improve testing
2023-08-17 16:32:00 +10:00
David Cook
a854dccf04 Simplify tag steps
Co-authored-by: Maikel <maikel@email.org.au>
2023-08-17 16:09:06 +10:00
Maikel
d0559d2a6c Merge pull request #11413 from openfoodfoundation/dependabot/bundler/newrelic_rpm-9.4.0
chore(deps): bump newrelic_rpm from 9.3.1 to 9.4.0
2023-08-17 15:36:28 +10:00
Maikel
27dcad205e Merge pull request #11337 from macanudo527/fix_rubocop_6
Fix autocorrect Rails Cops 2
2023-08-17 10:39:34 +10:00
jibees
132d2e792e Merge pull request #11406 from openfoodfoundation/dependabot/bundler/timecop-0.9.8
chore(deps-dev): bump timecop from 0.9.6 to 0.9.8
2023-08-16 17:07:56 +02:00
dependabot[bot]
21e38c424f chore(deps): bump newrelic_rpm from 9.3.1 to 9.4.0
Bumps [newrelic_rpm](https://github.com/newrelic/newrelic-ruby-agent) from 9.3.1 to 9.4.0.
- [Release notes](https://github.com/newrelic/newrelic-ruby-agent/releases)
- [Changelog](https://github.com/newrelic/newrelic-ruby-agent/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/newrelic/newrelic-ruby-agent/compare/9.3.1...9.4.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-16 14:41:10 +00:00
jibees
afe05f1932 Merge pull request #11414 from openfoodfoundation/dependabot/bundler/rails-i18n-7.0.8
chore(deps): bump rails-i18n from 7.0.7 to 7.0.8
2023-08-16 16:40:05 +02:00
dependabot[bot]
33d5e8436f chore(deps): bump rails-i18n from 7.0.7 to 7.0.8
Bumps [rails-i18n](https://github.com/svenfuchs/rails-i18n) from 7.0.7 to 7.0.8.
- [Changelog](https://github.com/svenfuchs/rails-i18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/svenfuchs/rails-i18n/compare/v7.0.7...v7.0.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-16 09:49:57 +00:00
jibees
33fc5bd409 Merge pull request #11409 from dacook/script-update
Don't show extra red messages when gems missing
2023-08-16 09:01:20 +02:00
David Cook
9bef8b74f8 Merge pull request #11401 from jibees/some-buu-design-updates
🚧 BUU: some design updates + one small code fix
2023-08-16 11:41:33 +10:00
Maikel
fd7b00ac7f Merge pull request #11323 from mkllnk/dfc-import-context
Use known, statically cached DFC context
2023-08-16 11:35:57 +10:00
David Cook
b49de7d49e Simplify spec
What if Zucchini didn't appear at all? Better to test that the two products appear on the same page, in the correct order.
2023-08-16 11:13:54 +10:00
David Cook
412dac7556 Don't show extra red messages when gems missing
When a gem is missing, it looks like a big ugly error. But we don't need to see this, because bundle install will run next and tell us which gems its installing.

Bundle check isn't actually necessary because bundle install will handle this, but for some reason it's 300ms slower. So I chose to keep 'check' to help keep this script nice and quick.
2023-08-16 09:56:24 +10:00
David Cook
b320a1d289 Create release tag early for greater clarity
This way, it's clearer in the repo what is going to be released, and we don't need to copy/paste commit IDs.

([skip ci] because this branch only touches .md file)
2023-08-15 21:47:32 +10:00
David Cook
1cd87c170b Use new staging deployment method 2023-08-15 21:35:12 +10:00
David Cook
8b9d483227 Add more detailed notes for current process 2023-08-15 21:35:10 +10:00
Matt-Yorkley
70ba027603 Merge pull request #11221 from Matt-Yorkley/product-shipping-category
[Product Refactor] Shipping Category
2023-08-15 11:12:56 +01:00
dependabot[bot]
cd5c7e8fc7 chore(deps-dev): bump timecop from 0.9.6 to 0.9.8
Bumps [timecop](https://github.com/travisjeffery/timecop) from 0.9.6 to 0.9.8.
- [Changelog](https://github.com/travisjeffery/timecop/blob/master/History.md)
- [Commits](https://github.com/travisjeffery/timecop/compare/v0.9.6...v0.9.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-15 09:18:16 +00:00
David Cook
f4a6bec25d Code fix
Cache result.
2023-08-15 08:36:50 +02:00
Jean-Baptiste Bellet
200550588a Be as clause as possible from native <select />
Still need to wrap/ellipsis selected item...
2023-08-15 08:36:50 +02:00
Jean-Baptiste Bellet
0c11ea5868 Use tom-select to have a designed dropdown
Not sure this is the best solution, since it's not exactly the right usage of tom-select
2023-08-15 08:36:50 +02:00
Jean-Baptiste Bellet
6fe069608c Re-adjust tom-select to match admin v3 style 2023-08-15 08:36:50 +02:00
Jean-Baptiste Bellet
223d350b43 Use grid instead of flex in order to be more fixed and less flexible ;) 2023-08-15 08:36:50 +02:00
Jean-Baptiste Bellet
2814368670 Adjust inside container to content without any padding 2023-08-15 08:36:50 +02:00
David Cook
1155bd42ea Reflex test to reveal collation sorting varies on different OS...
https://dba.stackexchange.com/questions/106964/why-is-my-postgresql-order-by-case-insensitive

Uncommented, the spec fails on macOS (BSD).. but succeeds in Ubuntu (Linux). Weird.
2023-08-15 08:36:22 +02:00
David Cook
0f086df12b Setup StimulusReflex testing [add gem]
Surprisingly, the StimulusReflex framework [doesn't have many resources for testing](https://docs.stimulusreflex.com/appendices/testing.html), but thankfully someone's made a gem.
2023-08-15 08:36:22 +02:00
David Cook
e816228959 Sort products by name in ascending order
The order is specified above in fetch_products. I'm guessing this line was unintentional?

Original requirment doesn't say ascending but I think it's safe to assume (issue#10694).
2023-08-15 08:36:22 +02:00
David Cook
6dbfb36e52 Spec: use url helpers
To be consistent with other specs.
2023-08-15 08:36:22 +02:00
David Cook
9a3820db4f Tidy up spec
Although 'describe' and 'context' are the same simple constructs to label groups of examples, to humans they mean:
 * Describe a particular domain of functionality
 * Context means a different environment, IE something has been set up differently (generally with before and/or let blocks)

Also the default 'before' is :each, so we don't need to specify it.
2023-08-15 08:36:22 +02:00
David Cook
757ba27908 Optimise spec: only create objects when needed
Moving the 'clear filters' and 'no results' tests up into the first context.
2023-08-15 08:36:22 +02:00
David Cook
2a4d5af552 Remove redundant test
This is already covered in the following test.
2023-08-15 08:36:21 +02:00
David Cook
8949f1dc2e Convert route to resource
I don't know why the route helper now has "index" in the name.
2023-08-15 08:36:21 +02:00
jibees
364ae5c0c6 Merge pull request #11404 from rioug/11402-invoice-data-generator-fix-flacky-test
Invoice data generator, fix flaky test
2023-08-15 08:34:53 +02:00
Gaetan Craig-Riou
5a2155aeb7 Use the same sorting when choosing a line item to update
The presenter uses order.sorted_line_items, so use the same method
when picking up the line item to update.
2023-08-15 11:33:02 +10:00
David Cook
2196cd5be8 Merge pull request #11381 from openfoodfoundation/release_v4.4.7
Update translations for release v4.4.7
2023-08-15 10:21:34 +10:00
David Cook
8b666c67d6 Fix typo
🤦 Always, always preview changes before committing.
2023-08-15 09:54:42 +10:00
David Cook
54328d7b98 Mention browser limitations 2023-08-15 09:53:39 +10:00
Matt-Yorkley
75f246109f Fix assignment of default shipping category in variant new/edit pages 2023-08-14 21:02:48 +01:00
Matt-Yorkley
811a8cde7f Use optional: false instead of validates: presence 2023-08-14 21:02:48 +01:00
Matt-Yorkley
97d9aadb69 Update specs 2023-08-14 21:02:48 +01:00
Matt-Yorkley
dea2adc3d6 Update EntryValidator 2023-08-14 21:02:48 +01:00
Matt-Yorkley
42d04b6581 Update OrderAvailableShippingMethods service 2023-08-14 21:02:47 +01:00
Matt-Yorkley
a712eac333 Update shipping_category in /lib and /engines 2023-08-14 21:02:47 +01:00
Matt-Yorkley
5e0e60dfd6 Update reports 2023-08-14 21:02:47 +01:00
Matt-Yorkley
724c08c94d Set default shipping_category if absent 2023-08-14 21:02:47 +01:00
Matt-Yorkley
c18c525d9f Save shipping category selection to new variant when creating a new product 2023-08-14 21:02:47 +01:00
Matt-Yorkley
e3c488306c Migrate data for shipping_category_id 2023-08-14 21:02:47 +01:00
Matt-Yorkley
eefc356472 Update shipping_category usage in admin pages 2023-08-14 21:02:47 +01:00
Matt-Yorkley
0c634cf04f Update shipping_category permitted attributes 2023-08-14 21:02:47 +01:00
Matt-Yorkley
57d6fa006c Update shipping_category association in models 2023-08-14 21:02:47 +01:00
Matt-Yorkley
e2caebc374 Add shipping_category to variants table 2023-08-14 21:00:02 +01:00
Neal Chambers
ec49065739 Reword image_exists? to use Rails.public_path 2023-08-14 17:29:11 +09:00
Neal Chambers
e5740a82bd Safely autocorrect Rails/StripHeredoc
Inspecting 1484 files
........................................................................................................................................................................................................................................................C.........................................................................................................................................CC...........................................................................................................................................................................................................................................................................................................................................................................................C.......................................................................C....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Offenses:

app/models/content_configuration.rb:74:48: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
  preference :footer_links_md, :text, default: <<-EOS.strip_heredoc
                                               ^^^^^^^^^^^^^^^^^^^^
app/queries/customers_with_balance.rb:23:5: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
    <<-SQL.strip_heredoc
    ^^^^^^^^^^^^^^^^^^^^
app/queries/outstanding_balance.rb:32:5: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
    <<-SQL.strip_heredoc
    ^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:71:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:84:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:96:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:109:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:119:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:135:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:151:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:161:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:168:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:182:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:192:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:208:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:218:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:228:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:235:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:253:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:274:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:289:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:310:13: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
            <<-JOIN_STRING.strip_heredoc
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/reporting/reports/enterprise_fee_summary/scope.rb:369:15: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
              <<-JOIN_STRING.strip_heredoc
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/tasks/data/truncate_data.rake:35:17: C: [Corrected] Rails/StripHeredoc: Use squiggly heredoc (<<~) instead of strip_heredoc.
      message = <<-MSG.strip_heredoc
                ^^^^^^^^^^^^^^^^^^^^
lib/tasks/data/truncate_data.rake:36:1: C: [Corrected] Layout/HeredocIndentation: Use 2 spaces for indentation in a heredoc.
      \n ...
^^^^^^^^

1484 files inspected, 25 offenses detected, 25 offenses corrected
2023-08-14 17:29:11 +09:00
Neal Chambers
94f1b89a9f Safely autocorrect Rails/RootPublicPath
Inspecting 1484 files
.............................................................................................C........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................C.........................................................................................C..........C..........................................................................................................................................................................................................................................................................................................C....................................................................................................................................................................C...................C.............................................................C.C.......C....................

Offenses:

app/controllers/concerns/request_timeouts.rb:19:22: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
               file: Rails.root.join("public/500.html"),
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/spree/core/controller_helpers/common.rb:45:30: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
                       file: Rails.root.join("public/404.html"),
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/controllers/api/v0/product_images_controller_spec.rb:13:22: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
    let(:pdf_path) { Rails.root.join("public/Terms-of-service.pdf") }
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/controllers/api/v0/terms_and_conditions_controller_spec.rb:15:31: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
      let(:terms_file_path) { Rails.root.join("public/Terms-of-service.pdf") }
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/models/terms_of_service_file_spec.rb:6:25: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
  let(:pdf) { File.open(Rails.root.join("public/Terms-of-service.pdf")) }
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/bulk_product_update_spec.rb:907:37: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
        attach_file 'image-upload', Rails.root.join("public/500.jpg"), visible: false
                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/enterprises/terms_and_conditions_spec.rb:27:30: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
      let(:original_terms) { Rails.root.join("public/Terms-of-service.pdf") }
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/enterprises/terms_and_conditions_spec.rb:28:29: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
      let(:updated_terms) { Rails.root.join("public/Terms-of-ServiceUK.pdf") }
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/consumer/shopping/checkout_spec.rb:94:9: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
        Rails.root.join("public/Terms-of-service.pdf"),
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/consumer/shopping/embedded_groups_spec.rb:18:9: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
        Rails.root.join("public/embedded-group-preview.html")
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/consumer/shopping/embedded_groups_spec.rb:26:9: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
        Rails.root.join("public/embedded-group-preview.html")
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/consumer/split_checkout_spec.rb:986:35: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
        let(:system_terms_path) { Rails.root.join("public/Terms-of-service.pdf") }
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/consumer/split_checkout_spec.rb:987:33: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
        let(:shop_terms_path) { Rails.root.join("public/Terms-of-ServiceUK.pdf") }
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1484 files inspected, 13 offenses detected, 13 offenses corrected
2023-08-14 17:29:11 +09:00
Neal Chambers
b60fd6b572 Safely autocorrect Rails/I18nLazyLookup
Inspecting 1484 files
.......................................C....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Offenses:

app/controllers/admin/proxy_orders_controller.rb:16:35: C: [Corrected] Rails/I18nLazyLookup: Use "lazy" lookup for the text used in controllers.
        render json: { errors: [t('admin.proxy_orders.cancel.could_not_cancel_the_order')] },
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/controllers/admin/proxy_orders_controller.rb:25:35: C: [Corrected] Rails/I18nLazyLookup: Use "lazy" lookup for the text used in controllers.
        render json: { errors: [t('admin.proxy_orders.resume.could_not_resume_the_order')] },
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1484 files inspected, 2 offenses detected, 2 offenses corrected
2023-08-14 17:29:11 +09:00
Neal Chambers
aaf2181768 Safely autocorrect Rails/FilePath
Inspecting 1484 files
.............................................................................................................................................................................................................................................................................................................C.............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................C....................C.....................................................................................................................................................................................................................................................................C.........................................................................................................................................................................................................C...........................................................................................................................................................

Offenses:

app/models/product_import/product_importer.rb:290:35: C: [Corrected] Rails/FilePath: Prefer Rails.root.join('path/to').
      return unless @file.path == Rails.root.join('tmp', 'product_import').to_s
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/tasks/karma.rake:42:5: C: [Corrected] Rails/FilePath: Prefer Rails.root.join('path/to').
    "#{Rails.root.join(I18n::JS::DEFAULT_EXPORT_DIR_PATH)}/translations.js"
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/tasks/karma.rake:42:5: C: [Correctable] Style/RedundantInterpolation: Prefer to_s over string interpolation.
    "#{Rails.root.join(I18n::JS::DEFAULT_EXPORT_DIR_PATH, 'translations.js')}"
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lib/tasks/karma.rake:42:59: C: [Corrected] Style/StringLiteralsInInterpolation: Prefer single-quoted strings inside interpolations.
    "#{Rails.root.join(I18n::JS::DEFAULT_EXPORT_DIR_PATH, "translations.js")}"
                                                          ^^^^^^^^^^^^^^^^^
spec/base_spec_helper.rb:58:25: C: [Corrected] Rails/FilePath: Prefer Rails.root.join('path/to').
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/base_spec_helper.rb:58:25: C: [Correctable] Style/RedundantInterpolation: Prefer to_s over string interpolation.
  config.fixture_path = "#{Rails.root.join('spec/fixtures')}"
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/base_spec_helper.rb:58:44: C: [Corrected] Style/StringLiteralsInInterpolation: Prefer single-quoted strings inside interpolations.
  config.fixture_path = "#{Rails.root.join("spec/fixtures")}"
                                           ^^^^^^^^^^^^^^^
spec/models/content_configuration_spec.rb:15:19: C: [Corrected] Rails/FilePath: Prefer Rails.root.join('path/to').to_s.
      File.exist?(File.join(Rails.root, 'public', default_url))
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/models/content_configuration_spec.rb:15:19: C: [Corrected] Rails/RootPublicPath: Use Rails.public_path.
      File.exist?(Rails.root.join('public', default_url).to_s)
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/support/downloads_helper.rb:7:5: C: [Corrected] Rails/FilePath: Prefer Rails.root.join('path/to').
    Rails.root.join("tmp", "capybara")
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

1484 files inspected, 10 offenses detected, 8 offenses corrected, 2 more offenses can be corrected with `rubocop -A`
2023-08-14 17:29:11 +09:00
Neal Chambers
c36728625d Regenerate Rubocop's TODO file 2023-08-14 17:29:08 +09:00
Maikel Linke
91e4fb18ed Use input labels in Voucher system spec
It's more robust, and closer to what the user sees and does. It's also
verifying that the labels are correctly connected to the inputs.
2023-08-14 12:46:13 +10:00
Maikel Linke
ba53f31309 Use new hash syntax in Voucher spec 2023-08-14 12:40:54 +10:00
Maikel Linke
160cdc7f8e Clarify Voucher request spec not a controller spec 2023-08-14 12:25:56 +10:00
Maikel Linke
4b0e910dff Simplify default values in Voucher form 2023-08-14 12:23:00 +10:00
Maikel Linke
efe2dfff8e Let Rails handle Voucher type building 2023-08-14 11:51:34 +10:00
Maikel Linke
4d5e1ffb3b Simplify VouchersController with single param name
The Voucher form now deals with a generic Voucher instead of a subclass
which makes the naming easier and is less confusing when changing types.
2023-08-14 11:39:59 +10:00
Mohamed ABDELLANI
8370d7ce83 Update app/views/spree/admin/shared/_order_links.html.haml
Co-authored-by: jibees <jb.bellet@gmail.com>
2023-08-13 13:12:56 +01:00
Dusan Orlovic
b360e2ffaa Add Google map region parameter 2023-08-13 08:56:04 +02:00
Konrad
99daab07b7 Merge pull request #11297 from mkllnk/require-belongs-to--part2
Require belongs_to associations by default
2023-08-12 17:09:03 +02:00
Matt-Yorkley
613802f477 Update stage.yml 2023-08-11 13:50:34 +01:00
Matt-Yorkley
99907dc3a6 Update stage.yml 2023-08-11 13:48:31 +01:00
Matt-Yorkley
7084d0cb40 Update stage.yml 2023-08-11 13:44:38 +01:00
Matt-Yorkley
e33b0af6fe Update stage.yml 2023-08-11 13:42:14 +01:00
Matt-Yorkley
6dfeecead1 Update stage.yml 2023-08-11 13:30:35 +01:00
Rachel Arnould
5afe45d922 Merge pull request #11382 from jibees/11273-buu-remove-new_products_page-feature-toggle
🔧 Remove `new_products_page` and all associated controllers/components/...
2023-08-11 11:43:49 +02:00
David Cook
5a96f285c1 Update release title 2023-08-11 16:24:11 +10:00
David Cook
1a58914e43 Categories release notes by dependencies label
https://docs.github.com/en/repositories/releasing-projects-on-github/automatically-generated-release-notes
2023-08-11 16:13:22 +10:00
Gaetan Craig-Riou
06f986ff52 Allow for creating a voucher with either flat or percentage rate
In the scenario when you get an error when trying to create a
percentage voucher, on the subsequent try we would be dealing with
a "percentage rate voucher". The code now handle any type of voucher
2023-08-11 16:09:48 +10:00
Gaetan Craig-Riou
61e6d55872 Merge pull request #10821 from rioug/10727-vouchers-percentage-rate
[Vouchers] Percentage rate
2023-08-11 16:06:09 +10:00
Gaetan Craig-Riou
a2def2424c Add a comment around the use of safe_constantize
It triggers a Brakeman error that can be safely ignored
2023-08-11 15:41:45 +10:00
Gaetan Craig-Riou
9c9a6234e1 Per review, clean up voucher specs
Add explicit 'order.item_total' to make specs more readable
2023-08-11 15:41:45 +10:00
Gaetan Craig-Riou
054eac0822 Use a better describe
Co-authored-by: David Cook <david@redcliffs.net>
2023-08-11 15:41:45 +10:00
Gaetan Craig-Riou
e6b53c0a42 Per review , Simplify creation of Voucher
We now check against known type to instanciate the correct voucher
instead of using a case
2023-08-11 15:41:45 +10:00
Gaetan Craig-Riou
3f63cfbc27 Fix Rubocop warning 2023-08-11 15:41:45 +10:00
Gaetan Craig-Riou
e8b374d0f2 Remove left over comment 2023-08-11 15:41:45 +10:00
Gaetan Craig-Riou
2828bd098d Refactor VoucherAdjustment service
We are taking advantage of having a FlatRate and a PercentageRate
model to simplify the code a little
2023-08-11 15:41:34 +10:00
Gaetan Craig-Riou
29a38467d2 Fix admin pages to work with refactored vouchers 2023-08-11 14:54:23 +10:00
Gaetan Craig-Riou
46e04ca7ee Refactor voucher: 3 percentage rate voucher 2023-08-11 14:54:23 +10:00
Gaetan Craig-Riou
def594ab81 Refactor voucher: 2 FlatRate voucher 2023-08-11 14:54:23 +10:00
Gaetan Craig-Riou
204f3933d0 Refactor voucher: 1 base voucher class
Refactor voucher to use a single table inheritance. It will simplify the
code and remove a bunch of conditional
2023-08-11 14:54:23 +10:00
Gaetan Craig-Riou
959e2308dd Add system specs for percentage based voucher
Similar to tax included in price scenario, adds a test for percentage
based voucher to check the adjustments are recalculated when needed.
Plus fix tax incluced in price specs to use new factory
2023-08-11 14:51:36 +10:00
Gaetan Craig-Riou
70bd714369 Finish calculation for percentage voucher
Add calculation when tax is not included in price
2023-08-11 14:51:36 +10:00
Gaetan Craig-Riou
cdb33aa0d0 Add calculation for percentage voucher
It include calculation for order with taxes included in the price
2023-08-11 14:30:48 +10:00
David Cook
e536393f02 Merge pull request #11389 from mkllnk/session_store
Remove ignored session store config
2023-08-11 14:27:44 +10:00
Gaetan Craig-Riou
cc9069e9c6 Add voucher type to admin screen
Plus specs
2023-08-11 14:19:26 +10:00
Gaetan Craig-Riou
619285ad4a Add voucher_type to voucher
And update related specs
voucher_type doesn't do anything for now.
2023-08-11 14:19:25 +10:00
Gaetan Craig-Riou
1be8daaf86 Add specs to cover re calculation
It is important that the calculated voucher adjustments don't change
if they are recalculated and it is equally important that they are
updated if the order has changed
2023-08-11 14:19:25 +10:00
David Cook
6ee6ad2b86 [fixup] Remove unnecessary template name
This was left over after trying different things to get this working.
2023-08-11 14:14:32 +10:00
Maikel
fc8e39987a Merge pull request #11385 from openfoodfoundation/dependabot/bundler/aws-sdk-s3-1.132.1
chore(deps): bump aws-sdk-s3 from 1.132.0 to 1.132.1
2023-08-11 11:39:14 +10:00
Maikel Linke
7fe74e811e Remove ignored session store config
We set the session store in an initializer and therefore the development
config was overridden without having any effect.
2023-08-11 10:27:37 +10:00
Maikel Linke
a34a351cee Stabilise flaky spec with deterministic row order 2023-08-11 10:14:47 +10:00
Maikel
146b09dc57 Spec EnterpriseFee tax_category association
Co-authored-by: David Cook <david@redcliffs.net>
2023-08-11 10:14:47 +10:00
Maikel Linke
efbf1d6b8f Stabilise flaky assertion on PDF text
The PDF reader can't always place text elements in the right place. So
something that should be in one line can be in multiple lines and those
lines can be in a different order. I'm asserting the moving parts
separately as done in other places of this spec.
2023-08-11 10:14:47 +10:00
Maikel Linke
1b6eeb0928 Reduce line length of PaymentMethod class
Rubocop was complaining. So I found code that could be simplified and
specced it before refactoring.
2023-08-11 10:14:47 +10:00
Maikel Linke
faeb8ae8f8 Fix Exchange clone tagging
The validation of ActsAsTaggableOn::Taggable failed when trying to copy
tag ids during cloning. But I found that it's totally unnecessary
because `Exchange.dup` copies the `tag_list` attribute already and it
gets saved correctly. There's an existing spec for this.
2023-08-11 10:14:47 +10:00
Maikel Linke
4a13576f78 Remove now superfluous belongs_to default declaration 2023-08-11 10:14:47 +10:00
Maikel Linke
e6c679cb34 Apply belongs_to_required_by_default to all models
Unless they state otherwise.

The new standard also changes the default behaviour of the Shoulda
matcher in Rspec. It now defaults to asserting that an association is
required. That needed some spec updates.

In one case, Spree::Product, I also had to update the model because the
presence validation was somehow not recognised by the Shoulda matcher.
The error message may change slightly but the outcome should be the
same.
2023-08-11 10:14:47 +10:00
Maikel Linke
8ef6966891 Declare old belongs_to default on remaining models
It would take ages to go through all files now and assess all belongs_to
associations. So I just declare the old default and then we can move on
and apply the new default for the application while these classes still
use the old one. All new models will then use the new default which is
the goal of this excercise and we can refactor old classes when we touch
them anyway.
2023-08-11 10:14:43 +10:00
Maikel Linke
252f809463 Require CustomTab.belongs_to by default 2023-08-11 10:14:15 +10:00
Maikel Linke
070d1e722e Require EnterpriseRole.belongs_to by default 2023-08-11 10:14:14 +10:00
Maikel Linke
4dd2955400 Require EnterpriseRelationshipPermission.belongs_to by default
I had to change some specs to keep them simple but I don't think
anything is broken. In one case, it would have needed a lot more setup
to make the spec work. But in production, the permissions are never used
with ModelSet, for example.
2023-08-11 10:13:48 +10:00
Maikel Linke
cb494b84f2 Require EnterpriseRelationship.belongs_to by default 2023-08-11 10:13:29 +10:00
Maikel Linke
4b630f187b Require EnterpriseGroup.belongs_to by default 2023-08-11 10:13:10 +10:00
Maikel Linke
13b2f37884 Require EnterpriseFee.belongs_to by default 2023-08-11 10:13:09 +10:00
Maikel Linke
87ccfc94ef Require Enterprise.belongs_to by default
And remove a duplicate spec.
2023-08-11 10:13:09 +10:00
Konrad
60212f92c3 Merge pull request #11270 from rioug/9553-removing-cutomer-tag-when-search-for-tag
Fix removing customer tag when using search bar for said tag
2023-08-11 00:11:55 +02:00
Konrad
c3414143e6 Merge pull request #11222 from Matt-Yorkley/checkout-controller
Reduce controller size
2023-08-10 23:28:57 +02:00
Konrad
f59e681826 Merge pull request #11259 from cillian/single-line-voucher-code
Don't allow multi-line voucher codes
2023-08-10 23:09:55 +02:00
Jean-Baptiste Bellet
5b4b37032c Add translation for invalid URL in white label context 2023-08-10 15:22:35 +02:00
Matt-Yorkley
df077caafa Merge pull request #11375 from Matt-Yorkley/drop-unused-tables
Drop unused tables
2023-08-10 12:28:14 +01:00
Matt-Yorkley
f19d66f4d6 Drop unused tables 2023-08-10 12:27:31 +01:00
Matt-Yorkley
688b411e97 Merge pull request #11374 from Matt-Yorkley/drop-variant-master-column
Drop :is_master column from variants table
2023-08-10 12:25:59 +01:00
Matt-Yorkley
b82f368bec Drop :is_master column from variants table 2023-08-10 12:25:18 +01:00
Matt-Yorkley
128d5c29bd Merge pull request #11373 from Matt-Yorkley/drop-options-tables
Drop option_types and option_values tables
2023-08-10 12:21:39 +01:00
jibees
95612a8cb6 Merge pull request #11384 from openfoodfoundation/dependabot/bundler/rails-7.0.7
chore(deps): bump rails from 7.0.6 to 7.0.7
2023-08-10 12:13:07 +02:00
dependabot[bot]
4bbd9e9d49 chore(deps): bump aws-sdk-s3 from 1.132.0 to 1.132.1
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.132.0 to 1.132.1.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-10 09:55:40 +00:00
dependabot[bot]
f08a7ea254 chore(deps): bump rails from 7.0.6 to 7.0.7
Bumps [rails](https://github.com/rails/rails) from 7.0.6 to 7.0.7.
- [Release notes](https://github.com/rails/rails/releases)
- [Commits](https://github.com/rails/rails/compare/v7.0.6...v7.0.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-10 09:53:38 +00:00
Jean-Baptiste Bellet
3b68674896 Remove new_products_page and all associated controller/components/
new_products_page` is dead, long live `admin_style_v3` !
2023-08-10 10:02:45 +02:00
jibees
f58fedfc86 Merge pull request #11376 from mkllnk/flaky-voucher-spec
Stabilise flaky checkout spec with voucher
2023-08-10 09:10:59 +02:00
David Cook
b58d15b5ed Update all locales with the latest Transifex translations 2023-08-10 16:54:26 +10:00
David Cook
f64a24a5bb Respond to all formats with html 2023-08-10 16:14:08 +10:00
David Cook
c191158a97 Use the newer syntax 2023-08-10 14:52:04 +10:00
Matt-Yorkley
5c0329ce17 Drop option_types and option_values tables 2023-08-10 11:52:10 +10:00
Maikel
8db8d6de8d Merge pull request #11372 from Matt-Yorkley/remove-variant-position
Remove unused variant :position attribute
2023-08-10 11:48:55 +10:00
Maikel
507803c2dc Merge pull request #11371 from jibees/8443-missing-translation-passwords-not-matching-or-too-short
Account creation: translate some messages around password creation
2023-08-10 11:40:56 +10:00
Maikel Linke
04bba2adf1 Stabilise flaky checkout spec with voucher
While applying a voucher the spec tried to proceed the checkout before
the voucher update completed rendering. It failed when the machine was
slow.

With rspec-slow-repeate I got 100% fail rate before and 100% pass after
this change.
2023-08-10 10:05:01 +10:00
Maikel
926c8aed94 Merge pull request #11354 from abdellani/fix-rename-invoice-generate-update-button
rename 'new invoice' button to 'create or update invoice'
2023-08-10 09:59:11 +10:00
Mohamed ABDELLANI
620dd70dd7 rename 'new invoice' button to 'create or update invoice' 2023-08-10 09:35:13 +10:00
Matt-Yorkley
a33b6e0ec9 Update variant sorting 2023-08-09 18:30:56 +01:00
Matt-Yorkley
e65efe0f85 Remove unused variant :position attribute 2023-08-09 18:24:46 +01:00
Rachel Arnould
4505beff98 Merge pull request #11327 from bouaik/fix-display-invoice-tab-for-completed-resumed-canceled-only
Fix display invoice tab for completed, resumed and canceled orders only
2023-08-09 18:37:02 +02:00
Jean-Baptiste Bellet
1f5dc1f864 Add ActiveRecords messages for translation in account creation 2023-08-09 16:58:08 +02:00
Rachel Arnould
2b108dfeee Merge pull request #11116 from abdellani/fix-show-date-only-on-invoices-list
render date without time on invoices list
2023-08-09 14:33:40 +02:00
jibees
249dea56f3 Merge pull request #11366 from openfoodfoundation/dependabot/bundler/rubocop-1.56.0
chore(deps-dev): bump rubocop from 1.55.1 to 1.56.0
2023-08-09 11:35:25 +02:00
dependabot[bot]
467a63cf12 chore(deps-dev): bump rubocop from 1.55.1 to 1.56.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.55.1 to 1.56.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.55.1...v1.56.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-09 09:20:52 +00:00
Konrad
89d8fa0306 Merge pull request #11346 from Matt-Yorkley/remove-multiple-taxons
[Product Refactor] Remove multiple taxons
2023-08-09 11:19:11 +02:00
Maikel
655fdf3fff Merge pull request #11353 from abdellani/remove-duplicated-keys-in-en-yml
Remove duplicated keys in en yml
2023-08-09 13:42:01 +10:00
Maikel
d149f71199 Merge pull request #11365 from dacook/setup-reduce-output
Setup script tweaks
2023-08-09 11:45:47 +10:00
Maikel
b50fa216eb Merge pull request #11117 from rioug/10857-voucher-error-moving-between-summary-and-cart-take2
[vouchers] error moving between summary and cart pages
2023-08-09 11:14:52 +10:00
David Cook
91c874737a Combine rake tasks to save time
The log:clear task seems to take quite a bit of time. At least we can speed up a bit by only booting up Rails once.

I'm more likely to run the script if it's quick ;)
2023-08-09 10:28:41 +10:00
David Cook
9d79c7cda7 Reduce bundler install output
bundle install always shows a very long list of all gems. But we really only want to know about the new gems being installed. Thankfully there's an option for that.
2023-08-09 10:26:11 +10:00
Matt-Yorkley
6fee1d2dde Use dependent: :restrict_with_error on Taxon/Product association 2023-08-08 11:36:31 +01:00
David Cook
1706b8b4bc fixup: Drop spree_products_taxons join table
Make it reversible for dev or staging.
2023-08-08 11:36:31 +01:00
David Cook
a9ca07f4fb fixup Update specs
Delete empty describe block
2023-08-08 11:36:31 +01:00
Matt-Yorkley
321047d663 Update specs 2023-08-08 11:36:31 +01:00
Matt-Yorkley
3d83ca01f7 Drop spree_products_taxons join table 2023-08-08 11:36:31 +01:00
Matt-Yorkley
3655f3019d Update products and inventory report 2023-08-08 11:36:31 +01:00
Matt-Yorkley
38d9f4f1da Update product v3 table 2023-08-08 11:36:31 +01:00
Matt-Yorkley
e4a49f5d02 Update product duplication 2023-08-08 11:36:31 +01:00
Matt-Yorkley
820f9530b2 Update product serializer 2023-08-08 11:36:31 +01:00
Matt-Yorkley
8d01e1f024 Update taxon specs 2023-08-08 11:36:31 +01:00
Matt-Yorkley
33d40ed750 Update association 2023-08-08 11:36:31 +01:00
Matt-Yorkley
cffd7073e2 Delete unused method 2023-08-08 11:36:31 +01:00
Matt-Yorkley
3898af2c37 Update factories and tests 2023-08-08 11:36:31 +01:00
Matt-Yorkley
a93809b75f Remove associated abilities 2023-08-08 11:36:31 +01:00
Matt-Yorkley
a69ab2ef71 Remove multiple taxons on products functionality 2023-08-08 11:36:31 +01:00
Mohamed ABDELLANI
982f30399f merge :errors values under one key 2023-08-08 10:34:11 +01:00
Mohamed ABDELLANI
024a01ba94 remove duplicated keys on en.yml 2023-08-08 10:34:05 +01:00
Mohamed ABDELLANI
70b61eb481 remove bulk invoice service 2023-08-08 08:41:33 +01:00
Mohamed ABDELLANI
fc01ffc509 remove InvoicesController#create 2023-08-08 08:38:32 +01:00
Gaetan Craig-Riou
fe6075319e Merge pull request #11344 from openfoodfoundation/dependabot/bundler/mime-types-3.5.0
chore(deps): bump mime-types from 3.4.1 to 3.5.0
2023-08-08 16:43:47 +10:00
Gaetan Craig-Riou
bb375ccee5 Merge pull request #11343 from openfoodfoundation/dependabot/npm_and_yarn/stimulus-3.2.2
chore(deps): bump stimulus from 3.2.1 to 3.2.2
2023-08-08 16:41:45 +10:00
Mohamed ABDELLANI
c185a47592 render the confirm model on the same component that includes the action on the order. 2023-08-08 07:32:20 +01:00
Gaetan Craig-Riou
6f10907555 Fix rubocop warnings 2023-08-08 15:37:05 +10:00
Gaetan Craig-Riou
a64023c3df Apply review suggestion, simplify code slightly 2023-08-08 15:29:23 +10:00
Gaetan Craig-Riou
4e468c81f9 Handle updating customer attribute when directive is destroyed
Handle any customer attribute not just tags
2023-08-08 15:29:22 +10:00
Gaetan Craig-Riou
41dbad629b Add system spec to cover deleting data when filtering
covers tag scenario and code scenario
2023-08-08 15:29:22 +10:00
Gaetan Craig-Riou
f96bd51344 Rework form to allow displaying the save bar when no result
When filtering by a tag, and then removing the tag on the filtered
customers, it let us show the save bar once the last customer has been
removed from the filtered list.
2023-08-08 15:28:13 +10:00
Gaetan Craig-Riou
dba8809057 Handle deleting tag when directive destroyed 2023-08-08 15:28:13 +10:00
dependabot[bot]
df76710ae8 chore(deps): bump mime-types from 3.4.1 to 3.5.0
Bumps [mime-types](https://github.com/mime-types/ruby-mime-types) from 3.4.1 to 3.5.0.
- [Changelog](https://github.com/mime-types/ruby-mime-types/blob/main/History.md)
- [Commits](https://github.com/mime-types/ruby-mime-types/compare/v3.4.1...v3.5.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-07 09:56:54 +00:00
dependabot[bot]
1af30bdff4 chore(deps): bump stimulus from 3.2.1 to 3.2.2
Bumps [stimulus](https://github.com/stimulusjs/stimulus) from 3.2.1 to 3.2.2.
- [Release notes](https://github.com/stimulusjs/stimulus/releases)
- [Changelog](https://github.com/hotwired/stimulus/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stimulusjs/stimulus/compare/v3.2.1...v3.2.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-07 09:52:05 +00:00
Gaetan Craig-Riou
b731e8319b Merge pull request #11339 from openfoodfoundation/dependabot/npm_and_yarn/js-big-decimal-2.0.4
chore(deps): bump js-big-decimal from 2.0.1 to 2.0.4
2023-08-07 11:46:10 +10:00
Gaetan Craig-Riou
430aa685ce Merge pull request #11321 from mkllnk/dev-user-valid
Skip online domain validation of dev user email
2023-08-07 11:27:31 +10:00
Maikel
ccc5975517 Merge pull request #11320 from dacook/css-cleanup
SCSS cleanup
2023-08-07 10:23:49 +10:00
Maikel
4b0bffa095 Merge pull request #11256 from rioug/10997-add-new-relic-gem
Add new relic gem
2023-08-07 10:17:59 +10:00
Gaetan Craig-Riou
0103942dcb Disable new relic agent by default
It can be enable as needed by setting NEW_RELIC_AGENT_ENABLED env
variable to true and setting a license key
2023-08-07 09:37:36 +10:00
Gaetan Craig-Riou
de52ff4abf Move New Relic out of production, staging group 2023-08-07 09:37:36 +10:00
Gaetan Craig-Riou
5793cb14ee Add generated configuration 2023-08-07 09:37:36 +10:00
Gaetan Craig-Riou
c3d26b1900 Add the New Relic gem 2023-08-07 09:37:36 +10:00
Rachel Arnould
1b1279aa56 Merge pull request #11192 from abdellani/bulk-invoice-printing
fix Bulk invoice printing/sending
2023-08-04 12:02:43 +02:00
dependabot[bot]
760d237288 chore(deps): bump js-big-decimal from 2.0.1 to 2.0.4
Bumps [js-big-decimal](https://github.com/royNiladri/js-big-decimal) from 2.0.1 to 2.0.4.
- [Release notes](https://github.com/royNiladri/js-big-decimal/releases)
- [Commits](https://github.com/royNiladri/js-big-decimal/compare/v2.0.1...v2.0.4)

---
updated-dependencies:
- dependency-name: js-big-decimal
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-04 09:24:25 +00:00
Cillian O'Ruanaidh
d026438edc Revert "Validate voucher code length doesn't exceed the database column length i.e. 255 characters"
This reverts commit 0d0df82522.
2023-08-04 10:24:21 +01:00
Cillian O'Ruanaidh
9eba266efc Strip leading and trailing whitespace from code on assignment instead of before validation
Co-authored-by: Maikel <maikel@email.org.au>
2023-08-04 10:15:22 +01:00
Cillian O'Ruanaidh
ab0d899a17 Revert "Validate voucher code doesn't contain new line characters"
This reverts commit 0c0b85f4c4.
2023-08-04 10:04:14 +01:00
Gaetan Craig-Riou
6ed35f4cc1 Per review, delete only incomplete payments
Use destroy_all so we don't have to manually delete the payment fees
adjustment
2023-08-04 17:03:31 +10:00
Maikel Linke
ad37c401e5 Update translations 2023-08-04 13:48:29 +10:00
David Cook
42230c07b2 Merge pull request #11312 from macanudo527/fix_rubocop_5
Fix autocorrect Rails Cops
2023-08-04 11:13:52 +10:00
bouaik
41d649404f make suggested changes 2023-08-04 00:55:35 +01:00
Maikel
2b18effe6d Merge pull request #11322 from macanudo527/fix_remaining_line_length
Fix remaining Layout/LineLength Rubocop Errors
2023-08-04 09:34:00 +10:00
Maikel
64398066ce Merge pull request #11324 from openfoodfoundation/dependabot/npm_and_yarn/js-big-decimal-2.0.1
chore(deps): bump js-big-decimal from 1.4.1 to 2.0.1
2023-08-04 09:20:30 +10:00
Matt-Yorkley
dd9bdd9c0e Move address params handling into Checkout::Params 2023-08-04 08:43:15 +10:00
Matt-Yorkley
13a7c19a06 Extract checkout step(s) validation to a service 2023-08-04 08:43:15 +10:00
Matt-Yorkley
82b8bb74a1 Remove #before_save_hook method and clarify it's intention 2023-08-04 08:43:15 +10:00
Matt-Yorkley
f3899ee251 Extract some related methods to CheckoutSteps concern 2023-08-04 08:43:15 +10:00
Matt-Yorkley
d1bcdde49f Simplify split checkout errors 2023-08-04 08:43:15 +10:00
Filipe
69dfd53658 Merge pull request #11254 from rioug/11130-add-product-filter-order-report
11130 add product filter order report
2023-08-03 16:08:44 +01:00
Filipe
5c67d522b8 Merge pull request #11209 from openfoodfoundation/dependabot/npm_and_yarn/stimulus_reflex-3.5.0-rc3
chore(deps): bump stimulus_reflex from 3.5.0-rc2 to 3.5.0-rc3 + cable_ready from 5.0.0.rc2 to 5.0.1
2023-08-03 16:01:40 +01:00
Mohamed ABDELLANI
6c53f3b8b0 move pretty_date helper into invoice presenter 2023-08-03 15:12:02 +01:00
Mohamed ABDELLANI
c21ffd338b fix only date is expected on the invoices list table.
time is not supposed to be rendered on the invoices list table (only date)
2023-08-03 15:12:02 +01:00
Mohamed ABDELLANI
5358802ab5 replace Presenter#invoice_date with a delagator 2023-08-03 15:11:58 +01:00
Mohamed ABDELLANI
9a3aef525a add distributor's phone number to list of attributes to serialize 2023-08-03 15:06:04 +01:00
Mohamed ABDELLANI
d044959cec fix date formatting
implement a new helper `pretty_date`
2023-08-03 14:55:26 +01:00
Mohamed ABDELLANI
1a8c0f18b7 order invoices by "created_at desc" on the default scope 2023-08-03 14:55:26 +01:00
Mohamed ABDELLANI
8fecc9db4b render date without time on invoices list
+ sort invoices in the reverse order of the creation time
2023-08-03 14:55:26 +01:00
Mohamed ABDELLANI
24b1918df5 implment blank? on Address presenter
To keep the same method calls that are used on the legacy invoice template. I needed to redefine blank? on the address presenter.
2023-08-03 14:53:40 +01:00
Mohamed ABDELLANI
4449484402 replace double with instance_double 2023-08-03 14:53:40 +01:00
Mohamed ABDELLANI
2fb112aecd import BulkInvoiceJob#perform spec
1. remove the mocks
2. test the content of the generated pdf
3. remove the test of private methods
2023-08-03 14:53:40 +01:00
Mohamed ABDELLANI
c89c8a69bc optimize OrderMailer#invoice_email spec
Check if the email was sent without raising an error
Check if the email has an attached pdf
2023-08-03 14:52:45 +01:00
Mohamed ABDELLANI
9b80676d7d update the logic to send invoice
When the invoices feature is enabled, for every order, we check if
1. a new invoice must be generated
2. or, the latest invoice needs to be updated

the invoice rendrer input depends on the invoices flag.
if the feature is enabled, the input is supposed to be an invoice presenter
2023-08-03 14:52:45 +01:00
Mohamed ABDELLANI
7daa4d3a63 simplify filtering condition to select only invoiceable orders on OrdersReflex 2023-08-03 14:52:45 +01:00
Mohamed ABDELLANI
5ae2545918 Update app/jobs/bulk_invoice_job.rb
Co-authored-by: David Cook <david@redcliffs.net>
2023-08-03 14:52:45 +01:00
Mohamed ABDELLANI
687760046b update the bulk invoice job to print invoiceable orders
the invoices feature is enabled:
1. we filter non-invoiceable order
2. for each invoiceable order, we check if we need to generate a new invoice or update the latest invoice
2023-08-03 14:52:45 +01:00
Mohamed ABDELLANI
c921250d68 implement Spree::Order#invoiceable?
This will be used to filter the orders when running bulk print
2023-08-03 14:52:45 +01:00
Mohamed ABDELLANI
4f6ab69add implement OrderInvoiceGenerator service 2023-08-03 14:52:45 +01:00
Mohamed ABDELLANI
f24af3feb0 extract invoice printing logic into a seperated method 2023-08-03 14:52:45 +01:00
bouaik
0c849f08fd fix tests 2023-08-03 13:04:16 +01:00
bouaik
2c08602664 fix display invoice tab 2023-08-03 11:25:31 +01:00
Filipe
46cb1add63 Merge pull request #11126 from abdellani/show-invoice-number-on-invoices
Show invoice number on invoices
2023-08-03 10:48:34 +01:00
Filipe
c0a4bccb3e Merge pull request #11156 from Matt-Yorkley/product-tax-category
[Product Refactor] Tax category
2023-08-03 10:29:40 +01:00
dependabot[bot]
106938ddbf chore(deps): bump js-big-decimal from 1.4.1 to 2.0.1
Bumps [js-big-decimal](https://github.com/royNiladri/js-big-decimal) from 1.4.1 to 2.0.1.
- [Release notes](https://github.com/royNiladri/js-big-decimal/releases)
- [Commits](https://github.com/royNiladri/js-big-decimal/compare/v1.4.1...v2.0.1)

---
updated-dependencies:
- dependency-name: js-big-decimal
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-03 09:19:52 +00:00
Maikel Linke
f96636072e Use original DFC Connector.export implementation
We wanted to use our own context before but now I found a better way for
the connector to cache the context and therfore we can use the original
implementation again.
2023-08-03 16:45:31 +10:00
Maikel Linke
1daed8c29c Always load our DFC Connector patches
We want to use the preloaded context when exporting documents as well.
2023-08-03 16:45:30 +10:00
Maikel Linke
ff359664a9 Use cached DFC context 2023-08-03 16:45:30 +10:00
Neal Chambers
f5f9b80de7 Update .rubocop_todo.yml 2023-08-03 09:49:51 +09:00
Neal Chambers
a4f270bdec Fix Layout/LineLength 2023-08-03 09:49:47 +09:00
David Cook
32cc776725 Merge pull request #11177 from cyrillefr/Registration_of_an_enterprise_name_already_taken_stops_registration_process
Registration of an enterprise name already taken stops registration process
2023-08-03 10:37:47 +10:00
Maikel Linke
c8511ecd0d Remove superfluous line
The `<<` operation saves the association already.
2023-08-03 10:26:59 +10:00
Maikel Linke
6056c59301 Skip online domain validation of dev user email
We improved the email address validation to check the domain for
existing DNS entries. But our default user has the example.com domain
which is not resolved by my internet service provider.

I couldn't find a better way to deactivate this one check than
overriding the method in the validator. The code does not affect other
parts of the app unless you run multiple rake tasks in the same command
line with the database setup.
2023-08-03 10:22:00 +10:00
Maikel
76b7a9ea14 Merge pull request #11307 from openfoodfoundation/dependabot/npm_and_yarn/floating-ui/dom-1.5.1
chore(deps): bump @floating-ui/dom from 1.4.5 to 1.5.1
2023-08-03 10:04:31 +10:00
David Cook
293e135a45 Move variables to one variables file
Note that color-tbl-border is not needed in the new admin_v3 styles.
2023-08-03 09:49:29 +10:00
David Cook
0aa4c144b9 Rename disabled button variable
TIL that underscores and dashes are treated the same in SCSS variables.
2023-08-03 09:49:29 +10:00
David Cook
1a02e108a5 Use red colour from the palette
It's very similar.
2023-08-03 09:49:29 +10:00
David Cook
9610281ed3 Rename variables 2023-08-03 09:49:29 +10:00
David Cook
b46e6c462d Rename table border variable
There are other vars named brd, but I think border is clearer and doesn't need to be abreviated here.
2023-08-03 09:49:29 +10:00
David Cook
c4a335548a Rename warning color variable
To match the others in the variables file.

Also `warning-orange` was unused.
2023-08-03 09:49:29 +10:00
David Cook
01a9095121 Move some variables to the palette 2023-08-03 09:49:29 +10:00
David Cook
2f801d346d Prettify some more css files 2023-08-03 09:49:29 +10:00
David Cook
14e07e38d3 Remove depdenency on darkswarm/mixins 2023-08-03 09:49:29 +10:00
David Cook
bf9cd09462 Remove dependence on darkswarm variables
There were all sorts of dependencies hiding in there, and it was overwriting some of the admin variables. Better to keep things separate and simple.

I discovered that there was one legitimate reason for importing them though: for styling the trix editor. I can't think of a good way to safely import them without affecting the other variables, so I just hardcoded the colours for now.
2023-08-03 09:47:44 +10:00
David Cook
9207724779 Copy legacy variables
I'd like to go through and remove these, but it will have to happen another day.
2023-08-03 09:47:44 +10:00
David Cook
828df3ed82 Consistently use red in forms
Errors and required fields now use the colour from the palette. The error messages in the old design are a bit darker now, but I think it's clearer. And it makes the new design look way better.

Also snuck in a tiny padding tweak.
2023-08-03 09:47:44 +10:00
Maikel
9c6e0418cb Merge pull request #11317 from openfoodfoundation/dependabot/bundler/knapsack_pro-5.3.5
chore(deps-dev): bump knapsack_pro from 5.3.4 to 5.3.5
2023-08-03 08:18:52 +10:00
Filipe
f816d4b2d6 Merge pull request #11235 from jibees/11223-notices-tab-on-shopfront-persisting-after-selecting-an-order-cycle
Shopfront: On non-shop tab, when changing OC, switch to shop tab and hides non-shop tab content
2023-08-02 16:02:23 +01:00
Konrad
27e3a65440 Merge pull request #11234 from jibees/10867-vouchers-vouchers-page-is-shown-for-profile-enterprises
Show vouchers panel only if enterprise sells products (own or any)
2023-08-02 13:11:29 +02:00
Konrad
44d25dbb6a Merge pull request #11299 from cillian/order-name-sorting
Sort orders by last name, then first name i.e. the same way bulk order management works
2023-08-02 11:30:25 +02:00
Konrad
12f6457ab2 Merge pull request #11302 from bouaik/margin-guest-checkout
fix margin in guest checkout
2023-08-02 10:57:12 +02:00
Maikel
b73dfed4e9 Merge pull request #11308 from openfoodfoundation/dependabot/bundler/rubocop-1.55.1
chore(deps-dev): bump rubocop from 1.55.0 to 1.55.1
2023-08-02 16:29:36 +10:00
Maikel
7886e25f83 Merge pull request #11303 from macanudo527/fix_rubocop_script
Add file limit to Rubocop Autocorrect Script
2023-08-02 14:36:20 +10:00
dependabot[bot]
bff74e9472 chore(deps-dev): bump knapsack_pro from 5.3.4 to 5.3.5
Bumps [knapsack_pro](https://github.com/KnapsackPro/knapsack_pro-ruby) from 5.3.4 to 5.3.5.
- [Changelog](https://github.com/KnapsackPro/knapsack_pro-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v5.3.4...v5.3.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-02 03:17:45 +00:00
David Cook
ff76e3afa1 Merge pull request #11263 from mkllnk/dfc-connector-context
Dfc connector context
2023-08-02 13:16:28 +10:00
David Cook
44d1066e5c Merge pull request #11310 from Matt-Yorkley/image-magick
Rescue ImageMagick errors
2023-08-02 10:26:46 +10:00
Neal Chambers
0d2e2fa42c Add skip for cops that couldn't be autocorrected 2023-08-02 09:11:00 +09:00
Konrad
bc01207fec Merge pull request #11281 from jibees/11205-white-label-logo-image-not-displaying-correctly-on-mobile
White label: Update mobile variant size for white label logo to fit the same ratio
2023-08-02 00:10:14 +02:00
bouaik
5681c45a9e use classes like logged in checkout 2023-08-01 22:08:56 +01:00
Maikel Linke
bebdaace4b Prefer plain text in spec expectations 2023-08-01 23:06:26 +02:00
cyrillefr
d4c864a118 Add testing for modal warning that name is already in use 2023-08-01 23:06:26 +02:00
cyrillefr
057754305d Useless 'end' at end of coffeescript block 2023-08-01 23:06:26 +02:00
cyrillefr
05d610e598 Spec for (re)enabling 'Create Profile' button if not returning promise 2023-08-01 23:06:26 +02:00
cyrillefr
ae1e6032f6 Enable 'Create Profile' button via callback in case of not returning promise 2023-08-01 23:06:26 +02:00
Neal Chambers
f47f6efcd0 Safely autocorrect Rails/DurationArithmetic
Inspecting 1481 files
...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................C.............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................C.C.................................................................................................................................................................................................................................................................................C..............C..........................................................C...............................C....C..........CC................................................................

Offenses:

app/services/create_order_cycle.rb:41:24: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
      orders_close_at: Time.zone.now + 1.month
                       ^^^^^^^^^^^^^^^^^^^^^^^
spec/jobs/order_cycle_closing_job_spec.rb:7:74: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
    create(:order_cycle, automatic_notifications: true, orders_close_at: Time.zone.now - 1.minute)
                                                                         ^^^^^^^^^^^^^^^^^^^^^^^^
spec/jobs/order_cycle_closing_job_spec.rb:10:74: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
    create(:order_cycle, automatic_notifications: true, orders_close_at: Time.zone.now + 1.minute)
                                                                         ^^^^^^^^^^^^^^^^^^^^^^^^
spec/jobs/order_cycle_closing_job_spec.rb:13:75: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
    create(:order_cycle, automatic_notifications: false, orders_close_at: Time.zone.now - 1.minute)
                                                                          ^^^^^^^^^^^^^^^^^^^^^^^^
spec/jobs/order_cycle_opened_job_spec.rb:7:42: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
    create(:order_cycle, orders_open_at: Time.zone.now - 1.hour)
                                         ^^^^^^^^^^^^^^^^^^^^^^
spec/jobs/order_cycle_opened_job_spec.rb:13:42: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
    create(:order_cycle, orders_open_at: Time.zone.now + 1.minute)
                                         ^^^^^^^^^^^^^^^^^^^^^^^^
spec/services/permissions/order_spec.rb:26:58: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
                                           completed_at: Time.zone.now - 1.year)
                                                         ^^^^^^^^^^^^^^^^^^^^^^
spec/services/terms_of_service_spec.rb:21:71: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
      allow(customer).to receive(:terms_and_conditions_accepted_at) { Time.zone.now - 1.week }
                                                                      ^^^^^^^^^^^^^^^^^^^^^^
spec/services/terms_of_service_spec.rb:22:59: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
      allow(TermsOfServiceFile).to receive(:updated_at) { Time.zone.now - 2.weeks }
                                                          ^^^^^^^^^^^^^^^^^^^^^^^
spec/services/terms_of_service_spec.rb:36:71: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
      allow(customer).to receive(:terms_and_conditions_accepted_at) { Time.zone.now - 1.week }
                                                                      ^^^^^^^^^^^^^^^^^^^^^^
spec/services/terms_of_service_spec.rb:38:45: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
        ActiveStorage::Blob.new(created_at: Time.zone.now - 2.weeks)
                                            ^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/bulk_order_management_spec.rb:647:57: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
                                          completed_at: Time.zone.now + 1.week,
                                                        ^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/bulk_order_management_spec.rb:652:57: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
                                          completed_at: Time.zone.now + 2.weeks,
                                                        ^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/bulk_order_management_spec.rb:661:40: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
          oc3.update!(orders_close_at: Time.zone.now + 2.weeks)
                                       ^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/bulk_order_management_spec.rb:662:39: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
          oc3.update!(orders_open_at: Time.zone.now + 1.week)
                                      ^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/order_cycles/list_spec.rb:128:18: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
    oc_open_at = Time.zone.now - 2.weeks
                 ^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/order_cycles/list_spec.rb:129:19: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
    oc_close_at = Time.zone.now + 2.weeks
                  ^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/orders_spec.rb:289:40: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
          order2.update!(completed_at: Time.zone.now - 2.weeks)
                                       ^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/orders_spec.rb:290:40: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
          order3.update!(completed_at: Time.zone.now - 3.weeks)
                                       ^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/orders_spec.rb:291:40: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
          order4.update!(completed_at: Time.zone.now - 4.weeks)
                                       ^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/orders_spec.rb:292:40: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
          order5.update!(completed_at: Time.zone.now - 5.weeks)
                                       ^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/reports/orders_and_fulfillment_spec.rb:113:31: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
        let(:completed_at1) { Time.zone.now - 1500.hours } # 1500 hours in the past
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/reports/orders_and_fulfillment_spec.rb:114:31: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
        let(:completed_at2) { Time.zone.now - 1700.hours } # 1700 hours in the past
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/reports/orders_and_fulfillment_spec.rb:115:33: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
        let(:datetime_start1) { Time.zone.now - 1600.hours } # 1600 hours in the past
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/reports/orders_and_fulfillment_spec.rb:116:33: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
        let(:datetime_start2) { Time.zone.now - 1800.hours } # 1600 hours in the past
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/reports/orders_and_fulfillment_spec.rb:117:30: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
        let(:datetime_end) { Time.zone.now - 1400.hours } # 1400 hours in the past
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^
spec/system/admin/reports/packing_report_spec.rb:13:26: C: [Corrected] Style/RedundantParentheses: Don't use parentheses around a method call.
  let!(:open_datetime) { (1.month.ago).strftime("%Y-%m-%d 00:00") }
                         ^^^^^^^^^^^^^
spec/system/admin/reports/packing_report_spec.rb:13:27: C: [Corrected] Rails/DurationArithmetic: Do not add or subtract duration.
  let!(:open_datetime) { (Time.zone.now - 1.month).strftime("%Y-%m-%d 00:00") }
                          ^^^^^^^^^^^^^^^^^^^^^^^

1481 files inspected, 28 offenses detected, 28 offenses corrected
2023-08-01 22:50:21 +09:00
Neal Chambers
a263110799 Safely autocorrect Rails/DotSeparatedKeys
Inspecting 1481 files
........................................................................C................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Offenses:

app/controllers/api/v1/base_controller.rb:72:66: C: [Corrected] Rails/DotSeparatedKeys: Use the dot-separated keys instead of specifying the :scope option.
        message = I18n.t(:missing_parameter, param: error.param, scope: :api)
                                                                 ^^^^^^^^^^^
app/controllers/api/v1/base_controller.rb:79:84: C: [Corrected] Rails/DotSeparatedKeys: Use the dot-separated keys instead of specifying the :scope option.
        message = I18n.t(:unpermitted_parameters, params: error.params.join(", "), scope: :api)
                                                                                   ^^^^^^^^^^^

1481 files inspected, 2 offenses detected, 2 offenses corrected
2023-08-01 22:50:21 +09:00
Neal Chambers
44cf2faa1e Safely autocorrect Rails/ActiveRecordCallbacksOrder
Inspecting 1481 files
...........................................................................................................................................................................................................................................................C..C.CC........................................................................C...C..........C..C..................CC........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Offenses:

app/models/customer.rb:32:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_validation is supposed to appear before before_destroy.
  before_validation :downcase_email
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/customer.rb:33:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_validation is supposed to appear before before_destroy.
  before_validation :empty_code
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/customer.rb:34:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/customer.rb:49:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/customer.rb:49:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_create is supposed to appear before before_destroy.
  before_create :associate_user
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:129:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_touch.
  after_create :set_default_contact
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:130:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_touch.
  after_create :relate_to_owners_enterprises
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:133:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_rollback is supposed to appear before after_touch.
  after_rollback :restore_permalink
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise.rb:134:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/enterprise_group.rb:18:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_save is supposed to appear before after_find.
  after_save :unset_undefined_address_fields
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_group.rb:18:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_validation is supposed to appear before after_save.
  before_validation :sanitize_permalink
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_group.rb:19:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_validation is supposed to appear before after_find.
  before_validation :sanitize_permalink
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_group.rb:23:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_validation is supposed to appear before after_save.
  before_validation :sanitize_permalink
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_relationship.rb:15:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_destroy is supposed to appear before after_save.
  before_destroy :revoke_all_child_variant_overrides
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/enterprise_relationship.rb:16:3: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_destroy is supposed to appear before after_save.
  before_destroy :destroy_related_exchanges
  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/order.rb:108:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_save is supposed to appear before before_create.
    before_save :update_shipping_fees!, if: :complete?
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/order.rb:109:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_save is supposed to appear before before_create.
    before_save :update_payment_fees!, if: :complete?
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:30:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_initialize is supposed to appear before before_create.
    after_initialize :build_source
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:32:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_initialize is supposed to appear before after_create.
    after_initialize :build_source
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:33:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_save.
    after_create :invalidate_old_payments
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:34:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_initialize is supposed to appear before after_save.
    after_initialize :build_source
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:35:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_save.
    after_create :invalidate_old_payments
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:36:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_initialize is supposed to appear before after_save.
    after_initialize :build_source
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:46:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_initialize is supposed to appear before after_create.
    after_initialize :build_source
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/payment.rb:47:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/spree/product.rb:87:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_save.
    after_create :ensure_standard_variant
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/return_authorization.rb:12:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: before_save is supposed to appear before before_create.
    before_save :force_positive_amount
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/user.rb:49:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before before_destroy.
    after_create :associate_customers, :associate_orders
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/user.rb:50:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/spree/variant.rb:88:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_save.
    after_create :create_stock_items
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/variant.rb:89:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: after_create is supposed to appear before after_save.
    after_create :set_position
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/variant.rb:90:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/spree/variant.rb:91:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/models/spree/variant.rb:91:5: C: [Corrected] Rails/ActiveRecordCallbacksOrder: around_destroy is supposed to appear before after_save.
    around_destroy :destruction
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^
app/models/spree/variant.rb:92:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.

1481 files inspected, 35 offenses detected, 35 offenses corrected
2023-08-01 22:50:21 +09:00
Neal Chambers
a1560263a1 Safely autocorrect Rails/ActionOrder
Inspecting 1481 files
.........................................C.................C.........................................................CC........C..........C.C.........C..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................

Offenses:

app/controllers/admin/resource_controller.rb:39:5: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
    def update
    ^^^^^^^^^^
app/controllers/admin/resource_controller.rb:39:5: C: [Corrected] Rails/ActionOrder: Action create should appear before update.
    def create ...
    ^^^^^^^^^^
app/controllers/admin/resource_controller.rb:51:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/admin/resource_controller.rb:52:5: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
    def update_positions
    ^^^^^^^^^^^^^^^^^^^^
app/controllers/api/v0/orders_controller.rb:13:7: C: [Corrected] Rails/ActionOrder: Action index should appear before show.
      def index ...
      ^^^^^^^^^
app/controllers/api/v0/orders_controller.rb:23:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
      def show
      ^^^^^^^^
app/controllers/api/v0/orders_controller.rb:28:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/api/v0/orders_controller.rb:29:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
      def update
      ^^^^^^^^^^
app/controllers/spree/admin/images_controller.rb:26:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
      def create
      ^^^^^^^^^^
app/controllers/spree/admin/images_controller.rb:37:7: C: [Corrected] Rails/ActionOrder: Action edit should appear before create.
      def edit ...
      ^^^^^^^^
app/controllers/spree/admin/images_controller.rb:40:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/spree/admin/images_controller.rb:41:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
      def update
      ^^^^^^^^^^
app/controllers/spree/admin/invoices_controller.rb:19:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
      def create
      ^^^^^^^^^^
app/controllers/spree/admin/invoices_controller.rb:43:7: C: [Corrected] Rails/ActionOrder: Action show should appear before create.
      def show ...
      ^^^^^^^^
app/controllers/spree/admin/invoices_controller.rb:49:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/spree/admin/invoices_controller.rb:50:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
      def poll
      ^^^^^^^^
app/controllers/spree/admin/products_controller.rb:23:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
      def new
      ^^^^^^^
app/controllers/spree/admin/products_controller.rb:23:7: C: [Corrected] Rails/ActionOrder: Action show should appear before new.
      def show ...
      ^^^^^^^^
app/controllers/spree/admin/products_controller.rb:24:7: C: [Corrected] Rails/ActionOrder: Action index should appear before show.
      def index ...
      ^^^^^^^^^
app/controllers/spree/admin/products_controller.rb:27:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/spree/admin/products_controller.rb:27:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
      def create
      ^^^^^^^^^^
app/controllers/spree/admin/products_controller.rb:28:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/spree/admin/products_controller.rb:28:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
      def new
      ^^^^^^^
app/controllers/spree/admin/products_controller.rb:28:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
      def index
      ^^^^^^^^^
app/controllers/spree/admin/products_controller.rb:28:7: C: [Corrected] Rails/ActionOrder: Action index should appear before new.
      def index ...
      ^^^^^^^^^
app/controllers/spree/admin/products_controller.rb:29:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
      def new
      ^^^^^^^
app/controllers/spree/admin/products_controller.rb:32:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/spree/admin/products_controller.rb:32:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
      def create
      ^^^^^^^^^^
app/controllers/spree/admin/products_controller.rb:33:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
      def edit
      ^^^^^^^^
app/controllers/spree/admin/products_controller.rb:36:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
      def create
      ^^^^^^^^^^
app/controllers/spree/admin/products_controller.rb:38:7: C: [Corrected] Rails/ActionOrder: Action show should appear before create.
      def show ...
      ^^^^^^^^
app/controllers/spree/admin/products_controller.rb:42:7: C: [Corrected] Rails/ActionOrder: Action index should appear before create.
      def index ...
      ^^^^^^^^^
app/controllers/spree/admin/products_controller.rb:43:7: C: [Corrected] Rails/ActionOrder: Action index should appear before create.
      def index ...
      ^^^^^^^^^
app/controllers/spree/admin/products_controller.rb:43:7: C: [Corrected] Rails/ActionOrder: Action index should appear before show.
      def index ...
      ^^^^^^^^^
app/controllers/spree/admin/products_controller.rb:47:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/spree/admin/products_controller.rb:48:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
      def edit
      ^^^^^^^^
app/controllers/spree/admin/products_controller.rb:48:7: C: [Corrected] Rails/ActionOrder: Action edit should appear before create.
      def edit ...
      ^^^^^^^^
app/controllers/spree/admin/products_controller.rb:51:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/spree/admin/products_controller.rb:52:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
      def update
      ^^^^^^^^^^
app/controllers/spree/admin/taxons_controller.rb:13:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
      def create
      ^^^^^^^^^^
app/controllers/spree/admin/taxons_controller.rb:29:7: C: [Corrected] Rails/ActionOrder: Action edit should appear before create.
      def edit ...
      ^^^^^^^^
app/controllers/spree/admin/taxons_controller.rb:34:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/spree/admin/taxons_controller.rb:35:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
      def update
      ^^^^^^^^^^
app/controllers/spree/admin/variants_controller.rb:17:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
      def edit
      ^^^^^^^^
app/controllers/spree/admin/variants_controller.rb:18:7: C: [Corrected] Rails/ActionOrder: Action new should appear before edit.
      def new ...
      ^^^^^^^
app/controllers/spree/admin/variants_controller.rb:21:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/spree/admin/variants_controller.rb:21:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
      def update
      ^^^^^^^^^^
app/controllers/spree/admin/variants_controller.rb:22:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
      def create
      ^^^^^^^^^^
app/controllers/spree/admin/variants_controller.rb:31:7: C: [Corrected] Rails/ActionOrder: Action new should appear before update.
      def new ...
      ^^^^^^^
app/controllers/spree/admin/variants_controller.rb:34:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/spree/admin/variants_controller.rb:35:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
      def create
      ^^^^^^^^^^
app/controllers/spree/admin/variants_controller.rb:35:7: C: [Corrected] Rails/ActionOrder: Action create should appear before update.
      def create ...
      ^^^^^^^^^^
app/controllers/spree/admin/variants_controller.rb:42:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
      def update
      ^^^^^^^^^^
app/controllers/spree/admin/variants_controller.rb:55:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/spree/admin/variants_controller.rb:56:7: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
      def search
      ^^^^^^^^^^
app/controllers/user_confirmations_controller.rb:14:3: C: [Corrected] Rails/ActionOrder: Action show should appear before new.
  def show ...
  ^^^^^^^^
app/controllers/user_confirmations_controller.rb:15:3: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
  def new
  ^^^^^^^
app/controllers/user_confirmations_controller.rb:19:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/user_confirmations_controller.rb:20:3: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 0.
  def create
  ^^^^^^^^^^
app/controllers/user_confirmations_controller.rb:21:3: C: [Corrected] Layout/EmptyLineBetweenDefs: Expected 1 empty line between method definitions; found 2.
  def create
  ^^^^^^^^^^
app/controllers/user_confirmations_controller.rb:37:3: C: [Corrected] Rails/ActionOrder: Action show should appear before create.
  def show ...
  ^^^^^^^^
app/controllers/user_confirmations_controller.rb:42:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.
app/controllers/user_confirmations_controller.rb:43:1: C: [Corrected] Layout/EmptyLines: Extra blank line detected.

1481 files inspected, 63 offenses detected, 63 offenses corrected
2023-08-01 22:50:21 +09:00
Neal Chambers
e49c9e9061 Regenerate Rubocop's TODO file 2023-08-01 22:50:21 +09:00
Matt-Yorkley
885bc46d88 Update tax_category in product v3 table 2023-08-01 11:49:04 +01:00
David Cook
f7a137049f Merge pull request #11296 from dacook/hide-git-errors
Prevent git errors from showing in command output
2023-08-01 12:16:53 +10:00
Matt-Yorkley
91fc4b51b4 Rescue ImageMagick errors 2023-07-31 17:21:49 +01:00
Mohamed ABDELLANI
7d38a7b381 remove order number next to Tax Invoice 2023-07-31 17:01:36 +01:00
Mohamed ABDELLANI
760b17042b fix existing tests 2023-07-31 16:31:24 +01:00
Mohamed ABDELLANI
0ce8fae7c9 replace invoice_number method with delegate 2023-07-31 16:31:24 +01:00
Mohamed ABDELLANI
8abb9d2ecf add invoice number to alternative invoices 2023-07-31 16:31:24 +01:00
Mohamed ABDELLANI
e66cd5aaa3 add order number & invoice number to invoices 2023-07-31 16:31:24 +01:00
dependabot[bot]
8dcaba695e chore(deps-dev): bump rubocop from 1.55.0 to 1.55.1
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.55.0 to 1.55.1.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.55.0...v1.55.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-31 09:50:50 +00:00
dependabot[bot]
c885b42df1 chore(deps): bump @floating-ui/dom from 1.4.5 to 1.5.1
Bumps [@floating-ui/dom](https://github.com/floating-ui/floating-ui/tree/HEAD/packages/dom) from 1.4.5 to 1.5.1.
- [Release notes](https://github.com/floating-ui/floating-ui/releases)
- [Commits](https://github.com/floating-ui/floating-ui/commits/@floating-ui/dom@1.5.1/packages/dom)

---
updated-dependencies:
- dependency-name: "@floating-ui/dom"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-31 09:44:08 +00:00
Gaetan Craig-Riou
85adb9f345 Fix rubocop warning 2023-07-31 15:19:04 +10:00
Gaetan Craig-Riou
2857930263 Fix voucher adjustment request spec
Error messages have been updated to be more user friendly. This spec
was missed somehow.
2023-07-31 14:06:36 +10:00
Gaetan Craig-Riou
089d2b9c84 Clear any existing payment and payment fees when adding a voucher
If a user come back to checkout step 2 from step 3, the order
will have payment and possibly payment fee existing. This can
interfere with voucher calculation, so we clear them.
The user can then select a payment method again if needed
2023-07-31 12:05:52 +10:00
Maikel
aa92aac5a9 Style FrozenStringLiteralComment
Co-authored-by: jibees <jb.bellet@gmail.com>
2023-07-31 11:19:10 +10:00
Matt-Yorkley
64b29d40a8 Migrate data for tax_category_id from products to variants 2023-07-31 09:23:40 +10:00
Matt-Yorkley
e2094665c5 Update enterprise fee report tax_category fetching 2023-07-31 09:23:20 +10:00
Matt-Yorkley
07774c4572 Update tax category specs 2023-07-31 09:23:20 +10:00
Matt-Yorkley
d1209dd49b Update order_with_taxes factory 2023-07-31 09:23:20 +10:00
Matt-Yorkley
b593e356b0 Update product factories 2023-07-31 09:23:20 +10:00
Matt-Yorkley
a84f9ebd2e Allow passing tax_category to new variant when creating a new product 2023-07-31 09:23:20 +10:00
Matt-Yorkley
0df121bcc8 Move tax_category validations test 2023-07-31 09:23:20 +10:00
Matt-Yorkley
b2a7a931f3 Update tax_category tests 2023-07-31 09:23:20 +10:00
Matt-Yorkley
4cb291290b Update product factory 2023-07-31 09:23:20 +10:00
Matt-Yorkley
5a48721af4 Update serializers, views, and JS for bulk products edit 2023-07-31 09:23:20 +10:00
Matt-Yorkley
363bbded43 Update permitted attributes 2023-07-31 09:23:20 +10:00
Matt-Yorkley
a52516bcbf Move tax_category dropdown in edit pages 2023-07-31 09:23:20 +10:00
Matt-Yorkley
b12c130e02 Add tax_category column to variants table 2023-07-31 09:23:20 +10:00
Matt-Yorkley
4934d09a4c Update delegation and method chaining between product and tax_category 2023-07-31 09:23:20 +10:00
Matt-Yorkley
d33e780411 Move tax_category association from product to variant 2023-07-31 09:23:19 +10:00
bouaik
addbbc4006 fix margin in guest checkout 2023-07-29 07:52:55 -04:00
Cillian O'Ruanaidh
8039c0106a Set firstname correctly in spec/system/admin/orders_spec.rb 2023-07-28 15:04:47 +01:00
Cillian O'Ruanaidh
276b94de5b Sort orders by last name, then first name i.e. the same way bulk order management works 2023-07-28 14:20:29 +01:00
Gaetan Craig-Riou
33ef8def08 Update order total after removing a voucher
We need to do this to make sure when display the payment method
again.
Plus spec
2023-07-28 14:52:25 +10:00
Gaetan Craig-Riou
f35001dacc Update voucher adjustment and order total when adding a voucher
This is needed so we can check if payment is needed and display
no payment required when no payment needed
2023-07-28 14:27:27 +10:00
David Cook
ef62fb885d Check if record actually saved
I'm not sure if it will ever make a difference, but I think this makes more sense.
2023-07-28 14:11:45 +10:00
David Cook
be1a72743a Pending spec: vouchers should not require payment 2023-07-28 14:11:31 +10:00
David Cook
895f534afa Remove unnecessary extra page load 2023-07-28 14:11:19 +10:00
David Cook
febe6501c0 Prevent git errors from showing in command output
This would be a very rare case, but one time the git command failed, printing out an obscure "fatal" message to stderr which caused confusion.
2023-07-28 12:07:52 +10:00
Maikel Linke
b9ebcc9b1b Remove version number from DFC API URLs
While it's quite common to version APIs it's not possible with current
DFC tools. The architecture also uses URLs as identifiers for objects
like products. Having the id of an object change just because the format
of its description changes doesn't make sense. The DFC may solve this by
adding a version number in a different way.

By removing the version from our API URL, all object ids (URIs) should
be stable from now on.
2023-07-27 15:38:36 +10:00
Maikel Linke
4872855471 Update DFC context to newest version
The new DFC Connector is based on the new DFC context which changed all
URLs of all data types.

There's also a better way to access semantic properties now.
2023-07-27 15:38:36 +10:00
dependabot[bot]
34fbcb0e02 chore(deps): bump datafoodconsortium-connector
Bumps datafoodconsortium-connector from 1.0.0.pre.alpha.6 to 1.0.0.pre.alpha.8.

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-27 15:38:36 +10:00
Maikel Linke
3b5b9ec54d Avoid network request to DFC context on export
This protects us from the DFC website going down or the DFC updating
the context with breaking changes. We are in control of updating the
context now (opt-in to newer versions).
2023-07-27 15:38:36 +10:00
Jean-Baptiste Bellet
1a7e99143b Update mobile variant size for white label logo to fit the same ratio
Default size is 217*44. On mobile, we used to use 75*26, but with a different image.

With the white label, using the same image, we should have the same ratio between default and mobile ; that's why I've updated the width of the variant to 128.
2023-07-26 14:43:06 +02:00
Cillian O'Ruanaidh
0c0b85f4c4 Validate voucher code doesn't contain new line characters 2023-07-21 12:32:36 +01:00
Cillian O'Ruanaidh
0d0df82522 Validate voucher code length doesn't exceed the database column length i.e. 255 characters 2023-07-21 12:32:36 +01:00
Cillian O'Ruanaidh
5d66c8a578 Strip leading and trailing whitespace from voucher codes before validation 2023-07-21 12:32:36 +01:00
Cillian O'Ruanaidh
535ca954de Voucher codes should only be a single line so use a text field instead of a textarea 2023-07-21 12:12:36 +01:00
Gaetan Craig-Riou
f9afc0ba96 Fix rubocop warning 2023-07-21 14:51:40 +10:00
Gaetan Craig-Riou
196b674bf1 Add system spec to test filtering by product 2023-07-21 14:51:40 +10:00
Gaetan Craig-Riou
2fff77b2ee Report, add filtering by product for line items 2023-07-21 14:51:40 +10:00
Gaetan Craig-Riou
ec78de7cea Add product dropdown on Order and Fulfillment reports
It includes loading the selected product to populate the dropdown
when needed.
2023-07-21 14:51:40 +10:00
Gaetan Craig-Riou
b4a3aaab19 Add select variant stimulus controller
This is similar to variantAutocomplete directive used on the
new order page. It doesn't have all the same feature, but it's a
start
2023-07-21 14:51:40 +10:00
Jean-Baptiste Bellet
1750575f8c Need to update tab before updating panel since we retrieve panel from tab 2023-07-19 16:28:10 +02:00
Jean-Baptiste Bellet
695f76d3b6 Update format to be solve prettier warnings 2023-07-19 16:28:03 +02:00
Jean-Baptiste Bellet
0065ece6a6 Show vouchers panel only if enterprise sells products (own or any) 2023-07-19 16:02:16 +02:00
Jean-Baptiste Bellet
731fb3c0b3 Update cable_ready and stimulus_reflex as well
In order to reflect the one used in package.json
2023-07-19 09:05:31 +02:00
dependabot[bot]
385f3964ad chore(deps): bump stimulus_reflex from 3.5.0-rc2 to 3.5.0-rc3
Bumps [stimulus_reflex](https://github.com/stimulusreflex/stimulus_reflex) from 3.5.0-rc2 to 3.5.0-rc3.
- [Release notes](https://github.com/stimulusreflex/stimulus_reflex/releases)
- [Changelog](https://github.com/stimulusreflex/stimulus_reflex/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stimulusreflex/stimulus_reflex/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-19 09:05:31 +02:00
Gaetan Craig-Riou
a5b2bc6293 Per review, Refactor VoucherAdjustmentsService
Change #calculate to #update and clean up internal code
2023-07-18 15:16:21 +10:00
Gaetan Craig-Riou
a584f9aaec Refactor VoucherAdjustmentsService
It's more inline with existing coding style
2023-07-18 14:39:01 +10:00
Gaetan Craig-Riou
0e0850ef49 Add specs to cover re calculation
It is important that the calculated voucher adjustments don't change
if they are recalculated and it is equally important that they are
updated if the order has changed
2023-07-14 14:47:39 +10:00
Gaetan Craig-Riou
5a59396a41 Remove call to VoucherAdjustmentService when creating a voucher
Voucher will be automatically applied when the order transition to
the confirmation step. No need to do the work twice.
2023-07-14 14:47:39 +10:00
Gaetan Craig-Riou
3d9542fec2 Per review, rename amount to adjustment_amount
It was confusing as I was re assigning a variable given as a parameter
2023-07-14 14:47:39 +10:00
Gaetan Craig-Riou
41271192e1 Per review, Makes quantity change more explicit 2023-07-14 14:47:39 +10:00
Gaetan Craig-Riou
751056ba39 As per review comment, spell out voucher code when entering a voucher
Plus, update other related spec to be consistent
2023-07-14 14:47:39 +10:00
Gaetan Craig-Riou
789ce39ff4 Fixing Rubocop errors 2023-07-14 14:47:39 +10:00
Gaetan Craig-Riou
a8062e951a Add a scenario to make sure voucher adjustment a recalculated
This is specificly for voucher with a tax component, but it will
also become relevant for percentage based voucher.
2023-07-14 14:47:03 +10:00
Gaetan Craig-Riou
edabc56b5c Add voucher calculation after updating an order
This is to make sure the voucher are recalculated when a customer
update the order content from the `/cart` page. This is tested
with system test
2023-07-14 14:47:03 +10:00
Gaetan Craig-Riou
ca7dcb82b8 Apply voucher after transitionning to the confirmation step
Testing that VoucherAdjustmentsService.calculate has been called after a
transition doens't work, skipping test for now.
2023-07-14 14:47:03 +10:00
Gaetan Craig-Riou
366cca7984 Prevent voucher adjustment from bein updated when update is called 2023-07-14 14:47:03 +10:00
Gaetan Craig-Riou
87790b29ae Fix VoucherAdjustmentsService.calculate so we can call it mutiple time
It now uses `order.pre_discount_total` to make any calculation, that
means you can call it multiple time and you will still get the same
adjustment amount, included_tax and tax adjustment when needed. This
is assuming nothing changed on the order.
2023-07-14 14:47:03 +10:00
Gaetan Craig-Riou
60c0c54eb2 Update create_adjustment to create with an amount of 0
Amount calculation is handled by VoucherAdjustmentService.calculate
2023-07-14 14:47:03 +10:00
Matt-Yorkley
04bbea53e1 Move voucher processing out of checkout controller 2023-07-14 14:46:16 +10:00
lauriejefferson
3039ef5535 updated order partials and locales 2023-06-23 12:06:45 -04:00
lauriejefferson
d3dba87ca1 added styling and table rows for 'Not Paid' order confirmation' 2023-06-21 17:22:12 -04:00
976 changed files with 19605 additions and 9889 deletions

8
.env
View File

@@ -52,6 +52,8 @@ SMTP_PASSWORD="f00d"
# see="https://developers.google.com/maps/documentation/javascript/get-api-key
# GOOGLE_MAPS_API_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# see https://developers.google.com/maps/documentation/javascript/localization#Region
# GOOGLE_MAPS_REGION="XX"
# Stripe details for instance account
# Find these under 'Developers' -> 'API keys' in your Stripe account dashboard.
@@ -61,3 +63,9 @@ SMTP_PASSWORD="f00d"
# STRIPE_INSTANCE_PUBLISHABLE_KEY="pk_test_xxxx" # This can be a test key or a live key
# STRIPE_CLIENT_ID="ca_xxxx" # This can be a development ID or a production ID
# STRIPE_ENDPOINT_SECRET="whsec_xxxx"
# New relic settings
# see: https://one.eu.newrelic.com/admin-portal/, Administration > API keys to get the license key
# NEW_RELIC_AGENT_ENABLED=true
# NEW_RELIC_APP_NAME="Open Food Network"
# NEW_RELIC_LICENSE_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

View File

@@ -10,16 +10,31 @@ assignees: ''
## 1. Preparation on Thursday
- [ ] Merge pull requests in the [Ready To Go] column
- [ ] Include translations: `tx pull --force`
- [ ] Include translations
<details><summary>Command line instructions:</summary>
<pre>
<code>
git checkout master
git pull upstream master
tx pull --force
git commit -a -m "Update all locales with the latest Transifex translations"
git push upstream master
</code>
</pre>
</details>
- [ ] Create a tag:
- `script/tag_release` will auto increment patch version, otherwise
- `git push upstream HEAD:refs/tags/vX.Y.Z`
- [ ] [Draft new release]. Look at previous [releases] for inspiration.
- [ ] Notify [#instance-managers] of user-facing changes.
- Select new release tag
- _Generate release notes_ and check to ensure all items are arranged in the right category.
- [ ] Notify [#instance-managers] of user-facing :eyes:, API :warning: and experimental :construction: changes.
## 2. Testing
- [ ] [Find build] of the release commit and copy it below.
- [ ] Move this issue to Test Ready.
- [ ] Notify `@testers` in [#testing].
- [ ] Test build: <!-- paste build link here, e.g. https://semaphore...builds/1234 -->
- [ ] Test build: [Deploy to Staging] with release tag.
## 3. Finish on Tuesday
@@ -29,7 +44,7 @@ assignees: ''
<pre>
cd ofn-install
git pull
ansible-playbook --limit all-prod --extra-vars "git_version=vx.y.z" playbooks/deploy.yml
ansible-playbook --limit all_prod --extra-vars "git_version=vX.Y.Z" playbooks/deploy.yml
</pre>
</details>
- [ ] Notify [#instance-managers]:
@@ -40,9 +55,9 @@ The full process is described at https://github.com/openfoodfoundation/openfoodn
[Ready To Go]: #zenhub
[Transifex pull request]: https://github.com/openfoodfoundation/openfoodnetwork/pulls?utf8=%E2%9C%93&q=is%3Apr+is%3Aopen+head%3Atransifex
[Draft new release]: https://github.com/openfoodfoundation/openfoodnetwork/releases/new?tag=v&title=v+Code+Name&body=Congrats%0A%0ADescription%0A%0A%23%23+User+facing+changes+:eyes:%0A%0A%0A%23%23%23+Experimental+features+for+testing+:sunglasses:%0A%0A%0A%23%23+Technical+changes+:wrench:%0A%0A
[Draft new release]: https://github.com/openfoodfoundation/openfoodnetwork/releases/new?tag=v&title=v+Code+Name&body=Congrats%0A%0ADescription%0A%0A
[releases]: https://github.com/openfoodfoundation/openfoodnetwork/releases
[#instance-managers]: https://app.slack.com/client/T02G54U79/CG7NJ966B
[#testing]: https://openfoodnetwork.slack.com/app_redirect?channel=C02TZ6X00
[Find build]: https://semaphoreci.com/openfoodfoundation/openfoodnetwork-2/branches/master
[Deploy to Staging]: https://github.com/openfoodfoundation/openfoodnetwork/actions/workflows/stage.yml
[#global-community]: https://app.slack.com/client/T02G54U79/C59ADD8F2

View File

@@ -20,7 +20,12 @@
<!-- Please select one for your PR and delete the other. -->
Changelog Category: User facing changes | Technical changes
Changelog Category (reviewers may add a label for the release notes):
- [x] User facing changes
- [ ] API changes (V0, V1, DFC or Webhook)
- [ ] Technical changes only
- [ ] Feature toggled
<!-- Choose a pull request title above which explains your change to a
a user of the Open Food Network app. -->

30
.github/release.yml vendored Normal file
View File

@@ -0,0 +1,30 @@
changelog:
# Categorise according to what an instance manager needs to know
categories:
# Posted in advance for #instance-managers
- title: "User-facing changes 👀"
labels:
- '*'
exclude:
labels:
- api changes
- dependencies
- feature toggled
- technical changes only
- title: "API changes ⚠️"
labels:
- api changes
- title: "Experimental features for testing 🚧" # may be tested by instance managers
labels:
- feature toggled
# Instance managers ignore below
- title: "Technical changes 🛠️"
labels:
- technical changes only
- title: "Dependencies 📦"
labels:
- dependencies

View File

@@ -17,7 +17,7 @@ permissions:
contents: read
jobs:
knapsack_rspec_controllers:
controllers:
runs-on: ubuntu-22.04
services:
postgres:
@@ -85,7 +85,7 @@ jobs:
git show --no-patch # the commit being tested (which is often a merge due to actions/checkout@v3)
bundle exec rake knapsack_pro:rspec
knapsack_rspec_models:
models:
runs-on: ubuntu-22.04
services:
postgres:
@@ -106,10 +106,10 @@ jobs:
# [n] - where the n is a number of parallel jobs you want to run your tests on.
# Use a higher number if you have slow tests to split them between more parallel jobs.
# Remember to update the value of the `ci_node_index` below to (0..n-1).
ci_node_total: [7]
ci_node_total: [5]
# Indexes for parallel jobs (starting from zero).
# E.g. use [0, 1] for 2 parallel jobs, [0, 1, 2] for 3 parallel jobs, etc.
ci_node_index: [0, 1, 2, 3, 4, 5, 6]
ci_node_index: [0, 1, 2, 3, 4]
steps:
- uses: actions/checkout@v3
@@ -154,7 +154,7 @@ jobs:
run: |
bundle exec rake knapsack_pro:rspec
knapsack_rspec_system_admin:
system_admin:
runs-on: ubuntu-22.04
services:
postgres:
@@ -175,10 +175,10 @@ jobs:
# [n] - where the n is a number of parallel jobs you want to run your tests on.
# Use a higher number if you have slow tests to split them between more parallel jobs.
# Remember to update the value of the `ci_node_index` below to (0..n-1).
ci_node_total: [10]
ci_node_total: [13]
# Indexes for parallel jobs (starting from zero).
# E.g. use [0, 1] for 2 parallel jobs, [0, 1, 2] for 3 parallel jobs, etc.
ci_node_index: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ci_node_index: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
steps:
- uses: actions/checkout@v3
@@ -232,7 +232,7 @@ jobs:
retention-days: 7
if-no-files-found: ignore
knapsack_rspec_system_consumer:
system_consumer:
runs-on: ubuntu-22.04
services:
postgres:
@@ -253,10 +253,10 @@ jobs:
# [n] - where the n is a number of parallel jobs you want to run your tests on.
# Use a higher number if you have slow tests to split them between more parallel jobs.
# Remember to update the value of the `ci_node_index` below to (0..n-1).
ci_node_total: [10]
ci_node_total: [12]
# Indexes for parallel jobs (starting from zero).
# E.g. use [0, 1] for 2 parallel jobs, [0, 1, 2] for 3 parallel jobs, etc.
ci_node_index: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ci_node_index: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
steps:
- uses: actions/checkout@v3
@@ -310,7 +310,7 @@ jobs:
retention-days: 7
if-no-files-found: ignore
knapsack_rspec_engines:
engines:
runs-on: ubuntu-22.04
services:
postgres:
@@ -331,10 +331,10 @@ jobs:
# [n] - where the n is a number of parallel jobs you want to run your tests on.
# Use a higher number if you have slow tests to split them between more parallel jobs.
# Remember to update the value of the `ci_node_index` below to (0..n-1).
ci_node_total: [5]
ci_node_total: [2]
# Indexes for parallel jobs (starting from zero).
# E.g. use [0, 1] for 2 parallel jobs, [0, 1, 2] for 3 parallel jobs, etc.
ci_node_index: [0, 1, 2, 3, 4]
ci_node_index: [0, 1]
steps:
- uses: actions/checkout@v3
@@ -388,7 +388,7 @@ jobs:
retention-days: 7
if-no-files-found: ignore
knapsack_rspec_test_the_rest:
test_the_rest:
runs-on: ubuntu-22.04
services:
postgres:

View File

@@ -28,7 +28,7 @@ jobs:
with:
mapi-token: ${{ secrets.MAPI_TOKEN }}
api-url: http://localhost:3000
api-spec: swagger/v1/swagger.yaml
api-spec: swagger/v1.yaml
target: openfoodfoundation/openfoodnetwork
duration: 1min
sarif-report: mapi.sarif

View File

@@ -13,6 +13,10 @@ on:
- staging.openfoodnetwork.org.uk
- staging.openfoodnetwork.org.au
- staging.coopcircuits.fr
commit_ref:
description: "Commit Reference"
type: string
required: false
jobs:
deploy_pr:
@@ -59,4 +63,4 @@ jobs:
- name: Deploy to Staging
if: success()
run: |
ssh ofn-deploy@${{ inputs.server }} -o LogLevel=ERROR "$GITHUB_REF_NAME $GITHUB_SHA"
ssh ofn-deploy@${{ inputs.server }} -o LogLevel=ERROR "$GITHUB_REF_NAME ${{ inputs.commit_ref || github.sha }}"

View File

@@ -13,7 +13,8 @@ postcss.config.js
# SCSS
# Enabled: most of admin
/app/webpacker/css/admin/globals/
/app/webpacker/css/admin/globals/mixins.scss
/app/webpacker/css/admin/globals/variables.scss
/app/webpacker/css/admin/shared/
/app/webpacker/css/admin_v3/globals/variables.scss
/app/webpacker/css/darkswarm/

View File

@@ -39,6 +39,7 @@ Metrics/BlockLength:
"put",
"resource",
"resources",
"response",
"scenario",
"shared_examples",
"shared_examples_for",
@@ -53,6 +54,13 @@ Rails/ApplicationRecord:
# Migrations should not contain application code:
- "db/migrate/*.rb"
# Allow many-to-many associations without explicit model.
# - It avoids the additional code of a model class.
# - It simplifies the declaration of the association.
# - Rails may know that there are no callbacks associated.
Rails/HasAndBelongsToMany:
Enabled: false
Rails/SkipsModelValidations:
AllowedMethods:
- "touch"

File diff suppressed because it is too large Load Diff

10
Gemfile
View File

@@ -32,6 +32,7 @@ gem "db2fog", github: "openfoodfoundation/db2fog", branch: "rails-7"
gem "fog-aws", "~> 2.0" # db2fog does not support v3
gem "mime-types" # required by fog
gem "validates_lengths_from_database"
gem "valid_email2"
gem "catalog", path: "./engines/catalog"
@@ -103,8 +104,8 @@ gem 'redis', '>= 4.0', require: ['redis', 'redis/connection/hiredis']
gem 'sidekiq'
gem 'sidekiq-scheduler'
gem "cable_ready", "5.0.0.rc2"
gem "stimulus_reflex", "3.5.0.rc2"
gem "cable_ready", "5.0.1"
gem "stimulus_reflex", "3.5.0.rc3"
gem 'combine_pdf'
gem 'wicked_pdf'
@@ -133,11 +134,15 @@ gem 'flipper-ui'
gem "view_component"
gem 'view_component_reflex', '3.1.14.pre9'
# mini_portile2 is needed when installing with Vargant
# https://openfoodnetwork.slack.com/archives/CEBMTRCNS/p1668439152992899
gem 'mini_portile2', '~> 2.8'
gem "faraday"
gem "private_address_check"
gem 'newrelic_rpm'
group :production, :staging do
gem 'sd_notify' # For better Systemd process management. Used by Puma.
end
@@ -157,6 +162,7 @@ group :test, :development do
gem 'rspec-retry', require: false
gem 'rswag-specs'
gem 'shoulda-matchers'
gem 'stimulus_reflex_testing'
gem 'timecop'
end

View File

@@ -41,49 +41,49 @@ GEM
remote: https://rubygems.org/
specs:
Ascii85 (1.1.0)
actioncable (7.0.6)
actionpack (= 7.0.6)
activesupport (= 7.0.6)
actioncable (7.0.8)
actionpack (= 7.0.8)
activesupport (= 7.0.8)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailbox (7.0.6)
actionpack (= 7.0.6)
activejob (= 7.0.6)
activerecord (= 7.0.6)
activestorage (= 7.0.6)
activesupport (= 7.0.6)
actionmailbox (7.0.8)
actionpack (= 7.0.8)
activejob (= 7.0.8)
activerecord (= 7.0.8)
activestorage (= 7.0.8)
activesupport (= 7.0.8)
mail (>= 2.7.1)
net-imap
net-pop
net-smtp
actionmailer (7.0.6)
actionpack (= 7.0.6)
actionview (= 7.0.6)
activejob (= 7.0.6)
activesupport (= 7.0.6)
actionmailer (7.0.8)
actionpack (= 7.0.8)
actionview (= 7.0.8)
activejob (= 7.0.8)
activesupport (= 7.0.8)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.0)
actionpack (7.0.6)
actionview (= 7.0.6)
activesupport (= 7.0.6)
actionpack (7.0.8)
actionview (= 7.0.8)
activesupport (= 7.0.8)
rack (~> 2.0, >= 2.2.4)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0)
actionpack-action_caching (1.2.2)
actionpack (>= 4.0.0)
actiontext (7.0.6)
actionpack (= 7.0.6)
activerecord (= 7.0.6)
activestorage (= 7.0.6)
activesupport (= 7.0.6)
actiontext (7.0.8)
actionpack (= 7.0.8)
activerecord (= 7.0.8)
activestorage (= 7.0.8)
activesupport (= 7.0.8)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (7.0.6)
activesupport (= 7.0.6)
actionview (7.0.8)
activesupport (= 7.0.8)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
@@ -95,46 +95,47 @@ GEM
activemodel (>= 5.2.0)
activestorage (>= 5.2.0)
activesupport (>= 5.2.0)
activejob (7.0.6)
activesupport (= 7.0.6)
activejob (7.0.8)
activesupport (= 7.0.8)
globalid (>= 0.3.6)
activemerchant (1.123.0)
activesupport (>= 4.2)
builder (>= 2.1.2, < 4.0.0)
i18n (>= 0.6.9)
nokogiri (~> 1.4)
activemodel (7.0.6)
activesupport (= 7.0.6)
activerecord (7.0.6)
activemodel (= 7.0.6)
activesupport (= 7.0.6)
activerecord-import (1.4.1)
activemodel (7.0.8)
activesupport (= 7.0.8)
activerecord (7.0.8)
activemodel (= 7.0.8)
activesupport (= 7.0.8)
activerecord-import (1.5.0)
activerecord (>= 4.2)
activerecord-postgresql-adapter (0.0.1)
pg
activerecord-session_store (2.0.0)
actionpack (>= 5.2.4.1)
activerecord (>= 5.2.4.1)
activerecord-session_store (2.1.0)
actionpack (>= 6.1)
activerecord (>= 6.1)
cgi (>= 0.3.6)
multi_json (~> 1.11, >= 1.11.2)
rack (>= 2.0.8, < 3)
railties (>= 5.2.4.1)
activestorage (7.0.6)
actionpack (= 7.0.6)
activejob (= 7.0.6)
activerecord (= 7.0.6)
activesupport (= 7.0.6)
rack (>= 2.0.8, < 4)
railties (>= 6.1)
activestorage (7.0.8)
actionpack (= 7.0.8)
activejob (= 7.0.8)
activerecord (= 7.0.8)
activesupport (= 7.0.8)
marcel (~> 1.0)
mini_mime (>= 1.1.0)
activesupport (7.0.6)
activesupport (7.0.8)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
acts-as-taggable-on (9.0.1)
activerecord (>= 6.0, < 7.1)
acts-as-taggable-on (10.0.0)
activerecord (>= 6.1, < 7.2)
acts_as_list (1.0.4)
activerecord (>= 4.2)
addressable (2.8.4)
addressable (2.8.5)
public_suffix (>= 2.0.2, < 6.0)
aes_key_wrap (1.1.0)
afm (0.2.2)
@@ -151,11 +152,11 @@ GEM
activerecord (>= 3.1.0, < 8)
ast (2.4.2)
attr_required (1.0.1)
awesome_nested_set (3.5.0)
activerecord (>= 4.0.0, < 7.1)
awesome_nested_set (3.6.0)
activerecord (>= 4.0.0, < 7.2)
aws-eventstream (1.2.0)
aws-partitions (1.792.0)
aws-sdk-core (3.179.0)
aws-partitions (1.828.0)
aws-sdk-core (3.183.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.5)
@@ -163,13 +164,14 @@ GEM
aws-sdk-kms (1.71.0)
aws-sdk-core (~> 3, >= 3.177.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.132.0)
aws-sdk-core (~> 3, >= 3.179.0)
aws-sdk-s3 (1.136.0)
aws-sdk-core (~> 3, >= 3.181.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.6)
aws-sigv4 (1.6.0)
aws-eventstream (~> 1, >= 1.0.2)
bcrypt (3.1.18)
base64 (0.1.1)
bcrypt (3.1.19)
bigdecimal (3.0.2)
bindata (2.4.15)
bindex (0.8.1)
@@ -178,10 +180,10 @@ GEM
bugsnag (6.26.0)
concurrent-ruby (~> 1.0)
builder (3.2.4)
bullet (7.0.7)
bullet (7.1.2)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
cable_ready (5.0.0.rc2)
cable_ready (5.0.1)
actionpack (>= 5.2)
actionview (>= 5.2)
activesupport (>= 5.2)
@@ -202,6 +204,7 @@ GEM
marcel (~> 1.0)
nokogiri (~> 1.10, >= 1.10.4)
rubyzip (>= 1.3.0, < 3)
cgi (0.3.6)
choice (0.2.0)
chronic (0.10.2)
coderay (1.1.3)
@@ -212,7 +215,7 @@ GEM
coffee-script-source
execjs
coffee-script-source (1.12.2)
combine_pdf (1.0.23)
combine_pdf (1.0.24)
matrix
ruby-rc4 (>= 0.1.5)
concurrent-ruby (1.2.2)
@@ -220,7 +223,7 @@ GEM
crack (0.4.5)
rexml
crass (1.0.6)
css_parser (1.11.0)
css_parser (1.16.0)
addressable
cuprite (0.14.3)
capybara (~> 3.0)
@@ -231,14 +234,14 @@ GEM
activerecord (>= 5.a)
database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1)
datafoodconsortium-connector (1.0.0.pre.alpha.6)
virtual_assembly-semantizer (~> 1.0, >= 1.0.4)
datafoodconsortium-connector (1.0.0.pre.alpha.8)
virtual_assembly-semantizer (~> 1.0, >= 1.0.5)
date (3.3.3)
debug (1.8.0)
irb (>= 1.5.0)
reline (>= 0.3.1)
debugger-linecache (1.2.0)
devise (4.9.2)
devise (4.9.3)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 4.1.0)
@@ -246,7 +249,7 @@ GEM
warden (~> 1.2.3)
devise-encryptable (0.2.0)
devise (>= 2.1.0)
devise-i18n (1.11.0)
devise-i18n (1.12.0)
devise (>= 4.9.0)
devise-token_authenticatable (1.1.0)
devise (>= 4.0.0, < 5.0.0)
@@ -267,7 +270,8 @@ GEM
factory_bot_rails (6.2.0)
factory_bot (~> 6.2.0)
railties (>= 5.0.0)
faraday (2.7.10)
faraday (2.7.11)
base64
faraday-net_http (>= 2.0, < 3.1)
ruby2_keywords (>= 0.0.4)
faraday-follow_redirects (0.3.0)
@@ -278,7 +282,7 @@ GEM
concurrent-ruby (~> 1.1)
webrick (~> 1.7)
websocket-driver (>= 0.6, < 0.8)
ffaker (2.21.0)
ffaker (2.23.0)
ffi (1.15.5)
flipper (0.26.2)
concurrent-ruby (< 2)
@@ -315,8 +319,8 @@ GEM
rspec-core (~> 3.0)
ruby-progressbar (~> 1.4)
geocoder (1.8.2)
globalid (1.1.0)
activesupport (>= 5.0)
globalid (1.2.1)
activesupport (>= 6.1)
gmaps4rails (2.1.2)
good_migrations (0.2.1)
activerecord (>= 3.1)
@@ -352,20 +356,20 @@ GEM
jquery-ui-rails (4.2.1)
railties (>= 3.2.16)
json (2.6.3)
json-canonicalization (0.3.1)
json-canonicalization (0.3.2)
json-jwt (1.16.3)
activesupport (>= 4.2)
aes_key_wrap
bindata
faraday (~> 2.0)
faraday-follow_redirects
json-ld (3.2.3)
json-ld (3.2.5)
htmlentities (~> 4.3)
json-canonicalization (~> 0.3)
json-canonicalization (~> 0.3, >= 0.3.2)
link_header (~> 0.0, >= 0.0.8)
multi_json (~> 1.15)
rack (~> 2.2)
rdf (~> 3.2, >= 3.2.9)
rack (>= 2.2, < 4)
rdf (~> 3.2, >= 3.2.10)
json-schema (3.0.0)
addressable (>= 2.8)
json_spec (1.1.5)
@@ -374,7 +378,7 @@ GEM
jsonapi-serializer (2.2.0)
activesupport (>= 4.2)
jwt (2.7.1)
knapsack_pro (5.3.4)
knapsack_pro (5.7.0)
rake
language_server-protocol (3.17.0.3)
launchy (2.5.0)
@@ -385,7 +389,7 @@ GEM
listen (3.8.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
loofah (2.21.3)
loofah (2.21.4)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.8.1)
@@ -396,16 +400,16 @@ GEM
marcel (1.0.2)
matrix (0.4.2)
method_source (1.0.0)
mime-types (3.4.1)
mime-types (3.5.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2021.0225)
mime-types-data (3.2023.0808)
mimemagic (0.4.3)
nokogiri (~> 1)
rake
mini_magick (4.11.0)
mini_mime (1.1.2)
mini_portile2 (2.8.4)
minitest (5.18.1)
mini_mime (1.1.5)
mini_portile2 (2.8.5)
minitest (5.20.0)
monetize (1.12.0)
money (~> 6.12)
money (6.16.0)
@@ -413,17 +417,18 @@ GEM
msgpack (1.7.1)
multi_json (1.15.0)
multi_xml (0.6.0)
net-imap (0.3.6)
net-imap (0.3.7)
date
net-protocol
net-pop (0.1.2)
net-protocol
net-protocol (0.2.1)
timeout
net-smtp (0.3.3)
net-smtp (0.4.0)
net-protocol
newrelic_rpm (9.5.0)
nio4r (2.5.9)
nokogiri (1.15.3)
nokogiri (1.15.4)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oauth2 (1.4.11)
@@ -460,9 +465,9 @@ GEM
activerecord (>= 5.2)
request_store (~> 1.1)
parallel (1.23.0)
paranoia (2.6.2)
activerecord (>= 5.1, < 7.1)
parser (3.2.2.3)
paranoia (2.6.3)
activerecord (>= 5.1, < 7.2)
parser (3.2.2.4)
ast (~> 2.4.1)
racc
paypal-sdk-core (0.3.4)
@@ -482,14 +487,14 @@ GEM
coderay (~> 1.1)
method_source (~> 1.0)
public_suffix (5.0.3)
puma (6.3.0)
puma (6.4.0)
nio4r (~> 2.0)
query_count (1.1.1)
activerecord (>= 4.2)
railties (>= 4.2)
raabro (1.4.0)
racc (1.7.1)
rack (2.2.7)
rack (2.2.8)
rack-mini-profiler (2.3.4)
rack (>= 1.2.0)
rack-oauth2 (1.21.3)
@@ -506,25 +511,25 @@ GEM
rack-test (2.1.0)
rack (>= 1.3)
rack-timeout (0.6.3)
rails (7.0.6)
actioncable (= 7.0.6)
actionmailbox (= 7.0.6)
actionmailer (= 7.0.6)
actionpack (= 7.0.6)
actiontext (= 7.0.6)
actionview (= 7.0.6)
activejob (= 7.0.6)
activemodel (= 7.0.6)
activerecord (= 7.0.6)
activestorage (= 7.0.6)
activesupport (= 7.0.6)
rails (7.0.8)
actioncable (= 7.0.8)
actionmailbox (= 7.0.8)
actionmailer (= 7.0.8)
actionpack (= 7.0.8)
actiontext (= 7.0.8)
actionview (= 7.0.8)
activejob (= 7.0.8)
activemodel (= 7.0.8)
activerecord (= 7.0.8)
activestorage (= 7.0.8)
activesupport (= 7.0.8)
bundler (>= 1.15.0)
railties (= 7.0.6)
railties (= 7.0.8)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
activesupport (>= 5.0.1.rc1)
rails-dom-testing (2.1.1)
rails-dom-testing (2.2.0)
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
@@ -536,13 +541,13 @@ GEM
rails-html-sanitizer (1.6.0)
loofah (~> 2.21)
nokogiri (~> 1.14)
rails-i18n (7.0.7)
rails-i18n (7.0.8)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
rails_safe_tasks (1.0.0)
railties (7.0.6)
actionpack (= 7.0.6)
activesupport (= 7.0.6)
railties (7.0.8)
actionpack (= 7.0.8)
activesupport (= 7.0.8)
method_source
rake (>= 12.2)
thor (~> 1.0)
@@ -556,26 +561,26 @@ GEM
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
rdf (3.2.9)
rdf (3.2.11)
link_header (~> 0.0, >= 0.0.8)
redcarpet (3.6.0)
redis (4.8.1)
redis-client (0.14.1)
redis-client (0.17.0)
connection_pool
regexp_parser (2.8.1)
regexp_parser (2.8.2)
reline (0.3.3)
io-console (~> 0.5)
request_store (1.5.1)
rack (>= 1.4)
responders (3.1.0)
responders (3.1.1)
actionpack (>= 5.2)
railties (>= 5.2)
rexml (3.2.6)
roadie (5.0.1)
roadie (5.2.0)
css_parser (~> 1.4)
nokogiri (~> 1.8)
roadie-rails (3.0.0)
railties (>= 5.1, < 7.1)
nokogiri (~> 1.15)
roadie-rails (3.1.0)
railties (>= 5.1, < 8.0)
roadie (~> 5.0)
rodf (1.2.0)
builder (>= 3.0)
@@ -606,21 +611,22 @@ GEM
rspec-retry (0.6.2)
rspec-core (> 3.3)
rspec-support (3.12.1)
rswag-api (2.10.1)
railties (>= 3.1, < 7.1)
rswag-specs (2.10.1)
activesupport (>= 3.1, < 7.1)
rswag-api (2.11.0)
railties (>= 3.1, < 7.2)
rswag-specs (2.11.0)
activesupport (>= 3.1, < 7.2)
json-schema (>= 2.2, < 4.0)
railties (>= 3.1, < 7.1)
railties (>= 3.1, < 7.2)
rspec-core (>= 2.14)
rswag-ui (2.10.1)
actionpack (>= 3.1, < 7.1)
railties (>= 3.1, < 7.1)
rubocop (1.55.0)
rswag-ui (2.11.0)
actionpack (>= 3.1, < 7.2)
railties (>= 3.1, < 7.2)
rubocop (1.57.1)
base64 (~> 0.1.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
parser (>= 3.2.2.3)
parser (>= 3.2.2.4)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0)
rexml (>= 3.2.5, < 4.0)
@@ -629,7 +635,7 @@ GEM
unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.29.0)
parser (>= 3.2.1.0)
rubocop-rails (2.20.2)
rubocop-rails (2.21.2)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.33.0, < 2.0)
@@ -657,7 +663,7 @@ GEM
semantic_range (3.0.0)
shoulda-matchers (5.3.0)
activesupport (>= 5.2.0)
sidekiq (7.1.2)
sidekiq (7.1.6)
concurrent-ruby (< 2)
connection_pool (>= 2.3.0)
rack (>= 2.2.4)
@@ -692,34 +698,36 @@ GEM
state_machines-activerecord (0.9.0)
activerecord (>= 6.0)
state_machines-activemodel (>= 0.9.0)
stimulus_reflex (3.5.0.rc2)
stimulus_reflex (3.5.0.rc3)
actioncable (>= 5.2, < 8)
actionpack (>= 5.2, < 8)
actionview (>= 5.2, < 8)
activesupport (>= 5.2, < 8)
cable_ready (>= 5.0.0.rc2)
cable_ready (~> 5.0)
nokogiri (~> 1.0)
rack (>= 2, < 4)
railties (>= 5.2, < 8)
redis (>= 4.0, < 6.0)
stimulus_reflex_testing (0.3.0)
stimulus_reflex (>= 3.3.0)
stringex (2.8.6)
stripe (8.6.0)
stripe (10.0.0)
swd (1.3.0)
activesupport (>= 3)
attr_required (>= 0.0.5)
httpclient (>= 2.4)
temple (0.8.2)
thor (1.2.2)
thor (1.3.0)
thread-local (1.1.0)
tilt (2.1.0)
timecop (0.9.6)
timecop (0.9.8)
timeout (0.4.0)
ttfunk (1.7.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (2.4.2)
unicode-display_width (2.5.0)
uniform_notifier (1.16.0)
valid_email2 (4.0.6)
valid_email2 (5.1.0)
activemodel (>= 3.2)
mail (~> 2.5)
validate_email (0.1.6)
@@ -728,8 +736,10 @@ GEM
validate_url (1.0.15)
activemodel (>= 3.0.0)
public_suffix
validates_lengths_from_database (0.8.0)
activerecord (>= 4)
vcr (6.2.0)
view_component (3.5.0)
view_component (3.6.0)
activesupport (>= 5.2.0, < 8.0)
concurrent-ruby (~> 1.0)
method_source (~> 1.0)
@@ -737,11 +747,11 @@ GEM
rails (>= 5.2, < 8.0)
stimulus_reflex (>= 3.5.0.pre2)
view_component (>= 2.28.0)
virtual_assembly-semantizer (1.0.4)
virtual_assembly-semantizer (1.0.5)
json-ld (~> 3.2, >= 3.2.3)
warden (1.2.9)
rack (>= 2.0.9)
web-console (4.2.0)
web-console (4.2.1)
actionview (>= 6.0.0)
activemodel (>= 6.0.0)
bindex (>= 0.4.0)
@@ -759,7 +769,7 @@ GEM
railties (>= 5.2)
semantic_range (>= 2.3.0)
webrick (1.7.0)
websocket-driver (0.7.5)
websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
whenever (1.0.0)
@@ -770,7 +780,7 @@ GEM
xml-simple (1.1.8)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.6.8)
zeitwerk (2.6.12)
PLATFORMS
ruby
@@ -796,7 +806,7 @@ DEPENDENCIES
bootsnap
bugsnag
bullet
cable_ready (= 5.0.0.rc2)
cable_ready (= 5.0.1)
cancancan (~> 1.15.0)
capybara
catalog!
@@ -847,6 +857,7 @@ DEPENDENCIES
mimemagic (> 0.3.5)
mini_portile2 (~> 2.8)
monetize (~> 1.11)
newrelic_rpm
oauth2 (~> 1.4.7)
omniauth-rails_csrf_protection
omniauth_openid_connect
@@ -894,11 +905,13 @@ DEPENDENCIES
spring
spring-commands-rspec
state_machines-activerecord
stimulus_reflex (= 3.5.0.rc2)
stimulus_reflex (= 3.5.0.rc3)
stimulus_reflex_testing
stringex (~> 2.8.5)
stripe
timecop
valid_email2
validates_lengths_from_database
vcr
view_component
view_component_reflex (= 3.1.14.pre9)

View File

@@ -1,5 +1,4 @@
[![Build](https://github.com/openfoodfoundation/openfoodnetwork/actions/workflows/build.yml/badge.svg)](https://github.com/openfoodfoundation/openfoodnetwork/actions/workflows/build.yml)
[![Code Climate](https://codeclimate.com/github/openfoodfoundation/openfoodnetwork.png)](https://codeclimate.com/github/openfoodfoundation/openfoodnetwork)
# Open Food Network

View File

@@ -135,6 +135,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout
display_name: null
on_hand: null
price: null
tax_category_id: null
DisplayProperties.setShowVariants product.id, true
@@ -346,9 +347,6 @@ filterSubmitProducts = (productsToFilter) ->
if product.hasOwnProperty("category_id")
filteredProduct.primary_taxon_id = product.category_id
hasUpdatableProperty = true
if product.hasOwnProperty("tax_category_id")
filteredProduct.tax_category_id = product.tax_category_id
hasUpdatableProperty = true
if product.hasOwnProperty("inherits_properties")
filteredProduct.inherits_properties = product.inherits_properties
hasUpdatableProperty = true
@@ -389,6 +387,9 @@ filterSubmitVariant = (variant) ->
if variant.hasOwnProperty("display_name")
filteredVariant.display_name = variant.display_name
hasUpdatableProperty = true
if variant.hasOwnProperty("tax_category_id")
filteredVariant.tax_category_id = variant.tax_category_id
hasUpdatableProperty = true
if variant.hasOwnProperty("display_as")
filteredVariant.display_as = variant.display_as
hasUpdatableProperty = true

View File

@@ -11,14 +11,8 @@ angular.module("admin.indexUtils").directive "objForUpdate", (switchClass, pendi
pendingChanges.remove(scope.object().id, scope.attr)
scope.clear()
else
change =
object: scope.object()
type: scope.type
attr: scope.attr
value: if value? then value else ""
scope: scope
scope.pending()
pendingChanges.add(scope.object().id, scope.attr, change)
addPendingChange(scope.attr, value ? "")
scope.reset = (value) ->
scope.savedValue = value
@@ -34,3 +28,33 @@ angular.module("admin.indexUtils").directive "objForUpdate", (switchClass, pendi
scope.clear = ->
switchClass( element, "", ["update-pending", "update-error", "update-success"], false )
# When a list of customer is filtered and we removed the "filtered value" from a customer, we
# want to make sure the customer is updated. IE. filtering by tag, and removing said tag.
# Deleting the "filtered value" from a customer will remove the customer entry, thus
# removing "objForUpdate" directive from the active scope. That means $watch won't pick up
# the attribute changed.
# To ensure the customer is still updated, we check on the $destroy event to see if
# the attribute has changed, if so we queue up the change.
scope.$on '$destroy', (value) ->
# No update
return if scope.object()[scope.attr] is scope.savedValue
# For some reason the code attribute is removed from the object when cleared, so we add
# an emptyvalue so it gets updated properly
if scope.attr is "code" and scope.object()[scope.attr] is undefined
scope.object()["code"] = ""
# Queuing up change
addPendingChange(scope.attr, scope.object()[scope.attr])
# private
addPendingChange = (attr, value) ->
change =
object: scope.object()
type: scope.type
attr: attr
value: value
scope: scope
pendingChanges.add(scope.object().id, attr, change)

View File

@@ -9,10 +9,9 @@ angular.module('Darkswarm').controller "RegistrationFormCtrl", ($scope, Registra
$scope.create = (form) ->
if ($scope.valid(form))
$scope.disableButton()
EnterpriseRegistrationService.create().then(() ->
EnterpriseRegistrationService.create($scope.enableButton).then(() ->
$scope.enableButton()
)
end
$scope.update = (nextStep, form) ->
EnterpriseRegistrationService.update(nextStep) if $scope.valid(form)

View File

@@ -19,7 +19,7 @@
.name {{ product.name }}
.supplier {{ product.supplier_name }}
.exchange-product-variant{'ng-repeat' => 'variant in product.variants | visibleVariants:exchange:order_cycle.visible_variants_for_outgoing_exchanges | filter:variantSuppliedToOrderCycle'}
.exchange-product-variant{'ng-repeat' => 'variant in product.variants | visibleVariants:exchange:order_cycle.visible_variants_for_outgoing_exchanges | filter:variantSuppliedToOrderCycle as filteredVariants'}
%label
%input{ type: 'checkbox', name: 'order_cycle_outgoing_exchange_{{ $parent.$parent.$index }}_variants_{{ variant.id }}',
value: 1,
@@ -27,5 +27,8 @@
'id' => 'order_cycle_outgoing_exchange_{{ $parent.$parent.$index }}_variants_{{ variant.id }}',
'ng-disabled' => '!order_cycle.editable_variants_for_outgoing_exchanges.hasOwnProperty(exchange.enterprise_id) || order_cycle.editable_variants_for_outgoing_exchanges[exchange.enterprise_id].indexOf(variant.id) < 0' }
{{ variant.label }}
%em{ 'ng-if' => 'filteredVariants.length === 0' }
{{ 'js.admin.panels.exchange_products.no_variants' | t }}
%div{ 'ng-include' => "'admin/panels/exchange_products_panel_footer.html'" }

View File

@@ -1,5 +1,7 @@
.exchange-load-all-variants
%div
{{ 'js.admin.panels.exchange_products.variants_loaded' | t:{ num_of_variants_loaded: enterprises[exchange.enterprise_id].loaded_variants, total_number_of_variants: exchangeTotalVariants(exchange) } }}
%em{ 'ng-if': 'enterprises[exchange.enterprise_id].loaded_variants > exchangeTotalVariants(exchange)' }
{{ 'js.admin.panels.exchange_products.some_variants_hidden' | t }}
%a{ 'ng-click' => 'loadAllExchangeProducts(exchange)', 'ng-show' => 'enterprises[exchange.enterprise_id].last_page_loaded < enterprises[exchange.enterprise_id].num_of_pages' }
{{ 'js.admin.panels.exchange_products.load_all_variants' | t }}

View File

@@ -1 +1 @@
%button.question-mark-icon{"ng-class" => "{open: tt_isOpen}", type: 'button'}
.question-mark-icon{"ng-class" => "{open: tt_isOpen}", type: 'button'}

View File

@@ -3,7 +3,7 @@
class ConfirmModalComponent < ModalComponent
def initialize(id:, confirm_actions: nil, reflex: nil, controller: nil, message: nil,
confirm_reflexes: nil)
super(id: id, close_button: true)
super(id:, close_button: true)
@confirm_actions = confirm_actions
@reflex = reflex
@confirm_reflexes = confirm_reflexes

View File

@@ -2,6 +2,6 @@
class HelpModalComponent < ModalComponent
def initialize(id:, close_button: true)
super(id: id, close_button: close_button)
super(id:, close_button:)
end
end

View File

@@ -1,15 +0,0 @@
# frozen_string_literal: true
class PaginationComponent < ViewComponentReflex::Component
def initialize(pagy:, data:)
super
@count = pagy.count
@page = pagy.page
@per_page = pagy.items
@pages = pagy.pages
@next = pagy.next
@prev = pagy.prev
@data = data
@series = pagy.series
end
end

View File

@@ -1,16 +0,0 @@
= component_controller do
%nav{"aria-label": "pagination"}
.pagination
.pagination-prev{data: @prev.nil? ? nil : @data, "data-page": @prev, class: "#{'inactive' if @prev.nil?}"}
= I18n.t "components.pagination.previous"
.pagination-pages
- @series.each do |page|
- if page == :gap
.pagination-gap
- else
.pagination-page{data: @data, "data-page": page, class: "#{'active' if page.to_i == @page}"}
= page
.pagination-next{data: @next.nil? ? nil : @data, "data-page": @next, class: "#{'inactive' if @next.nil?}"}
= I18n.t "components.pagination.next"

View File

@@ -1,69 +0,0 @@
nav {
.pagination {
display: flex;
justify-content: space-between;
align-items: flex-start;
font-size: 14px;
.pagination-prev, .pagination-next {
cursor: pointer;
&:after, &:before {
font-size: 2em;
position: relative;
top: 3px;
}
&.inactive {
cursor: default;
color: $disabled-dark;
}
}
.pagination-prev {
margin-left: 10px;
&:before {
content: "";
margin-left: 10px;
margin-right: 10px;
}
}
.pagination-next {
margin-right: 10px;
&:after {
content: "";
margin-left: 10px;
margin-right: 10px;
}
}
.pagination-pages {
display: flex;
align-items: flex-end;
.pagination-gap, .pagination-page {
padding: 0 0.5rem;
margin-left: 10px;
margin-right: 10px;
}
.pagination-gap {
color: $disabled-dark;
}
.pagination-page {
color: $color-4;
cursor: pointer;
&.active {
border-top: 3px solid $spree-blue;
color: $spree-blue;
cursor: default;
}
}
}
}
}

View File

@@ -1,57 +0,0 @@
# frozen_string_literal: true
class ProductComponent < ViewComponentReflex::Component
DATETIME_FORMAT = '%F %T'
def initialize(product:, columns:)
super
@product = product
@image = @product.image if product.image.present?
@columns = columns.map do |c|
{
id: c[:value],
value: column_value(c[:value])
}
end
end
# This must be define when using ProductComponent.with_collection()
def collection_key
@product.id
end
# rubocop:disable Metrics/CyclomaticComplexity
def column_value(column)
case column
when 'name'
@product.name
when 'price'
@product.price
when 'unit'
"#{@product.variants.first.unit_value} #{@product.variant_unit}"
when 'producer'
@product.supplier.name
when 'category'
@product.taxons.map(&:name).join(', ')
when 'sku'
@product.sku
when 'on_hand'
@product.on_hand || 0
when 'on_demand'
@product.on_demand
when 'tax_category'
@product.tax_category.name
when 'inherits_properties'
@product.inherits_properties
when 'import_date'
format_date(@product.import_date)
end
end
# rubocop:enable Metrics/CyclomaticComplexity
private
def format_date(date)
date&.strftime(DATETIME_FORMAT) || ''
end
end

View File

@@ -1,6 +0,0 @@
%tr
- @columns.each do |column|
%td.products_column{class: column[:id]}
- if column[:id] == "name" && @image&.attachment.present?
= image_tag @image.url(:mini)
= column[:value]

View File

@@ -1,179 +0,0 @@
# frozen_string_literal: true
class ProductsTableComponent < ViewComponentReflex::Component
include Pagy::Backend
SORTABLE_COLUMNS = ['name', 'import_date'].freeze
SELECTABLE_COLUMNS = [
{ label: I18n.t("admin.products_page.columns_selector.price"), value: "price" },
{ label: I18n.t("admin.products_page.columns_selector.unit"), value: "unit" },
{ label: I18n.t("admin.products_page.columns_selector.producer"), value: "producer" },
{ label: I18n.t("admin.products_page.columns_selector.category"), value: "category" },
{ label: I18n.t("admin.products_page.columns_selector.sku"), value: "sku" },
{ label: I18n.t("admin.products_page.columns_selector.on_hand"), value: "on_hand" },
{ label: I18n.t("admin.products_page.columns_selector.on_demand"), value: "on_demand" },
{ label: I18n.t("admin.products_page.columns_selector.tax_category"), value: "tax_category" },
{
label: I18n.t("admin.products_page.columns_selector.inherits_properties"),
value: "inherits_properties"
},
{ label: I18n.t("admin.products_page.columns_selector.import_date"), value: "import_date" }
].sort do |a, b|
a[:label] <=> b[:label]
end.freeze
PER_PAGE_VALUE = [10, 25, 50, 100].freeze
PER_PAGE = PER_PAGE_VALUE.map { |value| { label: value, value: value } }
NAME_COLUMN = {
label: I18n.t("admin.products_page.columns.name"), value: "name", sortable: true
}.freeze
def initialize(user:)
super
@user = user
@selectable_columns = SELECTABLE_COLUMNS
@columns_selected = ['unit', 'price', 'on_hand', 'category', 'import_date']
@per_page = PER_PAGE
@per_page_selected = [10]
@categories = [{ label: "All", value: "all" }] +
Spree::Taxon.order(:name)
.map { |taxon| { label: taxon.name, value: taxon.id.to_s } }
@categories_selected = ["all"]
@producers = [{ label: "All", value: "all" }] +
OpenFoodNetwork::Permissions.new(@user)
.managed_product_enterprises.is_primary_producer.by_name
.map { |producer| { label: producer.name, value: producer.id.to_s } }
@producers_selected = ["all"]
@page = 1
@sort = { column: "name", direction: "asc" }
@search_term = ""
end
# any change on a "reflex_data_attributes" (defined in the template) will trigger a re render
def before_render
fetch_products
refresh_columns
end
# Element refers to the component the data is set on
def search_term
# Element is SearchInputComponent
@search_term = element.dataset['value']
end
def toggle_column
# Element is SelectorComponent
column = element.dataset['value']
@columns_selected = if @columns_selected.include?(column)
@columns_selected - [column]
else
@columns_selected + [column]
end
end
def click_sort
# Element is TableHeaderComponent
@sort = {
column: element.dataset['sort-value'],
direction: element.dataset['sort-direction'] == "asc" ? "desc" : "asc"
}
end
def toggle_per_page
# Element is SelectorComponent
selected = element.dataset['value'].to_i
@per_page_selected = [selected] if PER_PAGE_VALUE.include?(selected)
end
def toggle_category
# Element is SelectorWithFilterComponent
category_clicked = element.dataset['value']
@categories_selected = toggle_selector_with_filter(category_clicked, @categories_selected)
end
def toggle_producer
# Element is SelectorWithFilterComponent
producer_clicked = element.dataset['value']
@producers_selected = toggle_selector_with_filter(producer_clicked, @producers_selected)
end
def change_page
# Element is PaginationComponent
page = element.dataset['page'].to_i
@page = page if page > 0
end
private
def refresh_columns
@columns = @columns_selected.map do |column|
{
label: I18n.t("admin.products_page.columns.#{column}"),
value: column,
sortable: SORTABLE_COLUMNS.include?(column)
}
end.sort! { |a, b| a[:label] <=> b[:label] }
@columns.unshift(NAME_COLUMN)
end
def toggle_selector_with_filter(clicked, selected)
selected = if selected.include?(clicked)
selected - [clicked]
else
selected + [clicked]
end
if clicked == "all" || selected.empty?
selected = ["all"]
elsif selected.include?("all") && selected.length > 1
selected -= ["all"]
end
selected
end
def fetch_products
product_query = OpenFoodNetwork::Permissions.new(@user).editable_products.merge(product_scope)
@products = product_query.ransack(ransack_query).result
@pagy, @products = pagy(@products, items: @per_page_selected.first, page: @page)
end
def product_scope
scope = if @user.has_spree_role?("admin") || @user.enterprises.present?
Spree::Product
else
Spree::Product.active
end
scope.includes(product_query_includes)
end
def ransack_query
query = { s: "#{@sort[:column]} #{@sort[:direction]}" }
query = if @producers_selected.include?("all")
query.merge({ supplier_id_eq: "" })
else
query.merge({ supplier_id_in: @producers_selected })
end
query = query.merge({ name_cont: @search_term }) if @search_term.present?
if @categories_selected.include?("all")
query.merge({ primary_taxon_id_eq: "" })
else
query.merge({ primary_taxon_id_in: @categories_selected })
end
end
def product_query_includes
[
:image,
variants: [
:default_price,
:stock_locations,
:stock_items,
:variant_overrides
]
]
end
end

View File

@@ -1,21 +0,0 @@
= component_controller(class: "products-table") do
.products-table-form
.products-table-form_filter_results
= render(SearchInputComponent.new(value: @search_term, data: reflex_data_attributes(:search_term)))
.products-table-form_categories_selector
= render(SelectorWithFilterComponent.new(title: t("admin.products_page.filters.categories.title"), selected: @categories_selected, items: @categories, data: reflex_data_attributes(:toggle_category), selected_items_i18n_key: "admin.products_page.filters.categories.selected_categories"))
.products-table-form_producers_selector
= render(SelectorWithFilterComponent.new(title: t("admin.products_page.filters.producers.title"), selected: @producers_selected, items: @producers, data: reflex_data_attributes(:toggle_producer), selected_items_i18n_key: "admin.products_page.filters.producers.selected_producers"))
.products-table-form_per-page_selector
= render(SelectorComponent.new(title: t('admin.products_page.filters.per_page', count: @per_page_selected[0]), selected: @per_page_selected, items: @per_page, data: reflex_data_attributes(:toggle_per_page)))
.products-table-form_columns_selector
= render(SelectorComponent.new(title: t("admin.products_page.filters.columns"), selected: @columns_selected, items: @selectable_columns, data: reflex_data_attributes(:toggle_column)))
.products-table_table
%table
= render(TableHeaderComponent.new(columns: @columns, sort: @sort, data: reflex_data_attributes(:click_sort)))
%tbody
= render(ProductComponent.with_collection(@products, columns: @columns))
.products-table-form_pagination
= render(PaginationComponent.new(pagy: @pagy, data: reflex_data_attributes(:change_page)))

View File

@@ -1,47 +0,0 @@
.products-table {
.products-table-form {
display: grid;
grid-template-columns: repeat( auto-fit, minmax(250px, 1fr) );
grid-gap: 10px;
margin-bottom: 10px;
}
.products-table_table {
box-shadow: 0 10px 10px -1px rgb(0 0 0 / 10%);
}
.products-table-form_pagination {
position: relative;
top: -15px;
nav, .pagination {
margin-top: 0;
padding-top: 0;
}
}
}
.products-table.loading {
.products-table-form_pagination, .products-table_table {
position: relative;
&:before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(255, 255, 255, 0.5);
}
}
.products-table_table {
&:before {
background-position: center;
background-repeat: no-repeat;
background-size: 50px 50px;
background-image: url("../images/spinning-circles.svg");
}
}
}

View File

@@ -1,9 +0,0 @@
# frozen_string_literal: true
class SearchInputComponent < ViewComponentReflex::Component
def initialize(value: nil, data: {})
super
@value = value
@data = data
end
end

View File

@@ -1,5 +0,0 @@
= component_controller do
%div.search-input
%input{type: 'text', placeholder: t("components.search_input.placeholder"), id: 'search_query', data: {action: 'debounced:input->search-input#search'}, value: @value}
.search-button{data: @data}
%i.fa.fa-search

View File

@@ -1,23 +0,0 @@
.search-input {
border: 1px solid $disabled-light;
height: 3em;
display: flex;
line-height: 3em;
align-items: center;
input {
border: none;
height: 3em;
width: 100%;
box-sizing: border-box;
padding-right: 5px;
}
.search-button {
padding-right: 10px;
padding-left: 5px;
cursor: pointer;
color: $color-4;
}
}

View File

@@ -1,17 +0,0 @@
# frozen_string_literal: true
class SelectorComponent < ViewComponentReflex::Component
def initialize(title:, selected:, items:, data: {})
super
@title = title
@items = items.map do |item|
{
label: item[:label],
value: item[:value],
selected: selected.include?(item[:value])
}
end
@selected = selected
@data = data
end
end

View File

@@ -1,11 +0,0 @@
= component_controller do
.selector.selector-close
.selector-main{ data: { action: "click->selector#toggle" } }
.selector-main-title
= @title
.selector-arrow
.selector-wrapper
.selector-items
- @items.each do |item|
.selector-item{ class: ("selected" if item[:selected]), data: @data, "data-value": item[:value] }
= item[:label]

View File

@@ -1,86 +0,0 @@
.selector {
position: relative;
.selector-main {
border: 1px solid $disabled-light;
height: 3em;
position: relative;
cursor: pointer;
.selector-main-title {
line-height: 3em;
padding-left: 10px;
padding-right: 10px;
}
.selector-arrow {
position: absolute;
right: 0px;
height: 3em;
width: 1.5em;
top: -1px;
&:after {
content: "";
position: absolute;
top: 50%;
right: 5px;
margin-top: -5px;
width: 0;
height: 0;
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 5px solid $disabled-light;
}
}
}
.selector-wrapper {
position: absolute;
left: 0px;
right: 0px;
z-index: 1;
background-color: white;
margin-top: -1px;
border: 1px solid $disabled-light;
.selector-items {
overflow-y: auto;
min-height: 6em;
.selector-item {
padding-left: 10px;
padding-right: 10px;
border-bottom: 1px solid $disabled-light;
position: relative;
height: 3em;
line-height: 3em;
&:hover {
background-color: #eee;
cursor: pointer;
}
&:last-child {
border-bottom: none;
}
&.selected {
&:after {
content: "";
display: inline-block;
position: absolute;
right: 10px;
}
}
}
}
}
&.selector-close {
.selector-wrapper {
display: none;
}
}
}

View File

@@ -1,11 +0,0 @@
# frozen_string_literal: true
class SelectorWithFilterComponent < SelectorComponent
def initialize(title:, selected:, items:, data: {},
selected_items_i18n_key: 'components.selector_with_filter.selected_items')
super(title: title, selected: selected, items: items, data: data)
@selected_items = items.select { |item| @selected.include?(item[:value]) }
@selected_items_i18n_key = selected_items_i18n_key
@items = items
end
end

View File

@@ -1,22 +0,0 @@
= component_controller do
.super-selector.selector.selector-close
.selector-main{ data: { action: "click->selector-with-filter#toggle" } }
.super-selector-label
= @title
.super-selector-selected-items
- case @selected_items.length
- when 1, 2
- @selected_items.each do |item|
.super-selector-selected-item
= item[:label]
- else
.super-selector-selected-item
= t(@selected_items_i18n_key, count: @selected_items.length)
.selector-arrow
.selector-wrapper
.super-selector-search
%input{type: "text", placeholder: t("components.selector_with_filter.search_placeholder"), data: { action: "debounced:input->selector-with-filter#filter" } }
.selector-items
- @items.each do |item|
.selector-item{ class: ("selected" if item[:selected]), data: @data.merge({ "selector-with-filter-target": "items" }), "data-value": item[:value] }
= item[:label]

View File

@@ -1,51 +0,0 @@
.super-selector {
position: relative;
.selector-main {
.super-selector-label {
padding-left: 5px;
padding-right: 5px;
margin-left: 10px;
position: absolute;
top: -1em;
background-color: white;
}
}
.super-selector-selected-items {
margin-left: 5px;
margin-right: 2em;
margin-top: 7px;
display: flex;
.super-selector-selected-item {
border: 1px solid $pale-blue;
background-color: $spree-light-blue;
border-radius: 20px;
height: 2em;
padding-left: 10px;
padding-right: 10px;
display: inline-block;
margin-right: 5px;
padding-top: 2px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
.selector-wrapper {
.super-selector-search {
border-bottom: 1px solid $disabled-light;
padding: 10px 5px;
input {
border: 1px solid $disabled-light;
box-sizing: border-box;
border-radius: 4px;
width: 100%;
}
}
}
}

View File

@@ -1,10 +0,0 @@
# frozen_string_literal: true
class TableHeaderComponent < ViewComponentReflex::Component
def initialize(columns:, sort:, data: {})
super
@columns = columns
@sort = sort
@data = data
end
end

View File

@@ -1,7 +0,0 @@
= component_controller do
%thead.table-header
%tr
- @columns.each do |column|
%th{class: (column[:sortable] ? "th-sortable " : "" ) + (@sort[:column] == column[:value] ? " th-sorted-#{@sort[:direction]}" : ""), data: (@data if column[:sortable] == true), "data-sort-value": column[:value], "data-sort-direction": @sort[:direction]}
= column[:label]

View File

@@ -1,23 +0,0 @@
thead.table-header {
th {
&.th-sortable {
cursor: pointer;
}
&.th-sorted-asc, &.th-sorted-desc {
&:after {
display: inline-block;
padding-left: 10px;
}
}
&.th-sorted-asc {
&:after {
content: "";
}
}
&.th-sorted-desc {
&:after {
content: "";
}
}
}
}

View File

@@ -11,7 +11,7 @@ module Admin
respond_override update: { json: {
success: lambda {
tag_rule_mapping = TagRule.mapping_for(Enterprise.where(id: @customer.enterprise))
render_as_json @customer, tag_rule_mapping: tag_rule_mapping
render_as_json @customer, tag_rule_mapping:
},
failure: lambda {
render json: { errors: @customer.errors.full_messages },
@@ -25,7 +25,7 @@ module Admin
format.json do
render json: @collection,
each_serializer: ::Api::Admin::CustomerWithBalanceSerializer,
tag_rule_mapping: tag_rule_mapping,
tag_rule_mapping:,
customer_tags: customer_tags_by_id
end
end
@@ -42,7 +42,7 @@ module Admin
@customer.created_manually = true
if @customer.save
tag_rule_mapping = TagRule.mapping_for(Enterprise.where(id: @customer.enterprise))
render_as_json @customer, tag_rule_mapping: tag_rule_mapping
render_as_json @customer, tag_rule_mapping:
else
render json: { errors: @customer.errors.full_messages }, status: :bad_request
end

View File

@@ -48,7 +48,7 @@ module Admin
private
def load_enterprise_fee_set
@enterprise_fee_set = Sets::EnterpriseFeeSet.new collection: collection
@enterprise_fee_set = Sets::EnterpriseFeeSet.new collection:
end
def load_data
@@ -61,7 +61,7 @@ module Admin
when :for_order_cycle
order_cycle = OrderCycle.find_by(id: params[:order_cycle_id]) if params[:order_cycle_id]
coordinator = Enterprise.find_by(id: params[:coordinator_id]) if params[:coordinator_id]
order_cycle ||= OrderCycle.new(coordinator: coordinator) if coordinator.present?
order_cycle ||= OrderCycle.new(coordinator:) if coordinator.present?
enterprises = OpenFoodNetwork::OrderCyclePermissions.new(spree_current_user,
order_cycle).visible_enterprises
EnterpriseFee.for_enterprises(enterprises).order('enterprise_id', 'fee_type', 'name')

View File

@@ -39,7 +39,7 @@ module Admin
# The ! version is important to raise a RecordNotFound error.
def find_resource
permalink = params[:id] || params[:enterprise_group_id]
EnterpriseGroup.find_by!(permalink: permalink)
EnterpriseGroup.find_by!(permalink:)
end
private

View File

@@ -38,7 +38,7 @@ module Admin
format.html
format.json {
render_as_json @collection, ams_prefix: params[:ams_prefix],
spree_current_user: spree_current_user
spree_current_user:
}
end
end
@@ -47,12 +47,12 @@ module Admin
@object = Enterprise.where(permalink: params[:id]).
includes(users: [:ship_address, :bill_address]).first
@object.build_custom_tab if @object.custom_tab.nil?
if params[:stimulus]
@enterprise.is_primary_producer = params[:is_primary_producer]
@enterprise.sells = params[:enterprise_sells]
render cable_ready: cable_car.morph("#side_menu", partial("admin/shared/side_menu"))
.morph("#permalink", partial("admin/enterprises/form/permalink"))
end
return unless params[:stimulus]
@enterprise.is_primary_producer = params[:is_primary_producer]
@enterprise.sells = params[:enterprise_sells]
render cable_ready: cable_car.morph("#side_menu", partial("admin/shared/side_menu"))
.morph("#permalink", partial("admin/enterprises/form/permalink"))
end
def welcome
@@ -63,6 +63,7 @@ module Admin
tag_rules_attributes = params[object_name].delete :tag_rules_attributes
update_tag_rules(tag_rules_attributes) if tag_rules_attributes.present?
update_enterprise_notifications
update_vouchers
delete_custom_tab if params[:custom_tab] == 'false'
@@ -72,7 +73,7 @@ module Admin
format.html { redirect_to location_after_save }
format.js { render layout: false }
format.json {
render_as_json @object, ams_prefix: 'index', spree_current_user: spree_current_user
render_as_json @object, ams_prefix: 'index', spree_current_user:
}
end
else
@@ -125,7 +126,7 @@ module Admin
json: @collection,
each_serializer: Api::Admin::ForOrderCycle::EnterpriseSerializer,
order_cycle: @order_cycle,
spree_current_user: spree_current_user
spree_current_user:
)
end
end
@@ -135,7 +136,7 @@ module Admin
respond_to do |format|
format.json do
render_as_json @collection, ams_prefix: params[:ams_prefix] || 'basic',
spree_current_user: spree_current_user
spree_current_user:
end
end
end
@@ -182,7 +183,7 @@ module Admin
when :for_order_cycle
@order_cycle = OrderCycle.find_by(id: params[:order_cycle_id]) if params[:order_cycle_id]
coordinator = Enterprise.find_by(id: params[:coordinator_id]) if params[:coordinator_id]
@order_cycle ||= OrderCycle.new(coordinator: coordinator) if coordinator.present?
@order_cycle ||= OrderCycle.new(coordinator:) if coordinator.present?
enterprises = OpenFoodNetwork::OrderCyclePermissions.new(spree_current_user, @order_cycle)
.visible_enterprises
@@ -263,32 +264,44 @@ module Admin
def update_enterprise_notifications
user_id = params[:receives_notifications].to_i
if user_id.positive? && @enterprise.user_ids.include?(user_id)
@enterprise.update_contact(user_id)
end
return unless user_id.positive? && @enterprise.user_ids.include?(user_id)
@enterprise.update_contact(user_id)
end
def update_vouchers
params_voucher_ids = params[:enterprise][:voucher_ids].to_a.map(&:to_i)
voucher_ids = @enterprise.vouchers.map(&:id)
deleted_voucher_ids = @enterprise.vouchers.only_deleted.map(&:id)
vouchers_to_destroy = voucher_ids - params_voucher_ids
Voucher.where(id: vouchers_to_destroy).destroy_all if vouchers_to_destroy.present?
vouchers_to_restore = deleted_voucher_ids.intersection(params_voucher_ids)
Voucher.restore(vouchers_to_restore) if vouchers_to_restore.present?
end
def create_calculator_for(rule, attrs)
if attrs[:calculator_type].present? && attrs[:calculator_attributes].present?
rule.update(calculator_type: attrs[:calculator_type])
attrs[:calculator_attributes].merge!( id: rule.calculator.id )
end
return unless attrs[:calculator_type].present? && attrs[:calculator_attributes].present?
rule.update(calculator_type: attrs[:calculator_type])
attrs[:calculator_attributes].merge!( id: rule.calculator.id )
end
def check_can_change_bulk_sells
unless spree_current_user.admin?
params[:sets_enterprise_set][:collection_attributes].each do |_i, enterprise_params|
unless spree_current_user == Enterprise.find_by(id: enterprise_params[:id]).owner
enterprise_params.delete :sells
end
return if spree_current_user.admin?
params[:sets_enterprise_set][:collection_attributes].each do |_i, enterprise_params|
unless spree_current_user == Enterprise.find_by(id: enterprise_params[:id]).owner
enterprise_params.delete :sells
end
end
end
def check_can_change_sells
unless spree_current_user.admin? || spree_current_user == @enterprise.owner
enterprise_params.delete :sells
end
return if spree_current_user.admin? || spree_current_user == @enterprise.owner
enterprise_params.delete :sells
end
def override_owner
@@ -296,31 +309,31 @@ module Admin
end
def override_sells
unless spree_current_user.admin?
has_hub = spree_current_user.owned_enterprises.is_hub.any?
new_enterprise_is_producer = Enterprise.new(enterprise_params).is_primary_producer
enterprise_params[:sells] = has_hub && !new_enterprise_is_producer ? 'any' : 'none'
end
return if spree_current_user.admin?
has_hub = spree_current_user.owned_enterprises.is_hub.any?
new_enterprise_is_producer = Enterprise.new(enterprise_params).is_primary_producer
enterprise_params[:sells] = has_hub && !new_enterprise_is_producer ? 'any' : 'none'
end
def check_can_change_owner
unless ( spree_current_user == @enterprise.owner ) || spree_current_user.admin?
return if ( spree_current_user == @enterprise.owner ) || spree_current_user.admin?
enterprise_params.delete :owner_id
end
def check_can_change_bulk_owner
return if spree_current_user.admin?
bulk_params[:collection_attributes].each do |_i, enterprise_params|
enterprise_params.delete :owner_id
end
end
def check_can_change_bulk_owner
unless spree_current_user.admin?
bulk_params[:collection_attributes].each do |_i, enterprise_params|
enterprise_params.delete :owner_id
end
end
end
def check_can_change_managers
unless ( spree_current_user == @enterprise.owner ) || spree_current_user.admin?
enterprise_params.delete :user_ids
end
return if ( spree_current_user == @enterprise.owner ) || spree_current_user.admin?
enterprise_params.delete :user_ids
end
def strip_new_properties

View File

@@ -182,17 +182,17 @@ module Admin
end
def load_data_for_index
if json_request?
# Split ransack params into all those that currently exist and new ones
# to limit returned ocs to recent or undated
orders_close_at_gt = raw_params[:q]&.delete(:orders_close_at_gt) || 31.days.ago
raw_params[:q] = {
g: [raw_params.delete(:q) || {}, { m: 'or',
orders_close_at_gt: orders_close_at_gt,
orders_close_at_null: true }]
}
@collection = collection
end
return unless json_request?
# Split ransack params into all those that currently exist and new ones
# to limit returned ocs to recent or undated
orders_close_at_gt = raw_params[:q]&.delete(:orders_close_at_gt) || 31.days.ago
raw_params[:q] = {
g: [raw_params.delete(:q) || {}, { m: 'or',
orders_close_at_gt:,
orders_close_at_null: true }]
}
@collection = collection
end
def redirect_to_after_update_path
@@ -245,10 +245,10 @@ module Admin
order_cycle_params.delete :coordinator_id
unless Enterprise.managed_by(spree_current_user).include?(@order_cycle.coordinator)
order_cycle_params.delete_if do |k, _v|
[:name, :orders_open_at, :orders_close_at].include? k.to_sym
end
return if Enterprise.managed_by(spree_current_user).include?(@order_cycle.coordinator)
order_cycle_params.delete_if do |k, _v|
[:name, :orders_open_at, :orders_close_at].include? k.to_sym
end
end

View File

@@ -56,9 +56,9 @@ module Admin
private
def validate_upload_presence
unless params[:file] || (params[:filepath] && File.exist?(params[:filepath]))
redirect_to '/admin/product_import', notice: I18n.t(:product_import_file_not_found_notice)
end
return if params[:file] || (params[:filepath] && File.exist?(params[:filepath]))
redirect_to '/admin/product_import', notice: I18n.t(:product_import_file_not_found_notice)
end
def process_data(method)
@@ -90,11 +90,11 @@ module Admin
end
def check_spreadsheet_has_data(importer)
unless importer.item_count
redirect_to '/admin/product_import',
notice: I18n.t(:product_import_no_data_in_spreadsheet_notice)
true
end
return if importer.item_count
redirect_to '/admin/product_import',
notice: I18n.t(:product_import_no_data_in_spreadsheet_notice)
true
end
def save_uploaded_file(upload)

View File

@@ -1,7 +0,0 @@
# frozen_string_literal: true
module Admin
class ProductsController < Spree::Admin::BaseController
def index; end
end
end

View File

@@ -13,7 +13,7 @@ module Admin
if @proxy_order.cancel
render_as_json @proxy_order
else
render json: { errors: [t('admin.proxy_orders.cancel.could_not_cancel_the_order')] },
render json: { errors: [t('.could_not_cancel_the_order')] },
status: :unprocessable_entity
end
end
@@ -22,7 +22,7 @@ module Admin
if @proxy_order.resume
render_as_json @proxy_order
else
render json: { errors: [t('admin.proxy_orders.resume.could_not_resume_the_order')] },
render json: { errors: [t('.could_not_resume_the_order')] },
status: :unprocessable_entity
end
end

View File

@@ -55,6 +55,15 @@ module Admin
@report_title = report_title
@rendering_options = rendering_options
@data = Reporting::FrontendData.new(spree_current_user)
variant_id_in = params[:variant_id_in]&.compact_blank
load_selected_variant if variant_id_in.present?
end
# Orders and Fulfillment Reports include a per product filter, load any selected product
def load_selected_variant
variant = Spree::Variant.find(params[:variant_id_in][0])
@variant_serialized = Api::Admin::VariantSerializer.new(variant)
end
def render_data?
@@ -74,8 +83,8 @@ module Admin
blob = ReportBlob.create_for_upload_later!(report_filename)
ReportJob.perform_later(
report_class: report_class, user: spree_current_user, params: params,
format: format, blob: blob, channel: ScopedChannel.for_id(params[:uuid]),
report_class:, user: spree_current_user, params:,
format:, blob:, channel: ScopedChannel.for_id(params[:uuid]),
)
head :no_content

View File

@@ -24,18 +24,6 @@ module Admin
end
end
def update
if @object.update(permitted_resource_params)
flash[:success] = flash_message_for(@object, :successfully_updated)
respond_with(@object) do |format|
format.html { redirect_to location_after_save }
format.js { render layout: false }
end
else
respond_with(@object)
end
end
def create
@object.attributes = permitted_resource_params
if @object.save
@@ -49,9 +37,21 @@ module Admin
end
end
def update
if @object.update(permitted_resource_params)
flash[:success] = flash_message_for(@object, :successfully_updated)
respond_with(@object) do |format|
format.html { redirect_to location_after_save }
format.js { render layout: false }
end
else
respond_with(@object)
end
end
def update_positions
params[:positions].each do |id, index|
model_class.where(id: id).update_all(position: index)
model_class.where(id:).update_all(position: index)
end
respond_to do |format|

View File

@@ -8,15 +8,13 @@ module Admin
include PaperTrailLogging
before_action :adapt_params, only: [:update]
before_action :editable_order_cycle_ids_for_create, only: [:create]
before_action :editable_order_cycle_ids_for_update, only: [:update]
before_action :check_dependent_subscriptions, only: [:destroy]
after_action :sync_subscriptions_for_update, only: :update
respond_to :json
respond_override create: { json: {
OVERRIDE_RESPONSE = { json: {
success: lambda {
render_as_json @schedule,
editable_schedule_ids: permissions.editable_schedules.pluck(:id)
@@ -25,17 +23,10 @@ module Admin
render json: { errors: @schedule.errors.full_messages },
status: :unprocessable_entity
}
} }
respond_override update: { json: {
success: lambda {
render_as_json @schedule,
editable_schedule_ids: permissions.editable_schedules.pluck(:id)
},
failure: lambda {
render json: { errors: @schedule.errors.full_messages },
status: :unprocessable_entity
}
} }
} }.freeze
respond_override create: OVERRIDE_RESPONSE
respond_override update: OVERRIDE_RESPONSE
def index
respond_to do |format|
@@ -50,22 +41,23 @@ module Admin
end
def create
return respond_with(@schedule) if params[:order_cycle_ids].blank?
@schedule.attributes = permitted_resource_params
if @schedule.save
@schedule.order_cycle_ids = params[:order_cycle_ids]
@schedule.save!
sync_subscriptions_for_create
@schedule_form = ScheduleForm.new(params, spree_current_user, @schedule)
if @schedule_form.save
flash[:success] = flash_message_for(@schedule, :successfully_created)
@existing_order_cycle_ids = []
sync_subscriptions_for_create
end
respond_with(@schedule)
end
def update
@existing_order_cycle_ids = @schedule.order_cycle_ids
@object = ScheduleForm.new(params, spree_current_user, @schedule)
super
end
private
def collection
@@ -96,37 +88,6 @@ module Admin
params[:schedule][:order_cycle_ids] = params[:order_cycle_ids]
end
def editable_order_cycle_ids_for_create
return unless params[:order_cycle_ids]
@existing_order_cycle_ids = []
result = editable_order_cycles(params[:order_cycle_ids])
params[:order_cycle_ids] = result
end
def editable_order_cycle_ids_for_update
return unless params[:schedule][:order_cycle_ids]
@existing_order_cycle_ids = @schedule.order_cycle_ids
result = editable_order_cycles(params[:schedule][:order_cycle_ids])
params[:schedule][:order_cycle_ids] = result
@schedule.order_cycle_ids = result
end
def editable_order_cycles(requested)
permitted = OrderCycle
.where(id: params[:order_cycle_ids] | @existing_order_cycle_ids)
.merge(OrderCycle.managed_by(spree_current_user))
.pluck(:id)
result = @existing_order_cycle_ids
result |= (requested & permitted) # add any requested & permitted ids
# remove any existing and permitted ids that were not specifically requested
result -= ((result & permitted) - requested)
result
end
def check_dependent_subscriptions
return if Subscription.where(schedule_id: @schedule).empty?
@@ -140,14 +101,14 @@ module Admin
@permissions = OpenFoodNetwork::Permissions.new(spree_current_user)
end
def sync_subscriptions_for_update
return unless params[:schedule][:order_cycle_ids] && @object.errors.blank?
def sync_subscriptions_for_create
return unless params[:order_cycle_ids]
sync_subscriptions
end
def sync_subscriptions_for_create
return unless params[:order_cycle_ids]
def sync_subscriptions_for_update
return unless params[:schedule][:order_cycle_ids] && @schedule.errors.blank?
sync_subscriptions
end
@@ -155,6 +116,7 @@ module Admin
def sync_subscriptions
removed_ids = @existing_order_cycle_ids - @schedule.order_cycle_ids
new_ids = @schedule.order_cycle_ids - @existing_order_cycle_ids
return unless removed_ids.any? || new_ids.any?
subscriptions = Subscription.where(schedule_id: @schedule)

View File

@@ -21,7 +21,7 @@ module Admin
def update
Spree::Config.set(settings_params.to_h)
resource = t('admin.controllers.stripe_connect_settings.resource')
flash[:success] = t(:successfully_updated, resource: resource)
flash[:success] = t(:successfully_updated, resource:)
redirect_to_edit
end

View File

@@ -9,19 +9,33 @@ module Admin
end
def create
@voucher = Voucher.create(permitted_resource_params.merge(enterprise: @enterprise))
@voucher = Voucher.new(
permitted_resource_params.merge(enterprise: @enterprise)
)
if @voucher.save
flash[:success] = flash_message_for(@voucher, :successfully_created)
flash[:success] = I18n.t(:successfully_created, resource: "Voucher")
redirect_to edit_admin_enterprise_path(@enterprise, anchor: :vouchers_panel)
else
flash[:error] = @voucher.errors.full_messages.to_sentence
render :new
render_error
end
rescue ActiveRecord::SubclassNotFound
@voucher.errors.add(:type)
render_error
rescue ActiveRecord::RecordNotUnique
# Rails unique validation doesn't work with soft deleted object, so we rescue the database
# exception to display a nice message to the user
@voucher.errors.add(:code, :taken)
render_error
end
private
def render_error
flash[:error] = @voucher.errors.full_messages.to_sentence
render :new
end
def load_enterprise
@enterprise = OpenFoodNetwork::Permissions
.new(spree_current_user)
@@ -30,7 +44,7 @@ module Admin
end
def permitted_resource_params
params.require(:voucher).permit(:code, :amount)
params.require(:voucher).permit(:code, :amount, :type)
end
end
end

View File

@@ -21,7 +21,7 @@ module Api
@enterprise.update!(attachment_name => nil)
render json: @enterprise,
serializer: Admin::EnterpriseSerializer,
spree_current_user: spree_current_user
spree_current_user:
end
protected

View File

@@ -5,11 +5,6 @@ module Api
class OrdersController < Api::V0::BaseController
include PaginationData
def show
authorize! :read, order
render json: order, serializer: Api::OrderDetailedSerializer, current_order: order
end
def index
authorize! :admin, Spree::Order
@@ -26,6 +21,11 @@ module Api
}
end
def show
authorize! :read, order
render json: order, serializer: Api::OrderDetailedSerializer, current_order: order
end
def update
authorize! :admin, order

View File

@@ -13,7 +13,7 @@ module Api
skip_authorization_check only: [:show, :bulk_products, :overridable]
def show
@product = find_product(params[:id])
@product = product_finder.find_product
render json: @product, serializer: Api::Admin::ProductSerializer
end
@@ -30,7 +30,7 @@ module Api
def update
authorize! :update, Spree::Product
@product = find_product(params[:id])
@product = product_finder.find_product
if @product.update(product_params)
render json: @product, serializer: Api::Admin::ProductSerializer, status: :ok
else
@@ -40,36 +40,20 @@ module Api
def destroy
authorize! :delete, Spree::Product
@product = find_product(params[:id])
@product = product_finder.find_product
authorize! :delete, @product
@product.destroy
render json: @product, serializer: Api::Admin::ProductSerializer, status: :no_content
end
def bulk_products
product_query = OpenFoodNetwork::Permissions.
new(current_api_user).
editable_products.
merge(product_scope)
if params[:import_date].present?
product_query = product_query.
imported_on(params[:import_date]).
group_by_products_id
end
@products = product_query.
ransack(query_params_with_defaults).
result
@products = product_finder.bulk_products
render_paged_products @products
end
def overridable
producer_ids = OpenFoodNetwork::Permissions.new(current_api_user).
variant_override_producers.by_name.select('enterprises.id')
@products = paged_products_for_producers producer_ids
@products = product_finder.paged_products_for_producers
render_paged_products @products, ::Api::Admin::ProductSimpleSerializer
end
@@ -78,7 +62,7 @@ module Api
#
def clone
authorize! :create, Spree::Product
original_product = find_product(params[:product_id])
original_product = product_finder.find_product_to_be_cloned
authorize! :update, original_product
@product = original_product.duplicate
@@ -88,37 +72,8 @@ module Api
private
def find_product(id)
product_scope.find(id)
end
def product_scope
if current_api_user.has_spree_role?("admin") || current_api_user.enterprises.present?
scope = Spree::Product
if params[:show_deleted]
scope = scope.with_deleted
end
else
scope = Spree::Product.active
end
scope.includes(product_query_includes)
end
def product_query_includes
[
image: { attachment_attachment: :blob },
variants: [:default_price, :stock_locations, :stock_items, :variant_overrides]
]
end
def paged_products_for_producers(producer_ids)
Spree::Product.where(nil).
merge(product_scope).
includes(variants: [:product, :default_price, :stock_items]).
where(supplier_id: producer_ids).
by_producer.by_name.
ransack(params[:q]).result
def product_finder
ProductScopeQuery.new(current_api_user, params)
end
def render_paged_products(products, product_serializer = ::Api::Admin::ProductSerializer)
@@ -135,10 +90,6 @@ module Api
}
end
def query_params_with_defaults
(params[:q] || {}).reverse_merge(s: 'created_at desc')
end
def product_params
@product_params ||=
params.permit(product: PermittedAttributes::Product.attributes)[:product].to_h

View File

@@ -44,14 +44,16 @@ module Api
def ready
authorize! :read, Spree::Shipment
unless @shipment.ready?
if @shipment.can_ready?
@shipment.ready!
else
render(json: { error: I18n.t(:cannot_ready, scope: "spree.api.shipment") },
status: :unprocessable_entity) && return
end
unless @shipment.ready? || @shipment.can_ready?
return render(
json: { error: I18n.t(:cannot_ready, scope: "spree.api.shipment") },
status: :unprocessable_entity
)
end
@shipment.ready! unless @shipment.ready?
render json: @shipment, serializer: Api::ShipmentSerializer, status: :ok
end
@@ -108,7 +110,7 @@ module Api
end
def get_or_create_shipment(stock_location_id)
@order.shipment || @order.shipments.create(stock_location_id: stock_location_id)
@order.shipment || @order.shipments.create(stock_location_id:)
end
def shipment_params

View File

@@ -69,14 +69,14 @@ module Api
end
def missing_parameter(error)
message = I18n.t(:missing_parameter, param: error.param, scope: :api)
message = I18n.t('api.missing_parameter', param: error.param)
render status: :unprocessable_entity,
json: json_api_error(message)
end
def unpermitted_parameters(error)
message = I18n.t(:unpermitted_parameters, params: error.params.join(", "), scope: :api)
message = I18n.t('api.unpermitted_parameters', params: error.params.join(", "))
render status: :unprocessable_entity,
json: json_api_error(message)

View File

@@ -115,25 +115,25 @@ class ApplicationController < ActionController::Base
end
def require_distributor_chosen
unless (@distributor = current_distributor)
redirect_to main_app.root_path
false
end
return if (@distributor = current_distributor)
redirect_to main_app.root_path
false
end
def require_order_cycle
unless current_order_cycle
redirect_to main_app.shop_path
end
return if current_order_cycle
redirect_to main_app.shop_path
end
def check_hub_ready_for_checkout
if current_distributor_closed?
current_order.empty!
current_order.set_distribution! nil, nil
flash[:info] = I18n.t('order_cycles_closed_for_hub')
redirect_to main_app.root_url
end
return unless current_distributor_closed?
current_order.empty!
current_order.set_distribution! nil, nil
flash[:info] = I18n.t('order_cycles_closed_for_hub')
redirect_to main_app.root_url
end
def current_distributor_closed?

View File

@@ -0,0 +1,47 @@
# frozen_string_literal: true
module CheckoutSteps
extend ActiveSupport::Concern
private
def summary_step?
params[:step] == "summary"
end
def payment_step?
params[:step] == "payment"
end
def redirect_to_step_based_on_order
case @order.state
when "cart", "address", "delivery"
redirect_to checkout_step_path(:details)
when "payment"
redirect_to checkout_step_path(:payment)
when "confirmation"
redirect_to checkout_step_path(:summary)
else
redirect_to order_path(@order, order_token: @order.token)
end
end
def redirect_to_step
case params[:step]
when "details"
return redirect_to checkout_step_path(:payment)
when "payment"
return redirect_to checkout_step_path(:summary)
end
redirect_to_step_based_on_order
end
def check_step
case @order.state
when "cart", "address", "delivery"
redirect_to checkout_step_path(:details) unless params[:step] == "details"
when "payment"
redirect_to checkout_step_path(:payment) if params[:step] == "summary"
end
end
end

View File

@@ -5,11 +5,11 @@ module ExtraFields
extend ActiveSupport::Concern
def invalid_query_param(name, status, msg)
render status: status, json: json_api_error(msg, error_options:
render status:, json: json_api_error(msg, error_options:
{
title: I18n.t("api.query_param.error.title"),
source: { parameter: name },
status: status,
status:,
code: Rack::Utils::SYMBOL_TO_STATUS_CODE[status]
})
end

View File

@@ -5,7 +5,7 @@ module ManagerInvitations
def create_new_manager(email, enterprise)
password = Devise.friendly_token
new_user = Spree::User.create(email: email, unconfirmed_email: email, password: password)
new_user = Spree::User.create(email:, unconfirmed_email: email, password:)
new_user.reset_password_token = Devise.friendly_token
# Same time as used in Devise's lib/devise/models/recoverable.rb.
new_user.reset_password_sent_at = Time.now.utc

View File

@@ -74,8 +74,8 @@ module ReportsActions
def rendering_options
@rendering_options ||= ReportRenderingOptions.where(
user: spree_current_user,
report_type: report_type,
report_subtype: report_subtype
report_type:,
report_subtype:
).first_or_create do |report_rendering_options|
report_rendering_options.options = {
fields_to_show: if request.get?

View File

@@ -16,7 +16,7 @@ module RequestTimeouts
respond_to do |type|
type.html {
render status: :gateway_timeout,
file: Rails.root.join("public/500.html"),
file: Rails.public_path.join('500.html'),
formats: [:html],
layout: nil
}

View File

@@ -9,7 +9,7 @@ class ErrorsController < ApplicationController
event.add_metadata(:request, request.env)
end
render status: :not_found
render status: :not_found, formats: :html
end
def internal_server_error

View File

@@ -4,14 +4,14 @@ class HomeController < BaseController
layout 'darkswarm'
def index
if ContentConfig.home_show_stats
@num_distributors = cached_count('distributors', Enterprise.is_distributor.activated.visible)
@num_producers = cached_count('producers', Enterprise.is_primary_producer.activated.visible)
@num_orders = cached_count('orders', Spree::Order.complete)
@num_users = cached_count(
'users', Spree::Order.complete.select('DISTINCT spree_orders.user_id')
)
end
return unless ContentConfig.home_show_stats
@num_distributors = cached_count('distributors', Enterprise.is_distributor.activated.visible)
@num_producers = cached_count('producers', Enterprise.is_primary_producer.activated.visible)
@num_orders = cached_count('orders', Spree::Order.complete)
@num_users = cached_count(
'users', Spree::Order.complete.select('DISTINCT spree_orders.user_id')
)
end
def sell; end

View File

@@ -31,7 +31,7 @@ class LineItemsController < BaseController
def unauthorized
status = spree_current_user ? 403 : 401
render(body: nil, status: status) && return
render(body: nil, status:) && return
end
def not_found

View File

@@ -50,7 +50,7 @@ module PaymentGateways
payer_id: params[:PayerID]
),
amount: @order.total,
payment_method: payment_method
payment_method:
)
process_payment_completion!

View File

@@ -8,6 +8,7 @@ class SplitCheckoutController < ::BaseController
include OrderStockCheck
include Spree::BaseHelper
include CheckoutCallbacks
include CheckoutSteps
include OrderCompletion
include CablecarResponses
include WhiteLabel
@@ -50,60 +51,13 @@ class SplitCheckoutController < ::BaseController
private
def render_error
flash.now[:error] ||= I18n.t(
'split_checkout.errors.saving_failed',
messages: order_error_messages
)
flash.now[:error] ||= I18n.t('split_checkout.errors.saving_failed')
render status: :unprocessable_entity, cable_ready: cable_car.
replace("#checkout", partial("split_checkout/checkout")).
replace("#flashes", partial("shared/flashes", locals: { flashes: flash }))
end
def order_error_messages
# Remove ship_address.* errors if no shipping method is not selected
remove_ship_address_errors if no_ship_address_needed?
# Reorder errors to make sure the most important ones are shown first
# and finally, return the error messages to sentence
reorder_errors.map(&:full_message).to_sentence
end
def no_ship_address_needed?
@order.errors[:shipping_method].present? || params[:ship_address_same_as_billing] == "1"
end
def remove_ship_address_errors
@order.errors.delete("ship_address.firstname")
@order.errors.delete("ship_address.address1")
@order.errors.delete("ship_address.city")
@order.errors.delete("ship_address.phone")
@order.errors.delete("ship_address.lastname")
@order.errors.delete("ship_address.zipcode")
end
def reorder_errors
@order.errors.sort_by do |e|
case e.attribute
when /email/i then 0
when /phone/i then 1
when /bill_address/i then 2 + bill_address_error_order(e)
else 20
end
end
end
def bill_address_error_order(error)
case error.attribute
when /firstname/i then 0
when /lastname/i then 1
when /address1/i then 2
when /city/i then 3
when /zipcode/i then 4
else 5
end
end
def check_payments_adjustments
@order.payments.each(&:ensure_correct_adjustment)
end
@@ -114,7 +68,7 @@ class SplitCheckoutController < ::BaseController
def confirm_order
return unless summary_step? && @order.confirmation?
return unless validate_summary! && @order.errors.empty?
return unless validate_current_step
@order.customer.touch :terms_and_conditions_accepted_at
@@ -140,48 +94,15 @@ class SplitCheckoutController < ::BaseController
def update_order
return if params[:confirm_order] || @order.errors.any?
# If we have "pick up" shipping method (require_ship_address is set to false), use the
# distributor address as shipping address
use_shipping_address_from_distributor if shipping_method_ship_address_not_required?
@order.select_shipping_method(params[:shipping_method_id])
@order.update(order_params)
@order.update_totals_and_states
validate_current_step!
@order.errors.empty?
validate_current_step
end
def use_shipping_address_from_distributor
@order.ship_address = @order.address_from_distributor
# Add the missing data
bill_address = params[:order][:bill_address_attributes]
@order.ship_address.firstname = bill_address[:firstname]
@order.ship_address.lastname = bill_address[:lastname]
@order.ship_address.phone = bill_address[:phone]
# Remove shipping address from parameter so we don't override the address we just set
params[:order].delete(:ship_address_attributes)
end
def shipping_method_ship_address_not_required?
selected_shipping_method = available_shipping_methods&.select do |sm|
sm.id.to_s == params[:shipping_method_id]
end
return false if selected_shipping_method.empty?
selected_shipping_method.first.require_ship_address == false
end
def summary_step?
params[:step] == "summary"
end
def payment_step?
params[:step] == "payment"
def validate_current_step
Checkout::Validation.new(@order, params).call && @order.errors.empty?
end
def advance_order_state
@@ -190,64 +111,7 @@ class SplitCheckoutController < ::BaseController
OrderWorkflow.new(@order).advance_checkout(raw_params.slice(:shipping_method_id))
end
def validate_current_step!
step = ([params[:step]] & ["details", "payment", "summary"]).first
send("validate_#{step}!")
end
def validate_details!
return true if params[:shipping_method_id].present?
@order.errors.add :shipping_method, I18n.t('split_checkout.errors.select_a_shipping_method')
end
def validate_payment!
return true if params.dig(:order, :payments_attributes, 0, :payment_method_id).present?
return true if @order.zero_priced_order?
@order.errors.add :payment_method, I18n.t('split_checkout.errors.select_a_payment_method')
end
def validate_summary!
return true if params[:accept_terms]
return true unless TermsOfService.required?(@order.distributor)
@order.errors.add(:terms_and_conditions, t("split_checkout.errors.terms_not_accepted"))
end
def order_params
@order_params ||= Checkout::Params.new(@order, params, spree_current_user).call
end
def redirect_to_step_based_on_order
case @order.state
when "cart", "address", "delivery"
redirect_to checkout_step_path(:details)
when "payment"
redirect_to checkout_step_path(:payment)
when "confirmation"
redirect_to checkout_step_path(:summary)
else
redirect_to order_path(@order, order_token: @order.token)
end
end
def redirect_to_step
case params[:step]
when "details"
return redirect_to checkout_step_path(:payment)
when "payment"
return redirect_to checkout_step_path(:summary)
end
redirect_to_step_based_on_order
end
def check_step
case @order.state
when "cart", "address", "delivery"
redirect_to checkout_step_path(:details) unless params[:step] == "details"
when "payment"
redirect_to checkout_step_path(:payment) if params[:step] == "summary"
end
end
end

View File

@@ -20,6 +20,10 @@ module Spree
render layout: !request.xhr?
end
def edit
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
end
def create
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
set_viewable
@@ -34,10 +38,6 @@ module Spree
end
end
def edit
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
end
def update
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
set_viewable

View File

@@ -10,57 +10,24 @@ module Spree
authorize! :invoice, @order
end
def create
Spree::Order.where(id: params[:order_ids]).find_each do |order|
authorize! :invoice, order
end
invoice_service = BulkInvoiceService.new
invoice_service.start_pdf_job(params[:order_ids])
def show
invoice_id = params[:id]
invoice_pdf = filepath(invoice_id)
render json: invoice_service.id, status: :ok
send_file(invoice_pdf, type: 'application/pdf', disposition: :inline)
end
def generate
@order = Order.find_by(number: params[:order_id])
authorize! :invoice, @order
@comparator = OrderInvoiceComparator.new(@order)
if @comparator.can_generate_new_invoice?
@order.invoices.create!(
date: Time.zone.today,
number: @order.invoices.count + 1,
data: invoice_data
)
elsif @comparator.can_update_latest_invoice?
@order.invoices.last.update!(
date: Time.zone.today,
data: invoice_data
)
end
OrderInvoiceGenerator.new(@order).generate_or_update_latest_invoice
redirect_back(fallback_location: spree.admin_dashboard_path)
end
def show
invoice_id = params[:id]
invoice_pdf = BulkInvoiceService.new.filepath(invoice_id)
private
send_file(invoice_pdf, type: 'application/pdf', disposition: :inline)
end
def poll
invoice_id = params[:invoice_id]
if BulkInvoiceService.new.invoice_created? invoice_id
render json: { created: true }, status: :ok
else
render json: { created: false }, status: :unprocessable_entity
end
end
protected
def invoice_data
@invoice_data ||= InvoiceDataGenerator.new(@order).generate
def filepath(invoice_id)
"tmp/invoices/#{invoice_id}.pdf"
end
end
end

View File

@@ -23,7 +23,7 @@ module Spree
flash[:error] = Spree.t('admin.mail_methods.testmail.delivery_error')
end
rescue StandardError => e
flash[:error] = Spree.t('admin.mail_methods.testmail.error') % { e: e }
flash[:error] = Spree.t('admin.mail_methods.testmail.error') % ({ e: })
ensure
redirect_to spree.edit_admin_mail_methods_url
end

View File

@@ -43,8 +43,8 @@ module Spree
def build_addresses
country_id = Address.default.country.id
@order.build_bill_address(country_id: country_id) if @order.bill_address.nil?
@order.build_ship_address(country_id: country_id) if @order.ship_address.nil?
@order.build_bill_address(country_id:) if @order.bill_address.nil?
@order.build_ship_address(country_id:) if @order.ship_address.nil?
end
def refresh_shipment_rates

View File

@@ -90,7 +90,8 @@ module Spree
end
def invoice
Spree::OrderMailer.invoice_email(@order.id).deliver_later
Spree::OrderMailer.invoice_email(@order.id,
current_user_id: spree_current_user.id ).deliver_later
flash[:success] = t('admin.orders.invoice_email_sent')
respond_with(@order) { |format|
@@ -99,11 +100,16 @@ module Spree
end
def print
if OpenFoodNetwork::FeatureToggle.enabled?(:invoices)
@order = @order.invoices.find(params[:invoice_id]).presenter
if OpenFoodNetwork::FeatureToggle.enabled?(:invoices, spree_current_user)
@order = if params[:invoice_id].present?
@order.invoices.find(params[:invoice_id]).presenter
else
OrderInvoiceGenerator.new(@order).generate_or_update_latest_invoice
@order.invoices.first.presenter
end
end
render_with_wicked_pdf InvoiceRenderer.new.args(@order)
render_with_wicked_pdf InvoiceRenderer.new.args(@order, spree_current_user)
end
private

View File

@@ -16,8 +16,22 @@ module Spree
before_action :load_spree_api_key, only: [:index, :variant_overrides]
before_action :strip_new_properties, only: [:create, :update]
def index
@current_user = spree_current_user
@show_latest_import = params[:latest_import] || false
end
def show
session[:return_to] ||= request.referer
redirect_to( action: :edit )
end
def new
@object.shipping_category = DefaultShippingCategory.find_or_create
@object.shipping_category_id = DefaultShippingCategory.find_or_create.id
end
def edit
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
end
def create
@@ -35,20 +49,6 @@ module Spree
end
end
def show
session[:return_to] ||= request.referer
redirect_to( action: :edit )
end
def index
@current_user = spree_current_user
@show_latest_import = params[:latest_import] || false
end
def edit
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
end
def update
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
@@ -180,7 +180,7 @@ module Spree
select('DISTINCT spree_variants.import_date').
joins(:product).
where('spree_products.supplier_id IN (?)', editable_enterprises.collect(&:id)).
where('spree_variants.import_date IS NOT NULL').
where.not(spree_variants: { import_date: nil }).
where(spree_variants: { deleted_at: nil }).
order('spree_variants.import_date DESC')
end

View File

@@ -5,6 +5,12 @@ module Spree
class TaxonsController < Spree::Admin::BaseController
respond_to :html, :json, :js
def edit
@taxonomy = Taxonomy.find(params[:taxonomy_id])
@taxon = @taxonomy.taxons.find(params[:id])
@permalink_part = @taxon.permalink.split("/").last
end
def create
@taxonomy = Taxonomy.find(params[:taxonomy_id])
@taxon = @taxonomy.taxons.build(params[:taxon])
@@ -26,12 +32,6 @@ module Spree
end
end
def edit
@taxonomy = Taxonomy.find(params[:taxonomy_id])
@taxon = @taxonomy.taxons.find(params[:id])
@permalink_part = @taxon.permalink.split("/").last
end
def update
@taxonomy = Taxonomy.find(params[:taxonomy_id])
@taxon = @taxonomy.taxons.find(params[:id])

View File

@@ -3,6 +3,8 @@
module Spree
module Admin
class UsersController < ::Admin::ResourceController
helper I18nHelper
rescue_from Spree::User::DestroyWithOrdersError, with: :user_destroy_with_orders_error
after_action :sign_in_if_change_own_password, only: :update
@@ -28,11 +30,11 @@ module Spree
if @user.save
if roles
@user.spree_roles = roles.reject(&:blank?).collect{ |r| Spree::Role.find(r) }
@user.spree_roles = roles.compact_blank.collect{ |r| Spree::Role.find(r) }
end
flash.now[:success] = Spree.t(:created_successfully)
render :edit
flash[:success] = Spree.t(:created_successfully)
redirect_to edit_admin_user_path(@user)
else
render :new
end
@@ -45,12 +47,14 @@ module Spree
if @user.update(user_params)
if roles
@user.spree_roles = roles.reject(&:blank?).collect{ |r| Spree::Role.find(r) }
@user.spree_roles = roles.compact_blank.collect{ |r| Spree::Role.find(r) }
end
flash.now[:success] = update_message
flash[:success] = update_message
redirect_to edit_admin_user_path(@user)
else
render :edit
end
render :edit
end
protected
@@ -127,6 +131,10 @@ module Spree
params[:user][:email] != @user.email
end
def build_resource
model_class.new(locale: I18n.default_locale)
end
def user_params
::PermittedAttributes::User.new(params).call(
%i[enterprise_limit show_api_key_view]

View File

@@ -7,29 +7,19 @@ module Spree
class VariantsController < ::Admin::ResourceController
belongs_to 'spree/product'
before_action :load_data, only: [:new, :edit]
def index
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
end
def edit
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
end
def update
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
if @object.update(permitted_resource_params)
flash[:success] = flash_message_for(@object, :successfully_updated)
redirect_to spree.admin_product_variants_url(params[:product_id], @url_filters)
else
redirect_to spree.edit_admin_product_variant_url(params[:product_id],
@object,
@url_filters)
end
end
def new
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
@object.shipping_category ||= DefaultShippingCategory.find_or_create
end
def edit
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
end
def create
@@ -53,6 +43,19 @@ module Spree
@object.on_hand = on_hand.to_i if on_hand.present?
end
def update
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
if @object.update(permitted_resource_params)
flash[:success] = flash_message_for(@object, :successfully_updated)
redirect_to spree.admin_product_variants_url(params[:product_id], @url_filters)
else
redirect_to spree.edit_admin_product_variant_url(params[:product_id],
@object,
@url_filters)
end
end
def search
scoper = OpenFoodNetwork::ScopeVariantsForSearch.new(variant_search_params)
@variants = scoper.search
@@ -107,6 +110,13 @@ module Spree
:include_out_of_stock
).to_h.with_indifferent_access
end
private
def load_data
@tax_categories = TaxCategory.order(:name)
@shipping_categories = ShippingCategory.order(:name)
end
end
end
end

View File

@@ -69,6 +69,10 @@ module Spree
if @order.contents.update_cart(order_params)
@order.recreate_all_fees! # Enterprise fees on line items and on the order itself
# Re apply the voucher
VoucherAdjustmentsService.new(@order).update
@order.update_totals_and_states
if @order.complete?
@order.update_payment_fees!
@order.create_tax_charge!
@@ -129,10 +133,10 @@ module Spree
end
def filter_order_params
if params[:order] && params[:order][:line_items_attributes]
params[:order][:line_items_attributes] =
remove_missing_line_items(params[:order][:line_items_attributes])
end
return unless params[:order] && params[:order][:line_items_attributes]
params[:order][:line_items_attributes] =
remove_missing_line_items(params[:order][:line_items_attributes])
end
def remove_missing_line_items(attrs)
@@ -176,10 +180,10 @@ module Spree
items = params[:order][:line_items_attributes]
&.select{ |_k, attrs| attrs["quantity"].to_i > 0 }
if items.empty?
flash[:error] = I18n.t(:orders_cannot_remove_the_final_item)
redirect_to main_app.order_path(order_to_update)
end
return unless items.empty?
flash[:error] = I18n.t(:orders_cannot_remove_the_final_item)
redirect_to main_app.order_path(order_to_update)
end
def order_params

View File

@@ -49,8 +49,10 @@ module Spree
render cable_ready: cable_car.inner_html(
"#signup-feedback",
partial("layouts/alert",
locals: { type: "success",
message: t('devise.user_registrations.spree_user.signed_up_but_unconfirmed') })
locals: {
type: "success",
message: t('devise.user_registrations.spree_user.signed_up_but_unconfirmed')
})
)
else
render status: :unprocessable_entity, cable_ready: cable_car.morph(

View File

@@ -5,6 +5,13 @@ class UserConfirmationsController < DeviseController
include Spree::Core::ControllerHelpers::Auth
include CablecarResponses
# GET /resource/confirmation?confirmation_token=abcdef
def show
self.resource = resource_class.confirm_by_token(params[:confirmation_token])
respond_with_navigational(resource){ redirect_to after_confirmation_path_for(resource) }
end
# GET /resource/confirmation/new
def new
build_resource({})
@@ -33,13 +40,6 @@ class UserConfirmationsController < DeviseController
respond_with_navigational(resource){ redirect_to login_path }
end
# GET /resource/confirmation?confirmation_token=abcdef
def show
self.resource = resource_class.confirm_by_token(params[:confirmation_token])
respond_with_navigational(resource){ redirect_to after_confirmation_path_for(resource) }
end
protected
def set_return_url

View File

@@ -5,9 +5,6 @@ class VoucherAdjustmentsController < BaseController
def create
if add_voucher
VoucherAdjustmentsService.calculate(@order)
@order.update_totals_and_states
update_payment_section
elsif @order.errors.present?
render_error
@@ -21,6 +18,9 @@ class VoucherAdjustmentsController < BaseController
@order.voucher_adjustments.where(originator_id: adjustment.originator_id)&.destroy_all
end
# Update order to make sure we display the appropriate payment method
@order.update_totals_and_states
update_payment_section
end
@@ -45,12 +45,17 @@ class VoucherAdjustmentsController < BaseController
adjustment = voucher.create_adjustment(voucher.code, @order)
unless adjustment.valid?
unless adjustment.persisted?
@order.errors.add(:voucher_code, I18n.t('split_checkout.errors.add_voucher_error'))
adjustment.errors.each { |error| @order.errors.import(error) }
return false
end
clear_payments
VoucherAdjustmentsService.new(@order).update
@order.update_totals_and_states
true
end
@@ -78,4 +83,9 @@ class VoucherAdjustmentsController < BaseController
def voucher_params
params.require(:order).permit(:voucher_code)
end
# Clear payments and payment fees, to not affect voucher adjustment calculation
def clear_payments
@order.payments.incomplete.destroy_all
end
end

View File

@@ -0,0 +1,78 @@
# frozen_string_literal: true
class ScheduleForm
include ActiveModel::Model
attr_reader :errors, :flash_success
def initialize(params, user, schedule = nil)
@errors = ActiveModel::Errors.new self
# Not strong
@params = params
@current_user = user
@schedule = schedule
end
def save
editable_order_cycle_ids_for_create
return false if @params[:order_cycle_ids].blank?
@schedule.attributes = permitted_resource_params
if @schedule.save
@schedule.order_cycle_ids = @params[:order_cycle_ids]
@schedule.save!
end
true
end
def update(_params)
editable_order_cycle_ids_for_update
false unless @schedule.update(permitted_resource_params)
end
def order_cycle_ids
@schedule.order_cycle_ids
end
private
def editable_order_cycle_ids_for_create
return unless @params[:order_cycle_ids]
@existing_order_cycle_ids = []
result = editable_order_cycles(@params[:order_cycle_ids])
@params[:order_cycle_ids] = result
end
def editable_order_cycle_ids_for_update
return unless @params[:schedule][:order_cycle_ids]
@existing_order_cycle_ids = @schedule.order_cycle_ids
result = editable_order_cycles(@params[:schedule][:order_cycle_ids])
@params[:schedule][:order_cycle_ids] = result
@schedule.order_cycle_ids = result
end
def editable_order_cycles(requested)
permitted = OrderCycle
.where(id: @params[:order_cycle_ids] | @existing_order_cycle_ids)
.merge(OrderCycle.managed_by(@current_user))
.pluck(:id)
result = @existing_order_cycle_ids
result |= (requested & permitted) # add any requested & permitted ids
# remove any existing and permitted ids that were not specifically requested
result -= ((result & permitted) - requested)
result
end
def permitted_resource_params
@params.require(:schedule).permit(:id, :name, order_cycle_ids: [])
end
end

View File

@@ -42,7 +42,7 @@ module Admin
{ name: 'shipping_methods', icon_class: "icon-truck", show: show_shipping_methods },
{ name: 'payment_methods', icon_class: "icon-money", show: show_payment_methods },
{ name: 'enterprise_fees', icon_class: "icon-tasks", show: show_enterprise_fees },
{ name: 'vouchers', icon_class: "icon-ticket", show: true },
{ name: 'vouchers', icon_class: "icon-ticket", show: is_shop },
{ name: 'enterprise_permissions', icon_class: "icon-plug", show: true,
href: admin_enterprise_relationships_path },
{ name: 'inventory_settings', icon_class: "icon-list-ol", show: is_shop },

View File

@@ -2,71 +2,71 @@
module Admin
module InjectionHelper
def admin_inject_enterprise
def admin_inject_enterprise(enterprise)
admin_inject_json_ams "admin.enterprises",
"enterprise",
@enterprise,
enterprise,
Api::Admin::EnterpriseSerializer
end
def admin_inject_enterprises
def admin_inject_enterprises(my_enterprises, all_enterprises)
admin_inject_json_ams_array("ofn.admin",
"my_enterprises",
@my_enterprises,
my_enterprises,
Api::Admin::BasicEnterpriseSerializer) +
admin_inject_json_ams_array("ofn.admin",
"all_enterprises",
@all_enterprises,
all_enterprises,
Api::Admin::BasicEnterpriseSerializer)
end
def admin_inject_enterprise_relationships
def admin_inject_enterprise_relationships(enterprise_relationships)
admin_inject_json_ams_array "ofn.admin",
"enterprise_relationships",
@enterprise_relationships,
enterprise_relationships,
Api::Admin::EnterpriseRelationshipSerializer
end
def admin_inject_enterprise_roles
def admin_inject_enterprise_roles(enterprise_roles)
admin_inject_json_ams_array "ofn.admin",
"enterpriseRoles",
@enterprise_roles,
enterprise_roles,
Api::Admin::EnterpriseRoleSerializer
end
def admin_inject_payment_methods
def admin_inject_payment_methods(payment_methods)
admin_inject_json_ams_array "admin.paymentMethods",
"paymentMethods",
@payment_methods,
payment_methods,
Api::Admin::IdNameSerializer
end
def admin_inject_payment_method
def admin_inject_payment_method(payment_method)
admin_inject_json_ams "admin.paymentMethods",
"paymentMethod",
@payment_method,
payment_method,
Api::Admin::PaymentMethodSerializer
end
def admin_inject_shipping_methods
def admin_inject_shipping_methods(shipping_methods)
admin_inject_json_ams_array "admin.shippingMethods",
"shippingMethods",
@shipping_methods,
shipping_methods,
Api::Admin::IdNameSerializer
end
def admin_inject_shipping_method
def admin_inject_shipping_method(shipping_method)
admin_inject_json_ams "admin.shippingMethods",
"shippingMethod",
@shipping_method,
shipping_method,
Api::Admin::ShippingMethodSerializer
end
def admin_inject_shops(opts = {})
def admin_inject_shops(shops, opts = {})
opts.reverse_merge!(module: 'admin.customers')
admin_inject_json_ams_array opts[:module],
"shops",
@shops,
shops,
Api::Admin::IdNameSerializer
end
@@ -78,26 +78,26 @@ module Admin
Api::CountrySerializer
end
def admin_inject_hubs(opts = {})
def admin_inject_hubs(hubs, opts = {})
opts.reverse_merge!(module: 'ofn.admin')
admin_inject_json_ams_array opts[:module],
"hubs",
@hubs,
hubs,
Api::Admin::IdNameSerializer
end
def admin_inject_producers(opts = {})
def admin_inject_producers(producers, opts = {})
opts.reverse_merge!(module: 'ofn.admin')
admin_inject_json_ams_array opts[:module],
"producers",
@producers,
producers,
Api::Admin::IdNameSerializer
end
def admin_inject_inventory_items(opts = { module: 'ofn.admin' })
def admin_inject_inventory_items(inventory_items, opts = { module: 'ofn.admin' })
admin_inject_json_ams_array opts[:module],
"inventoryItems",
@inventory_items,
inventory_items,
Api::Admin::InventoryItemSerializer
end
@@ -117,69 +117,69 @@ module Admin
Api::CurrencyConfigSerializer
end
def admin_inject_enterprise_permissions
def admin_inject_enterprise_permissions(enterprise)
permissions =
{ can_manage_shipping_methods: can?(:manage_shipping_methods, @enterprise),
can_manage_payment_methods: can?(:manage_payment_methods, @enterprise),
can_manage_enterprise_fees: can?(:manage_enterprise_fees, @enterprise) }
{ can_manage_shipping_methods: can?(:manage_shipping_methods, enterprise),
can_manage_payment_methods: can?(:manage_payment_methods, enterprise),
can_manage_enterprise_fees: can?(:manage_enterprise_fees, enterprise) }
admin_inject_json "admin.enterprises", "enterprisePermissions", permissions
end
def admin_inject_hub_permissions
def admin_inject_hub_permissions(hub_permissions)
render partial: "admin/json/injection_ams", locals: { ngModule: "admin.variantOverrides",
name: "hubPermissions",
json: @hub_permissions.to_json }
json: hub_permissions.to_json }
end
def admin_inject_tax_categories(opts = { module: 'ofn.admin' })
def admin_inject_tax_categories(tax_categories, opts = { module: 'ofn.admin' })
admin_inject_json_ams_array opts[:module],
"tax_categories",
@tax_categories,
tax_categories,
Api::Admin::TaxCategorySerializer
end
def admin_inject_taxons
def admin_inject_taxons(taxons)
admin_inject_json_ams_array "admin.taxons",
"taxons",
@taxons,
taxons,
Api::Admin::TaxonSerializer
end
def admin_inject_users
def admin_inject_users(users)
admin_inject_json_ams_array "ofn.admin",
"users",
@users,
users,
Api::Admin::UserSerializer
end
def admin_inject_variant_overrides
def admin_inject_variant_overrides(variant_overrides)
admin_inject_json_ams_array "admin.variantOverrides",
"variantOverrides",
@variant_overrides,
variant_overrides,
Api::Admin::VariantOverrideSerializer
end
def admin_inject_order_cycle_instance
def admin_inject_order_cycle_instance(order_cycle)
render partial: "admin/json/injection_ams",
locals: { ngModule: 'admin.orderCycles',
name: 'ocInstance',
json: "{coordinator_id: '#{@order_cycle.coordinator.id}'}" }
json: "{coordinator_id: '#{order_cycle.coordinator.id}'}" }
end
def admin_inject_order_cycles
def admin_inject_order_cycles(order_cycles)
admin_inject_json_ams_array "admin.orders",
"orderCycles",
@order_cycles,
order_cycles,
Api::Admin::BasicOrderCycleSerializer,
current_user: spree_current_user
end
def admin_inject_spree_api_key
def admin_inject_spree_api_key(spree_api_key)
render partial: "admin/json/injection_ams",
locals: { ngModule: 'admin.indexUtils',
name: 'SpreeApiKey',
json: "'#{@spree_api_key}'" }
json: "'#{spree_api_key}'" }
end
def admin_inject_available_units
@@ -192,16 +192,16 @@ module Admin
json = data.to_json
render partial: "admin/json/injection_ams",
locals: { ngModule: ng_module,
name: name,
json: json }
name:,
json: }
end
def admin_inject_json_ams(ng_module, name, data, serializer, opts = {})
json = serializer.new(data, { scope: spree_current_user }.merge(opts)).to_json
render partial: "admin/json/injection_ams",
locals: { ngModule: ng_module,
name: name,
json: json }
name:,
json: }
end
def admin_inject_json_ams_array(ng_module, name, data, serializer, opts = {})
@@ -210,8 +210,8 @@ module Admin
render partial: "admin/json/injection_ams",
locals: { ngModule: ng_module,
name: name,
json: json }
name:,
json: }
end
end
end

View File

@@ -2,12 +2,30 @@
module Admin
module OrdersHelper
AdjustmentData = Struct.new(:label, :amount)
# Adjustments to display under "Order adjustments".
#
# We exclude shipping method adjustments because they are displayed in a
# separate table together with the order line items.
def order_adjustments_for_display(order)
order.adjustments + order.all_adjustments.payment_fee.eligible
order.adjustments +
voucher_included_tax_representations(order) +
order.all_adjustments.payment_fee.eligible
end
def voucher_included_tax_representations(order)
return [] unless VoucherAdjustmentsService.new(order).voucher_included_tax.negative?
adjustment = order.voucher_adjustments.first
[
AdjustmentData.new(
I18n.t("admin.orders.edit.voucher_tax_included_in_price",
label: adjustment.label),
adjustment.included_tax
)
]
end
end
end

View File

@@ -23,8 +23,9 @@ module ApplicationHelper
end
end
def feature?(feature, user = nil)
OpenFoodNetwork::FeatureToggle.enabled?(feature, user)
# Checks weather a feature is enabled for any of the given actors.
def feature?(feature, *actors)
OpenFoodNetwork::FeatureToggle.enabled?(feature, *actors)
end
def language_meta_tags
@@ -54,10 +55,10 @@ module ApplicationHelper
end
end
def body_classes
def body_classes(hide_menu, shopfront_layout)
classes = []
classes << "off-canvas" unless @hide_menu
classes << @shopfront_layout
classes << "off-canvas" unless hide_menu
classes << shopfront_layout
end
def pdf_stylesheet_pack_tag(source)

View File

@@ -53,7 +53,9 @@ module CheckoutHelper
end
def display_checkout_tax_total(order)
Spree::Money.new order.total_tax, currency: order.currency
total_tax = order.total_tax + VoucherAdjustmentsService.new(order).voucher_included_tax
Spree::Money.new(total_tax, currency: order.currency)
end
def display_checkout_taxes_hash(order)
@@ -95,7 +97,7 @@ module CheckoutHelper
"ng-class" => "{error: !fieldValid('#{path}')}"
}.merge args
render "shared/validated_input", name: name, path: path, attributes: attributes
render "shared/validated_input", name:, path:, attributes:
end
def validated_select(name, path, options, args = {})
@@ -106,8 +108,8 @@ module CheckoutHelper
"ng-class" => "{error: !fieldValid('#{path}')}"
}.merge args
render "shared/validated_select", name: name, path: path, options: options,
attributes: attributes
render "shared/validated_select", name:, path:, options:,
attributes:
end
def payment_method_price(method, order)

View File

@@ -6,7 +6,7 @@ module DiscourseHelper
end
def discourse_url
ENV['DISCOURSE_URL']
ENV.fetch('DISCOURSE_URL', nil)
end
def discourse_login_url

View File

@@ -1,6 +1,12 @@
# frozen_string_literal: true
module I18nHelper
def locale_options
OpenFoodNetwork::I18nConfig.available_locales.map do |locale|
[t('language_name', locale:), locale]
end
end
def set_locale
UserLocaleSetter.new(spree_current_user, params[:locale], cookies).set_locale
end

View File

@@ -12,7 +12,7 @@ module InjectionHelper
"enterprises",
enterprises || default_enterprise_query,
Api::EnterpriseSerializer,
enterprise_injection_data
enterprise_injection_data,
)
end
@@ -56,15 +56,16 @@ module InjectionHelper
inject_json_array "enterprises",
enterprises_and_relatives,
Api::EnterpriseSerializer, enterprise_injection_data
Api::EnterpriseSerializer,
enterprise_injection_data
end
def inject_group_enterprises
def inject_group_enterprises(group)
inject_json_array(
"enterprises",
@group.enterprises.activated.visible.all,
group.enterprises.activated.visible.all,
Api::EnterpriseSerializer,
enterprise_injection_data
enterprise_injection_data,
)
end
@@ -79,14 +80,14 @@ module InjectionHelper
inject_json "currentOrder",
current_order,
Api::CurrentOrderSerializer,
current_distributor: current_distributor,
current_order_cycle: current_order_cycle
current_distributor:,
current_order_cycle:
end
def inject_current_order_cycle
serializer = Api::OrderCycleSerializer.new(current_order_cycle)
json = serializer.object.present? ? serializer.to_json : "{}"
render partial: "json/injection_ams", locals: { name: "orderCycleData", json: json }
render partial: "json/injection_ams", locals: { name: "orderCycleData", json: }
end
def inject_taxons
@@ -105,29 +106,18 @@ module InjectionHelper
inject_json "openStreetMapConfig", {}, Api::OpenStreetMapConfigSerializer
end
def inject_spree_api_key
def inject_spree_api_key(spree_api_key)
render partial: "json/injection_ams",
locals: { name: 'spreeApiKey', json: "'#{@spree_api_key}'" }
locals: { name: 'spreeApiKey', json: "'#{spree_api_key}'" }
end
def inject_available_countries
inject_json_array "availableCountries", available_countries, Api::CountrySerializer
end
def inject_enterprise_attributes
def inject_enterprise_attributes(enterprise_attributes)
render partial: "json/injection_ams",
locals: { name: 'enterpriseAttributes', json: @enterprise_attributes.to_json.to_s }
end
def inject_orders
inject_json_array "orders", @orders.all, Api::OrderSerializer
end
def inject_shops
customers = spree_current_user.customers
shops = Enterprise.where(id: @orders.pluck(:distributor_id).uniq |
customers.pluck(:enterprise_id))
inject_json_array "shops", shops.all, Api::ShopForOrdersSerializer
locals: { name: 'enterpriseAttributes', json: enterprise_attributes.to_json.to_s }
end
def inject_saved_credit_cards
@@ -154,7 +144,7 @@ module InjectionHelper
def inject_json(name, data, serializer, opts = {})
serializer_instance = serializer.new(data, opts)
json = serializer_instance.to_json
render partial: "json/injection_ams", locals: { name: name, json: json }
render partial: "json/injection_ams", locals: { name:, json: }
end
private

View File

@@ -55,8 +55,8 @@ module OrderCyclesHelper
end
end
def active_order_cycle_for_distributor?(_distributor)
OrderCycle.active.with_distributor(@distributor).present?
def active_order_cycle_for_distributor?(distributor)
OrderCycle.active.with_distributor(distributor).present?
end
def simple_index

View File

@@ -4,7 +4,7 @@ module SerializerHelper
def ids_to_objs(ids)
return [] if ids.blank?
ids.map { |id| { id: id } }
ids.map { |id| { id: } }
end
# Returns an array of the fields a serializer needs from it's object

View File

@@ -1,8 +1,8 @@
# frozen_string_literal: true
module ShopHelper
def oc_select_options
@order_cycles.map { |oc| { time: pickup_time(oc), id: oc.id } }
def oc_select_options(order_cycles)
order_cycles.map { |oc| { time: pickup_time(oc), id: oc.id } }
end
def require_customer?
@@ -40,20 +40,17 @@ module ShopHelper
}
end
def shop_tab_names
shop_tabs.map { |tab| tab[:name] }
end
def show_home_tab?
require_customer? || current_distributor.preferred_shopfront_message.present?
end
def shopfront_closed_message?
no_open_order_cycles? && current_distributor.preferred_shopfront_closed_message.present?
def shopfront_closed_message?(order_cycles)
no_open_order_cycles?(order_cycles) && \
current_distributor.preferred_shopfront_closed_message.present?
end
def no_open_order_cycles?
@no_open_order_cycles ||= @order_cycles&.empty?
def no_open_order_cycles?(order_cycles)
@no_open_order_cycles ||= order_cycles&.empty?
end
def show_shopping_cta?

View File

@@ -6,9 +6,6 @@ module Spree
def field_container(model, method, options = {}, &)
css_classes = options[:class].to_a
css_classes << 'field'
if error_message_on(model, method).present?
css_classes << 'withError'
end
content_tag(:div,
capture(&),
class: css_classes.join(' '),
@@ -129,7 +126,7 @@ module Spree
link_to_with_icon('icon-plus',
name,
'javascript:',
data: { target: target },
data: { target: },
class: css_classes)
end

View File

@@ -3,7 +3,7 @@
module Spree
module Admin
module NavigationHelper
# Make an admin tab that coveres one or more resources supplied by symbols
# Make an admin tab that covers one or more resources supplied by symbols
# Option hash may follow. Valid options are
# * :label to override link text, otherwise based on the first resource name (translated)
# * :route to override automatically determining the default route

View File

@@ -31,7 +31,6 @@ module Spree
end
def invoice_links
return [] if OpenFoodNetwork::FeatureToggle.enabled?(:invoices)
return [] unless Spree::Config[:enable_invoices?]
[send_invoice_link, print_invoice_link]

View File

@@ -4,7 +4,7 @@ module TaxHelper
def display_taxes(taxable, display_zero: true)
if !taxable.included_tax_total.zero?
amount = Spree::Money.new(taxable.included_tax_total, currency: taxable.currency)
I18n.t(:tax_amount_included, amount: amount)
I18n.t(:tax_amount_included, amount:)
elsif !taxable.additional_tax_total.zero?
Spree::Money.new(taxable.additional_tax_total, currency: taxable.currency)
elsif display_zero

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