Compare commits

...

846 Commits

Author SHA1 Message Date
David Cook
917079931e Merge pull request #12778 from chahmedejaz/bugfix/12596-fix-annoying-oc-warning-display
[BUU] Fix Messy flash notifications on new products page
2024-08-16 10:29:43 +10:00
Ahmed Ejaz
46e54f48c9 12596: keep flash[:notice] check 2024-08-15 14:50:32 +05:00
Konrad
059dceb304 Merge pull request #12735 from chahmedejaz/bugfix/12698-fix-products-stateful-navigataion
Fix 'Back to products list' stateful navigation
2024-08-15 10:43:13 +02:00
David Cook
f0abe650f6 Update all locales with the latest Transifex translations 2024-08-15 16:56:59 +10:00
Ahmed Ejaz
282df9859e 12596 - fix specs
- As we are only showing the oc warning once now we need these steps where we are dismissing the oc warning after each navigation. Just keeping the first notice dismiss after login
2024-08-15 05:59:17 +05:00
Ahmed Ejaz
3474c60f4c 12596 - fix annoying oc warning display
- such that it only displays once per user session
2024-08-15 05:59:17 +05:00
Konrad
503148b13b Merge pull request #12653 from wandji20/wb-OFN-11613
Add warning modal to order cycle with attached schedule general setting form [OFN-11613]
2024-08-14 18:14:33 +02:00
Konrad
8442c7d334 Merge pull request #12749 from wandji20/wb-OFN-11636
Remove awesome nested set gem and dependencies [OFN-11636]
2024-08-14 17:43:11 +02:00
Ahmed Ejaz
b14cd08990 12698 - keep old UI URL as it is 2024-08-13 14:23:39 +05:00
David Cook
50ebfe412c Merge pull request #12764 from openfoodfoundation/dependabot/npm_and_yarn/js-big-decimal-2.1.0
Bump js-big-decimal from 2.0.7 to 2.1.0
2024-08-13 11:31:05 +10:00
David Cook
e59ab6b2d9 Merge pull request #12763 from openfoodfoundation/dependabot/npm_and_yarn/mrujs-1.0.1
Bump mrujs from 1.0.0 to 1.0.1
2024-08-13 11:28:24 +10:00
Gaetan Craig-Riou
417d39f684 Merge pull request #12757 from EdwardLi-coder/upload_artifact_v3_to_v4
update artifact v3 to v4
2024-08-13 09:35:04 +10:00
wandji20
35169f66dc Include order cycle spec for non-simple cycles [OFN-11613] 2024-08-12 23:16:04 +01:00
Ahmed Ejaz
64568f4aa4 Revert "test artifact upload from different nodes at the same time"
This reverts commit 8a2be468fc.
2024-08-13 00:57:58 +05:00
Ahmed Ejaz
734aebbaaa update uploaded artifact names to be different 2024-08-13 00:42:59 +05:00
Ahmed Ejaz
8a2be468fc test artifact upload from different nodes at the same time 2024-08-13 00:22:10 +05:00
Gaetan Craig-Riou
feb429fee7 Fix typo 2024-08-12 18:47:16 +01:00
wandji20
b75101f24f Fix rebase issue [OFN-11636] 2024-08-12 18:47:16 +01:00
wandji20
1e71db9315 Remove permalinmk from taxons [OFN-11636] 2024-08-12 18:47:16 +01:00
wandji20
82b742608d Remove jquery/js.tree plugin [OFN-11636] 2024-08-12 18:47:16 +01:00
Maikel Linke
49aa9e0768 Make taxonomy migration reversible 2024-08-12 18:47:16 +01:00
wandji20
a85cfab506 Remove awesome nested set gem and dependencies [OFN-11636] 2024-08-12 18:47:16 +01:00
Ahmed Ejaz
e2e3aa9281 12698: add specs 2024-08-12 15:16:47 +05:00
dependabot[bot]
6bd0f2c088 Bump js-big-decimal from 2.0.7 to 2.1.0
Bumps [js-big-decimal](https://github.com/royNiladri/js-big-decimal) from 2.0.7 to 2.1.0.
- [Release notes](https://github.com/royNiladri/js-big-decimal/releases)
- [Commits](https://github.com/royNiladri/js-big-decimal/compare/v2.0.7...v2.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 09:26:19 +00:00
dependabot[bot]
ab2968ffd2 Bump mrujs from 1.0.0 to 1.0.1
Bumps [mrujs](https://github.com/KonnorRogers/mrujs) from 1.0.0 to 1.0.1.
- [Changelog](https://github.com/KonnorRogers/mrujs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/KonnorRogers/mrujs/compare/v1.0.0...v1.0.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 09:25:57 +00:00
EdwardLi-coder
83bf19084b remove fail test 2024-08-12 16:29:52 +08:00
Edward Li
40a59c988b Merge branch 'openfoodfoundation:master' into upload_artifact_v3_to_v4 2024-08-12 16:17:53 +08:00
Gaetan Craig-Riou
43d983cac2 Remoce left over console.log 2024-08-12 09:05:48 +01:00
wandji20
ad3e772944 Refactor and update order cycle form controller [OFN-11613] 2024-08-12 09:05:48 +01:00
wandji20
6a438a07fe Add stimulus controler to monitor order cycle status message data attribute change and trigger warning modal [OFN-11613] 2024-08-12 09:05:48 +01:00
wandji20
ea238829a8 Revert front end validation and implement backend validation for changes in datetime order cycle values [OFN-11613] 2024-08-12 09:05:48 +01:00
wandji20
91fddeaa8b Fix failing spec [OFN-11613] 2024-08-12 09:05:48 +01:00
wandji20
0de8a90b14 Add warning modal to order cycle with attached schedule general setting form [OFN-11613] 2024-08-12 09:05:48 +01:00
EdwardLi-coder
9fe128d494 add fail test 2024-08-12 16:04:22 +08:00
David Cook
193e17b625 Merge pull request #12759 from EdwardLi-coder/admin_style_v3-for-75%
[BUU] Activate admin_style_v3 for 75% of users
2024-08-12 17:59:25 +10:00
David Cook
6ad03e6d5c Remove comment 2024-08-12 17:49:09 +10:00
Gaetan Craig-Riou
1f55ff4b72 Merge pull request #12729 from mkllnk/fdc-update
Remove now unneeded FDC compatibility code from product import
2024-08-12 11:14:44 +10:00
EdwardLi-coder
be13d43e0c delete Archive failed tests screenshots 2024-08-11 00:20:18 +08:00
EdwardLi-coder
af7b663334 update admin_style_v3-for-75% 2024-08-10 23:55:58 +08:00
EdwardLi-coder
da24638079 update artifact v3 to v4 2024-08-10 22:04:17 +08:00
Maikel Linke
8ab1cbe600 Update all locales with the latest Transifex translations 2024-08-09 15:13:33 +10:00
Maikel
cad0245510 Merge pull request #12754 from mkllnk/hu-mini-magick-fix
Load MiniMagick before use
2024-08-09 15:10:51 +10:00
Maikel Linke
93edf4e3ad Load MiniMagick before use
We only reference MiniMagick when rescuing errors but when it's not
loaded, that code fails to find the error class itself to apply the
rescue block.

The rescue block is covered by a spec but the code passes there as
MiniMagick is loaded.

We can see this error only in development, staging and production.
2024-08-09 14:25:29 +10:00
Maikel
caa2764317 Merge pull request #12752 from openfoodfoundation/dependabot/npm_and_yarn/floating-ui/dom-1.6.10
Bump @floating-ui/dom from 1.6.9 to 1.6.10
2024-08-09 09:48:14 +10:00
Maikel
4f1e6382c9 Merge pull request #12753 from openfoodfoundation/dependabot/npm_and_yarn/trix-2.1.5
Bump trix from 2.1.4 to 2.1.5
2024-08-09 09:47:37 +10:00
Maikel
54d33ca103 Merge pull request #12748 from chahmedejaz/bugfix/12739-fix-number-rounding-with-hu-locale
Fix NoMethodError in Admin::ProductsV3#index - Only when using the hu.yml locale
2024-08-09 09:44:48 +10:00
Ahmed Ejaz
787205dcca Merge branch 'master' into bugfix/12739-fix-number-rounding-with-hu-locale 2024-08-09 01:59:50 +05:00
Filipe
fcb0996a76 Merge pull request #12713 from dacook/buu/style-fixes2
[BUU] Style fixes
2024-08-08 17:31:20 +01:00
Filipe
76d874d5f9 Merge pull request #12710 from chahmedejaz/bugfix/12705-fix-products-index-page
[BUU] Fixes Products Page ActionView::Template::Error
2024-08-08 16:20:26 +01:00
Rachel Arnould
81711e4c43 Merge pull request #12721 from dacook/connected-apps-settings-12549
New settings screen to activate each connected app type
2024-08-08 16:56:33 +02:00
dependabot[bot]
e64f60a166 Bump trix from 2.1.4 to 2.1.5
Bumps [trix](https://github.com/basecamp/trix) from 2.1.4 to 2.1.5.
- [Release notes](https://github.com/basecamp/trix/releases)
- [Commits](https://github.com/basecamp/trix/compare/v2.1.4...v2.1.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-08 09:58:22 +00:00
dependabot[bot]
24bc56781b Bump @floating-ui/dom from 1.6.9 to 1.6.10
Bumps [@floating-ui/dom](https://github.com/floating-ui/floating-ui/tree/HEAD/packages/dom) from 1.6.9 to 1.6.10.
- [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.6.10/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>
2024-08-08 09:58:08 +00:00
Ahmed Ejaz
6757c8df74 12739 - fix number_with_precision method 2024-08-07 18:54:35 +05:00
Ahmed Ejaz
647a384561 12705 - add specs for updating invalid unit_value 2024-08-07 16:59:10 +05:00
Maikel Linke
ec828c335d Remove superfluous FDC-specific request class 2024-08-07 15:09:05 +10:00
Maikel Linke
6d03a8ddf3 Test that the FDC is now complying with the DFC 2024-08-07 15:09:05 +10:00
David Cook
05878fcbb8 Merge pull request #12747 from mkllnk/flaky-dfc-spec
Stabilise flaky spec with unique taxons
2024-08-07 15:02:57 +10:00
Maikel Linke
fd8973862e Stabilise flaky spec with unique taxons
The test was creating two "Soft Drinks" taxons and it was random which
one was applied to a new product. Changing one taxon to a different one
removes the ambiguity.
2024-08-07 13:50:51 +10:00
David Cook
40c77948b9 Show success message
I'm not sure, but I assume that Config.set will raise an exception if it failed.
2024-08-07 10:31:06 +10:00
David Cook
a95aa1b3e9 Submit blank value if nothing selected
If a checkbox is not selected, the browser does not submit it at all.
2024-08-07 10:30:45 +10:00
Gaetan Craig-Riou
706eb737b1 Merge pull request #12742 from openfoodfoundation/dependabot/npm_and_yarn/floating-ui/dom-1.6.9
Bump @floating-ui/dom from 1.6.8 to 1.6.9
2024-08-07 10:09:09 +10:00
Gaetan Craig-Riou
c31758d347 Merge pull request #12741 from openfoodfoundation/dependabot/npm_and_yarn/jquery-ui-1.14.0
Bump jquery-ui from 1.13.3 to 1.14.0
2024-08-07 10:08:17 +10:00
Gaetan Craig-Riou
6139ba3015 Merge pull request #12738 from mkllnk/flaky-exchange-id
Stabilise spec by not relying on record ids
2024-08-07 09:41:00 +10:00
Konrad
256d5ba61c Merge pull request #12725 from wandji20/wb-OFN-12280
(Fix) chore(deps): bump invisible_captcha from 2.2.0 to 2.3.0
2024-08-06 15:04:38 +02:00
Konrad
cb42e7e119 Merge pull request #12671 from wandji20/wb-OFN-12591
Ensure product category error message is shown when creating new product [OFN-12591]
2024-08-06 14:09:59 +02:00
dependabot[bot]
566d310880 Bump @floating-ui/dom from 1.6.8 to 1.6.9
Bumps [@floating-ui/dom](https://github.com/floating-ui/floating-ui/tree/HEAD/packages/dom) from 1.6.8 to 1.6.9.
- [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.6.9/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>
2024-08-06 09:39:16 +00:00
dependabot[bot]
5cdce35ee8 Bump jquery-ui from 1.13.3 to 1.14.0
Bumps [jquery-ui](https://github.com/jquery/jquery-ui) from 1.13.3 to 1.14.0.
- [Release notes](https://github.com/jquery/jquery-ui/releases)
- [Commits](https://github.com/jquery/jquery-ui/compare/1.13.3...1.14.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-06 09:38:57 +00:00
David Cook
ffe3f12a23 Move class definition inside migration 2024-08-06 11:26:03 +02:00
David Cook
bd48a982fb Set connected apps as enabled if any
Could have easily done this manually, but this makes the transition smoother.

BTW I tested each case manually, didn't seem worth writing a spec.
2024-08-06 11:26:03 +02:00
David Cook
5d732d80a6 Add connected apps settings screen
I considered adding a request spec, but figured it still doesnt' test the form, so better to use a full system spec.
2024-08-06 11:26:03 +02:00
David Cook
254e11aa36 Use whitelist
It wasn't really necessary, but I'm going to need this list in a moment, so we might as well use it.
Also it allows us to ensure the options are listed in a certain order.

Also maybe it will help protect against corrupt preferences.
2024-08-06 11:26:03 +02:00
David Cook
4223b36bc3 Only show enabled connected app types
The preference will be set from the admin interface in a new commit

It would be nice if we had an array/list type for preferences. Probably not too hard to implement, but this will do.
2024-08-06 11:26:03 +02:00
David Cook
fcea437d7e Only show connected apps in enterprise settings, if system setting is enabled 2024-08-06 11:26:03 +02:00
David Cook
8716b75d3d Merge pull request #12722 from openfoodfoundation/dependabot/npm_and_yarn/karma-6.4.4
Bump karma from 6.4.3 to 6.4.4
2024-08-06 15:28:06 +10:00
Maikel Linke
e055b8b16c Stabilise spec by not relying on record ids
A spec was referring to and input id:

```
"order_cycle_incoming_exchange_0_variants_#{new_product.variants.first.id}"
```

But sometimes the exchange would have the id 1 instead of 0 and the test
would fail. Instead I opted to select the field by text visible to the
user.
2024-08-06 12:31:54 +10:00
Maikel
f5875e4c0b Merge pull request #12667 from cyrillefr/FixRailsRootPathnameMethods
Fixes Rails/RootPathnameMethods offense
2024-08-06 11:02:28 +10:00
dependabot[bot]
56d23c172c Bump karma from 6.4.3 to 6.4.4
Bumps [karma](https://github.com/karma-runner/karma) from 6.4.3 to 6.4.4.
- [Release notes](https://github.com/karma-runner/karma/releases)
- [Changelog](https://github.com/karma-runner/karma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma/compare/v6.4.3...v6.4.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-06 01:02:06 +00:00
Maikel
19bb40d1d3 Merge pull request #12736 from openfoodfoundation/dependabot/npm_and_yarn/jasmine-core-5.2.0
Bump jasmine-core from 5.1.2 to 5.2.0
2024-08-06 10:59:33 +10:00
Maikel
4169a956c9 Merge pull request #12737 from openfoodfoundation/dependabot/npm_and_yarn/trix-2.1.4
Bump trix from 2.1.3 to 2.1.4
2024-08-06 10:58:28 +10:00
filipefurtad0
d54dbdfe2d Update all locales with the latest Transifex translations 2024-08-05 11:33:39 +01:00
dependabot[bot]
fed2ae9a93 Bump trix from 2.1.3 to 2.1.4
Bumps [trix](https://github.com/basecamp/trix) from 2.1.3 to 2.1.4.
- [Release notes](https://github.com/basecamp/trix/releases)
- [Commits](https://github.com/basecamp/trix/compare/2.1.3...v2.1.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 09:57:36 +00:00
dependabot[bot]
f00b2f0397 Bump jasmine-core from 5.1.2 to 5.2.0
Bumps [jasmine-core](https://github.com/jasmine/jasmine) from 5.1.2 to 5.2.0.
- [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.2...v5.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 09:57:26 +00:00
Ahmed Ejaz
c101c4e42f 12698 - fix 'go back to products' stateful navigation 2024-08-05 13:51:59 +05:00
Gaetan Craig-Riou
11ba33d7f4 Merge pull request #12696 from openfoodfoundation/dependabot/npm_and_yarn/floating-ui/dom-1.6.8
Bump @floating-ui/dom from 1.6.7 to 1.6.8
2024-08-05 16:38:03 +10:00
dependabot[bot]
8e663dac3f Bump @floating-ui/dom from 1.6.7 to 1.6.8
Bumps [@floating-ui/dom](https://github.com/floating-ui/floating-ui/tree/HEAD/packages/dom) from 1.6.7 to 1.6.8.
- [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.6.8/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>
2024-08-05 04:38:50 +00:00
Gaetan Craig-Riou
df0795acf1 Merge pull request #12689 from openfoodfoundation/dependabot/npm_and_yarn/hotwired/turbo-8.0.5
Bump @hotwired/turbo from 8.0.4 to 8.0.5
2024-08-05 14:36:05 +10:00
Gaetan Craig-Riou
7e1af9e04b Merge pull request #12723 from johansenja/optimise-shops-page
Preload enterprise logos and promo images for /shops page
2024-08-05 13:54:20 +10:00
Gaetan Craig-Riou
4805adec42 Merge pull request #12730 from openfoodfoundation/revert-12665-wb-OFN-12532
Revert "Pluralize admin products search result [OFN-12532]"
2024-08-05 10:29:52 +10:00
Filipe
7939bf8038 Revert "Pluralize admin products search result [OFN-12532]" 2024-08-05 10:03:58 +10:00
Ahmed Ejaz
d4e0b2ab51 12705 - fix specs 2024-08-04 18:20:15 +05:00
Ahmed Ejaz
1014a50aff 12705 - incorporate old UI behavior
- if unit_value is not present and unit_description then display unit_description only.
- if both are not present then display empty fields
2024-08-04 17:47:02 +05:00
filipefurtad0
0afbdf157e Update all locales with the latest Transifex translations 2024-08-02 11:42:59 +01:00
Filipe
5012c52438 Merge pull request #12711 from cillian/wider-item-column-on-invoice-pdf
Make Item column wider and tax and quantity columns narrower in invoice PDF
2024-08-02 10:20:24 +01:00
Maikel
615a81c55d Merge pull request #12728 from mkllnk/flaky-order-cycle-spec
Fix flaky spec with fixed order of products
2024-08-02 14:39:42 +10:00
Maikel Linke
99b31d05cb Fix flaky spec with fixed order of products 2024-08-02 14:26:54 +10:00
Konrad
1a72b5b227 Merge pull request #12563 from abdulazizali77/bugfix/11326-incoming-exchange-per-item-calculator
Display only per_item fees for oc incoming exchange #11326
2024-08-02 03:11:27 +02:00
wandji20
a1aea54405 Disable recaptcha spiner check in test environment [OFN-12280] 2024-08-01 21:43:51 +01:00
dependabot[bot]
e01354e863 chore(deps): bump invisible_captcha from 2.2.0 to 2.3.0
Bumps [invisible_captcha](https://github.com/markets/invisible_captcha) from 2.2.0 to 2.3.0.
- [Changelog](https://github.com/markets/invisible_captcha/blob/master/CHANGELOG.md)
- [Commits](https://github.com/markets/invisible_captcha/compare/v2.2.0...v2.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-01 17:33:03 +01:00
Joseph Johansen
ffe4603f2f Preload enterprise logos and promo images for shops page 2024-08-01 14:10:53 +01:00
wandji20
ebc794194f Add product spec when supplier is empty and remove error status code from product create action [OFN-12591] 2024-08-01 09:03:26 +01:00
wandji20
287f65ec8e Ensure product category error message is shown when creating new product [OFN-12591] 2024-08-01 08:58:54 +01:00
David Cook
1288592d58 Merge pull request #12715 from rioug/add-request-id-log
Add request_id to logs for production and staging
2024-08-01 10:01:25 +10:00
David Cook
0836d844a6 Merge pull request #12677 from openfoodfoundation/dependabot/npm_and_yarn/trix-2.1.3
Bump trix from 2.1.2 to 2.1.3
2024-08-01 09:49:07 +10:00
David Cook
96355a1ed4 Merge pull request #12719 from dacook/ActivateAdminStyleV3For50PcUsers
[BUU] Activate admin_style_v3 for ~50% of users
2024-08-01 09:24:33 +10:00
Filipe
ce44f19b4a Merge pull request #12704 from cyrillefr/FilteringProductBySupplierPropertyBreaksWhenEnterpriseHasCustomSortingByCategorySet
Fixes 422 error due to bad sql building
2024-07-31 19:45:09 +01:00
Filipe
6c214543ad Merge pull request #12690 from wandji20/wb-OFN-12666
Require variant category and supplier when creating new product variants [OFN-12666]
2024-07-31 19:28:31 +01:00
Filipe
8b1713d169 Merge pull request #12665 from wandji20/wb-OFN-12532
Pluralize admin products search result [OFN-12532]
2024-07-31 18:55:53 +01:00
David Cook
587ce5ad9d Activate admin_style_v3 for 50% of users 2024-07-31 16:55:12 +10:00
Rachel Arnould
f51705cb57 Merge pull request #12676 from dacook/add-affiliate_sales_data-connected_app-12550
Add "Affiliate Sales Data" connected app option
2024-07-30 16:14:27 +02:00
wandji20
55df9416cc Add test to check when new variant category and producer is empty [OFN-12666] 2024-07-30 12:09:59 +01:00
wandji20
0376c04ad5 Fix failing specs [OFN-12666] 2024-07-30 12:07:50 +01:00
wandji20
2709479bf2 Require varian t category when creating new product variant [OFN-12666] 2024-07-30 12:07:50 +01:00
David Cook
c5fc621aa4 Use scope to determine which enterprises are ready to be affiliated 2024-07-30 15:21:29 +10:00
Gaetan Craig-Riou
bfd0e7f784 Add request_id to logs for production and staging
It will prepend a request unique id to each log lines, it makes it
easier to debug individual request.
2024-07-30 11:38:46 +10:00
David Cook
ec3c157f1e Add gap between elements
It could be done better, but requires more code cleanup than it's worth.
2024-07-29 15:20:36 +10:00
David Cook
32aacbd2b0 Don't use fixed heights 🔥
Just don't. It makes life hard and doesn't solve the problem properly.

Now, when the content doesn't fit within the screen width, it will flow naturally and not jump up and down all over other elements.
2024-07-29 15:13:30 +10:00
David Cook
655dc92246 Clean up wacky input styles 🔥
Trying to style a pretend input just doesn't work in practice, it resulted in a couple of style issues.
Let's keep it simple,
2024-07-29 15:02:06 +10:00
David Cook
fece8beef5 Style/Send 2024-07-29 14:13:22 +10:00
David Cook
53e3621e04 Merge pull request #12703 from johansenja/fix-rubocop-style-send
Fix rubocop Style/Send group
2024-07-29 14:02:01 +10:00
David Cook
1949839056 Update interpolation variable name
This avoids error 'missing interpolation argument'.
2024-07-29 10:41:11 +10:00
Konrad
00a0006ff2 Merge pull request #12691 from ccozkan/use-vertical-transitions-for-cloning-and-deleting
Use vertical transitions for cloning and deleting products
2024-07-28 18:25:07 +02:00
Konrad
325f9aa6f3 Merge pull request #12664 from wandji20/wb-OFN-12551
Remove SR from clear search button [OFN-12551]
2024-07-28 14:31:08 +02:00
Konrad
95ec5c3c58 Merge pull request #12655 from wandji20/wb-OFN-11513
(Fix) [User->New] Language is displayed twice [OFN-11513]
2024-07-28 13:46:51 +02:00
wandji20
ef87cdb167 Revert changes and use selectable locales for helper local_options [OFN-11513] 2024-07-28 12:52:01 +02:00
wandji20
65d4596f3b Fix failling spec [OFN-11513] 2024-07-28 12:52:01 +02:00
wandji20
a9e295bc11 (Fix) [User->New] Language is displayed twice [OFN-11513] 2024-07-28 12:52:01 +02:00
Abdul Aziz Ali
ac8caf7710 Revert to use .order_cycle_id #11326 2024-07-28 17:57:56 +08:00
Abdul Aziz Ali
8a1e61fd60 Fix incoming_controller_spec. Remove .order_cycle_id usage #11326 2024-07-27 17:54:39 +08:00
Abdul Aziz Ali
baf38b6b30 Only set per_item flag in order_cycle incoming controller #11326 2024-07-27 16:12:26 +08:00
Cillian O'Ruanaidh
3507405dae Make Item column wider and tax and quantity columns narrower in invoice PDF 2024-07-26 15:36:42 +01:00
Filipe
c25fe6ae57 Merge pull request #12654 from wandji20/wb-OFN-112509
Use public contact email at the bottom of order confirmation email [OFN-12509]
2024-07-25 20:14:47 +01:00
Filipe
7bcf3206d8 Merge pull request #12678 from chahmedejaz/bugfix/11640-products-page-broken-URL
Fix URL State management on the Products page
2024-07-25 20:00:49 +01:00
Ahmed Ejaz
e808c7fb2b 12705 - set 1 as default for variant's unit_value 2024-07-25 23:42:03 +05:00
David Cook
df81e8ed35 Add task to connect all enterprises
Example usage:
 rake ofn:enterprises:activate_connected_app_type[affiliate_sales_data]
2024-07-25 21:14:04 +10:00
David Cook
e9d7a0b099 Add User#affiliate_enterprises 2024-07-25 21:14:01 +10:00
David Cook
da7bbcf82f Enable/disable affiliate sales data 2024-07-25 17:06:13 +10:00
David Cook
1742d2807f Add affiliate sales data to form 2024-07-25 17:06:13 +10:00
David Cook
d3c5e2365a Add AffiliateSalesData model
Using namespace subfolder to help organise it and show the inheritance.

Hmm, instead of scopes, we could have different has_many relationships on the Enterprise. Maybe it should be in a concern. We can refactor later I guess.
2024-07-25 17:06:13 +10:00
David Cook
27e53f9dcc Scope spec to section
Because there's going to be a new section with the same button label
2024-07-25 17:06:13 +10:00
David Cook
5d0f55b8c3 Re-organise spec
Best viewed with whitespac ignored.
2024-07-25 17:06:13 +10:00
David Cook
9d89b4726b Move connect logic to model
Then subtypes can override as needed.
2024-07-25 17:06:13 +10:00
David Cook
9b37eacb8d add scope for discover_regen 2024-07-25 17:06:13 +10:00
David Cook
bbe22bbfeb AddTypeToConnectedApps 2024-07-25 17:06:13 +10:00
David Cook
85d5e2ee70 Expect single connected_app record for discover regen 2024-07-25 17:05:42 +10:00
David Cook
9a4051f37b Move discover regen to named partial
To make way for a new type of connected app.

If only we could use [relative partial paths](https://github.com/rails/rails/issues/1143)
2024-07-25 17:05:42 +10:00
cyrillefr
05ed4639b2 Fixes 422 error due to bad sql building
- first part of query use supplier_properties parameter, but not
  second part, that can leads to mismatch between the 2 parts.
  Remove supplier_properties parameter + modify SQL to get it right.
- spec tests category filtering & sorting + producer properties
2024-07-24 21:49:11 +02:00
Abdul Aziz Ali
2bcf84d9a9 Add outgoing exchange scenario spec #11326 2024-07-24 17:38:10 +08:00
Gaetan Craig-Riou
99acf752f4 Update all locales with the latest Transifex translations 2024-07-24 15:34:16 +10:00
Joseph Johansen
5086f2d8b5 Fix rubocop Style/Send group 2024-07-23 14:18:26 +01:00
wandji20
0b46c41ffd Update reply email for order confirmation mail [OFN-12509] 2024-07-23 08:54:06 +01:00
wandji20
4fe3f60009 Use public contact email at the bottom of order confirmation email [OFN-12509] 2024-07-23 08:35:30 +01:00
Gaetan Craig-Riou
dfea0cd805 Merge pull request #12700 from rioug/fix-number-rounding-with-hu-locale
[BUU] fix error 500 on hungary instance
2024-07-23 16:35:48 +10:00
Gaetan Craig-Riou
0f04b2fb10 Fix call to ActiveSupport::NumberHelper.number_to_rounded
When running with :hu locale, call to `number_to_rounded` wiht parameter
precision: nil breaks, adding significant: false fixes the issue
2024-07-23 13:51:32 +10:00
Filipe
146296d0b2 Merge pull request #12694 from rioug/12692-revert-product-desxription-tuncation
Revert product description truncation fix
2024-07-22 12:22:56 +01:00
Ahmed Ejaz
a6efad73a8 12551 - add no-cache policy for Turbo cache control 2024-07-22 13:45:01 +05:00
Gaetan Craig-Riou
7f9bbd23e5 Revert fix introduced in https://github.com/openfoodfoundation/openfoodnetwork/issues/10685
It breaks wit Safari on Iphone
2024-07-22 14:59:30 +10:00
Çağrı Özkan
29d63b0f0f Change slide in animation to appear from top 2024-07-22 06:01:01 +03:00
Çağrı Özkan
25e9fd22d8 Change slide out animation to disappear towards top 2024-07-22 06:01:01 +03:00
Gaetan Craig-Riou
5caeb160ef Merge pull request #12684 from dacook/fix-spec
Fix flaky spec
2024-07-22 11:59:22 +10:00
David Cook
1310965975 Scope expectations to product/variant rows
This spec was getting flaky because:

> expected not to find text "20"
> in "Logged in as : olen@harveydenesik.biz Account Logout ... Weight (g) YES 1g On demand Enterprise 203 Enterprise 203
2024-07-22 11:42:50 +10:00
David Cook
0c43dd4222 Merge pull request #12686 from filipefurtad0/activate_25_p_cent_BUU_users
Activates admin_style_v3 for 25 per cent users
2024-07-22 10:28:19 +10:00
wandji20
bb427db66a Add spec for clearing search input when no results is found [OFN-12551] 2024-07-19 14:25:46 +01:00
wandji20
1165b00600 Remove SR from clear search button [OFN-12551] 2024-07-19 14:21:35 +01:00
dependabot[bot]
2d45952611 Bump @hotwired/turbo from 8.0.4 to 8.0.5
Bumps [@hotwired/turbo](https://github.com/hotwired/turbo) from 8.0.4 to 8.0.5.
- [Release notes](https://github.com/hotwired/turbo/releases)
- [Commits](https://github.com/hotwired/turbo/compare/v8.0.4...v8.0.5)

---
updated-dependencies:
- dependency-name: "@hotwired/turbo"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-19 09:58:25 +00:00
filipefurtad0
17eb8d5cd8 Update all locales with the latest Transifex translations 2024-07-19 10:09:29 +01:00
filipefurtad0
c8ca993fa9 Activates admin_style_v3 for 25 per cent users 2024-07-18 16:39:35 +01:00
Rachel Arnould
de20dd949b Merge pull request #12668 from filipefurtad0/prepare_import_spec_for_admin_style_3
Prepare product_import_spec.rb for BUU as default
2024-07-18 16:33:56 +02:00
Konrad
4c9507caa3 Merge pull request #12602 from chahmedejaz/bugfix/12570-variant-unit-field-out-of-sync
12570 - Fix Variant Unit field is Out of Sync with the Pop-out
2024-07-18 13:32:27 +02:00
Filipe
f1e6f8bb66 Merge pull request #12683 from dacook/buu-troubleshoot-12682
[BUU] Handle corrupt data and troubleshooting
2024-07-18 12:28:18 +01:00
David Cook
918d4401ff Gracefully handle empty string 2024-07-18 12:05:56 +10:00
David Cook
4925e2088d Test for corrupt data
Ah ha, we found the problem.
2024-07-18 12:03:25 +10:00
David Cook
bba59c1ffd Force significant: false for NumberHelper
Although it defaults to false, somehow it seems to be evaluated as true on hu_prod...??!?!!1! (https://github.com/openfoodfoundation/openfoodnetwork/issues/12682)
Maybe this will help.
2024-07-18 11:06:45 +10:00
Filipe
f3e7ba0462 Merge pull request #12675 from zsoltiNagy/insert_cloned_below_the_original_product
Changed a single line in turbo to insert cloned products after the original product
2024-07-17 20:14:13 +01:00
Filipe
23fc77351e Merge pull request #12663 from cyrillefr/Inventory_Producer_column_is_empty_in_review_page
Replace product by variant to see producer name on views
2024-07-17 18:17:58 +01:00
Filipe
3bd5ae2eec Merge pull request #12680 from rioug/12670-fix-product-ordering-inventory
[inventory] Fix product sorting
2024-07-17 17:53:16 +01:00
filipefurtad0
0123d6fb2e Copies admin_style_v3 feature into ACTIVE_BY_DEFAULT section
This should have an effect on test environment
2024-07-17 14:51:29 +01:00
filipefurtad0
e0d7252fe3 Adds condition for dev environment only
We don't want to enable this in production just yet
2024-07-17 14:51:29 +01:00
filipefurtad0
24defac470 Adds a migration to enable the feature by default 2024-07-17 14:51:29 +01:00
filipefurtad0
46696dfa17 Removes references to enabling admin_style_v3 features
Reverts removal from bulk_product_spec.rb
2024-07-17 14:51:25 +01:00
Ahmed Ejaz
1af811cf51 11640 - fix per_page issue when the page is changed
- Fix the scenario when per_page is selected as 100 and next page is clicked, then per_page is empty in the request.
- Expected behavior should be that it retains the per_page selected previously
2024-07-17 10:17:06 +05:00
Ahmed Ejaz
1850f298a6 11640 - use turbo navigation 2024-07-17 10:16:52 +05:00
Gaetan Craig-Riou
ae3fa00429 Add ordering by producer and product name
It looks like the ordering by producer got lost in some rebase.
2024-07-17 11:22:49 +10:00
wandji20
80ade22bd6 Pluralize admin products search result [OFN-12532] 2024-07-16 13:10:22 +01:00
dependabot[bot]
4fb458afe0 Bump trix from 2.1.2 to 2.1.3
Bumps [trix](https://github.com/basecamp/trix) from 2.1.2 to 2.1.3.
- [Release notes](https://github.com/basecamp/trix/releases)
- [Commits](https://github.com/basecamp/trix/compare/v2.1.2...2.1.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-16 09:30:08 +00:00
zsoltiNagy
c25750387f Changed a single line in turbo to insert cloned products after the original product 2024-07-16 07:23:03 +02:00
Ahmed Ejaz
5b7fbc875a 12570 - address PR comments 2024-07-15 22:48:20 +05:00
filipefurtad0
e1976c6cc2 Brings back xpath selector
Fixes xpath
2024-07-15 11:32:04 +01:00
filipefurtad0
91daec4806 Removes TODO, preparing spec for admin_style_3 (1)
Removes TODO, preparing spec for admin_style_3 (2)

Uses xpath to point to on hand field
2024-07-15 11:32:04 +01:00
filipefurtad0
bdc42deeb6 Sets import column test as pending
As of now, it is not clear whether we wish to re-implement this feature on BUU
2024-07-15 11:32:04 +01:00
David Cook
a66fec0b26 Merge pull request #12662 from mkllnk/order-finalise-spec
Improve spec for Spree::Order#finalize!
2024-07-15 11:53:57 +10:00
Ahmed Ejaz
c52c2ebfe1 12570 - fix specs 2024-07-12 18:20:19 +05:00
Ahmed Ejaz
d8354298f5 12570 - add specs 2024-07-12 18:02:57 +05:00
cyrillefr
2baf7c0250 Fixex Rails/RootPathnameMethods offense
- Cf. Cop doc at https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsrootpathnamemethods
2024-07-12 14:20:17 +02:00
Ahmed Ejaz
0986971473 12570 - fix variant's display_as field being empty issue
- New variant unit_value is empty, so +VariantUnits::OptionValueNamer.new(variant).name+ returns ""
- Now we are making sure that new variant unit_value won't be empty
2024-07-12 17:00:42 +05:00
Gaetan Craig-Riou
29aa3a8059 Remove useless code 2024-07-12 10:34:42 +10:00
Konrad
e09745179f Merge pull request #12649 from dacook/product_import-tmpfile
Use application tmp dir for product import
2024-07-11 19:53:32 +02:00
cyrillefr
49c6a22fde Replace product by variant to see producer name on views
- replace product by variant since there had been changes in
  product & variant models.
- add a line in spec to test producer name.
2024-07-11 13:41:49 +02:00
Maikel Linke
a37b0eb698 Replace mocking on tested order object
It's more realistic this way.
2024-07-11 15:42:23 +10:00
Maikel Linke
2e36c699f6 Test resulting stock instead of method calls
The next test case wasn't asserting anything as well. The referenced
method `decrease_stock_for_variant` doesn't actually exist.
2024-07-11 15:42:23 +10:00
Maikel Linke
cb4e7d6fe3 Fix spec to assert updating shipments
The spec was asserting on all shipments of the order but there were one.
In consequence, the spec didn't assert anything. Now I set up a shipment
that is asserted on. I'm stil not sure how useful this spec is though.
2024-07-11 15:42:23 +10:00
Maikel Linke
94d560d341 Replace expecting method call with outcome
This is more realistic and robust. Don't mock the class under test (even
though `touch` is actually provided by Active Record).
2024-07-11 15:42:22 +10:00
Maikel Linke
eea227bc22 Style order spec block a tiny bit 2024-07-11 15:42:22 +10:00
David Cook
6d6f8735e3 Update all locales with the latest Transifex translations 2024-07-11 14:41:47 +10:00
Maikel
aec9a960e2 Merge pull request #12652 from filipefurtad0/activate_admin_style_v3_for_dev_test_and_new_servers
[BUU] Prepares specs for enabling admin_style_v3 by default
2024-07-11 13:55:20 +10:00
Maikel
f1713b11a6 Merge pull request #12657 from dacook/buu/enable_feature_admin_style_v3_for_admins
[BUU] Activate admin_style_v3 for all super admins
2024-07-11 13:40:32 +10:00
David Cook
c86f7f9d50 Remove comments 2024-07-11 10:58:57 +10:00
filipefurtad0
5e933af079 Prepares spec for admin_style_v3 - replaces TODO (1) 2024-07-11 10:58:57 +10:00
filipefurtad0
f7c47fecc4 Removes the need for using overlapping_elements_helper
Improves the specs so we don't need to recurr to overlapping elements clicks, and removes the respective helper
2024-07-11 10:58:57 +10:00
filipefurtad0
7d1cb0c957 Sets up enterprise with payment and shipping methods
So that the warning does not need to be dismissed - which is not what we wish to test here
2024-07-11 10:58:57 +10:00
filipefurtad0
7f6780b5e9 Simplifies specs, by replacing selector declaration with click_button 2024-07-11 10:58:57 +10:00
filipefurtad0
dfcd9391d9 Prepares smoke_tests_spec for admin_style_v3
Enables admin_style_v3 for smoke_tests_spec
2024-07-11 10:58:57 +10:00
filipefurtad0
6dd4bb3e3b Removes test case around shipped product
This is already covered on the v3 version of the spec, under ./spec/system/admin/products_v3/products_spec.rb:452
2024-07-11 10:58:57 +10:00
David Cook
cda2408c69 Merge pull request #12661 from chahmedejaz/task/12497-reorganize-products_v3_specs
[BUU] Re-Organize products_v3 Feature specs
2024-07-11 10:55:52 +10:00
Maikel
eb22bff908 Merge pull request #12647 from cyrillefr/FixRailsSkipsModelValidations
Fixes Rails/SkipsModelValidations offenses
2024-07-11 09:12:26 +10:00
Ahmed Ejaz
9281cd1a62 12497 - add create spec 2024-07-11 02:04:08 +05:00
Ahmed Ejaz
b99d985b75 12497 - add actions spec 2024-07-11 02:04:08 +05:00
Konrad
ecfa47cd78 Merge pull request #12574 from rioug/refactor-products-renderer
[Product Refactor] Refactor products renderer
2024-07-10 17:59:38 +02:00
Konrad
10898fdcfc Merge pull request #12639 from wandji20/wb-OFN-11597
Redirect successful user signup request to main home page [OFN-11597]
2024-07-10 17:24:40 +02:00
Abdul Aziz Ali
718e6765e1 Enterprise fee controller: Add all fees scenario #11326 2024-07-10 19:42:47 +08:00
Gaetan Craig-Riou
686fe8c028 Per review, remove flag argument from products_relation
products_relation is now split in two, products_relation and
products_relation_incl_supplier_properties.
It avoids using a flag argument which is not a a good practice see:
https://martinfowler.com/bliki/FlagArgument.html
2024-07-10 13:19:08 +10:00
David Cook
cb0a30ef52 EnableFeatureAdminStyleV3ForAdmins 2024-07-10 11:55:10 +10:00
Gaetan Craig-Riou
5c3acbbcaf Per review, remove instance variable @query 2024-07-10 11:45:39 +10:00
Abdul Aziz Ali
31d49ee99e Rubocop. Fix simple spec long line #11326 2024-07-10 08:18:00 +08:00
Abdul Aziz Ali
1e08f2713e Remove sleep. Use Capybara select helper #11326 2024-07-10 08:12:19 +08:00
Konrad
f0fd3bb73c Merge pull request #12635 from wandji20/wb-OFN-10685
(Fix) Product description not correctly truncated
2024-07-09 19:51:46 +02:00
cyrillefr
6d22652dfa Requested changes on VariantOverrride
- change was not exactly equivalent, so reverting +
  rubo comment
2024-07-09 16:06:45 +02:00
David Cook
2ab6bcb2e4 Use system method to generate temporary file path
This method is not documented, but is used by Dir.mktmpdir.  https://apidock.com/ruby/Dir/Tmpname/create
2024-07-09 16:01:50 +10:00
David Cook
ca612282f9 Use Rails tmp dir for product imports again
In https://github.com/openfoodfoundation/openfoodnetwork/pull/3435, it was switched to the system tmp dir because it conventiently provided a method to generate a unique filename. However it didn't handle the case where the system provided a symlink (macOS).

I could have fixed that, but surely it's safer to use the Rails tmp directory.
So I changed back to that, using a tip from https://stackoverflow.com/questions/13787746/creating-a-thread-safe-temporary-file-name to generate a unique name. Perhaps we could use a larger string (eg uuid) or append a timestamp too, but I don't know that it's necessary. Instead, we can just check that the dir didn't exist first (as mentioned in the PR). Let's do that..
2024-07-09 15:47:54 +10:00
David Cook
823614c214 Always delete uploaded file on error
The file path was never going to be 'tmp/product_import', so I guess it never deleted the file.
Hmm but shouldn't we clean up on success too? I suppose the tmp dir will be cleaned up eventually, and maybe we want to keep them for debugging purposes.
2024-07-09 15:06:00 +10:00
David Cook
cc1fa7f563 Always avoid error on redirect_to 2024-07-09 13:57:06 +10:00
Abdul Aziz Ali
8955972b05 Rubocop. fix formatting #11326 2024-07-09 08:56:54 +08:00
Abdul Aziz Ali
5fe5804b56 Add enterprise fee check in system admin ordercycles simple spec #11326 2024-07-09 08:49:45 +08:00
Konrad
d60d29b685 Merge pull request #12634 from chahmedejaz/bugfix/12632-voucher-field-focus-issue
Fix Voucher Code Field Focus Issue
2024-07-08 12:19:19 +02:00
wandji20
ac347b9c8e Redirect successful user signup request to main home page [OFN-11597] 2024-07-08 10:12:33 +01:00
wandji20
8a8a178683 Fix Product description not correctly truncated [OFN-10685] 2024-07-08 10:04:16 +01:00
Gaetan Craig-Riou
5c136f8baa Fix OrderCycleController to use products_relation 2024-07-08 10:35:57 +10:00
Gaetan Craig-Riou
c372bf746a Refactor ProductRenderer
The sorting logic has been moved to
OrderCycles::DistributedProductsService#product_relations

Plus hopefully fix the spec flackiness
2024-07-08 10:35:57 +10:00
Gaetan Craig-Riou
79a22aefc3 Refactor #products_relation
Due to primary_taxon and supplier having moved to the variant, filtering
by_producer and by_category with a custom order involves some
complicated sql queries. So we moved the sorting logic from
ProductsRenderer to OrderCycles::DistributedProductsService so we can
keep the complicated SQL logic contained in one place
2024-07-08 10:35:57 +10:00
Gaetan Craig-Riou
17fe492bf4 Fix typo 2024-07-08 10:35:57 +10:00
Gaetan Craig-Riou
47faedc295 Merge pull request #12646 from openfoodfoundation/dependabot/npm_and_yarn/trix-2.1.2
Bump trix from 2.1.1 to 2.1.2
2024-07-08 09:48:54 +10:00
cyrillefr
ce8a2b3251 Fixes Rails/SkipsModelValidations offenses
- increments! & decrement! skip validations
 - replaced increment! method calls
 - one call was for a redefined increment! method
 - the other for a regular(ActiveRecord::Persistence)
 - removes increments/decrements definition now useless
2024-07-05 16:35:40 +02:00
dependabot[bot]
ac2f59bdb2 Bump trix from 2.1.1 to 2.1.2
Bumps [trix](https://github.com/basecamp/trix) from 2.1.1 to 2.1.2.
- [Release notes](https://github.com/basecamp/trix/releases)
- [Commits](https://github.com/basecamp/trix/compare/v2.1.1...v2.1.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-05 09:44:38 +00:00
Maikel Linke
8d327355f9 Update all locales with the latest Transifex translations 2024-07-05 13:29:17 +10:00
Maikel
c8cb15df33 Merge pull request #12644 from mkllnk/spec-fixes
Fix orders and distributors report after product refactor
2024-07-05 13:25:37 +10:00
Maikel Linke
d602482d91 Fix report spec referencing distributor 2024-07-05 12:08:33 +10:00
Maikel Linke
51f89b995a Update database include statement for report
Fixes:

* spec/lib/reports/orders_and_fulfillment/orders_cycle_supplier_totals_report_spec.rb
* spec/system/admin/reports_spec.rb
2024-07-05 12:04:14 +10:00
Maikel
2b10862779 Merge pull request #12641 from cyrillefr/FixRailsSelectMap
Fixes Rails/SelectMap offense
2024-07-05 11:27:23 +10:00
Maikel
6594b30bf4 Merge pull request #12640 from dacook/bulk-invoice-polling-12215
Poll to check when invoice file finished
2024-07-05 10:05:56 +10:00
Maikel Linke
b131c352a9 Spec backup polling of rendered invoice file 2024-07-05 09:36:50 +10:00
David Cook
e62b640372 Poll to check when invoice file finished
The BulkInvoiceJob already sends a notification via WebSockets once complete, but sometimes that fails. So this is added on top, just in case.
2024-07-05 08:58:10 +10:00
cyrillefr
838974973d Fixes Rails/SelectMap offense
Cf. cop @ https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsselectmap
2024-07-03 13:17:02 +02:00
Rachel Arnould
2c41d065df Merge pull request #12594 from dacook/12559-fix-orders-and-distributors-report
Hide customer data on orders_and_distributors report
2024-07-03 13:12:42 +02:00
Rachel Arnould
045da3c0e5 Merge pull request #12562 from rioug/product-supplier-id
[Product Refactor]  Move supplier to Variant
2024-07-03 13:03:58 +02:00
Gaetan Craig-Riou
cfc51f399f More rebase fix 2024-07-03 13:07:17 +10:00
Gaetan Craig-Riou
fb2575aaeb Fix more rebase issue 2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
be5a228509 Fix rebase issue
and add missing translation
2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
dfe56c1eed Fix flacky spec
In practise we shouldn't have product with mutiple variant with
different supplier, so I think it's fine to not test it.
2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
1ead9208ee Fix rebase issue
Fix test by creating a variant instead of relying on some random data
from the database.
2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
1d86315108 Per review, update comment to match code 2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
f60a79437e Reworked the test to use variant factory
Creating a variant actually create an extra one via the associated
product, as it will create a "standard variant".
As far as I can see there is no way around it, but it should be fixed
once the Product refactor is finished, and product becomes product
group.
Added a comment on the variant factory to explain the problem.

It's not ideal as it will slow down the test suite a little, but I think
it's better to write the code the way you would expect it, and it will
eventually get fixed.
2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
f79691e4bf Ignore supplier_id for Spree::Product 2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
9549f4e506 Update product description 2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
448308710a Per review, distributor are now updated via variant
When a product is deleted, it will delete associated variant and
in turn will touch the affected distributors
2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
f73745a803 David's first review changes 2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
3788b33eb0 First round of code review change 2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
c328ee8087 Remove stockable_by from Product and Variant
It's not used anymore
2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
efbec02fb9 Fix rebase issue 2024-07-03 11:23:02 +10:00
Gaetan Craig-Riou
117f6d3300 First round of code review change 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
56b58219da Update rubocop TODO 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
260211cf15 Fix Ruboxop issue 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
7219f72ac7 Fix rebase issue 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
891f79666d Spree::Product remove in_supplier_or_distributor scope
It is not used anywhere
2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
312c240968 Fix mutilingual spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
b6faa43879 Fix touching distributor callback spec
The original spec check if the supplier and distributor where
updated after deleting product. In reality, the supplier and the
distributor are the same, so no need to test with the supplier
2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
84197aca19 Fix the filtering by properties/supplier properties
- Apply OR when filtering by both product properties and supplier
properties
- Apply AND when filtering by supplier properties and taxon
Filtering by product properties and taxon is handled by ransack, so
no change there
2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
9632f42a40 Fix producer property filtering 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
a52401107a Order cycle API, separate properties and producer_properties
Due to moving the supplier to the variant, we had to add manual search
for producer properties instead of using ransack. So we need a way
for the frontend to diferenciate between product properties and producer
properties. This is the first step towards that
2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
3704b18952 Fix property filtering in shopping system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
feb7e173b1 Fix order cycle controller spec, product properties filtering
And fix the underlying product renderer
2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
3dc7c2bf56 Fix spree product touch supplier
Take into account import product scenario, in this case the variant
doesn't have an assigned supplier yet.
2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
2d707e8acb Fix consumer producer system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
dd8f0aafab Fix ProductImport::EntryProcessor#count_existing_items
Plus spec
2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
564ea0bd49 Fix enterprise touching when associated record updated 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
1c6d10d4e7 Remove supplier_id from simple product serializer 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
b5cf47d306 Fix producer mailer 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
34aba72dea Fix order summary mailer view 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
7b6b365c4f Fix subscription form spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
8244fa7685 Fix enterprise shopfront serializer spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
3eae329cc4 Fix shop system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
848144d378 Fix DFC engine 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
d614780059 Fix product serializer spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
2550f8fd80 Fix cached enterprise serializer spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
7c712f0058 Fix cart system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
725e2bfa48 Fix checkout summary system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
a2de846f2c Fix darkswarm caching system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
9b879da616 Fix Checkout payment system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
0f7f1a5d5c Fix shopping system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
8104d8e37b Fix checkout auth system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
4c274e0a90 Fix groups system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
470986dc19 Fix white label system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
a8cdca89a1 Fix shopping variant overrides system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
1061bf50b4 Fix shopping unit price system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
12c017ab99 Fix checkout tax incl system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
8db7352774 Fix tax not incl checkout system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
4396c39c83 Fix checkout details system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
d53bfe455d Fix guest checkout system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
6538c7adca Fix shopping system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
ca80177954 Fix admin order cycle system spec 2024-07-03 11:21:28 +10:00
Gaetan Craig-Riou
e901886915 Fix report system spec 2024-07-03 11:19:29 +10:00
Gaetan Craig-Riou
add6d15fc4 Fix bulk order management system spec 2024-07-03 11:16:53 +10:00
Gaetan Craig-Riou
0167357f8f Fic enterprise fee summary report system spec 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
61750c51b3 Fix enterprise system spec 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
93660efdf7 Fix subscription crud spec 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
07fb607c35 Small test speed up
`select_datetime_from_datepicker` will manually click through the month
to find the given date. Setting the date to a month from now speed up
the test, and will prevent failing test after 2040
2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
62efde4c98 Fix subscription smoke test 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
8937c3395a Fix order management subscription variant list 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
4115b857f7 Fix revenue by hub system spec 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
e0e78f2798 Fix order and fulfillment system spec 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
315f951f8f Fix order cycle complex editing system spec 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
93a63c5eb5 Fix payment report system spec 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
03ee9529f1 Fix packing report system spec 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
5884edaa1b Fix product import system spec 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
1ea3160a6a Fic enterprises controller 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
f161f51a0e Fix sales tax by producer report 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
b156f722f1 Fix variant override spec 2024-07-03 11:15:10 +10:00
Gaetan Craig-Riou
07fb7b5b5e Fix variant system spec 2024-07-03 11:12:34 +10:00
Gaetan Craig-Riou
6c4c0ebf6f Refactor product page system spec
Remove some duplication and group related test
2024-07-03 11:12:34 +10:00
Gaetan Craig-Riou
ee88e2fdfa Fix product system spec 2024-07-03 11:11:03 +10:00
Gaetan Craig-Riou
9f612270c7 Fix bulk update product page old style
and related product pages
2024-07-03 11:05:01 +10:00
Gaetan Craig-Riou
2ab9ccf73d Bulk edit product, move supplier dropdown to variant 2024-07-03 11:05:00 +10:00
Gaetan Craig-Riou
78abe36327 Fix BUU product page specs 2024-07-03 11:05:00 +10:00
Gaetan Craig-Riou
b891a03468 Fix search by producer, BUU product page 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
63807f198b Fix product set, to handle updating supplier on the variant 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
25371ee9d0 Fix admin pages
- move supplier to variant row on Bulk Edit product page
- add supplier dropdow on add/update variant page
2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
6ee77fa406 Fix sales tax totals by order report 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
83fa080f76 Fix product and inventory report 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
17793e7b12 Fix packing report spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
45f4365385 Fix order cycle management report 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
bfb4997207 Fix product and inventory report, lettuce share 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
c273c6b155 Fix enterprise fee with tax report specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
40892580cd Fix enterprise fee summary report spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
323602abbb Fix customer report specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
fddfd0dbfb Fix bulk coop report 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
c1dc87ae21 Fix enterprise fee calculator spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
f8c2dfb3f7 Fix variants stock level sevice specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
df209fdc2b Fix product tag rules filterer spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
1f904a3e2f Fix orcer cycle form service spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
80c4d9d03b Fix invoice template 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
f38e13b1a0 Fix orders controller spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
93922b484f Fix admin variants controller specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
82b630c0c4 Partially fix admin product controller spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
6d55f8ef2e Fix admin orders controller spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
076200597d Fix shop controller spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
5b3e79e6c8 Fix Line Items controller specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
2e129eab8f Fix API V0 variants controller 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
30decf3f34 Fix API V0 shops controller spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
16709704fd Fix API v0 shipments controller 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
656361c82d Fix API v0 packing report 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
c82444efa9 Fix API v0 products controller 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
507fa028c1 Fix api admin serializers 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
e1c3f0a31c Fix product scope query
Plus a small name refactor
2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
e48cdeba20 Fix product related permissions 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
71b6938961 Fix API V0 order controller spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
586acad8f1 Fix most of api V0 order cycles controller 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
0c9223809b Fix with_properties scope to accept any number of arguments 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
53e7b02471 Fix admin api exchange products controller 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
a873fa692b Fix exchange products renderer and specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
04fb49bc25 Fix admin variant overrides controller specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
b5e76e1dab Fix subscriptions controller specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
2952ebb05c Fix admin report controller spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
3d82309c5f Fix order permission and specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
6d1a6c6d0e Fix orders and fulfillment reports
Plus specs
2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
b13a1e8843 Fix order cycle controller spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
71e4911b9e Fix order cycle permission 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
1b7a5fdb2c Fix inventory items controller 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
765655ae25 Fix bulk line items controller specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
ef298e3b62 Fix taxon 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
95ed806370 Fix shipment specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
612ab097b7 Fix order specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
054d967323 Fix line items
* fix supplier related code
* Fix associations + plus spec
2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
859f7efd02 Fix Spree:Ability 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
d5cc60fd3a Fix ProductImporter and related Class 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
94faf4cf69 Fix invenrory reset strategy spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
b86d8e1603 Fix product import entry validation 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
a87f10b2a6 Fix order cycle spec 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
80112709f3 Fix invoice and api serializer 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
50bd274715 Fix Enterprise 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
d073a181e9 Fix EnterpriseRelationship 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
02b9dfb517 Add after update primary taxon call back
It updates supplier on primary taxon update. It fixes falling
enterprise caching specs.
2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
22f4ae115a Add missing associations and validations specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
8abea0afcf Add missing associations and validations specs 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
5cb59d941a Add transient attribute supplier_id to Spree::Product
supplier_id transient attribute will be saved on the variant
2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
7af36510c8 Fix lambda styling
It follows Style/Lambda cop :
https://docs.rubocop.org/rubocop/1.60/cops_style.html#stylelambda
2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
6290e7ad1c Test the suppliers are touched on destroy 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
06b0b54685 Update attribute translation 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
d9d77d2b25 Migrate supplier to variant 2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
4113880401 Move supplier to variant part 2
Variant model and specs
2024-07-03 10:17:49 +10:00
Gaetan Craig-Riou
d1dd563720 Move supplier to variant part 1 2024-07-03 10:17:48 +10:00
Ahmed Ejaz
ced3408aaa 12632 - add specs 2024-07-02 15:50:55 +05:00
Rachel Arnould
4c141df474 Merge pull request #12628 from rioug/fix-report-go-button
[Reports] Fix data-disable on Go button
2024-07-02 10:05:05 +02:00
David Cook
540d487584 Merge pull request #12595 from filipefurtad0/refactor_products_v3_specs
[BUU] Refactors products_v3 system specs
2024-07-02 16:59:50 +10:00
David Cook
3d9bc2ef4b Update description 2024-07-02 16:59:20 +10:00
David Cook
0d254a8ba4 Move listing block to index file also 2024-07-02 16:54:34 +10:00
filipefurtad0
3a75135029 Moves update and image edit into new file 2024-07-02 16:50:46 +10:00
filipefurtad0
1085da83a9 Moves sorting, pagination, and search describe blocks into new file
Deletes describe blocks from products_spec
2024-07-02 16:49:46 +10:00
filipefurtad0
5cf8eb5efc Extracts helper methods into helper file
The idea is to split the main spec into several smaller ones; these would share the helper file
2024-07-02 16:45:46 +10:00
Maikel
a83daae873 Merge pull request #11645 from filipefurtad0/activate_buu_toggle_by_default_to_run_the_test_suite
[BUU] Activate admin_style_v3 for most system specs
2024-07-02 11:27:54 +10:00
Maikel
d3e00cd4b7 Merge pull request #12633 from openfoodfoundation/dependabot/npm_and_yarn/floating-ui/dom-1.6.7
chore(deps): bump @floating-ui/dom from 1.6.6 to 1.6.7
2024-07-02 10:59:29 +10:00
Gaetan Craig-Riou
7a741d92e7 Merge pull request #12630 from dacook/cleanup
Remove unused spec code
2024-07-02 10:05:17 +10:00
Ahmed Ejaz
02c0c6aa5e 12632 - fix voucher field focus issue
- when disabling or enabling the control, we should only focus it if it's not a button.
2024-07-01 14:49:38 +05:00
dependabot[bot]
33b680c67c chore(deps): bump @floating-ui/dom from 1.6.6 to 1.6.7
Bumps [@floating-ui/dom](https://github.com/floating-ui/floating-ui/tree/HEAD/packages/dom) from 1.6.6 to 1.6.7.
- [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.6.7/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>
2024-07-01 09:05:34 +00:00
David Cook
b1aafbf843 Remove old migration spec
It breaks due to a change of the spec environment. There's no point fixing it, it's no longer required.
2024-07-01 15:31:27 +10:00
David Cook
c80199e8b1 Use normal capitalisation for translation 2024-07-01 15:31:27 +10:00
David Cook
b1721d69a2 todo: make specs work with admin_style_v3 2024-07-01 15:31:25 +10:00
David Cook
109432d282 fixup: feature toggle old screen 2024-07-01 14:58:27 +10:00
David Cook
5f01bb40d2 Remove unecessary message
I'm not sure why it's not appearing on my computer, but it was an unnecessary duplicate message, so I'm happy to remove it.
2024-07-01 14:58:27 +10:00
David Cook
39cae4468a Fix more uppercase tests after rebase
These seem to have been changed since the previous rebase.
2024-07-01 14:58:22 +10:00
David Cook
3a8c44d0c6 fixup: Updates spec to create a variant within BUU design 2024-07-01 12:38:10 +10:00
filipefurtad0
6dfef8104d Fixes rebase 2024-07-01 12:24:26 +10:00
filipefurtad0
9e25893401 Sets variant creation scenarios on_hand/on_demand as shared examples 2024-07-01 12:24:26 +10:00
filipefurtad0
8028610fe6 Updates spec to create a variant within BUU design 2024-07-01 12:24:26 +10:00
filipefurtad0
ba355fdaab Removes mouse clicks to display variants
This feature does not exist in BUU

Replaces previous add variant button click with correct version
2024-07-01 12:24:26 +10:00
filipefurtad0
c226b10827 Updates case on orders_spec.rb 2024-07-01 12:24:26 +10:00
filipefurtad0
80e817725e Mouse hovering displays the text
on the New variant button

This test needs to be improved as, for Capybara, the text seems to be always visible, although it only does become visible by hovering.
2024-07-01 12:24:26 +10:00
filipefurtad0
9f98dc253d Adds assertions on table header 2024-07-01 12:24:26 +10:00
filipefurtad0
5824516ce0 Fixes case 2024-07-01 12:24:26 +10:00
filipefurtad0
bcbc7c7930 Fixes rubocop inconsistency 2024-07-01 12:24:26 +10:00
filipefurtad0
03a9f6811c Fixes rubocop inconsistency 2024-07-01 12:24:26 +10:00
filipefurtad0
4e24af2f94 Applies helper changes 2024-07-01 12:24:23 +10:00
filipefurtad0
0a4c2a1903 Updates tom_select_helper.rb with the recent changes from master 2024-07-01 12:24:00 +10:00
filipefurtad0
0fa272a125 Changes helper for dropdown selection 2024-07-01 12:24:00 +10:00
filipefurtad0
2c3778360b Updates selector 2024-07-01 12:24:00 +10:00
filipefurtad0
8b036e5108 Removes search block - covered already a few lines below
under _describe search_ block
2024-07-01 12:23:52 +10:00
filipefurtad0
c4b2748282 Adds pending test case on creating variants 2024-07-01 12:09:14 +10:00
filipefurtad0
5af5eb7ecf Replaces all with find, within tom_select helper method
Moves existing tom select helper methods into separate file
2024-07-01 12:09:14 +10:00
filipefurtad0
289414a504 Adds tests around product creation
Introduces a tom-select helper file
2024-07-01 12:09:14 +10:00
filipefurtad0
d88db1365d Updates specs to accomodate changes on warnings/banners 2024-07-01 12:09:14 +10:00
filipefurtad0
3af5330998 Updates product category test 2024-07-01 12:09:14 +10:00
filipefurtad0
e09fa3e04a Updates v3 products page 2024-07-01 12:09:14 +10:00
filipefurtad0
2937bdc1d2 Deals with overlapping elements 2024-07-01 12:09:14 +10:00
filipefurtad0
c7894892f6 Deals with overlapping elements
Comments assertion due to overlapping elements
2024-07-01 12:09:14 +10:00
filipefurtad0
7303c40c92 Introduces helper to deal with overlapping elements
Fixes overlapping elements
2024-07-01 12:09:14 +10:00
filipefurtad0
50c7392c5e Deals with overlapping elements 2024-07-01 12:09:14 +10:00
filipefurtad0
4871e0082e Deals with overlapping elements
Deals with elements outside page range
2024-07-01 12:09:14 +10:00
filipefurtad0
8897e99113 Clicks OC warning modal away so other buttons are reachable
Another option would have been to use page.find(:button, Save).trigger(click)
2024-07-01 12:09:14 +10:00
filipefurtad0
527136105f Fixes case on products_spec.rb 2024-07-01 12:09:14 +10:00
filipefurtad0
8a198705e3 Fixes case on reports_spec.rb 2024-07-01 12:09:14 +10:00
filipefurtad0
b9bb4a4dcb displays a list of products
...adapted from ./spec/system/admin/bulk_product_update_spec.rb:23

Sets test as pending from issue #11060
2024-07-01 12:09:14 +10:00
filipefurtad0
1c580c42f4 Adds assertions on products page, when no products are found
Removes migrated test from legacy product spec file
2024-07-01 12:09:14 +10:00
filipefurtad0
5e4381cc63 Fixes case on failing test 2024-07-01 12:09:14 +10:00
filipefurtad0
9aecf9feb4 Brings the tests back to green, after rebasing
This is a WIP branch, and each time we rebase we'll have some specs breaking. The changes in this commit mostly relate to the change in /admin/products URL, which points to the new BUU prodcts page; disabling the feature around related tests brings the branch back to green.
2024-07-01 12:09:14 +10:00
filipefurtad0
308c559810 Fixes case on assertions, on failing specs
Selects white_label tab with trigger(click)

Scrolling down did no fix it, it still fails https://github.com/openfoodfoundation/openfoodnetwork/actions/runs/6526149195/job/17719815533?pr=11645, selecting the element with trigger(click) should work

Updates invoice tests
2024-07-01 12:09:14 +10:00
filipefurtad0
500b9ed1c7 Enables admin_style_v3 toggle by default 2024-07-01 12:09:11 +10:00
David Cook
c747b2e60c Remove unused code
We don't use poltergeist, and it just works fine now.
2024-07-01 10:43:06 +10:00
Gaetan Craig-Riou
9833ac67df Fix data-disble on Go button 2024-07-01 10:04:50 +10:00
Konrad
5bb47823c6 Merge pull request #12619 from rioug/12559-disable-report-button
[Reports] Disable GO button once clicked
2024-06-28 17:11:29 +02:00
Konrad
909bc2792c Merge pull request #12565 from chahmedejaz/task/11987-remove-SR-from-clone
11987: Prevent Reloading the whole table upon Product Clone
2024-06-28 15:35:52 +02:00
Konrad
04dd463f8e Merge pull request #12592 from mkllnk/report-rendering
Load large on-screen reports on demand
2024-06-28 11:14:38 +02:00
Maikel Linke
b117fd03da Simplify spec checking for disabled button 2024-06-28 08:42:24 +10:00
David Cook
d799230440 Update controller to catch more specific error
We now know which errors to expect. We still let other unknown errors raise higher up, where they will be logged with BugSnag, and treated as internal_server_error.
2024-06-27 12:51:28 +10:00
David Cook
92bd7a5d37 Revert new product duplicator behaviour 2024-06-27 11:39:49 +10:00
David Cook
898ab08bab Add specs for invalid records
It turns out that the duplicator still raises an exception in some cases. Now I think I see why the the controller was catching the exceptions. At least now we know which exceptions to catch.
2024-06-27 11:39:49 +10:00
Ahmed Ejaz
b1a3bff2ed 11987: add failing spec for product clone 2024-06-26 16:48:14 +05:00
Ahmed Ejaz
4315a05eb8 11987: fix lint issue 2024-06-26 16:32:32 +05:00
Ahmed Ejaz
0aea201d53 11987: update mocking save! to save 2024-06-26 16:31:16 +05:00
Ahmed Ejaz
5a259f1b91 Merge branch 'master' into task/11987-remove-SR-from-clone 2024-06-26 16:18:42 +05:00
Ahmed Ejaz
9f832e6743 11987: update code as per new product duplicator behavior 2024-06-26 16:16:13 +05:00
Ahmed Ejaz
95972c75c6 11987: remove rescue StandardError from controller 2024-06-26 16:10:31 +05:00
Ahmed Ejaz
3f6e5e7d09 11987: duplicate product without raising error 2024-06-26 16:00:59 +05:00
David Cook
0001ffa970 Fix product index
The param product_index wasn't present, so it was always choosing 1.
The products on page are indexed 0-14, so of course it would always conflict.

It would be simpler if we just used product IDs as the index, I think I did earlier but don't remember why not.
Anyway, using a negative number seems to work.
If there's an error, there will only be one at a time.
2024-06-26 17:04:49 +10:00
Gaetan Craig-Riou
74fb6c3143 Disable GO button once clicked
It is disabled both on client side and server side, so even if the
server takes a while to respond the button is disabled
2024-06-26 16:01:05 +10:00
Gaetan Craig-Riou
ad78210b00 Update all locales with the latest Transifex translations 2024-06-26 14:18:59 +10:00
David Cook
a22c17a520 Merge pull request #12618 from dacook/buu/page-title
[BUU] Add translation for "Products V3" page title
2024-06-26 10:03:21 +10:00
David Cook
0e26df2c18 Add translation for products_v3 page title 2024-06-26 09:43:38 +10:00
David Cook
2269bcee4c Merge pull request #12616 from chahmedejaz/task/12603-auto-author-assign-workflow
Add Auto Author Assign Workflow for Pull Requests
2024-06-26 09:27:58 +10:00
Gaetan Craig-Riou
cb98f2f3d5 Merge pull request #12606 from dacook/buu/enable-admin_style_v3-new_users
[BUU] Enable admin_style_v3 for new users from 3/07/2024
2024-06-26 09:23:40 +10:00
Gaetan Craig-Riou
1f018292f7 Merge pull request #12605 from abdellani/12373_12374_fix_bulk_invoice_sending_printing
[Invoices] Notify if any order cannot be invoiced on bulk invoice printing (update the behavior only when invoice flag enabled )
2024-06-26 09:16:55 +10:00
Maikel
8dff2e6017 Merge pull request #12614 from cyrillefr/FixRailsUnknownEnv
Fixes Rails/UnknownEnv offense
2024-06-26 09:06:00 +10:00
Maikel
2619e12216 Merge pull request #12617 from openfoodfoundation/dependabot/npm_and_yarn/floating-ui/dom-1.6.6
chore(deps): bump @floating-ui/dom from 1.6.5 to 1.6.6
2024-06-26 09:03:49 +10:00
Abdul Aziz Ali
9d12e55bd7 Add enterprise fees controller spec #11326 2024-06-26 06:36:57 +08:00
Abdul Aziz Ali
b3570991f4 Rubocop. Fix cyclomatic complexity in fees controller #11326 2024-06-26 06:36:42 +08:00
dependabot[bot]
dd68ccdf2d chore(deps): bump @floating-ui/dom from 1.6.5 to 1.6.6
Bumps [@floating-ui/dom](https://github.com/floating-ui/floating-ui/tree/HEAD/packages/dom) from 1.6.5 to 1.6.6.
- [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.6.6/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>
2024-06-25 09:59:33 +00:00
cyrillefr
b09f41136f Fixes Rails/UnknownEnv offense
- Cop: Rails/UnknownEnv
- Cf. https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsunknownenv
- Rails.env.typo? will always return false and will not return an error
- The way to check this is to add environments in the Environments config parameter
- in the rubocop file.
2024-06-25 10:18:45 +02:00
Ahmed Ejaz
feb1fa1198 12603 - add auto-author-assign workflow 2024-06-25 12:20:24 +05:00
David Cook
93798ed54b Merge pull request #12599 from chahmedejaz/task/12346-rubocop-rails-pluck-and-pluck-where
12346 - Fix Rubocop Rails/Pluck and Rails/PluckInWhere
2024-06-25 17:12:18 +10:00
Ahmed Ejaz
bb6e69ff56 Merge branch 'master' into task/12346-rubocop-rails-pluck-and-pluck-where 2024-06-25 11:53:50 +05:00
David Cook
b4ef83b3a7 Enable admin_style_v3 for new users from 3/07/2024 2024-06-25 13:04:36 +10:00
Maikel
c8e134cef5 Remove redundant wait loading report content
Co-authored-by: Gaetan Craig-Riou <40413322+rioug@users.noreply.github.com>
2024-06-25 11:50:01 +10:00
Gaetan Craig-Riou
3afb3f5ba0 Merge pull request #12601 from cyrillefr/FixRailsRelativeDateConstant
Fixes Rails/RelativeDateConstant offense
2024-06-25 09:15:29 +10:00
Mohamed ABDELLANI
a3fd7b77c8 notify if any distributors doesn't have an abn 2024-06-24 14:46:01 +01:00
Ahmed Ejaz
72640cfc2a 12346: refactor orders_controller spec 2024-06-24 14:43:17 +05:00
Ahmed Ejaz
ff10a36e4a 12346: refactor bulk_line_items_controller spec 2024-06-24 14:25:34 +05:00
cyrillefr
980ce95ab2 Requested changes
- replace direct instance variable use by instance getter use
2024-06-24 10:37:43 +02:00
Gaetan Craig-Riou
c4470f76e3 Merge pull request #12593 from filipefurtad0/regression_spec_12591
Adds regression spec for #12591
2024-06-24 14:46:29 +10:00
Gaetan Craig-Riou
cd768a1fe9 Merge pull request #12585 from mkllnk/flaky-caching
Ensure all assets are compiled on test page visit
2024-06-24 14:44:11 +10:00
Gaetan Craig-Riou
c756afa1cc Merge pull request #12571 from filipefurtad0/adds_spec_on_abn_restriction
Adds test case to assure acceptance criteria from #12374 and #12373
2024-06-24 14:41:31 +10:00
Gaetan Craig-Riou
67cac1f4d6 Fix search to return expected data
As explained in Reporting::ReportTemplate::ReportsHelper, 'search' and
`query_result` are not supposed to return the same things
2024-06-24 14:04:35 +10:00
Ahmed Ejaz
afd09091a2 12346 - fix broken specs 2024-06-22 02:11:39 +05:00
cyrillefr
659111932c Fixes Rails/RelativeDateConstant offense
- Cop: Rails/RelativeDateConstant
- raises offense if Constant is relative data (ie: since, ago)
- Reason: relative data will be evaluated only once
- BUT here, Date should not be evaluated in a class method, and have a different
- value for each call. But the data should be the same for an instance
- Therefore: move the ago in init method
- Cf. https://docs.rubocop.org/rubocop-rails/cops_rails.html#railsrelativedateconstant

- Since there is no constant to be called form a class, but a date from an instance, the
  spec has been modified accordingly. The RemoveTransientData.new.call had to be splitted.
2024-06-21 23:07:16 +02:00
Ahmed Ejaz
9dd427ab7f 12346 - fix rubocop rails/pluckInWhere errors 2024-06-22 01:54:54 +05:00
Ahmed Ejaz
98e0b0e703 12346 - fix rubocop rails/pluck errors 2024-06-22 01:45:58 +05:00
Maikel
0dd7f264b9 Merge pull request #12542 from anansilva/12448-sanitise-html-custom-tab
Sanitize HTML in custom tab content [read only]
2024-06-21 08:35:26 +10:00
filipefurtad0
1d55c05900 Update all locales with the latest Transifex translations 2024-06-20 11:17:26 -06:00
Konrad
f9e1ff9238 Merge pull request #12567 from mkllnk/flash-css-fix-v3
Error messages don't block bottom of page clicks
2024-06-20 17:22:02 +02:00
Ana Nunes da Silva
d2c6db0d04 Sanitize CustomTab#content 2024-06-20 11:56:09 +02:00
Konrad
25d375bf8e Merge pull request #12577 from cyrillefr/WhiteLabelButtonAlwaysInactive
Update button should change status on modified white label
2024-06-20 11:39:58 +02:00
Ahmed Ejaz
349862c72e 11987: fix specs 2024-06-20 13:41:41 +05:00
Ahmed Ejaz
86c87962f9 11987: add missing translation 2024-06-20 13:09:48 +05:00
Ahmed Ejaz
4b9141f66d 11987 - add products table mutation listner 2024-06-20 12:44:55 +05:00
David Cook
d80e1efa7b Add includes for more efficient querying 2024-06-20 17:02:47 +10:00
David Cook
54d068ee08 Add spec for db queries 2024-06-20 17:02:47 +10:00
David Cook
141a883e4d Refactor report
So it turns out that all these features are built into the report framework.

LineItems includes complete_not_canceled_visible_orders.
It even takes care of masking non-editable orders.
2024-06-20 17:02:47 +10:00
David Cook
5b8f590520 Add spec for bug
You wouldn't believe how long it took me to figure out all the bits and pieces.
But now you don't have to!
2024-06-20 17:01:14 +10:00
David Cook
0cff734b86 Refactor spec
Linter said module was too big. I agreed, so made it smaller.

Best viewed with whitespace ignored.
2024-06-20 16:58:09 +10:00
Maikel Linke
98a29785a7 Load large on-screen reports on demand
Sending large reports via Cable Ready is unreliable. The events are
dropped at an unknown point and the report is never displayed to the
user. Instead we just send a link to the report via Cable Ready and
offer a button to load the report on screen.

This has the UX benefit of warning the user about the size as well.
Weaker devices can struggle rendering big HTML documents.
2024-06-20 11:32:33 +10:00
filipefurtad0
48a39f20e8 Adds regression spec for #12591 2024-06-19 19:30:42 -06:00
filipefurtad0
d1560ce15e Adds shared examples for bulk send invoices in PDF 2024-06-19 17:58:58 -06:00
David Cook
0e0a7d9d3e Merge pull request #12589 from cyrillefr/FixRailsRedundantActiveRecordAllMethodIssue
Fixes Rails/RedundantActiveRecordAllMethod issues
2024-06-20 09:40:56 +10:00
David Cook
66606eeeab Merge pull request #12584 from mkllnk/spec-refactor
Update spec for quotation mark replacement
2024-06-20 09:37:09 +10:00
David Cook
ef195876fa Merge pull request #12590 from abdellani/12452-improve-logging
update message logged when a product is deleted
2024-06-20 09:27:51 +10:00
Maikel
f933ae83c8 Merge pull request #12581 from dacook/cache-ci-yarn
Cache yarn global package data in CI
2024-06-20 09:01:05 +10:00
filipefurtad0
3380175c30 Restructures spec to accommodate shared example on bulk printing 2024-06-19 16:52:36 -06:00
Maikel
a9225543da Merge pull request #12554 from mkllnk/dfc-logo
Add enterprise logo and contact name to DFC API with standard attributes
2024-06-20 08:49:27 +10:00
filipefurtad0
59b6cdaf01 Extends tests to cases where ABN is an empty string
Removes pending and changes testcase

As discussed on Slack we will not fix old invoice model, for ref. see: https://openfoodnetwork.slack.com/archives/CG7NJ966B/p1718781775612759?thread_ts=1718249609.127149&cid=CG7NJ966B
2024-06-19 16:42:10 -06:00
Abdellani
0337464291 update logged message when a product is deleted 2024-06-19 15:15:04 +01:00
Abdellani
7a015bad96 populate destroyed_by on produce_v3_controller#destory 2024-06-19 15:14:32 +01:00
cyrillefr
654fda89ca Fix Rails/RedundantActiveRecordAllMethod issues
- Cop: Rails/RedundantActiveRecordAllMethod
- if receiver is an Active Record object, ".all" can be safely removed
- There are 2 allowed receivers that are listed in the
  styleguide file (those are defaults cf. cop documentation).
2024-06-19 14:32:21 +02:00
Maikel
ef7f1d335f Merge pull request #12587 from openfoodfoundation/revert-12536-stock-levels
Revert "Allow negative stock levels for on-demand products"
2024-06-19 15:46:54 +10:00
Maikel
8837f1caa2 Revert "Allow negative stock levels for on-demand products" 2024-06-19 15:18:57 +10:00
Maikel Linke
d5b77a4f80 Ensure all assets are compiled on test page visit 2024-06-19 11:45:28 +10:00
Maikel Linke
10f0eeef0b Update spec for quotation mark replacement
I'm not sure why, but the pre-compiling of assets triggered Rails to
render `style="..."` instead of `style='...'` in this case. But when
assets are compiled on-demand, we get the single quotes. So I changed
the spec to be agnostic of this detail. We actually just want to know
about the link and its href.
2024-06-19 11:40:09 +10:00
filipefurtad0
fe93e3ed97 Restructures spec
Separating into different contexts, with and without invoices feature enabled
2024-06-18 19:32:44 -06:00
Maikel
1e189207ed Merge pull request #12583 from dacook/add-attachment-translation
Add translation key for Spree::Image#attachment
2024-06-19 11:20:07 +10:00
Maikel
af2e7db155 Merge pull request #12582 from cyrillefr/FixRails_UnusedRenderContentIssues
Fixes offenses raised by Rails/UnusedRenderContent
2024-06-19 11:19:22 +10:00
Maikel
2188e96dfb Merge pull request #12575 from zanetagebka/RedundantInterpolationCops
Solve Rubocop RedundantInterpolation cops
2024-06-19 11:01:42 +10:00
David Cook
6ce442a42e Add translation key for Spree::Image#attachment 2024-06-19 09:49:15 +10:00
David Cook
2676891322 Merge pull request #12546 from dacook/buu/change-columns-11055
[BUU] Change product columns to be shown
2024-06-19 09:25:47 +10:00
Gaetan Craig-Riou
55ae1ba29f Merge pull request #12579 from openfoodfoundation/dependabot/npm_and_yarn/ws-6.2.3
chore(deps): bump ws from 6.2.2 to 6.2.3
2024-06-19 09:17:53 +10:00
David Cook
6fd3cada8c Fix classname 2024-06-19 09:13:53 +10:00
zanetagebka
b4bfcb7cc8 rubocop_todo recreate 2024-06-18 14:34:03 +02:00
zaneta.gebka
5cc33d1e0c Merge branch 'master' into RedundantInterpolationCops 2024-06-18 14:33:12 +02:00
zanetagebka
c6254a5b7e rubocop_todo recreate 2024-06-18 14:32:41 +02:00
cyrillefr
a155630b1c Fixes offenses raised by Rails/UnusedRenderContent
- in any cases, adding status: :no_content dropes content from response
- replaced by head :no_content (HTTP 204)
2024-06-18 13:33:19 +02:00
Rachel Arnould
0c6cc9b822 Merge pull request #12558 from cyrillefr/BUUUploadingCorruptProductImagesFailsSilently
BUU Display error messages when file not valid
2024-06-18 12:12:51 +02:00
David Cook
b8f8d6d042 Show/hide columns with CSS selectors instead
Well, that made the JS way simpler.

Adds a lot of classes though. Maybe we could do it based on column index instead, but this will do for now.
table.hide-col0 { td:nth-child(0) { display: none; } }
2024-06-18 15:35:53 +10:00
David Cook
4023dc2265 Cache yarn dependencies
I don't know what this actually does, because it doesn't install the dependencies, that still needs to happen next.
But surely any cache is a good thing?
2024-06-18 13:09:45 +10:00
dependabot[bot]
9543b597d0 chore(deps): bump ws from 6.2.2 to 6.2.3
Bumps [ws](https://github.com/websockets/ws) from 6.2.2 to 6.2.3.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/6.2.2...6.2.3)

---
updated-dependencies:
- dependency-name: ws
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-18 02:16:27 +00:00
Ahmed Ejaz
d2737bd8b0 11987: refactored code 2024-06-18 00:44:10 +05:00
Ahmed Ejaz
05fe7cd4b9 11987: add flash messages for product clone 2024-06-17 23:17:32 +05:00
Ahmed Ejaz
30528cab0f 11987: add slide-in animation for product clone 2024-06-17 22:58:36 +05:00
Ahmed Ejaz
539ffb1f35 11987: add product clone turbo partial 2024-06-17 21:59:26 +05:00
Ahmed Ejaz
df2bad9b8f 11987: add product_variant_row partial 2024-06-17 21:59:07 +05:00
Ahmed Ejaz
fa3b84b71f 11987: add clone action 2024-06-17 21:58:07 +05:00
Ahmed Ejaz
2ca4febf90 11987: add product clone route 2024-06-17 21:57:19 +05:00
cyrillefr
8616847793 Update button should change status on modified white label
- swap position between users & white label so that user's inner form
- does not interfere with white_label own position in outer form
- modified spec so that lowermost user is clickable
2024-06-17 17:11:19 +02:00
zanetagebka
dd7ae1330f Merge remote-tracking branch 'origin/RedundantInterpolationCops' into RedundantInterpolationCops
# Conflicts:
#	.rubocop_todo.yml
2024-06-17 15:40:03 +02:00
zanetagebka
93eda48138 recreate rubocop_todo 2024-06-17 15:39:29 +02:00
zanetagebka
ad92d4b129 Solve Rubocop RedundantInterpolation cops 2024-06-17 15:37:39 +02:00
zanetagebka
422965748f Solve Rubocop RedundantInterpolation cops 2024-06-17 15:32:25 +02:00
David Cook
aff50f66c4 Name and Producer columns grow to fill and other tweaks
If neither are visible, the first column on the left (eg image) will grow. But that's not a likely scenario.

Min-widths help manage sizes on smaller screens in Chrome.
The title for Inherits Properties gets cut off, but I think it's better than cutting off content.

Oh look, it fixed a spec too!
2024-06-17 12:27:06 +10:00
Gaetan Craig-Riou
cc45b9a0d3 Merge pull request #12557 from filipefurtad0/feature_parity_buu
Updating specs for BUU (feature parity)
2024-06-17 09:39:01 +10:00
cyrillefr
e07cf6c628 Do not use rescue as control flow 2024-06-16 23:38:38 +02:00
Maikel Linke
885f679eb1 Update all locales with the latest Transifex translations 2024-06-14 11:26:09 +10:00
Maikel
70ad8c80e1 Merge pull request #12568 from openfoodfoundation/revert-12458-12374-bulkk-sending-invoice-must-show-error-if-abn-require-and-not-set
Revert "[Invoices] Notify if any order cannot be invoiced on bulk invoice sending"
2024-06-14 11:23:52 +10:00
Maikel Linke
6a4a238378 Avoid flakiness with Capybara features
Capybara should be clever enought to scroll to an element. The old
method failed nine times in CI. I couldn't reproduce it locally but
let's see if this is better.
2024-06-14 10:47:35 +10:00
Maikel Linke
3c9f77dc2b Restore image display with absolute width
The `min-width` property is ignored by Firefox. And we don't need the
column to grow any bigger than the picture size anyway. An absolute
width is correct here.

The specification says:

> Applies to all elements but non-replaced inline elements, table rows,
> and row groups.

Firefox is totally right in ignoring it.
2024-06-14 09:48:55 +10:00
filipefurtad0
9cd1977cf8 Removes product creation test
This is already covered some lines above and on e22bec014b/spec/system/admin/products_spec.rb (L29)
2024-06-13 12:15:24 -06:00
filipefurtad0
9e5c21f7cd Corrects test case by adding expect
has_select? only returns true or false, it requires an assertion to assure the test is evaluated

Improves syntax
2024-06-13 12:06:34 -06:00
Filipe
df30c1af98 Revert "[Invoices] Notify if any order cannot be invoiced on bulk invoice sending" 2024-06-13 08:55:59 -06:00
Filipe
e22bec014b Merge pull request #12538 from cyrillefr/UpdateAndRecalculateFeesAfterOrderAdjustedInBackend
Update and Recalculate Fees after Order Adjusted in Backoffice
2024-06-13 08:53:43 -06:00
cyrillefr
0470efa502 Requested changes: turbo_stream for success
- must respond via turbo for create and update for success
- changed the spec accordingly
2024-06-13 15:22:54 +02:00
Maikel Linke
81a8ee5a31 Error messages don't block bottom of page clicks
The flash container was set to 100% width to center the messages on the
screen. The messages were covering only part of the screen though. So
the container beyond the actual message box was covering part of the
page, blocking clicks on elements.

A new way of centering the container with CSS translate means that the
width of the container can be the same as the content, not covering
anyting accidentally.

And moving the whole container up instead of only moving the contained
message allows us to interact with elements below the flash message as
well.
2024-06-13 11:20:54 +10:00
David Cook
5d0e241f8c Pending spec
Probably due to column tweaks, revealing different existing problems.
2024-06-13 11:12:31 +10:00
David Cook
b25d2ed32a Refactor to fix Metrics/AbcSize linter 2024-06-13 10:51:35 +10:00
David Cook
db27fc5a2b Remove dead code
I'm pretty sure that case doesn't happen, and besides there's no spec for it.
2024-06-13 10:51:00 +10:00
David Cook
a7ef243262 Enable all columns by default 2024-06-13 10:43:33 +10:00
David Cook
e7774d7a24 Lint fix
Sorry didn't have time to go back and rebase
2024-06-13 10:39:19 +10:00
David Cook
9ae4d347aa Update widths
For some reason, minimum widths work now (I swear they didn't before).

Hmm i would really like to shorten that stimulus controller name.
2024-06-13 10:36:28 +10:00
Maikel
2f173cb5c2 Merge pull request #12536 from mkllnk/stock-levels
Allow negative stock levels for on-demand products
2024-06-13 10:26:01 +10:00
David Cook
d5456a85b7 Reset cell colspans
This might be a little simpler if we move the 'new variant' button to col 0, and assume colspan cells always span the whole table.
2024-06-13 10:09:02 +10:00
David Cook
70fab2bcc1 Show/hide columns using display instead of visibility
Visibility was way simpler, but the table doesn't recalculate column widths until you use display:none;

This is now using the same method as the old products screen.
But we still need to update colspans..
2024-06-13 10:08:56 +10:00
David Cook
0190d6f31d Update dropdown styles
The v2 dropdown is used in various places, and now looks more in line with the new design.
2024-06-13 10:08:02 +10:00
David Cook
8c75e6baa8 Make column selector a dropdown
With some styling tweaks.
2024-06-13 10:07:55 +10:00
Maikel
5b95ef3bd9 Merge pull request #12525 from mkllnk/fdc-import
Add compatibility to the DFC product import for FDC (Shopify) API
2024-06-13 09:51:05 +10:00
Filipe
b1f7807150 Merge pull request #12458 from abdellani/12374-bulkk-sending-invoice-must-show-error-if-abn-require-and-not-set
notify the user if any order cannot be invoiced on bulk invoice sending
2024-06-12 16:48:51 -06:00
David Cook
9ba3b4f2d5 Fix up styles 2024-06-12 14:58:09 +10:00
David Cook
c6452efa92 Isolate styles for their intended use
This also improves the styling of the orders action dropdowns (on index and edit pages). It adds the new chevron icon, but needed some fiddling to make it look right.
2024-06-12 14:58:09 +10:00
David Cook
e516e7f335 Tweak checkbox dropdown styles
Use the new design for checkboxes and fix alignment.

Removes redesigned-input, which is a small regression on the old design, but I think it's acceptable bcause we're going to shut it down soon.
2024-06-12 14:58:09 +10:00
David Cook
ae66a85cc5 Show error messages
There shouldn't normally be errors, but I got one due to bad data during development, and this helped sort it out.
2024-06-12 14:58:09 +10:00
David Cook
d81c3cb489 Show/hide columns based on checkboxes
The cols could have been a lot cleaner with simple classnames, but I preferred to mark up in a way that reveals the purpose (otherwise they could be used for styling).

It doesn't seem to be any faster comparing querySelector('[data]') vs class, or iterating through the dom nodes.
2024-06-12 14:58:00 +10:00
David Cook
89cedc4287 Submit and render with Turbo Stream 2024-06-12 14:49:59 +10:00
David Cook
50469fe53e Use consistent translation keys
Ensures that the column table names match the names in the selector.

I thought 'there must be a way to set the translation scope once'. With Rails, there's usually a way. Thankfully this one was quite simple. Or is it too much magic.. 🧙

https://coderwall.com/p/dvme9q/set-scope-of-i18n-translations-in-rails-with-a-block
2024-06-12 14:49:59 +10:00
David Cook
68da9c9e04 Add form to save column preferences 2024-06-12 14:49:53 +10:00
Abdul Aziz Ali
e2aca63fff Rubocop. Change yield_self to then #11326 2024-06-12 08:52:43 +08:00
Abdul Aziz Ali
e537bda9b7 Display only per_item fees for oc incoming exchange #11326
Add per_item param to EnterpriseFee angular service and rails controller
2024-06-12 08:29:34 +08:00
cyrillefr
c5decfc58b Bugfix introduced by last commit
- fixed bug created by last commit
- refactored to new method respond_with_error
- need for 2 cases in request spec: html & turbo
2024-06-12 00:31:19 +02:00
filipefurtad0
10dbe77f71 Adds test to check permissions when updating a product 2024-06-11 14:51:28 -06:00
filipefurtad0
417fd21470 Adds test to check permissions when creating a new product 2024-06-11 14:51:28 -06:00
filipefurtad0
8e2419040e Adds test around inactive product 2024-06-11 14:51:28 -06:00
filipefurtad0
0392034850 Adds test case on enterprise permissions 2024-06-11 14:51:28 -06:00
filipefurtad0
c4c7f03b6b Addresses Gaetans review
Removes assertions from before block, as Delete case is tested elsewhere

Declares enterprise_user variable as a non-instance variable
2024-06-11 14:51:28 -06:00
filipefurtad0
3b0779d3a7 reverts changes on products_spec 2024-06-11 14:51:28 -06:00
filipefurtad0
2725232902 Adds tests around managing rights -> 'as an enterprise manager' 2024-06-11 14:51:28 -06:00
filipefurtad0
d5ae9b5bcc Adds a test to assure that the new product path works as expected
The funcitonaliy itself should not be affected by BUU, so the tests remain at ./spec/system/admin/products_spec.rb
2024-06-11 14:51:28 -06:00
filipefurtad0
50359695b5 Removes comment on issue #7180, now closed 2024-06-11 14:51:28 -06:00
filipefurtad0
a8ff696792 Removes deleting and cloning test from the legacy bulk product edit page
These are covered in the new BUU products page
2024-06-11 14:51:28 -06:00
filipefurtad0
ae600d4bd6 Removes test case on access rights to the products page
Moves test on access rights to authentication_spec

The test on accessing the products page as an anonymous does not seem specific to the products page (IMO); as we're testing access rights and the Devise gem (right?) we're probably better off having this test in a more suitable and general context, such as as a spec dealing with authentications and redirects
2024-06-11 14:51:28 -06:00
filipefurtad0
95092b3b06 Adds test case around shipped product
Removes test case around shipped product for legacy products page
2024-06-11 14:51:28 -06:00
cyrillefr
942990612b Requested changes
- refined the code and applied it to create method too
- modified one request spec to work with turbo_stream
- added  2 examples in system specs
2024-06-11 22:29:12 +02:00
Maikel
b24ca03e28 Merge pull request #12547 from zanetagebka/StringConcatenationCops
Fix cops StringConcatenation
2024-06-11 15:53:37 +10:00
Maikel Linke
a8f0ebc408 Update Rubocop todo list 2024-06-11 15:33:28 +10:00
zanetagebka
e06df7d658 - Refactor method to fix StringConcatenation cop 2024-06-11 15:17:45 +10:00
zanetagebka
e62bdf987d Fix test 2024-06-11 15:17:34 +10:00
zanetagebka
a2a670c848 Fix cops StringConcatenation 2024-06-11 15:17:32 +10:00
Gaetan Craig-Riou
a84c947d66 Merge pull request #12548 from cyrillefr/RedundantPresenceValidationOnBelongs_part_VII
Fix RedundantPresenceValidationOnBelongs on Spree::Order model
2024-06-11 10:37:11 +10:00
Gaetan Craig-Riou
8b31fa1ee5 Merge pull request #12541 from openfoodfoundation/dependabot/bundler/rubocop-1.64.1
chore(deps-dev): bump rubocop from 1.63.5 to 1.64.1
2024-06-11 10:30:28 +10:00
cyrillefr
01612843b4 BUU Display error messages when file not valid
- implements a turbo response in controller
- display error messages on modal -> able for user to re upload
- removes a pending in spec that now tests error message
2024-06-10 14:32:08 +02:00
Abdellani
b0862d26f6 update tests 2024-06-07 17:58:59 +01:00
Mohamed ABDELLANI
55365be299 fix linter issue 2024-06-07 17:53:45 +01:00
Mohamed ABDELLANI
586a7055d7 notify if any distributors doesn't have an abn 2024-06-07 17:53:44 +01:00
Maikel Linke
23c175ea59 Update all locales with the latest Transifex translations 2024-06-07 20:04:53 +10:00
Maikel Linke
4d4d9daf42 Add OFN contact name as DFC main contact person 2024-06-06 14:32:37 +10:00
Maikel Linke
5b7b8872b6 Use standard logo attribute on DFC API
Still keeping the custom OFN attribute for compatibility. Integrations
can be updated once this is live.
2024-06-06 10:59:25 +10:00
Filipe
e4c0523ad1 Merge pull request #12094 from cyrillefr/Reports-500Error-if-date-range-end-is-before-date-range-start-in-Enterprise-Fee-Summary
Force start date before end date with range mode flatpickr
2024-06-05 23:39:24 +02:00
Filipe
4f7d5adb53 Merge pull request #12427 from abdulazizali77/bugfix/11680-order-additional-tax
Display additional tax total in order - fixes #11680
2024-06-05 23:22:31 +02:00
Filipe
5872515a35 Merge pull request #12515 from isidzukuri/12503_skip_saving_of_unchanged_products
Do not commit to db unchanged products in bulk save
2024-06-05 18:01:59 +02:00
Filipe
f6de15e196 Merge pull request #12518 from anansilva/12448-sanitise-html-product-description
Sanitise HTML in product description [read-only]
2024-06-05 11:13:56 +02:00
David Cook
9c0f55ad22 Refactor 2024-06-05 09:45:30 +10:00
David Cook
d34e7dbf9f Specify accepted format on client side
I don't know why, but even though the client sends http accept header for json, rails is treating it as html. This was being overridden in the route, but I want to support multiple formats next. So, we explicitly choose the format by adding it to the request path.
2024-06-05 09:45:30 +10:00
David Cook
2d0f206e8a Prepare spec 2024-06-05 09:45:30 +10:00
Maikel Linke
d9f013abbc Style/SendWithLiteralMethodName
Use method call directly instead of `public_send` with fixed argument.

The cop is declared unsafe. I think that is because it can also replace
`send` but we replace only `public_send` here.
2024-06-05 09:38:21 +10:00
Maikel Linke
e6ac2f0d88 Style/SuperArguments
Call super without arguments and parentheses when the signature is identical.
2024-06-05 09:29:42 +10:00
Maikel
a37274920e Merge pull request #12540 from openfoodfoundation/dependabot/npm_and_yarn/leaflet-geosearch-4.0.0
chore(deps): bump leaflet-geosearch from 3.11.1 to 4.0.0
2024-06-05 09:20:54 +10:00
cyrillefr
87f0be42e2 Fixes rubocop offenses on Spree::Order model
- removes old Rails 5 flag to not validating
belongs to association. Therefore optional fields must be marked so.
2024-06-04 18:17:12 +02:00
Filipe
db255b0d61 Merge pull request #12511 from chahmedejaz/task/12398-remove-reflex-from-product-variant-delete
Task/12398 remove reflex from product variant delete
2024-06-04 16:03:57 +02:00
David Cook
5a8eea398e Add comment 2024-06-04 10:24:40 +10:00
Filipe
dc994692a9 Merge pull request #12521 from dacook/buu/fix-blank-selects-12473
[BUU] Fix for blank dropdowns
2024-06-03 17:04:40 +02:00
cyrillefr
9495d62236 Requested changes on spec
- if possible no sleep in spec
2024-06-03 16:27:57 +02:00
Ana Nunes da Silva
205c7dafd2 Add div to sanitizer supported tags 2024-06-03 11:45:50 +01:00
Ana Nunes da Silva
5f54ea3877 Add safe trix tags to html sanitizer;
Use custom html sanitizer in product description.
2024-06-03 11:45:50 +01:00
Ana Nunes da Silva
a7dc243db9 Sanitize product description using rails default sanitizer 2024-06-03 11:45:49 +01:00
dependabot[bot]
3e1be86283 chore(deps-dev): bump rubocop from 1.63.5 to 1.64.1
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.63.5 to 1.64.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.63.5...v1.64.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-03 09:36:50 +00:00
dependabot[bot]
7fd8bdfaf1 chore(deps): bump leaflet-geosearch from 3.11.1 to 4.0.0
Bumps [leaflet-geosearch](https://github.com/smeijer/leaflet-geosearch) from 3.11.1 to 4.0.0.
- [Release notes](https://github.com/smeijer/leaflet-geosearch/releases)
- [Commits](https://github.com/smeijer/leaflet-geosearch/compare/v3.11.1...v4.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-03 09:04:12 +00:00
Abdul Aziz Ali
369ea7cd16 Define tax_on_fees i8n key #11680 2024-06-03 13:04:36 +08:00
Gaetan Craig-Riou
d5dac4d890 Merge pull request #12535 from mkllnk/panel-beating
Restore enterprise edit form as manager
2024-06-03 15:00:30 +10:00
Abdul Aziz Ali
82f75e344f Display additional tax total in order #11680
Add new text key admin.order.edit.additional_tax_included_in_price
Add spec file for additional tax display. Add new trait for enterprise fee and calculator factory
2024-06-03 12:50:37 +08:00
Gaetan Craig-Riou
76a76c74e3 Merge pull request #12537 from openfoodfoundation/dependabot/bundler/devise-i18n-1.12.1
chore(deps): bump devise-i18n from 1.12.0 to 1.12.1
2024-06-03 12:55:10 +10:00
Gaetan Craig-Riou
5326b332ee Merge pull request #12529 from cyrillefr/RedundantPresenceValidationOnBelongs_part_VI
Fix Redundant presence validation on belongs part VI
2024-06-03 12:53:35 +10:00
David Cook
15d4f9565d Merge pull request #12519 from filipefurtad0/feature_parity_admin_style_v3
Extracts BUU from branch in #11645
2024-06-03 09:56:25 +10:00
David Cook
999bc13fb5 Remove redundant code 2024-06-03 09:36:25 +10:00
filipefurtad0
ce36fb45a0 Removes tests on edit action, under the Delete section 2024-06-02 16:00:44 +02:00
Filipe
706da37f15 Merge pull request #12507 from mkllnk/connected-apps-super-admin
Allow only enterprise managers to connect apps
2024-06-01 18:16:28 +02:00
cyrillefr
073dfc4ab6 Update and Recalculate Fees after Order Adjusted in Backend
- when update on adjustment in payment, recalculation of
  correct adjustment was not done
- the corresponding spec
- an id to easy the finding of the change of fees in the spec
2024-05-31 16:39:02 +02:00
Filipe
925d257dc5 Merge pull request #12495 from cillian/osm-registration-map
Get registration location map working with OSM
2024-05-31 14:32:05 +02:00
dependabot[bot]
29e4535dff chore(deps): bump devise-i18n from 1.12.0 to 1.12.1
Bumps [devise-i18n](https://github.com/tigrish/devise-i18n) from 1.12.0 to 1.12.1.
- [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.12.0...v1.12.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-31 09:06:12 +00:00
Maikel Linke
ecbba894f7 Update stock levels of on-demand items
We weren't bothering with stock when items were on demand anyway. But we
want to track stock now so that we can backorder more when local stock
levels become negative.
2024-05-31 16:38:24 +10:00
Maikel Linke
d391faac64 Remove validation of positive stock when on demand
We weren't allowing negative stock to stop any bug from accidentally
drawing too much stock. But now we want to implement a backordering
logic that depends on negative stock levels to know how much is needed
to replenish stock levels.
2024-05-31 16:37:15 +10:00
Maikel Linke
f4a69b4664 Update locales 2024-05-31 12:16:18 +10:00
Maikel Linke
6a206b2a34 Move Connected Apps form out of Enterprise form
Nested forms are not valid HTML and we were submitting the wrong
authenticity token to Rails when updating the enterprise.

I inverted the hierarchy of the form and the panels. The menu and
tab-panel structure now sits above and the enterprise edit form is
nested within.

The current structure is not ideal but it's only a transition phase. I'm
expecting the page to get re-designed at some point and re-writen
without AngularJS.
2024-05-31 11:09:00 +10:00
Maikel
c0690d51e5 Merge pull request #12530 from openfoodfoundation/dependabot/bundler/rack-timeout-0.7.0
chore(deps): bump rack-timeout from 0.6.3 to 0.7.0
2024-05-31 09:42:30 +10:00
Maikel Linke
b15e136980 Remove obsolete rake task 2024-05-31 09:40:52 +10:00
Filipe
9eaf6c3b9c Merge pull request #12489 from mkllnk/available-locales
More realistic test env for translations
2024-05-30 15:00:36 +02:00
Filipe
a01dcaadcf Merge pull request #12506 from anansilva/12448-sanitise-html-enterprise-group
Sanitise HTML in long description of enterprise group [read-only]
2024-05-30 14:07:20 +02:00
Ahmed Ejaz
ce60a2a1e0 12398: add lazylookup for translations 2024-05-30 14:44:34 +05:00
Ahmed Ejaz
c2fa993432 12398: fix lint issues 2024-05-30 14:24:51 +05:00
Ahmed Ejaz
e932dabacb 12398: fix failing specs 2024-05-30 14:17:57 +05:00
filipefurtad0
3d1c94720a Applies existing helper to assert on rows with product name 2024-05-29 15:40:30 +01:00
filipefurtad0
2c081dc5f0 Assures the Edit button link is always displayed for the first variant,
although the delete button is not

Also should work for a second (non-default variant)

Removes unecessary test cases
2024-05-29 15:24:30 +01:00
dependabot[bot]
6dee200938 chore(deps): bump rack-timeout from 0.6.3 to 0.7.0
Bumps [rack-timeout](https://github.com/zombocom/rack-timeout) from 0.6.3 to 0.7.0.
- [Changelog](https://github.com/zombocom/rack-timeout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/zombocom/rack-timeout/compare/v0.6.3...v0.7.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-29 09:35:40 +00:00
cyrillefr
4bb996e77f Fix RedundantPresenceValidationOnBelongs on some files (part VI)
- presence: true is redundant since Rails 5.0 BUT applies
   with new default config of
   belongs_to_required_by_default to true.
   Lots of files with belongs_to_required_by_default = false
   (backward compatibility).
   So: deleting this setting implies to adding optional: true
 - added 'NOT NULL' constraints so model constraints match
   with contraints on DB tables.
 - corresponding migration files to match AR Models &
   DB tables
 - rake tasks to check corrupt data (ie: NULL/nil in id fields)
   (previous commit)
 - updated the todo
2024-05-29 10:38:18 +02:00
cyrillefr
65fc144a46 Task to check missing foreing ids in spree_line_items 2024-05-29 10:32:21 +02:00
Gaetan Craig-Riou
c81e7f3b5d Update all locales with the latest Transifex translations 2024-05-29 14:19:54 +10:00
David Cook
f8f0a1bf58 Update comment
[skip ci]
2024-05-29 10:55:29 +10:00
Gaetan Craig-Riou
0e9b753bbc Merge pull request #12514 from cyrillefr/RedundantPresenceValidationOnBelongs_part_V
Fix redundant presence validation on belongs part V
2024-05-29 09:57:22 +10:00
Maikel
5f137c19a3 Merge pull request #12527 from openfoodfoundation/dependabot/bundler/view_component-3.12.1
chore(deps): bump view_component from 3.12.0 to 3.12.1
2024-05-29 08:47:53 +10:00
Ahmed Ejaz
a93ce4ea55 12398: append flash in the flashes container 2024-05-29 01:20:10 +05:00
Ahmed Ejaz
8ee833d2d8 12398: add flash.now 2024-05-29 01:19:50 +05:00
dependabot[bot]
8421c35e42 chore(deps): bump view_component from 3.12.0 to 3.12.1
Bumps [view_component](https://github.com/viewcomponent/view_component) from 3.12.0 to 3.12.1.
- [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.12.0...v3.12.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-28 09:59:37 +00:00
Maikel Linke
fae7a089ee Import products from the FDC (Shopify) API 2024-05-28 17:00:06 +10:00
Maikel Linke
a1992aed7c Handle string values for variant unit value
The FDC API is returning all values as strings. This should probably be
handled in the Connector long-term.
2024-05-28 17:00:06 +10:00
Maikel Linke
1f00662709 Add service to access FDC API
The current implementation of the FDC is not adhering to the DFC
standard. The difference is added in this compatibility layer.

This should be temporary code. The FDC dev team should change their API
in their next development cycle.
2024-05-28 17:00:06 +10:00
Maikel Linke
635234a889 Enable POSTing DFC data 2024-05-28 15:10:05 +10:00
Maikel Linke
c94bd92311 Simplify DFC request retry logic
Big thanks to David Cook for a much better pattern.
2024-05-28 15:10:05 +10:00
David Cook
90c71c6a1a Remove unused method 2024-05-28 12:00:07 +10:00
David Cook
35c2297d55 Detect changes in price
Price is actually an association with lots of custom methods to make it look like a field, and so changes were ignored.
Now this issue is fixed, perhaps it should be moved to a concern..

Note, there are other delegated fields: product name and description may be assigned from the variant. But there's no hooks to save the prroduct, so I didn't include it when checking for changes.
2024-05-28 12:00:04 +10:00
Gaetan Craig-Riou
6f5bcda421 Merge pull request #12523 from openfoodfoundation/dependabot/bundler/webmock-3.23.1
chore(deps-dev): bump webmock from 3.23.0 to 3.23.1
2024-05-28 10:02:00 +10:00
Ahmed Ejaz
fb07794cf3 12398: add slide-out animation 2024-05-28 01:10:30 +05:00
dependabot[bot]
f70dd58533 chore(deps-dev): bump webmock from 3.23.0 to 3.23.1
Bumps [webmock](https://github.com/bblimke/webmock) from 3.23.0 to 3.23.1.
- [Changelog](https://github.com/bblimke/webmock/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bblimke/webmock/compare/v3.23.0...v3.23.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-27 09:50:38 +00:00
David Cook
4f287ffe05 When dropdown fields don't allow blank, but are blank, show as changed
They were already counted as changed by the javascript, but didn't have a 'changed' class to indicate it.
The reason they are 'changed', is because the dropdown has no blank option, and is forced to select the first item in the list.

This is purely to cover the case of invalid data, but should help a lot when debugging data issues. I don't think it's any less efficient, because the extra 'classList.toggle' calls don't do anything on unchanged fields.
2024-05-27 17:14:18 +10:00
David Cook
a405f17c0b Merge pull request #12510 from cyrillefr/RemoveUnusedMissingIdsCheckRakeTasks
Deleting some used one-shot rake tasks
2024-05-27 13:53:21 +10:00
David Cook
c71eb2d6b5 Remove duplicate assign 2024-05-27 10:34:35 +10:00
isidzukuri
7565825b61 Do not commit to db unchanged products is bulk save 2024-05-27 10:22:58 +10:00
Gaetan Craig-Riou
a64bf68d54 Merge pull request #12517 from openfoodfoundation/dependabot/bundler/knapsack_pro-7.4.0
chore(deps-dev): bump knapsack_pro from 7.2.0 to 7.4.0
2024-05-27 10:11:25 +10:00
filipefurtad0
c711387c5a Removes pending test case - covered in:
- Changing producers, category and tax category, done in 15ee4f6

- Updating Unit value, done in 49226ff

Removes comment about errors for empty variant_unit_name

I think this was done in commit f05d27b

Would you agree @dacook?
2024-05-26 17:40:28 +01:00
filipefurtad0
80a682e2f5 Updates tests around product and variant search
Adds test for a non-existing product

Adds test for variant search

Improves tests with multiple variants
2024-05-25 16:03:54 +01:00
filipefurtad0
fb0be1c7f3 Adds tests around using the page
- with no products

- column display dropdown

- listing products with several variants
2024-05-25 15:13:59 +01:00
Cillian O'Ruanaidh
b2f20db90a Remove redundant spec type offence from MapHelper spec 2024-05-24 11:43:00 +01:00
Cillian O'Ruanaidh
46fdeefa14 Make sure OSM map is not enabled in test environment in case it abuses OSM tile servers 2024-05-24 11:24:57 +01:00
Cillian O'Ruanaidh
850385a8d3 Add tests to make sure the appropriate map is loaded e.g. Open Street Map or Google 2024-05-24 11:14:43 +01:00
dependabot[bot]
9cd5f5aaa0 chore(deps-dev): bump knapsack_pro from 7.2.0 to 7.4.0
Bumps [knapsack_pro](https://github.com/KnapsackPro/knapsack_pro-ruby) from 7.2.0 to 7.4.0.
- [Changelog](https://github.com/KnapsackPro/knapsack_pro-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v7.2.0...v7.4.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>
2024-05-24 09:13:06 +00:00
filipefurtad0
0bfa9fe997 Update all locales with the latest Transifex translations 2024-05-24 09:49:20 +01:00
cyrillefr
5bc6d16f34 Fix redundant presence validation on belongs part V
- presence: true is redundant since Rails 5.0 BUT applies
   with new default config of
   belongs_to_required_by_default to true.
   Lots of files with belongs_to_required_by_default = false
   (backward compatibility).
   So: deleting this setting implies to adding optional: true
2024-05-24 08:22:20 +02:00
Maikel
5b9e83745d Merge pull request #12508 from mkllnk/schema
Fixup db schema.rb
2024-05-24 08:19:31 +10:00
Maikel Linke
4e8896d655 Clearer naming of helper method 2024-05-24 08:17:08 +10:00
Ahmed Ejaz
6a59d06de1 remove delete methods from products reflex 2024-05-24 02:45:26 +05:00
Ahmed Ejaz
a0f290c09f 12398: add turbo stream to delete variants 2024-05-24 02:41:51 +05:00
Ahmed Ejaz
2bdf8e2853 rename destroy.turbo_stream to make it more generic 2024-05-24 02:40:34 +05:00
Ahmed Ejaz
039b0d80ee 12398: implement the destroy action for products 2024-05-24 01:55:21 +05:00
Ahmed Ejaz
48615f1325 12398: fix rebasing mistake 2024-05-24 01:20:08 +05:00
Ahmed Ejaz
6659ffe530 12398: update modal-link-controller to dynamically set
form action as per the selected product to delete
2024-05-24 01:16:14 +05:00
Ahmed Ejaz
53fb77eb23 12398: add destroy action with turbo stream 2024-05-24 01:16:14 +05:00
Ahmed Ejaz
e5b9e07874 12398: update confirm_modal to use button_to form submission 2024-05-24 01:16:14 +05:00
Ahmed Ejaz
e740fb8f6e 12398: add turbo-rails 2024-05-24 01:16:08 +05:00
Filipe
88baf5e1de Merge pull request #12496 from isidzukuri/12355-remove-unused-discourse
[12355] Remove discourse
2024-05-23 19:28:02 +01:00
Filipe
5455e68620 Merge pull request #12504 from dacook/buu/edit-image-turbo-12399
[BUU] Remove StimulusReflex from Image Edit
2024-05-23 17:32:59 +01:00
Rachel Arnould
163e9b6c9c Merge pull request #12505 from filipefurtad0/remove_deprecation
Removes deprecation strikethrough from tax report (by producer)
2024-05-23 17:14:28 +02:00
cyrillefr
8c0e20f53c Deleting some used one-shot rake taskes
- in relation to: Fix Rubocop Rails issues #11482
 - and  Require belongs_to associations by default #11297
 - and #12407 #12428 etc.
2024-05-23 10:07:56 +02:00
cyrillefr
3451be4043 Increasing the placeholder size 2024-05-23 09:13:18 +02:00
cyrillefr
396ea65bc6 Bugfix on spec 2024-05-23 09:13:18 +02:00
cyrillefr
72301f3ad8 Add Time in flatpickr control 2024-05-23 09:13:18 +02:00
cyrillefr
d27cd18f56 Force start date before end date with range mode flatpickr
- modify view to get a flatpickr component in range mode
  - modify spec to take into account range mode
2024-05-23 09:13:18 +02:00
Maikel Linke
b9c7be769a Fixup db schema.rb
It looks like I forgot to commit the latest change in 46cd60aa3c.
2024-05-23 15:51:43 +10:00
Maikel Linke
968456e5e0 Create special locale for test environment
So hopefully we'll notice if our fallback mechanism fails.
2024-05-23 15:10:24 +10:00
Maikel Linke
f14945c155 More realistic test env for translations
Most production servers don't use the source locale `en`. Even if the
default language is English, they use a local variant like `en_AU` or
`en_GB` to customise some of the translations.

However the environment is configured, the app should always fallback to
`en` if no other translation is available.
2024-05-23 15:08:11 +10:00
Maikel Linke
7b9577b547 Allow only enterprise managers to connect apps
Otherwise it doesn't work because non-managers, like super admins, are
not authorised to access enterprise data via the DFC API.
2024-05-23 13:44:47 +10:00
David Cook
e30dc1b05c Merge pull request #12493 from cyrillefr/RedundantPresenceValidationOnBelongs_part_IV
Fix RedundantPresenceValidationOnBelongs on two files
2024-05-23 13:09:17 +10:00
David Cook
55ac816a87 Show success message
Phew, that was really easy.
And now the existing feature spec still Just Works.
2024-05-23 11:55:56 +10:00
David Cook
05f0b93548 Use requestSubmit to allow JS events
Yay, now it works. Not sure the best way to show loading yet.
- currently the Turbo loading indicator shows which is better than nothing (blue bar at top)
- ideally we could show a small spinner over the image thumbnail. need to write some stimulus to hook into turbo lifecycle I guess.
- or we could activate the frame-level loading overlay. refactor loading_controller a bit so that it's applied on the container, then hopefully  we can just call  change->loading#showLoading. the turbo_stream response could dectivate it.
2024-05-23 11:55:33 +10:00
David Cook
665273ce2f [wip] Attempt to update edited image in-place with Turbo Stream
but it doesn't quite work.

Maybe we can force it with JS (https://www.writesoftwarewell.com/process-turbo-stream-javascript/)
2024-05-23 11:55:29 +10:00
David Cook
0e03ff6925 Merge branch 'master' into RedundantPresenceValidationOnBelongs_part_IV 2024-05-23 09:22:36 +10:00
Maikel
74cfa42461 Merge pull request #12465 from MrBowmanXD/mirror
Allow return or line break in shipping / payment method description
2024-05-23 09:10:13 +10:00
Maikel Linke
be79016753 Remove now obsolete check in rake task 2024-05-23 09:08:05 +10:00
Maikel
32eb9c5504 Merge pull request #12481 from mkllnk/connect-app-once
Avoid submitting duplicate Connected Apps
2024-05-23 08:50:34 +10:00
Manuel Gonçalves
2bc481d8f7 Merge branch 'master' into mirror 2024-05-22 23:35:45 +01:00
Ana Nunes da Silva
73218fab05 Sanitize read and write long description in enterprise group 2024-05-22 22:40:24 +01:00
Filipe
b4d4faafc0 Merge pull request #12472 from dacook/bump-stimulus_reflex-cable_ready
Bump stimulus_reflex to 3.5.1 and cable_ready to 5.0.5
2024-05-22 21:37:42 +01:00
Filipe
1130bf8cbe Merge pull request #12460 from mkllnk/enterprise-data-purge
Clean up unused enterprise fields
2024-05-22 21:29:54 +01:00
filipefurtad0
5ccecdd9ff Removes deprecation strikethrough from enterprise fees with tax report by producer 2024-05-22 20:38:11 +01:00
cyrillefr
46cd60aa3c Fix RedundantPresenceValidationOnBelongs on two files
- presence: true is redundant since Rails 5.0 BUT applies
       with new default config of
       belongs_to_required_by_default to true.
       Lots of files with belongs_to_required_by_default = false
       (backward compatibility).
       So: deleting this setting implies to adding optional: true
     - added 'NOT NULL' constraints so model constraints match
       with contraints on DB tables.
     - corresponding migration files to match AR Models &
       DB tables
     - rake tasks to check corrupt data (ie: NULL/nil in id fields)
     - updated the todo
2024-05-22 09:44:02 +02:00
David Cook
536b5608ab Show edit form for new images 2024-05-22 17:08:58 +10:00
David Cook
3fcc9ac1fa Move product image edit modal to Turbo Stream
Didn't even need to touch the controller, because data-turbo-stream tells it to render the turbo_stream format 

But you might notice that it doesn't redirect to the right return_url yet. Let's see if we can use more Turbo to avoid the page refresh..

TODO: also handle empty images
2024-05-22 17:08:58 +10:00
David Cook
b935a0e8d9 [add gem] turbo-rails
This gives us a nice 'turbo_stream' format helper.
2024-05-22 15:07:16 +10:00
Maikel
5fdea3e8ce Merge pull request #12502 from dacook/specs
Break up large spec files
2024-05-22 13:39:02 +10:00
Maikel
9d453a82ed Merge pull request #12494 from filipefurtad0/update_paypal_checkout_system_spec
Updates Paypal system spec to consider new checkout flow
2024-05-22 10:17:06 +10:00
David Cook
b2078c2906 Merge pull request #12486 from dacook/tax-category-12480
Show any tax category errors when saving variants
2024-05-22 09:30:19 +10:00
David Cook
5ff89a279c Use Spring to save on subsequent boot times
Each time we run a rails command, it can take some time to load up (I think it was 20s). We run two commands (db setup, then rspec), so the second one should be faster now.
2024-05-22 09:21:51 +10:00
David Cook
85165369a2 Move run runner over for system specs. 2024-05-22 09:21:51 +10:00
David Cook
1d11f8c85b Move bulk order actions to separate spec file
This was another large file, potentially causing a bottleneck.
All the order setup is duplicated from the other file which is a bit of shame, but I think it makes sense.
2024-05-22 09:20:12 +10:00
filipefurtad0
818c0306c6 Updates paypal feature spec to consider new checkout flow 2024-05-21 17:37:22 +01:00
David Cook
39f1eac300 Move invoices specs to the invoices spec file
The orders file is too big and causes a bottleneck for parallelising specs.

Maybe they should be merged with the above specs, but I'm not familiar enough to know for sure.
2024-05-21 16:43:17 +10:00
David Cook
f0f2754d7f Remove now-unused translation 2024-05-21 16:33:49 +10:00
isidzukuri
b9a0c1cc87 revert feature-template.md 2024-05-21 09:02:45 +03:00
isidzukuri
621a95e913 Remove discourse 2024-05-21 09:02:45 +03:00
David Cook
b729ec3428 Merge pull request #12490 from mkllnk/mail-spec
Move mail spec precompile assets for it
2024-05-21 09:51:46 +10:00
David Cook
c960e55437 Bump cable_ready and stimulus_reflex again
Sigh.
2024-05-20 15:51:55 +10:00
Manuel Gonçalves
1c0a6d1229 Reintroduced changes made in commit #12443 2024-05-20 03:55:49 +01:00
Gaetan Craig-Riou
943c21be34 Merge pull request #12487 from openfoodfoundation/dependabot/bundler/rexml-3.2.8
chore(deps): bump rexml from 3.2.6 to 3.2.8
2024-05-20 10:38:28 +10:00
David Cook
a9bf25244e Merge pull request #12457 from abdellani/12452-log-who-deleted-products 2024-05-20 10:37:32 +10:00
Cillian O'Ruanaidh
826d9eb36d Get registration location map working with OSM 2024-05-17 19:56:52 +01:00
Mohamed ABDELLANI
8ccb59a9ab included LogDestroyPerformer on product model 2024-05-17 15:42:39 +01:00
Maikel Linke
ac24725d6c Move mail spec precompile assets for it
Specs in `spec/lib` don't trigger asset compilation but this particular
spec uses a mailer and needs assets.
2024-05-17 14:35:08 +10:00
Maikel
100cba874d Merge pull request #12488 from openfoodfoundation/dependabot/bundler/aws-sdk-s3-1.151.0
chore(deps): bump aws-sdk-s3 from 1.147.0 to 1.151.0
2024-05-17 11:44:36 +10:00
Maikel Linke
58e1dc7b9a Declare rexml as indirect dependency, not direct
Reverting 41d56ce98b:

> This was previously included in Ruby, and has now been extracted.
> It's used by activemerchant and selenium and possibly others,
> but those gems don't currently declare it as a dependency.

This has changed. It's now a dependency of:

* activemerchant
* rubocop [dev dep only]
2024-05-17 11:37:49 +10:00
dependabot[bot]
726c52e725 chore(deps): bump aws-sdk-s3 from 1.147.0 to 1.151.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.147.0 to 1.151.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>
2024-05-16 09:02:01 +00:00
dependabot[bot]
79741eac58 chore(deps): bump rexml from 3.2.6 to 3.2.8
Bumps [rexml](https://github.com/ruby/rexml) from 3.2.6 to 3.2.8.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.2.6...v3.2.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-16 09:01:30 +00:00
David Cook
3a3dc9eea5 Update all locales with the latest Transifex translations 2024-05-16 16:17:30 +10:00
David Cook
e0c60aad48 Display red border around invalid selects
I developed this while going down a slightly different path. I tested it visually, but the case I tested doesn't exist. I'm confident it will work if we ever have an error on another select though.
2024-05-16 14:21:44 +10:00
David Cook
3e1e7d3a10 Show error messages and highlight for bulk editing
The validation message is on "tax_category", so labels and error messages can use that to show the error state.
But the select field has to be "tax_category_id" to work.
2024-05-16 14:19:58 +10:00
David Cook
412c110c65 Associate label with checkbox
Now you can click on the text to tick/untick the box. I've been wanting to do that for ages.
2024-05-16 10:37:22 +10:00
Maikel
f81b894d5c Merge pull request #12484 from openfoodfoundation/dependabot/bundler/roadie-rails-3.2.0
chore(deps): bump roadie-rails from 3.1.0 to 3.2.0
2024-05-16 08:18:27 +10:00
Maikel
dcc8556470 Merge pull request #12483 from openfoodfoundation/dependabot/bundler/omniauth-rails_csrf_protection-1.0.2
chore(deps): bump omniauth-rails_csrf_protection from 1.0.1 to 1.0.2
2024-05-16 08:16:47 +10:00
Maikel Linke
135128cf41 Remove obsolete Enterprise#next_collection_at
This was actually shown in one place and represents a user-facing
change. But you weren't able to edit the field which means that only
very old enterprises would have had this field set and were not able to
change it anymore.

I searched au-prod and found the following values in the database:

- "Friday 31st January"
- "From 4pm, Monday 30 September"
- "From 5pm-7pm Monday"
- "Saturday 27 April 12noon"
- "January 31st/February 1st"
- "Saturday 1st February"

They seem specific to a certain order cycle and have no value as
fallback any more. Seems safe to remove.
2024-05-16 07:57:02 +10:00
Maikel Linke
c981661fe0 Remove obsolete Enterprise#pickup_times 2024-05-16 07:57:02 +10:00
Maikel Linke
9464df8aae Remove obsolete Enterprise#distributor_info 2024-05-16 07:56:57 +10:00
Filipe
a854775afe Merge pull request #12470 from mkllnk/description-html-test
Sanitise HTML in long description of enterprise [read-only]
2024-05-15 20:52:30 +01:00
Filipe
b67eba2130 Merge pull request #12454 from arunguleria/12372-Add-MissingTranslations
12372-[Admin] Missing translations  page titles
2024-05-15 20:39:22 +01:00
Filipe
cb53419681 Merge pull request #12443 from MrBowmanXD/junior
Remove "ready for" info from shipping method description area at checkout #12395 (solved)
2024-05-15 20:10:58 +01:00
Filipe
b3ac6bed87 Merge pull request #12428 from cyrillefr/RedundantPresenceValidationOnBelongs_part_III
Fix RedundantPresenceValidationOnBelongs on two files
2024-05-15 18:21:52 +01:00
Filipe
59e04cc549 Merge pull request #12376 from cyrillefr/MakeShipOrderButtonWorksOnPageOrderDetails
Fix Ship Order menu choice not working
2024-05-15 17:57:25 +01:00
Filipe
39ce3163f2 Merge pull request #12441 from cyrillefr/DeleteButtonMissingBeforeSavingVariant
[BUU] Delete Button missing before saving variant
2024-05-15 17:56:13 +01:00
dependabot[bot]
f1a50313a0 chore(deps): bump roadie-rails from 3.1.0 to 3.2.0
Bumps [roadie-rails](https://github.com/Mange/roadie-rails) from 3.1.0 to 3.2.0.
- [Changelog](https://github.com/Mange/roadie-rails/blob/master/Changelog.md)
- [Commits](https://github.com/Mange/roadie-rails/compare/v3.1.0...v3.2.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>
2024-05-15 09:12:50 +00:00
dependabot[bot]
53c706c6a2 chore(deps): bump omniauth-rails_csrf_protection from 1.0.1 to 1.0.2
Bumps [omniauth-rails_csrf_protection](https://github.com/cookpad/omniauth-rails_csrf_protection) from 1.0.1 to 1.0.2.
- [Release notes](https://github.com/cookpad/omniauth-rails_csrf_protection/releases)
- [Commits](https://github.com/cookpad/omniauth-rails_csrf_protection/compare/v1.0.1...v1.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-15 09:12:25 +00:00
Maikel Linke
45c164d5ae Avoid submitting duplicate connected apps
Simple Rails forms prevent double-clicking on submit already. Converting
the StimulusReflex interaction to a simple form submit to a controller
solves the race condition.

The UX is slightly worse because the whole page is reloaded instead
rendering only the connected app panel. But we can solve that when we
add more apps and want to activate them independently. By then, we may
have good patterns for working with Turbo.

Technically, the new buttons are a form within a form which is invalid
HTML, but it works.
2024-05-15 17:14:52 +10:00
Maikel
ae09124946 Merge pull request #12475 from openfoodfoundation/dependabot/bundler/knapsack_pro-7.2.0
chore(deps-dev): bump knapsack_pro from 7.1.0 to 7.2.0
2024-05-15 11:21:26 +10:00
Maikel
68f12ed7f0 Merge pull request #12464 from filipefurtad0/variant_overrides_spec_to_split_checkout
Updates tests on a regular checkout
2024-05-15 11:17:03 +10:00
Gaetan Craig-Riou
1fde91e6ff Update Webmock and VCR config as per Knapsack recommendation
See : https://github.com/KnapsackPro/knapsack_pro-ruby/blob/master/CHANGELOG.md#720
2024-05-15 10:07:40 +10:00
Gaetan Craig-Riou
c94bec85d7 Merge pull request #12468 from openfoodfoundation/dependabot/bundler/nokogiri-1.16.5
chore(deps): bump nokogiri from 1.16.4 to 1.16.5
2024-05-15 09:59:29 +10:00
filipefurtad0
4e16eb9c6b Updates spec to split checkout 2024-05-14 12:19:23 +01:00
filipefurtad0
38fe36b246 Uptades tests on a regular checkout 2024-05-14 12:19:23 +01:00
dependabot[bot]
afbfc788b8 chore(deps-dev): bump knapsack_pro from 7.1.0 to 7.2.0
Bumps [knapsack_pro](https://github.com/KnapsackPro/knapsack_pro-ruby) from 7.1.0 to 7.2.0.
- [Changelog](https://github.com/KnapsackPro/knapsack_pro-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/KnapsackPro/knapsack_pro-ruby/compare/v7.1.0...v7.2.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>
2024-05-14 11:01:59 +00:00
Manuel Gonçalves
50115bdef9 Changes to views/checkout/details.html.haml:line 98 and changes to view/checkout/payment.html.haml:line 32 2024-05-14 10:39:30 +01:00
David Cook
ba50e82036 Bump cable_ready and stimulus_reflex gems
I ran stimulus_reflex:install. It skipped over most things, but did add gem redis-session-store without explanation. It's mentioned in the [documentation](https://docs.stimulusreflex.com/hello-world/setup.html#session-storage), but I don't think it's relevant to us so I removed it again.
2024-05-14 14:55:32 +10:00
David Cook
08edff1a6f Bump cable_ready and stimulus_reflex packages
There wasn't a simple path to upgrade them separately. I think it's fine to do both at once.
2024-05-14 14:30:02 +10:00
David Cook
854091eb9c Bump stimulus_reflex_testing to latest
It contains a fix for stimulus_reflex 3.5.0-rc4, but hasn't been released yet.
https://github.com/podia/stimulus_reflex_testing/issues/21

Now the user reflex spec works, but the products spec needs another fix. But we plan to remove it soon anyway.
2024-05-14 14:23:20 +10:00
David Cook
792fecc3fd Disable StimulusReflex specs temporarily
Unfortunately the testing framework doesn't support the latest version of StimulusReflex.
This is a third party framework that doesn't seem to be maintained. Maybe we should convert these to ActionCable tests.
2024-05-14 13:54:55 +10:00
David Cook
1d93b6f049 chore(deps): bump gem stimulus_reflex from 3.5.0-rc3 to 3.5.0-rc4
Gem and package need to be in sync.
2024-05-14 13:54:55 +10:00
dependabot[bot]
d5564e5fd2 chore(deps): bump stimulus_reflex from 3.5.0-rc3 to 3.5.0-rc4
Bumps [stimulus_reflex](https://github.com/stimulusreflex/stimulus_reflex) from 3.5.0-rc3 to 3.5.0-rc4.
- [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>
2024-05-14 13:54:55 +10:00
Maikel Linke
f089c0eff3 Keep HTML line breaks
They do appear in long_description on au_prod.
2024-05-14 12:40:58 +10:00
Maikel Linke
23a27c65be Sanitise existing HTML in Enterprise#long_description
We will add a migration to sanitise all existing descriptions but before
we do that destructive action, it's good to test this in a read-only
fashion first.
2024-05-14 12:25:58 +10:00
Maikel Linke
7b4a85f7ef Sanitise HTML in long description of enterprise
This happens only on assignment. We still need to migrate existing data.
2024-05-14 12:25:47 +10:00
Maikel
13e4d4beb6 Merge pull request #12467 from openfoodfoundation/dependabot/bundler/geocoder-1.8.3
chore(deps): bump geocoder from 1.8.2 to 1.8.3
2024-05-14 11:49:14 +10:00
Maikel
ee1537fa3f Merge pull request #12466 from openfoodfoundation/dependabot/bundler/dotenv-3.1.2
chore(deps): bump dotenv from 3.1.0 to 3.1.2
2024-05-14 11:48:28 +10:00
David Cook
00f6d01738 Remove errored variants
I found another case.
2024-05-14 11:27:04 +10:00
David Cook
da77994a89 Ignore disconnected form elements
When elements are removed from the DOM, they remain in the recordElements array. But we can simply ignore them.
We have to wait until after rails-nested-form:remove is completed before toggleFormChanged.

hmm It would be even better to remove them from the array..
2024-05-14 11:26:40 +10:00
David Cook
b45df8a723 Use built-in feature to delete new record row
I looked at the source code and found that we were missing one detail: data-new-record.
https://github.com/stimulus-components/stimulus-rails-nested-form/blob/master/src/index.ts#L32-L35

It's documented here, but it's easy to miss: https://www.stimulus-components.com/docs/stimulus-rails-nested-form/
2024-05-14 11:25:52 +10:00
cyrillefr
808f1c65f2 Requested changes on Delete Button missing
- Styling(in red) for the remove button/link in view

- A remove method to the bulk_form controller
    - removes elements from the Dom
    - removes changed elements from the binded Array in controller
    - so that menu that indicates changes disappear and blured elements
    - resume to non blurring state

- Added the corresponding specs
    - test with one, two variants
    - test with two different products
2024-05-14 11:25:22 +10:00
cyrillefr
36f3e4af02 Requested changes on Delete button missing
- cleaned haml/html
2024-05-14 11:25:22 +10:00
cyrillefr
9b10b73a65 Delete Button missing before saving variant
- used the remove option of stimulus-components/rails-nested-form lib
 - add the Remove option in the menu
 - the corresponding spec
 - the locale
2024-05-14 11:25:22 +10:00
dependabot[bot]
b2ecac27eb chore(deps): bump nokogiri from 1.16.4 to 1.16.5
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.16.4 to 1.16.5.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.16.4...v1.16.5)

---
updated-dependencies:
- dependency-name: nokogiri
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-13 23:48:01 +00:00
David Cook
1f91c2e4b5 Merge pull request #12417 from filipefurtad0/migrate_legacy_specs
Removes unused spec related to legacy checkout
2024-05-14 09:42:23 +10:00
Rachel Arnould
bd83977bf2 Merge pull request #12449 from chahmedejaz/feature/11058-change-products-order-by-name
Feature/11058 change products order by name
2024-05-13 15:29:33 +02:00
filipefurtad0
a1e2d3a93b Removes negative expect
Removes unused error message
2024-05-13 12:55:55 +01:00
David Cook
62fefd5d49 Implement required method
Most of the time this doesn't get called because source_required: false.
But sometimes it [does happen](https://app.bugsnag.com/yaycode/openfoodnetwork-uk/errors/66329690f4b6380007e8a4f8)

I have a feeling that source_required? could be moved to the superclass as payment_source_class.present?. But I don't know enough about this area of the system to try it...
2024-05-13 12:55:55 +01:00
filipefurtad0
ffdbd0d7d4 Reproduces Bugsnag error
For details see: https://app.bugsnag.com/open-food-network-canada-1/open-food-network-canada/errors/66314b2e78673c00073d2de9?filters[event.since]=30d&filters[error.status]=open&filters[search]=payment_source_class&event_id=66314b2e00e6e45d746f0000

Adds test case for Cash and Stripe payment methods

With no source
2024-05-13 12:55:55 +01:00
filipefurtad0
282acd256b Undoes changes: removes unecessary test 2024-05-13 12:55:55 +01:00
filipefurtad0
d520e3838c Removes unused spec related to legacy checkout
We can see on the respective controller spec, that having a Stripe SCA payment, with no source does not trigger the error 400, observed on the legacy checkout.
2024-05-13 12:55:52 +01:00
dependabot[bot]
fd01cc1667 chore(deps): bump geocoder from 1.8.2 to 1.8.3
Bumps [geocoder](https://github.com/alexreisner/geocoder) from 1.8.2 to 1.8.3.
- [Changelog](https://github.com/alexreisner/geocoder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/alexreisner/geocoder/compare/v1.8.2...v1.8.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-13 09:46:23 +00:00
dependabot[bot]
cacff92aeb chore(deps): bump dotenv from 3.1.0 to 3.1.2
Bumps [dotenv](https://github.com/bkeepers/dotenv) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/bkeepers/dotenv/releases)
- [Changelog](https://github.com/bkeepers/dotenv/blob/main/Changelog.md)
- [Commits](https://github.com/bkeepers/dotenv/compare/v3.1.0...v3.1.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-13 09:40:12 +00:00
Manuel Gonçalves
89f7c4e351 Intorduced the simple_format method to the payment method description 2024-05-13 10:34:24 +01:00
Gaetan Craig-Riou
1cc0089cb5 Merge pull request #12462 from openfoodfoundation/dependabot/bundler/i18n-1.14.5
chore(deps): bump i18n from 1.14.4 to 1.14.5
2024-05-13 10:35:50 +10:00
Gaetan Craig-Riou
0867f69d21 Merge pull request #12463 from openfoodfoundation/dependabot/bundler/wkhtmltopdf-binary-0.12.6.7
chore(deps): bump wkhtmltopdf-binary from 0.12.6.6 to 0.12.6.7
2024-05-13 10:09:55 +10:00
Gaetan Craig-Riou
c1088f79fe Merge pull request #12451 from mkllnk/rspec-config
Use recommended RSpec config
2024-05-13 09:56:49 +10:00
Manuel Gonçalves
f7561b428e Intorduced the simple_format method to the shipping method description 2024-05-10 15:49:33 +01:00
dependabot[bot]
900080e7bb chore(deps): bump wkhtmltopdf-binary from 0.12.6.6 to 0.12.6.7
Bumps [wkhtmltopdf-binary](https://github.com/zakird/wkhtmltopdf_binary_gem) from 0.12.6.6 to 0.12.6.7.
- [Release notes](https://github.com/zakird/wkhtmltopdf_binary_gem/releases)
- [Changelog](https://github.com/zakird/wkhtmltopdf_binary_gem/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zakird/wkhtmltopdf_binary_gem/compare/0.12.6.6...0.12.6.7)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-10 09:42:36 +00:00
dependabot[bot]
c8e94c6658 chore(deps): bump i18n from 1.14.4 to 1.14.5
Bumps [i18n](https://github.com/ruby-i18n/i18n) from 1.14.4 to 1.14.5.
- [Release notes](https://github.com/ruby-i18n/i18n/releases)
- [Changelog](https://github.com/ruby-i18n/i18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ruby-i18n/i18n/compare/v1.14.4...v1.14.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-10 09:41:51 +00:00
Ahmed Ejaz
881da0f9ac 11058: add get_all_input_values 2024-05-10 04:05:29 +05:00
Maikel Linke
bc27e4bbdd Re-instate spec which uses invalid mocking
I removed it because it needed a complete rewrite and I didn't think it
was valuable enough to do so. But now that I deactivated RSpecs
validating mocks again, this spec passes and we can do that work another
time.
2024-05-10 08:56:06 +10:00
Ahmed Ejaz
b5fe19cb7d 11058: add specs 2024-05-10 02:52:57 +05:00
Mohamed ABDELLANI
40b2361572 add LogDestroyPerformer concern to be included in models where we want log destroy action 2024-05-09 14:38:21 +01:00
Arun Guleria
c84be2f396 12372-Add missing translation page titles 2024-05-09 15:12:03 +05:30
Maikel Linke
8362c4a7bd Detailed output when running only one spec file 2024-05-09 12:24:42 +10:00
Maikel Linke
6317fe1b71 Disable RSpec monkey patching 2024-05-09 12:24:41 +10:00
Maikel Linke
9ca6519fb1 Recommended RSpec option: shared_context_metadata_behavior
One spec failed due to this new behaviour. Converting the shared
examples to simple blocks solved this. But the specs could probably be
written better now. I didn't invest this time.
2024-05-09 11:14:13 +10:00
Maikel Linke
6b2bb0bd32 Don't verify partial doubles because we can't fix all specs now 2024-05-09 11:14:13 +10:00
Maikel Linke
d6318b7194 Remove mocking of deleted Order methods 2024-05-09 11:14:13 +10:00
Maikel Linke
9320ed0559 And less stubbing is better.
[skip ci]
2024-05-09 11:14:13 +10:00
Maikel Linke
9c402fbdb2 Verify partial doubles
And look, we were stubbing deleted code.
2024-05-09 11:14:13 +10:00
Maikel Linke
a65189c43e Improve failure messages of chained expectations 2024-05-09 11:14:13 +10:00
Manuel Gonçalves
110eeaf793 Removed the "ready for" information located in checkout/details
This provides the solution wanted and the best way to do it.
2024-05-09 10:14:37 +10:00
Ahmed Ejaz
86f88792c2 11058: add sortable products by name 2024-05-08 12:56:41 +05:00
cyrillefr
6575ad738b Fix Ship Order Button: requested changes
- bypass rubocop class lines limit
2024-05-07 19:15:00 +02:00
cyrillefr
271d50e5ab Fix Ship Order Button: modal should close itself
- returns to the same processing for customer, invoices etc.
   that edit
 - need a bit of sleep in spec bc 2 tasks are asynchroneous
2024-05-07 19:15:00 +02:00
cyrillefr
34bb05e681 Fix 'Ship Order': integrating non regression spec
- removes the pending
 - add the click to go to the 'Order Details' page
   to check for the 'shipped' status
 - from enqueued to have_been_enqueued so the spec
   is flaky-free
2024-05-07 19:15:00 +02:00
cyrillefr
ba68f4b252 Fix 'Ship Order': requested changes
- deletes local variables in view
- factor logic in helper
2024-05-07 19:15:00 +02:00
cyrillefr
901c29c97b Fix Ship Order menu choice not working
- Front End ShipOrderComponent was missed for the menu to work
 - updated spec to test for a specific case
2024-05-07 19:15:00 +02:00
cyrillefr
5e18038a68 Fix RedundantPresenceValidationOnBelongs on two files
- presence: true is redundant since Rails 5.0 BUT applies
   with new default config of
   belongs_to_required_by_default to true.
   Lots of files with belongs_to_required_by_default = false
   (backward compatibility).
   So: deleting this setting implies to adding optional: true
 - added 'NOT NULL' constraints so model constraints match
   with contraints on DB tables.
 - corresponding migration files to match AR Models &
   DB tables
 - rake tasks to check corrupt data (ie: NULL/nil in id fields)
 - updated the todo
2024-05-01 15:43:09 +02:00
1006 changed files with 14436 additions and 14263 deletions

12
.env
View File

@@ -10,10 +10,10 @@ TIMEZONE="Melbourne"
DEFAULT_COUNTRY_CODE="AU"
# Locale for translation.
LOCALE="en"
LOCALE="en_AU"
# For multilingual - ENV doesn't have array so pass it as string with commas
AVAILABLE_LOCALES="en,es"
AVAILABLE_LOCALES="en_AU,es"
# Spree zone.
CHECKOUT_ZONE="Australia"
@@ -42,14 +42,6 @@ SMTP_PASSWORD="f00d"
# Javascript error reporting via Bugsnag.
# BUGSNAG_JS_KEY=""
# SingleSignOn login for Discourse
#
# DISCOURSE_SSO_SECRET should be a random string. It must be the same as provided to your Discourse instance.
# DISCOURSE_SSO_SECRET=""
#
# DISCOURSE_URL must be the URL of your Discourse instance.
# DISCOURSE_URL="https://noticeboard.openfoodnetwork.org.au"
# 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

View File

@@ -5,6 +5,11 @@
#
# cp .env.development .env.local
# Locale for translation. Using a locale other than `en` tests the
# successful fallback to `en`. You will also see up-to-date text used
# in production
LOCALE="en_AU"
VERBOSE_QUERY_LOGS=true
SECRET_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

View File

@@ -1,6 +1,9 @@
# ENV vars for the test environment
# Override locally with `.env.test.local`
# Locale for translation.
LOCALE="en_TEST"
OFN_REDIS_JOBS_URL="redis://localhost:6379/2"
SECRET_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

View File

@@ -0,0 +1,14 @@
name: Auto Author Assign
on:
pull_request_target:
types: [opened, reopened]
permissions:
pull-requests: write
jobs:
assign-author:
runs-on: ubuntu-latest
steps:
- uses: toshimaru/auto-author-assign@v2.1.0

View File

@@ -59,13 +59,14 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version-file: .node-version
cache: yarn
- name: Install JS dependencies
run: yarn install --frozen-lockfile
- name: Set up database
run: |
bundle exec rake db:create db:schema:load
bin/rake db:create db:schema:load
- name: Run tests
env:
@@ -83,7 +84,7 @@ jobs:
KNAPSACK_PRO_TEST_FILE_PATTERN: "{spec/controllers/**/*_spec.rb}"
run: |
git show --no-patch # the commit being tested (which is often a merge due to actions/checkout@v3)
bundle exec rake knapsack_pro:rspec
bin/rake knapsack_pro:rspec
models:
runs-on: ubuntu-22.04
@@ -106,10 +107,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: [4]
# 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, 2, 3]
steps:
- uses: actions/checkout@v3
@@ -125,7 +126,7 @@ jobs:
- name: Set up database
run: |
bundle exec rake db:create db:schema:load
bin/rake db:create db:schema:load
- name: Run tests
env:
@@ -142,7 +143,7 @@ jobs:
#KNAPSACK_PRO_RSPEC_SPLIT_BY_TEST_EXAMPLES: true
KNAPSACK_PRO_TEST_FILE_PATTERN: "{spec/models/**/*_spec.rb}"
run: |
bundle exec rake knapsack_pro:rspec
bin/rake knapsack_pro:rspec
system_admin:
runs-on: ubuntu-22.04
@@ -165,10 +166,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: [13]
ci_node_total: [14]
# 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, 10, 11, 12]
ci_node_index: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
steps:
- uses: actions/checkout@v3
@@ -185,13 +186,14 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version-file: .node-version
cache: yarn
- name: Install JS dependencies
run: yarn install --frozen-lockfile
- name: Set up database
run: |
bundle exec rake db:create db:schema:load
bin/rake db:create db:schema:load
- name: Run tests
@@ -210,13 +212,13 @@ jobs:
KNAPSACK_PRO_TEST_FILE_PATTERN: "{spec/system/admin/**/*_spec.rb}"
run: |
bundle exec rake knapsack_pro:queue:rspec
bin/rake knapsack_pro:queue:rspec
- name: Archive failed tests screenshots
if: failure()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: failed-tests-screenshots
name: failed-admin-tests-screenshots
path: tmp/capybara/screenshots/*.png
retention-days: 7
if-no-files-found: ignore
@@ -262,13 +264,14 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version-file: .node-version
cache: yarn
- name: Install JS dependencies
run: yarn install --frozen-lockfile
- name: Set up database
run: |
bundle exec rake db:create db:schema:load
bin/rake db:create db:schema:load
- name: Run tests
@@ -287,13 +290,13 @@ jobs:
KNAPSACK_PRO_TEST_FILE_PATTERN: "{spec/system/consumer/**/*_spec.rb}"
run: |
bundle exec rake knapsack_pro:queue:rspec
bin/rake knapsack_pro:queue:rspec
- name: Archive failed tests screenshots
if: failure()
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: failed-tests-screenshots
name: failed-consumer-tests-screenshots
path: tmp/capybara/screenshots/*.png
retention-days: 7
if-no-files-found: ignore
@@ -340,13 +343,14 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version-file: .node-version
cache: yarn
- name: Install JS dependencies
run: yarn install --frozen-lockfile
- name: Set up database
run: |
bundle exec rake db:create db:schema:load
bin/rake db:create db:schema:load
- name: Run tests
@@ -365,16 +369,7 @@ jobs:
KNAPSACK_PRO_TEST_FILE_PATTERN: "{spec/lib/**/*_spec.rb,spec/migrations/**/*_spec.rb,spec/serializers/**/*_spec.rb,engines/**/*_spec.rb}"
run: |
bundle exec rake knapsack_pro:rspec
- name: Archive failed tests screenshots
if: failure()
uses: actions/upload-artifact@v3
with:
name: failed-tests-screenshots
path: tmp/capybara/screenshots/*.png
retention-days: 7
if-no-files-found: ignore
bin/rake knapsack_pro:rspec
test_the_rest:
runs-on: ubuntu-22.04
@@ -418,13 +413,14 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version-file: .node-version
cache: yarn
- name: Install JS dependencies
run: yarn install --frozen-lockfile
- name: Set up database
run: |
bundle exec rake db:create db:schema:load
bin/rake db:create db:schema:load
- name: Run tests
env:
@@ -441,7 +437,7 @@ jobs:
#KNAPSACK_PRO_RSPEC_SPLIT_BY_TEST_EXAMPLES: true
KNAPSACK_PRO_TEST_FILE_EXCLUDE_PATTERN: "{engines/**/*_spec.rb,spec/models/**/*_spec.rb,spec/controllers/**/*_spec.rb,spec/serializers/**/*_spec.rb,spec/lib/**/*_spec.rb,spec/migrations/**/*_spec.rb,spec/system/**/*_spec.rb}"
run: |
bundle exec rake knapsack_pro:rspec
bin/rake knapsack_pro:rspec
non_knapsack_jest_karma:
runs-on: ubuntu-22.04
@@ -470,12 +466,13 @@ jobs:
- uses: actions/setup-node@v3
with:
node-version-file: .node-version
cache: yarn
- name: Install JS dependencies
run: yarn install --frozen-lockfile
- name: Run JS tests
run: bundle exec rake karma:run
run: bin/rake karma:run
- name: Run jest tests
run: yarn jest

View File

@@ -115,6 +115,11 @@ Rails/OutputSafety:
Exclude:
- spec/**/*
Rails/RedundantActiveRecordAllMethod:
AllowedReceivers:
- ActionMailer::Preview
- ActiveSupport::TimeZone
Rails/SkipsModelValidations:
AllowedMethods:
- touch
@@ -124,6 +129,13 @@ Rails/SkipsModelValidations:
- update_column
- update_columns
Rails/UnknownEnv:
Environments:
- development
- production
- staging
- test
Rails/WhereExists:
EnforcedStyle: where # Cf. conversion https://github.com/openfoodfoundation/openfoodnetwork/pull/12363

View File

@@ -1,15 +1,16 @@
# This configuration was generated by
# `rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 1400 --no-auto-gen-timestamp`
# using RuboCop version 1.62.1.
# using RuboCop version 1.64.1.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.
# Offense count: 2
Lint/DuplicateMethods:
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
Layout/EmptyLines:
Exclude:
- 'lib/discourse/single_sign_on.rb'
- 'app/services/products_renderer.rb'
# Offense count: 16
# Configuration parameters: AllowComments, AllowEmptyLambdas.
@@ -27,11 +28,10 @@ Lint/EmptyBlock:
- 'spec/jobs/subscription_placement_job_spec.rb'
- 'spec/models/product_import/entry_validator_spec.rb'
# Offense count: 6
# Offense count: 4
# Configuration parameters: AllowComments.
Lint/EmptyClass:
Exclude:
- 'spec/controllers/spree/admin/base_controller_spec.rb'
- 'spec/lib/reports/report_loader_spec.rb'
# Offense count: 1
@@ -85,7 +85,7 @@ Lint/UselessMethodDefinition:
Exclude:
- 'app/models/spree/gateway.rb'
# Offense count: 26
# Offense count: 24
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes, Max.
Metrics/AbcSize:
Exclude:
@@ -104,11 +104,9 @@ Metrics/AbcSize:
- 'app/models/spree/order/checkout.rb'
- 'app/models/spree/preferences/preferable_class_methods.rb'
- 'app/models/spree/return_authorization.rb'
- 'lib/discourse/single_sign_on.rb'
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/spree/core/controller_helpers/order.rb'
- 'lib/tasks/enterprises.rake'
- 'spec/services/orders/checkout_restart_service_spec.rb'
# Offense count: 9
@@ -164,7 +162,7 @@ Metrics/ClassLength:
- 'app/models/spree/user.rb'
- 'app/models/spree/variant.rb'
- 'app/models/spree/zone.rb'
- 'app/reflexes/products_reflex.rb'
- 'app/reflexes/admin/orders_reflex.rb'
- 'app/serializers/api/cached_enterprise_serializer.rb'
- 'app/serializers/api/enterprise_shopfront_serializer.rb'
- 'app/services/cart_service.rb'
@@ -180,7 +178,7 @@ Metrics/ClassLength:
- 'lib/reporting/reports/enterprise_fee_summary/scope.rb'
- 'lib/reporting/reports/xero_invoices/base.rb'
# Offense count: 34
# Offense count: 32
# Configuration parameters: AllowedMethods, AllowedPatterns, Max.
Metrics/CyclomaticComplexity:
Exclude:
@@ -190,7 +188,6 @@ Metrics/CyclomaticComplexity:
- 'app/helpers/checkout_helper.rb'
- 'app/helpers/order_cycles_helper.rb'
- 'app/helpers/spree/admin/navigation_helper.rb'
- 'app/models/enterprise.rb'
- 'app/models/enterprise_relationship.rb'
- 'app/models/product_import/entry_validator.rb'
- 'app/models/spree/ability.rb'
@@ -204,7 +201,6 @@ Metrics/CyclomaticComplexity:
- 'app/models/spree/tax_rate.rb'
- 'app/models/spree/variant.rb'
- 'app/models/spree/zone.rb'
- 'lib/discourse/single_sign_on.rb'
- 'lib/open_food_network/enterprise_issue_validator.rb'
- 'lib/reporting/reports/xero_invoices/base.rb'
- 'lib/spree/core/controller_helpers/order.rb'
@@ -212,7 +208,7 @@ Metrics/CyclomaticComplexity:
- 'lib/spree/localized_number.rb'
- 'spec/models/product_importer_spec.rb'
# Offense count: 25
# Offense count: 24
# Configuration parameters: CountComments, Max, CountAsOne, AllowedMethods, AllowedPatterns.
Metrics/MethodLength:
Exclude:
@@ -226,7 +222,6 @@ Metrics/MethodLength:
- 'app/models/spree/order/checkout.rb'
- 'app/models/spree/payment/processing.rb'
- 'app/models/spree/preferences/preferable_class_methods.rb'
- 'lib/discourse/single_sign_on.rb'
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/reporting/reports/enterprise_fee_summary/scope.rb'
@@ -234,7 +229,7 @@ Metrics/MethodLength:
- 'lib/spree/localized_number.rb'
- 'lib/tasks/sample_data/product_factory.rb'
# Offense count: 48
# Offense count: 49
# Configuration parameters: CountComments, Max, CountAsOne.
Metrics/ModuleLength:
Exclude:
@@ -264,6 +259,7 @@ Metrics/ModuleLength:
- 'spec/controllers/payment_gateways/stripe_controller_spec.rb'
- 'spec/controllers/spree/admin/adjustments_controller_spec.rb'
- 'spec/controllers/spree/admin/payment_methods_controller_spec.rb'
- 'spec/controllers/spree/admin/variants_controller_spec.rb'
- 'spec/lib/open_food_network/address_finder_spec.rb'
- 'spec/lib/open_food_network/enterprise_fee_calculator_spec.rb'
- 'spec/lib/open_food_network/order_cycle_form_applicator_spec.rb'
@@ -396,9 +392,7 @@ RSpecRails/HaveHttpStatus:
- 'spec/controllers/stripe/webhooks_controller_spec.rb'
- 'spec/controllers/user_passwords_controller_spec.rb'
- 'spec/controllers/user_registrations_controller_spec.rb'
- 'spec/requests/admin/images_spec.rb'
- 'spec/requests/api/routes_spec.rb'
- 'spec/requests/checkout/failed_checkout_spec.rb'
- 'spec/requests/checkout/stripe_sca_spec.rb'
- 'spec/requests/home_controller_spec.rb'
- 'spec/requests/omniauth_callbacks_controller_spec.rb'
@@ -414,7 +408,7 @@ RSpecRails/HttpStatus:
- 'spec/controllers/spree/admin/products_controller_spec.rb'
- 'spec/requests/api/orders_spec.rb'
# Offense count: 146
# Offense count: 144
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Inferences.
RSpecRails/InferredSpecType:
@@ -518,7 +512,6 @@ RSpecRails/InferredSpecType:
- 'spec/helpers/navigation_helper_spec.rb'
- 'spec/helpers/order_cycles_helper_spec.rb'
- 'spec/helpers/serializer_helper_spec.rb'
- 'spec/helpers/shared_helper_spec.rb'
- 'spec/helpers/shop_helper_spec.rb'
- 'spec/helpers/spree/admin/base_helper_spec.rb'
- 'spec/helpers/spree/admin/general_settings_helper_spec.rb'
@@ -552,7 +545,6 @@ RSpecRails/InferredSpecType:
- 'spec/requests/api/routes_spec.rb'
- 'spec/requests/api/v1/customers_spec.rb'
- 'spec/requests/api_docs_spec.rb'
- 'spec/requests/checkout/failed_checkout_spec.rb'
- 'spec/requests/checkout/paypal_spec.rb'
- 'spec/requests/checkout/routes_spec.rb'
- 'spec/requests/checkout/stripe_sca_spec.rb'
@@ -609,65 +601,6 @@ Rails/LexicallyScopedActionFilter:
- 'app/controllers/spree/admin/zones_controller.rb'
- 'app/controllers/spree/users_controller.rb'
# Offense count: 32
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/Pluck:
Exclude:
- 'app/controllers/admin/variant_overrides_controller.rb'
- 'app/services/cart_service.rb'
- 'lib/reporting/report_headers_builder.rb'
- 'spec/controllers/admin/bulk_line_items_controller_spec.rb'
- 'spec/controllers/admin/subscriptions_controller_spec.rb'
- 'spec/controllers/api/v0/order_cycles_controller_spec.rb'
- 'spec/controllers/api/v0/orders_controller_spec.rb'
- 'spec/controllers/api/v0/products_controller_spec.rb'
- 'spec/controllers/api/v0/shops_controller_spec.rb'
- 'spec/controllers/api/v0/states_controller_spec.rb'
- 'spec/controllers/api/v0/taxons_controller_spec.rb'
- 'spec/helpers/spree/admin/orders_helper_spec.rb'
- 'spec/lib/reports/lettuce_share_report_spec.rb'
- 'spec/lib/reports/users_and_enterprises_report_spec.rb'
- 'spec/serializers/api/admin/for_order_cycle/supplied_product_serializer_spec.rb'
- 'spec/support/api_helper.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: conservative, aggressive
Rails/PluckInWhere:
Exclude:
- 'app/models/spree/variant.rb'
# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedReceivers.
# AllowedReceivers: ActionMailer::Preview, ActiveSupport::TimeZone
Rails/RedundantActiveRecordAllMethod:
Exclude:
- 'app/models/spree/tax_rate.rb'
- 'app/models/spree/user.rb'
- 'app/models/spree/variant.rb'
- 'spec/system/admin/product_import_spec.rb'
# Offense count: 11
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/RedundantPresenceValidationOnBelongsTo:
Exclude:
- 'app/models/spree/line_item.rb'
- 'app/models/spree/order.rb'
- 'app/models/spree/stock_item.rb'
- 'app/models/spree/stock_movement.rb'
- 'app/models/spree/tax_rate.rb'
- 'app/models/subscription_line_item.rb'
- 'app/models/tag_rule.rb'
- 'app/models/variant_override.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/RelativeDateConstant:
Exclude:
- 'lib/tasks/data/remove_transient_data.rb'
# Offense count: 56
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Include.
@@ -688,26 +621,6 @@ Rails/ResponseParsedBody:
- 'spec/controllers/spree/credit_cards_controller_spec.rb'
- 'spec/controllers/user_registrations_controller_spec.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/RootPathnameMethods:
Exclude:
- 'spec/lib/reports/orders_and_fulfillment/order_cycle_customer_totals_report_spec.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/SelectMap:
Exclude:
- 'app/models/enterprise.rb'
# Offense count: 4
# Configuration parameters: ForbiddenMethods, AllowedMethods.
# ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, insert, insert!, insert_all, insert_all!, toggle!, touch, touch_all, update_all, update_attribute, update_column, update_columns, update_counters, upsert, upsert_all
Rails/SkipsModelValidations:
Exclude:
- 'app/models/variant_override.rb'
- 'spec/models/spree/line_item_spec.rb'
# Offense count: 7
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
@@ -736,24 +649,6 @@ Rails/UniqueValidationWithoutIndex:
- 'app/models/spree/tax_category.rb'
- 'app/models/spree/zone.rb'
# Offense count: 1
# Configuration parameters: Severity, Environments.
# Environments: development, test, production
Rails/UnknownEnv:
Exclude:
- 'app/models/spree/app_configuration.rb'
# Offense count: 7
# Configuration parameters: Severity.
Rails/UnusedRenderContent:
Exclude:
- 'app/controllers/admin/bulk_line_items_controller.rb'
- 'app/controllers/admin/tag_rules_controller.rb'
- 'app/controllers/api/v0/enterprise_fees_controller.rb'
- 'app/controllers/api/v0/products_controller.rb'
- 'app/controllers/api/v0/taxons_controller.rb'
- 'app/controllers/api/v0/variants_controller.rb'
# Offense count: 1
Security/Open:
Exclude:
@@ -778,7 +673,7 @@ Style/CaseEquality:
Exclude:
- 'spec/models/spree/payment_spec.rb'
# Offense count: 25
# Offense count: 23
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: nested, compact
@@ -805,7 +700,6 @@ Style/ClassAndModuleChildren:
- 'app/serializers/api/taxon_serializer.rb'
- 'app/serializers/api/variant_serializer.rb'
- 'lib/open_food_network/locking.rb'
- 'spec/controllers/spree/admin/base_controller_spec.rb'
- 'spec/models/spree/payment_method_spec.rb'
# Offense count: 1
@@ -858,12 +752,6 @@ Style/HashEachMethods:
- 'spec/models/product_importer_spec.rb'
- 'spec/support/cancan_helper.rb'
# Offense count: 1
# Configuration parameters: MinBranchesCount.
Style/HashLikeCase:
Exclude:
- 'app/models/enterprise.rb'
# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/MapToHash:
@@ -952,19 +840,6 @@ Style/RedundantInitialize:
Exclude:
- 'spec/models/spree/gateway_spec.rb'
# Offense count: 2
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/RedundantInterpolation:
Exclude:
- 'lib/tasks/karma.rake'
- 'spec/base_spec_helper.rb'
# Offense count: 8
# This cop supports safe autocorrection (--autocorrect).
Style/RedundantLineContinuation:
Exclude:
- 'lib/reporting/reports/enterprise_fee_summary/scope.rb'
# Offense count: 19
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedMethods, AllowedPatterns.
@@ -974,69 +849,10 @@ Style/ReturnNilInPredicateMethodDefinition:
- 'app/serializers/api/admin/customer_serializer.rb'
- 'engines/order_management/app/services/order_management/subscriptions/validator.rb'
# Offense count: 204
Style/Send:
Exclude:
- 'spec/controllers/admin/subscriptions_controller_spec.rb'
- 'spec/controllers/payment_gateways/paypal_controller_spec.rb'
- 'spec/controllers/spree/admin/base_controller_spec.rb'
- 'spec/controllers/spree/orders_controller_spec.rb'
- 'spec/helpers/order_cycles_helper_spec.rb'
- 'spec/jobs/subscription_confirm_job_spec.rb'
- 'spec/jobs/subscription_placement_job_spec.rb'
- 'spec/lib/open_food_network/address_finder_spec.rb'
- 'spec/lib/open_food_network/enterprise_fee_applicator_spec.rb'
- 'spec/lib/open_food_network/enterprise_fee_calculator_spec.rb'
- 'spec/lib/open_food_network/order_cycle_form_applicator_spec.rb'
- 'spec/lib/open_food_network/permissions_spec.rb'
- 'spec/lib/open_food_network/tag_rule_applicator_spec.rb'
- 'spec/lib/reports/xero_invoices_report_spec.rb'
- 'spec/lib/stripe/webhook_handler_spec.rb'
- 'spec/models/calculator/weight_spec.rb'
- 'spec/models/enterprise_spec.rb'
- 'spec/models/exchange_spec.rb'
- 'spec/models/spree/order_inventory_spec.rb'
- 'spec/models/spree/payment_spec.rb'
- 'spec/models/spree/return_authorization_spec.rb'
- 'spec/models/tag_rule/filter_order_cycles_spec.rb'
- 'spec/models/tag_rule/filter_payment_methods_spec.rb'
- 'spec/models/tag_rule/filter_products_spec.rb'
- 'spec/models/tag_rule/filter_shipping_methods_spec.rb'
- 'spec/services/cart_service_spec.rb'
- 'spec/services/products_renderer_spec.rb'
- 'spec/services/variant_units/option_value_namer_spec.rb'
- 'spec/support/localized_number_helper.rb'
# Offense count: 4
# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/SlicingWithRange:
Exclude:
- 'app/helpers/spree/admin/navigation_helper.rb'
- 'app/services/embedded_page_service.rb'
- 'engines/order_management/app/services/order_management/subscriptions/validator.rb'
- 'lib/discourse/single_sign_on.rb'
# Offense count: 25
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Mode.
Style/StringConcatenation:
Exclude:
- 'app/controllers/admin/stripe_connect_settings_controller.rb'
- 'app/helpers/discourse_helper.rb'
- 'app/helpers/enterprises_helper.rb'
- 'app/helpers/spree/admin/base_helper.rb'
- 'app/mailers/spree/user_mailer.rb'
- 'app/models/enterprise.rb'
- 'app/models/spree/credit_card.rb'
- 'app/models/spree/payment_method.rb'
- 'app/serializers/api/cached_enterprise_serializer.rb'
- 'app/serializers/api/enterprise_shopfront_list_serializer.rb'
- 'app/services/embedded_page_service.rb'
- 'app/services/products_renderer.rb'
- 'lib/spree/api/controller_setup.rb'
- 'lib/spree/core/environment_extension.rb'
- 'spec/models/spree/line_item_spec.rb'
- 'spec/models/spree/product_spec.rb'
- 'spec/services/embedded_page_service_spec.rb'
- 'spec/support/features/datepicker_helper.rb'
- 'spec/system/admin/products_spec.rb'

10
Gemfile
View File

@@ -16,10 +16,8 @@ gem "image_processing"
gem 'activemerchant', '>= 1.78.0'
gem 'angular-rails-templates', '>= 0.3.0'
gem 'awesome_nested_set'
gem 'ransack', '~> 4.1.0'
gem 'responders'
gem 'rexml'
gem 'webpacker', '~> 5'
gem 'i18n'
@@ -103,8 +101,10 @@ gem 'redis'
gem 'sidekiq'
gem 'sidekiq-scheduler'
gem "cable_ready", "5.0.1"
gem "stimulus_reflex", "3.5.0.rc3"
gem "cable_ready"
gem "stimulus_reflex"
gem "turbo-rails"
gem 'combine_pdf'
gem 'wicked_pdf'
@@ -164,7 +164,7 @@ group :test, :development do
gem 'rspec-sql'
gem 'rswag'
gem 'shoulda-matchers'
gem 'stimulus_reflex_testing'
gem 'stimulus_reflex_testing', github: "podia/stimulus_reflex_testing", branch: :main
gem 'timecop'
end

View File

@@ -17,6 +17,14 @@ GIT
sass-rails
thor (>= 0.14)
GIT
remote: https://github.com/podia/stimulus_reflex_testing.git
revision: abac2ee34de347c589795b4d1a8e83e0baafb201
branch: main
specs:
stimulus_reflex_testing (0.3.1)
stimulus_reflex (>= 3.3.0)
PATH
remote: engines/catalog
specs:
@@ -153,20 +161,18 @@ GEM
activerecord (>= 3.1.0, < 8)
ast (2.4.2)
attr_required (1.0.2)
awesome_nested_set (3.6.0)
activerecord (>= 4.0.0, < 7.2)
aws-eventstream (1.3.0)
aws-partitions (1.914.0)
aws-sdk-core (3.192.0)
aws-partitions (1.929.0)
aws-sdk-core (3.196.1)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.79.0)
aws-sdk-core (~> 3, >= 3.191.0)
aws-sdk-kms (1.81.0)
aws-sdk-core (~> 3, >= 3.193.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.147.0)
aws-sdk-core (~> 3, >= 3.192.0)
aws-sdk-s3 (1.151.0)
aws-sdk-core (~> 3, >= 3.194.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.8)
aws-sigv4 (1.8.0)
@@ -185,10 +191,11 @@ GEM
bullet (7.1.6)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
cable_ready (5.0.1)
cable_ready (5.0.5)
actionpack (>= 5.2)
actionview (>= 5.2)
activesupport (>= 5.2)
observer (~> 0.1)
railties (>= 5.2)
thread-local (>= 1.1.0)
cancancan (1.15.0)
@@ -221,14 +228,15 @@ GEM
combine_pdf (1.0.26)
matrix
ruby-rc4 (>= 0.1.5)
concurrent-ruby (1.2.3)
concurrent-ruby (1.3.1)
connection_pool (2.4.1)
crack (1.0.0)
bigdecimal
rexml
crass (1.0.6)
css_parser (1.16.0)
css_parser (1.17.1)
addressable
csv (3.3.0)
cuprite (0.15)
capybara (~> 3.0)
ferrum (~> 0.14.0)
@@ -253,14 +261,14 @@ GEM
warden (~> 1.2.3)
devise-encryptable (0.2.0)
devise (>= 2.1.0)
devise-i18n (1.12.0)
devise-i18n (1.12.1)
devise (>= 4.9.0)
devise-token_authenticatable (1.1.0)
devise (>= 4.0.0, < 5.0.0)
diff-lcs (1.5.1)
digest (3.1.1)
docile (1.4.0)
dotenv (3.1.0)
dotenv (3.1.2)
email_validator (2.2.4)
activemodel
erubi (1.12.0)
@@ -321,7 +329,9 @@ GEM
fuubar (2.5.1)
rspec-core (~> 3.0)
ruby-progressbar (~> 1.4)
geocoder (1.8.2)
geocoder (1.8.3)
base64 (>= 0.1.0)
csv (>= 3.0.0)
globalid (1.2.1)
activesupport (>= 6.1)
gmaps4rails (2.1.2)
@@ -337,7 +347,7 @@ GEM
hashie (5.0.0)
highline (2.0.3)
htmlentities (4.3.4)
i18n (1.14.4)
i18n (1.14.5)
concurrent-ruby (~> 1.0)
i18n-js (3.9.2)
i18n (>= 0.6.6)
@@ -346,7 +356,7 @@ GEM
ruby-vips (>= 2.0.17, < 3)
immigrant (0.3.6)
activerecord (>= 3.0)
invisible_captcha (2.2.0)
invisible_captcha (2.3.0)
rails (>= 5.2)
io-console (0.7.2)
ipaddress (0.8.3)
@@ -385,7 +395,7 @@ GEM
activesupport (>= 4.2)
jwt (2.8.1)
base64
knapsack_pro (7.1.0)
knapsack_pro (7.4.0)
rake
language_server-protocol (3.17.0.3)
launchy (3.0.0)
@@ -405,9 +415,9 @@ GEM
net-imap
net-pop
net-smtp
marcel (1.0.2)
marcel (1.0.4)
matrix (0.4.2)
method_source (1.0.0)
method_source (1.1.0)
mime-types (3.5.2)
mime-types-data (~> 3.2015)
mime-types-data (3.2023.1205)
@@ -417,7 +427,7 @@ GEM
mini_magick (4.11.0)
mini_mime (1.1.5)
mini_portile2 (2.8.6)
minitest (5.22.3)
minitest (5.23.1)
monetize (1.13.0)
money (~> 6.12)
money (6.16.0)
@@ -437,21 +447,24 @@ GEM
net-smtp (0.5.0)
net-protocol
newrelic_rpm (9.9.0)
nio4r (2.7.0)
nokogiri (1.16.4)
nio4r (2.7.1)
nokogiri (1.16.5)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
nokogiri-html5-inference (0.3.0)
nokogiri (~> 1.14)
oauth2 (1.4.11)
faraday (>= 0.17.3, < 3.0)
jwt (>= 1.0, < 3.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (>= 1.2, < 4)
observer (0.1.2)
omniauth (2.1.2)
hashie (>= 3.4.6)
rack (>= 2.2.3)
rack-protection
omniauth-rails_csrf_protection (1.0.1)
omniauth-rails_csrf_protection (1.0.2)
actionpack (>= 4.2)
omniauth (~> 2.0)
omniauth_openid_connect (0.7.1)
@@ -479,7 +492,7 @@ GEM
parallel (1.24.0)
paranoia (2.6.3)
activerecord (>= 5.1, < 7.2)
parser (3.3.1.0)
parser (3.3.2.0)
ast (~> 2.4.1)
racc
paypal-sdk-core (0.3.4)
@@ -500,14 +513,14 @@ GEM
method_source (~> 1.0)
psych (5.1.2)
stringio
public_suffix (5.0.4)
public_suffix (5.0.5)
puma (6.4.2)
nio4r (~> 2.0)
query_count (1.1.1)
activerecord (>= 4.2)
railties (>= 4.2)
raabro (1.4.0)
racc (1.7.3)
racc (1.8.0)
rack (2.2.9)
rack-mini-profiler (2.3.4)
rack (>= 1.2.0)
@@ -528,7 +541,7 @@ GEM
rack (< 3)
rack-test (2.1.0)
rack (>= 1.3)
rack-timeout (0.6.3)
rack-timeout (0.7.0)
rails (7.0.8)
actioncable (= 7.0.8)
actionmailbox (= 7.0.8)
@@ -589,7 +602,7 @@ GEM
redis-client (>= 0.22.0)
redis-client (0.22.1)
connection_pool
regexp_parser (2.9.0)
regexp_parser (2.9.2)
reline (0.5.0)
io-console (~> 0.5)
request_store (1.5.1)
@@ -597,11 +610,12 @@ GEM
responders (3.1.1)
actionpack (>= 5.2)
railties (>= 5.2)
rexml (3.2.6)
roadie (5.2.0)
rexml (3.2.8)
strscan (>= 3.0.9)
roadie (5.2.1)
css_parser (~> 1.4)
nokogiri (~> 1.15)
roadie-rails (3.1.0)
roadie-rails (3.2.0)
railties (>= 5.1, < 8.0)
roadie (~> 5.0)
rodf (1.2.0)
@@ -651,7 +665,7 @@ GEM
rswag-ui (2.13.0)
actionpack (>= 3.1, < 7.2)
railties (>= 3.1, < 7.2)
rubocop (1.63.5)
rubocop (1.64.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
@@ -740,21 +754,21 @@ GEM
state_machines-activerecord (0.9.0)
activerecord (>= 6.0)
state_machines-activemodel (>= 0.9.0)
stimulus_reflex (3.5.0.rc3)
stimulus_reflex (3.5.1)
actioncable (>= 5.2, < 8)
actionpack (>= 5.2, < 8)
actionview (>= 5.2, < 8)
activesupport (>= 5.2, < 8)
cable_ready (~> 5.0)
nokogiri (~> 1.0)
nokogiri-html5-inference (~> 0.3)
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)
stringio (3.1.0)
stripe (11.1.0)
strscan (3.1.0)
swd (2.0.3)
activesupport (>= 3)
attr_required (>= 0.0.5)
@@ -767,6 +781,10 @@ GEM
timecop (0.9.8)
timeout (0.4.1)
ttfunk (1.7.0)
turbo-rails (2.0.5)
actionpack (>= 6.0.0)
activejob (>= 6.0.0)
railties (>= 6.0.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (2.5.0)
@@ -781,7 +799,7 @@ GEM
validates_lengths_from_database (0.8.0)
activerecord (>= 4)
vcr (6.2.0)
view_component (3.12.0)
view_component (3.12.1)
activesupport (>= 5.2.0, < 8.0)
concurrent-ruby (~> 1.0)
method_source (~> 1.0)
@@ -802,7 +820,7 @@ GEM
activesupport
faraday (~> 2.0)
faraday-follow_redirects
webmock (3.23.0)
webmock (3.23.1)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
@@ -819,11 +837,11 @@ GEM
chronic (>= 0.6.3)
wicked_pdf (2.6.3)
activesupport
wkhtmltopdf-binary (0.12.6.6)
wkhtmltopdf-binary (0.12.6.7)
xml-simple (1.1.8)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.6.13)
zeitwerk (2.6.15)
PLATFORMS
ruby
@@ -843,13 +861,12 @@ DEPENDENCIES
angularjs-file-upload-rails (~> 2.4.1)
angularjs-rails (= 1.8.0)
arel-helpers (~> 2.12)
awesome_nested_set
aws-sdk-s3
bigdecimal (= 3.0.2)
bootsnap
bugsnag
bullet
cable_ready (= 5.0.1)
cable_ready
cancancan (~> 1.15.0)
capybara
catalog!
@@ -928,7 +945,6 @@ DEPENDENCIES
redcarpet
redis
responders
rexml
roadie-rails
roo
rspec-rails (>= 3.5.2)
@@ -951,11 +967,12 @@ DEPENDENCIES
spring-commands-rspec
spring-commands-rubocop
state_machines-activerecord
stimulus_reflex (= 3.5.0.rc3)
stimulus_reflex_testing
stimulus_reflex
stimulus_reflex_testing!
stringex (~> 2.8.5)
stripe
timecop
turbo-rails
valid_email2
validates_lengths_from_database
vcr

View File

@@ -10,7 +10,6 @@
//= require jquery.ui.all
//= require jquery.powertip
//= require jquery.cookie
//= require jquery.jstree/jquery.jstree
//= require jquery.vAlign
//= require angular
//= require angular-resource

View File

@@ -47,7 +47,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout
removeClearedValues()
params = {
'q[name_cont]': $scope.q.query,
'q[supplier_id_eq]': $scope.q.producerFilter,
'q[variants_supplier_id_eq]': $scope.q.producerFilter,
'q[variants_primary_taxon_id_eq]': $scope.q.categoryFilter,
'q[s]': $scope.sorting,
import_date: $scope.q.importDateFilter,
@@ -126,8 +126,11 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout
DisplayProperties.setShowVariants 0, showVariants
$scope.addVariant = (product) ->
# Set new variant category to same as last product variant category to keep compactibility with deleted variant callback to set new variant category
newVariantId = $scope.nextVariantId();
newVariantCategoryId = product.variants[product.variants.length - 1]?.category_id
product.variants.push
id: $scope.nextVariantId()
id: newVariantId
unit_value: null
unit_description: null
on_demand: false
@@ -136,8 +139,9 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout
on_hand: null
price: null
tax_category_id: null
category_id: null
category_id: newVariantCategoryId
DisplayProperties.setShowVariants product.id, true
DirtyProducts.addVariantProperty(product.id, newVariantId, 'category_id', newVariantCategoryId)
$scope.nextVariantId = ->
@@ -217,7 +221,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout
products: productsToSubmit
filters:
'q[name_cont]': $scope.q.query
'q[supplier_id_eq]': $scope.q.producerFilter
'q[variants_supplier_id_eq]': $scope.q.producerFilter
'q[variants_primary_taxon_id_eq]': $scope.q.categoryFilter
'q[s]': $scope.sorting
import_date: $scope.q.importDateFilter
@@ -314,9 +318,6 @@ filterSubmitProducts = (productsToFilter) ->
if product.hasOwnProperty("name")
filteredProduct.name = product.name
hasUpdatableProperty = true
if product.hasOwnProperty("producer_id")
filteredProduct.supplier_id = product.producer_id
hasUpdatableProperty = true
if product.hasOwnProperty("price")
filteredProduct.price = product.price
hasUpdatableProperty = true
@@ -379,6 +380,9 @@ filterSubmitVariant = (variant) ->
if variant.hasOwnProperty("display_as")
filteredVariant.display_as = variant.display_as
hasUpdatableProperty = true
if variant.hasOwnProperty("producer_id")
filteredVariant.supplier_id = variant.producer_id
hasUpdatableProperty = true
{filteredVariant: filteredVariant, hasUpdatableProperty: hasUpdatableProperty}

View File

@@ -1,12 +1,16 @@
# Used like a regular angular filter where an object is passed
# Adds the additional special case that a value of 0 for the filter
# acts as a bypass for that particular attribute
# NOTE the name doesn't reflect what the filter does, it only fiters on the variant.producer_id
angular.module("admin.indexUtils").filter "attrFilter", ($filter) ->
return (objects, filters) ->
Object.keys(filters).reduce (filtered, attr) ->
filter = filters[attr]
return filtered if !filter? || filter == 0
return $filter('filter')(filtered, (object) ->
object[attr] == filter
)
, objects
filter = filters["producer_id"]
return objects if !filter? || filter == 0
return $filter('filter')(objects, (product) ->
for variant in product.variants
return true if variant["producer_id"] == filter
false
, true)

View File

@@ -31,7 +31,7 @@ angular.module("admin.indexUtils").factory 'Columns', ($rootScope, $http, $injec
savePreferences: (action_name) =>
$http
method: "PUT"
url: "/admin/column_preferences/bulk_update"
url: "/admin/column_preferences/bulk_update.json"
data:
action_name: action_name
column_preferences: (preference for column_name, preference of @columns)

View File

@@ -27,7 +27,7 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
"order_bill_address_full_name_reversed",
"order_bill_address_full_name_with_comma",
"order_bill_address_full_name_with_comma_reversed",
"variant_product_supplier_name",
"variant_supplier_name",
"order_email",
"order_number",
"product_name"].join("_or_") + "_cont"
@@ -81,7 +81,7 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
"q[order_shipment_state_not_eq]": "shipped",
"q[order_completed_at_not_null]": "true",
"q[order_distributor_id_eq]": $scope.distributorFilter,
"q[variant_product_supplier_id_eq]": $scope.supplierFilter,
"q[variant_supplier_id_eq]": $scope.supplierFilter,
"q[order_order_cycle_id_eq]": $scope.orderCycleFilter,
"q[order_completed_at_gteq]": if formattedStartDate then formattedStartDate else undefined,
"q[order_completed_at_lt]": if formattedEndDate then formattedEndDate else undefined,
@@ -105,7 +105,7 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
Dereferencer.dereferenceAttr $scope.line_items, "supplier", Enterprises.byID
$scope.loadOrders()
RequestMonitor.load $q.all([$scope.orders.$promise]).then ->
Dereferencer.dereferenceAttr $scope.line_items, "order", Orders.byID
Dereferencer.dereferenceAttr $scope.line_items, "order", Orders.byID
Dereferencer.dereferenceAttr $scope.orders, "distributor", Enterprises.byID
Dereferencer.dereferenceAttr $scope.orders, "order_cycle", OrderCycles.byID
$scope.bulk_order_form.$setPristine()
@@ -133,7 +133,7 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
return $http(
method: 'GET'
url: "/admin/orders/#{order.number}/fire?e=cancel&send_cancellation_email=#{sendEmailCancellation}&restock_items=#{restock_items}")
$scope.deleteLineItem = (lineItem) ->
if lineItem.order.item_count == 1
ofnCancelOrderAlert((confirm, sendEmailCancellation, restock_items) ->
@@ -167,7 +167,7 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
$scope.cancelOrder(order, sendEmailCancellation, restock_items).then(-> $scope.refreshData())
else
Promise.all(LineItems.delete(item) for item in items).then(-> $scope.refreshData())
, "js.admin.deleting_item_will_cancel_order")
, "js.admin.deleting_item_will_cancel_order")
else
ofnDeleteLineItemsAlert(() ->
Promise.all(LineItems.delete(item) for item in lineItemsToDelete).then(-> $scope.refreshData())
@@ -199,7 +199,7 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
$scope.refreshData()
$scope.getLineItemScale = (lineItem) ->
if lineItem.units_product && lineItem.units_variant && (lineItem.units_product.variant_unit == "weight" || lineItem.units_product.variant_unit == "volume")
if lineItem.units_product && lineItem.units_variant && (lineItem.units_product.variant_unit == "weight" || lineItem.units_product.variant_unit == "volume")
lineItem.units_product.variant_unit_scale
else
1
@@ -252,7 +252,7 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
scale = $scope.getScale(unitsProduct, unitsVariant)
if scale
$scope.getFormattedValueWithUnitName(value, unitsProduct, unitsVariant, scale)
else
else
''
$scope.fulfilled = (sumOfUnitValues) ->

View File

@@ -3,6 +3,7 @@ angular.module('admin.orderCycles')
$controller('AdminOrderCycleBasicCtrl', {$scope: $scope, ocInstance: ocInstance})
order_cycle_id = $location.absUrl().match(/\/admin\/order_cycles\/(\d+)/)[1]
$scope.order_cycle_id = order_cycle_id
$scope.order_cycle = OrderCycle.load(order_cycle_id)
$scope.enterprises = Enterprise.index(order_cycle_id: order_cycle_id)
$scope.enterprise_fees = EnterpriseFee.index(order_cycle_id: order_cycle_id)
@@ -18,6 +19,8 @@ angular.module('admin.orderCycles')
$scope.submit = ($event, destination) ->
$event.preventDefault()
$scope.order_cycle?.trigger_action = $($event.target).data('trigger-action');
$scope.order_cycle?.confirm = $($event.target).data('confirm');
StatusMessage.display 'progress', t('js.saving')
OrderCycle.update(destination, $scope.order_cycle_form)
@@ -25,4 +28,4 @@ angular.module('admin.orderCycles')
if $scope.order_cycle_form?.$dirty
t('admin.unsaved_confirm_leave')
NavigationCheck.register(warnAboutUnsavedChanges)
NavigationCheck.register(warnAboutUnsavedChanges)

View File

@@ -1,8 +1,9 @@
angular.module('admin.orderCycles').controller 'AdminOrderCycleIncomingCtrl', ($scope, $rootScope, $controller, $location, Enterprise, OrderCycle, ExchangeProduct, ocInstance) ->
angular.module('admin.orderCycles').controller 'AdminOrderCycleIncomingCtrl', ($scope, $rootScope, $controller, $location, Enterprise, EnterpriseFee, OrderCycle, ExchangeProduct, ocInstance) ->
$controller('AdminOrderCycleExchangesCtrl', {$scope: $scope, ocInstance: ocInstance, $location: $location})
$scope.view = 'incoming'
# NB: weirdly at this next line $scope.order_cycle.id comes out undefined so we use $scope.order_cycle_id instead
$scope.enterprise_fees = EnterpriseFee.index(order_cycle_id: $scope.order_cycle_id, per_item: true)
$scope.exchangeTotalVariants = (exchange) ->
return unless $scope.enterprises? && $scope.enterprises[exchange.enterprise_id]?

View File

@@ -22,6 +22,8 @@ angular.module('admin.orderCycles').controller "AdminSimpleEditOrderCycleCtrl",
$scope.submit = ($event, destination) ->
$event.preventDefault()
$scope.order_cycle?.trigger_action = $($event.target).data('trigger-action');
$scope.order_cycle?.confirm = $($event.target).data('confirm');
StatusMessage.display 'progress', t('js.saving')
OrderCycle.mirrorIncomingToOutgoingProducts()
OrderCycle.update(destination, $scope.order_cycle_form) if OrderCycle.confirmNoDistributors()

View File

@@ -6,6 +6,8 @@ angular.module('admin.orderCycles').factory('EnterpriseFee', ($resource) ->
params:
order_cycle_id: '@order_cycle_id'
coordinator_id: '@coordinator_id'
per_item: '@per_item'
per_order: '@per_order'
})
{

View File

@@ -161,7 +161,11 @@ angular.module('admin.orderCycles').factory 'OrderCycle', ($resource, $window, $
StatusMessage.display('failure', t('js.order_cycles.create_failure'))
update: (destination, form) ->
oc = new OrderCycleResource({order_cycle: this.dataForSubmit()})
oc = new OrderCycleResource({
order_cycle: this.dataForSubmit(),
confirm: this.order_cycle.confirm,
trigger_action: this.order_cycle.trigger_action
})
oc.$update {order_cycle_id: this.order_cycle.id, reloading: (if destination? then 1 else 0)}, (data) =>
form.$setPristine() if form
if destination?
@@ -171,6 +175,8 @@ angular.module('admin.orderCycles').factory 'OrderCycle', ($resource, $window, $
, (response) ->
if response.data.errors?
StatusMessage.display('failure', response.data.errors[0])
else if (response.data.trigger_action)
StatusMessage.display('notice', t('js.order_cycles.unsaved_changes'), response.data.trigger_action)
else
StatusMessage.display('failure', t('js.order_cycles.update_failure'))

View File

@@ -1,21 +0,0 @@
root = exports ? this
root.taxon_tree_menu = (obj, context) ->
base_url = Spree.url(Spree.routes.taxonomy_taxons)
admin_base_url = Spree.url(Spree.routes.admin_taxonomy_taxons)
edit_url = Spree.url(Spree.routes.admin_taxonomy_taxons + '/' + obj.attr("id") + "/edit");
create:
label: "<i class='icon-plus'></i> " + Spree.translations.add,
action: (obj) -> context.create(obj)
rename:
label: "<i class='icon-pencil'></i> " + Spree.translations.rename,
action: (obj) -> context.rename(obj)
remove:
label: "<i class='icon-trash'></i> " + Spree.translations.remove,
action: (obj) -> context.remove(obj)
edit:
separator_before: true,
label: "<i class='icon-edit'></i> " + Spree.translations.edit,
action: (obj) -> window.location = edit_url.toString()

View File

@@ -1,139 +0,0 @@
handle_ajax_error = (XMLHttpRequest, textStatus, errorThrown) ->
$.jstree.rollback(last_rollback)
$("#ajax_error").show().html("<strong>" + server_error + "</strong><br />" + taxonomy_tree_error)
handle_move = (e, data) ->
last_rollback = data.rlbk
position = data.rslt.cp
node = data.rslt.o
new_parent = data.rslt.np
url = new URL(Spree.routes.admin_taxonomy_taxons)
url.pathname = url.pathname + '/' + node.attr("id")
data = {
_method: "put",
"taxon[position]": position,
"taxon[parent_id]": if !isNaN(new_parent.attr("id")) then new_parent.attr("id") else undefined
}
$.ajax
type: "POST",
dataType: "json",
url: url.toString(),
data: data,
error: handle_ajax_error
true
handle_create = (e, data) ->
last_rollback = data.rlbk
node = data.rslt.obj
name = data.rslt.name
position = data.rslt.position
new_parent = data.rslt.parent
data = {
"taxon[name]": name,
"taxon[position]": position
"taxon[parent_id]": if !isNaN(new_parent.attr("id")) then new_parent.attr("id") else undefined
}
$.ajax
type: "POST",
dataType: "json",
url: base_url.toString(),
data: data,
error: handle_ajax_error,
success: (data,result) ->
node.attr('id', data.id)
handle_rename = (e, data) ->
last_rollback = data.rlbk
node = data.rslt.obj
name = data.rslt.new_name
# change the name inside the main input field as well if taxon is the root one
document.getElementById("taxonomy_name").value = name if node.parents("[id]").attr("id") == "taxonomy_tree"
url = new URL(base_url)
url.pathname = url.pathname + '/' + node.attr("id")
$.ajax
type: "POST",
dataType: "json",
url: url.toString(),
data: {_method: "put", "taxon[name]": name },
error: handle_ajax_error
handle_delete = (e, data) ->
last_rollback = data.rlbk
node = data.rslt.obj
delete_url = new URL(base_url)
delete_url.pathname = delete_url.pathname + '/' + node.attr("id")
if confirm(Spree.translations.are_you_sure_delete)
$.ajax
type: "POST",
dataType: "json",
url: delete_url.toString(),
data: {_method: "delete"},
error: handle_ajax_error
else
$.jstree.rollback(last_rollback)
last_rollback = null
root = exports ? this
root.setup_taxonomy_tree = (taxonomy_id) ->
if taxonomy_id != undefined
# this is defined within admin/taxonomies/edit
root.base_url = Spree.url(Spree.routes.taxonomy_taxons)
$.ajax
url: base_url.pathname.replace("/taxons", "/jstree"),
success: (taxonomy) ->
last_rollback = null
conf =
json_data:
data: taxonomy,
ajax:
url: (e) ->
base_url.pathname + '/' + e.attr('id') + '/jstree'
themes:
theme: "apple",
url: "/assets/jquery.jstree/themes/apple/style.css"
strings:
new_node: new_taxon,
loading: Spree.translations.loading + "..."
crrm:
move:
check_move: (m) ->
position = m.cp
node = m.o
new_parent = m.np
# no parent or cant drag and drop
if !new_parent || node.attr("rel") == "root"
return false
# can't drop before root
if new_parent.attr("id") == "taxonomy_tree" && position == 0
return false
true
contextmenu:
items: (obj) ->
taxon_tree_menu(obj, this)
plugins: ["themes", "json_data", "dnd", "crrm", "contextmenu"]
$("#taxonomy_tree").jstree(conf)
.bind("move_node.jstree", handle_move)
.bind("remove.jstree", handle_delete)
.bind("create.jstree", handle_create)
.bind("rename.jstree", handle_rename)
.bind "loaded.jstree", ->
$(this).jstree("core").toggle_node($('.jstree-icon').first())
$("#taxonomy_tree a").on "dblclick", (e) ->
$("#taxonomy_tree").jstree("rename", this)
# surpress form submit on enter/return
$(document).keypress (e) ->
if e.keyCode == 13
e.preventDefault()

View File

@@ -10,7 +10,9 @@ angular.module("admin.utils").factory "StatusMessage", ->
statusMessage:
text: ""
style: {}
style: {},
type: null,
actionName: null
invalidMessage: ""
@@ -23,11 +25,15 @@ angular.module("admin.utils").factory "StatusMessage", ->
active: ->
@statusMessage.text != ''
display: (type, text) ->
display: (type, text, actionName = null) ->
@statusMessage.text = text
@statusMessage.type = type
@statusMessage.actionName = actionName
@statusMessage.style = @types[type].style
null
clear: ->
@statusMessage.text = ''
@statusMessage.style = {}
@statusMessage.type = null
@statusMessage.actionName = null

View File

@@ -2,10 +2,10 @@ angular.module("admin.variantOverrides").directive "trackInheritance", (VariantO
require: "ngModel"
link: (scope, element, attrs, ngModel) ->
# This is a bit hacky, but it allows us to load the inherit property on the VO, but then not submit it
scope.inherit = angular.equals scope.variantOverrides[scope.hub_id][scope.variant.id], VariantOverrides.newFor scope.hub_id, scope.variant.id
scope.inherit = angular.equals scope.variantOverrides[scope.hub_id][scope.variant.id], VariantOverrides.newFor scope.hub_id, scope.variant
ngModel.$parsers.push (viewValue) ->
if ngModel.$dirty && viewValue
DirtyVariantOverrides.inherit scope.hub_id, scope.variant.id, scope.variantOverrides[scope.hub_id][scope.variant.id].id
DirtyVariantOverrides.inherit scope.hub_id, scope.variant, scope.variantOverrides[scope.hub_id][scope.variant.id].id
scope.displayDirty()
viewValue

View File

@@ -2,4 +2,8 @@ angular.module("admin.variantOverrides").filter "hubPermissions", ($filter) ->
return (products, hubPermissions, hub_id) ->
return [] if !hub_id
return [] if !hubPermissions[hub_id]
return $filter('filter')(products, ((product) -> hubPermissions[hub_id].indexOf(product.producer_id) > -1), true)
return $filter('filter')(products, ((product) ->
for variant in product.variants
return hubPermissions[hub_id].indexOf(variant.producer_id) > -1
), true)

View File

@@ -12,11 +12,11 @@ angular.module("admin.variantOverrides").factory "DirtyVariantOverrides", ($http
@add(hub_id, variant_id, vo_id)
@dirtyVariantOverrides[hub_id][variant_id][attr] = value
inherit: (hub_id, variant_id, vo_id) ->
@add(hub_id, variant_id, vo_id)
blankVo = angular.copy(VariantOverrides.inherit(hub_id, variant_id))
inherit: (hub_id, variant, vo_id) ->
@add(hub_id, variant.id, vo_id)
blankVo = angular.copy(VariantOverrides.inherit(hub_id, variant))
delete blankVo[attr] for attr, value of blankVo when attr not in @requiredAttrs()
@dirtyVariantOverrides[hub_id][variant_id] = blankVo
@dirtyVariantOverrides[hub_id][variant.id] = blankVo
count: ->
count = 0

View File

@@ -13,17 +13,18 @@ angular.module("admin.variantOverrides").factory "VariantOverrides", (variantOve
@variantOverrides[hub.id] ||= {}
for product in products
for variant in product.variants
@inherit(hub.id, variant.id) unless @variantOverrides[hub.id][variant.id]
@inherit(hub.id, variant) unless @variantOverrides[hub.id][variant.id]
inherit: (hub_id, variant_id) ->
inherit: (hub_id, variant) ->
# This method is called from the trackInheritance directive, to reinstate inheritance
@variantOverrides[hub_id][variant_id] ||= {}
angular.extend @variantOverrides[hub_id][variant_id], @newFor hub_id, variant_id
@variantOverrides[hub_id][variant.id] ||= {}
angular.extend @variantOverrides[hub_id][variant.id], @newFor(hub_id, variant)
newFor: (hub_id, variant_id) ->
newFor: (hub_id, variant) ->
# These properties need to match those checked in VariantOverrideSet.deletable?
hub_id: hub_id
variant_id: variant_id
variant_id: variant.id
producer_id: variant.producer_id
sku: null
price: null
count_on_hand: null

View File

@@ -4,15 +4,18 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $
$scope.query = ""
$scope.taxonSelectors = FilterSelectorsService.createSelectors()
$scope.propertySelectors = FilterSelectorsService.createSelectors()
$scope.producerPropertySelectors = FilterSelectorsService.createSelectors()
$scope.filtersActive = true
$scope.page = 1
$scope.per_page = 10
$scope.order_cycle = OrderCycle.order_cycle
$scope.supplied_taxons = null
$scope.supplied_properties = null
$scope.supplied_producer_properties = null
$scope.showFilterSidebar = false
$scope.activeTaxons = []
$scope.activeProperties = []
$scope.activeProducerProperties = []
# Update filters after initial load of shop tab
$timeout =>
@@ -45,6 +48,12 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $
$scope.supplied_properties[property.id] = Properties.properties_by_id[property.id]
)
OrderCycleResource.producerProperties params, (data)=>
$scope.supplied_producer_properties = {}
data.map( (property) ->
$scope.supplied_producer_properties[property.id] = Properties.properties_by_id[property.id]
)
$scope.loadMore = ->
if ($scope.page * $scope.per_page) <= Products.products.length
$scope.loadMoreProducts()
@@ -52,6 +61,7 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $
$scope.$watch 'query', (newValue, oldValue) -> $scope.loadProducts() if newValue != oldValue
$scope.$watchCollection 'activeTaxons', (newValue, oldValue) -> $scope.loadProducts() if newValue != oldValue
$scope.$watchCollection 'activeProperties', (newValue, oldValue) -> $scope.loadProducts() if newValue != oldValue
$scope.$watchCollection 'activeProducerProperties', (newValue, oldValue) -> $scope.loadProducts() if newValue != oldValue
$scope.loadProducts = ->
$scope.page = 1
@@ -66,8 +76,9 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $
id: $scope.order_cycle.order_cycle_id,
page: page || $scope.page,
per_page: $scope.per_page,
'q[name_or_meta_keywords_or_variants_display_as_or_variants_display_name_or_supplier_name_cont]': $scope.query,
'q[name_or_meta_keywords_or_variants_display_as_or_variants_display_name_or_variants_supplier_name_cont]': $scope.query,
'q[with_properties][]': $scope.activeProperties,
'q[with_variants_supplier_properties][]': $scope.activeProducerProperties,
'q[variants_primary_taxon_id_in_any][]': $scope.activeTaxons
}
@@ -86,6 +97,12 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $
Properties.properties_by_id[property_id].name
).join($scope.filtersJoinWord()) if $scope.activeProperties?
$scope.appliedProducerPropertiesList = ->
$scope.activeProducerProperties.map( (property_id) ->
Properties.properties_by_id[property_id].name
).join($scope.filtersJoinWord()) if $scope.activeProducerProperties?
$scope.filtersJoinWord = ->
$sce.trustAsHtml(" <span class='join-word'>#{t('products_or')}</span> ")
@@ -99,6 +116,7 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $
$scope.clearFilters = ->
$scope.taxonSelectors.clearAll()
$scope.propertySelectors.clearAll()
$scope.producerPropertySelectors.clearAll()
$scope.refreshStaleData = ->
# If the products template has already been loaded but the controller is being initialized
@@ -109,7 +127,7 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $
$scope.loadProducts()
$scope.filtersCount = () ->
$scope.taxonSelectors.totalActive() + $scope.propertySelectors.totalActive()
$scope.taxonSelectors.totalActive() + $scope.propertySelectors.totalActive() + $scope.producerPropertySelectors.totalActive()
$scope.toggleFilterSidebar = ->
$scope.showFilterSidebar = !$scope.showFilterSidebar

View File

@@ -42,8 +42,17 @@ angular.module('Darkswarm').controller "RegistrationCtrl", ($scope, Registration
$scope.toggleAddressConfirmed = ->
$scope.addressConfirmed = !$scope.addressConfirmed
if $scope.addressConfirmed
$scope.setLatLongIfUsingOpenStreetMap()
$scope.enterprise.address.latitude = $scope.latLong.latitude
$scope.enterprise.address.longitude = $scope.latLong.longitude
else
$scope.enterprise.address.latitude = null
$scope.enterprise.address.longitude = null
# When OpenStreetMaps is enabled the latitude and longitude are calculated via a Stimulus
# controller, so they need to be read from data properties to be accessible here.
$scope.setLatLongIfUsingOpenStreetMap = ->
openStreetMap = document.getElementById("open-street-map")
if !$scope.latLong && openStreetMap && openStreetMap.dataset.latitude && openStreetMap.dataset.longitude
$scope.latLong = { latitude: openStreetMap.dataset.latitude, longitude: openStreetMap.dataset.longitude }

View File

@@ -18,4 +18,11 @@ angular.module('Darkswarm').factory 'OrderCycleResource', ($resource) ->
url: '/api/v0/order_cycles/:id/properties.json'
params:
id: '@id'
'producerProperties':
method: 'GET'
isArray: true
url: '/api/v0/order_cycles/:id/producer_properties.json'
params:
id: '@id'
})

View File

@@ -39,7 +39,7 @@ angular.module('Darkswarm').factory 'Products', (OrderCycleResource, OrderCycle,
dereference: ->
for product in @fetched_products
product.supplier = Shopfront.producers_by_id[product.supplier.id]
product.supplier = Shopfront.producers_by_id[product.variants[0].supplier.id]
Dereferencer.dereference product.taxons, Taxons.taxons_by_id
product.properties = angular.copy(product.properties_with_values)

View File

@@ -5,8 +5,9 @@
%div.menu{ 'ng-show' => "expanded" }
.menu_items
.menu_item{ "ng-repeat": "column in columns", "ng-click": "toggle(column);" }
%input.redesigned-input{ type: "checkbox", "ng-checked": "column.visible" }
{{ column.name }}
%input{ type: "checkbox", "ng-checked": "column.visible" }
%span
{{ column.name }}
%hr
%div.menu_item.text-center
%input.fullwidth.orange{ type: "button", "ng-value": "saved() ? 'Saved': 'Saving'", "ng-show": "saved() || saving", "ng-disabled": "saved()" }

View File

@@ -1,7 +1,7 @@
#save-bar.animate-show{ "ng-show": 'dirty || persist || StatusMessage.active()' }
.container
.seven.columns.alpha
%h5#status-message{ "ng-show": "StatusMessage.invalidMessage == ''", "ng-style": 'StatusMessage.statusMessage.style' }
%h5#status-message{ "ng-show": "StatusMessage.invalidMessage == ''", "ng-style": 'StatusMessage.statusMessage.style', data: { 'order-cycle-form-target': 'statusMessage' }, "ng-attr-data-type": "{{StatusMessage.statusMessage.type}}", "ng-attr-data-action-name": "{{StatusMessage.statusMessage.actionName}}" }
{{ StatusMessage.statusMessage.text || "&nbsp;" }}
%h5#status-message{ style: 'color: #C85136', "ng-show": "StatusMessage.invalidMessage !== ''" }
{{ StatusMessage.invalidMessage || "&nbsp;" }}

View File

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

View File

@@ -24,6 +24,19 @@
max-width: 100%;
height: auto;
}
.flex-column {
display: flex;
flex-direction: column;
}
.gap-1 {
gap: 1rem;
}
.gap-2 {
gap: 2rem;
}
}
/* prevent arrow on selected admin menu item appearing above modal */

View File

@@ -9,5 +9,5 @@
%div.menu_items
- @options.each do |option|
%label.menu_item{ "data-multiple-checked-select-target": "option", "data-value": option[1], "data-label": option[0] }
%input.redesigned-input{ type: "checkbox", checked: @selected.include?(option[1]), name: "#{@name}[]", value: option[1] }
= option[0]
%input{ type: "checkbox", checked: @selected.include?(option[1]), name: "#{@name}[]", value: option[1] }
%span= option[0]

View File

@@ -35,7 +35,7 @@ module Admin
order.with_lock do
if order.contents.update_item(@line_item, line_item_params)
# No Content, does not trigger ng resource auto-update
render body: nil, status: :no_content
head :no_content
else
render json: { errors: @line_item.errors }, status: :precondition_failed
end
@@ -49,7 +49,7 @@ module Admin
authorize! :update, order
order.contents.remove(@line_item.variant)
render body: nil, status: :no_content # No Content, does not trigger ng resource auto-update
head :no_content # No Content, does not trigger ng resource auto-update
end
private

View File

@@ -4,17 +4,25 @@ module Admin
class ColumnPreferencesController < Admin::ResourceController
before_action :load_collection, only: [:bulk_update]
respond_to :json
def bulk_update
@cp_set.collection.each { |cp| authorize! :bulk_update, cp }
if @cp_set.save
render json: @cp_set.collection, each_serializer: Api::Admin::ColumnPreferenceSerializer
elsif @cp_set.errors.present?
render json: { errors: @cp_set.errors }, status: :bad_request
else
render body: nil, status: :internal_server_error
respond_to do |format|
if @cp_set.save
format.json {
render json: @cp_set.collection, each_serializer: Api::Admin::ColumnPreferenceSerializer
}
format.turbo_stream {
flash.now[:success] = t('.success')
render :bulk_update, locals: { action: permitted_params[:action_name] }
}
else
format.json { render json: { errors: @cp_set.errors }, status: :bad_request }
format.turbo_stream {
flash.now[:error] = @cp_set.errors.full_messages.to_sentence
render :bulk_update, locals: { action: permitted_params[:action_name] }
}
end
end
end
@@ -28,11 +36,26 @@ module Admin
end
def load_collection
collection_hash = Hash[permitted_params[:column_preferences].
each_with_index.map { |cp, i| [i, cp] }]
collection_hash.select!{ |_i, cp| cp[:action_name] == permitted_params[:action_name] }
@cp_set = Sets::ColumnPreferenceSet.new(@column_preferences,
collection_attributes: collection_hash)
collection_attributes = nil
respond_to do |format|
format.json do
collection_attributes = Hash[permitted_params[:column_preferences].
each_with_index.map { |cp, i| [i, cp] }]
collection_attributes.select!{ |_i, cp|
cp[:action_name] == permitted_params[:action_name]
}
end
format.all do
# Inject action name and user ID for each column_preference
collection_attributes = permitted_params[:column_preferences].to_h.each_value { |cp|
cp[:action_name] = permitted_params[:action_name]
cp[:user_id] = spree_current_user.id
}
end
end
@cp_set = Sets::ColumnPreferenceSet.new(@column_preferences, collection_attributes:)
end
def collection

View File

@@ -0,0 +1,22 @@
# frozen_string_literal: true
module Admin
class ConnectedAppSettingsController < Spree::Admin::BaseController
def update
Spree::Config.set(connected_apps_enabled:)
respond_to do |format|
format.html {
flash[:success] = t(:successfully_updated, resource: t('.resource'))
redirect_to main_app.edit_admin_connected_app_settings_path
}
end
end
private
def connected_apps_enabled
params.require(:preferences).require(:connected_apps_enabled).compact_blank.join(",")
end
end
end

View File

@@ -0,0 +1,41 @@
# frozen_string_literal: true
module Admin
class ConnectedAppsController < ApplicationController
def create
authorize! :admin, enterprise
attributes = {}
attributes[:type] = connected_app_params[:type] if connected_app_params[:type]
app = ConnectedApp.create!(enterprise_id: enterprise.id, **attributes)
app.connect(api_key: spree_current_user.spree_api_key,
channel: SessionChannel.for_request(request))
render_panel
end
def destroy
authorize! :admin, enterprise
app = enterprise.connected_apps.find(params.require(:id))
app.destroy
render_panel
end
private
def enterprise
@enterprise ||= Enterprise.find(params.require(:enterprise_id))
end
def render_panel
redirect_to "#{edit_admin_enterprise_path(enterprise)}#/connected_apps_panel"
end
def connected_app_params
params.permit(:type)
end
end
end

View File

@@ -20,7 +20,7 @@ module Admin
catalog_url = params.require(:catalog_url)
json_catalog = DfcRequest.new(spree_current_user).get(catalog_url)
json_catalog = fetch_catalog(catalog_url)
graph = DfcIo.import(json_catalog)
# * First step: import all products for given enterprise.
@@ -34,6 +34,10 @@ module Admin
private
def fetch_catalog(url)
DfcRequest.new(spree_current_user).call(url)
end
# Most of this code is the same as in the DfcProvider::SuppliedProductsController.
def import_product(subject, enterprise)
return unless subject.is_a? DataFoodConsortium::Connector::SuppliedProduct

View File

@@ -65,7 +65,9 @@ module Admin
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')
fees = EnterpriseFee.for_enterprises(enterprises).order('enterprise_id', 'fee_type', 'name')
filter_fees(fees)
else
collection = EnterpriseFee.managed_by(spree_current_user).order('enterprise_id',
'fee_type', 'name')
@@ -74,6 +76,12 @@ module Admin
end
end
def filter_fees(fees)
fees = fees.per_item if params[:per_item]
fees = fees.per_order if params[:per_order]
fees
end
def collection_actions
[:index, :for_order_cycle, :bulk_update]
end

View File

@@ -189,10 +189,7 @@ module Admin
.visible_enterprises
if enterprises.present?
enterprises.includes(
supplied_products:
[:supplier, :variants, :image]
)
enterprises.includes(supplied_products: [:variants, :image])
end
when :index
if spree_current_user.admin?

View File

@@ -11,6 +11,7 @@ module Admin
before_action :remove_protected_attrs, only: [:update]
before_action :require_order_cycle_set_params, only: [:bulk_update]
around_action :protect_invalid_destroy, only: :destroy
before_action :verify_datetime_change, only: :update
def index
respond_to do |format|
@@ -235,7 +236,7 @@ module Admin
else
begin
yield
rescue ActiveRecord::InvalidForeignKey
rescue ActiveRecord::InvalidForeignKey, ActiveRecord::DeleteRestrictionError
redirect_to main_app.admin_order_cycles_url
flash[:error] = I18n.t('admin.order_cycles.destroy_errors.orders_present')
end
@@ -294,5 +295,22 @@ module Admin
collection_attributes: [:id] + PermittedAttributes::OrderCycle.basic_attributes
).to_h.with_indifferent_access
end
# Check that order cycle datetime values changed if it has existing orders
def verify_datetime_change
return unless params[:order_cycle][:confirm]
return unless @order_cycle.orders.exists?
return if same_dates(@order_cycle.orders_open_at, order_cycle_params[:orders_open_at]) &&
same_dates(@order_cycle.orders_close_at, order_cycle_params[:orders_close_at])
render json: { trigger_action: params[:order_cycle][:trigger_action] },
status: :unprocessable_entity
end
def same_dates(date, string)
false unless date && string
DateTime.parse(string).to_fs(:short) == date.to_fs(:short)
end
end
end

View File

@@ -4,6 +4,8 @@ require 'roo'
module Admin
class ProductImportController < Spree::Admin::BaseController
TMPDIR_PREFIX = "product_import-"
before_action :validate_upload_presence, except: %i[index guide validate_data]
def index
@@ -101,8 +103,7 @@ module Admin
def save_uploaded_file(upload)
extension = File.extname(upload.original_filename)
directory = Dir.mktmpdir 'product_import'
File.open(File.join(directory, "import#{extension}"), 'wb') do |f|
File.open(File.join(mktmpdir, "import#{extension}"), 'wb') do |f|
data = UploadSanitizer.new(upload.read).call
f.write(data)
f.path
@@ -126,6 +127,14 @@ module Admin
ProductImport::ProductImporter
end
def mktmpdir
Dir::Tmpname.create(TMPDIR_PREFIX, Rails.root.join('tmp') ) { |tmpname| Dir.mkdir(tmpname) }
end
def tmpdir_base
Rails.root.join('tmp', TMPDIR_PREFIX).to_s
end
def file_path
@file_path ||= validate_file_path(sanitize_file_path(params[:filepath]))
end
@@ -134,8 +143,9 @@ module Admin
FilePathSanitizer.new.sanitize(file_path, on_error: method(:raise_invalid_file_path))
end
# Ensure file is under the safe tmp directory
def validate_file_path(file_path)
return file_path if file_path.to_s.match?(TEMP_FILE_PATH_REGEX)
return file_path if file_path.to_s.match?(%r{^#{tmpdir_base}[A-Za-z0-9-]*/import\.csv$})
raise_invalid_file_path
end
@@ -145,6 +155,5 @@ module Admin
notice: I18n.t(:product_import_no_data_in_spreadsheet_notice)
raise 'Invalid File Path'
end
TEMP_FILE_PATH_REGEX = %r{^/tmp/product_import[A-Za-z0-9-]*/import\.csv$}
end
end

View File

@@ -1,13 +1,18 @@
# frozen_string_literal: true
# rubocop:disable Metrics/ClassLength
module Admin
class ProductsV3Controller < Spree::Admin::BaseController
helper ProductsHelper
before_action :init_filters_params
before_action :init_pagination_params
def index
fetch_products
render "index", locals: { producers:, categories:, tax_category_options:, flash: }
session[:products_return_to_url] = request.url
end
def bulk_update
@@ -29,6 +34,67 @@ module Admin
end
end
def destroy
@record = ProductScopeQuery.new(
spree_current_user,
{ id: params[:id] }
).find_product
@record.destroyed_by = spree_current_user
status = :ok
if @record.destroy
flash.now[:success] = t('.delete_product.success')
else
flash.now[:error] = t('.delete_product.error')
status = :internal_server_error
end
respond_with do |format|
format.turbo_stream { render :destroy_product_variant, status: }
end
end
def destroy_variant
@record = Spree::Variant.active.find(params[:id])
authorize! :delete, @record
status = :ok
if VariantDeleter.new.delete(@record)
flash.now[:success] = t('.delete_variant.success')
else
flash.now[:error] = t('.delete_variant.error')
status = :internal_server_error
end
respond_with do |format|
format.turbo_stream { render :destroy_product_variant, status: }
end
end
def clone
@product = Spree::Product.find(params[:id])
status = :ok
begin
@cloned_product = @product.duplicate
flash.now[:success] = t('.success')
@product_index = "-#{@cloned_product.id}"
@producer_options = producers
@category_options = categories
@tax_category_options = tax_category_options
rescue ActiveRecord::ActiveRecordError => _e
flash.now[:error] = t('.error')
status = :unprocessable_entity
@product_index = "-1" # Create a unique enough index
end
respond_with do |format|
format.turbo_stream { render :clone, status: }
end
end
def index_url(params)
"/admin/products?#{params.to_query}" # todo: fix routing so this can be automaticly generated
end
@@ -48,6 +114,7 @@ module Admin
# prority is given to element dataset (if present) over url params
@page = params[:page].presence || 1
@per_page = params[:per_page].presence || 15
@q = params.permit(q: {})[:q] || { s: 'name asc' }
end
def producers
@@ -84,11 +151,13 @@ module Admin
def ransack_query
query = {}
query.merge!(supplier_id_in: @producer_id) if @producer_id.present?
query.merge!(variants_supplier_id_in: @producer_id) if @producer_id.present?
if @search_term.present?
query.merge!(Spree::Variant::SEARCH_KEY => @search_term)
end
query.merge!(variants_primary_taxon_id_in: @category_id) if @category_id.present?
query.merge!(@q) if @q
query
end
@@ -96,13 +165,13 @@ module Admin
def product_query_includes
[
:image,
:supplier,
{ variants: [
:default_price,
:primary_taxon,
:product,
:stock_items,
:tax_category,
:supplier,
] },
]
end
@@ -142,3 +211,4 @@ module Admin
end
end
end
# rubocop:enable Metrics/ClassLength

View File

@@ -61,6 +61,9 @@ module Admin
def render_in_background
cable_ready[ScopedChannel.for_id(params[:uuid])]
.inner_html(
selector: "#report-go",
html: helpers.button(t(:go), "report__submit-btn", "submit", disabled: true)
).inner_html(
selector: "#report-table",
html: render_to_string(partial: "admin/reports/loading")
).scroll_into_view(

View File

@@ -146,7 +146,7 @@ module Admin
return nil if parent_data.blank?
@parent ||= parent_data[:model_class].
public_send("find_by", parent_data[:find_by] => params["#{model_name}_id"])
find_by(parent_data[:find_by] => params["#{model_name}_id"])
instance_variable_set("@#{model_name}", @parent)
end

View File

@@ -37,7 +37,7 @@ module Admin
def obfuscated_secret_key
key = Stripe.api_key
key.first(8) + "****" + key.last(4)
"#{key.first(8)}****#{key.last(4)}"
end
def settings_params

View File

@@ -5,7 +5,7 @@ module Admin
respond_to :json
respond_override destroy: { json: {
success: lambda { render body: nil, status: :no_content }
success: lambda { head :no_content }
} }
def map_by_tag

View File

@@ -88,7 +88,7 @@ module Admin
end
def modified_variant_overrides_ids
variant_overrides_params.map { |vo| vo[:id] }
variant_overrides_params.pluck(:id)
end
def collection_actions

View File

@@ -9,7 +9,7 @@ module Api
authorize! :destroy, enterprise_fee
if enterprise_fee.destroy
render plain: I18n.t(:successfully_removed), status: :no_content
head :no_content
else
render plain: enterprise_fee.errors.full_messages.first, status: :forbidden
end

View File

@@ -7,9 +7,11 @@ module Api
include ApiActionCaching
skip_authorization_check
skip_before_action :authenticate_user, :ensure_api_key, only: [:taxons, :properties]
skip_before_action :authenticate_user, :ensure_api_key, only: [
:taxons, :properties, :producer_properties
]
caches_action :taxons, :properties,
caches_action :taxons, :properties, :producer_properties,
expires_in: CacheService::FILTERS_EXPIRY,
cache_path: proc { |controller| controller.request.url }
@@ -41,7 +43,13 @@ module Api
def properties
render plain: ActiveModel::ArraySerializer.new(
product_properties | producer_properties, each_serializer: Api::PropertySerializer
product_properties, each_serializer: Api::PropertySerializer
).to_json
end
def producer_properties
render plain: ActiveModel::ArraySerializer.new(
load_producer_properties, each_serializer: Api::PropertySerializer
).to_json
end
@@ -58,7 +66,7 @@ module Api
select('DISTINCT spree_properties.*')
end
def producer_properties
def load_producer_properties
producers = Enterprise.
joins(:supplied_products).
where(spree_products: { id: distributed_products })
@@ -86,8 +94,9 @@ module Api
end
def distributed_products
OrderCycles::DistributedProductsService.new(distributor, order_cycle,
customer).products_relation
OrderCycles::DistributedProductsService.new(
distributor, order_cycle, customer
).products_relation.pluck(:id)
end
end
end

View File

@@ -42,8 +42,9 @@ module Api
authorize! :delete, Spree::Product
@product = product_finder.find_product
authorize! :delete, @product
@product.destroyed_by = current_api_user
@product.destroy
render json: @product, serializer: Api::Admin::ProductSerializer, status: :no_content
head :no_content
end
def bulk_products
@@ -53,7 +54,7 @@ module Api
end
def overridable
@products = product_finder.paged_products_for_producers
@products = product_finder.products_for_producers
render_paged_products @products, ::Api::Admin::ProductSimpleSerializer
end

View File

@@ -1,16 +0,0 @@
# frozen_string_literal: true
module Api
module V0
class TaxonomiesController < Api::V0::BaseController
respond_to :json
skip_authorization_check only: :jstree
def jstree
@taxonomy = Spree::Taxonomy.find(params[:id])
render json: @taxonomy.root, serializer: Api::TaxonJstreeSerializer
end
end
end
end

View File

@@ -5,12 +5,10 @@ module Api
class TaxonsController < Api::V0::BaseController
respond_to :json
skip_authorization_check only: [:index, :show, :jstree]
skip_authorization_check only: [:index, :show]
def index
@taxons = if taxonomy
taxonomy.root.children
elsif params[:ids]
@taxons = if params[:ids]
Spree::Taxon.where(id: raw_params[:ids].split(","))
else
Spree::Taxon.ransack(raw_params[:q]).result
@@ -18,23 +16,9 @@ module Api
render json: @taxons, each_serializer: Api::TaxonSerializer
end
def jstree
@taxon = taxon
render json: @taxon.children, each_serializer: Api::TaxonJstreeSerializer
end
def create
authorize! :create, Spree::Taxon
@taxon = Spree::Taxon.new(taxon_params)
@taxon.taxonomy_id = params[:taxonomy_id]
taxonomy = Spree::Taxonomy.find_by(id: params[:taxonomy_id])
if taxonomy.nil?
@taxon.errors.add(:taxonomy_id, I18n.t(:invalid_taxonomy_id, scope: 'spree.api'))
invalid_resource!(@taxon) && return
end
@taxon.parent_id = taxonomy.root.id unless params.dig(:taxon, :parent_id)
if @taxon.save
render json: @taxon, serializer: Api::TaxonSerializer, status: :created
@@ -55,25 +39,19 @@ module Api
def destroy
authorize! :delete, Spree::Taxon
taxon.destroy
render json: taxon, serializer: Api::TaxonSerializer, status: :no_content
head :no_content
end
private
def taxonomy
return if params[:taxonomy_id].blank?
@taxonomy ||= Spree::Taxonomy.find(params[:taxonomy_id])
end
def taxon
@taxon ||= taxonomy.taxons.find(params[:id])
@taxon = Spree::Taxon.find(params[:id])
end
def taxon_params
return if params[:taxon].blank?
params.require(:taxon).permit([:name, :parent_id, :position])
params.require(:taxon).permit([:name, :position])
end
end
end

View File

@@ -44,7 +44,7 @@ module Api
authorize! :delete, @variant
VariantDeleter.new.delete(@variant)
render json: @variant, serializer: Api::VariantSerializer, status: :no_content
head :no_content
end
private

View File

@@ -28,7 +28,6 @@ class ApplicationController < ActionController::Base
helper 'injection'
helper 'markdown'
helper 'footer_links'
helper 'discourse'
helper 'checkout'
helper 'link'
helper 'terms_and_conditions'
@@ -61,7 +60,7 @@ class ApplicationController < ActionController::Base
rescue StandardError
'unknown'
end}")
super(options, response_status)
super
end
def set_checkout_redirect

View File

@@ -1,52 +0,0 @@
# frozen_string_literal: true
require 'discourse/single_sign_on'
class DiscourseSsoController < ApplicationController
include SharedHelper
include DiscourseHelper
before_action :require_config
def login
if require_activation?
redirect_to discourse_url
else
redirect_to discourse_login_url
end
end
def sso
if spree_current_user
begin
redirect_to sso_url
rescue TypeError
render plain: "Bad SingleSignOn request.", status: :bad_request
end
else
redirect_to login_path
end
end
private
def sso_url
secret = discourse_sso_secret!
sso = Discourse::SingleSignOn.parse(request.query_string, secret)
sso.email = spree_current_user.email
sso.username = spree_current_user.login
sso.external_id = spree_current_user.id
sso.sso_secret = secret
sso.admin = admin_user?
sso.require_activation = require_activation?
sso.to_url(discourse_sso_url)
end
def require_config
raise ActionController::RoutingError, 'Not Found' unless discourse_configured?
end
def require_activation?
!admin_user? && !spree_current_user.confirmed?
end
end

View File

@@ -19,15 +19,18 @@ module Spree
before_action :authorize_admin
before_action :set_locale
before_action :warn_invalid_order_cycles, if: :html_request?
before_action :warn_invalid_order_cycles, if: :page_load_request?
# Warn the user when they have an active order cycle with hubs that are not ready
# for checkout (ie. does not have valid shipping and payment methods).
def warn_invalid_order_cycles
return if flash[:notice].present?
return if flash[:notice].present? || session[:displayed_order_cycle_warning]
warning = OrderCycles::WarningService.new(spree_current_user).call
flash[:notice] = warning if warning.present?
return if warning.blank?
flash.now[:notice] = warning
session[:displayed_order_cycle_warning] = true
end
protected
@@ -81,6 +84,12 @@ module Spree
private
def page_load_request?
return false if request.format.include?('turbo')
html_request?
end
def html_request?
request.format.html?
end

View File

@@ -3,6 +3,8 @@
module Spree
module Admin
class ImagesController < ::Admin::ResourceController
helper ::Admin::ProductsHelper
# This will make resource controller redirect correctly after deleting product images.
# This can be removed after upgrading to Spree 2.1.
# See here https://github.com/spree/spree/commit/334a011d2b8e16355e4ae77ae07cd93f7cbc8fd1
@@ -17,7 +19,10 @@ module Spree
def new
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
render layout: !request.xhr?
respond_with do |format|
format.turbo_stream { render :edit }
format.all { render layout: !request.xhr? }
end
end
def edit
@@ -32,13 +37,14 @@ module Spree
if @object.save
flash[:success] = flash_message_for(@object, :successfully_created)
redirect_to location_after_save
respond_to do |format|
format.html { redirect_to location_after_save }
format.turbo_stream { render :update }
end
else
respond_with(@object)
respond_with_error(@object.errors)
end
rescue ActiveStorage::IntegrityError
@object.errors.add :attachment, :integrity_error
respond_with(@object)
end
def update
@@ -47,13 +53,14 @@ module Spree
if @object.update(permitted_resource_params)
flash[:success] = flash_message_for(@object, :successfully_updated)
redirect_to location_after_save
respond_to do |format|
format.html { redirect_to location_after_save }
format.turbo_stream
end
else
respond_with(@object)
respond_with_error(@object.errors)
end
rescue ActiveStorage::IntegrityError
@object.errors.add :attachment, :integrity_error
respond_with(@object)
end
def destroy
@@ -103,6 +110,14 @@ module Spree
:attachment, :viewable_id, :alt
)
end
def respond_with_error(errors)
@errors = errors.map(&:full_message)
respond_to do |format|
format.html { respond_with(@object) }
format.turbo_stream { render :edit }
end
end
end
end
end

View File

@@ -15,6 +15,8 @@ module Spree
invoice_pdf = filepath(invoice_id)
send_file(invoice_pdf, type: 'application/pdf', disposition: :inline)
rescue ActionController::MissingFile
render "errors/not_found", status: :not_found, formats: :html
end
def generate

View File

@@ -8,6 +8,7 @@ module Spree
before_action :setup_property, only: [:index]
def index
@supplier = @product.variants.first.supplier
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
end

View File

@@ -10,8 +10,10 @@ module Spree
include OpenFoodNetwork::SpreeApiKeyLoader
include OrderCyclesHelper
include EnterprisesHelper
helper ::Admin::ProductsHelper
before_action :load_data
before_action :load_producers, only: [:index, :new]
before_action :load_form_data, only: [:index, :new, :create, :edit, :update]
before_action :load_spree_api_key, only: [:index, :variant_overrides]
before_action :strip_new_properties, only: [:create, :update]
@@ -41,6 +43,7 @@ module Spree
flash[:success] = flash_message_for(@object, :successfully_created)
redirect_after_save
else
load_producers
# Re-fill the form with deleted params on product
@on_hand = request.params[:product][:on_hand]
@on_demand = request.params[:product][:on_demand]
@@ -52,14 +55,9 @@ module Spree
def update
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
original_supplier_id = @product.supplier_id
delete_stock_params_and_set_after do
params[:product] ||= {} if params[:clear_product_properties]
if @object.update(permitted_resource_params)
if original_supplier_id != @product.supplier_id
ExchangeVariantDeleter.new.delete(@product)
end
flash[:success] = flash_message_for(@object, :successfully_updated)
end
redirect_to spree.edit_admin_product_url(@object, @url_filters)
@@ -157,12 +155,15 @@ module Spree
end
def load_form_data
@producers = OpenFoodNetwork::Permissions.new(spree_current_user).
managed_product_enterprises.is_primary_producer.by_name
@taxons = Spree::Taxon.order(:name)
@import_dates = product_import_dates.uniq.to_json
end
def load_producers
@producers = OpenFoodNetwork::Permissions.new(spree_current_user).
managed_product_enterprises.is_primary_producer.by_name
end
def product_import_dates
options = [{ id: '0', name: '' }]
product_import_dates_query.collect(&:import_date).
@@ -173,12 +174,10 @@ module Spree
def product_import_dates_query
Spree::Variant.
select('DISTINCT spree_variants.import_date').
joins(:product).
where(spree_products: { supplier_id: editable_enterprises.collect(&:id) }).
select('import_date').distinct.
where(supplier_id: editable_enterprises.collect(&:id)).
where.not(spree_variants: { import_date: nil }).
where(spree_variants: { deleted_at: nil }).
order('spree_variants.import_date DESC')
order('import_date DESC')
end
def strip_new_properties

View File

@@ -1,27 +0,0 @@
# frozen_string_literal: true
module Spree
module Admin
class TaxonomiesController < ::Admin::ResourceController
respond_to :json, only: [:get_children]
def get_children
@taxons = Taxon.find(params[:parent_id]).children
end
private
def location_after_save
if @taxonomy.created_at == @taxonomy.updated_at
spree.edit_admin_taxonomy_url(@taxonomy)
else
spree.admin_taxonomies_url
end
end
def permitted_resource_params
params.require(:taxonomy).permit(:name)
end
end
end
end

View File

@@ -2,122 +2,70 @@
module Spree
module Admin
class TaxonsController < Spree::Admin::BaseController
respond_to :html, :json, :js
class TaxonsController < ::Admin::ResourceController
before_action :set_taxon, except: %i[create index new]
def edit
@taxonomy = Taxonomy.find(params[:taxonomy_id])
@taxon = @taxonomy.taxons.find(params[:id])
@permalink_part = @taxon.permalink.split("/").last
def index
@taxons = Taxon.order(:name)
end
def new
@taxon = Taxon.new
end
def edit; end
def create
@taxonomy = Taxonomy.find(params[:taxonomy_id])
@taxon = @taxonomy.taxons.build(params[:taxon])
@taxon = Spree::Taxon.new(taxon_params)
if @taxon.save
respond_with(@taxon) do |format|
format.json { render json: @taxon.to_json }
end
flash[:success] = flash_message_for(@taxon, :successfully_created)
redirect_to edit_admin_taxon_path(@taxon.id)
else
flash[:error] = Spree.t('errors.messages.could_not_create_taxon')
respond_with(@taxon) do |format|
format.html do
if redirect_to @taxonomy
spree.edit_admin_taxonomy_url(@taxonomy)
else
spree.admin_taxonomies_url
end
end
end
render :new, status: :unprocessable_entity
end
end
def update
@taxonomy = Taxonomy.find(params[:taxonomy_id])
@taxon = @taxonomy.taxons.find(params[:id])
parent_id = params[:taxon][:parent_id]
new_position = params[:taxon][:position]
if parent_id || new_position # taxon is being moved
new_parent = parent_id.nil? ? @taxon.parent : Taxon.find(parent_id.to_i)
new_position = new_position.nil? ? -1 : new_position.to_i
# Bellow is a very complicated way of finding where in nested set we
# should actually move the taxon to achieve sane results,
# JS is giving us the desired position, which was awesome for previous setup,
# but now it's quite complicated to find where we should put it as we have
# to differenciate between moving to the same branch, up down and into
# first position.
new_siblings = new_parent.children
if new_position <= 0 && new_siblings.empty?
@taxon.move_to_child_of(new_parent)
elsif new_parent.id != @taxon.parent_id
if new_position.zero?
@taxon.move_to_left_of(new_siblings.first)
else
@taxon.move_to_right_of(new_siblings[new_position - 1])
end
elsif new_position < new_siblings.index(@taxon)
@taxon.move_to_left_of(new_siblings[new_position]) # we move up
else
@taxon.move_to_right_of(new_siblings[new_position - 1]) # we move down
end
# Reset legacy position, if any extensions still rely on it
new_parent.children.reload.each do |t|
t.update_columns(
position: t.position,
updated_at: Time.zone.now
)
end
if parent_id
@taxon.reload
@taxon.set_permalink
@taxon.save!
@update_children = true
end
end
if params.key? "permalink_part"
parent_permalink = @taxon.permalink.split("/")[0...-1].join("/")
parent_permalink += "/" if parent_permalink.present?
params[:taxon][:permalink] = parent_permalink + params[:permalink_part]
end
# check if we need to rename child taxons if parent name or permalink changes
if params[:taxon][:name] != @taxon.name || params[:taxon][:permalink] != @taxon.permalink
@update_children = true
end
if @taxon.update(taxon_params)
flash[:success] = flash_message_for(@taxon, :successfully_updated)
end
# rename child taxons
if @update_children
@taxon.descendants.each do |taxon|
taxon.reload
taxon.set_permalink
taxon.save!
end
end
respond_with(@taxon) do |format|
format.html { redirect_to spree.edit_admin_taxonomy_url(@taxonomy) }
format.json { render json: @taxon.to_json }
redirect_to edit_admin_taxon_path(@taxon.id)
else
render :edit, status: :unprocessable_entity
end
end
def destroy
@taxon = Taxon.find(params[:id])
@taxon.destroy
respond_with(@taxon) { |format| format.json { render json: '' } }
status = if @taxon.destroy
flash_message = t('.delete_taxon.success')
status = :ok
else
flash_message = t('.delete_taxon.error')
status = :unprocessable_entity
end
respond_to do |format|
format.html {
flash[:success] = flash_message if status == :ok
flash[:error] = flash_message if status == :unprocessable_entity
redirect_to admin_taxons_path
}
format.turbo_stream {
flash[:success] = flash_message if status == :ok
flash[:error] = flash_message if status == :unprocessable_entity
render :destroy_taxon, status:
}
end
end
private
def set_taxon
@taxon = Taxon.find(params[:id])
end
def taxon_params
params.require(:taxon).permit(
:name, :parent_id, :position, :icon, :description, :permalink, :taxonomy_id,
:name, :position, :icon, :description, :permalink,
:meta_description, :meta_keywords, :meta_title, :dfc_id
)
end

View File

@@ -46,7 +46,13 @@ module Spree
def update
@url_filters = ::ProductFilters.new.extract(request.query_parameters)
original_supplier_id = @object.supplier_id
if @object.update(permitted_resource_params)
if original_supplier_id != @object.supplier_id
ExchangeVariantDeleter.new.delete(@object)
end
flash[:success] = flash_message_for(@object, :successfully_updated)
redirect_to spree.admin_product_variants_url(params[:product_id], @url_filters)
else
@@ -113,6 +119,8 @@ module Spree
private
def load_data
@producers = OpenFoodNetwork::Permissions.new(spree_current_user).
managed_product_enterprises.is_primary_producer.by_name
@tax_categories = TaxCategory.order(:name)
@shipping_categories = ShippingCategory.order(:name)
end

View File

@@ -47,14 +47,8 @@ module Spree
@user = Spree::User.new(user_params)
if @user.save
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')
})
)
flash[:success] = t('devise.user_registrations.spree_user.signed_up_but_unconfirmed')
render cable_ready: cable_car.redirect_to(url: main_app.root_path)
else
render status: :unprocessable_entity, cable_ready: cable_car.morph(
"#signup-tab",

View File

@@ -14,6 +14,10 @@ module Admin
producers.size == 1 ? producers.first.id : nil
end
def managed_by_user?(enterprise)
enterprise.in?(spree_current_user.enterprises)
end
def enterprise_side_menu_items(enterprise)
is_shop = enterprise.sells != "none"
show_properties = !!enterprise.is_primary_producer
@@ -22,7 +26,8 @@ module Admin
show_enterprise_fees = can?(:manage_enterprise_fees,
enterprise) && (is_shop || enterprise.is_primary_producer)
show_connected_apps = can?(:manage_connected_apps, enterprise) &&
feature?(:connected_apps, spree_current_user, enterprise)
feature?(:connected_apps, spree_current_user, enterprise) &&
Spree::Config.connected_apps_enabled.present?
build_enterprise_side_menu_items(
is_shop:,
@@ -34,6 +39,11 @@ module Admin
)
end
def connected_apps_enabled
connected_apps_enabled = Spree::Config.connected_apps_enabled&.split(',') || []
ConnectedApp::TYPES & connected_apps_enabled
end
private
def build_enterprise_side_menu_items(
@@ -62,8 +72,8 @@ module Admin
{ name: 'inventory_settings', icon_class: "icon-list-ol", show: is_shop },
{ name: 'tag_rules', icon_class: "icon-random", show: is_shop },
{ name: 'shop_preferences', icon_class: "icon-shopping-cart", show: is_shop },
{ name: 'users', icon_class: "icon-user", show: true },
{ name: 'white_label', icon_class: "icon-leaf", show: true },
{ name: 'users', icon_class: "icon-user", show: true },
{ name: 'connected_apps', icon_class: "icon-puzzle-piece", show: show_connected_apps },
]
end

View File

@@ -11,9 +11,25 @@ module Admin
def order_adjustments_for_display(order)
order.adjustments +
voucher_included_tax_representations(order) +
additional_tax_total_representation(order) +
order.all_adjustments.payment_fee.eligible
end
def additional_tax_total_representation(order)
adjustment = Spree::Adjustment.additional.tax.where(
order_id: order.id, adjustable_type: 'Spree::Adjustment'
).sum(:amount)
return [] unless adjustment != 0
[
AdjustmentData.new(
I18n.t("admin.orders.edit.tax_on_fees"),
adjustment
)
]
end
def voucher_included_tax_representations(order)
return [] unless VoucherAdjustmentsService.new(order).voucher_included_tax.negative?

View File

@@ -0,0 +1,41 @@
# frozen_string_literal: true
module Admin
module ProductsHelper
def product_image_form_path(product)
if product.image.present?
edit_admin_product_image_path(product.id, product.image.id)
else
new_admin_product_image_path(product.id)
end
end
def prepare_new_variant(product)
product.variants.build
end
def unit_value_with_description(variant)
precised_unit_value = nil
if variant.unit_value
scaled_unit_value = variant.unit_value / (variant.product.variant_unit_scale || 1)
precised_unit_value = number_with_precision(
scaled_unit_value,
precision: nil,
strip_insignificant_zeros: true,
significant: false,
)
end
[precised_unit_value, variant.unit_description].compact_blank.join(" ")
end
def products_return_to_url(url_filters)
if feature?(:admin_style_v3, spree_current_user)
return session[:products_return_to_url] || admin_products_url
end
"#{admin_products_path}#{url_filters.empty? ? '' : "#?#{url_filters.to_query}"}"
end
end
end

View File

@@ -8,6 +8,6 @@ class BulkFormBuilder < ActionView::Helpers::FormBuilder
opts[:class] = "#{opts[:class]} changed".strip
end
super(field, **opts)
super
end
end

View File

@@ -1,27 +0,0 @@
# frozen_string_literal: true
module DiscourseHelper
def discourse_configured?
discourse_url.present?
end
def discourse_url
ENV.fetch('DISCOURSE_URL', nil)
end
def discourse_login_url
discourse_url + '/login'
end
def discourse_sso_url
discourse_url + '/session/sso_login'
end
def discourse_url!
discourse_url || raise('Missing Discourse URL')
end
def discourse_sso_secret!
ENV['DISCOURSE_SSO_SECRET'] || raise('Missing SSO secret')
end
end

View File

@@ -31,7 +31,7 @@ module EnterprisesHelper
def enterprises_options(enterprises)
enterprises.map { |enterprise|
[enterprise.name + ": " + enterprise.address.address1 + ", " + enterprise.address.city,
["#{enterprise.name}: #{enterprise.address.address1}, #{enterprise.address.city}",
enterprise.id.to_i]
}
end

View File

@@ -2,7 +2,7 @@
module I18nHelper
def locale_options
OpenFoodNetwork::I18nConfig.available_locales.map do |locale|
OpenFoodNetwork::I18nConfig.selectable_locales.map do |locale|
[t('language_name', locale:), locale]
end
end

View File

@@ -10,4 +10,8 @@ module MailerHelper
link_to ofn, "https://www.openfoodnetwork.org"
end
end
def order_reply_email(order)
order.distributor.email_address.presence || order.distributor.contact.email
end
end

View File

@@ -2,7 +2,9 @@
module MapHelper
def using_google_maps?
ENV["GOOGLE_MAPS_API_KEY"].present? || google_maps_configured_with_geocoder_api_key?
!ContentConfig.open_street_map_enabled && (
ENV["GOOGLE_MAPS_API_KEY"].present? || google_maps_configured_with_geocoder_api_key?
)
end
private

View File

@@ -108,7 +108,7 @@ module Spree
object.preferences.keys.map { |key|
preference_label = form.label("preferred_#{key}",
Spree.t(key.to_s.gsub("_from_list", "")) + ": ")
"#{Spree.t(key.to_s.gsub('_from_list', ''))}: ")
preference_field = preference_field_for(
form,
"preferred_#{key}",
@@ -120,7 +120,7 @@ module Spree
def link_to_add_fields(name, target, options = {})
name = '' if options[:no_text]
css_classes = options[:class] ? options[:class] + " spree_add_fields" : "spree_add_fields"
css_classes = options[:class] ? "#{options[:class]} spree_add_fields" : "spree_add_fields"
link_to_with_icon('icon-plus',
name,
'javascript:',

View File

@@ -34,6 +34,10 @@ module Spree
links
end
def order_shipment_ready?(order)
order.ready_to_ship?
end
private
def complete_order_links(order)

View File

@@ -1,11 +0,0 @@
# frozen_string_literal: true
module Spree
module Admin
module TaxonsHelper
def taxon_path(taxon)
taxon.ancestors.reverse.collect(&:name).join( " >> ")
end
end
end
end

View File

@@ -17,10 +17,10 @@ class ConnectAppJob < ApplicationJob
return unless channel
selector = "#edit_enterprise_#{enterprise.id} #connected-app-discover-regen"
selector = "#connected-app-discover-regen.enterprise_#{enterprise.id}"
html = ApplicationController.render(
partial: "admin/enterprises/form/connected_apps",
locals: { enterprise: },
partial: "admin/enterprises/form/connected_apps/discover_regen",
locals: { enterprise:, connected_app: enterprise.connected_apps.discover_regen.first },
)
cable_ready[channel].morph(selector:, html:).broadcast

View File

@@ -39,10 +39,14 @@ class ReportJob < ApplicationJob
end
def broadcast_result(channel, format, blob)
cable_ready[channel].inner_html(
selector: "#report-table",
html: actioncable_content(format, blob)
).broadcast
cable_ready[channel]
.inner_html(
selector: "#report-go",
html: Spree::Admin::BaseController.helpers.button(I18n.t(:go), "report__submit-btn")
).inner_html(
selector: "#report-table",
html: actioncable_content(format, blob)
).broadcast
end
def broadcast_error(channel)
@@ -53,7 +57,14 @@ class ReportJob < ApplicationJob
end
def actioncable_content(format, blob)
return blob.result if format.to_sym == :html
if format.to_sym == :html
return blob.result if blob.byte_size < 10**6 # 1 MB
return render(
partial: "admin/reports/display",
locals: { file_url: blob.expiring_service_url }
)
end
render(partial: "admin/reports/download", locals: { file_url: blob.expiring_service_url })
end

View File

@@ -60,11 +60,12 @@ class ProducerMailer < ApplicationMailer
def line_items_from(order_cycle, producer)
@line_items ||= Spree::LineItem.
includes(variant: [:product]).
includes(variant: :product).
joins(variant: :product).
from_order_cycle(order_cycle).
sorted_by_name_and_unit_value.
merge(Spree::Product.with_deleted.in_supplier(producer)).
merge(Spree::Order.by_state(["complete", "resumed"]))
merge(Spree::Variant.with_deleted.where(supplier: producer)).
merge(Spree::Order.by_state(["complete", "resumed"])).
sorted_by_name_and_unit_value
end
def total_from_line_items(line_items)
@@ -81,7 +82,7 @@ class ProducerMailer < ApplicationMailer
line_items.map do |line_item|
{
sku: line_item.variant.sku,
supplier_name: line_item.product.supplier.name,
supplier_name: line_item.variant.supplier.name,
product_and_full_name: line_item.product_and_full_name,
quantity: line_item.quantity,
first_name: line_item.order.billing_address.first_name,

View File

@@ -25,7 +25,7 @@ module Spree
@user = user
I18n.with_locale valid_locale(@user) do
mail(to: user.email,
subject: t(:welcome_to) + ' ' + Spree::Config[:site_name])
subject: "#{t(:welcome_to)} #{Spree::Config[:site_name]}")
end
end

View File

@@ -22,7 +22,7 @@ module FilePreferences
if has_preference?("#{key}_blob_id")
:file
else
super(key)
super
end
end

View File

@@ -1,19 +0,0 @@
# frozen_string_literal: true
# Rails 5 introduced some breaking changes to these built-in methods, and the new versions
# no longer work correctly in relation to decrementing stock with LineItems / VariantOverrides.
# The following methods re-instate the pre-Rails-5 versions, which work as expected.
# https://apidock.com/rails/v4.2.9/ActiveRecord/Persistence/increment%21
# https://apidock.com/rails/v4.2.9/ActiveRecord/Persistence/decrement%21
module LineItemStockChanges
extend ActiveSupport::Concern
def increment!(attribute, by = 1)
increment(attribute, by).update_attribute(attribute, self[attribute])
end
def decrement!(attribute, by = 1)
decrement(attribute, by).update_attribute(attribute, self[attribute])
end
end

View File

@@ -0,0 +1,21 @@
# frozen_string_literal: true
require 'active_support/concern'
module LogDestroyPerformer
extend ActiveSupport::Concern
included do
attr_accessor :destroyed_by
after_destroy :log_who_destroyed
def log_who_destroyed
message = if destroyed_by.nil?
"#{self.class} #{id} deleted"
else
"#{self.class} #{id} deleted by #{destroyed_by.id} <#{destroyed_by.email}>"
end
Rails.logger.info message
end
end
end

View File

@@ -4,8 +4,34 @@
#
# Here we store keys and links to access the app.
class ConnectedApp < ApplicationRecord
TYPES = ['discover_regen', 'affiliate_sales_data'].freeze
belongs_to :enterprise
after_destroy :disconnect
scope :discover_regen, -> { where(type: "ConnectedApp") }
scope :affiliate_sales_data, -> { where(type: "ConnectedApps::AffiliateSalesData") }
scope :connecting, -> { where(data: nil) }
scope :ready, -> { where.not(data: nil) }
def connecting?
data.nil?
end
def ready?
!connecting?
end
def connect(api_key:, channel:)
ConnectAppJob.perform_later(self, api_key, channel:)
end
def disconnect
WebhookDeliveryJob.perform_later(
data["destroy"],
"disconnect-app",
nil
)
end
end

View File

@@ -0,0 +1,13 @@
# frozen_string_literal: true
# An enterprise can opt-in for their data to be included in the affiliate_sales_data endpoint
#
module ConnectedApps
class AffiliateSalesData < ConnectedApp
def connect(_opts)
update! data: true # not-nil value indicates it is ready
end
def disconnect; end
end
end

View File

@@ -4,4 +4,14 @@ class CustomTab < ApplicationRecord
belongs_to :enterprise
validates :title, presence: true, length: { maximum: 20 }
# Remove any unsupported HTML.
def content
HtmlSanitizer.sanitize(super)
end
# Remove any unsupported HTML.
def content=(html)
super(HtmlSanitizer.sanitize(html))
end
end

View File

@@ -1,5 +1,7 @@
# frozen_string_literal: false
require "mini_magick"
class Enterprise < ApplicationRecord
SELLS = %w(unspecified none own any).freeze
ENTERPRISE_SEARCH_RADIUS = 100
@@ -39,13 +41,13 @@ class Enterprise < ApplicationRecord
class_name: 'EnterpriseGroup'
has_many :producer_properties, foreign_key: 'producer_id', dependent: :destroy
has_many :properties, through: :producer_properties
has_many :supplied_products, class_name: 'Spree::Product',
foreign_key: 'supplier_id',
dependent: :destroy
has_many :supplied_variants, through: :supplied_products, source: :variants
has_many :supplied_variants,
class_name: 'Spree::Variant', foreign_key: 'supplier_id', dependent: :destroy
has_many :supplied_products, through: :supplied_variants, source: :product
has_many :distributed_orders, class_name: 'Spree::Order',
foreign_key: 'distributor_id',
dependent: :restrict_with_exception
belongs_to :address, class_name: 'Spree::Address'
belongs_to :business_address, optional: true, class_name: 'Spree::Address', dependent: :destroy
has_many :enterprise_fees, dependent: :restrict_with_exception
@@ -167,7 +169,7 @@ class Enterprise < ApplicationRecord
scope :is_distributor, -> { where.not(sells: 'none') }
scope :is_hub, -> { where(sells: 'any') }
scope :supplying_variant_in, lambda { |variants|
joins(supplied_products: :variants).
joins(:supplied_variants).
where(spree_variants: { id: variants }).
select('DISTINCT enterprises.*')
}
@@ -205,14 +207,14 @@ class Enterprise < ApplicationRecord
select('DISTINCT enterprises.*')
}
scope :distributing_products, lambda { |product_ids|
scope :distributing_variants, lambda { |variants_ids|
exchanges = joins("
INNER JOIN exchanges
ON (exchanges.receiver_id = enterprises.id AND exchanges.incoming = 'f')
ON (exchanges.receiver_id = enterprises.id AND exchanges.incoming = false)
").
joins('INNER JOIN exchange_variants ON (exchange_variants.exchange_id = exchanges.id)').
joins('INNER JOIN spree_variants ON (spree_variants.id = exchange_variants.variant_id)').
where(spree_variants: { product_id: product_ids }).select('DISTINCT enterprises.id')
where(spree_variants: { id: variants_ids }).select('DISTINCT enterprises.id')
where(id: exchanges)
}
@@ -247,6 +249,16 @@ class Enterprise < ApplicationRecord
count(distinct: true)
end
# Remove any unsupported HTML.
def long_description
HtmlSanitizer.sanitize(super)
end
# Remove any unsupported HTML.
def long_description=(html)
super(HtmlSanitizer.sanitize(html))
end
def contact
contact = users.where(enterprise_roles: { receives_notifications: true }).first
contact || owner
@@ -366,7 +378,7 @@ class Enterprise < ApplicationRecord
def category
# Make this crazy logic human readable so we can argue about it sanely.
cat = is_primary_producer ? "producer_" : "non_producer_"
cat << ("sells_" + sells)
cat << ("sells_#{sells}")
# Map backend cases to front end cases.
case cat
@@ -417,10 +429,9 @@ class Enterprise < ApplicationRecord
test_permalink = UrlGenerator.to_url(test_permalink)
test_permalink = "my-enterprise" if test_permalink.blank?
existing = Enterprise.
select(:permalink).
order(:permalink).
where("permalink LIKE ?", "#{test_permalink}%").
map(&:permalink)
pluck(:permalink)
if existing.include?(test_permalink)
used_indices = existing.map do |p|
@@ -500,7 +511,7 @@ class Enterprise < ApplicationRecord
end
def correct_whatsapp_url(phone_number)
phone_number && ("https://wa.me/" + phone_number.tr('+ ', ''))
phone_number && "https://wa.me/#{phone_number.tr('+ ', '')}"
end
def correct_instagram_url(url)
@@ -588,7 +599,7 @@ class Enterprise < ApplicationRecord
# Touch distributors without them touching their distributors.
# We avoid an infinite loop and don't need to touch the whole distributor tree.
def touch_distributors
Enterprise.distributing_products(supplied_products.select(:id)).
Enterprise.distributing_variants(supplied_variants.select(:id)).
where.not(enterprises: { id: }).
update_all(updated_at: Time.zone.now)
end

View File

@@ -74,6 +74,16 @@ class EnterpriseGroup < ApplicationRecord
permalink
end
# Remove any unsupported HTML.
def long_description
HtmlSanitizer.sanitize(super)
end
# Remove any unsupported HTML.
def long_description=(html)
super(HtmlSanitizer.sanitize(html))
end
private
def sanitize_permalink

View File

@@ -108,6 +108,6 @@ class EnterpriseRelationship < ApplicationRecord
def child_variant_overrides
VariantOverride.unscoped.for_hubs(child)
.joins(variant: :product).where(spree_products: { supplier_id: parent })
.joins(:variant).where(spree_variants: { supplier_id: parent } )
end
end

View File

@@ -24,6 +24,7 @@ class OrderCycle < ApplicationRecord
where incoming: false
}, class_name: "Exchange", dependent: :destroy
has_many :orders, class_name: 'Spree::Order', dependent: :restrict_with_exception
has_many :suppliers, -> { distinct }, source: :sender, through: :cached_incoming_exchanges
has_many :distributors, -> { distinct }, source: :receiver, through: :cached_outgoing_exchanges
has_many :order_cycle_schedules, dependent: :destroy
@@ -253,7 +254,7 @@ class OrderCycle < ApplicationRecord
end
def pickup_time_for(distributor)
exchange_for_distributor(distributor)&.pickup_time || distributor.next_collection_at
exchange_for_distributor(distributor)&.pickup_time
end
def pickup_instructions_for(distributor)

View File

@@ -54,10 +54,7 @@ module ProductImport
if settings.importing_into_inventory?
VariantOverride.for_hubs([enterprise_id]).count
else
Spree::Variant.
joins(:product).
where(spree_products: { supplier_id: enterprise_id }).
count
Spree::Variant.where(supplier_id: enterprise_id).count
end
@enterprise_products[enterprise_id] = products_count
@@ -165,11 +162,10 @@ module ProductImport
return
end
product = Spree::Product.new
product = Spree::Product.new(supplier_id: entry.enterprise_id)
product.assign_attributes(
entry.assignable_attributes.except('id', 'on_hand', 'on_demand', 'display_name')
)
product.supplier_id = entry.producer_id
if product.save
ensure_variant_updated(product, entry)
@@ -228,10 +224,13 @@ module ProductImport
# Ensure attributes are correctly copied to a new product's variant
variant = product.variants.first
variant.display_name = entry.display_name if entry.display_name
variant.import_date = @import_time
variant.supplier_id = entry.producer_id
variant.save
# on_demand and on_hand require a stock level, which is created after the variant is created
variant.on_demand = entry.on_demand if entry.on_demand
variant.on_hand = entry.on_hand if entry.on_hand
variant.import_date = @import_time
variant.save
end
end
end

View File

@@ -73,6 +73,7 @@ module ProductImport
# Variant needs a product. Product needs to be assigned first in order for
# delegate to work. name= will fail otherwise.
new_variant = Spree::Variant.new(product_id:, **variant_attributes)
new_variant.supplier_id = entry.producer_id
new_variant.save
if new_variant.persisted?
@@ -287,9 +288,7 @@ module ProductImport
end
def inventory_validation(entry)
products = Spree::Product.where(supplier_id: entry.producer_id,
name: entry.name,
deleted_at: nil)
products = Spree::Product.in_supplier(entry.producer_id).where(name: entry.name)
if products.empty?
mark_as_invalid(entry, attribute: 'name',
@@ -358,9 +357,7 @@ module ProductImport
end
def product_validation(entry)
products = Spree::Product.where(supplier_id: entry.enterprise_id,
name: entry.name,
deleted_at: nil)
products = Spree::Product.in_supplier(entry.enterprise_id).where(name: entry.name)
if products.empty?
mark_as_new_product(entry)
@@ -380,11 +377,10 @@ module ProductImport
end
def mark_as_new_product(entry)
new_product = Spree::Product.new
new_product = Spree::Product.new(supplier_id: entry.enterprise_id)
new_product.assign_attributes(
entry.assignable_attributes.except('id', 'on_hand', 'on_demand', 'display_name')
)
new_product.supplier_id = entry.producer_id
entry.on_hand = 0 if entry.on_hand.nil?
if new_product.valid?

View File

@@ -287,8 +287,6 @@ module ProductImport
end
def delete_uploaded_file
return unless @file.path == Rails.root.join("tmp/product_import").to_s
File.delete(@file)
end

View File

@@ -39,7 +39,6 @@ module Spree
can [:index, :read], StockLocation
can [:index, :read], StockMovement
can [:index, :read], Taxon
can [:index, :read], Taxonomy
can [:index, :read], Variant
can [:index, :read], Zone
end
@@ -189,20 +188,22 @@ module Spree
:seo, :group_buy_options,
:bulk_update, :clone, :delete,
:destroy], Spree::Product do |product|
OpenFoodNetwork::Permissions.new(user).managed_product_enterprises.include? product.supplier
OpenFoodNetwork::Permissions.new(user).managed_product_enterprises.include?(
product.variants.first.supplier
)
end
can [:admin, :index, :bulk_update], :products_v3
can [:admin, :index, :bulk_update, :destroy, :destroy_variant, :clone], :products_v3
can [:create], Spree::Variant
can [:admin, :index, :read, :edit,
:update, :search, :delete, :destroy], Spree::Variant do |variant|
OpenFoodNetwork::Permissions.new(user).
managed_product_enterprises.include? variant.product.supplier
managed_product_enterprises.include? variant.supplier
end
can [:admin, :index, :read, :update, :bulk_update, :bulk_reset], VariantOverride do |vo|
next false unless vo.hub.present? && vo.variant&.product&.supplier.present?
next false unless vo.hub.present? && vo.variant&.supplier.present?
hub_auth = OpenFoodNetwork::Permissions.new(user).
variant_override_hubs.
@@ -210,14 +211,14 @@ module Spree
producer_auth = OpenFoodNetwork::Permissions.new(user).
variant_override_producers.
include? vo.variant.product.supplier
include? vo.variant.supplier
hub_auth && producer_auth
end
can [:admin, :create, :update], InventoryItem do |ii|
next false unless ii.enterprise.present? &&
ii.variant&.product&.supplier.present?
ii.variant&.supplier.present?
hub_auth = OpenFoodNetwork::Permissions.new(user).
variant_override_hubs.
@@ -225,7 +226,7 @@ module Spree
producer_auth = OpenFoodNetwork::Permissions.new(user).
variant_override_producers.
include? ii.variant.product.supplier
include? ii.variant.supplier
hub_auth && producer_auth
end

View File

@@ -139,5 +139,8 @@ module Spree
# Available units
preference :available_units, :string, default: "g,kg,T,mL,L,kL"
# Connected Apps
preference :connected_apps_enabled, :string, default: nil
end
end

View File

@@ -30,7 +30,7 @@ module Spree
def expiry=(expiry)
self[:month], self[:year] = expiry.split(" / ")
self[:year] = "20" + self[:year]
self[:year] = "20#{self[:year]}"
end
def number=(num)

View File

@@ -1,5 +1,7 @@
# frozen_string_literal: true
require "mini_magick"
module Spree
class Image < Asset
has_one_attached :attachment, service: image_service do |attachment|

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