Compare commits

...

682 Commits

Author SHA1 Message Date
Maikel Linke
75a8d9caf0 Update translations 2022-07-28 11:09:29 +10:00
Maikel
1089a66fff Merge pull request #9465 from openfoodfoundation/dependabot/bundler/rails-6.1.6.1
Bump rails from 6.1.6 to 6.1.6.1
2022-07-28 11:08:39 +10:00
jibees
1feb7b4065 Merge pull request #9457 from openfoodfoundation/dependabot/bundler/i18n-1.12.0
Bump i18n from 1.8.10 to 1.12.0
2022-07-27 16:12:45 +02:00
jibees
7b7c6ec7d7 Merge pull request #9467 from openfoodfoundation/dependabot/bundler/combine_pdf-1.0.22
Bump combine_pdf from 1.0.21 to 1.0.22
2022-07-27 16:09:38 +02:00
jibees
db99ecf255 Merge pull request #9466 from openfoodfoundation/dependabot/bundler/json-2.6.2
Bump json from 2.6.1 to 2.6.2
2022-07-27 16:09:23 +02:00
dependabot[bot]
87846529a2 Bump combine_pdf from 1.0.21 to 1.0.22
Bumps [combine_pdf](https://github.com/boazsegev/combine_pdf) from 1.0.21 to 1.0.22.
- [Release notes](https://github.com/boazsegev/combine_pdf/releases)
- [Changelog](https://github.com/boazsegev/combine_pdf/blob/master/CHANGELOG.md)
- [Commits](https://github.com/boazsegev/combine_pdf/compare/v1.0.21...v1.0.22)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-27 13:01:48 +00:00
dependabot[bot]
e50f298a0a Bump i18n from 1.8.10 to 1.12.0
Bumps [i18n](https://github.com/ruby-i18n/i18n) from 1.8.10 to 1.12.0.
- [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.8.10...v1.12.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-27 13:00:22 +00:00
dependabot[bot]
bbc54d4467 Bump json from 2.6.1 to 2.6.2
Bumps [json](https://github.com/flori/json) from 2.6.1 to 2.6.2.
- [Release notes](https://github.com/flori/json/releases)
- [Changelog](https://github.com/flori/json/blob/master/CHANGES.md)
- [Commits](https://github.com/flori/json/compare/v2.6.1...v2.6.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-27 13:00:22 +00:00
Jean-Baptiste Bellet
006bcd2cf8 Add Symbol class allowed for YAML deserialization 2022-07-27 15:00:19 +02:00
jibees
e56c803610 Merge pull request #9464 from openfoodfoundation/dependabot/bundler/bootsnap-1.12.0
Bump bootsnap from 1.10.1 to 1.12.0
2022-07-27 14:58:56 +02:00
jibees
5a9ff58bcf Merge pull request #9463 from openfoodfoundation/dependabot/bundler/active_storage_validations-0.9.8
Bump active_storage_validations from 0.9.7 to 0.9.8
2022-07-27 11:27:48 +02:00
Jean-Baptiste Bellet
7747f2592e Add BigDecimal classe allowed for YAML deserialization
The soft enforcement of the Rails 6.1.6.1 security update in picked up
one more classes that were serialized in the database with YAML: BigDecimal
2022-07-27 11:26:42 +02:00
dependabot[bot]
59504c3d84 Bump rails from 6.1.6 to 6.1.6.1
Bumps [rails](https://github.com/rails/rails) from 6.1.6 to 6.1.6.1.
- [Release notes](https://github.com/rails/rails/releases)
- [Commits](https://github.com/rails/rails/compare/v6.1.6...v6.1.6.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-27 07:29:49 +00:00
dependabot[bot]
57535af982 Bump bootsnap from 1.10.1 to 1.12.0
Bumps [bootsnap](https://github.com/Shopify/bootsnap) from 1.10.1 to 1.12.0.
- [Release notes](https://github.com/Shopify/bootsnap/releases)
- [Changelog](https://github.com/Shopify/bootsnap/blob/main/CHANGELOG.md)
- [Commits](https://github.com/Shopify/bootsnap/compare/v1.10.1...v1.12.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-27 07:29:10 +00:00
dependabot[bot]
66358240dc Bump active_storage_validations from 0.9.7 to 0.9.8
Bumps [active_storage_validations](https://github.com/igorkasyanchuk/active_storage_validations) from 0.9.7 to 0.9.8.
- [Release notes](https://github.com/igorkasyanchuk/active_storage_validations/releases)
- [Changelog](https://github.com/igorkasyanchuk/active_storage_validations/blob/master/CHANGES.md)
- [Commits](https://github.com/igorkasyanchuk/active_storage_validations/commits/0.9.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-27 07:28:51 +00:00
jibees
a283a7fe49 Merge pull request #9451 from openfoodfoundation/dependabot/bundler/rubocop-1.32.0
Bump rubocop from 1.22.2 to 1.32.0
2022-07-27 09:27:23 +02:00
jibees
42cdfe3c1e Merge pull request #9455 from openfoodfoundation/dependabot/bundler/test-unit-3.5.3
Bump test-unit from 3.5.0 to 3.5.3
2022-07-27 09:26:52 +02:00
jibees
806dd6254b Merge pull request #9461 from openfoodfoundation/dependabot/bundler/valid_email2-4.0.3
Bump valid_email2 from 4.0.0 to 4.0.3
2022-07-27 09:26:34 +02:00
jibees
40b53442a8 Merge pull request #9460 from openfoodfoundation/dependabot/bundler/capybara-3.37.1
Bump capybara from 3.36.0 to 3.37.1
2022-07-27 09:26:01 +02:00
dependabot[bot]
7662d3fd6a Bump rubocop from 1.22.2 to 1.32.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.22.2 to 1.32.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.22.2...v1.32.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-27 06:29:18 +00:00
dependabot[bot]
e4ea9d8cd1 Bump test-unit from 3.5.0 to 3.5.3
Bumps [test-unit](https://github.com/test-unit/test-unit) from 3.5.0 to 3.5.3.
- [Release notes](https://github.com/test-unit/test-unit/releases)
- [Commits](https://github.com/test-unit/test-unit/compare/3.5.0...3.5.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-27 06:29:16 +00:00
dependabot[bot]
c6374555b9 Bump valid_email2 from 4.0.0 to 4.0.3
Bumps [valid_email2](https://github.com/micke/valid_email2) from 4.0.0 to 4.0.3.
- [Release notes](https://github.com/micke/valid_email2/releases)
- [Changelog](https://github.com/micke/valid_email2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micke/valid_email2/compare/v4.0.0...v4.0.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-27 06:28:36 +00:00
dependabot[bot]
bda5ca33d9 Bump capybara from 3.36.0 to 3.37.1
Bumps [capybara](https://github.com/teamcapybara/capybara) from 3.36.0 to 3.37.1.
- [Release notes](https://github.com/teamcapybara/capybara/releases)
- [Changelog](https://github.com/teamcapybara/capybara/blob/master/History.md)
- [Commits](https://github.com/teamcapybara/capybara/compare/3.36.0...3.37.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-27 06:28:11 +00:00
jibees
7a10037de8 Merge pull request #9459 from openfoodfoundation/dependabot/bundler/rubocop-rails-2.15.2
Bump rubocop-rails from 2.13.2 to 2.15.2
2022-07-27 08:27:58 +02:00
jibees
a8d5fede17 Merge pull request #9458 from openfoodfoundation/dependabot/bundler/view_component-2.62.0
Bump view_component from 2.57.1 to 2.62.0
2022-07-27 08:27:01 +02:00
dependabot[bot]
daa2bd5127 Bump rubocop-rails from 2.13.2 to 2.15.2
Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.13.2 to 2.15.2.
- [Release notes](https://github.com/rubocop/rubocop-rails/releases)
- [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.13.2...v2.15.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-27 02:08:59 +00:00
dependabot[bot]
506574aefd Bump view_component from 2.57.1 to 2.62.0
Bumps [view_component](https://github.com/github/view_component) from 2.57.1 to 2.62.0.
- [Release notes](https://github.com/github/view_component/releases)
- [Changelog](https://github.com/github/view_component/blob/main/docs/CHANGELOG.md)
- [Commits](https://github.com/github/view_component/compare/v2.57.1...v2.62.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-27 02:08:12 +00:00
Maikel
4f099da58f Merge pull request #9452 from openfoodfoundation/dependabot/bundler/rswag-specs-2.5.1
Bump rswag-specs from 2.4.0 to 2.5.1
2022-07-27 12:06:50 +10:00
jibees
6baa36cdaa Merge pull request #9454 from openfoodfoundation/dependabot/bundler/rails-i18n-7.0.5
Bump rails-i18n from 7.0.1 to 7.0.5
2022-07-26 17:15:10 +02:00
jibees
e0a8b320a9 Merge pull request #9450 from openfoodfoundation/dependabot/bundler/timecop-0.9.5
Bump timecop from 0.9.4 to 0.9.5
2022-07-26 17:12:24 +02:00
dependabot[bot]
d54eb48662 Bump rswag-specs from 2.4.0 to 2.5.1
Bumps [rswag-specs](https://github.com/rswag/rswag) from 2.4.0 to 2.5.1.
- [Release notes](https://github.com/rswag/rswag/releases)
- [Changelog](https://github.com/rswag/rswag/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rswag/rswag/compare/2.4.0...2.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-26 14:13:06 +00:00
dependabot[bot]
542e8e22bf Bump rails-i18n from 7.0.1 to 7.0.5
Bumps [rails-i18n](https://github.com/svenfuchs/rails-i18n) from 7.0.1 to 7.0.5.
- [Release notes](https://github.com/svenfuchs/rails-i18n/releases)
- [Changelog](https://github.com/svenfuchs/rails-i18n/blob/master/CHANGELOG.md)
- [Commits](https://github.com/svenfuchs/rails-i18n/commits/v7.0.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-26 14:12:46 +00:00
dependabot[bot]
e0426d6dc0 Bump timecop from 0.9.4 to 0.9.5
Bumps [timecop](https://github.com/travisjeffery/timecop) from 0.9.4 to 0.9.5.
- [Release notes](https://github.com/travisjeffery/timecop/releases)
- [Changelog](https://github.com/travisjeffery/timecop/blob/master/History.md)
- [Commits](https://github.com/travisjeffery/timecop/compare/v0.9.4...v0.9.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-26 14:10:19 +00:00
jibees
a09900c98d Merge pull request #9433 from openfoodfoundation/dependabot/bundler/rswag-api-2.5.1
Bump rswag-api from 2.4.0 to 2.5.1
2022-07-26 16:10:15 +02:00
jibees
f563fcad7f Merge pull request #9434 from openfoodfoundation/dependabot/bundler/letter_opener-1.8.1
Bump letter_opener from 1.7.0 to 1.8.1
2022-07-26 16:09:56 +02:00
jibees
34b76f8683 Merge pull request #9401 from openfoodfoundation/dependabot/bundler/selenium-webdriver-4.3.0
Bump selenium-webdriver from 4.0.3 to 4.3.0
2022-07-26 16:09:42 +02:00
jibees
ec82bdda97 Merge pull request #9376 from openfoodfoundation/dependabot/bundler/jwt-2.4.1
Bump jwt from 2.3.0 to 2.4.1
2022-07-26 16:09:32 +02:00
jibees
e4c2df4989 Merge pull request #9326 from openfoodfoundation/dependabot/bundler/sidekiq-6.5.1
Bump sidekiq from 6.3.1 to 6.5.1
2022-07-26 16:09:22 +02:00
jibees
a1f577dc01 Merge pull request #9400 from openfoodfoundation/dependabot/bundler/rswag-ui-2.5.1
Bump rswag-ui from 2.4.0 to 2.5.1
2022-07-26 16:09:11 +02:00
jibees
edbf92424d Merge pull request #9377 from openfoodfoundation/dependabot/bundler/paranoia-2.6.0
Bump paranoia from 2.4.3 to 2.6.0
2022-07-26 16:08:58 +02:00
jibees
35c18664fc Merge pull request #9389 from jibees/9388-handle-plural-in-order-selection-component
Handle plural (and 0) on orders selection component
2022-07-26 15:57:58 +02:00
Maikel
825058472b Merge pull request #9425 from openfoodfoundation/dependabot/npm_and_yarn/stimulus-3.1.0
Bump stimulus from 3.0.1 to 3.1.0
2022-07-26 16:49:33 +10:00
dependabot[bot]
cd2119707a Bump rswag-ui from 2.4.0 to 2.5.1
Bumps [rswag-ui](https://github.com/rswag/rswag) from 2.4.0 to 2.5.1.
- [Release notes](https://github.com/rswag/rswag/releases)
- [Changelog](https://github.com/rswag/rswag/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rswag/rswag/compare/2.4.0...2.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-25 14:56:05 +00:00
dependabot[bot]
8c27406a7a Bump paranoia from 2.4.3 to 2.6.0
Bumps [paranoia](https://github.com/rubysherpas/paranoia) from 2.4.3 to 2.6.0.
- [Release notes](https://github.com/rubysherpas/paranoia/releases)
- [Changelog](https://github.com/rubysherpas/paranoia/blob/core/CHANGELOG.md)
- [Commits](https://github.com/rubysherpas/paranoia/compare/2.4.3...v2.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-25 14:55:49 +00:00
dependabot[bot]
b6defc76a8 Bump jwt from 2.3.0 to 2.4.1
Bumps [jwt](https://github.com/jwt/ruby-jwt) from 2.3.0 to 2.4.1.
- [Release notes](https://github.com/jwt/ruby-jwt/releases)
- [Changelog](https://github.com/jwt/ruby-jwt/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jwt/ruby-jwt/compare/v2.3.0...v2.4.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-25 14:55:29 +00:00
dependabot[bot]
50529d7ab3 Bump sidekiq from 6.3.1 to 6.5.1
Bumps [sidekiq](https://github.com/mperham/sidekiq) from 6.3.1 to 6.5.1.
- [Release notes](https://github.com/mperham/sidekiq/releases)
- [Changelog](https://github.com/mperham/sidekiq/blob/main/Changes.md)
- [Commits](https://github.com/mperham/sidekiq/compare/v6.3.1...v6.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-25 14:55:12 +00:00
dependabot[bot]
b695f3d47f Bump selenium-webdriver from 4.0.3 to 4.3.0
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.0.3 to 4.3.0.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
- [Commits](https://github.com/SeleniumHQ/selenium/commits/selenium-4.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-25 14:54:43 +00:00
dependabot[bot]
90ce61fa47 Bump letter_opener from 1.7.0 to 1.8.1
Bumps [letter_opener](https://github.com/ryanb/letter_opener) from 1.7.0 to 1.8.1.
- [Release notes](https://github.com/ryanb/letter_opener/releases)
- [Changelog](https://github.com/ryanb/letter_opener/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ryanb/letter_opener/compare/v1.7.0...v1.8.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-25 14:13:23 +00:00
dependabot[bot]
7c2352f2d6 Bump rswag-api from 2.4.0 to 2.5.1
Bumps [rswag-api](https://github.com/rswag/rswag) from 2.4.0 to 2.5.1.
- [Release notes](https://github.com/rswag/rswag/releases)
- [Changelog](https://github.com/rswag/rswag/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rswag/rswag/compare/2.4.0...2.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-25 14:13:07 +00:00
dependabot[bot]
ef7194af85 Bump stimulus from 3.0.1 to 3.1.0
Bumps [stimulus](https://github.com/stimulusjs/stimulus) from 3.0.1 to 3.1.0.
- [Release notes](https://github.com/stimulusjs/stimulus/releases)
- [Changelog](https://github.com/hotwired/stimulus/blob/main/CHANGELOG.md)
- [Commits](https://github.com/stimulusjs/stimulus/compare/v3.0.1...v3.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-25 14:12:14 +00:00
Jean-Baptiste Bellet
4766c7a00b Update all locales with the latest Transifex translations 2022-07-21 17:42:52 +02:00
jibees
9d470c7a18 Merge pull request #9416 from aintluks/fix-label-button-terms-of-service
Fix button labels on terms of service
2022-07-21 17:38:28 +02:00
jibees
9cb0d66f39 Merge pull request #9426 from openfoodfoundation/dependabot/npm_and_yarn/babel/preset-env-7.18.9
Bump @babel/preset-env from 7.18.6 to 7.18.9
2022-07-21 17:38:07 +02:00
dependabot[bot]
7ba6f8c04b Bump @babel/preset-env from 7.18.6 to 7.18.9
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.18.6 to 7.18.9.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.18.9/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-21 15:03:18 +00:00
jibees
19ff6d011a Merge pull request #9415 from saunmanoj888/fix-for-shipping-method-radio-button
Fix text alignment for category radio button under shipping method
2022-07-21 17:02:29 +02:00
jibees
9b1dcdcc78 Merge pull request #9412 from binarygit/optimize-notes-and-tracking-workflow
Optimize notes and tracking workflow
2022-07-21 17:02:03 +02:00
jibees
5eb3c486b2 Merge pull request #9383 from jibees/9382-can-send-invoice-if-ABN-is-not-required
Can send invoice if ABN is not required
2022-07-21 17:01:41 +02:00
jibees
20ee0d5009 Merge pull request #9301 from mkllnk/3975-unsupported-image
Allow SVG images for products and show errors when uploading unsupported file
2022-07-21 16:56:11 +02:00
jibees
89d68c7708 Merge pull request #9374 from openfoodfoundation/dependabot/bundler/spring-4.0.0
Bump spring from 3.0.0 to 4.0.0
2022-07-21 08:56:33 +02:00
jibees
371d517436 Merge pull request #9432 from mkllnk/mayhem
Run Mayhem for API only when triggered manually
2022-07-21 08:51:12 +02:00
jibees
17a016eca5 Merge pull request #9431 from mkllnk/roo
Bump roo from old master to 2.9.0
2022-07-21 08:46:06 +02:00
Jean-Baptiste Bellet
2b67a0fa80 Specify a list of content-types
Then remove specific image format that aren't handled by a web browser (such as `image/x+xcf)`

+ List allowed image formats for enterprises and groups
2022-07-21 08:42:17 +02:00
Maikel Linke
84fcc8f1ac Upgrade spring binstubs
I ran `bundle exec spring binstub --all` after reading about the update
in the changelog.
2022-07-21 10:55:31 +10:00
Maikel
baefe37d0b Merge pull request #9367 from openfoodfoundation/dependabot/bundler/activerecord-import-1.4.0
Bump activerecord-import from 1.3.0 to 1.4.0
2022-07-21 10:45:56 +10:00
Maikel Linke
1e13d579ba Run Mayhem for API only when triggered manually
It currently always fails and we are not using it. We may use it in the
future though and the results can be interesting. So I'm keeping it but
it's not triggered on every pull request. How to trigger:

https://docs.github.com/en/actions/managing-workflow-runs/manually-running-a-workflow#running-a-workflow
2022-07-21 10:37:58 +10:00
Maikel Linke
becfb09b3c Bump roo from old master to 2.9.0
This release doesn't include the latest two pull requests but we don't
need those features and it's an upgrade already. Dependabot will now
pick up new releases instead of every new commit to the master branch of
the gem source. That should be less work for us.
2022-07-21 10:29:45 +10:00
Filipe
4767030035 Merge pull request #9429 from filipefurtad0/matomo_tag_change
Adds js window element to container code
2022-07-20 10:27:16 +01:00
filipefurtad0
b20385db95 Moves matomo tag to upper position within head section 2022-07-20 09:38:37 +01:00
jibees
019911068a Merge pull request #9402 from openfoodfoundation/dependabot/bundler/oauth2-1.4.10
Bump oauth2 from 1.4.7 to 1.4.10
2022-07-20 09:36:19 +02:00
jibees
da266fed40 Merge pull request #9428 from openfoodfoundation/dependabot/npm_and_yarn/terser-4.8.1
Bump terser from 4.8.0 to 4.8.1
2022-07-20 09:35:39 +02:00
Maikel Linke
dd6c066f5a DRY view with JS translation 2022-07-20 17:01:10 +10:00
dependabot[bot]
9de939c1b1 Bump terser from 4.8.0 to 4.8.1
Bumps [terser](https://github.com/terser/terser) from 4.8.0 to 4.8.1.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-20 05:48:56 +00:00
Lucas da Costa
35030bfd02 Fix button labels on terms of service 2022-07-19 22:53:30 -03:00
Maikel
3833fb6e52 Merge pull request #9394 from jibees/9167-api-v1,-customers-endpoint-region-and-country-as-object
API v1: Provide customer address with region and country objects including id code
2022-07-20 09:41:11 +10:00
filipefurtad0
0a03c0a0fb Adds js window element to container code 2022-07-19 19:29:02 +01:00
binarygit
0599acbcb8 Refactor shipments.js 2022-07-19 13:37:05 +05:45
binarygit
97dcd44662 Display alert box before deleting note/tracking info 2022-07-19 13:37:05 +05:45
binarygit
1165c997bc Add styles on notes/tracking info when hoving over their delete buttons 2022-07-19 13:36:58 +05:45
Maikel
0144e940c4 Remove release step to merge Transifex PR 2022-07-19 17:38:37 +10:00
Jean-Baptiste Bellet
753a643bf1 Simplify main method by creating two private methods
Include some unit tests
2022-07-19 09:50:06 +10:00
Maikel Linke
19018c2564 Split address transformation for easier reading 2022-07-19 09:49:42 +10:00
Maikel Linke
c8a65d2fac Simplify with customer accessor 2022-07-19 09:49:42 +10:00
Maikel Linke
6c0d4cffe5 Allow customer's address update with country code
The customer endpoint now serves 2-letter ISO codes for countries and
accepts these for updates. It also serves and accepts region codes
(abbreviations) like VIC for Victoria.

Updates treat these fields as case-insensitive and either code or name
have to be present.

This commit also updates the Swagger documentation.
2022-07-19 09:49:42 +10:00
binarygit
6b042e4a17 Display notes field in admin/orders/new only after an item has been added 2022-07-18 16:15:37 +05:45
binarygit
ae2c56b29d Omit tracking info row from shipping email when empty 2022-07-18 14:55:36 +05:45
saunmanoj888
55feb7648d Fix text alignment for category radio button under shipping method 2022-07-16 23:17:06 +05:30
Jean-Baptiste Bellet
cc135c8190 API V1, Customer endpoint: region and country as object 2022-07-15 14:54:33 +02:00
binarygit
2f01351ad2 Enable users to delete only non-empty tracking info/notes 2022-07-15 11:34:37 +05:45
Maikel Linke
3d6842db80 Update translations 2022-07-14 11:54:23 +10:00
Maikel
e1dd92b406 Merge pull request #9395 from openfoodfoundation/transifex
Transifex
2022-07-14 11:50:18 +10:00
Maikel
a8160aac8a Merge pull request #9399 from binarygit/feature/update-note/tracking
Update note and tracking fields workflow
2022-07-14 11:49:09 +10:00
Jean-Baptiste Bellet
afa40ea82f Authorize product and not @product 2022-07-13 14:26:11 +02:00
Transifex-Openfoodnetwork
6a9fcd0b30 Updating translations for config/locales/en_GB.yml 2022-07-13 04:17:52 +10:00
Jean-Baptiste Bellet
a80cf37fa6 Handle errors message formatting 2022-07-12 18:29:28 +02:00
Jean-Baptiste Bellet
073bad2118 Allow svg images to be resized/cropped 2022-07-12 15:53:32 +02:00
binarygit
6ad0749ce8 Refactor: create parent_node var to find child elements 2022-07-12 14:11:53 +05:45
Transifex-Openfoodnetwork
5a40ccb7df Updating translations for config/locales/it.yml 2022-07-12 18:07:07 +10:00
binarygit
a56375eaf8 Spec: can delete note/tracking info on an order 2022-07-12 13:33:34 +05:45
Transifex-Openfoodnetwork
5221e776da Updating translations for config/locales/de_DE.yml 2022-07-11 20:44:12 +10:00
Transifex-Openfoodnetwork
a290779ef7 Updating translations for config/locales/en_FR.yml 2022-07-11 19:31:07 +10:00
Transifex-Openfoodnetwork
ac2b8e1ebe Updating translations for config/locales/fr.yml 2022-07-11 19:28:51 +10:00
jibees
a1adcadd6c Merge pull request #9371 from openfoodfoundation/dependabot/bundler/devise-4.8.1
Bump devise from 4.8.0 to 4.8.1
2022-07-11 11:26:43 +02:00
dependabot[bot]
4a53c818fd Bump oauth2 from 1.4.7 to 1.4.10
Bumps [oauth2](https://github.com/oauth-xx/oauth2) from 1.4.7 to 1.4.10.
- [Release notes](https://github.com/oauth-xx/oauth2/releases)
- [Changelog](https://github.com/oauth-xx/oauth2/blob/master/CHANGELOG.md)
- [Commits](https://github.com/oauth-xx/oauth2/compare/v1.4.7...v1.4.10)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-11 09:06:54 +00:00
dependabot[bot]
fa59117fd5 Bump devise from 4.8.0 to 4.8.1
Bumps [devise](https://github.com/heartcombo/devise) from 4.8.0 to 4.8.1.
- [Release notes](https://github.com/heartcombo/devise/releases)
- [Changelog](https://github.com/heartcombo/devise/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heartcombo/devise/compare/v4.8.0...v4.8.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-11 08:52:18 +00:00
jibees
3b6b2ea936 Merge pull request #9372 from openfoodfoundation/dependabot/bundler/rack-timeout-0.6.3
Bump rack-timeout from 0.6.0 to 0.6.3
2022-07-11 10:51:00 +02:00
jibees
ef4a71c048 Merge pull request #9375 from openfoodfoundation/dependabot/bundler/redis-4.7.1
Bump redis from 4.7.0 to 4.7.1
2022-07-11 10:50:35 +02:00
jibees
bc82401c24 Merge pull request #9393 from openfoodfoundation/dependabot/bundler/awesome_nested_set-3.5.0
Bump awesome_nested_set from 3.4.0 to 3.5.0
2022-07-11 10:49:54 +02:00
jibees
849ceeaa96 Merge pull request #9392 from openfoodfoundation/dependabot/npm_and_yarn/moment-2.29.4
Bump moment from 2.29.3 to 2.29.4
2022-07-11 10:49:35 +02:00
jibees
77bac0c24e Merge pull request #9396 from openfoodfoundation/dependabot/npm_and_yarn/tom-select-2.1.0
Bump tom-select from 2.0.3 to 2.1.0
2022-07-11 09:17:15 +02:00
binarygit
227220e2a6 Add focus to tracking when edit tracking is clicked 2022-07-09 14:40:04 +05:45
binarygit
b88c85555e Add delete tracking feature 2022-07-09 14:39:20 +05:45
binarygit
b7a49ced39 Add focus to note when edit note is clicked 2022-07-09 14:33:01 +05:45
binarygit
dc31ebebb1 Add delete note feature 2022-07-09 13:23:38 +05:45
Filipe
2f550725e3 Merge pull request #9368 from jibees/9178-add-note-on-order
Admin, Edit order: Can add note on order
2022-07-08 12:13:18 +01:00
Filipe
3834724d45 Merge pull request #9236 from AgriculturaFamiliar/add-map-whatsapp-link
Show whatsapp link on contact modal on map
2022-07-08 12:10:18 +01:00
dependabot[bot]
ce39f3c119 Bump tom-select from 2.0.3 to 2.1.0
Bumps [tom-select](https://github.com/orchidjs/tom-select) from 2.0.3 to 2.1.0.
- [Release notes](https://github.com/orchidjs/tom-select/releases)
- [Commits](https://github.com/orchidjs/tom-select/compare/v2.0.3...v2.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-08 09:05:33 +00:00
Transifex-Openfoodnetwork
7aaa31b137 Updating translations for config/locales/en_FR.yml 2022-07-08 11:27:15 +10:00
Transifex-Openfoodnetwork
656143db48 Updating translations for config/locales/fr.yml 2022-07-08 11:24:09 +10:00
Filipe
decfbc9658 Merge pull request #9356 from jibees/9248-add-tags-to-a-producer-only-order-cycle
Add tags to producer-only order cycle interface
2022-07-07 23:45:02 +01:00
Filipe
e91a87d83b Merge pull request #9295 from filipefurtad0/destroy_order_state_confirmation
Restarts checkout flow, when emptying the cart
2022-07-07 22:47:44 +01:00
Filipe
040422c6c0 Merge pull request #9380 from jibees/9068-bulk-product-update-creating-new-on_demand-variant
Admin, Products list: fix variant creation when unit is not well formatted and on_demand is checked or on_hand is filled
2022-07-07 22:39:23 +01:00
dependabot[bot]
7535883416 Bump moment from 2.29.3 to 2.29.4
Bumps [moment](https://github.com/moment/moment) from 2.29.3 to 2.29.4.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.3...2.29.4)

---
updated-dependencies:
- dependency-name: moment
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-07 08:10:37 +00:00
Jean-Baptiste Bellet
f71c84cea5 Handle save method as it should be: return false if any errors occurs 2022-07-07 09:56:14 +02:00
Maikel Linke
1586320115 Update translations 2022-07-07 13:56:55 +10:00
Maikel
13f81ca20e Merge pull request #9350 from filipefurtad0/adds_reports_specs
Adds system specs on orders and fulfillment reports
2022-07-07 13:51:12 +10:00
dependabot[bot]
25b5b66ae1 Bump awesome_nested_set from 3.4.0 to 3.5.0
Bumps [awesome_nested_set](https://github.com/collectiveidea/awesome_nested_set) from 3.4.0 to 3.5.0.
- [Release notes](https://github.com/collectiveidea/awesome_nested_set/releases)
- [Changelog](https://github.com/collectiveidea/awesome_nested_set/blob/master/CHANGELOG)
- [Commits](https://github.com/collectiveidea/awesome_nested_set/compare/v3.4.0...v3.5.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-07 03:45:48 +00:00
dependabot[bot]
f2b02f6c6b Bump activerecord-import from 1.3.0 to 1.4.0
Bumps [activerecord-import](https://github.com/zdennis/activerecord-import) from 1.3.0 to 1.4.0.
- [Release notes](https://github.com/zdennis/activerecord-import/releases)
- [Changelog](https://github.com/zdennis/activerecord-import/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zdennis/activerecord-import/compare/v1.3.0...v1.4.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-07 03:45:13 +00:00
dependabot[bot]
3139ba7ad0 Bump rack-timeout from 0.6.0 to 0.6.3
Bumps [rack-timeout](https://github.com/zombocom/rack-timeout) from 0.6.0 to 0.6.3.
- [Release notes](https://github.com/zombocom/rack-timeout/releases)
- [Changelog](https://github.com/zombocom/rack-timeout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/zombocom/rack-timeout/compare/v0.6.0...v0.6.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-07 03:45:12 +00:00
Maikel
1ab1e20bb7 Merge pull request #9378 from openfoodfoundation/dependabot/bundler/rails-6.1.6
Bump rails from 6.1.4.4 to 6.1.6
2022-07-07 13:43:58 +10:00
Maikel
f3806ea5ea Merge pull request #9381 from openfoodfoundation/transifex
Transifex
2022-07-07 13:39:23 +10:00
Maikel
182a7f0f93 Merge pull request #9352 from filipefurtad0/price_breakdown_spec
Adds price breakdown assertion
2022-07-07 13:36:45 +10:00
Jean-Baptiste Bellet
6f228781d4 Check for product_set errors
+ update specs: can't save variant that is not well filled. Now display errors (instead of a generic one)
2022-07-06 10:46:54 +02:00
Jean-Baptiste Bellet
c39b00b6c2 do not set on_demand and on_hand if variant has errors
+ update specs

Co-Authored-By: Maikel <maikel@email.org.au>
2022-07-06 10:46:54 +02:00
Jean-Baptiste Bellet
06b1c9aa40 Handle plural (and 0) on orders selection component 2022-07-06 09:48:12 +02:00
lauriewayne
75b71738df Update FUNDING.yml
took away @
2022-07-05 07:02:03 -07:00
lauriewayne
8cb07c4a37 Update FUNDING.yml 2022-07-05 06:59:27 -07:00
lauriewayne
4cbd520cb9 Create FUNDING.yml
added @ofnusa to Open Collective line
2022-07-05 06:56:44 -07:00
Jean-Baptiste Bellet
b2a0310e6f Handle the case when errors is a string 2022-07-05 15:48:31 +02:00
jibees
d71994189c Creating new variants specs
Co-Authored-By: Filipe <49817236+filipefurtad0@users.noreply.github.com>
2022-07-05 10:21:48 +02:00
Jean-Baptiste Bellet
89809aed5f Add counter on note input 2022-07-05 10:09:20 +02:00
Jean-Baptiste Bellet
de8c71d098 Create a controller that handle a counter for an input text 2022-07-05 10:09:20 +02:00
Jean-Baptiste Bellet
576faff3d7 Spec: can edit/save note on an order 2022-07-05 10:09:20 +02:00
Jean-Baptiste Bellet
90af6bd22d Handle note saving with a new action on existing API controller 2022-07-05 10:09:20 +02:00
Jean-Baptiste Bellet
3f1099d968 Add edit note line on an order 2022-07-05 10:09:20 +02:00
Jean-Baptiste Bellet
7fbe893927 Add note to spree_orders object 2022-07-05 10:09:20 +02:00
Transifex-Openfoodnetwork
c6ab9f8a6a Updating translations for config/locales/it.yml 2022-07-05 16:42:36 +10:00
Jean-Baptiste Bellet
e4be757d96 use the can_invoice method that check both ABN and configuration boolean
+ specs Specify an empty ABN number
+ update specs
2022-07-04 15:35:49 +02:00
filipefurtad0
e44845c327 Creates system spec for orders and fulfilment report; adds existing test cases to this file 2022-07-04 11:08:54 +01:00
filipefurtad0
c8cab86b0c Stubs order and adds assertions 2022-07-04 11:07:00 +01:00
Transifex-Openfoodnetwork
a3cbe8e878 Updating translations for config/locales/en_FR.yml 2022-07-04 19:52:28 +10:00
Transifex-Openfoodnetwork
727c74907d Updating translations for config/locales/fr.yml 2022-07-04 19:51:29 +10:00
Transifex-Openfoodnetwork
04c38a3c1d Updating translations for config/locales/de_DE.yml 2022-07-02 08:22:44 +10:00
Jean-Baptiste Bellet
9b51f85e9a Create a context around "creating new variants"
Reproducing bug #9068
2022-07-01 16:42:04 +02:00
Jean-Baptiste Bellet
90fe3fc66c Update all locales with the latest Transifex translations 2022-07-01 14:26:24 +02:00
Filipe
5a2aee6d79 Merge pull request #9349 from openfoodfoundation/transifex
Transifex
2022-07-01 12:06:53 +01:00
dependabot[bot]
544377a624 Bump rails from 6.1.4.4 to 6.1.6
Bumps [rails](https://github.com/rails/rails) from 6.1.4.4 to 6.1.6.
- [Release notes](https://github.com/rails/rails/releases)
- [Commits](https://github.com/rails/rails/compare/v6.1.4.4...v6.1.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 11:06:24 +00:00
Filipe
2a49b91a8b Merge pull request #9347 from openfoodfoundation/dependabot/bundler/view_component-2.57.1
Bump view_component from 2.41.0 to 2.57.1
2022-07-01 12:05:42 +01:00
Filipe
8abd636b68 Merge pull request #9342 from openfoodfoundation/dependabot/bundler/view_component_storybook-0.11.1
Bump view_component_storybook from 0.10.1 to 0.11.1
2022-07-01 12:05:28 +01:00
Filipe
244cce7392 Merge pull request #9365 from mkllnk/ch
Add Swiss language files
2022-07-01 12:04:57 +01:00
Filipe
9d39efdd7b Merge pull request #9318 from saunmanoj888/translation-missing-order-cycle-status
Add translation for order-cycle-status on new order creation from admin
2022-07-01 12:03:45 +01:00
Filipe
a0531ca356 Merge pull request #9332 from openfoodfoundation/dependabot/bundler/geocoder-1.8.0
Bump geocoder from 1.7.0 to 1.8.0
2022-07-01 12:00:02 +01:00
Filipe
8cac98ceb4 Merge pull request #9321 from leopengilley/master
Styled text colour of admin order dropdown menu #9296
2022-07-01 10:48:11 +01:00
Filipe
3d5d9d1191 Merge pull request #9353 from saunmanoj888/fix-password-prefilled-issue
Disable auto fill option for password on /admin/users/[ID] page
2022-07-01 10:41:29 +01:00
dependabot[bot]
a5f6773a4d Bump redis from 4.7.0 to 4.7.1
Bumps [redis](https://github.com/redis/redis-rb) from 4.7.0 to 4.7.1.
- [Release notes](https://github.com/redis/redis-rb/releases)
- [Changelog](https://github.com/redis/redis-rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/redis/redis-rb/compare/v4.7.0...v4.7.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 09:34:11 +00:00
Filipe
e563de0248 Merge pull request #9330 from openfoodfoundation/dependabot/bundler/roadie-rails-3.0.0
Bump roadie-rails from 2.2.0 to 3.0.0
2022-07-01 10:33:11 +01:00
Filipe
81d2e63d6f Merge pull request #9357 from jibees/9180-close-mobile-menu-on-click-anywhere
Close menu on click outside the menu and outside the hamburger icon
2022-07-01 10:16:43 +01:00
dependabot[bot]
43b09640a9 Bump spring from 3.0.0 to 4.0.0
Bumps [spring](https://github.com/rails/spring) from 3.0.0 to 4.0.0.
- [Release notes](https://github.com/rails/spring/releases)
- [Changelog](https://github.com/rails/spring/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rails/spring/compare/v3.0.0...v4.0.0)

---
updated-dependencies:
- dependency-name: spring
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 08:47:51 +00:00
Filipe
9b2ae41392 Merge pull request #9359 from openfoodfoundation/dependabot/bundler/sidekiq-scheduler-4.0.2
Bump sidekiq-scheduler from 3.1.0 to 4.0.2
2022-07-01 09:46:00 +01:00
Arthur Vieira
066879fe62 Add icons to whatsapp links
Uses the font awesome 4 WhatsApp icon in .svg format (which is under the
Open Font License) in the pages where an enterprise's WhatsApp number
appears as an hyperlink.
2022-06-30 19:19:10 -03:00
Arthur
54ec4e5016 Update app/views/shopping_shared/tabs/_contact.html.haml
Co-authored-by: Maikel <maikel@email.org.au>
2022-06-30 19:19:10 -03:00
Arthur Vieira
e483ef8ccd Fix whatsapp phone tooltip in registration
The tooltip on the contact step of the registration form now displays
the proper text, which has been added in the source language file.
2022-06-30 19:19:10 -03:00
Arthur Vieira
0deb3cd782 Replace url generation with 'whatsapp_url' method
As suggested by mkllnk's following comment:
1eda7d8a4c (r890656117)
2022-06-30 19:19:10 -03:00
Arthur Vieira
624485ff25 Add whatsapp link to contact tab view 2022-06-30 19:19:10 -03:00
Arthur Vieira
cace62a718 Add producer whatsapp link to producers list
Adds WhatsApp number with wa.me link between phone number and e-mail
address in the producers list profile.
2022-06-30 19:19:10 -03:00
Arthur Vieira
77360f41af Show WhatsApp link on contact modal on map
Strips '+' and ' ' characters from the phone number for the generated
link, but doesn't guarantee the link is valid because the number
registered isn't validated for now.
2022-06-30 19:19:10 -03:00
Arthur Vieira
79e762a815 Add whatsapp number to registration form
Creates a field  on the contact step of the enterprise registration form
to create an enterprise with a WhatsApp phone number, with corresponding
i18n keys for the field's name and placeholder text.
2022-06-30 19:19:10 -03:00
Arthur Vieira
62ee3c2de1 Add admin view field for whatsapp number
Creates a field and tooltip in
/admin/enterprises/<enterprise>/edit#!/contact for updating the
enterprise's WhatsApp phone number, with corresponding i18n keys for the
name of the field, placeholder and tooltip text.
2022-06-30 19:19:10 -03:00
Arthur Vieira
b565b6ba4d Add whatsapp_phone to permitted attributes
Allows creating and updating the enterprise's WhatsApp phone number in
the registration form and contact edit views.
2022-06-30 19:19:10 -03:00
Arthur Vieira
a2bc61475b Add whatsapp_phone column to enterprises 2022-06-30 19:19:06 -03:00
Transifex-Openfoodnetwork
8052e8b775 Updating translations for config/locales/en_FR.yml 2022-06-30 17:39:47 +10:00
Transifex-Openfoodnetwork
e4d290d59c Updating translations for config/locales/fr.yml 2022-06-30 17:39:36 +10:00
jibees
96df2cb307 Merge pull request #9370 from openfoodfoundation/dependabot/bundler/rack-mini-profiler-2.3.4
Bump rack-mini-profiler from 2.3.3 to 2.3.4
2022-06-30 08:34:18 +02:00
Maikel
1bc13215a2 Merge pull request #9360 from openfoodfoundation/dependabot/bundler/aws-sdk-s3-1.114.0
Bump aws-sdk-s3 from 1.113.0 to 1.114.0
2022-06-30 11:45:05 +10:00
dependabot[bot]
a09b1ce54c Bump rack-mini-profiler from 2.3.3 to 2.3.4
Bumps [rack-mini-profiler](https://github.com/MiniProfiler/rack-mini-profiler) from 2.3.3 to 2.3.4.
- [Release notes](https://github.com/MiniProfiler/rack-mini-profiler/releases)
- [Changelog](https://github.com/MiniProfiler/rack-mini-profiler/blob/master/CHANGELOG.md)
- [Commits](https://github.com/MiniProfiler/rack-mini-profiler/compare/v2.3.3...v2.3.4)

---
updated-dependencies:
- dependency-name: rack-mini-profiler
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-29 18:22:46 +00:00
Filipe
122421be0f Merge pull request #9340 from openfoodfoundation/dependabot/bundler/wicked_pdf-2.6.3
Bump wicked_pdf from 2.1.0 to 2.6.3
2022-06-29 19:21:35 +01:00
Filipe
899a796896 Merge pull request #9348 from jibees/9315-add-boolean-to-set-enterprise-phone-number-mandatory-or-not
Add boolean to specify if enterprise  number (ABN, GST, SIRET, ...) is mandatory or not to generate invoices
2022-06-29 19:07:55 +01:00
Filipe
deb22d788f Merge pull request #9363 from jibees/9316-new-action-dropdown-for-bulk-invoice-printing
Admin, Orders list: new actions dropdown for bulk invoice printing
2022-06-29 18:20:32 +01:00
Jean-Baptiste Bellet
77d12a3e54 Can add tags on simple order_cycle: specs
Simple order cycle: enterprise users selling only their own produce
2022-06-29 09:51:15 +02:00
jibees
d245609b16 Merge pull request #9366 from openfoodfoundation/dependabot/bundler/shoulda-matchers-5.1.0
Bump shoulda-matchers from 5.0.0 to 5.1.0
2022-06-29 08:49:06 +02:00
dependabot[bot]
b806e08624 Bump shoulda-matchers from 5.0.0 to 5.1.0
Bumps [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/thoughtbot/shoulda-matchers/releases)
- [Changelog](https://github.com/thoughtbot/shoulda-matchers/blob/main/CHANGELOG.md)
- [Commits](https://github.com/thoughtbot/shoulda-matchers/compare/v5.0.0...v5.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-29 03:54:32 +00:00
Maikel
b902de652a Merge pull request #9358 from openfoodfoundation/dependabot/bundler/redis-4.7.0
Bump redis from 4.5.1 to 4.7.0
2022-06-29 13:53:33 +10:00
Maikel Linke
0afd0fe2f1 Add Swiss language files
We usually don't do this manually but these files haven't been
completely translated yet and Mikel is keen to use them.
2022-06-29 10:49:49 +10:00
Jean-Baptiste Bellet
8ba59079b3 Reverse per_page and actions components left <-> right 2022-06-28 18:12:47 +02:00
Jean-Baptiste Bellet
8d66f33230 per_page control can now be set on the right of the page 2022-06-28 18:12:20 +02:00
Jean-Baptiste Bellet
77e384ab71 Replace button by a drop-down
+ update specs as well
2022-06-28 17:39:41 +02:00
Jean-Baptiste Bellet
7a1bd660c4 Prepare ofn-drop-down to have a "disabled" state and a "prepend" element 2022-06-28 17:39:41 +02:00
jibees
0ed56a46af Merge pull request #9362 from openfoodfoundation/dependabot/npm_and_yarn/babel/preset-env-7.18.6
Bump @babel/preset-env from 7.18.2 to 7.18.6
2022-06-28 15:23:01 +02:00
Jean-Baptiste Bellet
fdba33baa3 Pass the form, and re-init() on object change
I can't make angularjs directive synchronized to scope object, this seems to be a hack, but it works.

Also add form in the scope (which was not added...)
2022-06-28 15:05:11 +02:00
Jean-Baptiste Bellet
6f303a5244 Add tags interface for a producer only order cycle
Add tags for first (and unique) outgoing exchange for a simple OC

Order Cycle can have tags
2022-06-28 15:05:11 +02:00
Transifex-Openfoodnetwork
850ad5165c Updating translations for config/locales/ko.yml 2022-06-28 21:25:14 +10:00
dependabot[bot]
85e3111e75 Bump @babel/preset-env from 7.18.2 to 7.18.6
Bumps [@babel/preset-env](https://github.com/babel/babel/tree/HEAD/packages/babel-preset-env) from 7.18.2 to 7.18.6.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.18.6/packages/babel-preset-env)

---
updated-dependencies:
- dependency-name: "@babel/preset-env"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-28 09:04:51 +00:00
Jean-Baptiste Bellet
5ad09a6fab Check if user can/can't print invoice in case of company number mandatory or present 2022-06-28 09:58:34 +02:00
Jean-Baptiste Bellet
bb6298d06d Check for enterprise_number_required_on_invoices boolean
if true, then can edit invoice ;

if false, then print a confirm alert popup to specify that a enterprise number must be set for this enterprise
2022-06-28 09:53:46 +02:00
Jean-Baptiste Bellet
3a1fde40c5 Add a Spree config option: enterprise_number_required_on_invoices 2022-06-28 09:50:12 +02:00
filipefurtad0
43b6ab5dc5 Updates spec after merging #9325 2022-06-28 07:37:08 +01:00
Maikel
ee464ca457 Merge pull request #9334 from openfoodfoundation/dependabot/bundler/bullet-7.0.2
Bump bullet from 6.1.5 to 7.0.2
2022-06-28 12:25:53 +10:00
dependabot[bot]
c27f35ee6e Bump aws-sdk-s3 from 1.113.0 to 1.114.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.113.0 to 1.114.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>
2022-06-28 02:25:51 +00:00
Maikel
79cc8b6f3e Merge pull request #9331 from openfoodfoundation/dependabot/bundler/devise-i18n-1.10.2
Bump devise-i18n from 1.10.0 to 1.10.2
2022-06-28 12:24:59 +10:00
dependabot[bot]
1676dba9da Bump sidekiq-scheduler from 3.1.0 to 4.0.2
Bumps [sidekiq-scheduler](https://github.com/moove-it/sidekiq-scheduler) from 3.1.0 to 4.0.2.
- [Release notes](https://github.com/moove-it/sidekiq-scheduler/releases)
- [Changelog](https://github.com/sidekiq-scheduler/sidekiq-scheduler/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moove-it/sidekiq-scheduler/compare/v3.1.0...v4.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-28 02:02:17 +00:00
dependabot[bot]
e26e6bb855 Bump redis from 4.5.1 to 4.7.0
Bumps [redis](https://github.com/redis/redis-rb) from 4.5.1 to 4.7.0.
- [Release notes](https://github.com/redis/redis-rb/releases)
- [Changelog](https://github.com/redis/redis-rb/blob/master/CHANGELOG.md)
- [Commits](https://github.com/redis/redis-rb/compare/v4.5.1...v4.7.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-28 02:01:57 +00:00
Maikel
c2c8e8dfcd Merge pull request #9343 from openfoodfoundation/dependabot/bundler/arel-helpers-2.14.0
Bump arel-helpers from 2.12.1 to 2.14.0
2022-06-28 12:01:33 +10:00
Maikel
61f0b433aa Merge pull request #9345 from openfoodfoundation/dependabot/bundler/test-prof-1.0.9
Bump test-prof from 1.0.7 to 1.0.9
2022-06-28 12:01:05 +10:00
Jean-Baptiste Bellet
e2e455533e Close menu on click outside the menu and outside the hambuger icon 2022-06-27 18:57:40 +02:00
filipefurtad0
2ba9d250f2 Adds assertion on price breakdown modal 2022-06-27 11:24:57 +01:00
Maikel
79bf8f0053 Merge pull request #9354 from mkllnk/time-spec
Fix time in reports spec
2022-06-27 17:41:20 +10:00
Maikel Linke
721fc0fd3f Fix time in reports spec
Some specs were starting to fail because I created an order in the past
while the default report is for the last month only. It didn't include
that order any more.

I now defined the dates everywhere to remove this variable of the
current date.
2022-06-27 17:07:56 +10:00
Maikel
6a80cb8bfa Merge pull request #9313 from filipefurtad0/some_clean_ups_on_report_specs
Updating system specs after reports overhaul
2022-06-27 16:33:56 +10:00
saunmanoj888
8d5616b351 Disable auto fill option for password on /admin/users/[ID] page 2022-06-26 23:45:18 +05:30
Filipe
45214ed923 Merge pull request #9325 from jibees/8899-shopfront-display-fee-name-in-the-tooltip-of-a-price-product-
In the shopfront, display fee name in the tooltip of a price product breakdown
2022-06-24 20:49:32 +01:00
Transifex-Openfoodnetwork
e28905b176 Updating translations for config/locales/en_GB.yml 2022-06-24 05:24:50 +10:00
filipefurtad0
d63aca3129 Removes 'pending' after #9229 merge 2022-06-23 10:40:11 +01:00
filipefurtad0
be7d44a603 Updates payments_report_spec.rb 2022-06-23 10:24:20 +01:00
filipefurtad0
98eecb1b3e Updates packing report spec 2022-06-23 10:24:20 +01:00
filipefurtad0
db8eb52359 Updates enterprise_summary_fee spec 2022-06-23 10:24:20 +01:00
filipefurtad0
b0d29c6dbc Updates spec settings to address timeout error 2022-06-23 10:24:20 +01:00
filipefurtad0
54bcd75f3f Corrects namespace; adds pending on failing examples - payment_r 2022-06-23 10:24:20 +01:00
filipefurtad0
32e247bf75 Removes spree namespace; adds pending on failing examples - packing_r 2022-06-23 10:24:20 +01:00
filipefurtad0
5892eab4e3 Removes spree namespace; adds pending on failing examples - enterprise_fee_r 2022-06-23 10:24:20 +01:00
dependabot[bot]
9da7bcb134 Bump view_component from 2.41.0 to 2.57.1
Bumps [view_component](https://github.com/github/view_component) from 2.41.0 to 2.57.1.
- [Release notes](https://github.com/github/view_component/releases)
- [Changelog](https://github.com/github/view_component/blob/main/docs/CHANGELOG.md)
- [Commits](https://github.com/github/view_component/compare/v2.41.0...v2.57.1)

---
updated-dependencies:
- dependency-name: view_component
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-23 04:11:33 +00:00
Maikel
0ce5718b2b Merge pull request #9329 from openfoodfoundation/dependabot/bundler/web-console-4.2.0
Bump web-console from 4.1.0 to 4.2.0
2022-06-23 14:10:25 +10:00
dependabot[bot]
d12754fe83 Bump roadie-rails from 2.2.0 to 3.0.0
Bumps [roadie-rails](https://github.com/Mange/roadie-rails) from 2.2.0 to 3.0.0.
- [Release notes](https://github.com/Mange/roadie-rails/releases)
- [Changelog](https://github.com/Mange/roadie-rails/blob/master/Changelog.md)
- [Commits](https://github.com/Mange/roadie-rails/compare/v2.2.0...v3.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-23 03:58:49 +00:00
Maikel
c268999ec6 Merge pull request #9346 from openfoodfoundation/dependabot/bundler/puma-5.6.4
Bump puma from 5.6.2 to 5.6.4
2022-06-23 13:56:49 +10:00
dependabot[bot]
b81ce0ad1c Bump puma from 5.6.2 to 5.6.4
Bumps [puma](https://github.com/puma/puma) from 5.6.2 to 5.6.4.
- [Release notes](https://github.com/puma/puma/releases)
- [Changelog](https://github.com/puma/puma/blob/master/History.md)
- [Commits](https://github.com/puma/puma/compare/v5.6.2...v5.6.4)

---
updated-dependencies:
- dependency-name: puma
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-23 03:30:12 +00:00
Maikel Linke
49166dd503 Update translations 2022-06-23 13:30:09 +10:00
dependabot[bot]
00f3a698f4 Bump test-prof from 1.0.7 to 1.0.9
Bumps [test-prof](https://github.com/test-prof/test-prof) from 1.0.7 to 1.0.9.
- [Release notes](https://github.com/test-prof/test-prof/releases)
- [Changelog](https://github.com/test-prof/test-prof/blob/master/CHANGELOG.md)
- [Commits](https://github.com/test-prof/test-prof/compare/v1.0.7...v1.0.9)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-23 03:30:07 +00:00
Maikel
45e4b00891 Merge pull request #9328 from openfoodfoundation/dependabot/bundler/good_migrations-0.2.1
Bump good_migrations from 0.1.0 to 0.2.1
2022-06-23 13:29:01 +10:00
Maikel
d71073e0ed Merge pull request #9339 from openfoodfoundation/transifex
Transifex
2022-06-23 12:20:51 +10:00
Maikel
165456b8c8 Merge pull request #9229 from mkllnk/report-currency-formatting
Format money amounts in report spreadsheets as numbers
2022-06-23 12:18:02 +10:00
saunmanoj888
12eff626f4 Add translation for statuses in order_controller.js.coffee 2022-06-23 01:33:51 +05:30
dependabot[bot]
eee7075d9d Bump arel-helpers from 2.12.1 to 2.14.0
Bumps [arel-helpers](https://github.com/camertron/arel-helpers) from 2.12.1 to 2.14.0.
- [Release notes](https://github.com/camertron/arel-helpers/releases)
- [Changelog](https://github.com/camertron/arel-helpers/blob/master/CHANGELOG.md)
- [Commits](https://github.com/camertron/arel-helpers/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-22 13:55:57 +00:00
jibees
5642e4835c Merge pull request #9335 from openfoodfoundation/dependabot/bundler/i18n-js-3.9.2
Bump i18n-js from 3.9.0 to 3.9.2
2022-06-22 15:55:44 +02:00
dependabot[bot]
f12d62604b Bump view_component_storybook from 0.10.1 to 0.11.1
Bumps [view_component_storybook](https://github.com/jonspalmer/view_component_storybook) from 0.10.1 to 0.11.1.
- [Release notes](https://github.com/jonspalmer/view_component_storybook/releases)
- [Changelog](https://github.com/jonspalmer/view_component_storybook/blob/main/docs/CHANGELOG.md)
- [Commits](https://github.com/jonspalmer/view_component_storybook/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-22 13:55:25 +00:00
Transifex-Openfoodnetwork
db51b7dcf4 Updating translations for config/locales/de_DE.yml 2022-06-22 23:54:59 +10:00
jibees
d328e098ce Merge pull request #9327 from openfoodfoundation/dependabot/bundler/ffaker-2.21.0
Bump ffaker from 2.20.0 to 2.21.0
2022-06-22 15:53:44 +02:00
dependabot[bot]
d77c693829 Bump wicked_pdf from 2.1.0 to 2.6.3
Bumps [wicked_pdf](https://github.com/mileszs/wicked_pdf) from 2.1.0 to 2.6.3.
- [Release notes](https://github.com/mileszs/wicked_pdf/releases)
- [Changelog](https://github.com/mileszs/wicked_pdf/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mileszs/wicked_pdf/compare/2.1.0...2.6.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-22 09:02:28 +00:00
Transifex-Openfoodnetwork
213aa03c8b Updating translations for config/locales/en_FR.yml 2022-06-22 18:14:49 +10:00
Transifex-Openfoodnetwork
cc48a3396b Updating translations for config/locales/fr.yml 2022-06-22 18:14:15 +10:00
Maikel
fbf4513e96 Merge pull request #9314 from turrisxyz/Pinned-Dependencies-GitHub
chore: Set permissions for GitHub actions
2022-06-22 12:07:07 +10:00
Maikel
5ecf678257 Merge pull request #9293 from openfoodfoundation/master-1
Updated Docker installation instructions
2022-06-22 11:54:14 +10:00
dependabot[bot]
5e5ade9681 Bump bullet from 6.1.5 to 7.0.2
Bumps [bullet](https://github.com/flyerhzm/bullet) from 6.1.5 to 7.0.2.
- [Release notes](https://github.com/flyerhzm/bullet/releases)
- [Changelog](https://github.com/flyerhzm/bullet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/flyerhzm/bullet/compare/6.1.5...7.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-22 01:27:27 +00:00
Maikel
6a22650fee Merge pull request #9333 from openfoodfoundation/dependabot/bundler/bugsnag-6.24.2
Bump bugsnag from 6.24.1 to 6.24.2
2022-06-22 11:25:43 +10:00
Maikel
8d1e1e6e04 Merge pull request #9322 from mkllnk/fix-schema
Remove accidental modification of the db schema
2022-06-22 11:23:54 +10:00
Filipe
b977bc77c8 Merge pull request #9272 from jibees/7905-retrieve-order-already-placed-on-user-confirmation-with-customer-email
On user confirmation, retrieve and link all orders to the new user that were already placed with the same email
2022-06-21 18:12:58 +01:00
dependabot[bot]
421cbcc745 Bump i18n-js from 3.9.0 to 3.9.2
Bumps [i18n-js](https://github.com/fnando/i18n-js) from 3.9.0 to 3.9.2.
- [Release notes](https://github.com/fnando/i18n-js/releases)
- [Changelog](https://github.com/fnando/i18n-js/blob/v3.9.2/CHANGELOG.md)
- [Commits](https://github.com/fnando/i18n-js/compare/v3.9.0...v3.9.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-21 16:37:08 +00:00
dependabot[bot]
9455341908 Bump bugsnag from 6.24.1 to 6.24.2
Bumps [bugsnag](https://github.com/bugsnag/bugsnag-ruby) from 6.24.1 to 6.24.2.
- [Release notes](https://github.com/bugsnag/bugsnag-ruby/releases)
- [Changelog](https://github.com/bugsnag/bugsnag-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/bugsnag/bugsnag-ruby/compare/v6.24.1...v6.24.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-21 16:35:44 +00:00
dependabot[bot]
4c0d7c039f Bump geocoder from 1.7.0 to 1.8.0
Bumps [geocoder](https://github.com/alexreisner/geocoder) from 1.7.0 to 1.8.0.
- [Release notes](https://github.com/alexreisner/geocoder/releases)
- [Changelog](https://github.com/alexreisner/geocoder/blob/master/CHANGELOG.md)
- [Commits](https://github.com/alexreisner/geocoder/compare/v1.7.0...v1.8.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-21 16:35:04 +00:00
Filipe
6b00319e4a Merge pull request #9191 from jibees/9186-inverse-hide-columns-UX-by-a-columns-to-show
Admin, Reports: Inverting logic from "Columns to hide" to "Columns to show"
2022-06-21 17:34:31 +01:00
dependabot[bot]
5da9ec7dc2 Bump devise-i18n from 1.10.0 to 1.10.2
Bumps [devise-i18n](https://github.com/tigrish/devise-i18n) from 1.10.0 to 1.10.2.
- [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.10.0...v1.10.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-21 16:34:22 +00:00
dependabot[bot]
edf1dd52eb Bump web-console from 4.1.0 to 4.2.0
Bumps [web-console](https://github.com/rails/web-console) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/rails/web-console/releases)
- [Changelog](https://github.com/rails/web-console/blob/master/CHANGELOG.markdown)
- [Commits](https://github.com/rails/web-console/compare/v4.1.0...v4.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-21 16:33:16 +00:00
dependabot[bot]
024c9b5473 Bump good_migrations from 0.1.0 to 0.2.1
Bumps [good_migrations](https://github.com/testdouble/good-migrations) from 0.1.0 to 0.2.1.
- [Release notes](https://github.com/testdouble/good-migrations/releases)
- [Changelog](https://github.com/testdouble/good-migrations/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testdouble/good-migrations/compare/v0.1.0...v0.2.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-21 16:32:37 +00:00
dependabot[bot]
55e65a713b Bump ffaker from 2.20.0 to 2.21.0
Bumps [ffaker](https://github.com/ffaker/ffaker) from 2.20.0 to 2.21.0.
- [Release notes](https://github.com/ffaker/ffaker/releases)
- [Changelog](https://github.com/ffaker/ffaker/blob/main/Changelog.md)
- [Commits](https://github.com/ffaker/ffaker/compare/v2.20.0...v2.21.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-21 16:31:48 +00:00
Filipe
4b33593a8a Merge pull request #9271 from AgriculturaFamiliar/9256-update-aws-sdk
Remove old aws-sdk gem
2022-06-21 17:26:52 +01:00
Filipe
dd079c4dce Merge pull request #9154 from openfoodfoundation/ability-to-desactivate-users
Add disabled_at logic on spree users
2022-06-21 16:57:35 +01:00
Jean-Baptiste Bellet
400a490ec5 Display fee name instead of fee type
+ update specs as well
2022-06-21 16:08:45 +02:00
Jean-Baptiste Bellet
3c05fc3c80 Add fees name for a variant to its serializer 2022-06-21 14:42:22 +02:00
Jean-Baptiste Bellet
976e326bbd Add method fees_name_by_type_for that returns fees name for a variant 2022-06-21 14:20:59 +02:00
François Turbelin
606a56a64d Improve specs 2022-06-21 10:08:12 +02:00
François Turbelin
31f8864b4a Add system spec for Admin user disable feature 2022-06-21 10:08:12 +02:00
François Turbelin
76ea7089d9 Implement suggestions 2022-06-21 10:08:12 +02:00
François Turbelin
bc9dcc7cbc Block disabled users from logging in 2022-06-21 10:08:12 +02:00
François Turbelin
39a6b5d20f Add disabled_at logic on spree users 2022-06-21 10:08:12 +02:00
Maikel
f6e2cb52e0 Merge pull request #9323 from mkllnk/mime
Restore dependency to mime-types
2022-06-21 11:19:56 +10:00
Maikel Linke
5406978e2d Restore dependency to mime-types
Our db2fog backups require the mime-types gem but it was removed with
paperclip. Luckily, backups have still been working because the gem was
still available.
2022-06-21 10:52:57 +10:00
Maikel
553046addb Merge pull request #9255 from jibees/fix-admin-taxonomies-interface
Fix admin taxonomies interface
2022-06-21 09:41:55 +10:00
Maikel
d5bec7e538 Merge pull request #9269 from jibees/fix-@order-distributor-website-in-/order/ORDER_ID-page
As a customer, on an order page, distributor website should link to the order that is actually showing
2022-06-21 09:39:46 +10:00
Jean-Baptiste Bellet
bc43028cb1 On User confirmation, link all already placed orders to this new user
if user.email == customer.email

Co-Authored-By: Maikel <maikel@email.org.au>
2022-06-20 15:39:22 +02:00
Diego de Araújo Martinez Camarinha
a4fa4a4803 Remove aws sdk patch
This was introduced because an old version of the aws sdk was used. Now
with a newer version installed, this should not be need anymore
2022-06-20 07:10:53 -03:00
Diego de Araújo Martinez Camarinha
c4bd37413d Remove old aws-sdk dependency
It is on version 1.67.0 and has an old json dependency that makes
bundler unable to solve conflicts. That means it's not possible to
install other gems because of it
2022-06-20 07:10:53 -03:00
Maikel Linke
d78cbce4f3 Remove accidental modification of the db schema
fa74dae99c changed the schema file even
though the migration doesn't touch the database structure. A previous
development version of the migration did this but the finally merged
version didn't. So this schema is not valid. Let's hope that nobody set
up a new instance with the changed schema and we just fix it to what it
was before.
2022-06-20 14:47:29 +10:00
Maikel Linke
ae8f14a671 Avoid style warnings in spec and reduce indent
Defining a spec within a module is not necessary. It's better to use the
standard describe syntax.
2022-06-20 13:26:20 +10:00
Maikel Linke
d085d15b99 Add example for report regression testing
I've done it only for a CSV file now but we can extend that to other
formats and test the actual result including formatting.
2022-06-20 13:26:18 +10:00
Maikel Linke
e37ec4b552 Avoid auto-formatting currencies
Each report can define formats for each column. But currency formatting
was also applied to all columns that had "price" in the name. Removing
this automation gives us more control and we can decide for each case.

At the moment, the currency formatting in Excel spreadsheets is not
ideal and it's easier to keep it as number.

This PR introduces a visual regression as prices are not formatted as
nicely but the columns can be used in calculations.
2022-06-20 13:18:41 +10:00
LioPeng
fd4409c24d Styled text colour of admin order dropdown menu 2022-06-20 12:15:13 +10:00
Rachel Arnould
40f3d4df4f Merge pull request #9312 from filipefurtad0/revert_9268_supplier_totals
Splits results per supplier on OC Distributor Totals by Supplier report
2022-06-17 10:53:19 +02:00
Jean-Baptiste Bellet
049620add7 Update all locales with the latest Transifex translations 2022-06-17 09:33:01 +02:00
jibees
d7073c03d0 Merge pull request #9294 from openfoodfoundation/transifex
Transifex
2022-06-17 09:31:17 +02:00
jibees
19b57aa74e Merge pull request #9246 from jibees/9228-do-not-include-shipping-method-in-the-summary-row-for-Order-Cycle-Distributer-Totals-by-Supplier-report
Do not include shipping method in the summary row for the Order Cycle Distributer Totals by Supplier report
2022-06-17 09:30:31 +02:00
jibees
06685fb1c1 Merge pull request #9308 from jibees/update-yarn-lock
Update yarn.lock
2022-06-17 09:30:12 +02:00
saunmanoj888
85a1a3627a Add translation for order-cycle-status on new order creation from admin 2022-06-16 23:28:11 +05:30
neilnaveen
5c1bdc7698 chore: Set permissions for GitHub actions
Restrict the GitHub token permissions only to the required ones; this way, even if the attackers will succeed in compromising your workflow, they won’t be able to do much.

- Included permissions for the action. https://github.com/ossf/scorecard/blob/main/docs/checks.md#token-permissions

https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions

https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs

[Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests](https://securitylab.github.com/research/github-actions-preventing-pwn-requests/)

Signed-off-by: neilnaveen <42328488+neilnaveen@users.noreply.github.com>
2022-06-16 01:08:27 +00:00
filipefurtad0
0a70e091cd Reverts #9268 for supplier totals 2022-06-15 13:50:22 +01:00
filipefurtad0
9ab672d0b1 Restarts checkout flow for state 'confirmation' 2022-06-15 10:35:40 +01:00
Jean-Baptiste Bellet
7f52789dcf Update yarn.lock 2022-06-15 10:26:26 +02:00
jibees
df6e107dd3 Merge pull request #9305 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-docs-6.5.9
Bump @storybook/addon-docs from 6.5.7 to 6.5.9
2022-06-15 09:09:38 +02:00
jibees
64cc6d21f1 Merge pull request #9307 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-controls-6.5.9
Bump @storybook/addon-controls from 6.5.7 to 6.5.9
2022-06-15 09:09:26 +02:00
dependabot[bot]
f04c5bace1 Bump @storybook/addon-controls from 6.5.7 to 6.5.9
Bumps [@storybook/addon-controls](https://github.com/storybookjs/storybook/tree/HEAD/addons/controls) from 6.5.7 to 6.5.9.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.5.9/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.5.9/addons/controls)

---
updated-dependencies:
- dependency-name: "@storybook/addon-controls"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-15 06:41:36 +00:00
dependabot[bot]
55f4f54e18 Bump @storybook/addon-docs from 6.5.7 to 6.5.9
Bumps [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/addons/docs) from 6.5.7 to 6.5.9.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.5.9/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.5.9/addons/docs)

---
updated-dependencies:
- dependency-name: "@storybook/addon-docs"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-15 06:41:29 +00:00
jibees
95586a0e38 Merge pull request #9306 from openfoodfoundation/dependabot/npm_and_yarn/storybook/server-6.5.9
Bump @storybook/server from 6.5.7 to 6.5.9
2022-06-15 08:40:47 +02:00
Jean-Baptiste Bellet
8ba8a95eb7 Convert key to sym, as it could be a string (in case of dynamic header)
ie. the tax rate

Update specs to check this case when feature toggle is activated or not
2022-06-14 15:39:06 +02:00
dependabot[bot]
d9f82ff619 Bump @storybook/server from 6.5.7 to 6.5.9
Bumps [@storybook/server](https://github.com/storybookjs/storybook/tree/HEAD/app/server) from 6.5.7 to 6.5.9.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.5.9/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.5.9/app/server)

---
updated-dependencies:
- dependency-name: "@storybook/server"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-14 09:04:50 +00:00
filipefurtad0
f3ff835902 Adds a spec to assert on the order state change 2022-06-14 08:58:54 +01:00
Maikel Linke
004c7eef9e Show SVG product images 2022-06-14 15:35:55 +10:00
Maikel Linke
f3f0a84915 Display image upload error as alert
Not the nicest UX but better than nothing.
2022-06-14 15:11:26 +10:00
Maikel Linke
5f11b6a650 Respond with errors if image upload fails 2022-06-14 15:06:17 +10:00
Maikel Linke
6b733ad7e2 Increase readability of image controller spec
Best viewed without whitespace changes.

- Decrease indent.
- Move `let` to top like in other specs.
- Avoid `let!` to speed up the specs.
2022-06-14 14:56:40 +10:00
Maikel Linke
831aa3aae0 Simplify ProductImagesController 2022-06-14 14:50:55 +10:00
Maikel
e733e9a5f8 Merge pull request #9300 from filipefurtad0/enterprise_factory_logo_promo
Adds optional promo and logo images as traits to the enterprise factory
2022-06-14 09:19:43 +10:00
filipefurtad0
464496befa Adds traits to enterprise_factory and spec 2022-06-13 16:40:55 +01:00
filipefurtad0
9c8756bf42 Makes the spec red: deletes file attachement from assertion 2022-06-13 16:26:09 +01:00
Filipe
ef0a346076 Merge pull request #9212 from jibees/9140-assign-a-customer-to-an-order-in-admin-section
When creating an order, and assigning a customer, fill all the customer inputs in the shipping/billing address form
2022-06-13 14:57:31 +01:00
Filipe
8b7d474f4c Merge pull request #9177 from jibees/9067-save-all-data-when-submitting-the-form
Admin, Create a new product: re-fill the form with fields values if any validation errors occurs when submitting
2022-06-13 14:54:02 +01:00
Jean-Baptiste Bellet
bf40e59bec Should link to order.distributor website
- order: the order summary the customer is seeing on this page
 - current_order: the order is the customer is check-outing

+ add specs
2022-06-13 14:52:20 +02:00
Jean-Baptiste Bellet
7920c1c4e8 Update Customers reports spec for feature report_inverse_columns_logic 2022-06-13 14:39:12 +02:00
Jean-Baptiste Bellet
16babf8250 Don't modify params object, but use an intermediate variable
`@params_fields_to_show`
2022-06-13 14:39:12 +02:00
Jean-Baptiste Bellet
214a470896 Remove the report Subtype selector in the Rendering Options section
+ add all sub-reports in the index page
all of this is behind a feature toggle
2022-06-13 14:39:12 +02:00
Transifex-Openfoodnetwork
8b1b9f1460 Updating translations for config/locales/en_GB.yml 2022-06-13 19:54:52 +10:00
Transifex-Openfoodnetwork
0335d8ac4f Updating translations for config/locales/fr_CH.yml 2022-06-11 00:52:56 +10:00
Transifex-Openfoodnetwork
91818a256b Updating translations for config/locales/de_CH.yml 2022-06-11 00:44:06 +10:00
Konrad
ba69a9fbeb Updated installation instructions 2022-06-10 15:36:43 +02:00
Filipe
9fee4f1554 Merge pull request #9203 from AgriculturaFamiliar/remove-closed-associated-adjustments-button
Remove closed associated adjustments button
2022-06-10 10:10:50 +01:00
Jean-Baptiste Bellet
ead112dd57 Update all locales with the latest Transifex translations 2022-06-10 10:10:02 +02:00
jibees
0ed99c5ebd Merge pull request #9132 from jibees/8540-handle-items-in-bulk-order-management-page
Handle `items` in bulk order management
2022-06-10 10:08:14 +02:00
jibees
0b9e55732d Merge pull request #9251 from openfoodfoundation/dependabot/npm_and_yarn/eventsource-1.1.1
Bump eventsource from 1.1.0 to 1.1.1
2022-06-10 10:07:54 +02:00
jibees
ffb4337b72 Merge pull request #9260 from openfoodfoundation/transifex
Transifex
2022-06-10 10:07:05 +02:00
jibees
e1fc4accab Merge pull request #9288 from mkllnk/9279-image-order-display
Show order and admin page despite broken image
2022-06-10 10:01:27 +02:00
Rachel Arnould
834bf04185 Merge pull request #9286 from jibees/9281-invoice-print-failed-when-enterprise-having-a-logo
Admin, print an invoice with alternative mode: fix an issue when enterprise has a logo
2022-06-10 10:00:40 +02:00
Maikel Linke
bec2a873de Show order and admin page despite broken image
Avoiding:

    ActiveStorage::InvariableError

Affects the admin order page and the customer's order confirmation page.
2022-06-10 15:35:21 +10:00
Maikel Linke
87c275a1f7 Spec order confirmation page 2022-06-10 15:35:18 +10:00
Filipe
fa74dae99c Merge pull request #9122 from apricot12/8959-Remove-addresse-without-phone
Migration to remove addresses with empty phone number.
2022-06-09 18:52:55 +01:00
Rachel Arnould
9e1226be28 Merge pull request #9268 from jibees/9267-Wrong-report-when-selecting-multiple-shops
Split orders across several shops of same order cycle instead of aggregating in several Orders and Fulfilment reports
2022-06-09 18:03:13 +02:00
Maikel Linke
d27d98419f Fix typo in address migration 2022-06-09 20:54:46 +05:30
Nihal Mohammed
870eb8961e Update migration 2022-06-09 20:54:46 +05:30
Nihal Mohammed
b6b81a38d9 Migration to nullify spree_users_bill_address_id_fk foreign key on delete and remove addresses with empty phone. 2022-06-09 20:54:34 +05:30
Filipe
0dc6fbf7e1 Merge pull request #9278 from mkllnk/sub-email
Fix sending subscription summary emails for shops with logo
2022-06-09 13:43:50 +01:00
Rachel Arnould
4a91919825 Merge pull request #9259 from jibees/reports-format-date-in-summary-row-as-in-normal-row
Reports, Order Cycle Customer Totals: Format date in summary row as it's formatted in a row
2022-06-09 14:29:01 +02:00
Jean-Baptiste Bellet
2e0851c02f Use the method logo_url 2022-06-09 14:15:41 +02:00
Maikel Linke
dd659f16c0 Correct method name for shop logo in email 2022-06-09 16:00:57 +10:00
Jean-Baptiste Bellet
bcc4ec365d Format date in summary row as it's formatted in a row
for order cycle customer totals report

+ update specs
2022-06-08 12:18:50 +02:00
jibees
08cc6ab169 Merge pull request #9270 from jibees/fix-yarn-lock-file
Update `yarn.lock` file by running `yarn` command
2022-06-08 12:17:50 +02:00
Jean-Baptiste Bellet
5868a281a3 Update yarn.lock file with yarn command
Probably a bad update with storybook
2022-06-08 10:39:18 +02:00
Jean-Baptiste Bellet
3defd81ca6 Group by e.order.distributor_id on Orders & Fulfillment Reports 2022-06-08 09:47:09 +02:00
Filipe
43888f7f3c Merge pull request #9126 from mkllnk/active-storage
[Breaking] Replace Paperclip with Active Storage
2022-06-07 11:14:39 +01:00
Jean-Baptiste Bellet
2c2c48071d Since query_result method is the same, use inheritance 2022-06-07 10:53:25 +02:00
jibees
256ae5b743 Merge pull request #9265 from openfoodfoundation/dependabot/npm_and_yarn/storybook/server-6.5.7
Bump @storybook/server from 6.5.6 to 6.5.7
2022-06-07 10:19:43 +02:00
jibees
d9ae67e2e7 Merge pull request #9264 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-controls-6.5.7
Bump @storybook/addon-controls from 6.5.6 to 6.5.7
2022-06-07 10:19:31 +02:00
dependabot[bot]
2a2662ecb3 Bump @storybook/server from 6.5.6 to 6.5.7
Bumps [@storybook/server](https://github.com/storybookjs/storybook/tree/HEAD/app/server) from 6.5.6 to 6.5.7.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.5.7/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.5.7/app/server)

---
updated-dependencies:
- dependency-name: "@storybook/server"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-07 07:50:02 +00:00
dependabot[bot]
e268410849 Bump @storybook/addon-controls from 6.5.6 to 6.5.7
Bumps [@storybook/addon-controls](https://github.com/storybookjs/storybook/tree/HEAD/addons/controls) from 6.5.6 to 6.5.7.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.5.7/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.5.7/addons/controls)

---
updated-dependencies:
- dependency-name: "@storybook/addon-controls"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-07 07:49:48 +00:00
jibees
f548afba3e Merge pull request #9263 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-docs-6.5.7
Bump @storybook/addon-docs from 6.5.6 to 6.5.7
2022-06-07 09:49:09 +02:00
dependabot[bot]
fb95c3de27 Bump @storybook/addon-docs from 6.5.6 to 6.5.7
Bumps [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/addons/docs) from 6.5.6 to 6.5.7.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.5.7/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.5.7/addons/docs)

---
updated-dependencies:
- dependency-name: "@storybook/addon-docs"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 09:05:50 +00:00
Transifex-Openfoodnetwork
0225d84c07 Updating translations for config/locales/ko.yml 2022-06-05 23:22:19 +10:00
Transifex-Openfoodnetwork
53308beb58 Updating translations for config/locales/en_FR.yml 2022-06-03 17:52:49 +10:00
Transifex-Openfoodnetwork
8eae912510 Updating translations for config/locales/fr.yml 2022-06-03 17:52:05 +10:00
Transifex-Openfoodnetwork
252c385e5e Updating translations for config/locales/de_DE.yml 2022-06-03 17:07:47 +10:00
Maikel Linke
3e3fc4a5a2 Update translations 2022-06-03 10:43:36 +10:00
Filipe
4a2fd10bdb Merge pull request #9237 from mgrigoriev8109/bug/update-tracking-font
Fix shipped email tracking information font size
2022-06-02 18:37:27 +01:00
Filipe
1a2c1d004c Merge pull request #9239 from kvaithin/9233-spacing-between-btns
Add spacing between coordinator dropdown and continue button
2022-06-02 18:35:08 +01:00
Filipe
6ff2d4a9d5 Merge pull request #9109 from apricot12/8917-Link-to-enterprise-site
Adding a link to enterprise's own site from Order confirmation page.
2022-06-02 17:59:03 +01:00
Filipe
b3d81154e6 Merge pull request #9174 from georgethoppil/nan-items-subscription
Updating order cycle will ensure any $NaN subscription item prices to be recalculated
2022-06-02 17:28:54 +01:00
Jean-Baptiste Bellet
68bd1df312 Handle rename with context menu on the first taxon ie. the root one
Also rename the main input field (sort of title) when updating the root taxon name with contextual menu
2022-06-02 16:03:16 +02:00
Jean-Baptiste Bellet
4bbbae68c7 Do not send parent_id is it's something else than a number
When moving element on top, `new_parent.attr("id")` was `taxonomy_tree` which was causing DB error
2022-06-02 15:41:44 +02:00
Jean-Baptiste Bellet
817b5f437f Authorize :position params 2022-06-02 15:41:44 +02:00
Jean-Baptiste Bellet
121c9eed3b Replace Spree.url().clone() by new URL() 2022-06-02 15:41:44 +02:00
Filipe
4a15ed9b39 Merge pull request #9190 from georgethoppil/duplicate-transaction-fees
Destroy all adjustments on cart empty
2022-06-02 11:36:27 +01:00
dependabot[bot]
d3a52303a4 Bump eventsource from 1.1.0 to 1.1.1
Bumps [eventsource](https://github.com/EventSource/eventsource) from 1.1.0 to 1.1.1.
- [Release notes](https://github.com/EventSource/eventsource/releases)
- [Changelog](https://github.com/EventSource/eventsource/blob/master/HISTORY.md)
- [Commits](https://github.com/EventSource/eventsource/compare/v1.1.0...v1.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-02 08:43:58 +00:00
jibees
1d8b8c3be8 Merge pull request #9253 from jibees/fix-deployment
add `@babel/preset` dependency
2022-06-02 10:42:18 +02:00
Jean-Baptiste Bellet
454a4e3435 add @babel/preset dependency
Add to dependencies (not dev ones)
2022-06-02 10:07:43 +02:00
Maikel Linke
076efd653d Correct checksum of big files stored on AWS S3 2022-06-02 12:28:52 +10:00
Arthur
05c8414e0d Merge branch 'openfoodfoundation:master' into remove-closed-associated-adjustments-button 2022-06-01 16:03:43 -03:00
Maikel Linke
4facab0335 Guard against invariable file types
Australian production had one JPG image which was not recognised as
such. The `content_type` was missing and trying to generate a URL for a
variant raised an error and crashed the page.

Testing for `variable?` includes testing for `attached?` and is more
defensive.
2022-06-01 17:16:55 +10:00
Maikel Linke
bea080a9b1 Remove Paperclip
It has been replaced by Active Storage.
2022-06-01 17:16:55 +10:00
Maikel Linke
86731d7e30 Remove compatibility code for migrating files
The migration should be complete now.
2022-06-01 17:16:55 +10:00
Maikel Linke
b7efa1b018 Replace Paperclip on Spree::Image 2022-06-01 17:16:55 +10:00
Maikel Linke
4a0ed99919 Replace Paperclip on Enterprise model
We configured Paperclip to convert images to JPG in some cases but I
omitted that here because we don't need it. If an image is better
represented as PNG or another format then the user should be able to
choose that.

Some specs were also testing the generated URL but the Active Storage
URL doesn't contain a style name anymore and it's not helpful to test
the URL.
2022-06-01 17:16:55 +10:00
Maikel Linke
45995ac984 Replace Paperclip on EnterpriseGroup 2022-06-01 17:16:55 +10:00
Maikel Linke
421ffae78c Replace Paperclip on TermsOfServeFile 2022-06-01 17:16:54 +10:00
Maikel Linke
f29e569f1b Remove Paperclip migration code 2022-06-01 17:16:54 +10:00
Maikel Linke
727eef3c4f Replace Paperclippable ContentConfig
The old Paperclip configuration was very clever and easy to use but it
was also a complicated implementation building on the complicated Spree
preference system.

I simplified this with Active Storage, storing simple references to blob
ids and default URLs as backup.
2022-06-01 17:16:54 +10:00
jibees
ddd9ae6ce2 Merge pull request #9208 from openfoodfoundation/transifex
Transifex
2022-06-01 08:06:35 +02:00
Transifex-Openfoodnetwork
fd1cd4a28a Updating translations for config/locales/fr_CA.yml 2022-06-01 09:51:26 +10:00
Transifex-Openfoodnetwork
9261d7b8fe Updating translations for config/locales/en_CA.yml 2022-06-01 09:30:59 +10:00
Mikhail Grigoriev
b169f1baf1 Fix shipped email's tracking information font size using p.lead 2022-05-31 14:39:02 -04:00
Maikel Linke
2e05210596 Preview shipping emails with tracking if present 2022-05-31 14:36:28 -04:00
Jean-Baptiste Bellet
78c2f76a3f Introduce FeatureToggle for columns logic
relative to a46416a98
2022-05-31 15:57:39 +02:00
Jean-Baptiste Bellet
c102eecb18 Introduce FeatureToggle for columns logic
This commit is relative to 9094a65ab commit
2022-05-31 15:57:39 +02:00
Jean-Baptiste Bellet
a6dc19f717 Introduce FeatureToggle for columns logic
Key is `report_inverse_columns_logic`

This commit is relative to 985893667 commit
2022-05-31 15:57:38 +02:00
Jean-Baptiste Bellet
8fec5f1464 Use mixins useRenderCustomer 2022-05-31 09:00:24 +02:00
Jean-Baptiste Bellet
39b7f56e6d Use mixins useSearchCustomer
Prefer composition vs. inheritance
2022-05-31 08:57:11 +02:00
Maikel
8645277a05 Merge pull request #9204 from AgriculturaFamiliar/8755-fix-search-input
Select all text upon focus on map search input for Google Maps
2022-05-31 10:57:02 +10:00
Maikel
f3d9b3d7ed Merge pull request #9157 from jibees/SC-sort-shipping-methods-case-insenstive
Split Checkout: Sort shipping methods case insensitive
2022-05-31 10:54:43 +10:00
jibees
c22c1ddf32 Merge pull request #9243 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-controls-6.5.6
Bump @storybook/addon-controls from 6.4.22 to 6.5.6
2022-05-30 17:41:12 +02:00
jibees
97f0d76fcd Merge pull request #9244 from openfoodfoundation/dependabot/npm_and_yarn/storybook/server-6.5.6
Bump @storybook/server from 6.4.22 to 6.5.6
2022-05-30 17:41:01 +02:00
dependabot[bot]
d70acb57b6 Bump @storybook/addon-controls from 6.4.22 to 6.5.6
Bumps [@storybook/addon-controls](https://github.com/storybookjs/storybook/tree/HEAD/addons/controls) from 6.4.22 to 6.5.6.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.5.6/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.5.6/addons/controls)

---
updated-dependencies:
- dependency-name: "@storybook/addon-controls"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 15:18:10 +00:00
dependabot[bot]
ab52028d1c Bump @storybook/server from 6.4.22 to 6.5.6
Bumps [@storybook/server](https://github.com/storybookjs/storybook/tree/HEAD/app/server) from 6.4.22 to 6.5.6.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.5.6/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.5.6/app/server)

---
updated-dependencies:
- dependency-name: "@storybook/server"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 15:17:03 +00:00
jibees
0544baa75c Merge pull request #9245 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-docs-6.5.6
Bump @storybook/addon-docs from 6.4.22 to 6.5.6
2022-05-30 17:16:01 +02:00
Jean-Baptiste Bellet
a46416a98e Change UX to transform from fields_to_hide to fields_to_show
Fill `params[:fields_to_show]` with its default value
2022-05-30 15:34:08 +02:00
Jean-Baptiste Bellet
9094a65ab6 Remove fields_to_hide as unecessary 2022-05-30 15:34:08 +02:00
Jean-Baptiste Bellet
9858936677 Starts transforming fields_to_hide to fields_to_show 2022-05-30 15:34:08 +02:00
Jean-Baptiste Bellet
454e4a4100 Initialize on_demand checkbox value 2022-05-30 14:54:47 +02:00
Jean-Baptiste Bellet
70baccd76c Create a method to handle redirect after save
and the get rid of rubocop linter error
2022-05-30 14:54:47 +02:00
Jean-Baptiste Bellet
72ce2e5598 Initialize display_as 2022-05-30 14:54:47 +02:00
Jean-Baptiste Bellet
df1b126852 Initialize unit_value_with_description
+ Specify to empty field since its now filled with default value `1.0`
2022-05-30 14:54:47 +02:00
Jean-Baptiste Bellet
134202bedd Initialize value for variant_unit_with_scale 2022-05-30 14:54:47 +02:00
Jean-Baptiste Bellet
f6981e4320 Initialize value with ng-model: product.description 2022-05-30 14:54:47 +02:00
Jean-Baptiste Bellet
c78e734dee Initialize with submitted value on_hand 2022-05-30 14:54:47 +02:00
Jean-Baptiste Bellet
be0065ad1a Initialize value with @product.price
Co-Authored-By: Maikel <maikel@email.org.au>
2022-05-30 14:54:47 +02:00
Jean-Baptiste Bellet
68f8413cda Remplace collection_select by select and fill the selected item
+ add tom-select controller
2022-05-30 14:54:47 +02:00
Jean-Baptiste Bellet
e058cd3e06 Create spec to check that every filled fields must be filled on for submit
when validation errors occurs
2022-05-30 14:54:47 +02:00
Jean-Baptiste Bellet
ec338bca9c Do not include shipping method in the summary row 2022-05-30 11:14:29 +02:00
dependabot[bot]
acda515c8a Bump @storybook/addon-docs from 6.4.22 to 6.5.6
Bumps [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/addons/docs) from 6.4.22 to 6.5.6.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.5.6/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.5.6/addons/docs)

---
updated-dependencies:
- dependency-name: "@storybook/addon-docs"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-30 09:05:55 +00:00
kvaithin
ad0effc565 spacing between co ordinator dropdown and continue btn 2022-05-28 11:13:16 +01:00
Arthur Vieira
e0241b6866 Remove test associated without 'unlock' selected
Leaves the other test that should be the default behaviour and renames
it accordingly.
2022-05-26 10:12:39 -03:00
Arthur Vieira
95010fcd12 Remove the unlock condition in shipment controller
This assumes unlock is always true so the shipment's fee adjustments
always opens and closes.
2022-05-26 09:21:48 -03:00
Arthur Vieira
0fb9cc0f2a Remove associated adjustments radio button
Removes the 'Associated Adjustment Closed' options from the order edit
page (/admin/orders/XXXXX/edit).
2022-05-26 09:12:19 -03:00
Maikel
b7cf397e15 Merge pull request #9227 from lin-d-hop/master
[Draft] Restore previous functionality for grouping product totals in Orders and Fulfilment reports
2022-05-26 10:18:11 +10:00
lin-d-hop
fb2279d26d Draft PR with potential fix to the reports S1. Untested. 2022-05-25 22:08:05 +01:00
Rachel Arnould
cb6cb05eca Merge pull request #9192 from jibees/9127-distinct-line-items-with-different-price
For all `orders_and_fulfillment` reports, distinct product by `variant`, `price` & `order_id`
2022-05-25 12:44:22 +02:00
Rachel Arnould
d0acd47935 Merge pull request #9219 from jibees/add-order-date-range-to-packing-reports
Add order date range to packing reports
2022-05-25 12:43:59 +02:00
Jean-Baptiste Bellet
e32797d2fd Do not group by order 2022-05-25 11:42:06 +02:00
Jean-Baptiste Bellet
f34b68a6e3 Add order date range to packing reports 2022-05-25 10:28:38 +02:00
Jean-Baptiste Bellet
760de3b507 Do not set null value to select controller 2022-05-24 12:35:23 +02:00
Jean-Baptiste Bellet
5e27795a15 Special method to handle customer with no bill_address 2022-05-24 12:30:11 +02:00
Jean-Baptiste Bellet
2c29b1f60f Replace Angular directive and use stimulus controller
+ Update specs as well
2022-05-24 12:30:00 +02:00
Jean-Baptiste Bellet
ce058c6e36 Create a SelectCustomer controller
To be used in `/admin/orders/ORDER_ID/customer` page

 - Fetch `/admin/search/customers.json?` with query as params
 - Render each items response thanks to `renderOption()` method
 - `onItemSelect()` is here to fill the associated form in the page
2022-05-24 12:30:00 +02:00
Jean-Baptiste Bellet
5018f824f5 Prepare tom-select controller to inherit others controllers 2022-05-24 12:30:00 +02:00
Jean-Baptiste Bellet
68cb8d9965 Formatting file 2022-05-24 12:30:00 +02:00
jibees
f914a37a28 Merge pull request #9211 from openfoodfoundation/revert-9151-9140-fill-all-the-input-when-selecting-a-customer
Revert "When creating an order, and assigning a customer, fill all the customer inputs in the shipping/billing address form"
2022-05-24 10:35:46 +02:00
jibees
641df45fcd Revert "When creating an order, and assigning a customer, fill all the customer inputs in the shipping/billing address form" 2022-05-24 09:50:18 +02:00
georgethoppil
ec7d4b7c21 Restart checkout flow on cart empty if state of checkout is payment 2022-05-23 11:41:10 -04:00
Transifex-Openfoodnetwork
94f87b3bd7 Updating translations for config/locales/de_DE.yml 2022-05-23 22:33:33 +10:00
Maikel
a3d996d5f5 Merge pull request #9197 from openfoodfoundation/dependabot/npm_and_yarn/tom-select-2.0.3
Bump tom-select from 2.0.2 to 2.0.3
2022-05-23 16:47:13 +10:00
Diego de Araújo Martinez Camarinha
8a62d95c48 Select all text upon focus on map search input for Google Maps
On the map page, when we search a location and than want to search for
another, we would have to delete letter by letter of the previous search
text.

Now, when we click on the search input to type another search text, the
previous text will be all selected and we can remove everything with
just hitting the backspace once
2022-05-20 11:06:34 -03:00
Jean-Baptiste Bellet
7b2da4dbe4 Update all locales with the latest Transifex translations 2022-05-20 14:41:34 +02:00
jibees
0bb523c399 Merge pull request #9201 from openfoodfoundation/transifex
Transifex
2022-05-20 14:38:28 +02:00
Transifex-Openfoodnetwork
ca3c896b2e Updating translations for config/locales/nb.yml 2022-05-20 21:16:32 +10:00
Transifex-Openfoodnetwork
34286a8f8d Updating translations for config/locales/en_GB.yml 2022-05-20 21:13:33 +10:00
dependabot[bot]
533acda922 Bump tom-select from 2.0.2 to 2.0.3
Bumps [tom-select](https://github.com/orchidjs/tom-select) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/orchidjs/tom-select/releases)
- [Commits](https://github.com/orchidjs/tom-select/compare/v2.0.2...v2.0.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-20 09:05:25 +00:00
Jean-Baptiste Bellet
be88b95e8c orders_and_fulfillment reports, distinct product by variant & price 2022-05-19 10:42:53 +02:00
Maikel Linke
f4c7f24cce Remove old config option comment 2022-05-19 10:03:16 +10:00
Rachel Arnould
8779ef6b77 Merge pull request #9187 from jibees/9052-add-phone-number-to-alternative-invoice
Add phone number and email address to alternative invoice
2022-05-18 18:59:04 +02:00
Rachel Arnould
5dfc3c7a62 Merge pull request #9151 from jibees/9140-fill-all-the-input-when-selecting-a-customer
When creating an order, and assigning a customer, fill all the customer inputs in the shipping/billing address form
2022-05-18 17:41:59 +02:00
Rachel Arnould
9873380b94 Merge pull request #9185 from jibees/9184-remove-json-download-option-from-reports
Reports: Remove JSON as a download option
2022-05-18 10:11:33 +02:00
georgethoppil
a37f54e4b3 Find subscriptions in schedule to recalculate nil estimate price 2022-05-17 20:58:25 -04:00
georgethoppil
03b24bfc38 Destroy all adjustments on cart empty 2022-05-17 20:21:47 -04:00
Jean-Baptiste Bellet
cf687864cc Update specs to check on both invoice models presence of phone and email 2022-05-17 13:58:05 +02:00
Jean-Baptiste Bellet
d28545a7b2 Display both phone number and email to the alternative invoice 2022-05-17 12:10:41 +02:00
Jean-Baptiste Bellet
0b71f7298e Remove JSON as a download option 2022-05-17 10:47:19 +02:00
Maikel
9992f9c83b Merge pull request #9150 from mkllnk/active-storage-fix
Correct checksum in Paperclip migration task
2022-05-17 16:14:03 +10:00
jibees
f09b719af6 Merge pull request #9182 from openfoodfoundation/transifex
Transifex
2022-05-16 15:52:18 +02:00
Transifex-Openfoodnetwork
6b3ffddb74 Updating translations for config/locales/en_FR.yml 2022-05-16 20:35:31 +10:00
Transifex-Openfoodnetwork
0c7f962bf0 Updating translations for config/locales/fr.yml 2022-05-16 20:33:35 +10:00
Rachel Arnould
0f618dfbf9 Merge pull request #9032 from seballot/reports-improvement
Reports improvement
2022-05-16 10:29:28 +02:00
jibees
513b26f47c Merge pull request #9176 from openfoodfoundation/transifex
Transifex
2022-05-13 15:39:53 +02:00
jibees
2e3023eacc Merge pull request #9181 from openfoodfoundation/dependabot/npm_and_yarn/karma-6.3.20
Bump karma from 6.3.19 to 6.3.20
2022-05-13 15:38:29 +02:00
dependabot[bot]
2eeeb74374 Bump karma from 6.3.19 to 6.3.20
Bumps [karma](https://github.com/karma-runner/karma) from 6.3.19 to 6.3.20.
- [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.3.19...v6.3.20)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-13 09:04:39 +00:00
Sebastian Castro
1be3b508bf Reports restore original results ordering 2022-05-12 16:54:14 +02:00
Sebastian Castro
294f7c2fb5 Reports restore original columns ordering 2022-05-12 16:54:14 +02:00
Sebastian Castro
89212736e9 Reports fix formatting cells 2022-05-12 16:54:14 +02:00
Sebastian Castro
35b5ca3a51 Csv Report: translate headers 2022-05-12 16:54:14 +02:00
Sebastian Castro
56fab26235 Reports: refactor to easily provide default_params 2022-05-12 16:54:14 +02:00
Sebastian Castro
b7991e5ae8 Packing Report: use field name as columns headers in spreadsheet export 2022-05-12 16:54:14 +02:00
Sebastian Castro
2008c10c6f Reports: use field name as header instead of translated value for raw renders (csv, json) 2022-05-12 16:54:14 +02:00
Sebastian Castro
0218f75f34 Packing Report: hide by default phone and price column to avoid breaking changes 2022-05-12 16:54:14 +02:00
Sebastian Castro
0545c9de28 Packing Report: revert column order change 2022-05-12 16:54:14 +02:00
Sebastian Castro
b54ec4354a Report TaxRate fix 2022-05-12 16:54:14 +02:00
Sebastian Castro
767afe1fba Reports Renderer: whitelist report formats 2022-05-12 16:54:14 +02:00
Sebastian Castro
2dd31d970e Reports Format cells: format some reports 2022-05-12 16:54:14 +02:00
Sebastian Castro
8a943f50ef Reports: Format cells for html, pdf, and spreadsheet
Currency, number format, dates
2022-05-12 16:54:14 +02:00
Sebastian Castro
3b01c44eae Reports: Improve Exports
Improve PDF style and encoding
Include header_row and summary_row, except for CSV and JSON
Style spreadsheets
Use only Xlsx no more Ods format
2022-05-12 16:54:14 +02:00
Sebastian Castro
5105ea345f Reports Refactor 4: Final Touch
Split report_template
Clean code
Adds spec
2022-05-12 16:54:14 +02:00
Sebastian Castro
b259f59d1e Packing Report: Adds new subreport "Pack by product" 2022-05-12 16:54:14 +02:00
Sebastian Castro
eeb525aedb Reports: Ability to hide columns 2022-05-12 16:54:14 +02:00
Sebastian Castro
9874c7996e Reports: Adds Print Button 2022-05-12 16:54:14 +02:00
Sebastian Castro
c7c5965eb5 Report Refactor 3 Clean
No longer need to handle old report class
Remove no longer used OrderGrouper service


sq
2022-05-12 16:54:14 +02:00
Sebastian Castro
cd30012334 Report Refactor 3: Xero Invoices
This one as actually not really been refactored, too much work to rewrite it so I just encapsulated the result within the new methods definitions
2022-05-12 16:54:14 +02:00
Sebastian Castro
42da443901 Report Refactor 3: Enterprise FeeSummary
This one as actually not really been refactored, too much work to rewrite it so I just encapsulated the result within the new methods definitions
2022-05-12 16:54:14 +02:00
Sebastian Castro
b3e1ffe9e2 Report Refactor 3: Products & Inventory 2022-05-12 16:54:14 +02:00
Sebastian Castro
71aca960ee Report Refactor 3: Order Cycle Management 2022-05-12 16:54:13 +02:00
Sebastian Castro
3808398807 Report Refactor 3: Payments 2022-05-12 16:54:13 +02:00
Sebastian Castro
93751f9ccb Report Refactor 3: Customers 2022-05-12 16:54:13 +02:00
Sebastian Castro
944d40e093 Report Refactor 3: BulkCoop 2022-05-12 16:54:13 +02:00
Sebastian Castro
22fe652e89 Report Refactor 3: Orders & Distributors 2022-05-12 16:54:13 +02:00
Sebastian Castro
7a9ed7a73c Report Refactor 3: Order & Fulfilment 2022-05-12 16:54:13 +02:00
Sebastian Castro
b25192c31d Report Refactor 3: Sales Tax 2022-05-12 16:54:13 +02:00
Sebastian Castro
529858946f Report Refactor 3: Packing
Stop using SQL for grouping, so we can use same grouping code than for other reports

Fix query builder default grouping_fields
2022-05-12 16:54:13 +02:00
Sebastian Castro
88bc417868 Report Refactor 3: User & Entreprises 2022-05-12 16:54:13 +02:00
Sebastian Castro
287e8f5845 Reports Refactor 3
Easily group and create header and summary row
Auto format cells when appropriate type (boolean, dates) and render_format (neither csv nor json)
2022-05-12 16:54:13 +02:00
Sebastian Castro
caccbb698b Reports Refactor 2: Fix linting 2022-05-12 16:54:13 +02:00
Sebastian Castro
452a3fa933 Reports Refactor 2: Merge Spree::reports into Admin::Reports 2022-05-12 16:54:13 +02:00
Sebastian Castro
288a35f062 Reports Refactor 2: New templates abstract classes 2022-05-12 16:54:13 +02:00
Sebastian Castro
5f78fdce8b Reports Refactor 2: Move all code to lib/reporting 2022-05-12 16:54:13 +02:00
Sebastian Castro
392166b57a Reports Refactor 2: Simplify render_content? method 2022-05-12 16:54:13 +02:00
Sebastian Castro
2985d2af15 Report Refactor 1 Cleaning
clean no longer used methods
Remove no longer needed require
Delete files not used
Fix Linting
2022-05-12 16:54:13 +02:00
Sebastian Castro
e9513f6172 Report Refactor 1: Enterprise Fee Summary
Disable enterprise fee summary spec for now

Will need to write them again
2022-05-12 16:54:13 +02:00
Sebastian Castro
4a99a7d1de Report Refactor 1: Xero Invoices 2022-05-12 16:54:13 +02:00
Sebastian Castro
41c11baa3f Report Refactor 1: Users & Entreprises 2022-05-12 16:54:13 +02:00
Sebastian Castro
3d1b61ae6e Report Refactor 1: Products & Inventory 2022-05-12 16:54:13 +02:00
Sebastian Castro
881a708ecf Report Refactor 1: Payments 2022-05-12 16:54:13 +02:00
Sebastian Castro
9d943625a3 Report Refactor 1: Sales Tax 2022-05-12 16:54:13 +02:00
Sebastian Castro
e20c2e3ced Report Refactor 1: Orders & Distributors 2022-05-12 16:54:13 +02:00
Sebastian Castro
01be6fb1f3 Report Refactor 1: Order Cycle Management 2022-05-12 16:54:13 +02:00
Sebastian Castro
1fee45035c Report Refactor 1: Customers 2022-05-12 16:54:12 +02:00
Sebastian Castro
e55462d18b Report Refactor 1: Orders & Fulfilment 2022-05-12 16:54:12 +02:00
Sebastian Castro
09247b21cd Reports Refactor 1
Use code closer to the new packing report controller
Handle nil @report_subtypes
2022-05-12 16:54:12 +02:00
Sebastian Castro
209b56ffd7 Packing Report: Better print 2022-05-12 16:54:12 +02:00
Sebastian Castro
cbb6bd63d4 Print: load css, hide navbar 2022-05-12 16:54:12 +02:00
Sebastian Castro
213c0dd060 Packing Report: add price and reorder columns
Adds price column
last_name column first because it's used for ordering
2022-05-12 16:54:12 +02:00
Sebastian Castro
d53d38906a Packing Report: Refactor view to be reusable by other reports
For now this view is used only in the context of packing, but later we would move all existing rpeort to use same view
2022-05-12 16:54:12 +02:00
Sebastian Castro
1ff98a1d8a Reports: Improve UI 2022-05-12 16:54:12 +02:00
Transifex-Openfoodnetwork
f012559ca8 Updating translations for config/locales/cy.yml 2022-05-12 21:06:24 +10:00
Maikel Linke
aafa416b9c Transifex update 2022-05-12 12:22:36 +10:00
Maikel
cae032a224 Merge pull request #9162 from openfoodfoundation/transifex
Transifex
2022-05-12 12:18:52 +10:00
Maikel Linke
94d8ada362 Use checksum of *original* image in Paperclip migration 2022-05-12 12:13:12 +10:00
Maikel Linke
92677385fa Correct checksum in Paperclip migration task
Active Storage needs a checksum for each file and AWS S3 provides this
checksum as "ETag". They are both MD5 but AWS stores it as hexdigest and
Active Storage as base64digest. We need to convert it from on to the
other to get a valid checksum for Active Storage.

Where the migration task has already run (only staging servers), delete all
Active Storage data first and then run the task again:

  bundle exec rake db:migrate:down VERSION=20220316055458
  bundle exec rake db:migrate

  bundle exec rake from_paperclip_to_active_storage:copy_content_config
  bundle exec rake from_paperclip_to_active_storage:migrate
2022-05-12 12:13:12 +10:00
Transifex-Openfoodnetwork
372939b260 Updating translations for config/locales/nb.yml 2022-05-12 11:26:47 +10:00
Transifex-Openfoodnetwork
8945d0cc33 Updating translations for config/locales/en_FR.yml 2022-05-12 11:23:43 +10:00
Transifex-Openfoodnetwork
8b05fb2210 Updating translations for config/locales/en_GB.yml 2022-05-12 11:23:40 +10:00
Maikel
c00a35b5a4 Merge pull request #9173 from jibees/9172-change-i18n-key-from-delivery-address-to-shipping-info
Split Checkout: Change i18n key on first step from delivery address to shipping info
2022-05-12 10:36:18 +10:00
georgethoppil
86a3f91ca2 When order cycle open/close times are updated, check to see if any subscription has line items that have price estimate as nil. Recalculate the price and save the column 2022-05-11 13:54:43 -04:00
georgethoppil
6a9fcbdd0c Adding a scope on subscription_line_item.rb to select records where price estimate is nil 2022-05-11 13:45:13 -04:00
Transifex-Openfoodnetwork
38d6b5d452 Updating translations for config/locales/ru.yml 2022-05-12 00:17:55 +10:00
Filipe
6141641c23 Merge pull request #9164 from jibees/9143-add-order-token-when-checkout-is-complete
Add `order_token` params to the redirect URL after checkout
2022-05-11 13:50:48 +01:00
Jean-Baptiste Bellet
d942adcdd0 Change i18n key on first step
Delivery address --> shipping info
2022-05-11 10:11:51 +02:00
Maikel
bfc3e385ba Merge pull request #9163 from openfoodfoundation/dependabot/npm_and_yarn/tom-select-2.0.2
Bump tom-select from 2.0.1 to 2.0.2
2022-05-11 14:02:25 +10:00
Nihal Mohammed
f5ecc6ffe4 Change gap between columns to fit new button 2022-05-09 23:29:40 +05:30
Jean-Baptiste Bellet
61f8dfd809 Add order_token params to the redirect URL after checkout 2022-05-09 17:45:52 +02:00
dependabot[bot]
51db3d5997 Bump tom-select from 2.0.1 to 2.0.2
Bumps [tom-select](https://github.com/orchidjs/tom-select) from 2.0.1 to 2.0.2.
- [Release notes](https://github.com/orchidjs/tom-select/releases)
- [Commits](https://github.com/orchidjs/tom-select/compare/v2.0.1...v2.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-09 09:56:35 +00:00
Transifex-Openfoodnetwork
87ec803fba Updating translations for config/locales/en_GB.yml 2022-05-09 18:37:33 +10:00
Transifex-Openfoodnetwork
37a9338d0c Updating translations for config/locales/nb.yml 2022-05-09 17:59:00 +10:00
Transifex-Openfoodnetwork
3eccb65407 Updating translations for config/locales/en_FR.yml 2022-05-09 17:50:50 +10:00
Transifex-Openfoodnetwork
c1864fb8e5 Updating translations for config/locales/fr.yml 2022-05-09 17:50:43 +10:00
Maikel
44965ff235 Fix MAPI conditional on master 2022-05-09 12:35:52 +10:00
Maikel
e59d753333 Merge pull request #9044 from georgethoppil/optional-restock-items
Optional restock items
2022-05-09 09:08:26 +10:00
GeorgeThoppil
8903496a1b Optional restocking items 2022-05-06 10:55:24 -04:00
Jean-Baptiste Bellet
edc0520ce3 Update all locales with the latest Transifex translations 2022-05-06 09:51:36 +02:00
jibees
bf5e7a12d1 Merge pull request #9142 from openfoodfoundation/transifex
Transifex
2022-05-06 09:48:47 +02:00
Jean-Baptiste Bellet
9c231a831d Replace Angular directive and use stimulus controller
+ Update specs as well
2022-05-05 14:53:32 +02:00
Jean-Baptiste Bellet
f2ac888f2c Sort shipping methods case insensitive 2022-05-05 14:37:27 +02:00
Filipe
fb834d3143 Merge pull request #9138 from jibees/9137-order-shipping-methods-alphabetically
Split checkout: Order shipping methods by name
2022-05-05 12:41:12 +01:00
Filipe
24acf21c6d Merge pull request #9139 from jibees/6139-handle-shipping-method-description-with-no-space
Split Checkout: Handle shipping/payment method description with no space
2022-05-05 11:21:13 +01:00
Maikel Linke
ec7d7b0ad8 Fix workflow conditional 2022-05-05 14:22:39 +10:00
Maikel
ae728caac6 Merge pull request #9156 from mkllnk/mapi-condition
Run Mayhem4API CI check only within organisation
2022-05-05 14:01:51 +10:00
Maikel Linke
2758f83a2a Run Mayhem4API only within organisation
The API key is not accessible outside.
2022-05-05 12:10:08 +10:00
Transifex-Openfoodnetwork
5162c5ecf9 Updating translations for config/locales/en_GB.yml 2022-05-03 20:19:09 +10:00
Maikel
5ff1c1c7c2 Merge pull request #9136 from mayhemheroes/mapi
add Mayhem for API as a github workflow
2022-05-03 16:00:26 +10:00
Jean-Baptiste Bellet
c98d669b92 Create a SelectCustomer controller
To be used in `/admin/orders/ORDER_ID/customer` page

 - Fetch `/admin/search/customers.json?` with query as params
 - Render each items response thanks to `renderOption()` method
 - `onItemSelect()` is here to fill the associated form in the page
2022-05-02 13:36:49 +02:00
Jean-Baptiste Bellet
11b224f805 Prepare tom-select controller to inherit others controllers 2022-05-02 13:33:57 +02:00
Filipe
664e2a5423 Merge pull request #9057 from jibees/9038-handle-payment-errors-on-split-checkout
Split checkout: handle cards that throws any errors
2022-05-02 12:20:02 +01:00
Transifex-Openfoodnetwork
183a6f8fc7 Updating translations for config/locales/nb.yml 2022-04-29 19:14:57 +10:00
Jean-Baptiste Bellet
d7df714280 Formatting file 2022-04-29 10:36:53 +02:00
Jean-Baptiste Bellet
132ab28070 Handle very long description without any space for shipping and ...
... payment methods
2022-04-29 10:15:50 +02:00
Jean-Baptiste Bellet
89aa76dbbc Handle long payment description with no space 2022-04-29 10:15:50 +02:00
Jean-Baptiste Bellet
4635e67707 Create mixins to force wrap
No need to pre-wrap since we break-word
2022-04-29 10:15:50 +02:00
Transifex-Openfoodnetwork
8945142149 Updating translations for config/locales/en_FR.yml 2022-04-29 17:58:47 +10:00
Transifex-Openfoodnetwork
7cb6afbd96 Updating translations for config/locales/fr.yml 2022-04-29 17:49:58 +10:00
Maikel Linke
30ea017fa2 Update translations 2022-04-29 10:23:58 +10:00
Maikel
126a6aa84a Merge pull request #9114 from openfoodfoundation/fix-docker-setup
Fix Docker setup to ease entry for new contributors
2022-04-29 10:18:56 +10:00
Maikel
e2eb92fd90 Merge pull request #9119 from mkllnk/active-storage-part1
Store files with Active Storage in addition to Paperclip
2022-04-29 10:10:36 +10:00
J. David Lowe
ff1b895286 switch to openfoodfoundation 2022-04-28 14:42:24 -07:00
J. David Lowe
da2e7b404f add Mayhem for API as a github workflow 2022-04-28 13:30:34 -07:00
Filipe
ce9bd37c9b Merge pull request #9117 from jibees/9085-add-additionnal-items-in-/cart-page-for-split-checkout
Split checkout: Unless order is complete, /cart could be updated
2022-04-28 19:59:08 +01:00
Filipe
d57d812ab4 Merge pull request #9110 from georgethoppil/update-subscription-deleted-product
Return if variant is deleted
2022-04-28 15:54:51 +01:00
Jean-Baptiste Bellet
99c0416cc7 Handle long shipping method description with no spaces 2022-04-28 10:40:28 +02:00
jibees
335de1d038 Merge pull request #9121 from openfoodfoundation/transifex
Transifex
2022-04-28 10:10:13 +02:00
Transifex-Openfoodnetwork
5b9a5c1df6 Updating translations for config/locales/fr_CA.yml 2022-04-28 07:38:59 +10:00
Transifex-Openfoodnetwork
72641ba317 Updating translations for config/locales/en_CA.yml 2022-04-28 07:26:44 +10:00
Jean-Baptiste Bellet
34fcb4a1f7 Order shipping methods by name
+ create spec
2022-04-27 16:37:37 +02:00
Jean-Baptiste Bellet
b370ee328a Click twice on "Next - Order summary" button
yes, this is a hack, but can't make it work as a normal behavior. For testing purpose, we use `spec/support/fixtures/stripejs-mock.js` and it seems not working with our `app/webpacker/controllers/stripe_controller.js`
2022-04-27 15:43:05 +02:00
Jean-Baptiste Bellet
5fe8060ea6 Actually don't use requestSubmit() as it is not supported by Safari
https://caniuse.com/?search=requestSubmit
2022-04-27 15:43:05 +02:00
Jean-Baptiste Bellet
a8afe7fee3 Use requestSubmit() method for actually submit the form with event
... that could be catch by turbo (and then handled by cable_ready)

`this.catchFormSubmit` avoid infinite loop then
2022-04-27 15:43:05 +02:00
Jean-Baptiste Bellet
8bbb80ef55 Catch GatewayError exception and handle by updating flash[:error] 2022-04-27 15:43:05 +02:00
Jean-Baptiste Bellet
a68f9a71fb When items quantities, update sumUnitValues() and sumMaxUnitValues()
by summing only `quantity` and `max_quantity`

+ update the specs as well

Co-Authored-By: Maikel <maikel@email.org.au>
2022-04-27 11:21:47 +02:00
François Turbelin
fe2ee57cb3 Use Install Bundler script in Dockerfile 2022-04-25 22:40:50 +02:00
Nihal Mohammed
af58ba523c Renamed groups_helper to link_helper and removed strip_url method, as well as updated specs and ApplicationHelper. Added "Back To Website" button and i18n. 2022-04-26 01:38:25 +05:30
Jean-Baptiste Bellet
a4afeeaa3d When BOM is 'item', do not update sumOfUnitValues with scale
since scale is always `1`, but return a value

+ update tests as well
2022-04-25 15:53:38 +02:00
Jean-Baptiste Bellet
3553cc0d9f When it's items scale is '1'
update tests as well
2022-04-25 15:51:38 +02:00
Maikel Linke
9dc3c5a06c Add task for ContentConfig image migration 2022-04-25 13:00:31 +10:00
Maikel Linke
1c1f9d73a3 Add task to migrate existing files to Active Storage
Common migrations look for all models with *_file_name attributes but I
found that unreliable in our code base. It finds too many model classes
and doesn't allow us to be more selective in the migration. So I used
our own migration declaration to migrate exactly those attachments
specified.
2022-04-25 13:00:31 +10:00
Maikel Linke
0b885b3954 Protect terms of service from migration updates
Active Storage always touches associated records when attachments are
changed. But for the Terms of Service it's important to keep the
updated_at date because that's how we find out how new it is and if a
customer accepted those terms already.

And while we migrate files, the content of the files will stay the same
and we don't want customers to be asked to accept the same terms again.
2022-04-25 13:00:31 +10:00
Maikel Linke
7bcfda0a52 Duplicate all new Paperclip files to ActiveStorage
We do this for all models in the code base. There's one special case,
the ConentConfiguration which is not a model and we can't use the same
approach there. We will have to deal with that separately later.
2022-04-25 13:00:31 +10:00
Maikel Linke
92bbcbb7ce Process correct attachment when model has several
Luckily Paperclip has designated callbacks for processing each
attachment separately. We can just hook into that.
2022-04-25 13:00:31 +10:00
Maikel Linke
c36ad96acc Move file duplication code to concern to share
I chose `has_one_migrating` as method name for two reasons:

 1. It reflects Active Storage's method `has_one_attached`.
 2. And it has the same length as Paperclip's `has_attached_file`.
    Therefore the commits don't need any whitespace changes.

When we change it to `has_one_attached`, we will also remove the
Paperclip options which then don't need whitespace changes either.
2022-04-25 13:00:31 +10:00
Maikel Linke
ec64e5c8f7 Store images with Active Storage as well
While we migrate from Paperclip to Active Storage, we need to use both
at the same time to avoid any downtime or lost images.

Once the migration is complete, we want to use the same name for
attachment as before. Using Paperclip and Active Storage at the same
time creates a name conflict on a couple of methods.

I'm using alias_method as a temporary solution to access Active Storage
methods. We will remove that after the migration. I declare Paperclip
afterwards so that we have those methods declarations for backwards
compatibility now.
2022-04-25 13:00:31 +10:00
Maikel Linke
95cb6e93e7 Configure Active Storage
We are re-using the same config used for Paperclip except for disk
storage. Active Storage uses directory sharding on the local disk which
means that we can't create blob entries that point to the existing
Paperclip files. We will just copy them to the standard `storage/`
directory.
2022-04-25 13:00:30 +10:00
Maikel Linke
ce0e33fffa Install Active Storage database tables 2022-04-25 13:00:30 +10:00
Maikel Linke
b6cdb04a27 Activate Active Storage 2022-04-25 13:00:30 +10:00
Maikel Linke
92bb23d914 Add validation gem for Active Storage
We used validations with Paperclip and it would be nice to keep them.
2022-04-25 13:00:30 +10:00
Maikel Linke
4eb550431e Add gems required by Active Storage 2022-04-25 13:00:30 +10:00
Transifex-Openfoodnetwork
8330339046 Updating translations for config/locales/en_FR.yml 2022-04-22 23:23:38 +10:00
Transifex-Openfoodnetwork
e34d4c773c Updating translations for config/locales/fr.yml 2022-04-22 23:20:59 +10:00
Transifex-Openfoodnetwork
e669ed9620 Updating translations for config/locales/nb.yml 2022-04-22 23:04:37 +10:00
Jean-Baptiste Bellet
6262dc3a2e Update all locales with the latest Transifex translations 2022-04-22 12:09:03 +02:00
Filipe
cb540d66c6 Merge pull request #9084 from jibees/9046-property-filter-on-shopfront
Fix an issue which prevented filtering by properties and sorting by category on a shopfront.
2022-04-22 11:03:31 +01:00
Filipe
1f80c2add4 Merge pull request #9087 from georgethoppil/enterprise-invisible
Change enterprise visibility scope
2022-04-22 10:52:32 +01:00
GeorgeThoppil
898c470c00 Change enterprise visibility scope 2022-04-21 20:27:28 -04:00
GeorgeThoppil
2046317f16 Allow update of subscriptions containing deleted products 2022-04-21 20:23:34 -04:00
jibees
413c97cfa8 Merge pull request #9118 from openfoodfoundation/transifex
Transifex
2022-04-21 15:45:44 +02:00
Transifex-Openfoodnetwork
2b4d9be907 Updating translations for config/locales/fr.yml 2022-04-21 23:27:52 +10:00
Transifex-Openfoodnetwork
8f9c50a311 Updating translations for config/locales/it.yml 2022-04-21 23:24:47 +10:00
Jean-Baptiste Bellet
9306e054b8 Unless order is complete, /cart could be updated
Split_checkout introduced new state for an order

Update specs as well

Follow up #8944
2022-04-21 14:22:39 +02:00
Filipe
4ea1dd68af Merge pull request #9023 from apricot12/8908-Access-Enterprise-perms-from-setting-page
Enterprise can access permissions from enterprise edit page
2022-04-21 13:21:27 +01:00
jibees
9cb3dc4c42 Merge pull request #9102 from openfoodfoundation/transifex
Transifex
2022-04-21 13:44:26 +02:00
Filipe
2ddc64ce4d Merge pull request #9072 from mkllnk/remove-taxon-icons
Remove unused icons from Spree::Taxon
2022-04-21 11:46:57 +01:00
Transifex-Openfoodnetwork
1aae8bba99 Updating translations for config/locales/it.yml 2022-04-21 20:35:27 +10:00
Jean-Baptiste Bellet
3e5656e638 Remove distinct to make proper ORDER BY
Update specs as well to test match array and test duplication by adding property2 to product1
2022-04-21 11:03:22 +02:00
Jean-Baptiste Bellet
96f267eefe Create specs for filtering by properties when sorting is available
+ update product, supplier, taxon name to be more precise
2022-04-21 11:03:22 +02:00
Maikel
30e68450d2 Merge pull request #9116 from openfoodfoundation/dependabot/npm_and_yarn/babel-loader-8.2.5
Bump babel-loader from 8.2.4 to 8.2.5
2022-04-21 11:11:43 +10:00
Maikel
2b3db15505 Merge pull request #9115 from openfoodfoundation/dependabot/npm_and_yarn/karma-6.3.19
Bump karma from 6.3.18 to 6.3.19
2022-04-21 11:10:24 +10:00
Transifex-Openfoodnetwork
99beacf723 Updating translations for config/locales/en_FR.yml 2022-04-21 01:39:08 +10:00
Transifex-Openfoodnetwork
67453de649 Updating translations for config/locales/fr.yml 2022-04-21 01:38:45 +10:00
Filipe
f516b7056d Merge pull request #8863 from georgethoppil/payment-state-cancel-subscription-order
Setting payment state for subscription order
2022-04-20 13:14:57 +01:00
Filipe
1f6b5ef309 Merge pull request #8979 from jibees/6300-dont-submit-form-element-that-are-not-handled-by-backend
shipping fees on admin: avoid backend error when updating calculator type
2022-04-20 12:23:32 +01:00
dependabot[bot]
7528e878dc Bump babel-loader from 8.2.4 to 8.2.5
Bumps [babel-loader](https://github.com/babel/babel-loader) from 8.2.4 to 8.2.5.
- [Release notes](https://github.com/babel/babel-loader/releases)
- [Changelog](https://github.com/babel/babel-loader/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel-loader/compare/v8.2.4...v8.2.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-20 09:06:14 +00:00
dependabot[bot]
2981c35482 Bump karma from 6.3.18 to 6.3.19
Bumps [karma](https://github.com/karma-runner/karma) from 6.3.18 to 6.3.19.
- [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.3.18...v6.3.19)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-20 09:05:58 +00:00
Maikel
06dbb3b545 Merge pull request #9108 from openfoodfoundation/dependabot/npm_and_yarn/tom-select-2.0.1
Bump tom-select from 2.0.0 to 2.0.1
2022-04-20 14:46:41 +10:00
Maikel
2da7e9ab44 Merge pull request #9107 from openfoodfoundation/dependabot/npm_and_yarn/moment-2.29.3
Bump moment from 2.29.2 to 2.29.3
2022-04-20 14:45:09 +10:00
Maikel
a145b97c28 Merge pull request #9103 from jibees/add-customer-id-to-order-endpoint-on-api
API: Add customer_id as an attribute to the GET /orders/ORDER_ID endpoint
2022-04-20 14:28:31 +10:00
Maikel
3985c9fb06 Merge pull request #9094 from openfoodfoundation/dependabot/npm_and_yarn/flatpickr-4.6.13
Bump flatpickr from 4.6.11 to 4.6.13
2022-04-20 14:24:49 +10:00
Maikel
67d3bd7414 Merge pull request #9040 from cillian/stimulus-js-help-modals
Switch help modals from angular templates to use ViewComponent and StimulusJs
2022-04-20 12:14:41 +10:00
Cillian O'Ruanaidh
4162830bee Switch help modals from angular templates to use ViewComponent and StimulusJs 2022-04-20 09:36:30 +10:00
François Turbelin
c004f16c9a Update Postgres version into Docker Compose configuration 2022-04-19 22:15:13 +02:00
Jean-Baptiste Bellet
e607d5c161 Shipping method: disabled form element to not submit them
As they're not handled by the backend
2022-04-19 15:16:07 +02:00
Jean-Baptiste Bellet
4b629eae11 Test that fee can be updated from weight to Flat Rate
+ Missing some spree i18n keys
2022-04-19 14:28:18 +02:00
Jean-Baptiste Bellet
6f5dd5ab0c Prepare to receive another test in the same context 2022-04-19 14:28:18 +02:00
Jean-Baptiste Bellet
a6c69c8530 Ensure that form element are well disabled to not submit them
As they're not handled by the backend
2022-04-19 14:28:18 +02:00
Transifex-Openfoodnetwork
6276a90258 Updating translations for config/locales/en_FR.yml 2022-04-19 18:27:52 +10:00
Transifex-Openfoodnetwork
4a65333a83 Updating translations for config/locales/fr.yml 2022-04-19 18:27:25 +10:00
Maikel
268a73a41d Merge pull request #9104 from jibees/get-rid-of-rubocop-MissingSuper-warning-on-ViewComponent-class
Exclude ViewComponents from Rubocop MissingSuper rule
2022-04-19 10:41:08 +10:00
Filipe
4dde49c881 Merge pull request #8991 from jibees/8985-Make-checkbox-for-Send-a-cancellation-email-to-the-customer-checked-by-default
Admin, editing order, on last item deletion modal: "Send a cancellation email to the customer" checked by default
2022-04-18 14:04:08 +01:00
Filipe
f831154b6f Merge pull request #8950 from jibees/5903-delete-coordinators_fees-linked-to-cloned-OC
Delete linked coordinators fees when deleting an order cycle
2022-04-18 11:55:53 +01:00
dependabot[bot]
91448c18f2 Bump tom-select from 2.0.0 to 2.0.1
Bumps [tom-select](https://github.com/orchidjs/tom-select) from 2.0.0 to 2.0.1.
- [Release notes](https://github.com/orchidjs/tom-select/releases)
- [Commits](https://github.com/orchidjs/tom-select/compare/v2.0.0...v2.0.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-18 09:05:16 +00:00
dependabot[bot]
d82f7c3c4d Bump moment from 2.29.2 to 2.29.3
Bumps [moment](https://github.com/moment/moment) from 2.29.2 to 2.29.3.
- [Release notes](https://github.com/moment/moment/releases)
- [Changelog](https://github.com/moment/moment/blob/2.29.3/CHANGELOG.md)
- [Commits](https://github.com/moment/moment/compare/2.29.2...2.29.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-18 09:05:03 +00:00
Transifex-Openfoodnetwork
7516cf6de3 Updating translations for config/locales/ar.yml 2022-04-17 04:18:27 +10:00
Transifex-Openfoodnetwork
0c2a3a9bb6 Updating translations for config/locales/de_DE.yml 2022-04-16 23:20:42 +10:00
Filipe
01e915800e Merge pull request #9037 from jibees/9028-last-item-of-order-cancellation
BOM: show custom modal on last item deletion of an order
2022-04-15 18:47:51 +01:00
dependabot[bot]
2c67d6d238 Bump flatpickr from 4.6.11 to 4.6.13
Bumps [flatpickr](https://github.com/chmln/flatpickr) from 4.6.11 to 4.6.13.
- [Release notes](https://github.com/chmln/flatpickr/releases)
- [Commits](https://github.com/chmln/flatpickr/compare/v4.6.11...v4.6.13)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-15 17:08:50 +00:00
Filipe
4009f3313f Merge pull request #8814 from Matt-Yorkley/tom-select
Introduce new select/dropdown library
2022-04-15 18:08:08 +01:00
Filipe
54d64c1c2c Merge pull request #8841 from apricot12/8790_display_stock_left_shop
Display remaining stock in shopfront if enabled in shop preferences
2022-04-15 17:58:40 +01:00
Filipe
db3ca2e66e Merge pull request #9098 from mkllnk/toggle-api
Feature-toggle API also per API key
2022-04-15 16:14:48 +01:00
Jean-Baptiste Bellet
b60eeb8dc4 Exclude ViewComponents from MissingSuper rule as it's unnecessary
Source: https://viewcomponent.org/#whats-a-viewcomponent
2022-04-15 14:36:42 +02:00
Jean-Baptiste Bellet
d38e14ca5c Add customer_id as an attribute to order_detailed_serializer
Therefor customer_id will be available on the order object for `/api/v0/orders/[ORDER_ID].json` endpoint
2022-04-15 14:23:55 +02:00
Transifex-Openfoodnetwork
a75af09c58 Updating translations for config/locales/en_IE.yml 2022-04-15 20:46:33 +10:00
jibees
8825ff2711 Merge pull request #9099 from openfoodfoundation/dependabot/npm_and_yarn/async-2.6.4
Bump async from 2.6.3 to 2.6.4
2022-04-15 12:03:43 +02:00
dependabot[bot]
0b56cdabea Bump async from 2.6.3 to 2.6.4
Bumps [async](https://github.com/caolan/async) from 2.6.3 to 2.6.4.
- [Release notes](https://github.com/caolan/async/releases)
- [Changelog](https://github.com/caolan/async/blob/v2.6.4/CHANGELOG.md)
- [Commits](https://github.com/caolan/async/compare/v2.6.3...v2.6.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-15 08:20:54 +00:00
jibees
1149278a48 Merge pull request #9093 from openfoodfoundation/dependabot/npm_and_yarn/storybook/server-6.4.22
Bump @storybook/server from 6.4.21 to 6.4.22
2022-04-15 10:19:53 +02:00
dependabot[bot]
3a4713b8c9 Bump @storybook/server from 6.4.21 to 6.4.22
Bumps [@storybook/server](https://github.com/storybookjs/storybook/tree/HEAD/app/server) from 6.4.21 to 6.4.22.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.4.22/app/server)

---
updated-dependencies:
- dependency-name: "@storybook/server"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-15 07:50:33 +00:00
jibees
5635f5ad46 Merge pull request #9096 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-docs-6.4.22
Bump @storybook/addon-docs from 6.4.21 to 6.4.22
2022-04-15 09:49:35 +02:00
dependabot[bot]
c4431ccac6 Bump @storybook/addon-docs from 6.4.21 to 6.4.22
Bumps [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/addons/docs) from 6.4.21 to 6.4.22.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.4.22/addons/docs)

---
updated-dependencies:
- dependency-name: "@storybook/addon-docs"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-15 07:27:47 +00:00
jibees
1e4f096639 Merge pull request #9095 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-controls-6.4.22
Bump @storybook/addon-controls from 6.4.21 to 6.4.22
2022-04-15 09:26:55 +02:00
jibees
6ba255ce85 Merge pull request #9000 from filipefurtad0/adds_coverage_tags_on_details_step
Adds basic coverage on tag functionality on payment methods
2022-04-15 09:22:43 +02:00
Maikel Linke
2e989083bd Remove unused icons from Spree:Taxon
The icons are not used any more and the default icon file never existed
in our code base (only in Spree when we depended on that).

And it's better to remove this clutter before migrating those files to
Active Storage.

We are keeping the icon files in storage as a backup. The whole folder
`/spree/taxons` can be deleted when desired. But storage is cheap.
2022-04-15 16:50:28 +10:00
dependabot[bot]
86bd6cb102 Bump @storybook/addon-controls from 6.4.21 to 6.4.22
Bumps [@storybook/addon-controls](https://github.com/storybookjs/storybook/tree/HEAD/addons/controls) from 6.4.21 to 6.4.22.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.4.22/addons/controls)

---
updated-dependencies:
- dependency-name: "@storybook/addon-controls"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-15 02:57:43 +00:00
Maikel Linke
ba1e21ad75 Feature-toggle API also per API key
We looked only at logged in users (session cookie) before.
2022-04-15 12:34:57 +10:00
Nihal Mohammed
0327cc0d0b Update i18n to be more informative 2022-04-15 10:59:42 +10:00
Nihal Mohammed
15e7a5a4df Rename product_stock_display to product_low_stock_display
Rename product_stock_display to product_low_stock_display in enterprise_serializer and shop_variant_controller
2022-04-15 10:59:42 +10:00
Nihal Mohammed
66386683b6 Add system spec
Fix linter errors
2022-04-15 10:56:26 +10:00
Jean-Baptiste Bellet
1ea2656bfb i18n for shop preferences in admin 2022-04-15 10:53:28 +10:00
Jean-Baptiste Bellet
af69064d3a Add mocked shopfront 2022-04-15 10:53:28 +10:00
Jean-Baptiste Bellet
1c68293cac Display remaining stock for variant in the shopfront
Display only if all conditions are met:
 - Variant is not a bulk buy
 - Shop preference is true for `preferred_product_stock_display`
 - Only 3 (or less) items are remaining in stock
 - No item for this variant is already to cart
2022-04-15 10:53:28 +10:00
Jean-Baptiste Bellet
143c977a19 i18n for shop preferences 2022-04-15 10:53:28 +10:00
Nihal M. Kelanthodika
356d759dbe Add Display stock option to enterprises form 2022-04-15 10:53:28 +10:00
Nihal M. Kelanthodika
f7a767988c Add preferred_product_stock_display to Enterprise model, serializer and permitted attributes. (Fixed alignment of guest orders radio button as well) 2022-04-15 10:53:28 +10:00
filipefurtad0
029df03ee6 Improves naming and styling 2022-04-14 14:40:59 +01:00
GeorgeThoppil
8aa4631e21 Setting payment state for subscription order 2022-04-13 19:08:51 -04:00
filipefurtad0
c8b5ce64a4 Adds coverage for hiding payment methods with tags 2022-04-13 23:44:54 +01:00
Nihal Mohammed
d23846bfa2 Add Enterprise Settings to admin enterprises edit side menu, adds redirect_function to side menu services. 2022-04-13 17:03:04 +05:30
Matt-Yorkley
7181694401 Include the little search icon for dropdowns with a search box 2022-04-05 18:56:52 +01:00
Matt-Yorkley
7753d9e1ea Use TomSelect and dependent-select controller in admin order customer details form and remove ancient jQuery which uses global functions and inline scripts
🎉
2022-04-05 18:56:51 +01:00
Matt-Yorkley
be9156d40f Refactor dependant-selector further and (conditionally) update TomSelect if present
I'm also introducing a convention here of adding a `private` comment to visually demarcate which methods are meant to be part of the public interface of the class and which aren't. The methods aren't *actually* private in any technical sense, it's just a bit of syntactic sugar to allow the intention to be communicated more clearly in the code's structure.
2022-04-05 18:56:51 +01:00
Matt-Yorkley
09bd7126d8 Replace/remove a custom select2 Angular directive 2022-04-05 18:56:51 +01:00
Matt-Yorkley
9bce2ca64c Allow initializing with custom TomSelect configurations 2022-04-05 18:56:51 +01:00
Matt-Yorkley
fedfeb6dd3 Add dropdown "primary" style with blue instead of white 2022-04-05 18:56:51 +01:00
Matt-Yorkley
6459d9ea36 Replace some simple dropdowns 2022-04-05 18:56:51 +01:00
Matt-Yorkley
5e3e8c32c3 Create a simple Stimulus controller and add basic styling 2022-04-05 18:56:51 +01:00
Matt-Yorkley
ff3cc6e771 Add TomSelect package 2022-04-05 18:56:51 +01:00
Jean-Baptiste Bellet
17989b2f90 Update tests as well around order cancellation on item deletion
js specs are not that easy to code (needs to spy callback...). Use system spec instead.
2022-03-25 11:52:08 +01:00
Jean-Baptiste Bellet
c9248f872d Remplace window.confirm by ofnCancelOrderAlert
to prevent use that the order will be canceled
2022-03-25 11:28:10 +01:00
Jean-Baptiste Bellet
a71e95da27 ofnCancelOrderAlert can accept i18n key to customize message 2022-03-25 11:10:54 +01:00
Jean-Baptiste Bellet
b9efda9f64 Add custom confirm modal into the BOM interface 2022-03-25 10:58:33 +01:00
Jean-Baptiste Bellet
08d4aea2b9 "Send a cancellation email to the customer" checked by default 2022-03-14 09:05:17 +01:00
Jean-Baptiste Bellet
7ca6434b14 Improve the test to delete a cloned order_cycle 2022-03-04 11:34:19 +01:00
Jean-Baptiste Bellet
5fc7d72b09 Check destroying order_cycle will delete associated coordinator fees 2022-03-03 09:06:38 +01:00
Jean-Baptiste Bellet
771f7b0393 Delete coordinators_fees linked to an order_cycle when it is destroyed 2022-03-02 11:00:04 +01:00
583 changed files with 31000 additions and 12803 deletions

7
.env
View File

@@ -61,10 +61,3 @@ SMTP_PASSWORD="f00d"
# STRIPE_INSTANCE_PUBLISHABLE_KEY="pk_test_xxxx" # This can be a test key or a live key
# STRIPE_CLIENT_ID="ca_xxxx" # This can be a development ID or a production ID
# STRIPE_ENDPOINT_SECRET="whsec_xxxx"
# Feature toggles
#
# Adding user emails separated by commas will enable them the use of certain features. See
# config/initializers/feature_toggles.rb for details.
#
# BETA_TESTERS="ofn@example.com,superadmin@example.com"

13
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,13 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: ofnusa
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

View File

@@ -10,7 +10,6 @@ assignees: ''
## Preparation on Thursday
- [ ] Merge pull requests in the [Ready To Go] column
- [ ] Merge [Transifex pull request]
- [ ] Include translations: `tx pull --force`
- [ ] [Draft new release]. Look at previous [releases] for inspiration.
- [ ] Notify [#instance-managers] of user-facing changes.

View File

@@ -10,8 +10,14 @@ on:
pull_request:
branches: [ "master" ]
permissions:
contents: read
jobs:
brakeman-scan:
permissions:
contents: read # for actions/checkout to fetch code
security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
name: Brakeman Scan
runs-on: ubuntu-latest
steps:

View File

@@ -12,6 +12,9 @@ env:
RSPEC_RETRY_RETRY_COUNT: 3
RAILS_ENV: test
permissions:
contents: read
jobs:
rspec:
runs-on: ubuntu-18.04

46
.github/workflows/mapi.yml vendored Normal file
View File

@@ -0,0 +1,46 @@
name: 'Mayhem for API'
on: workflow_dispatch
jobs:
test:
if: ${{ github.repository_owner == 'openfoodfoundation' }}
runs-on: ubuntu-latest
strategy:
fail-fast: true
steps:
- uses: actions/checkout@v2
- run: docker/build
- run: docker-compose up --detach
- run: until curl -f -s http://localhost:3000; do echo "waiting for api server"; sleep 1; done
- run: docker-compose exec -T db psql postgresql://ofn:f00d@localhost:5432/open_food_network_dev --command="update spree_users set spree_api_key='testing' where login='ofn@example.com'"
# equivalent to Flipper.enable(:api_v1)
- run: docker-compose exec -T db psql postgresql://ofn:f00d@localhost:5432/open_food_network_dev --command="insert into flipper_features (key, created_at, updated_at) values ('api_v1', localtimestamp, localtimestamp)"
- run: docker-compose exec -T db psql postgresql://ofn:f00d@localhost:5432/open_food_network_dev --command="insert into flipper_gates (feature_key, key, value, created_at, updated_at) values ('api_v1', 'boolean', 'true', localtimestamp, localtimestamp)"
# Run Mayhem for API
- name: Run Mayhem for API
uses: ForAllSecure/mapi-action@v1
continue-on-error: true
with:
mapi-token: ${{ secrets.MAPI_TOKEN }}
api-url: http://localhost:3000
api-spec: swagger/v1/swagger.yaml
target: openfoodfoundation/openfoodnetwork
duration: 1min
sarif-report: mapi.sarif
html-report: mapi.html
run-args: |
--header-auth
X-Api-Token: testing
# Archive HTML report
- name: Archive Mayhem for API report
uses: actions/upload-artifact@v2
with:
name: mapi-report
path: mapi.html
# Upload SARIF file (only available on public repos or github enterprise)
- name: Upload SARIF file
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: mapi.sarif

1
.gitignore vendored
View File

@@ -15,6 +15,7 @@ db/*.csv
log/*.log
log/*.log.lck
log/*.log.*
/storage
tmp/
.idea/*
\#*

View File

@@ -105,6 +105,10 @@ Lint/UselessAssignment:
Exclude:
- spec/**/*
Lint/MissingSuper:
Exclude:
- 'app/components/**/*'
Metrics/AbcSize:
Max: 30 # default 17

View File

@@ -1,6 +1,6 @@
# This configuration was generated by
# `rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 1400`
# on 2022-02-25 01:04:47 UTC using RuboCop version 1.22.2.
# on 2022-03-29 16:07:39 UTC using RuboCop version 1.22.2.
# 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
@@ -53,7 +53,7 @@ Layout/LeadingCommentSpace:
Exclude:
- 'spec/system/admin/enterprises_spec.rb'
# Offense count: 828
# Offense count: 856
# Cop supports --auto-correct.
# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
# URISchemes: http, https
@@ -108,7 +108,6 @@ Layout/LineLength:
- 'app/services/order_syncer.rb'
- 'app/services/products_renderer.rb'
- 'app/services/variant_units/variant_and_line_item_naming.rb'
- 'engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb'
- 'engines/order_management/app/services/order_management/subscriptions/validator.rb'
- 'engines/order_management/spec/services/order_management/order/updater_spec.rb'
- 'engines/web/app/helpers/web/cookies_policy_helper.rb'
@@ -117,15 +116,19 @@ Layout/LineLength:
- 'lib/open_food_network/enterprise_fee_applicator.rb'
- 'lib/open_food_network/enterprise_fee_calculator.rb'
- 'lib/open_food_network/enterprise_issue_validator.rb'
- 'lib/open_food_network/lettuce_share_report.rb'
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/open_food_network/order_cycle_management_report.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/open_food_network/payments_report.rb'
- 'lib/open_food_network/reports/line_items.rb'
- 'lib/open_food_network/sales_tax_report.rb'
- 'lib/open_food_network/scope_variants_for_search.rb'
- 'lib/open_food_network/xero_invoices_report.rb'
- 'lib/reporting/line_items.rb'
- 'lib/reporting/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/reporting/reports/enterprise_fee_summary/report_data/enterprise_fee_type_total.rb'
- 'lib/reporting/reports/order_cycle_management/order_cycle_management_report.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/reporting/reports/orders_and_fulfillment/customer_totals_report.rb'
- 'lib/reporting/reports/orders_and_fulfillment/distributor_totals_by_supplier_report.rb'
- 'lib/reporting/reports/payments/payments_report.rb'
- 'lib/reporting/reports/products_and_inventory/lettuce_share_report.rb'
- 'lib/reporting/reports/sales_tax/sales_tax_report.rb'
- 'lib/reporting/reports/xero_invoices/base.rb'
- 'lib/spree/localized_number.rb'
- 'lib/tasks/data.rake'
- 'lib/tasks/enterprises.rake'
@@ -176,19 +179,20 @@ Layout/LineLength:
- 'spec/helpers/spree/admin/base_helper_spec.rb'
- 'spec/jobs/subscription_confirm_job_spec.rb'
- 'spec/jobs/subscription_placement_job_spec.rb'
- 'spec/lib/open_food_network/customers_report_spec.rb'
- 'spec/lib/open_food_network/enterprise_fee_calculator_spec.rb'
- 'spec/lib/open_food_network/group_buy_report_spec.rb'
- 'spec/lib/open_food_network/order_cycle_form_applicator_spec.rb'
- 'spec/lib/open_food_network/order_cycle_management_report_spec.rb'
- 'spec/lib/open_food_network/order_cycle_permissions_spec.rb'
- 'spec/lib/open_food_network/order_grouper_spec.rb'
- 'spec/lib/open_food_network/permissions_spec.rb'
- 'spec/lib/open_food_network/products_and_inventory_report_spec.rb'
- 'spec/lib/open_food_network/scope_variant_to_hub_spec.rb'
- 'spec/lib/open_food_network/tag_rule_applicator_spec.rb'
- 'spec/lib/open_food_network/users_and_enterprises_report_spec.rb'
- 'spec/lib/reports/customers_report_spec.rb'
- 'spec/lib/reports/order_cycle_management_report_spec.rb'
- 'spec/lib/reports/order_grouper_spec.rb'
- 'spec/lib/reports/orders_and_fulfillment/orders_and_fulfillment_report_spec.rb'
- 'spec/lib/reports/packing/packing_report_spec.rb'
- 'spec/lib/reports/products_and_inventory_report_spec.rb'
- 'spec/lib/reports/users_and_enterprises_report_spec.rb'
- 'spec/lib/reports/xero_invoices_report_spec.rb'
- 'spec/lib/stripe/authorize_response_patcher_spec.rb'
- 'spec/mailers/order_mailer_spec.rb'
- 'spec/mailers/producer_mailer_spec.rb'
@@ -309,7 +313,15 @@ Layout/MultilineMethodCallBraceLayout:
Exclude:
- 'lib/reporting/queries/joins.rb'
# Offense count: 17
# Offense count: 2
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: aligned, indented, indented_relative_to_receiver
Layout/MultilineMethodCallIndentation:
Exclude:
- 'lib/reporting/reports/customers/customers_report.rb'
# Offense count: 20
# Cop supports --auto-correct.
# Configuration parameters: AllowInHeredoc.
Layout/TrailingWhitespace:
@@ -331,7 +343,7 @@ Lint/ConstantDefinitionInBlock:
- 'lib/tasks/users.rake'
- 'spec/controllers/spree/admin/base_controller_spec.rb'
- 'spec/helpers/serializer_helper_spec.rb'
- 'spec/lib/open_food_network/reports/line_items_spec.rb'
- 'spec/lib/reports/line_items_spec.rb'
- 'spec/models/spree/ability_spec.rb'
- 'spec/models/spree/gateway_spec.rb'
- 'spec/models/spree/preferences/configuration_spec.rb'
@@ -366,11 +378,6 @@ Lint/IneffectiveAccessModifier:
Exclude:
- 'app/models/spree/user.rb'
# Offense count: 2
Lint/MissingSuper:
Exclude:
- 'app/components/distributor_title_component.rb'
- 'app/components/example_component.rb'
# Offense count: 1
# Cop supports --auto-correct.
@@ -403,7 +410,7 @@ Lint/UselessMethodDefinition:
- 'app/controllers/spree/user_registrations_controller.rb'
- 'app/models/spree/gateway.rb'
# Offense count: 39
# Offense count: 38
# Configuration parameters: IgnoredMethods, CountRepeatedAttributes, Max.
Metrics/AbcSize:
Exclude:
@@ -424,22 +431,20 @@ Metrics/AbcSize:
- 'app/models/spree/order/checkout.rb'
- 'app/models/spree/preferences/preferable_class_methods.rb'
- 'app/models/spree/return_authorization.rb'
- 'engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/discourse/single_sign_on.rb'
- 'lib/open_food_network/customers_report.rb'
- 'lib/open_food_network/group_buy_report.rb'
- 'lib/open_food_network/order_and_distributor_report.rb'
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/reporting/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/reporting/reports/customers/customers_report.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/open_food_network/payments_report.rb'
- 'lib/open_food_network/sales_tax_report.rb'
- 'lib/reporting/reports/orders_and_distributors/orders_and_distributors_report.rb'
- 'lib/reporting/reports/packing/customer.rb'
- 'lib/reporting/reports/payments/payments_report.rb'
- 'lib/reporting/reports/sales_tax/sales_tax_report.rb'
- 'lib/spree/core/controller_helpers/order.rb'
- 'lib/spree/core/s3_support.rb'
- 'lib/tasks/enterprises.rake'
- 'spec/services/order_checkout_restart_spec.rb'
# Offense count: 45
# Offense count: 43
# Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, IgnoredMethods.
# IgnoredMethods: refine
Metrics/BlockLength:
@@ -463,13 +468,12 @@ Metrics/BlockLength:
- 'spec/factories/subscription_factory.rb'
- 'spec/factories/user_factory.rb'
- 'spec/factories/variant_factory.rb'
- 'spec/lib/open_food_network/group_buy_report_spec.rb'
- 'spec/requests/api/orders_spec.rb'
- 'spec/spec_helper.rb'
- 'spec/swagger_helper.rb'
- 'spec/support/cancan_helper.rb'
- 'spec/support/matchers/select2_matchers.rb'
- 'spec/support/matchers/table_matchers.rb'
- 'spec/swagger_helper.rb'
- 'spec/system/admin/order_cycles/complex_updating_specific_time_spec.rb'
- 'spec/system/consumer/shopping/checkout_spec.rb'
@@ -479,7 +483,7 @@ Metrics/BlockNesting:
Exclude:
- 'app/models/spree/payment/processing.rb'
# Offense count: 49
# Offense count: 50
# Configuration parameters: CountComments, Max, CountAsOne.
Metrics/ClassLength:
Exclude:
@@ -523,18 +527,17 @@ Metrics/ClassLength:
- 'app/services/cart_service.rb'
- 'app/services/order_syncer.rb'
- 'engines/order_management/app/services/order_management/order/updater.rb'
- 'engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb'
- 'engines/order_management/app/services/order_management/reports/enterprise_fee_summary/scope.rb'
- 'lib/open_food_network/enterprise_fee_calculator.rb'
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/open_food_network/order_cycle_management_report.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/open_food_network/payments_report.rb'
- 'lib/open_food_network/permissions.rb'
- 'lib/open_food_network/users_and_enterprises_report.rb'
- 'lib/open_food_network/xero_invoices_report.rb'
- 'lib/reporting/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/reporting/reports/enterprise_fee_summary/scope.rb'
- 'lib/reporting/reports/order_cycle_management/order_cycle_management_report.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/reporting/reports/payments/payments_report.rb'
- 'lib/reporting/reports/xero_invoices/base.rb'
# Offense count: 40
# Offense count: 39
# Configuration parameters: IgnoredMethods, Max.
Metrics/CyclomaticComplexity:
Exclude:
@@ -560,20 +563,19 @@ Metrics/CyclomaticComplexity:
- 'app/models/spree/tax_rate.rb'
- 'app/models/spree/variant.rb'
- 'app/models/spree/zone.rb'
- 'engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/discourse/single_sign_on.rb'
- 'lib/open_food_network/customers_report.rb'
- 'lib/open_food_network/enterprise_issue_validator.rb'
- 'lib/open_food_network/group_buy_report.rb'
- 'lib/open_food_network/orders_and_fulfillments_report/customer_totals_report.rb'
- 'lib/open_food_network/payments_report.rb'
- 'lib/open_food_network/xero_invoices_report.rb'
- 'lib/reporting/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/reporting/reports/customers/customers_report.rb'
- 'lib/reporting/reports/orders_and_fulfillment/customer_totals_report.rb'
- 'lib/reporting/reports/payments/payments_report.rb'
- 'lib/reporting/reports/xero_invoices/base.rb'
- 'lib/spree/core/controller_helpers/order.rb'
- 'lib/spree/core/controller_helpers/respond_with.rb'
- 'lib/spree/localized_number.rb'
- 'spec/models/product_importer_spec.rb'
# Offense count: 31
# Offense count: 32
# Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, IgnoredMethods.
Metrics/MethodLength:
Exclude:
@@ -583,23 +585,23 @@ Metrics/MethodLength:
- 'app/controllers/spree/orders_controller.rb'
- 'app/helpers/checkout_helper.rb'
- 'app/helpers/spree/admin/navigation_helper.rb'
- "app/json_schemas/json_api_schema.rb"
- 'app/json_schemas/json_api_schema.rb'
- 'app/models/spree/ability.rb'
- 'app/models/spree/gateway/pay_pal_express.rb'
- 'app/models/spree/order/checkout.rb'
- 'app/models/spree/payment/processing.rb'
- 'app/models/spree/preferences/preferable_class_methods.rb'
- 'engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb'
- 'engines/order_management/app/services/order_management/reports/enterprise_fee_summary/scope.rb'
- 'lib/discourse/single_sign_on.rb'
- 'lib/open_food_network/order_cycle_form_applicator.rb'
- 'lib/open_food_network/order_cycle_management_report.rb'
- 'lib/reporting/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/reporting/reports/enterprise_fee_summary/scope.rb'
- 'lib/reporting/reports/order_cycle_management/order_cycle_management_report.rb'
- 'lib/open_food_network/order_cycle_permissions.rb'
- 'lib/open_food_network/payments_report.rb'
- 'lib/open_food_network/xero_invoices_report.rb'
- 'lib/reporting/reports/payments/payments_report.rb'
- 'lib/reporting/reports/xero_invoices/base.rb'
- 'lib/tasks/sample_data/product_factory.rb'
# Offense count: 51
# Offense count: 54
# Configuration parameters: CountComments, Max, CountAsOne.
Metrics/ModuleLength:
Exclude:
@@ -630,17 +632,20 @@ Metrics/ModuleLength:
- 'spec/controllers/spree/admin/adjustments_controller_spec.rb'
- 'spec/controllers/spree/admin/payment_methods_controller_spec.rb'
- 'spec/lib/open_food_network/address_finder_spec.rb'
- 'spec/lib/open_food_network/customers_report_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/order_cycle_management_report_spec.rb'
- 'spec/lib/open_food_network/order_cycle_permissions_spec.rb'
- 'spec/lib/open_food_network/order_grouper_spec.rb'
- 'spec/lib/open_food_network/permissions_spec.rb'
- 'spec/lib/open_food_network/products_and_inventory_report_spec.rb'
- 'spec/lib/open_food_network/scope_variant_to_hub_spec.rb'
- 'spec/lib/open_food_network/tag_rule_applicator_spec.rb'
- 'spec/lib/open_food_network/users_and_enterprises_report_spec.rb'
- 'spec/lib/reports/customers_report_spec.rb'
- 'spec/lib/reports/enterprise_fee_summary/authorizer_spec.rb'
- 'spec/lib/reports/order_cycle_management_report_spec.rb'
- 'spec/lib/reports/order_grouper_spec.rb'
- 'spec/lib/reports/orders_and_fulfillment/customer_totals_report_spec.rb'
- 'spec/lib/reports/orders_and_fulfillment/orders_and_fulfillment_report_spec.rb'
- 'spec/lib/reports/products_and_inventory_report_spec.rb'
- 'spec/lib/reports/users_and_enterprises_report_spec.rb'
- 'spec/models/spree/adjustment_spec.rb'
- 'spec/models/spree/credit_card_spec.rb'
- 'spec/models/spree/line_item_spec.rb'
@@ -661,11 +666,11 @@ Metrics/ParameterLists:
Exclude:
- 'app/helpers/angular_form_builder.rb'
- 'app/models/product_import/entry_processor.rb'
- 'lib/open_food_network/xero_invoices_report.rb'
- 'lib/reporting/reports/xero_invoices/base.rb'
- 'spec/support/controller_requests_helper.rb'
- 'spec/system/admin/reports_spec.rb'
# Offense count: 8
# Offense count: 7
# Configuration parameters: IgnoredMethods, Max.
Metrics/PerceivedComplexity:
Exclude:
@@ -674,9 +679,8 @@ Metrics/PerceivedComplexity:
- 'app/models/enterprise_relationship.rb'
- 'app/models/spree/ability.rb'
- 'app/models/spree/order/checkout.rb'
- 'engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/open_food_network/group_buy_report.rb'
- 'lib/open_food_network/payments_report.rb'
- 'lib/reporting/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/reporting/reports/payments/payments_report.rb'
# Offense count: 9
Naming/AccessorMethodName:
@@ -721,7 +725,7 @@ Naming/VariableNumber:
- 'app/controllers/spree/orders_controller.rb'
- 'app/models/content_configuration.rb'
- 'app/models/preference_sections/main_links_section.rb'
- 'lib/open_food_network/orders_and_fulfillments_report/customer_totals_report.rb'
- 'lib/reporting/reports/orders_and_fulfillment/customer_totals_report.rb'
- 'lib/spree/core/controller_helpers/common.rb'
- 'spec/controllers/spree/admin/search_controller_spec.rb'
- 'spec/factories/stock_location_factory.rb'
@@ -900,7 +904,7 @@ Rails/LexicallyScopedActionFilter:
- 'app/controllers/spree/admin/zones_controller.rb'
- 'app/controllers/spree/users_controller.rb'
# Offense count: 18
# Offense count: 19
Rails/OutputSafety:
Exclude:
- 'app/controllers/spree/admin/reports_controller.rb'
@@ -1097,9 +1101,9 @@ Style/MissingRespondToMissing:
# Offense count: 1
Style/MixinUsage:
Exclude:
- 'lib/open_food_network/orders_and_fulfillments_report.rb'
- 'lib/reporting/reports/orders_and_fulfillment/orders_and_fulfillment_report.rb'
# Offense count: 2
# Offense count: 3
# Cop supports --auto-correct.
# Configuration parameters: EnforcedStyle.
# SupportedStyles: literals, strict
@@ -1123,7 +1127,7 @@ Style/NestedModifier:
- 'spec/system/admin/payments_stripe_spec.rb'
- 'spec/system/admin/reports_spec.rb'
# Offense count: 25
# Offense count: 26
# Configuration parameters: AllowedMethods.
# AllowedMethods: respond_to_missing?
Style/OptionalBooleanParameter:
@@ -1137,16 +1141,7 @@ Style/OptionalBooleanParameter:
- 'app/models/spree/order_contents.rb'
- 'app/models/spree/preferences/file_configuration.rb'
- 'app/models/spree/shipment.rb'
- 'engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb'
- 'engines/order_management/app/services/order_management/stock/estimator.rb'
- 'lib/open_food_network/customers_report.rb'
- 'lib/open_food_network/order_and_distributor_report.rb'
- 'lib/open_food_network/order_cycle_management_report.rb'
- 'lib/open_food_network/orders_and_fulfillments_report.rb'
- 'lib/open_food_network/payments_report.rb'
- 'lib/open_food_network/products_and_inventory_report_base.rb'
- 'lib/open_food_network/users_and_enterprises_report.rb'
- 'lib/open_food_network/xero_invoices_report.rb'
- 'lib/spree/core/controller_helpers/order.rb'
- 'lib/spree/core/delegate_belongs_to.rb'
- 'spec/support/request/web_helper.rb'
@@ -1166,11 +1161,10 @@ Style/RedundantReturn:
Exclude:
- 'app/controllers/spree/admin/shipping_methods_controller.rb'
# Offense count: 213
# Offense count: 205
Style/Send:
Exclude:
- 'app/controllers/split_checkout_controller.rb'
- 'engines/order_management/spec/services/order_management/reports/bulk_coop/bulk_coop_report_spec.rb'
- 'spec/controllers/admin/subscriptions_controller_spec.rb'
- 'spec/controllers/checkout_controller_spec.rb'
- 'spec/controllers/payment_gateways/paypal_controller_spec.rb'
@@ -1182,13 +1176,10 @@ Style/Send:
- '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/lettuce_share_report_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/products_and_inventory_report_spec.rb'
- 'spec/lib/open_food_network/sales_tax_report_spec.rb'
- 'spec/lib/open_food_network/tag_rule_applicator_spec.rb'
- 'spec/lib/open_food_network/xero_invoices_report_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'
@@ -1213,7 +1204,7 @@ Style/SingleArgumentDig:
Exclude:
- 'app/services/checkout/form_data_adapter.rb'
# Offense count: 5
# Offense count: 4
# Cop supports --auto-correct.
Style/SlicingWithRange:
Exclude:
@@ -1221,9 +1212,8 @@ Style/SlicingWithRange:
- 'app/services/embedded_page_service.rb'
- 'engines/order_management/app/services/order_management/subscriptions/validator.rb'
- 'lib/discourse/single_sign_on.rb'
- 'spec/lib/open_food_network/order_grouper_spec.rb'
# Offense count: 31
# Offense count: 28
# Cop supports --auto-correct.
# Configuration parameters: Mode.
Style/StringConcatenation:
@@ -1240,11 +1230,8 @@ Style/StringConcatenation:
- 'app/serializers/api/enterprise_shopfront_list_serializer.rb'
- 'app/services/embedded_page_service.rb'
- 'app/services/products_renderer.rb'
- 'engines/order_management/app/services/order_management/reports/bulk_coop/bulk_coop_report.rb'
- 'lib/open_food_network/orders_and_fulfillments_report/customer_totals_report.rb'
- 'lib/spree/api/controller_setup.rb'
- 'lib/spree/core/environment_extension.rb'
- 'spec/lib/open_food_network/order_grouper_spec.rb'
- 'spec/models/spree/line_item_spec.rb'
- 'spec/models/spree/product_spec.rb'
- 'spec/models/spree/variant_spec.rb'

View File

@@ -23,7 +23,9 @@ RUN apt-get update && apt-get install -y \
imagemagick \
unzip \
libjemalloc-dev \
libssl-dev
libssl-dev \
ca-certificates \
gnupg
# Setup ENV variables
ENV PATH /usr/local/src/rbenv/shims:/usr/local/src/rbenv/bin:$PATH
@@ -40,14 +42,13 @@ RUN git clone --depth 1 https://github.com/rbenv/rbenv.git ${RBENV_ROOT} && \
git clone --depth 1 https://github.com/rbenv/ruby-build.git ${RBENV_ROOT}/plugins/ruby-build && \
echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh && \
RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install $(cat .ruby-version) && \
rbenv global $(cat .ruby-version) && \
gem install bundler --version=1.17.3
rbenv global $(cat .ruby-version)
# Install Postgres
RUN sh -c "echo 'deb https://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main' > /etc/apt/sources.list.d/pgdg.list" && \
wget --quiet -O - https://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | apt-key add - && \
RUN sh -c "echo 'deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main' >> /etc/apt/sources.list.d/pgdg.list" && \
curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null && \
apt-get update && \
apt-get install -yqq --no-install-recommends postgresql-client-9.5 libpq-dev
apt-get install -yqq --no-install-recommends postgresql-client-10 libpq-dev
# Install NodeJs and yarn
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - \
@@ -68,6 +69,9 @@ RUN wget https://chromedriver.storage.googleapis.com/2.41/chromedriver_linux64.z
# Copy code and install app dependencies
COPY . /usr/src/app/
# Install Bundler
RUN ./script/install-bundler
# Install front-end dependencies
RUN yarn install

10
Gemfile
View File

@@ -8,6 +8,11 @@ gem 'dotenv-rails', require: 'dotenv/rails-now' # Load ENV vars before other gem
gem 'rails', '>= 6.1.4'
# Active Storage
gem "active_storage_validations"
gem "aws-sdk-s3", require: false
gem "image_processing"
gem 'activemerchant', '>= 1.78.0'
gem 'rexml'
gem 'angular-rails-templates', '>= 0.3.0'
@@ -24,6 +29,7 @@ gem 'rails_safe_tasks', '~> 1.0'
gem "activerecord-import"
gem "db2fog", github: "openfoodfoundation/db2fog", branch: "rails-6"
gem "fog-aws", "~> 2.0" # db2fog does not support v3
gem "mime-types" # required by fog
gem "valid_email2"
@@ -64,7 +70,6 @@ gem 'rswag-api'
gem 'rswag-ui'
gem 'angularjs-rails', '1.8.0'
gem 'aws-sdk', '1.67.0'
gem 'bugsnag'
gem 'haml'
gem 'redcarpet'
@@ -81,7 +86,6 @@ gem 'bootsnap', require: false
gem 'geocoder'
gem 'gmaps4rails'
gem 'mimemagic', '> 0.3.5'
gem 'paperclip', '~> 3.4.1'
gem 'paper_trail', '~> 12.1.0'
gem 'rack-rewrite'
gem 'rack-ssl', require: 'rack/ssl'
@@ -100,7 +104,7 @@ gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'
gem 'immigrant'
gem 'roo', github: "roo-rb/roo" # master is currently needed for Ruby 3.x (awaiting new release)
gem 'roo'
gem 'spreadsheet_architect'
gem 'whenever', require: false

View File

@@ -24,14 +24,6 @@ GIT
sass-rails
thor (>= 0.14)
GIT
remote: https://github.com/roo-rb/roo.git
revision: 709464c77623be2bc09b2103405d90ded7604a75
specs:
roo (2.8.3)
nokogiri (~> 1)
rubyzip (>= 1.3.0, < 3.0.0)
PATH
remote: engines/catalog
specs:
@@ -59,62 +51,67 @@ GEM
remote: https://rubygems.org/
specs:
Ascii85 (1.1.0)
actioncable (6.1.4.4)
actionpack (= 6.1.4.4)
activesupport (= 6.1.4.4)
actioncable (6.1.6.1)
actionpack (= 6.1.6.1)
activesupport (= 6.1.6.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
actionmailbox (6.1.4.4)
actionpack (= 6.1.4.4)
activejob (= 6.1.4.4)
activerecord (= 6.1.4.4)
activestorage (= 6.1.4.4)
activesupport (= 6.1.4.4)
actionmailbox (6.1.6.1)
actionpack (= 6.1.6.1)
activejob (= 6.1.6.1)
activerecord (= 6.1.6.1)
activestorage (= 6.1.6.1)
activesupport (= 6.1.6.1)
mail (>= 2.7.1)
actionmailer (6.1.4.4)
actionpack (= 6.1.4.4)
actionview (= 6.1.4.4)
activejob (= 6.1.4.4)
activesupport (= 6.1.4.4)
actionmailer (6.1.6.1)
actionpack (= 6.1.6.1)
actionview (= 6.1.6.1)
activejob (= 6.1.6.1)
activesupport (= 6.1.6.1)
mail (~> 2.5, >= 2.5.4)
rails-dom-testing (~> 2.0)
actionpack (6.1.4.4)
actionview (= 6.1.4.4)
activesupport (= 6.1.4.4)
actionpack (6.1.6.1)
actionview (= 6.1.6.1)
activesupport (= 6.1.6.1)
rack (~> 2.0, >= 2.0.9)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.0, >= 1.2.0)
actionpack-action_caching (1.2.2)
actionpack (>= 4.0.0)
actiontext (6.1.4.4)
actionpack (= 6.1.4.4)
activerecord (= 6.1.4.4)
activestorage (= 6.1.4.4)
activesupport (= 6.1.4.4)
actiontext (6.1.6.1)
actionpack (= 6.1.6.1)
activerecord (= 6.1.6.1)
activestorage (= 6.1.6.1)
activesupport (= 6.1.6.1)
nokogiri (>= 1.8.5)
actionview (6.1.4.4)
activesupport (= 6.1.4.4)
actionview (6.1.6.1)
activesupport (= 6.1.6.1)
builder (~> 3.1)
erubi (~> 1.4)
rails-dom-testing (~> 2.0)
rails-html-sanitizer (~> 1.1, >= 1.2.0)
active_model_serializers (0.8.4)
activemodel (>= 3.0)
activejob (6.1.4.4)
activesupport (= 6.1.4.4)
active_storage_validations (0.9.8)
activejob (>= 5.2.0)
activemodel (>= 5.2.0)
activestorage (>= 5.2.0)
activesupport (>= 5.2.0)
activejob (6.1.6.1)
activesupport (= 6.1.6.1)
globalid (>= 0.3.6)
activemerchant (1.123.0)
activesupport (>= 4.2)
builder (>= 2.1.2, < 4.0.0)
i18n (>= 0.6.9)
nokogiri (~> 1.4)
activemodel (6.1.4.4)
activesupport (= 6.1.4.4)
activerecord (6.1.4.4)
activemodel (= 6.1.4.4)
activesupport (= 6.1.4.4)
activerecord-import (1.3.0)
activemodel (6.1.6.1)
activesupport (= 6.1.6.1)
activerecord (6.1.6.1)
activemodel (= 6.1.6.1)
activesupport (= 6.1.6.1)
activerecord-import (1.4.0)
activerecord (>= 4.2)
activerecord-postgresql-adapter (0.0.1)
pg
@@ -124,14 +121,14 @@ GEM
multi_json (~> 1.11, >= 1.11.2)
rack (>= 2.0.8, < 3)
railties (>= 5.2.4.1)
activestorage (6.1.4.4)
actionpack (= 6.1.4.4)
activejob (= 6.1.4.4)
activerecord (= 6.1.4.4)
activesupport (= 6.1.4.4)
marcel (~> 1.0.0)
activestorage (6.1.6.1)
actionpack (= 6.1.6.1)
activejob (= 6.1.6.1)
activerecord (= 6.1.6.1)
activesupport (= 6.1.6.1)
marcel (~> 1.0)
mini_mime (>= 1.1.0)
activesupport (6.1.4.4)
activesupport (6.1.6.1)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
@@ -152,29 +149,40 @@ GEM
railties (>= 3, < 7)
angularjs-file-upload-rails (2.4.1)
angularjs-rails (1.8.0)
arel-helpers (2.12.1)
activerecord (>= 3.1.0, < 7)
arel-helpers (2.14.0)
activerecord (>= 3.1.0, < 8)
ast (2.4.2)
awesome_nested_set (3.4.0)
activerecord (>= 4.0.0, < 7.0)
awesome_nested_set (3.5.0)
activerecord (>= 4.0.0, < 7.1)
awesome_print (1.9.2)
aws-sdk (1.67.0)
aws-sdk-v1 (= 1.67.0)
aws-sdk-v1 (1.67.0)
json (~> 1.4)
nokogiri (~> 1)
aws-eventstream (1.2.0)
aws-partitions (1.601.0)
aws-sdk-core (3.131.2)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.525.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.57.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.114.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
aws-sigv4 (1.5.0)
aws-eventstream (~> 1, >= 1.0.2)
axlsx_styler (1.1.0)
activesupport (>= 3.1)
caxlsx (>= 2.0.2)
bcrypt (3.1.16)
bcrypt (3.1.18)
bigdecimal (3.0.2)
bindex (0.8.1)
bootsnap (1.10.1)
bootsnap (1.12.0)
msgpack (~> 1.2)
bugsnag (6.24.1)
bugsnag (6.24.2)
concurrent-ruby (~> 1.0)
builder (3.2.4)
bullet (6.1.5)
bullet (7.0.2)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
byebug (11.1.3)
@@ -182,7 +190,7 @@ GEM
rails (>= 5.2)
thread-local (>= 1.1.0)
cancancan (1.15.0)
capybara (3.36.0)
capybara (3.37.1)
addressable
matrix
mini_mime (>= 0.1.3)
@@ -198,10 +206,7 @@ GEM
rubyzip (>= 1.3.0, < 3)
childprocess (4.1.0)
chronic (0.10.2)
climate_control (0.2.0)
cliver (0.3.2)
cocaine (0.5.8)
climate_control (>= 0.0.3, < 1.0)
coderay (1.1.3)
coffee-rails (5.0.0)
coffee-script (>= 2.2.0)
@@ -210,14 +215,15 @@ GEM
coffee-script-source
execjs
coffee-script-source (1.12.2)
combine_pdf (1.0.21)
combine_pdf (1.0.22)
matrix
ruby-rc4 (>= 0.1.5)
concurrent-ruby (1.1.9)
concurrent-ruby (1.1.10)
connection_pool (2.2.5)
crack (0.4.5)
rexml
crass (1.0.6)
css_parser (1.9.0)
css_parser (1.11.0)
addressable
cuprite (0.13)
capybara (>= 2.1, < 4)
@@ -233,7 +239,7 @@ GEM
msgpack
debase-ruby_core_source (0.10.12)
debugger-linecache (1.2.0)
devise (4.8.0)
devise (4.8.1)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 4.1.0)
@@ -241,7 +247,7 @@ GEM
warden (~> 1.2.3)
devise-encryptable (0.2.0)
devise (>= 2.1.0)
devise-i18n (1.10.0)
devise-i18n (1.10.2)
devise (>= 4.8.0)
devise-token_authenticatable (1.1.0)
devise (>= 4.0.0, < 5.0.0)
@@ -253,9 +259,8 @@ GEM
dotenv (= 2.7.6)
railties (>= 3.2)
dry-inflector (0.2.1)
e2mmap (0.1.0)
erubi (1.10.0)
et-orbi (1.2.4)
et-orbi (1.2.7)
tzinfo
excon (0.81.0)
execjs (2.7.0)
@@ -264,21 +269,16 @@ GEM
factory_bot_rails (6.2.0)
factory_bot (~> 6.2.0)
railties (>= 5.0.0)
faraday (1.4.1)
faraday-excon (~> 1.1)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.1)
multipart-post (>= 1.2, < 3)
faraday (2.3.0)
faraday-net_http (~> 2.0)
ruby2_keywords (>= 0.0.4)
faraday-excon (1.1.0)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.1.0)
faraday-net_http (2.0.3)
ferrum (0.11)
addressable (~> 2.5)
cliver (~> 0.3)
concurrent-ruby (~> 1.1)
websocket-driver (>= 0.6, < 0.8)
ffaker (2.20.0)
ffaker (2.21.0)
ffi (1.15.5)
flipper (0.20.4)
flipper-active_record (0.20.4)
@@ -306,17 +306,17 @@ GEM
nokogiri (>= 1.5.11, < 2.0.0)
foreman (0.87.2)
formatador (0.2.5)
fugit (1.4.5)
et-orbi (~> 1.1, >= 1.1.8)
fugit (1.5.3)
et-orbi (~> 1, >= 1.2.7)
raabro (~> 1.4)
fuubar (2.5.1)
rspec-core (~> 3.0)
ruby-progressbar (~> 1.4)
geocoder (1.7.0)
geocoder (1.8.0)
globalid (1.0.0)
activesupport (>= 5.0)
gmaps4rails (2.1.2)
good_migrations (0.1.0)
good_migrations (0.2.1)
activerecord (>= 3.1)
railties (>= 3.1)
haml (5.2.2)
@@ -327,20 +327,24 @@ GEM
highline (2.0.3)
hiredis (0.6.3)
htmlentities (4.3.4)
i18n (1.8.10)
i18n (1.12.0)
concurrent-ruby (~> 1.0)
i18n-js (3.9.0)
i18n-js (3.9.2)
i18n (>= 0.6.6)
image_processing (1.12.2)
mini_magick (>= 4.9.5, < 5)
ruby-vips (>= 2.0.17, < 3)
immigrant (0.3.6)
activerecord (>= 3.0)
ipaddress (0.8.3)
jmespath (1.6.1)
jquery-rails (4.4.0)
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
jquery-ui-rails (4.2.1)
railties (>= 3.2.16)
json (2.6.1)
json (2.6.2)
json-schema (2.8.1)
addressable (>= 2.4)
json_spec (1.1.5)
@@ -348,18 +352,18 @@ GEM
rspec (>= 2.0, < 4.0)
jsonapi-serializer (2.2.0)
activesupport (>= 4.2)
jwt (2.3.0)
jwt (2.4.1)
knapsack (4.0.0)
rake
launchy (2.5.0)
addressable (~> 2.7)
letter_opener (1.7.0)
launchy (~> 2.2)
letter_opener (1.8.1)
launchy (>= 2.2, < 3)
libv8-node (15.14.0.1)
listen (3.7.1)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
loofah (2.13.0)
loofah (2.18.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mail (2.7.1)
@@ -367,31 +371,31 @@ GEM
marcel (1.0.2)
matrix (0.4.2)
method_source (1.0.0)
mime-types (3.3.1)
mime-types (3.4.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2021.0225)
mimemagic (0.4.3)
nokogiri (~> 1)
rake
mini_magick (4.11.0)
mini_mime (1.1.2)
mini_portile2 (2.8.0)
mini_racer (0.4.0)
libv8-node (~> 15.14.0.0)
minitest (5.15.0)
minitest (5.16.2)
monetize (1.12.0)
money (~> 6.12)
money (6.16.0)
i18n (>= 0.6.4, <= 2)
msgpack (1.4.2)
msgpack (1.5.4)
multi_json (1.15.0)
multi_xml (0.6.0)
multipart-post (2.1.1)
nio4r (2.5.8)
nokogiri (1.13.3)
nokogiri (1.13.8)
mini_portile2 (~> 2.8.0)
racc (~> 1.4)
oauth2 (1.4.7)
faraday (>= 0.8, < 2.0)
oauth2 (1.4.10)
faraday (>= 0.17.3, < 3.0)
jwt (>= 1.0, < 3.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
@@ -401,16 +405,10 @@ GEM
paper_trail (12.1.0)
activerecord (>= 5.2)
request_store (~> 1.1)
paperclip (3.4.2)
activemodel (>= 3.0.0)
activerecord (>= 3.0.0)
activesupport (>= 3.0.0)
cocaine (~> 0.5.0)
mime-types
parallel (1.21.0)
paranoia (2.4.3)
activerecord (>= 4.0, < 6.2)
parser (3.1.0.0)
parallel (1.22.1)
paranoia (2.6.0)
activerecord (>= 5.1, < 7.1)
parser (3.1.2.0)
ast (~> 2.4.1)
paypal-sdk-core (0.3.4)
multi_json (~> 1.0)
@@ -431,13 +429,13 @@ GEM
pry-byebug (3.9.0)
byebug (~> 11.0)
pry (~> 0.13.0)
public_suffix (4.0.6)
puma (5.6.2)
public_suffix (4.0.7)
puma (5.6.4)
nio4r (~> 2.0)
raabro (1.4.0)
racc (1.6.0)
rack (2.2.3)
rack-mini-profiler (2.3.3)
rack (2.2.4)
rack-mini-profiler (2.3.4)
rack (>= 1.2.0)
rack-protection (2.1.0)
rack
@@ -446,23 +444,23 @@ GEM
rack-rewrite (1.5.1)
rack-ssl (1.4.1)
rack
rack-test (1.1.0)
rack (>= 1.0, < 3)
rack-timeout (0.6.0)
rails (6.1.4.4)
actioncable (= 6.1.4.4)
actionmailbox (= 6.1.4.4)
actionmailer (= 6.1.4.4)
actionpack (= 6.1.4.4)
actiontext (= 6.1.4.4)
actionview (= 6.1.4.4)
activejob (= 6.1.4.4)
activemodel (= 6.1.4.4)
activerecord (= 6.1.4.4)
activestorage (= 6.1.4.4)
activesupport (= 6.1.4.4)
rack-test (2.0.2)
rack (>= 1.3)
rack-timeout (0.6.3)
rails (6.1.6.1)
actioncable (= 6.1.6.1)
actionmailbox (= 6.1.6.1)
actionmailer (= 6.1.6.1)
actionpack (= 6.1.6.1)
actiontext (= 6.1.6.1)
actionview (= 6.1.6.1)
activejob (= 6.1.6.1)
activemodel (= 6.1.6.1)
activerecord (= 6.1.6.1)
activestorage (= 6.1.6.1)
activesupport (= 6.1.6.1)
bundler (>= 1.15.0)
railties (= 6.1.4.4)
railties (= 6.1.6.1)
sprockets-rails (>= 2.0.0)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
@@ -471,17 +469,17 @@ GEM
rails-dom-testing (2.0.3)
activesupport (>= 4.2.0)
nokogiri (>= 1.6)
rails-html-sanitizer (1.4.2)
rails-html-sanitizer (1.4.3)
loofah (~> 2.3)
rails-i18n (7.0.1)
rails-i18n (7.0.5)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
rails_safe_tasks (1.0.0)
railties (6.1.4.4)
actionpack (= 6.1.4.4)
activesupport (= 6.1.4.4)
railties (6.1.6.1)
actionpack (= 6.1.6.1)
activesupport (= 6.1.6.1)
method_source
rake (>= 0.13)
rake (>= 12.2)
thor (~> 1.0)
rainbow (3.1.1)
rake (13.0.6)
@@ -493,24 +491,27 @@ GEM
rb-inotify (0.10.1)
ffi (~> 1.0)
redcarpet (3.5.1)
redis (4.5.1)
regexp_parser (2.2.0)
redis (4.7.1)
regexp_parser (2.5.0)
request_store (1.5.0)
rack (>= 1.4)
responders (3.0.1)
actionpack (>= 5.0)
railties (>= 5.0)
rexml (3.2.5)
roadie (4.0.0)
roadie (5.0.1)
css_parser (~> 1.4)
nokogiri (~> 1.8)
roadie-rails (2.2.0)
railties (>= 5.1, < 6.2)
roadie (>= 3.1, < 5.0)
roadie-rails (3.0.0)
railties (>= 5.1, < 7.1)
roadie (~> 5.0)
rodf (1.1.1)
builder (>= 3.0)
dry-inflector (~> 0.1)
rubyzip (>= 1.0)
roo (2.9.0)
nokogiri (~> 1)
rubyzip (>= 1.3.0, < 3.0.0)
rspec (3.10.0)
rspec-core (~> 3.10.0)
rspec-expectations (~> 3.10.0)
@@ -534,35 +535,38 @@ GEM
rspec-retry (0.6.2)
rspec-core (> 3.3)
rspec-support (3.10.2)
rswag-api (2.4.0)
railties (>= 3.1, < 7.0)
rswag-specs (2.4.0)
activesupport (>= 3.1, < 7.0)
rswag-api (2.5.1)
railties (>= 3.1, < 7.1)
rswag-specs (2.5.1)
activesupport (>= 3.1, < 7.1)
json-schema (~> 2.2)
railties (>= 3.1, < 7.0)
rswag-ui (2.4.0)
actionpack (>= 3.1, < 7.0)
railties (>= 3.1, < 7.0)
rubocop (1.22.2)
railties (>= 3.1, < 7.1)
rswag-ui (2.5.1)
actionpack (>= 3.1, < 7.1)
railties (>= 3.1, < 7.1)
rubocop (1.32.0)
json (~> 2.3)
parallel (~> 1.10)
parser (>= 3.0.0.0)
parser (>= 3.1.0.0)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0)
rexml
rubocop-ast (>= 1.12.0, < 2.0)
rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.19.1, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 1.4.0, < 3.0)
rubocop-ast (1.15.1)
parser (>= 3.0.1.1)
rubocop-rails (2.13.2)
rubocop-ast (1.19.1)
parser (>= 3.1.1.0)
rubocop-rails (2.15.2)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.7.0, < 2.0)
ruby-progressbar (1.11.0)
ruby-rc4 (0.1.5)
ruby2_keywords (0.0.4)
ruby-vips (2.1.4)
ffi (~> 1.12)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
rufus-scheduler (3.7.0)
rufus-scheduler (3.8.1)
fugit (~> 1.1, >= 1.1.6)
sass (3.4.25)
sass-rails (5.0.8)
@@ -572,23 +576,22 @@ GEM
sprockets-rails (>= 2.0, < 4.0)
tilt (>= 1.1, < 3)
sd_notify (0.1.1)
selenium-webdriver (4.0.3)
selenium-webdriver (4.3.0)
childprocess (>= 0.5, < 5.0)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
semantic_range (3.0.0)
shoulda-matchers (5.0.0)
shoulda-matchers (5.1.0)
activesupport (>= 5.2.0)
sidekiq (6.3.1)
sidekiq (6.5.1)
connection_pool (>= 2.2.2)
rack (~> 2.0)
redis (>= 4.2.0)
sidekiq-scheduler (3.1.0)
e2mmap
redis (>= 3, < 5)
sidekiq-scheduler (4.0.2)
redis (>= 4.2.0)
rufus-scheduler (~> 3.2)
sidekiq (>= 3)
thwait
sidekiq (>= 4)
tilt (>= 1.4.0)
simplecov (0.21.2)
docile (~> 1.1)
@@ -600,7 +603,7 @@ GEM
axlsx_styler (>= 1.0.0, < 2)
caxlsx (>= 2.0.2, < 4)
rodf (>= 1.0.0, < 2)
spring (3.0.0)
spring (4.0.0)
spring-commands-rspec (1.0.4)
spring (>= 0.9.1)
sprockets (3.7.2)
@@ -620,33 +623,31 @@ GEM
stringex (2.8.5)
stripe (5.42.0)
temple (0.8.2)
test-prof (1.0.7)
test-unit (3.5.0)
test-prof (1.0.9)
test-unit (3.5.3)
power_assert
thor (1.2.1)
thread-local (1.1.0)
thwait (0.2.0)
e2mmap
tilt (2.0.10)
timecop (0.9.4)
timecop (0.9.5)
ttfunk (1.7.0)
tzinfo (2.0.4)
tzinfo (2.0.5)
concurrent-ruby (~> 1.0)
uglifier (4.2.0)
execjs (>= 0.3.0, < 3)
unicode-display_width (2.1.0)
uniform_notifier (1.14.2)
valid_email2 (4.0.0)
unicode-display_width (2.2.0)
uniform_notifier (1.16.0)
valid_email2 (4.0.3)
activemodel (>= 3.2)
mail (~> 2.5)
view_component (2.41.0)
view_component (2.62.0)
activesupport (>= 5.0.0, < 8.0)
method_source (~> 1.0)
view_component_storybook (0.10.1)
view_component_storybook (0.11.1)
view_component (>= 2.36)
warden (1.2.9)
rack (>= 2.0.9)
web-console (4.1.0)
web-console (4.2.0)
actionview (>= 6.0.0)
activemodel (>= 6.0.0)
bindex (>= 0.4.0)
@@ -664,18 +665,19 @@ GEM
rack-proxy (>= 0.6.1)
railties (>= 5.2)
semantic_range (>= 2.3.0)
websocket (1.2.9)
websocket-driver (0.7.5)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
whenever (1.0.0)
chronic (>= 0.6.3)
wicked_pdf (2.1.0)
wicked_pdf (2.6.3)
activesupport
wkhtmltopdf-binary (0.12.6.5)
xml-simple (1.1.8)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.5.3)
zeitwerk (2.6.0)
PLATFORMS
ruby
@@ -683,6 +685,7 @@ PLATFORMS
DEPENDENCIES
actionpack-action_caching
active_model_serializers (= 0.8.4)
active_storage_validations
activemerchant (>= 1.78.0)
activerecord-import
activerecord-postgresql-adapter
@@ -696,7 +699,7 @@ DEPENDENCIES
arel-helpers (~> 2.12)
awesome_nested_set
awesome_print
aws-sdk (= 1.67.0)
aws-sdk-s3
bigdecimal (= 3.0.2)
bootsnap
bugsnag
@@ -736,6 +739,7 @@ DEPENDENCIES
hiredis
i18n
i18n-js (~> 3.9.0)
image_processing
immigrant
jquery-rails (= 4.4.0)
jquery-ui-rails (~> 4.2)
@@ -746,6 +750,7 @@ DEPENDENCIES
knapsack
letter_opener (>= 1.4.1)
listen
mime-types
mimemagic (> 0.3.5)
mini_racer (= 0.4.0)
monetize (~> 1.11)
@@ -754,7 +759,6 @@ DEPENDENCIES
order_management!
pagy (~> 5.1)
paper_trail (~> 12.1.0)
paperclip (~> 3.4.1)
paranoia (~> 2.4)
paypal-sdk-merchant (= 1.117.2)
pdf-reader
@@ -776,7 +780,7 @@ DEPENDENCIES
responders
rexml
roadie-rails
roo!
roo
rspec-rails (>= 3.5.2)
rspec-retry
rswag-api

View File

@@ -1,6 +0,0 @@
angular.module("ofn.admin").directive "select2NoSearch", ($timeout) ->
restrict: 'CA'
link: (scope, element, attrs) ->
$timeout ->
element.select2
minimumResultsForSearch: Infinity

View File

@@ -10,6 +10,7 @@
scope.$emit "offClick"
element.click (event) ->
return if event.target.closest(".ofn-drop-down").classList.contains "disabled" || event.target.classList.contains "disabled"
if !scope.expanded
event.stopPropagation()
scope.deregistrationCallback = scope.$on "offClick", ->

View File

@@ -9,9 +9,9 @@ angular.module("admin.enterpriseFees").directive 'spreeEnsureCalculatorPreferenc
settings = element.parent().parent().find('div.calculator-settings')
if value == orig_calculator_type
settings.show()
settings.find('input').prop 'disabled', false
settings.find('input, select').prop 'disabled', false
else
settings.hide()
settings.find('input').prop 'disabled', true
settings.find('input, select').prop 'disabled', true
return
return

View File

@@ -16,6 +16,7 @@ angular.module("admin.enterprises")
{ name: 'shipping_methods', label: t('shipping_methods'), icon_class: "icon-truck", show: "showShippingMethods()" }
{ name: 'payment_methods', label: t('payment_methods'), icon_class: "icon-money", show: "showPaymentMethods()" }
{ name: 'enterprise_fees', label: t('enterprise_fees'), icon_class: "icon-tasks", show: "showEnterpriseFees()" }
{ name: 'enterprise_permissions', label: t('enterprise_permissions'), icon_class: "icon-plug" }
{ name: 'inventory_settings', label: t('inventory_settings'), icon_class: "icon-list-ol", show: "enterpriseIsShop()" }
{ name: 'tag_rules', label: t('tag_rules'), icon_class: "icon-random", show: "enterpriseIsShop()" }
{ name: 'shop_preferences', label: t('shop_preferences'), icon_class: "icon-shopping-cart", show: "enterpriseIsShop()" }
@@ -44,3 +45,5 @@ angular.module("admin.enterprises")
$scope.enterpriseIsShop = ->
$scope.Enterprise.sells != "none"
$scope.menu.redirect_function('enterprise_permissions', '/admin/enterprise_relationships')

View File

@@ -104,15 +104,21 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
else
StatusMessage.display 'failure', t "unsaved_changes_error"
$scope.cancelOrder = (order) ->
$scope.cancelOrder = (order, sendEmailCancellation) ->
return $http(
method: 'GET'
url: "/admin/orders/#{order.number}/fire?e=cancel")
url: "/admin/orders/#{order.number}/fire?e=cancel&send_cancellation_email=#{sendEmailCancellation}")
$scope.deleteLineItem = (lineItem) ->
if lineItem.order.item_count == 1
if confirm(t('js.admin.deleting_item_will_cancel_order'))
$scope.cancelOrder(lineItem.order).then(-> $scope.refreshData())
ofnCancelOrderAlert((confirm, sendEmailCancellation) ->
if confirm
$scope.cancelOrder(lineItem.order, sendEmailCancellation).then(->
$scope.refreshData()
)
else
$scope.refreshData()
, "js.admin.deleting_item_will_cancel_order")
else if ($scope.confirmDelete && confirm(t "are_you_sure")) || !$scope.confirmDelete
LineItems.delete(lineItem, () -> $scope.refreshData())
@@ -129,13 +135,14 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
willCancelOrders = true if (order.item_count == itemsPerOrder.get(order).length)
if willCancelOrders
return unless confirm(t("js.admin.deleting_item_will_cancel_order"))
itemsPerOrder.forEach (items, order) =>
if order.item_count == items.length
$scope.cancelOrder(order).then(-> $scope.refreshData())
else
Promise.all(LineItems.delete(item) for item in items).then(-> $scope.refreshData())
ofnCancelOrderAlert((confirm, sendEmailCancellation) ->
if confirm
itemsPerOrder.forEach (items, order) =>
if order.item_count == items.length
$scope.cancelOrder(order, sendEmailCancellation).then(-> $scope.refreshData())
else
Promise.all(LineItems.delete(item) for item in items).then(-> $scope.refreshData())
, "js.admin.deleting_item_will_cancel_order")
$scope.allBoxesChecked = ->
checkedCount = $scope.filteredLineItems.reduce (count,lineItem) ->
@@ -159,12 +166,18 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
$scope.sumUnitValues = ->
sum = $scope.filteredLineItems?.reduce (sum, lineItem) ->
sum + $scope.roundToThreeDecimals(lineItem.final_weight_volume / $scope.getLineItemScale(lineItem))
if lineItem.units_product.variant_unit == "items"
sum + lineItem.quantity
else
sum + $scope.roundToThreeDecimals(lineItem.final_weight_volume / $scope.getLineItemScale(lineItem))
, 0
$scope.sumMaxUnitValues = ->
sum = $scope.filteredLineItems?.reduce (sum,lineItem) ->
sum + lineItem.max_quantity * $scope.roundToThreeDecimals(lineItem.units_variant.unit_value / $scope.getLineItemScale(lineItem))
if lineItem.units_product.variant_unit == "items"
sum + lineItem.max_quantity
else
sum + lineItem.max_quantity * $scope.roundToThreeDecimals(lineItem.units_variant.unit_value / $scope.getLineItemScale(lineItem))
, 0
$scope.roundToThreeDecimals = (value) ->
@@ -178,6 +191,8 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
$scope.getScale = (unitsProduct, unitsVariant) ->
if unitsProduct.hasOwnProperty("variant_unit") && (unitsProduct.variant_unit == "weight" || unitsProduct.variant_unit == "volume")
unitsProduct.variant_unit_scale
else if unitsProduct.hasOwnProperty("variant_unit") && unitsProduct.variant_unit == "items"
1
else
null
@@ -202,11 +217,11 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
$scope.fulfilled = (sumOfUnitValues) ->
# A Units Variant is an API object which holds unit properies of a variant
if $scope.selectedUnitsProduct.hasOwnProperty("group_buy_unit_size") && $scope.selectedUnitsProduct.group_buy_unit_size > 0 &&
$scope.selectedUnitsProduct.hasOwnProperty("variant_unit") &&
( $scope.selectedUnitsProduct.variant_unit == "weight" || $scope.selectedUnitsProduct.variant_unit == "volume" )
scale = $scope.selectedUnitsProduct.variant_unit_scale
sumOfUnitValues = sumOfUnitValues * scale unless scale == 28.35 || scale == 453.6
if $scope.selectedUnitsProduct.hasOwnProperty("group_buy_unit_size")&& $scope.selectedUnitsProduct.group_buy_unit_size > 0 &&
$scope.selectedUnitsProduct.hasOwnProperty("variant_unit")
if $scope.selectedUnitsProduct.variant_unit == "weight" || $scope.selectedUnitsProduct.variant_unit == "volume"
scale = $scope.selectedUnitsProduct.variant_unit_scale
sumOfUnitValues = sumOfUnitValues * scale unless scale == 28.35 || scale == 453.6
$scope.roundToThreeDecimals(sumOfUnitValues / $scope.selectedUnitsProduct.group_buy_unit_size)
else
''

View File

@@ -20,7 +20,7 @@ angular.module("admin.orders").controller "orderCtrl", ($scope, shops, orderCycl
$scope.distributor_id && $scope.order_cycle_id
for oc in $scope.orderCycles
oc.name_and_status = "#{oc.name} (#{oc.status})"
oc.name_and_status = "#{oc.name} (#{t("admin.order_cycles.status.#{oc.status}")})"
for shop in $scope.shops
shop.disabled = !$scope.distributorHasOrderCycles(shop)

View File

@@ -1,62 +0,0 @@
angular.module("admin.orders").directive 'customerSearchOverride', ->
restrict: 'C'
scope:
distributorId: '@'
link: (scope, element, attr) ->
if $('#customer_autocomplete_template').length > 0
customerTemplate = Handlebars.compile($('#customer_autocomplete_template').text())
formatCustomerResult = (customer) ->
customerTemplate
customer: customer
bill_address: customer.bill_address
ship_address: customer.ship_address
element.select2
placeholder: Spree.translations.choose_a_customer
minimumInputLength: 3
ajax:
url: '/admin/search/customers.json'
datatype: 'json'
data: (term, page) ->
{
q: term
distributor_id: scope.distributorId # modified
}
results: (data, page) ->
{ results: data }
dropdownCssClass: 'customer_search'
formatResult: formatCustomerResult
formatSelection: (customer) ->
_.each [
'bill_address'
'ship_address'
], (address) ->
data = customer[address]
address_parts = [
'firstname'
'lastname'
'company'
'address1'
'address2'
'city'
'zipcode'
'phone'
]
attribute_wrapper = '#order_' + address + '_attributes_'
if data # modified
_.each address_parts, (part) ->
$(attribute_wrapper + part).val data[part]
return
$(attribute_wrapper + 'state_id').select2 'val', data['state_id']
$(attribute_wrapper + 'country_id').select2 'val', data['country_id']
else
_.each address_parts, (part) ->
$(attribute_wrapper + part).val ''
return
$(attribute_wrapper + 'state_id').select2 'val', ''
$(attribute_wrapper + 'country_id').select2 'val', ''
return
$('#order_email').val customer.email
$('#user_id').val customer.user_id # modified
customer.email

View File

@@ -8,7 +8,7 @@ angular.module("admin.products")
$scope.processVariantUnitWithScale()
$scope.processUnitValueWithDescription()
$scope.processUnitPrice()
$scope.placeholder_text = new OptionValueNamer($scope.product.master).name()
$scope.placeholder_text = new OptionValueNamer($scope.product.master).name() if $scope.product.variant_unit_scale
$scope.variant_unit_options = VariantUnitManager.variantUnitOptions()
@@ -21,6 +21,8 @@ angular.module("admin.products")
else
$scope.product.variant_unit = $scope.product.variant_unit_with_scale
$scope.product.variant_unit_scale = null
else if $scope.product.variant_unit && $scope.product.variant_unit_scale
$scope.product.variant_unit_with_scale = VariantUnitManager.getUnitWithScale($scope.product.variant_unit, parseFloat($scope.product.variant_unit_scale))
else
$scope.product.variant_unit = $scope.product.variant_unit_scale = null
@@ -32,6 +34,10 @@ angular.module("admin.products")
$scope.product.master.unit_value = null if isNaN($scope.product.master.unit_value)
$scope.product.master.unit_value *= $scope.product.variant_unit_scale if $scope.product.master.unit_value && $scope.product.variant_unit_scale
$scope.product.master.unit_description = match[3]
else
value = $scope.product.master.unit_value
value /= $scope.product.variant_unit_scale if $scope.product.master.unit_value && $scope.product.variant_unit_scale
$scope.product.master.unit_value_with_description = value + " " + $scope.product.master.unit_description
$scope.processUnitPrice = ->
price = $scope.product.price

View File

@@ -13,3 +13,9 @@ angular.module("ofn.admin").factory "ProductImageService", (FileUploader, SpreeA
@imageUploader.onSuccessItem = (image, response) =>
product.thumb_url = response.thumb_url
product.image_url = response.image_url
@imageUploader.onErrorItem = (image, response) =>
if Array.isArray(response.errors)
message = response.errors.join("\n")
else
message = response.error.toString()
alert(message)

View File

@@ -27,16 +27,22 @@ angular.module("admin.products").factory "VariantUnitManager", (availableUnits)
1000.0:
name: 'kL'
system: 'metric'
'items':
1:
name: 'items'
@variantUnitOptions: ->
available = availableUnits.split(",")
options = for unit_type, _ of @units
for scale in @unitScales(unit_type, available)
name = @getUnitName(scale, unit_type)
["#{I18n.t(unit_type)} (#{name})", "#{unit_type}_#{scale}"]
["#{I18n.t(unit_type)} (#{name})", @getUnitWithScale(unit_type, scale)]
options.push [[I18n.t('items'), 'items']]
options = [].concat options...
@getUnitWithScale: (unit_type, scale) ->
"#{unit_type}_#{scale}"
@getUnitName: (scale, unitType) ->
if @units[unitType][scale]
@units[unitType][scale]['name']

View File

@@ -30,3 +30,14 @@ angular.module("admin.side_menu")
for item in @items when item.name is name
return item
null
redirect_function: (elementID , href) =>
window.addEventListener 'load', ->
element = document.getElementById(elementID)
if !element
return
element.addEventListener 'click', ->
window.location.replace(href)
return
return

View File

@@ -7,11 +7,11 @@ $(function() {
if (calculator_select.val() === original_calc_type) {
$('div.calculator-settings').show();
$('.calculator-settings-warning').hide();
$('.calculator-settings').find('input,textarea').prop("disabled", false);
$('.calculator-settings').find('input,textarea,select').prop("disabled", false);
} else {
$('div.calculator-settings').hide();
$('.calculator-settings-warning').show();
$('.calculator-settings').find('input,textarea').prop("disabled", true);
$('.calculator-settings').find('input,textarea,select').prop("disabled", true);
}
});
})

View File

@@ -1,17 +0,0 @@
var update_state = function(region) {
var country = $('span#' + region + 'country .select2').select2('val');
var state_select = $('span#' + region + 'state select.select2');
$.get(Spree.routes.states_search + "?country_id=" + country, function(states) {
state_select.html('');
var states_with_blank = [{name: '', id: ''}].concat(states);
$.each(states_with_blank, function(pos,state) {
var opt = $(document.createElement('option'))
.attr('value', state.id)
.html(state.name);
state_select.append(opt);
});
state_select.prop("disabled", false).show();
state_select.select2();
})
};

View File

@@ -25,13 +25,12 @@ $(document).ready(function() {
var link = $(this);
var shipment_number = link.data('shipment-number');
var selected_shipping_rate_id = link.parents('tbody').find("select#selected_shipping_rate_id[data-shipment-number='" + shipment_number + "']").val();
var unlock = link.parents('tbody').find("input[name='open_adjustment'][data-shipment-number='" + shipment_number + "']:checked").val();
var url = Spree.url( Spree.routes.orders_api + "/" + order_number + "/shipments/" + shipment_number + ".json");
$.ajax({
type: "PUT",
url: url,
data: { shipment: { selected_shipping_rate_id: selected_shipping_rate_id, unlock: unlock } }
data: { shipment: { selected_shipping_rate_id: selected_shipping_rate_id } }
}).done(function( msg ) {
window.location.reload();
}).error(function( msg ) {
@@ -40,25 +39,94 @@ $(document).ready(function() {
}
$('[data-hook=admin_order_edit_form] a.save-method').click(handle_shipping_method_save);
//handle tracking edit click
//handle tracking info edit/delete
// Show the input field to edit the tracking info
// And hide the input field when cancel is clicked
$('a.edit-tracking').click(toggleTrackingEdit);
$('a.cancel-tracking').click(toggleTrackingEdit);
handle_tracking_save = function(){
var link = $(this);
var shipment_number = link.data('shipment-number');
var tracking = link.parents('tbody').find('input#tracking').val();
var url = Spree.url( Spree.routes.orders_api + "/" + order_number + "/shipments/" + shipment_number + ".json");
saveTrackingInfo = function(){
let shipmentNumber = $(this).data('shipment-number');
let tracking = document.getElementById('tracking').value
makeApiCall(trackingUrl(shipmentNumber), { shipment: { tracking: tracking } } )
}
deleteTrackingInfo = function(){
let shipmentNumber = $(this).data('shipment-number');
let tracking = ''
confirmDelete(trackingUrl(shipmentNumber), { shipment: { tracking: tracking } })
}
trackingUrl = function(shipmentNumber){
return Spree.url( Spree.routes.orders_api + "/" + order_number + "/shipments/" + shipmentNumber + ".json");
}
$('[data-hook=admin_order_edit_form] a.save-tracking').click(saveTrackingInfo);
$('[data-hook=admin_order_edit_form] a.delete-tracking').click(deleteTrackingInfo);
// handle note edit/delete
// Show the input field to edit the note
// And hide the input field when cancel is clicked
$('a.edit-note.icon-edit').click(toggleNoteEdit);
$('a.cancel-note').click(toggleNoteEdit);
saveNote = function(){
let note = document.getElementById('note').value
makeApiCall(getNoteUrl(), { note: note })
}
deleteNote = function(){
let note = ''
confirmDelete(getNoteUrl(), { note: note })
}
getNoteUrl = function(){
return Spree.url( Spree.routes.orders_api + "/" + order_number);
}
confirmDelete = function(url, params){
displayDeleteAlert(function(confirmation) {
if (confirmation) {
makeApiCall(url, params)
}
});
}
$('[data-hook=admin_order_edit_form] a.save-note').click(saveNote);
$('[data-hook=admin_order_edit_form] a.delete-note').click(deleteNote);
// Makes API call for notes/tracking info
makeApiCall = function(url, params) {
$.ajax({
type: "PUT",
url: url,
data: { shipment: { tracking: tracking } }
data: params
}).done(function( msg ) {
window.location.reload();
}).error(function( msg ) {
console.log(msg);
});
}
$('[data-hook=admin_order_edit_form] a.save-tracking').click(handle_tracking_save);
displayDeleteAlert = function(callback) {
i18nKey = "are_you_sure";
$('#custom-confirm .message').html(
` ${t(i18nKey)}
<div class="form">
</div>`);
$('#custom-confirm button.confirm').unbind( "click" ).click(() => {
$('#custom-confirm').hide();
callback(true);
});
$('#custom-confirm button.cancel').click(() => {
$('#custom-confirm').hide();
callback(false)
});
$('#custom-confirm').show();
}
});

View File

@@ -4,6 +4,7 @@ $(document).ready(function() {
initAlert()
initConfirm()
initCancelOrder()
if ($('#variant_autocomplete_template').length > 0) {
window.variantTemplate = Handlebars.compile($('#variant_autocomplete_template').text());
@@ -52,12 +53,12 @@ $(document).ready(function() {
}
toggleItemEdit();
adjustItems(shipment_number, variant_id, quantity);
adjustItems(shipment_number, variant_id, quantity, true);
return false;
}
$('a.save-item').click(handle_save_click);
handle_delete_click = function(elementSelector){
handle_delete_click = function(elementSelector, restock_item){
var del = $(elementSelector);
del.hide()
var shipment_number = del.data('shipment-number');
@@ -65,26 +66,37 @@ $(document).ready(function() {
toggleItemEdit();
adjustItems(shipment_number, variant_id, 0);
adjustItems(shipment_number, variant_id, 0, restock_item);
}
$('a.delete-item').click((event) => {
ofnConfirm(() => {
handle_delete_click('#custom-confirm');
});
try {
var del = $('a.delete-item');
var shipment_number = del.data('shipment-number');
var variant_id = del.data('variant-id');
var shipment = _.findWhere(shipments, {number: shipment_number + ''});
var inventory_units = _.where(shipment.inventory_units, {variant_id: variant_id});
if (inventory_units.length !== shipment.inventory_units.length) {
ofnConfirm((reStockItem) => {
handle_delete_click('#custom-confirm', reStockItem);
});
} else {
adjustItems(shipment_number, variant_id, 0);
}
} catch (e) {
}
});
}
});
adjustItems = function(shipment_number, variant_id, quantity){
adjustItems = function(shipment_number, variant_id, quantity, restock_item){
var shipment = _.findWhere(shipments, {number: shipment_number + ''});
var inventory_units = _.where(shipment.inventory_units, {variant_id: variant_id});
if (quantity == 0 && inventory_units.length == shipment.inventory_units.length) {
ofnCancelOrderAlert((confirm, sendEmailCancellation) => {
if (quantity === 0 && inventory_units.length === shipment.inventory_units.length) {
ofnCancelOrderAlert((confirm, sendEmailCancellation, restock_item) => {
if (confirm) {
doAdjustItems(shipment_number, variant_id, quantity, inventory_units, () => {
doAdjustItems(shipment_number, variant_id, quantity, inventory_units, restock_item, () => {
var redirectTo = new URL(Spree.routes.cancel_order.toString());
redirectTo.searchParams.append("send_cancellation_email", sendEmailCancellation);
window.location.href = redirectTo.toString();
@@ -93,23 +105,26 @@ adjustItems = function(shipment_number, variant_id, quantity){
});
return;
}
doAdjustItems(shipment_number, variant_id, quantity, inventory_units, () => {
doAdjustItems(shipment_number, variant_id, quantity, inventory_units, restock_item, () => {
window.location.reload();
});
}
doAdjustItems = function(shipment_number, variant_id, quantity, inventory_units, callback) {
doAdjustItems = function(shipment_number, variant_id, quantity, inventory_units, restock_item, callback) {
var url = Spree.routes.orders_api + "/" + order_number + "/shipments/" + shipment_number;
var new_quantity = 0;
var data = { variant_id: variant_id };
if (inventory_units.length < quantity) {
url += "/add";
new_quantity = (quantity - inventory_units.length);
} else if (inventory_units.length > quantity) {
url += "/remove"
new_quantity = (inventory_units.length - quantity);
data.restock_item = restock_item;
}
url += '.json';
data.quantity = new_quantity;
if (new_quantity == 0) {
ofnAlert(t("js.admin.orders.quantity_unchanged"));
@@ -117,7 +132,7 @@ doAdjustItems = function(shipment_number, variant_id, quantity, inventory_units,
$.ajax({
type: "PUT",
url: Spree.url(url),
data: { variant_id: variant_id, quantity: new_quantity }
data: data
}).done(function( msg ) {
callback();
});
@@ -126,8 +141,26 @@ doAdjustItems = function(shipment_number, variant_id, quantity, inventory_units,
toggleTrackingEdit = function(){
var link = $(this);
link.parents('tbody').find('tr.edit-tracking').toggle();
link.parents('tbody').find('tr.show-tracking').toggle();
var parent_node = link.parents('tbody')
let input = parent_node.find('#tracking')[0]
parent_node.find('tr.edit-tracking').toggle();
// Set focus on input and
// put cursor at it's end
input.focus()
input.setSelectionRange(-1, -1)
parent_node.find('tr.show-tracking').toggle();
}
toggleNoteEdit = function(){
var link = $(this);
var parent_node = link.parents('tbody')
let input = parent_node.find('#note')[0]
parent_node.find('tr.edit-note').toggle();
// Set focus on input and
// put cursor at it's end
input.focus()
input.setSelectionRange(-1, -1)
parent_node.find('tr.show-note').toggle();
}
toggleMethodEdit = function(){
@@ -171,7 +204,7 @@ addVariantFromStockLocation = function() {
});
}else{
//add to existing shipment
adjustItems(shipment.number, variant_id, quantity);
adjustItems(shipment.number, variant_id, quantity, true);
}
return 1
}
@@ -194,16 +227,21 @@ ofnAlert = function(message) {
$('#custom-alert').show();
}
ofnCancelOrderAlert = function(callback) {
ofnCancelOrderAlert = function(callback, i18nKey) {
if (i18nKey == undefined) {
i18nKey = "js.admin.orders.cancel_the_order_html";
}
$('#custom-confirm .message').html(
` ${t("js.admin.orders.cancel_the_order_html")}
` ${t(i18nKey)}
<div class="form">
<input type="checkbox" name="send_cancellation_email" value="1" id="send_cancellation_email" />
<label for="send_cancellation_email">${t("js.admin.orders.cancel_the_order_send_cancelation_email")}</label>
<input type="checkbox" name="send_cancellation_email" value="1" id="send_cancellation_email" checked="true" />
<label for="send_cancellation_email">${t("js.admin.orders.cancel_the_order_send_cancelation_email")}</label><br />
<input type="checkbox" name="restock_items" id="restock_items" checked="checked"/>
<label for="restock_items">${t("js.admin.orders.restock_items")}</label>
</div>`);
$('#custom-confirm button.confirm').unbind( "click" ).click(() => {
$('#custom-confirm').hide();
callback(true, $('#send_cancellation_email').is(':checked'));
callback(true, $('#send_cancellation_email').is(':checked'), $('#restock_items').is(':checked'));
});
$('#custom-confirm button.cancel').click(() => {
$('#custom-confirm').hide();
@@ -213,7 +251,30 @@ ofnCancelOrderAlert = function(callback) {
}
ofnConfirm = function(callback) {
$('#custom-confirm .message').html(
` ${t("are_you_sure")}
<div class="form">
<input type="checkbox" name="restock_items" id="restock_items" checked="checked"/>
<label for="restock_items">${t("js.admin.orders.restock_item")}</label>
</div>`);
$('#custom-confirm').data($(event.target).data());
$('#custom-confirm button.confirm').click(callback);
$('#custom-confirm button.confirm').click(() => {
callback($('#restock_items').is(':checked'));
});
$('#custom-confirm').show();
}
initCancelOrder = function() {
$('#cancel_order_form').submit(function(e){
ofnCancelOrderAlert((confirm, sendEmailCancellation, restock_items) => {
if (confirm) {
var redirectTo = new URL(Spree.routes.cancel_order.toString());
redirectTo.searchParams.append("send_cancellation_email", sendEmailCancellation);
redirectTo.searchParams.append("restock_items", restock_items);
window.location.href = redirectTo.toString();
}
});
e.preventDefault();
return false;
});
}

View File

@@ -8,13 +8,18 @@ handle_move = (e, data) ->
node = data.rslt.o
new_parent = data.rslt.np
url = Spree.url(base_url).clone()
url.pathname = url.pathname + '/' + node.attr("id")
url = new URL(base_url)
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: ({_method: "put", "taxon[parent_id]": new_parent.attr("id"), "taxon[position]": position }),
data: data,
error: handle_ajax_error
true
@@ -26,11 +31,16 @@ handle_create = (e, data) ->
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: ({"taxon[name]": name, "taxon[parent_id]": new_parent.attr("id"), "taxon[position]": position }),
data: data,
error: handle_ajax_error,
success: (data,result) ->
node.attr('id', data.id)
@@ -39,8 +49,10 @@ 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 = Spree.url(base_url).clone()
url = new URL(base_url)
url.pathname = url.pathname + '/' + node.attr("id")
$.ajax
@@ -53,8 +65,8 @@ handle_rename = (e, data) ->
handle_delete = (e, data) ->
last_rollback = data.rlbk
node = data.rslt.obj
delete_url = base_url.clone()
delete_url.setPath delete_url.path() + '/' + node.attr("id")
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",

View File

@@ -1,20 +0,0 @@
angular.module("admin.utils").directive 'helpModal', ($rootScope, $compile, $templateCache, $window, DialogDefaults) ->
restrict: 'C'
scope:
template: '@'
link: (scope, element, attr) ->
# Compile modal template
template = $compile($templateCache.get(scope.template))(scope)
# Load Dialog Options
template.dialog(DialogDefaults)
# Link opening of dialog to click event on element
element.bind 'click', (e) ->
template.dialog('open')
$rootScope.$evalAsync()
scope.close = ->
template.dialog('close')
$rootScope.$evalAsync()
return

View File

@@ -3,6 +3,7 @@ angular.module("admin.utils").directive "tagsWithTranslation", ($timeout) ->
templateUrl: "admin/tags_input.html"
scope:
object: "="
form: "="
tagsAttr: "@?"
tagListAttr: "@?"
findTags: "&"
@@ -18,7 +19,15 @@ angular.module("admin.utils").directive "tagsWithTranslation", ($timeout) ->
scope.limitReached = scope.object[scope.tagsAttr].length >= scope.max if scope.max != undefined
scope.object[scope.tagListAttr] = (tag.text for tag in scope.object[scope.tagsAttr]).join(",")
scope.$watch "object", (newObject) ->
scope.object = newObject
init()
$timeout ->
init()
init = ->
return unless scope.object
# Initialize properties if necessary
scope.tagsAttr ||= "tags"
scope.tagListAttr ||= "tag_list"

View File

@@ -5,15 +5,16 @@ angular.module("admin.utils").factory "ErrorsParser", ->
return defaultContent unless errors?
errorsString = ""
if errors.length > 0
if Array.isArray(errors)
# it is an array of errors
errorsString = errors.join("\n") + "\n"
else
else if typeof errors == "object"
# it is a hash of errors
keys = Object.keys(errors)
for key in keys
errorsString += errors[key].join("\n") + "\n"
else # string
errorsString = errors
this.defaultIfEmpty(errorsString, defaultContent)
defaultIfEmpty: (content, defaultContent) =>

View File

@@ -1,4 +1,4 @@
angular.module('Darkswarm').controller "ShopVariantCtrl", ($scope, $modal, Cart) ->
angular.module('Darkswarm').controller "ShopVariantCtrl", ($scope, $modal, Cart, Shopfront) ->
$scope.updateCart = (line_item) ->
Cart.adjust($scope.variant.line_item)
@@ -69,3 +69,6 @@ angular.module('Darkswarm').controller "ShopVariantCtrl", ($scope, $modal, Cart)
$scope.addBulk = (quantity) ->
$scope.add(quantity)
$modal.open(templateUrl: "bulk_buy_modal.html", scope: $scope, windowClass: "product-bulk-modal")
$scope.displayRemainingInStock = ->
Shopfront.shopfront.preferred_product_low_stock_display && $scope.available() <= 3 && !$scope.variant.line_item.quantity

View File

@@ -1,13 +0,0 @@
angular.module('Darkswarm').directive "helpModal", ($modal, $compile, $templateCache)->
restrict: 'A'
scope:
helpText: "@helpModal"
link: (scope, elem, attrs, ctrl)->
compiled = $compile($templateCache.get('help-modal.html'))(scope)
elem.on "click", =>
$modal.open(controller: ctrl, template: compiled, scope: scope, windowClass: 'help-modal small')
scope.$on "$destroy", ->
elem.off("click")

View File

@@ -3,7 +3,7 @@ angular.module('Darkswarm').directive 'mapSearch', ($timeout, Search) ->
restrict: 'E'
require: ['^uiGmapGoogleMap', 'ngModel']
replace: true
template: '<input id="pac-input" ng-model="query" placeholder="' + t('location_placeholder') + '"></input>'
template: '<input id="pac-input" ng-model="query" placeholder="' + t('location_placeholder') + '" onfocus="this.select()"></input>'
scope: {}
controller: ($scope) ->

View File

@@ -26,4 +26,8 @@ angular.module('mm.foundation.offcanvas').directive 'offCanvasWrap', ($window) -
# Bind hiding of the off-canvas that only happens when screen width is over 1024px.
win.bind 'resize.body', ->
isolatedScope.hide() if $(window).width() > 1024
win.bind 'click.body', (e) ->
if e.target.closest(".left-off-canvas-menu") == null && e.target.closest(".left-off-canvas-toggle") == null
isolatedScope.hide()
}

View File

@@ -1,7 +0,0 @@
%div
.margin-bottom-30
%p
{{ 'js.admin.modals.business_address_info.message' | t }}
.text-center
%input.button.red.icon-plus{ type: 'button', value: '{{ "js.admin.modals.got_it" | t }}', ng: { click: 'close()' } }

View File

@@ -1,19 +0,0 @@
#invite-manager-modal{ng: {app: 'admin.enterprises', controller: 'enterpriseCtrl'}}
.margin-bottom-30.text-center
.text-big
= t('js.admin.modals.invite_title')
%p.alert-box.ok{ng: {show: 'invite_success'}}
{{invite_success}}
%p.alert-box.error{ng: {show: 'invite_errors'}}
{{invite_errors}}
%input#invite_email.fullwidth.margin-bottom-20{ng: {model: 'newUser'}}
.margin-bottom-20.text-center
%button.text-center.margin-top-10{ng: {show: '!invite_success', click: 'inviteManager()'}}
= t('js.admin.modals.invite')
%button.text-center.margin-top-10{ng: {show: 'invite_success', click: 'resetModal(); close()'}}
= t('js.admin.modals.close')

View File

@@ -1,25 +0,0 @@
#tag-rule-help
.margin-bottom-30.text-center
.text-big
{{ 'js.admin.modals.tag_rule_help.title' | t }}
.margin-bottom-30
.text-normal
{{ 'js.admin.modals.tag_rule_help.overview' | t }}
%p
{{ 'js.admin.modals.tag_rule_help.overview_text' | t }}
.margin-bottom-30
.text-normal
{{ 'js.admin.modals.tag_rule_help.by_default_rules' | t }}
%p
{{ 'js.admin.modals.tag_rule_help.by_default_rules_text' | t }}
.margin-bottom-30
.text-normal
{{ 'js.admin.modals.tag_rule_help.customer_tagged_rules' | t }}
%p
{{ 'js.admin.modals.tag_rule_help.customer_tagged_rules_text' | t }}
.text-center
%input.button.red.icon-plus{ type: 'button', value: t('js.admin.modals.got_it'), ng: { click: 'close()' } }

View File

@@ -1,13 +0,0 @@
%div
.margin-bottom-30.text-center
.text-big
{{ 'js.admin.modals.terms_and_conditions_info.title' | t }}
.margin-bottom-30
%p
{{ 'js.admin.modals.terms_and_conditions_info.message_1' | t }}
.margin-bottom-30
%p
{{ 'js.admin.modals.terms_and_conditions_info.message_2' | t }}
.text-center
%input.button.red.icon-plus{ type: 'button', value: t('js.admin.modals.got_it'), ng: { click: 'close()' } }

View File

@@ -1,8 +1,12 @@
%div.contact-container
%div.modal-centered{"ng-if" => "::enterprise.email_address || enterprise.website || enterprise.phone"}
%div.modal-centered{"ng-if" => "::enterprise.email_address || enterprise.website || enterprise.phone || enterprise.whatsapp_phone"}
%p.modal-header {{'contact' | t}}
%p{"ng-if" => "::enterprise.phone", "ng-bind" => "::enterprise.phone"}
%p{"ng-if" => "::enterprise.whatsapp_phone"}
%img{ src: image_path("/map_icons/social-logos/whatsapp.svg") }
%a{"ng-href" => "{{::enterprise.whatsapp_url}}", target: "_blank", "ng-bind" => "::enterprise.whatsapp_phone"}
%p{"ng-if" => "::enterprise.email_address"}
%a{"ng-href" => "{{::enterprise.email_address | stripUrl}}", target: "_blank", mailto: true}
%span.obfuscatedEmail.email{"ng-bind" => "::enterprise.email_address | stripUrl"}

View File

@@ -9,19 +9,19 @@
%span{"ng-bind" => "::'item_cost' | t"}
%li{"ng-if" => "::variant.fees.admin"}
.right {{ ::variant.fees.admin | localizeCurrency }}
%span{"ng-bind" => "::'admin_fee' | t"}
%span{"ng-bind" => "::variant.fees_name.admin"}
%li{"ng-if" => "::variant.fees.sales"}
.right {{ ::variant.fees.sales | localizeCurrency }}
%span{"ng-bind" => "::'sales_fee' | t"}
%span{"ng-bind" => "::variant.fees_name.sales"}
%li{"ng-if" => "::variant.fees.packing"}
.right {{ ::variant.fees.packing | localizeCurrency }}
%span{"ng-bind" => "::'packing_fee' | t"}
%span{"ng-bind" => "::variant.fees_name.packing"}
%li{"ng-if" => "::variant.fees.transport"}
.right {{ ::variant.fees.transport | localizeCurrency }}
%span{"ng-bind" => "::'transport_fee' | t"}
%span{"ng-bind" => "::variant.fees_name.transport"}
%li{"ng-if" => "::variant.fees.fundraising"}
.right {{ ::variant.fees.fundraising | localizeCurrency }}
%span{"ng-bind" => "::'fundraising_fee' | t"}
%span{"ng-bind" => "::variant.fees_name.fundraising"}
%li
%strong
.right = {{ ::variant.price_with_fees | localizeCurrency }}

View File

@@ -0,0 +1,26 @@
# frozen_string_literal: true
class HelpModalComponent < ViewComponent::Base
def initialize(id:, close_button: true)
@id = id
@close_button = close_button
end
private
def close_button_class
if namespace == "admin"
"red"
else
"primary"
end
end
def close_button?
!!@close_button
end
def namespace
helpers.controller_path.split("/").first
end
end

View File

@@ -0,0 +1,8 @@
%div{ id: @id, "data-controller": "help-modal", "data-action": "keyup@document->help-modal#closeIfEscapeKey" }
.reveal-modal-bg.fade{ "data-help-modal-target": "background", "data-action": "click->help-modal#close" }
.reveal-modal.fade.small.help-modal{ "data-help-modal-target": "modal" }
= content
- if close_button?
.text-center
%input{ class: "button icon-plus #{close_button_class}", type: 'button', value: t('js.admin.modals.got_it'), "data-action": "click->help-modal#close" }

View File

@@ -0,0 +1,10 @@
.help-modal {
visibility: visible;
position: fixed;
top: 3em;
}
/* prevent arrow on selected admin menu item appearing above modal */
body.modal-open #admin-menu li.selected a::after {
z-index: 0;
}

View File

@@ -10,14 +10,14 @@ module Admin
def update
params.each do |name, value|
if ContentConfig.has_preference?(name) || ContentConfig.has_attachment?(name)
ContentConfig.public_send("#{name}=", value)
if value.is_a?(ActionDispatch::Http::UploadedFile)
blob = store_file(value)
update_preference("#{name}_blob_id", blob.id)
else
update_preference(name, value)
end
end
# Save any uploaded images
ContentConfig.save
flash[:success] =
t(:successfully_updated, resource: I18n.t('admin.contents.edit.your_content'))
@@ -26,6 +26,22 @@ module Admin
private
def store_file(attachable)
ActiveStorage::Blob.create_and_upload!(
io: attachable.open,
filename: attachable.original_filename,
content_type: attachable.content_type,
service_name: :local,
identify: false,
)
end
def update_preference(name, value)
return unless ContentConfig.has_preference?(name)
ContentConfig.public_send("#{name}=", value)
end
def preference_sections
[
PreferenceSections::HeaderSection.new,

View File

@@ -19,6 +19,7 @@ module Admin
:enable_invoices?,
:invoice_style2?,
:enable_receipt_printing?,
:enterprise_number_required_on_invoices?,
)
end
end

View File

@@ -64,6 +64,7 @@ module Admin
@order_cycle_form = OrderCycleForm.new(@order_cycle, order_cycle_params, spree_current_user)
if @order_cycle_form.save
update_nil_subscription_line_items_price_estimate(@order_cycle)
respond_to do |format|
flash[:notice] = I18n.t(:order_cycles_update_notice) if params[:reloading] == '1'
format.html { redirect_back(fallback_location: root_path) }
@@ -76,6 +77,7 @@ module Admin
def bulk_update
if order_cycle_set&.save
bulk_update_nil_subscription_line_items_price_estimate
render_as_json @order_cycles,
ams_prefix: 'index',
current_user: spree_current_user,
@@ -86,6 +88,27 @@ module Admin
end
end
def bulk_update_nil_subscription_line_items_price_estimate
@collection.upcoming.each do |order_cycle|
update_nil_subscription_line_items_price_estimate(order_cycle)
end
end
def update_nil_subscription_line_items_price_estimate(order_cycle)
order_cycle.schedules.each do |schedule|
Subscription.where(schedule_id: schedule.id).each do |subscription|
shop = Enterprise.managed_by(spree_current_user).find_by(id: subscription.shop_id)
subscription.subscription_line_items.nil_price_estimate.each do |line_item|
variant = OrderManagement::Subscriptions::
VariantsList.eligible_variants(shop).find_by(id: line_item.variant_id)
fee_calculator = OpenFoodNetwork::EnterpriseFeeCalculator.new(shop, order_cycle)
price = variant.price + fee_calculator.indexed_fees_for(variant)
line_item.update_column(:price_estimate, price)
end
end
end
end
def clone
@order_cycle = OrderCycle.find params[:id]
@order_cycle.clone!

View File

@@ -5,14 +5,23 @@ module Admin
include ReportsActions
helper ReportsHelper
before_action :authorize_report
before_action :authorize_report, only: [:show]
# Define model class for Can? permissions
def model_class
Admin::ReportsController
end
def index
@reports = reports.select do |report_type, _description|
can? report_type, :report
end
end
def show
render_report && return if ransack_params.blank?
@report = report_class.new(spree_current_user, params, request)
@report = report_class.new(spree_current_user, ransack_params, report_options)
if export_spreadsheet?
if report_format.present?
export_report
else
render_report
@@ -22,33 +31,31 @@ module Admin
private
def export_report
render report_format.to_sym => @report.public_send("to_#{report_format}"),
:filename => report_filename
send_data @report.render_as(report_format, controller: self), filename: report_filename
end
def render_report
assign_view_data
load_form_options
render report_type
render "show"
end
def assign_view_data
@report_type = report_type
@report_subtype = report_subtype || report_loader.default_report_subtype
@report_subtypes = report_class.report_subtypes.map do |subtype|
[t("packing.#{subtype}_report", scope: i18n_scope), subtype]
@report_subtypes = report_subtypes
@report_subtype = report_subtype
# Initialize data
params[:display_summary_row] = true if request.get?
if OpenFoodNetwork::FeatureToggle.enabled?(:report_inverse_columns_logic,
spree_current_user)
@params_fields_to_show = if request.get?
@report.columns.keys
else
params[:fields_to_show]
end
end
end
def load_form_options
return unless form_options_required?
form_options = Reporting::FrontendData.new(spree_current_user)
@distributors = form_options.distributors.to_a
@suppliers = form_options.suppliers.to_a
@order_cycles = form_options.order_cycles.to_a
@data = Reporting::FrontendData.new(spree_current_user)
end
end
end

View File

@@ -14,7 +14,7 @@ module Api
respond_to :json
def destroy
unless @enterprise.public_send("#{attachment_name}?")
unless @enterprise.public_send(attachment_name).attached?
return respond_with_conflict(error: destroy_attachment_does_not_exist_error_message)
end

View File

@@ -44,9 +44,9 @@ module Api
authorize! :update, @enterprise
if params[:logo] && @enterprise.update( logo: params[:logo] )
render html: @enterprise.logo.url(:medium), status: :ok
elsif params[:promo] && @enterprise.update( promo_image: params[:promo] )
render html: @enterprise.promo_image.url(:medium), status: :ok
render(html: @enterprise.logo_url(:medium), status: :ok)
elsif params[:promo] && @enterprise.update!( promo_image: params[:promo] )
render(html: @enterprise.promo_image_url(:medium), status: :ok)
else
invalid_resource!(@enterprise)
end

View File

@@ -26,6 +26,13 @@ module Api
}
end
def update
authorize! :admin, order
order.update!(order_params)
render json: order, serializer: Api::OrderDetailedSerializer, current_order: order
end
def ship
authorize! :admin, order
@@ -72,6 +79,10 @@ module Api
includes(line_items: { variant: [:product, :stock_items, :default_price] }).
first!
end
def order_params
params.permit(:note)
end
end
end
end

View File

@@ -6,20 +6,21 @@ module Api
respond_to :json
def update_product_image
@product = Spree::Product.find(params[:product_id])
authorize! :update, @product
product = Spree::Product.find(params[:product_id])
authorize! :update, product
if @product.images.first.nil?
@image = Spree::Image.create(
attachment: params[:file],
viewable_id: @product.master.id,
viewable_type: 'Spree::Variant'
)
render json: @image, serializer: ImageSerializer, status: :created
image = product.images.first || Spree::Image.new(
viewable_id: product.master.id,
viewable_type: 'Spree::Variant'
)
success_status = image.persisted? ? :ok : :created
if image.update(attachment: params[:file])
render json: image, serializer: ImageSerializer, status: success_status
else
@image = @product.images.first
@image.update(attachment: params[:file])
render json: @image, serializer: ImageSerializer, status: :ok
error_json = { errors: image.errors.full_messages }
render json: error_json, status: :unprocessable_entity
end
end
end

View File

@@ -10,7 +10,8 @@ module Api
before_action :validate_report, :authorize_report, :validate_query
def show
@report = report_class.new(current_api_user, ransack_params, report_options)
params[:report_format] = 'json'
@report = report_class.new(current_api_user, params)
render_report
end

View File

@@ -28,19 +28,14 @@ module Api
authorize! :read, Spree::Shipment
@shipment = @order.shipments.find_by!(number: params[:id])
params[:shipment] ||= []
unlock = params[:shipment].delete(:unlock)
if unlock == 'yes'
@shipment.fee_adjustment.fire_events(:open)
end
@shipment.fee_adjustment.fire_events(:open)
if @shipment.update(shipment_params)
@order.updater.update_totals_and_states
end
if unlock == 'yes'
@shipment.fee_adjustment.close
end
@shipment.fee_adjustment.close
render json: @shipment.reload, serializer: Api::ShipmentSerializer, status: :ok
end
@@ -79,8 +74,9 @@ module Api
def remove
variant = scoped_variant(params[:variant_id])
quantity = params[:quantity].to_i
restock_item = params.fetch(:restock_item, "true") == "true"
@order.contents.remove(variant, quantity, @shipment)
@order.contents.remove(variant, quantity, @shipment, restock_item)
@shipment.reload if @shipment.persisted?
render json: @shipment, serializer: Api::ShipmentSerializer, status: :ok

View File

@@ -73,7 +73,7 @@ module Api
def taxon_params
return if params[:taxon].blank?
params.require(:taxon).permit([:name, :parent_id])
params.require(:taxon).permit([:name, :parent_id, :position])
end
end
end

View File

@@ -14,6 +14,7 @@ module Api
attr_accessor :current_api_user
before_action :authenticate_user
before_action :restrict_feature
rescue_from StandardError, with: :error_during_processing
rescue_from CanCan::AccessDenied, with: :unauthorized
@@ -38,6 +39,10 @@ module Api
invalid_api_key
end
def restrict_feature
not_found unless Flipper.enabled?(:api_v1, @current_api_user)
end
def current_ability
Spree::Ability.new(current_api_user)
end

View File

@@ -5,9 +5,10 @@ require 'open_food_network/permissions'
module Api
module V1
class CustomersController < Api::V1::BaseController
include AddressTransformation
skip_authorization_check only: :index
before_action :set_customer, only: [:show, :update, :destroy]
before_action :authorize_action, only: [:show, :update, :destroy]
def index
@@ -17,44 +18,44 @@ module Api
end
def show
render json: Api::V1::CustomerSerializer.new(@customer, include_options)
render json: Api::V1::CustomerSerializer.new(customer, include_options)
end
def create
authorize! :update, Enterprise.find(customer_params[:enterprise_id])
@customer = Customer.new(customer_params)
customer = Customer.new(customer_params)
if @customer.save
render json: Api::V1::CustomerSerializer.new(@customer), status: :created
if customer.save
render json: Api::V1::CustomerSerializer.new(customer), status: :created
else
invalid_resource! @customer
invalid_resource! customer
end
end
def update
if @customer.update(customer_params)
render json: Api::V1::CustomerSerializer.new(@customer)
if customer.update(customer_params)
render json: Api::V1::CustomerSerializer.new(customer)
else
invalid_resource! @customer
invalid_resource! customer
end
end
def destroy
if @customer.destroy
render json: Api::V1::CustomerSerializer.new(@customer)
if customer.destroy
render json: Api::V1::CustomerSerializer.new(customer)
else
invalid_resource! @customer
invalid_resource! customer
end
end
private
def set_customer
@customer = Customer.find(params[:id])
def customer
@customer ||= Customer.find(params[:id])
end
def authorize_action
authorize! action_name.to_sym, @customer
authorize! action_name.to_sym, customer
end
def search_customers
@@ -77,7 +78,8 @@ module Api
:phone, :latitude, :longitude,
:first_name, :last_name,
:street_address_1, :street_address_2,
:postal_code, :locality, :region, :country,
:postal_code, :locality,
{ region: [:name, :code], country: [:name, :code] },
]
).to_h
@@ -89,39 +91,6 @@ module Api
attributes
end
def transform_address!(attributes, from, to)
return unless attributes.key?(from)
address = attributes.delete(from)
if address.nil?
attributes[to] = nil
return
end
address.transform_keys! do |key|
{
phone: :phone, latitude: :latitude, longitude: :longitude,
first_name: :firstname, last_name: :lastname,
street_address_1: :address1, street_address_2: :address2,
postal_code: :zipcode,
locality: :city,
region: :state_name,
country: :country,
}.with_indifferent_access[key]
end
if address[:state_name].present?
address[:state] = Spree::State.find_by(name: address[:state_name])
end
if address[:country].present?
address[:country] = Spree::Country.find_by(name: address[:country])
end
attributes["#{to}_attributes"] = address
end
def editable_enterprises
OpenFoodNetwork::Permissions.new(current_api_user).editable_enterprises.select(:id)
end

View File

@@ -29,6 +29,7 @@ class ApplicationController < ActionController::Base
helper 'footer_links'
helper 'discourse'
helper 'checkout'
helper 'link'
helper 'terms_and_conditions'
protect_from_forgery
@@ -38,6 +39,7 @@ class ApplicationController < ActionController::Base
include Spree::Core::ControllerHelpers::Common
before_action :set_cache_headers # prevent cart emptying via cache when using back button #1213
before_action :check_disabled_user, if: :spree_user_signed_in?
before_action :set_after_login_url
include RawParams
@@ -158,6 +160,14 @@ class ApplicationController < ActionController::Base
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end
def check_disabled_user
return unless current_spree_user.disabled
flash[:success] = nil
flash.now[:error] = I18n.t("devise.failure.disabled")
sign_out current_spree_user
end
end
require 'spree/i18n/initializer'

View File

@@ -0,0 +1,48 @@
# frozen_string_literal: true
# Our internal data structures are different to the API data strurctures.
module AddressTransformation
extend ActiveSupport::Concern
def transform_address!(attributes, from, to)
return unless attributes.key?(from)
address = attributes.delete(from)
if address.nil?
attributes[to] = nil
return
end
address.transform_keys! do |key|
{
phone: :phone, latitude: :latitude, longitude: :longitude,
first_name: :firstname, last_name: :lastname,
street_address_1: :address1, street_address_2: :address2,
postal_code: :zipcode,
locality: :city,
region: :state,
country: :country,
}.with_indifferent_access[key]
end
address[:state] = find_state(address) if address[:state].present?
address[:country] = find_country(address) if address[:country].present?
attributes["#{to}_attributes"] = address
end
private
def find_state(address)
Spree::State.find_by("LOWER(abbr) = ? OR LOWER(name) = ?",
address.dig(:state, :code)&.downcase,
address.dig(:state, :name)&.downcase)
end
def find_country(address)
Spree::Country.find_by("LOWER(iso) = ? OR LOWER(name) = ?",
address.dig(:country, :code)&.downcase,
address.dig(:country, :name)&.downcase)
end
end

View File

@@ -47,7 +47,7 @@ module CheckoutCallbacks
end
def load_shipping_methods
@shipping_methods = available_shipping_methods
@shipping_methods = available_shipping_methods.sort { |a, b| a.name.casecmp(b.name) }
end
def redirect_to_shop?

View File

@@ -3,10 +3,14 @@
module ReportsActions
extend ActiveSupport::Concern
def reports
Reporting::Reports::List.all
end
private
def authorize_report
authorize! report_type&.to_sym, :report
authorize! report_type.to_sym, :report
end
def report_class
@@ -23,31 +27,26 @@ module ReportsActions
params[:report_type]
end
def report_subtypes
reports[report_type.to_sym] || []
end
def report_subtypes_codes
report_subtypes.map(&:second).map(&:to_s)
end
def report_subtype
params[:report_subtype]
params[:report_subtype] || report_subtypes_codes.first
end
def ransack_params
raw_params[:q]
end
def report_options
raw_params[:options]
end
def report_format
params[:report_format]
end
def export_spreadsheet?
['xlsx', 'ods', 'csv'].include?(report_format)
end
def form_options_required?
[:packing, :customers, :products_and_inventory, :order_cycle_management].
include? report_type.to_sym
end
def report_filename
"#{report_type || action_name}_#{file_timestamp}.#{report_format}"
end

View File

@@ -31,12 +31,16 @@ class SplitCheckoutController < ::BaseController
advance_order_state
redirect_to_step
else
flash.now[:error] = I18n.t('split_checkout.errors.global')
flash.now[:error] ||= I18n.t('split_checkout.errors.global')
render status: :unprocessable_entity, operations: cable_car.
replace("#checkout", partial("split_checkout/checkout")).
replace("#flashes", partial("shared/flashes", locals: { flashes: flash }))
end
rescue Spree::Core::GatewayError => e
flash[:error] = I18n.t(:spree_gateway_error_flash_for_checkout, error: e.message)
@order.update_column(:state, "payment")
render operations: cable_car.redirect_to(url: checkout_step_path(:payment))
end
private
@@ -128,7 +132,7 @@ class SplitCheckoutController < ::BaseController
when "confirmation"
redirect_to checkout_step_path(:summary)
else
redirect_to order_path(@order)
redirect_to order_path(@order, order_token: @order.token)
end
end

View File

@@ -66,6 +66,8 @@ module Spree
def fire
event = params[:e]
@order.send_cancellation_email = params[:send_cancellation_email] != "false"
@order.restock_items = params.fetch(:restock_items, "true") == "true"
if @order.public_send(event.to_s)
flash[:success] = Spree.t(:order_updated)
else
@@ -124,7 +126,7 @@ module Spree
end
def require_distributor_abn
return if @order.distributor.abn.present?
return if @order.distributor.can_invoice?
flash[:error] = t(:must_have_valid_business_number,
enterprise_name: @order.distributor.name)

View File

@@ -30,18 +30,14 @@ module Spree
@object.attributes = permitted_resource_params
if @object.save
flash[:success] = flash_message_for(@object, :successfully_created)
if params[:button] == "add_another"
redirect_to spree.new_admin_product_path
else
redirect_to spree.admin_products_path
end
redirect_after_save
else
# Re-fill the form with deleted params on product
@on_hand = request.params[:product][:on_hand]
@on_demand = request.params[:product][:on_demand]
render :new
end
end
rescue Paperclip::Errors::NotIdentifiedByImageMagickError
@object.errors.add(:base, t('spree.admin.products.image_upload_error'))
respond_with(@object)
end
def show
@@ -141,6 +137,14 @@ module Spree
private
def redirect_after_save
if params[:button] == "add_another"
redirect_to spree.new_admin_product_path
else
redirect_to spree.admin_products_path
end
end
def product_set_from_params
collection_hash = Hash[products_bulk_params[:products].each_with_index.map { |p, i|
[i, p]

View File

@@ -1,310 +0,0 @@
# frozen_string_literal: true
require 'csv'
require 'open_food_network/reports/list'
require 'open_food_network/order_and_distributor_report'
require 'open_food_network/products_and_inventory_report'
require 'open_food_network/lettuce_share_report'
require 'open_food_network/group_buy_report'
require 'open_food_network/order_grouper'
require 'open_food_network/customers_report'
require 'open_food_network/users_and_enterprises_report'
require 'open_food_network/order_cycle_management_report'
require 'open_food_network/sales_tax_report'
require 'open_food_network/xero_invoices_report'
require 'open_food_network/payments_report'
require 'open_food_network/orders_and_fulfillments_report'
module Spree
module Admin
class ReportsController < Spree::Admin::BaseController
include Spree::ReportsHelper
helper ::ReportsHelper
ORDER_MANAGEMENT_ENGINE_REPORTS = [
:bulk_coop,
:enterprise_fee_summary
].freeze
helper_method :render_content?
before_action :cache_search_state
# Fetches user's distributors, suppliers and order_cycles
before_action :load_basic_data, only: [:customers, :products_and_inventory, :order_cycle_management]
before_action :load_associated_data, only: [:orders_and_fulfillment]
respond_to :html
def report_types
OpenFoodNetwork::Reports::List.all
end
def index
@reports = authorized_reports
respond_with(@reports)
end
def customers
@report_types = report_types[:customers]
@report_type = params[:report_type]
@report = OpenFoodNetwork::CustomersReport.new spree_current_user, raw_params,
render_content?
render_report(@report.header, @report.table, params[:csv], "customers_#{timestamp}.csv")
end
def order_cycle_management
raw_params[:q] ||= {}
@report_types = report_types[:order_cycle_management]
@report_type = params[:report_type]
# -- Build Report with Order Grouper
@report = OpenFoodNetwork::OrderCycleManagementReport.new spree_current_user,
raw_params,
render_content?
@table = @report.table_items
render_report(@report.header, @table, params[:csv],
"order_cycle_management_#{timestamp}.csv")
end
def orders_and_distributors
@report = OpenFoodNetwork::OrderAndDistributorReport.new spree_current_user,
raw_params,
render_content?
@search = @report.search
csv_file_name = "orders_and_distributors_#{timestamp}.csv"
render_report(@report.header, @report.table, params[:csv], csv_file_name)
end
def sales_tax
@distributors = my_distributors
@report_type = params[:report_type]
@report = OpenFoodNetwork::SalesTaxReport.new spree_current_user, raw_params,
render_content?
render_report(@report.header, @report.table, params[:csv], "sales_tax.csv")
end
def payments
# -- Prepare Form Options
@distributors = my_distributors
@report_type = params[:report_type]
# -- Build Report with Order Grouper
@report = OpenFoodNetwork::PaymentsReport.new spree_current_user, raw_params,
render_content?
@table = order_grouper_table
csv_file_name = "payments_#{timestamp}.csv"
render_report(@report.header, @table, params[:csv], csv_file_name)
end
def orders_and_fulfillment
raw_params[:q] ||= orders_and_fulfillment_default_filters
@report_types = report_types[:orders_and_fulfillment]
@report_type = params[:report_type]
@include_blank = I18n.t(:all)
# -- Build Report with Order Grouper
@report = OpenFoodNetwork::OrdersAndFulfillmentsReport.new spree_current_user,
raw_params,
render_content?
@table = order_grouper_table
csv_file_name = "#{params[:report_type]}_#{timestamp}.csv"
render_report(@report.header, @table, params[:csv], csv_file_name)
end
def products_and_inventory
@report_types = report_types[:products_and_inventory]
@report = if params[:report_type] != 'lettuce_share'
OpenFoodNetwork::ProductsAndInventoryReport.new spree_current_user,
raw_params,
render_content?
else
OpenFoodNetwork::LettuceShareReport.new spree_current_user,
raw_params,
render_content?
end
render_report @report.header,
@report.table,
params[:csv],
"products_and_inventory_#{timestamp}.csv"
end
def users_and_enterprises
@report = OpenFoodNetwork::UsersAndEnterprisesReport.new raw_params, render_content?
render_report(@report.header, @report.table, params[:csv],
"users_and_enterprises_#{timestamp}.csv")
end
def xero_invoices
raw_params[:q] ||= {}
@distributors = my_distributors
@order_cycles = my_order_cycles
@report = OpenFoodNetwork::XeroInvoicesReport.new(spree_current_user,
raw_params,
render_content?)
render_report(@report.header, @report.table, params[:csv], "xero_invoices_#{timestamp}.csv")
end
private
def model_class
Spree::Admin::ReportsController
end
# Some actions are changing the `params` object. That is unfortunate Spree
# behavior and we are building on it. So we have to look at `params` early
# to check if we are searching or just displaying a report search form.
def cache_search_state
search_keys = [
# search parameter for ransack
:q,
# common in all reports, only set for CSV rendering
:csv,
# `button` is included in all forms. It's not important for searching,
# but the Users & Enterprises report doesn't have any other parameter
# for an empty search. So we use this one to display data.
:button,
# Some reports use filtering by enterprise or order cycle
:distributor_id,
:supplier_id,
:order_cycle_id,
# Xero Invoices can be filtered by date
:invoice_date,
:due_date
]
@searching = search_keys.any? { |key| raw_params.key? key }
end
# We don't want to render data unless search params are supplied.
# Compiling data can take a long time.
def render_content?
@searching
end
def render_report(header, table, create_csv, csv_file_name)
send_data csv_report(header, table), filename: csv_file_name if create_csv
@header = header
@table = table
# Rendering HTML is the default.
end
def load_associated_data
form_options = Reporting::FrontendData.new(spree_current_user)
@distributors = form_options.distributors
@suppliers = form_options.suppliers
@order_cycles = form_options.order_cycles
end
def csv_report(header, table)
CSV.generate do |csv|
csv << header
table.each { |row| csv << row }
end
end
def load_basic_data
@distributors = my_distributors
@suppliers = my_suppliers | suppliers_of_products_distributed_by(@distributors)
@order_cycles = my_order_cycles
end
# Load managed distributor enterprises of current user
def my_distributors
Enterprise.is_distributor.managed_by(spree_current_user)
end
# Load managed producer enterprises of current user
def my_suppliers
Enterprise.is_primary_producer.managed_by(spree_current_user)
end
def suppliers_of_products_distributed_by(distributors)
supplier_ids = Spree::Product.in_distributors(distributors.select('enterprises.id')).
select('spree_products.supplier_id')
Enterprise.where(id: supplier_ids)
end
# Load order cycles the current user has access to
def my_order_cycles
OrderCycle.
active_or_complete.
visible_by(spree_current_user).
order('orders_close_at DESC')
end
def order_grouper_table
order_grouper = OpenFoodNetwork::OrderGrouper.new @report.rules, @report.columns, @report
order_grouper.table(@report.table_items)
end
def authorized_reports
all_reports = [
:orders_and_distributors,
:bulk_coop,
:payments,
:orders_and_fulfillment,
:customers,
:products_and_inventory,
:users_and_enterprises,
:enterprise_fee_summary,
:order_cycle_management,
:sales_tax,
:xero_invoices,
:packing
]
reports = all_reports.select { |action| can? action, Spree::Admin::ReportsController }
reports.map { |report| [report, describe_report(report)] }.to_h
end
def describe_report(report)
name = I18n.t(:name, scope: [:admin, :reports, report])
description = begin
I18n.t!(:description, scope: [:admin, :reports, report])
rescue I18n::MissingTranslationData
render_to_string(
partial: "#{report}_description",
layout: false,
locals: { report_types: report_types[report] }
).html_safe
end
{ name: name, url: url_for_report(report), description: description }
end
def url_for_report(report)
if report_in_order_management_engine?(report)
main_app.public_send("new_order_management_reports_#{report}_url".to_sym)
else
spree.public_send("#{report}_admin_reports_url".to_sym)
end
rescue NoMethodError
main_app.admin_reports_url(report_type: report)
end
# List of reports that have been moved to the Order Management engine
def report_in_order_management_engine?(report)
ORDER_MANAGEMENT_ENGINE_REPORTS.include?(report)
end
def timestamp
Time.zone.now.strftime("%Y%m%d")
end
def orders_and_fulfillment_default_filters
now = Time.zone.now
{ completed_at_gt: (now - 1.month).beginning_of_day,
completed_at_lt: (now + 1.day).beginning_of_day }
end
end
end
end

View File

@@ -1,6 +1,6 @@
# frozen_string_literal: true
module GroupsHelper
module LinkHelper
def link_to_service(baseurl, name, html_options = {}, &block)
return if name.blank?
@@ -15,8 +15,4 @@ module GroupsHelper
prefix + url
end
end
def strip_url(url)
url&.sub(%r{^https?://}i, '')
end
end

View File

@@ -9,7 +9,24 @@ module ReportsHelper
end
end
def report_subtypes(report)
Reporting::ReportLoader.new(report).report_subtypes
def report_payment_method_options(orders)
orders.map do |order|
payment_method = order.payments.last&.payment_method
next unless payment_method
[payment_method.name, payment_method.id]
end.compact.uniq
end
def report_shipping_method_options(orders)
orders.map do |o|
sm = o.shipping_method
[sm&.name, sm&.id]
end.uniq
end
def currency_symbol
Spree::Money.currency_symbol
end
end

View File

@@ -77,7 +77,7 @@ module Spree
klass = EnterpriseGroup if klass == :group
klass = VariantOverride if klass == :Inventory
klass = ProductImport::ProductImporter if klass == :import
klass = Spree::Admin::ReportsController if klass == :report
klass = ::Admin::ReportsController if klass == :report
klass
end
@@ -115,7 +115,7 @@ module Spree
if html_options[:method] &&
html_options[:method].to_s.downcase != 'get' &&
!html_options[:remote]
form_tag(url, method: html_options.delete(:method)) do
form_tag(url, method: html_options.delete(:method), id: html_options.delete(:form_id)) do
button(text, html_options.delete(:icon), nil, html_options)
end
else

View File

@@ -5,8 +5,8 @@ module Spree
module OrdersHelper
def event_links
links = []
links << event_link("cancel") if @order.can_cancel?
links << event_link("resume") if @order.can_resume?
links << cancel_event_link if @order.can_cancel?
links << resume_event_link if @order.can_resume?
links.join('&nbsp;').html_safe
end
@@ -44,6 +44,14 @@ module Spree
end
end
def print_invoice_link
if @order.distributor.can_invoice?
print_invoice_link_with_url
else
notify_about_required_enterprise_number
end
end
def ticket_links
return [] unless Spree::Config[:enable_receipt_printing?]
@@ -78,13 +86,20 @@ module Spree
confirm: t(:must_have_valid_business_number, enterprise_name: @order.distributor.name) }
end
def print_invoice_link
def print_invoice_link_with_url
{ name: t(:print_invoice),
url: spree.print_admin_order_path(@order),
icon: 'icon-print',
target: "_blank" }
end
def notify_about_required_enterprise_number
{ name: t(:print_invoice),
url: "#",
icon: 'icon-print',
confirm: t(:must_have_valid_business_number, enterprise_name: @order.distributor.name) }
end
def print_ticket_link
{ name: t(:print_ticket),
url: print_ticket_admin_order_path(@order),
@@ -114,12 +129,19 @@ module Spree
confirm: t(:are_you_sure) }
end
def event_link(event)
event_label = I18n.t(event, scope: "actions")
def cancel_event_link
event_label = I18n.t("cancel", scope: "actions")
button_link_to(event_label,
fire_admin_order_url(@order, e: "cancel"),
method: :put, icon: "icon-cancel", form_id: "cancel_order_form")
end
def resume_event_link
event_label = I18n.t("resume", scope: "actions")
confirm_message = I18n.t("admin.orders.edit.order_sure_want_to", event: event_label)
button_link_to(event_label,
fire_admin_order_url(@order, e: event),
method: :put, icon: "icon-#{event}",
fire_admin_order_url(@order, e: "resume"),
method: :put, icon: "icon-resume",
data: { confirm: confirm_message })
end

View File

@@ -1,33 +0,0 @@
# frozen_string_literal: true
require 'spree/money'
module Spree
module ReportsHelper
def report_payment_method_options(orders)
orders.map do |order|
payment_method = order.payments.last&.payment_method
next unless payment_method
[payment_method.name, payment_method.id]
end.compact.uniq
end
def report_shipping_method_options(orders)
orders.map do |o|
sm = o.shipping_method
[sm&.name, sm&.id]
end.uniq
end
def xero_report_types
[[I18n.t(:summary), 'summary'],
[I18n.t(:detailed), 'detailed']]
end
def currency_symbol
Spree::Money.currency_symbol
end
end
end

View File

@@ -14,7 +14,7 @@ class CustomerSchema < JsonApiSchema
code: { type: :string, nullable: true, example: "BUYER1" },
email: { type: :string, example: "alice@example.com" },
allow_charges: { type: :boolean, example: false },
tags: { type: :array, example: ["staff", "discount"] },
tags: { type: :array, items: { type: :string }, example: ["staff", "discount"] },
terms_and_conditions_accepted_at: {
type: :string, format: "date-time", nullable: true,
example: "2022-03-12T15:55:00.000+11:00",
@@ -41,8 +41,8 @@ class CustomerSchema < JsonApiSchema
street_address_2: "",
postal_code: "1234",
locality: "Melbourne",
region: "Victoria",
country: "Australia",
region: { code: "Vic", name: "Victoria" },
country: { code: "AU", name: "Australia" },
}
end

View File

@@ -0,0 +1,43 @@
# frozen_string_literal: true
module FilePreferences
extend ActiveSupport::Concern
included do
@default_urls = {}
end
class_methods do
def file_preference(name, default_url: nil)
preference "#{name}_blob_id", :integer
@default_urls[name] = default_url if default_url
end
def default_url(name)
@default_urls[name]
end
end
def preference_type(key)
if has_preference?("#{key}_blob_id")
:file
else
super(key)
end
end
def url_for(name)
blob = blob_for(name)
if blob
Rails.application.routes.url_helpers.url_for(blob)
else
self.class.default_url(name)
end
end
def blob_for(name)
blob_id = get_preference("#{name}_blob_id")
ActiveStorage::Blob.find_by(id: blob_id) if blob_id
end
end

View File

@@ -1,23 +1,17 @@
# frozen_string_literal: true
require 'open_food_network/paperclippable'
class ContentConfiguration < Spree::Preferences::FileConfiguration
include OpenFoodNetwork::Paperclippable
class ContentConfiguration < Spree::Preferences::Configuration
include FilePreferences
# Header
preference :logo, :file
preference :logo_mobile, :file
preference :logo_mobile_svg, :file
has_attached_file :logo, default_url: "/default_images/ofn-logo.png"
has_attached_file :logo_mobile
has_attached_file :logo_mobile_svg, default_url: "/default_images/ofn-logo-mobile.svg"
file_preference :logo, default_url: "/default_images/ofn-logo.png"
file_preference :logo_mobile
file_preference :logo_mobile_svg, default_url: "/default_images/ofn-logo-mobile.svg"
# Home page
preference :home_page_alert_html, :text
preference :home_hero, :file
file_preference :home_hero, default_url: "/default_images/home.jpg"
preference :home_show_stats, :boolean, default: true
has_attached_file :home_hero, default_url: "/default_images/home.jpg"
# Map
preference :open_street_map_enabled, :boolean, default: false
@@ -66,8 +60,7 @@ class ContentConfiguration < Spree::Preferences::FileConfiguration
preference :menu_7_icon_name, :string, default: "ofn-i_013-help"
# Footer
preference :footer_logo, :file
has_attached_file :footer_logo, default_url: "/default_images/ofn-logo-footer.png"
file_preference :footer_logo, default_url: "/default_images/ofn-logo-footer.png"
# Other
preference :footer_facebook_url, :string, default: "https://www.facebook.com/OpenFoodNet"

View File

@@ -1,12 +1,20 @@
# frozen_string_literal: false
require 'spree/core/s3_support'
class Enterprise < ApplicationRecord
include Spree::Core::S3Support
SELLS = %w(unspecified none own any).freeze
ENTERPRISE_SEARCH_RADIUS = 100
# The next Rails version will have named variants but we need to store them
# ourselves for now.
LOGO_SIZES = {
thumb: { resize_to_limit: [100, 100] },
small: { resize_to_limit: [180, 180] },
medium: { resize_to_limit: [300, 300] },
}.freeze
PROMO_IMAGE_SIZES = {
thumb: { resize_to_limit: [100, 100] },
medium: { resize_to_fill: [720, 156] },
large: { resize_to_fill: [1200, 260] },
}.freeze
searchable_attributes :sells, :is_primary_producer
searchable_associations :properties
@@ -20,6 +28,7 @@ class Enterprise < ApplicationRecord
preference :shopfront_order_cycle_order, :string, default: "orders_close_at"
preference :shopfront_product_sorting_method, :string, default: "by_category"
preference :invoice_order_by_supplier, :boolean, default: false
preference :product_low_stock_display, :boolean, default: false
# Allow hubs to restrict visible variants to only those in their inventory
preference :product_selection_from_inventory_only, :boolean, default: false
@@ -71,31 +80,16 @@ class Enterprise < ApplicationRecord
tag_rule[:preferred_customer_tags].blank?
}
has_attached_file :logo,
styles: { medium: "300x300>", small: "180x180>", thumb: "100x100>" },
url: '/images/enterprises/logos/:id/:style/:basename.:extension',
path: 'public/images/enterprises/logos/:id/:style/:basename.:extension'
has_one_attached :logo
has_one_attached :promo_image
has_one_attached :terms_and_conditions
has_attached_file :promo_image,
styles: {
large: ["1200x260#", :jpg],
medium: ["720x156#", :jpg],
thumb: ["100x100>", :jpg]
},
url: '/images/enterprises/promo_images/:id/:style/:basename.:extension',
path: 'public/images/enterprises/promo_images/:id/:style/:basename.:extension'
validates_attachment_content_type :logo, content_type: %r{\Aimage/.*\Z}
validates_attachment_content_type :promo_image, content_type: %r{\Aimage/.*\Z}
has_attached_file :terms_and_conditions,
url: '/files/enterprises/terms_and_conditions/:id/:basename.:extension',
path: 'public/files/enterprises/terms_and_conditions/:id/:basename.:extension'
validates_attachment_content_type :terms_and_conditions,
content_type: "application/pdf",
message: I18n.t(:enterprise_terms_and_conditions_type_error)
supports_s3 :logo
supports_s3 :promo_image
validates :logo, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml)\Z}
validates :promo_image, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml)\Z}
validates :terms_and_conditions, content_type: {
in: "application/pdf",
message: I18n.t(:enterprise_terms_and_conditions_type_error),
}
validates :name, presence: true
validate :name_is_unique
@@ -119,7 +113,8 @@ class Enterprise < ApplicationRecord
after_rollback :restore_permalink
scope :by_name, -> { order('name') }
scope :visible, -> { where(visible: true) }
scope :visible, -> { where(visible: "public") }
scope :not_hidden, -> { where.not(visible: "hidden") }
scope :activated, -> { where("sells != 'unspecified'") }
scope :ready_for_checkout, lambda {
joins(:shipping_methods).
@@ -266,7 +261,7 @@ class Enterprise < ApplicationRecord
def plus_relatives_and_oc_producers(order_cycles)
oc_producer_ids = Exchange.in_order_cycle(order_cycles).incoming.pluck :sender_id
Enterprise.is_primary_producer.relatives_of_one_union_others(id, oc_producer_ids | [id])
Enterprise.not_hidden.is_primary_producer.relatives_of_one_union_others(id, oc_producer_ids | [id])
end
def relatives_including_self
@@ -281,6 +276,22 @@ class Enterprise < ApplicationRecord
relatives_including_self.is_primary_producer
end
def logo_url(name)
return unless logo.variable?
Rails.application.routes.url_helpers.url_for(
logo.variant(LOGO_SIZES[name])
)
end
def promo_image_url(name)
return unless promo_image.variable?
Rails.application.routes.url_helpers.url_for(
promo_image.variant(PROMO_IMAGE_SIZES[name])
)
end
def website
strip_url self[:website]
end
@@ -301,6 +312,10 @@ class Enterprise < ApplicationRecord
correct_instagram_url self[:instagram]
end
def whatsapp_url
correct_whatsapp_url self[:whatsapp_phone]
end
def inventory_variants
if prefers_product_selection_from_inventory_only?
Spree::Variant.visible_for(self)
@@ -397,9 +412,15 @@ class Enterprise < ApplicationRecord
end
def can_invoice?
return true unless Spree::Config.enterprise_number_required_on_invoices?
abn.present?
end
def public?
visible == "public"
end
protected
def devise_mailer
@@ -431,6 +452,10 @@ class Enterprise < ApplicationRecord
url&.sub(%r{(https?://)?}, '')
end
def correct_whatsapp_url(phone_number)
phone_number && "https://wa.me/" + phone_number.tr('+ ', '')
end
def correct_instagram_url(url)
url && strip_url(url).sub(%r{www.instagram.com/}, '').delete("@")
end

View File

@@ -1,11 +1,9 @@
# frozen_string_literal: true
require 'open_food_network/locking'
require 'spree/core/s3_support'
class EnterpriseGroup < ApplicationRecord
include PermalinkGenerator
include Spree::Core::S3Support
acts_as_list
@@ -27,21 +25,11 @@ class EnterpriseGroup < ApplicationRecord
delegate :phone, :address1, :address2, :city, :zipcode, :state, :country, to: :address
has_attached_file :logo,
styles: { medium: "100x100" },
url: '/images/enterprise_groups/logos/:id/:style/:basename.:extension',
path: 'public/images/enterprise_groups/logos/:id/:style/:basename.:extension'
has_one_attached :logo
has_one_attached :promo_image
has_attached_file :promo_image,
styles: { large: ["1200x260#", :jpg] },
url: '/images/enterprise_groups/promo_images/:id/:style/:basename.:extension',
path: 'public/images/enterprise_groups/promo_images/:id/:style/:basename.:extension'
validates_attachment_content_type :logo, content_type: %r{\Aimage/.*\Z}
validates_attachment_content_type :promo_image, content_type: %r{\Aimage/.*\Z}
supports_s3 :logo
supports_s3 :promo_image
validates :logo, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml)\Z}
validates :promo_image, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml)\Z}
scope :by_position, -> { order('position ASC') }
scope :on_front_page, -> { where(on_front_page: true) }

View File

@@ -10,7 +10,8 @@ class OrderCycle < ApplicationRecord
belongs_to :coordinator, class_name: 'Enterprise'
has_many :coordinator_fee_refs, class_name: 'CoordinatorFee'
has_many :coordinator_fees, through: :coordinator_fee_refs, source: :enterprise_fee
has_many :coordinator_fees, through: :coordinator_fee_refs, source: :enterprise_fee,
dependent: :destroy
has_many :exchanges, dependent: :destroy

View File

@@ -236,12 +236,10 @@ module Spree
:validate_data, :reset_absent_products], ProductImport::ProductImporter
# Reports page
can [:admin, :index, :customers, :orders_and_distributors, :group_buys, :payments,
:orders_and_fulfillment, :products_and_inventory, :order_cycle_management, :packing],
Spree::Admin::ReportsController
can [:admin, :show, :packing], :report
add_bulk_coop_abilities
add_enterprise_fee_summary_abilities
can [:admin, :index, :show], ::Admin::ReportsController
can [:admin, :show, :customers, :orders_and_distributors, :group_buys, :payments,
:orders_and_fulfillment, :products_and_inventory, :order_cycle_management,
:packing, :enterprise_fee_summary, :bulk_coop], :report
end
def add_order_cycle_management_abilities(user)
@@ -317,11 +315,10 @@ module Spree
end
# Reports page
can [:admin, :index, :customers, :group_buys, :sales_tax, :payments,
can [:admin, :index, :show], ::Admin::ReportsController
can [:admin, :customers, :group_buys, :sales_tax, :payments,
:orders_and_distributors, :orders_and_fulfillment, :products_and_inventory,
:order_cycle_management, :xero_invoices], Spree::Admin::ReportsController
add_bulk_coop_abilities
add_enterprise_fee_summary_abilities
:order_cycle_management, :xero_invoices, :enterprise_fee_summary, :bulk_coop], :report
can [:create], Customer
can [:admin, :index, :update,
@@ -346,19 +343,5 @@ module Spree
user.enterprises.include?(enterprise_relationship.child)
end
end
def add_bulk_coop_abilities
# Reveal the report link in spree/admin/reports#index
can [:bulk_coop], Spree::Admin::ReportsController
# Allow direct access to the report resource
can [:admin, :new, :create], :bulk_coop
end
def add_enterprise_fee_summary_abilities
# Reveal the report link in spree/admin/reports#index
can [:enterprise_fee_summary], Spree::Admin::ReportsController
# Allow direct access to the report resource
can [:admin, :new, :create], :enterprise_fee_summary
end
end
end

View File

@@ -105,6 +105,10 @@ module Spree
render_address([city, zipcode, state&.name])
end
def address_and_city
[address1, address2, city].select(&:present?).join(' ')
end
private
def require_zipcode?

View File

@@ -129,6 +129,7 @@ module Spree
preference :enable_invoices?, :boolean, default: true
preference :invoice_style2?, :boolean, default: false
preference :enable_receipt_printing?, :boolean, default: false
preference :enterprise_number_required_on_invoices?, :boolean, default: true
# Stripe payments
preference :stripe_connect_enabled, :boolean, default: false

View File

@@ -1,101 +1,43 @@
# frozen_string_literal: true
require 'spree/core/s3_support'
module Spree
class Image < Asset
validates_attachment_presence :attachment
SIZES = {
mini: { resize_to_fill: [48, 48] },
small: { resize_to_fill: [227, 227] },
product: { resize_to_limit: [240, 240] },
large: { resize_to_limit: [600, 600] },
}.freeze
has_one_attached :attachment
validates :attachment, attached: true, content_type: %r{\Aimage/(png|jpeg|gif|jpg|svg\+xml)\Z}
validate :no_attachment_errors
# This is where the styles are used in the app:
# - mini: used in the BackOffice: Bulk Product Edit page and Order Cycle edit page
# - small: used in the FrontOffice: Product List page
# - product: used in the BackOffice: Product Image upload modal in the Bulk Product Edit page
# and Product image edit page
# - large: used in the FrontOffice: product modal
has_attached_file :attachment,
styles: { mini: "48x48#", small: "227x227#",
product: "240x240>", large: "600x600>" },
default_style: :product,
url: '/spree/products/:id/:style/:basename.:extension',
path: ':rails_root/public/spree/products/:id/:style/:basename.:extension',
convert_options: { all: '-strip -auto-orient -colorspace sRGB' }
# save the w,h of the original image (from which others can be calculated)
# we need to look at the write-queue for images which have not been saved yet
after_post_process :find_dimensions
include Spree::Core::S3Support
supports_s3 :attachment
# used by admin products autocomplete
def mini_url
attachment.url(:mini, false)
end
def find_dimensions
return if attachment.errors.present?
geometry = Paperclip::Geometry.from_file(local_filename_of_original)
self.attachment_width = geometry.width
self.attachment_height = geometry.height
end
def local_filename_of_original
temporary = attachment.queued_for_write[:original]
if temporary&.path.present?
temporary.path
def variant(name)
if attachment.variable?
attachment.variant(SIZES[name])
else
attachment.path
attachment
end
end
def url(size)
return unless attachment.attached?
Rails.application.routes.url_helpers.url_for(variant(size))
end
# if there are errors from the plugin, then add a more meaningful message
def no_attachment_errors
return if attachment.errors.empty?
return if errors[:attachment].empty?
if errors.all? { |e| e.type == "Paperclip::Errors::NotIdentifiedByImageMagickError" }
if errors.all? { |e| e.type == :content_type_invalid }
attachment.errors.clear
errors.add :base, I18n.t('spree.admin.products.image_upload_error')
else
errors.add :attachment,
I18n.t('spree.admin.products.paperclip_image_error', attachment_file_name: attachment_file_name)
end
false
end
def self.set_attachment_attribute(attribute_name, attribute_value)
attachment_definitions[:attachment][attribute_name] = attribute_value
end
def self.set_storage_attachment_attributes
if Spree::Config[:use_s3]
set_s3_attachment_attributes
else
attachment_definitions[:attachment].delete(:storage)
end
end
def self.set_s3_attachment_attributes
set_attachment_attribute(:storage, :s3)
set_attachment_attribute(:s3_credentials, s3_credentials)
set_attachment_attribute(:s3_headers,
ActiveSupport::JSON.decode(Spree::Config[:s3_headers]))
set_attachment_attribute(:bucket, Spree::Config[:s3_bucket])
# We use :s3_alias_url (virtual host url style) and set the URL on property s3_host_alias
set_attachment_attribute(:s3_host_alias, attachment_definitions[:attachment][:url])
set_attachment_attribute(:url, ":s3_alias_url")
end
private_class_method :set_s3_attachment_attributes
def self.s3_credentials
{ access_key_id: Spree::Config[:s3_access_key],
secret_access_key: Spree::Config[:s3_secret],
bucket: Spree::Config[:s3_bucket] }
end
private_class_method :s3_credentials
end
end

View File

@@ -50,6 +50,8 @@ module Spree
attr_accessor :skip_stock_check, :target_shipment # Allows manual skipping of Stock::AvailabilityValidator
attribute :restock_item, type: :boolean, default: true
# -- Scopes
scope :managed_by, lambda { |user|
if user.has_spree_role?('admin')

View File

@@ -106,6 +106,7 @@ module Spree
after_save_commit DefaultAddressUpdater
attribute :send_cancellation_email, type: :boolean, default: true
attribute :restock_items, type: :boolean, default: true
# -- Scopes
scope :not_empty, -> {
left_outer_joins(:line_items).where.not(spree_line_items: { id: nil })
@@ -429,9 +430,10 @@ module Spree
def empty!
line_items.destroy_all
adjustments.destroy_all
all_adjustments.destroy_all
payments.clear
shipments.destroy_all
restart_checkout_flow if state.in?(["payment", "confirmation"])
end
def state_changed(name)
@@ -669,11 +671,12 @@ module Spree
shipments.each(&:cancel!)
OrderMailer.cancel_email(id).deliver_later if send_cancellation_email
self.payment_state = 'credit_owed' unless shipped?
update(payment_state: updater.update_payment_state)
end
def after_resume
shipments.each(&:resume!)
update(payment_state: updater.update_payment_state)
end
def use_billing?

View File

@@ -19,8 +19,8 @@ module Spree
# Get current line item for variant
# Remove variant qty from line_item
def remove(variant, quantity = nil, shipment = nil)
line_item = remove_from_line_item(variant, quantity, shipment)
def remove(variant, quantity = nil, shipment = nil, restock_item = true)
line_item = remove_from_line_item(variant, quantity, shipment, restock_item)
update_shipment(shipment)
order.update_order_fees! if order.completed?
update_order
@@ -97,9 +97,9 @@ module Spree
line_item
end
def remove_from_line_item(variant, quantity, shipment = nil)
def remove_from_line_item(variant, quantity, shipment = nil, restock_item = true)
line_item = find_line_item_by_variant(variant, true)
line_item.restock_item = restock_item
quantity.present? ? line_item.quantity += -quantity : line_item.quantity = 0
line_item.target_shipment = shipment

View File

@@ -44,12 +44,15 @@ module Spree
quantity = variant_units.size - line_item.quantity
if shipment.present?
remove_from_shipment(shipment, line_item.variant, quantity)
remove_from_shipment(shipment, line_item.variant, quantity, line_item.restock_item)
else
order.shipments.each do |each_shipment|
break if quantity == 0
quantity -= remove_from_shipment(each_shipment, line_item.variant, quantity)
quantity -= remove_from_shipment(each_shipment,
line_item.variant,
quantity,
line_item.restock_item)
end
end
end
@@ -83,7 +86,7 @@ module Spree
quantity
end
def remove_from_shipment(shipment, variant, quantity)
def remove_from_shipment(shipment, variant, quantity, restock_item)
return 0 if quantity == 0 || shipment.shipped?
shipment_units = shipment.inventory_units_for(variant).reject do |variant_unit|
@@ -101,7 +104,7 @@ module Spree
shipment.destroy if shipment.inventory_units.reload.count == 0
# removing this from shipment, and adding to stock_location
if order.completed?
if order.completed? && restock_item
shipment.stock_location.restock variant, removed_quantity, shipment
end

View File

@@ -1,49 +0,0 @@
# frozen_string_literal: true
module Spree
module Preferences
class FileConfiguration < Configuration
def self.preference(name, type, *args)
if type == :file
super "#{name}_file_name", :string, *args
super "#{name}_content_type", :string, *args
super "#{name}_file_size", :integer, *args
super "#{name}_updated_at", :string, *args
else
super name, type, *args
end
end
def get_preference(key)
if !has_preference?(key) && has_attachment?(key)
public_send key
else
super key
end
end
alias :[] :get_preference
def preference_type(name)
if has_attachment? name
:file
else
super name
end
end
# Spree's Configuration responds to preference methods via method_missing, but doesn't
# override respond_to?, which consequently reports those methods as unavailable. Paperclip
# errors if respond_to? isn't correct, so we override it here.
def respond_to?(method, include_all = false)
name = method.to_s.delete('=')
super(self.class.preference_getter_method(name), include_all) || super(method, include_all)
end
def has_attachment?(name)
self.class.respond_to?(:attachment_definitions) &&
self.class.attachment_definitions.key?(name.to_sym)
end
end
end
end

View File

@@ -78,8 +78,7 @@ module Spree
where(producer_properties: { property_id: property_ids }).
or(
where(spree_product_properties: { property_id: property_ids })
).
distinct
)
}
delegate_belongs_to :master, :sku, :price, :currency, :display_amount, :display_price, :weight,

View File

@@ -192,7 +192,7 @@ module Spree
end
def after_cancel
manifest.each { |item| manifest_restock(item) }
manifest.each { |item| manifest_restock(item) } if order.restock_items
end
def after_resume

View File

@@ -2,8 +2,6 @@
module Spree
class Taxon < ApplicationRecord
include Spree::Core::S3Support
acts_as_nested_set dependent: :destroy
belongs_to :taxonomy, class_name: 'Spree::Taxonomy', touch: true
@@ -14,15 +12,6 @@ module Spree
validates :name, presence: true
has_attached_file :icon,
styles: { mini: '32x32>', normal: '128x128>' },
default_style: :mini,
url: '/spree/taxons/:id/:style/:basename.:extension',
path: ':rails_root/public/spree/taxons/:id/:style/:basename.:extension',
default_url: '/assets/default_taxon.png'
supports_s3 :icon
# Indicate which filters should be used for this taxon
def applicable_filters
[]

View File

@@ -41,7 +41,7 @@ module Spree
accepts_nested_attributes_for :bill_address
accepts_nested_attributes_for :ship_address
after_create :associate_customers
after_create :associate_customers, :associate_orders
validate :limit_owned_enterprises
@@ -113,6 +113,12 @@ module Spree
self.customers = Customer.where(email: email)
end
def associate_orders
Spree::Order.where(customer: customers).find_each do |order|
order.associate_user!(self)
end
end
def can_own_more_enterprises?
owned_enterprises.reload.size < enterprise_limit
end
@@ -144,6 +150,14 @@ module Spree
"#{self.class.name};#{id}"
end
def disabled
disabled_at.present?
end
def disabled=(value)
self.disabled_at = value == '1' ? Time.zone.now : nil
end
protected
def password_required?

View File

@@ -172,6 +172,11 @@ module Spree
OpenFoodNetwork::EnterpriseFeeCalculator.new(distributor, order_cycle).fees_by_type_for self
end
def fees_name_by_type_for(distributor, order_cycle)
OpenFoodNetwork::EnterpriseFeeCalculator.new(distributor,
order_cycle).fees_name_by_type_for self
end
def option_value(opt_name)
option_values.detect { |o| o.option_type.name == opt_name }.try(:presentation)
end

View File

@@ -9,6 +9,7 @@ class SubscriptionLineItem < ApplicationRecord
validates :quantity, presence: true, numericality: { only_integer: true }
default_scope { order('id ASC') }
scope :nil_price_estimate, -> { where(price_estimate: nil) }
def total_estimate
(price_estimate || 0) * (quantity || 0)

View File

@@ -1,9 +1,9 @@
# frozen_string_literal: true
class TermsOfServiceFile < ApplicationRecord
has_attached_file :attachment
has_one_attached :attachment
validates :attachment, presence: true
validates :attachment, attached: true
# The most recently uploaded file is the current one.
def self.current
@@ -11,7 +11,11 @@ class TermsOfServiceFile < ApplicationRecord
end
def self.current_url
current&.attachment&.url || Spree::Config.footer_tos_url
if current
Rails.application.routes.url_helpers.url_for(current.attachment)
else
Spree::Config.footer_tos_url
end
end
# If no file has been uploaded, we don't know when the old terms have

View File

@@ -13,7 +13,8 @@ module Api
:default_tag_group, :require_login, :allow_guest_orders, :allow_order_changes,
:logo, :promo_image, :terms_and_conditions,
:terms_and_conditions_file_name, :terms_and_conditions_updated_at,
:preferred_invoice_order_by_supplier
:preferred_invoice_order_by_supplier, :preferred_product_low_stock_display,
:visible
has_one :owner, serializer: Api::Admin::UserSerializer
has_many :users, serializer: Api::Admin::UserSerializer
@@ -21,21 +22,26 @@ module Api
has_one :business_address, serializer: Api::AddressSerializer
def logo
attachment_urls(object.logo, [:thumb, :small, :medium])
attachment_urls(object.logo, Enterprise::LOGO_SIZES)
end
def promo_image
attachment_urls(object.promo_image, [:thumb, :medium, :large])
attachment_urls(object.promo_image, Enterprise::PROMO_IMAGE_SIZES)
end
def terms_and_conditions
return unless object.terms_and_conditions.file?
return unless object.terms_and_conditions.attached?
object.terms_and_conditions.url
Rails.application.routes.url_helpers.
url_for(object.terms_and_conditions)
end
def terms_and_conditions_file_name
object.terms_and_conditions_blob&.filename
end
def terms_and_conditions_updated_at
object.terms_and_conditions_updated_at&.to_s
object.terms_and_conditions_blob&.created_at&.to_s
end
def tag_groups
@@ -75,19 +81,19 @@ module Api
# Returns a hash of URLs for specified versions of an attachment.
#
# Example:
# Example result:
#
# attachment_urls(object.logo, [:thumb, :small, :medium])
# # {
# # thumb: LOGO_THUMB_URL,
# # small: LOGO_SMALL_URL,
# # medium: LOGO_MEDIUM_URL
# # }
def attachment_urls(attachment, versions)
return unless attachment.file?
# {
# thumb: LOGO_THUMB_URL,
# small: LOGO_SMALL_URL,
# medium: LOGO_MEDIUM_URL
# }
def attachment_urls(attachment, styles)
return unless attachment.variable?
versions.each_with_object({}) do |version, urls|
urls[version] = attachment.url(version)
styles.transform_values do |transformation|
Rails.application.routes.url_helpers.
url_for(attachment.variant(transformation))
end
end
end

View File

@@ -11,7 +11,7 @@ module Api
end
def image_url
object.images.present? ? object.images.first.attachment.url(:mini) : nil
object.images.first&.url(:mini)
end
def master_id

View File

@@ -13,19 +13,11 @@ module Api
has_one :master, serializer: Api::Admin::VariantSerializer
def image_url
if object.images.present?
object.images.first.attachment.url(:product)
else
"/noimage/product.png"
end
object.images.first&.url(:product) || "/noimage/product.png"
end
def thumb_url
if object.images.present?
object.images.first.attachment.url(:mini)
else
"/noimage/mini.png"
end
object.images.first&.url(:mini) || "/noimage/mini.png"
end
def on_hand

View File

@@ -33,9 +33,7 @@ module Api
end
def image
return if object.product.images.empty?
object.product.images.first.mini_url
object.product.images.first&.url(:mini)
end
def in_stock

View File

@@ -14,9 +14,9 @@ module Api
attributes :name, :id, :description, :latitude, :longitude,
:long_description, :website, :instagram, :linkedin, :twitter,
:facebook, :is_primary_producer, :is_distributor, :phone, :visible,
:email_address, :hash, :logo, :promo_image, :path, :pickup, :delivery,
:icon, :icon_font, :producer_icon_font, :category
:facebook, :is_primary_producer, :is_distributor, :phone, :whatsapp_phone,
:whatsapp_url, :visible, :email_address, :hash, :logo, :promo_image, :path, :pickup,
:delivery, :icon, :icon_font, :producer_icon_font, :category
attributes :taxons, :supplied_taxons
@@ -44,11 +44,11 @@ module Api
end
def logo
enterprise.logo(:medium) if enterprise.logo?
enterprise.logo_url(:medium)
end
def promo_image
enterprise.promo_image(:large) if enterprise.promo_image?
enterprise.promo_image_url(:large)
end
def path

View File

@@ -7,9 +7,9 @@ module Api
attributes :name, :id, :description, :latitude, :longitude, :long_description, :website,
:instagram, :linkedin, :twitter, :facebook, :is_primary_producer, :is_distributor,
:phone, :visible, :email_address, :hash, :logo, :promo_image, :path, :category,
:active, :producers, :orders_close_at, :hubs, :taxons, :supplied_taxons, :pickup,
:delivery
:phone, :whatsapp_phone, :whatsapp_url, :visible, :email_address, :hash, :logo,
:promo_image, :path, :category, :active, :producers, :orders_close_at, :hubs,
:taxons, :supplied_taxons, :pickup, :delivery, :preferred_product_low_stock_display
has_one :address, serializer: Api::AddressSerializer
has_many :supplied_properties, serializer: Api::PropertySerializer
@@ -41,11 +41,11 @@ module Api
end
def logo
enterprise.logo(:medium) if enterprise.logo?
enterprise.logo_url(:medium)
end
def promo_image
enterprise.promo_image(:large) if enterprise.promo_image?
enterprise.promo_image_url(:large)
end
def path

View File

@@ -4,18 +4,18 @@ class Api::ImageSerializer < ActiveModel::Serializer
attributes :id, :alt, :thumb_url, :small_url, :image_url, :large_url
def thumb_url
object.attachment.url(:mini, false)
object.url(:mini)
end
def small_url
object.attachment.url(:small, false)
object.url(:small)
end
def image_url
object.attachment.url(:product, false)
object.url(:product)
end
def large_url
object.attachment.url(:large, false)
object.url(:large)
end
end

View File

@@ -10,7 +10,7 @@ module Api
has_many :payments, serializer: Api::PaymentSerializer
attributes :adjustments
attributes :adjustments, :customer_id
def adjustments
adjustments = object.all_adjustments.where(

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