Compare commits

..

958 Commits

Author SHA1 Message Date
Maikel Linke
fddb76f002 Merge branch 'active-storage' into HEAD
Creating a seperate release off the master branch.
2022-06-08 12:05:56 +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
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
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
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
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
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
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
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
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
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
Maikel Linke
3e02db7bd9 Update translations 2022-04-15 13:06:31 +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
5eca0a7811 Merge pull request #9090 from openfoodfoundation/dependabot/npm_and_yarn/karma-6.3.18
Bump karma from 6.3.17 to 6.3.18
2022-04-15 12:56:56 +10: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
Maikel
28de8bbb8d Merge pull request #9083 from filipefurtad0/updating_properties_specs
Updating properties specs
2022-04-15 11:25:32 +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
jibees
c001463f8a Merge pull request #9091 from openfoodfoundation/transifex
Transifex
2022-04-14 15:27:22 +02:00
jibees
727aa553e7 Merge pull request #9088 from mkllnk/9024-setup-script
Update setup script for removed callbacks
2022-04-14 14:48:02 +02: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
filipefurtad0
aed757e349 Adds tests on shopfront ordering preference setting 2022-04-13 23:38:03 +01:00
filipefurtad0
18572cbbfa Adds sorting by product to reproduce #9046; sets assertion as pending 2022-04-13 23:38:03 +01:00
filipefurtad0
f3706bdb00 Adds taxon and property filtering 2022-04-13 21:55:23 +01:00
Filipe
cbb9e01a25 Merge pull request #8884 from Matt-Yorkley/image-format-errors
Patch keyword arguments syntax in Paperclip error handling
2022-04-13 19:38:07 +01:00
Filipe
94bba56726 Merge pull request #9063 from georgethoppil/select-all-variants
Add all variants for only one distributor
2022-04-13 19:37:31 +01:00
Filipe
0cc056ab7f Merge pull request #9071 from Matt-Yorkley/permissions-query-improvements
Improve permissions query building
2022-04-13 19:23:13 +01:00
Transifex-Openfoodnetwork
5444d0d0b9 Updating translations for config/locales/de_DE.yml 2022-04-13 23:16:53 +10: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
Filipe
6b1dd00dec Merge pull request #9011 from cillian/validate-subscription-quantity
Don't allow subscriptions with no quantity to be saved
2022-04-13 12:03:34 +01:00
Transifex-Openfoodnetwork
aa75c2defe Updating translations for config/locales/en_FR.yml 2022-04-13 20:24:41 +10:00
Transifex-Openfoodnetwork
dd905e4388 Updating translations for config/locales/fr.yml 2022-04-13 20:24:38 +10:00
Filipe
fbe378d3b9 Merge pull request #9074 from hmurali01/translate-shipping-method
Fixed missing translation: "Shipping method"
2022-04-13 11:01:16 +01:00
Transifex-Openfoodnetwork
d5fbb40b93 Updating translations for config/locales/en_FR.yml 2022-04-13 19:45:33 +10:00
Transifex-Openfoodnetwork
1dc57a3518 Updating translations for config/locales/fr.yml 2022-04-13 19:44:14 +10:00
dependabot[bot]
c6e982b0f9 Bump karma from 6.3.17 to 6.3.18
Bumps [karma](https://github.com/karma-runner/karma) from 6.3.17 to 6.3.18.
- [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.17...v6.3.18)

---
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-13 09:04:15 +00:00
jibees
0d29fc78c3 Merge pull request #9089 from mkllnk/cuprite-host
Include port in URLs generated by system specs
2022-04-13 09:52:47 +02:00
Maikel Linke
4d8c44d890 Include port in URLs generated by system specs
This means that we can follow generated links, for example in emails and
reach the test app server.
2022-04-13 15:03:38 +10:00
Maikel Linke
4eb2b5d483 Reduce method complexity 2022-04-13 14:55:54 +10:00
Maikel Linke
a3a1e27cb1 Update setup script for removed callbacks
We removed some Spree magic a while back and that broke our sample data
script. This is now corrected.

I also added a spec so that we will notice broken seed data earlier.
2022-04-13 14:48:30 +10:00
Maikel
a4bffc61f1 Merge pull request #8997 from apricot12/8968-Group-products-by-supplier-P1
Sort products by supplier in invoice
2022-04-13 11:54:12 +10:00
Maikel
26d6969b5b Merge pull request #9045 from jibees/9043-send-email-cancelation-by-default
Send cancellation email by default when cancelling an order
2022-04-13 11:53:43 +10:00
Maikel
e6c65f524a Merge pull request #9033 from seballot/select2-multiple
select2: improve style
2022-04-13 09:37:13 +10:00
jibees
762b6fad65 Merge pull request #9079 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-docs-6.4.21
Bump @storybook/addon-docs from 6.4.20 to 6.4.21
2022-04-12 14:14:47 +02:00
dependabot[bot]
48246117cd Bump @storybook/addon-docs from 6.4.20 to 6.4.21
Bumps [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/addons/docs) from 6.4.20 to 6.4.21.
- [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.21/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-12 11:53:50 +00:00
jibees
bf8186bb84 Merge pull request #9077 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-controls-6.4.21
Bump @storybook/addon-controls from 6.4.20 to 6.4.21
2022-04-12 13:53:02 +02:00
Maikel
fd804d819e Merge pull request #9078 from openfoodfoundation/dependabot/npm_and_yarn/storybook/server-6.4.21
Bump @storybook/server from 6.4.20 to 6.4.21
2022-04-12 11:05:41 +10:00
Maikel Linke
5e0c901790 Improve spec of sorted line items
The previous version wasn't actually testing the sorting option. There
was only one supplier and the items got sorted the same way in both
cases.
2022-04-12 10:45:40 +10:00
filipefurtad0
760e7ad6e2 Adds assertion on displaying/hidding the Properties tab 2022-04-11 22:30:54 +01:00
Nihal Mohammed
48613a4b42 Add test for sorted_line_items 2022-04-11 20:11:32 +05:30
dependabot[bot]
1aed6d0ee6 Bump @storybook/server from 6.4.20 to 6.4.21
Bumps [@storybook/server](https://github.com/storybookjs/storybook/tree/HEAD/app/server) from 6.4.20 to 6.4.21.
- [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.21/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-11 09:05:51 +00:00
dependabot[bot]
65faf33b87 Bump @storybook/addon-controls from 6.4.20 to 6.4.21
Bumps [@storybook/addon-controls](https://github.com/storybookjs/storybook/tree/HEAD/addons/controls) from 6.4.20 to 6.4.21.
- [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.21/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-11 09:05:36 +00:00
Jean-Baptiste Bellet
99161a19ea Update all locales with the latest Transifex translations 2022-04-11 09:43:00 +02:00
jibees
8b047cd449 Merge pull request #9073 from openfoodfoundation/transifex
Transifex
2022-04-11 09:36:08 +02:00
Transifex-Openfoodnetwork
b2b8ec8008 Updating translations for config/locales/ar.yml 2022-04-11 02:10:24 +10:00
Transifex-Openfoodnetwork
2087a17fa9 Updating translations for config/locales/de_DE.yml 2022-04-08 17:43:34 +10:00
Transifex-Openfoodnetwork
0eb77cf7d3 Updating translations for config/locales/en_FR.yml 2022-04-08 17:22:25 +10:00
Transifex-Openfoodnetwork
3fc71c0e99 Updating translations for config/locales/fr.yml 2022-04-08 17:21:35 +10:00
Filipe
afcdfce37d Merge pull request #8967 from mkllnk/api-customers-final
Serve customers data via first API v1 endpoint in JSON:API format behind feature toggle
2022-04-07 21:03:06 +01:00
hmurali01
d16b6fcad5 Fixed missing translation: "Shipping method" 2022-04-07 13:28:32 -04:00
Transifex-Openfoodnetwork
cb697599d4 Updating translations for config/locales/ru.yml 2022-04-07 19:12:28 +10:00
Maikel
d0a93fb512 Merge pull request #9070 from jibees/clean-yarn-lock-file
Clean yarn.lock due to failed update
2022-04-07 16:03:27 +10:00
Matt-Yorkley
eef59bbaae Improve permissions query building
For larger queries and especially where filtering and paginating, these simpler product queries are way more efficient. It cuts out some very large subqueries with large lists of product ids.
2022-04-05 22:28:09 +01:00
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
ad19142042 Clean yarn.lock
Seems that dependant bot missed something at some point maybe from  #9061 or #9060
2022-04-05 14:47:13 +02:00
Maikel
5470dc6c68 Merge pull request #9065 from openfoodfoundation/dependabot/npm_and_yarn/moment-2.29.2
Bump moment from 2.29.1 to 2.29.2
2022-04-05 11:21:49 +10:00
GeorgeThoppil
706f6025e9 Add all variants for only one distributor 2022-04-04 19:59:42 -04:00
jibees
ea12fcb45f Merge pull request #9061 from openfoodfoundation/dependabot/npm_and_yarn/storybook/server-6.4.20
Bump @storybook/server from 6.4.19 to 6.4.20
2022-04-04 15:51:21 +02:00
jibees
47c59e6172 Merge pull request #9060 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-controls-6.4.20
Bump @storybook/addon-controls from 6.4.19 to 6.4.20
2022-04-04 15:51:13 +02:00
dependabot[bot]
5b6c23780e Bump @storybook/addon-controls from 6.4.19 to 6.4.20
Bumps [@storybook/addon-controls](https://github.com/storybookjs/storybook/tree/HEAD/addons/controls) from 6.4.19 to 6.4.20.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.4.20/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.4.20/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-04 13:15:54 +00:00
dependabot[bot]
374bc31a60 Bump @storybook/server from 6.4.19 to 6.4.20
Bumps [@storybook/server](https://github.com/storybookjs/storybook/tree/HEAD/app/server) from 6.4.19 to 6.4.20.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.4.20/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.4.20/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-04 13:15:48 +00:00
jibees
d34ab71efa Merge pull request #9059 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-docs-6.4.20
Bump @storybook/addon-docs from 6.4.19 to 6.4.20
2022-04-04 15:14:58 +02:00
dependabot[bot]
abdab5a22a Bump moment from 2.29.1 to 2.29.2
Bumps [moment](https://github.com/moment/moment) from 2.29.1 to 2.29.2.
- [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.1...2.29.2)

---
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-04 09:04:59 +00:00
Maikel Linke
e726d2d736 Update translations 2022-04-04 10:40:10 +10:00
Maikel
044bf35c81 Merge pull request #9062 from openfoodfoundation/transifex
Transifex
2022-04-04 10:35:45 +10:00
Transifex-Openfoodnetwork
010b39b671 Updating translations for config/locales/en_FR.yml 2022-04-02 00:31:06 +11:00
Transifex-Openfoodnetwork
4079e61beb Updating translations for config/locales/fr.yml 2022-04-02 00:28:05 +11:00
Transifex-Openfoodnetwork
dc00221dc4 Updating translations for config/locales/de_DE.yml 2022-04-02 00:28:01 +11:00
Transifex-Openfoodnetwork
eef9dc346d Updating translations for config/locales/en_CA.yml 2022-04-02 00:24:54 +11:00
Filipe
f29dc3f978 Merge pull request #9009 from jibees/9007-already-opened-cart
SplitCheckout: add already opened cart message on summary step when distributor allow order changes
2022-04-01 13:29:34 +01:00
dependabot[bot]
1a66c1148b Bump @storybook/addon-docs from 6.4.19 to 6.4.20
Bumps [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/addons/docs) from 6.4.19 to 6.4.20.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.4.20/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.4.20/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-01 09:04:16 +00:00
Filipe
c4fc8e9396 Merge pull request #8988 from jibees/8963-sc-display-save-shipping-address-as-default-checkbox
SplitCheckout: Display checkbox that "save as default address" on the /details page
2022-03-31 16:43:52 +01:00
Filipe
e2b1c0d93f Merge pull request #9004 from jibees/8999-filter-shipping-methods-with-tag
SplitCheckout: filter shipping method with tag
2022-03-31 12:09:06 +01:00
Filipe
71b6c129d6 Merge pull request #9021 from filipefurtad0/improves_guest_checkout
[Split-Checkout] Hides "Save as default billing address" from guest-checkout
2022-03-31 10:45:47 +01:00
Jean-Baptiste Bellet
20142ca632 Add a spec on canceling an order, and check email is sent
Co-Authored-By: Maikel <maikel@email.org.au>
2022-03-31 09:18:43 +02:00
jibees
8929fa4dcd Merge pull request #9042 from openfoodfoundation/transifex
Transifex
2022-03-30 10:27:58 +02:00
filipefurtad0
843f57ad4f Removes checkbox attributes 2022-03-29 22:29:43 +01:00
filipefurtad0
95b1911f38 Hides the default address checkbox for guest customers 2022-03-29 22:09:39 +01:00
filipefurtad0
f8b8298fbe Adds spec on billing address checkbox 2022-03-29 22:09:39 +01:00
Jean-Baptiste Bellet
6a48bdbb82 Send email cancelation by default 2022-03-29 10:12:00 +02:00
Transifex-Openfoodnetwork
85ff203e3f Updating translations for config/locales/en_FR.yml 2022-03-29 00:27:46 +11:00
Transifex-Openfoodnetwork
f229479a1e Updating translations for config/locales/en_US.yml 2022-03-29 00:24:41 +11:00
Transifex-Openfoodnetwork
10685b4ca2 Updating translations for config/locales/en_CA.yml 2022-03-29 00:24:38 +11:00
Filipe
729e9eda66 Merge pull request #9013 from cillian/fix-order-cycle-advanced-settings-close-button
Fix order cycle advanced settings close button so it uses new remote toggle StimulusJs controller instead of old toggleSettings method
2022-03-28 14:10:11 +01:00
Nihal Mohammed
b2613f3331 Add translations 2022-03-28 18:26:39 +05:30
Nihal Mohammed
5f2f5456a0 Add code to sort order by supplier when Enterprise user chooses to 2022-03-28 18:12:39 +05:30
Filipe
be1c255067 Merge pull request #8892 from Matt-Yorkley/spree-login-routes
Fix issue with unconfirmed email messages
2022-03-28 13:38:17 +01:00
Filipe
a516193ca8 Merge pull request #9025 from MrFuku/fix-flash-message
Fix untranslated flash message
2022-03-28 13:18:47 +01:00
Filipe
6a71be2a6b Merge pull request #9029 from cbordei/ofn-8459-missing-translation-for-model
Added missing translation for model name.
2022-03-28 12:54:24 +01:00
Transifex-Openfoodnetwork
1c2a60d543 Updating translations for config/locales/en_GB.yml 2022-03-28 19:59:34 +11:00
Maikel
a4a5586345 Merge pull request #9035 from openfoodfoundation/dependabot/npm_and_yarn/minimist-1.2.6
Bump minimist from 1.2.5 to 1.2.6
2022-03-28 12:17:08 +11:00
Maikel Linke
742ae761a3 Move helper statement to controller
It's not available in concerns.
2022-03-28 11:34:37 +11:00
Maikel Linke
379eda7c41 Add feature toggle for API v1 use
Dev, test and staging need to activate the feature toggle now before
it's accessible.
2022-03-28 11:04:30 +11:00
Maikel Linke
3e00ab261e Spec customer relationships on API 2022-03-28 11:04:30 +11:00
Maikel Linke
5063f377c3 Enable relationship inclusion for customers#show
This will allow us to include address records.
2022-03-28 11:04:30 +11:00
Maikel Linke
d789fb32e9 Make customer's address writable on API 2022-03-28 11:04:30 +11:00
Maikel Linke
51420934f3 Add billing and shipping address to customer 2022-03-28 10:58:18 +11:00
Maikel Linke
adc7e97e62 Add tag list to customer endpoint 2022-03-28 10:55:58 +11:00
Maikel Linke
e5e8953a09 Add ToS acceptance to customer endpoint
It's another read-only attribute.

Please note that JSON:API specifies a format of `date-time` which we
don't adhere to because it uses a `Z` in front of the timezone offset
which doesn't seem to be included in the default json serialisation.

So I didn't add the format and left it as simple `string`. Problem?
2022-03-28 10:55:58 +11:00
Maikel Linke
aa6e5ae799 Report useful error message in missing parameter 2022-03-28 10:55:57 +11:00
Maikel Linke
8d12c7a692 Permit more customer attributes for update 2022-03-28 10:55:57 +11:00
Maikel Linke
41746459fa Restrict allow_charges attribute to read-only
We want people to use the UI to change this attribute.
2022-03-28 10:55:57 +11:00
Maikel Linke
3baed683b1 Add allow_charges attribute to customers endpoint 2022-03-28 10:55:57 +11:00
Transifex-Openfoodnetwork
5fb94dcb22 Updating translations for config/locales/en_US.yml 2022-03-28 01:54:20 +11:00
Matt-Yorkley
913a4560d1 Update all locales with the latest Transifex translations 2022-03-25 19:57:51 +00:00
Matt-Yorkley
cc19dc7d03 Merge pull request #9020 from openfoodfoundation/transifex
Transifex
2022-03-25 19:55:05 +00:00
Matt-Yorkley
ad5c834342 Merge pull request #8995 from apricot12/7853-deprecation-warnings-1
7853 deprecation warnings 1
2022-03-25 19:54:06 +00: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
Transifex-Openfoodnetwork
4800abf324 Updating translations for config/locales/fr_CA.yml 2022-03-24 22:54:06 +11:00
Transifex-Openfoodnetwork
f73f3b17e1 Updating translations for config/locales/en_CA.yml 2022-03-24 22:49:05 +11:00
Sebastian Castro
66cdd56428 select2-light: make it looks like normal select 2022-03-24 10:44:18 +00:00
dependabot[bot]
d759409e38 Bump minimist from 1.2.5 to 1.2.6
Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6.
- [Release notes](https://github.com/substack/minimist/releases)
- [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 08:46:20 +00:00
jibees
b9e18a1ec1 Merge pull request #9030 from openfoodfoundation/dependabot/npm_and_yarn/babel-loader-8.2.4
Bump babel-loader from 8.2.3 to 8.2.4
2022-03-24 09:19:42 +01:00
jibees
9a5318965c Use as an helper
Co-Authored-By: Maikel <maikel@email.org.au>
2022-03-24 09:11:58 +01:00
Maikel
9230329343 Merge pull request #9003 from mkllnk/old-conf
Remove old config comments
2022-03-24 11:48:20 +11:00
dependabot[bot]
3901a18b72 Bump babel-loader from 8.2.3 to 8.2.4
Bumps [babel-loader](https://github.com/babel/babel-loader) from 8.2.3 to 8.2.4.
- [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.3...v8.2.4)

---
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-03-23 09:11:17 +00:00
Cristian Bordei
4730bbdc36 [OFN-8459] Added missing translation for model name. 2022-03-23 09:57:57 +02:00
Sebastian Castro
9e55a306ee select2-multiple: improve style 2022-03-22 16:32:29 +00:00
Transifex-Openfoodnetwork
2758097776 Updating translations for config/locales/ar.yml 2022-03-23 02:14:03 +11:00
Transifex-Openfoodnetwork
f5eb83c483 Updating translations for config/locales/en_FR.yml 2022-03-23 00:18:04 +11:00
Transifex-Openfoodnetwork
aafe7c90a8 Updating translations for config/locales/fr.yml 2022-03-23 00:17:35 +11:00
Transifex-Openfoodnetwork
64ba004e5d Updating translations for config/locales/de_DE.yml 2022-03-23 00:13:57 +11:00
Filipe
6d0d57a4d2 Merge pull request #8960 from filipefurtad0/covers_default_addresses
Covers default billing address checkbox behavior
2022-03-22 09:10:42 +00:00
MrFuku
7c1a4d6791 Fix untranslated flash message 2022-03-22 17:53:57 +09:00
Maikel
877002afd8 Merge pull request #8891 from mkllnk/api-customers
Create API v1 with customers endpoint
2022-03-22 19:37:23 +11:00
Nihal Mohammed
cc120aecb6 Add radio buttons to give Enterprise choice on sorting of items by name or supplier in invoice 2022-03-21 20:29:19 +05:30
Nihal Mohammed
992cb9d920 Add invoice_order_by_supplier attribute to enterprise 2022-03-21 20:29:19 +05:30
Transifex-Openfoodnetwork
b9d3eef381 Updating translations for config/locales/en_GB.yml 2022-03-21 21:48:11 +11:00
jibees
532d566308 Merge pull request #9014 from openfoodfoundation/transifex
Transifex
2022-03-21 09:32:27 +01:00
Transifex-Openfoodnetwork
eae8129435 Updating translations for config/locales/en_FR.yml 2022-03-19 02:50:56 +11:00
Transifex-Openfoodnetwork
ed0ed3240e Updating translations for config/locales/fr.yml 2022-03-19 02:47:16 +11:00
Transifex-Openfoodnetwork
5d8cdc3246 Updating translations for config/locales/de_DE.yml 2022-03-19 01:36:44 +11:00
Transifex-Openfoodnetwork
27e31ae09d Updating translations for config/locales/de_DE.yml 2022-03-19 01:36:01 +11:00
Transifex-Openfoodnetwork
f4ce08d39c Updating translations for config/locales/de_DE.yml 2022-03-19 01:31:31 +11:00
Filipe
87c79a5941 Merge pull request #8294 from guidoDutra/8131-cancel-empty-orders-on-BOM-page
Cancel empty orders on BOM page
2022-03-18 11:24:26 +00:00
filipefurtad0
7bdf814d7d Uses change helper to remove before block;
Adds a & - Safe Navigation Operator - to the customer object
2022-03-17 19:31:40 +00:00
Filipe
19270f1777 Merge pull request #8987 from jibees/8981-BOM-correct-value-for-current-and-max-fullfilled
BOM: correct max and current fulfilled units values
2022-03-17 18:15:59 +00:00
Filipe
f079fcb49a Merge pull request #8992 from openfoodfoundation/dependabot/npm_and_yarn/flatpickr-4.6.11
Bump flatpickr from 4.6.9 to 4.6.11
2022-03-17 16:52:49 +00:00
Cillian O'Ruanaidh
1c80e88758 Fix order cycle advanced settings close button so it uses new remote toggle StimulusJs controller instead of old toggleSettings method
Closes #9012
2022-03-17 16:30:26 +00:00
Filipe
c535ed5789 Merge pull request #8936 from cillian/language-metatags
Include language metatags in html template when more than one language available
2022-03-17 16:16:07 +00:00
Filipe
53544ee66a Merge pull request #8805 from cillian/remove-inline-advanced-settings-toggle-js
Replace inline JS for toggling order cycle advanced settings with StimulusJs controller
2022-03-17 16:05:46 +00:00
Jean-Baptiste Bellet
621933c727 Improve spec by creating its opposite
ie. when distributor don't allow order changes
2022-03-17 16:47:16 +01:00
Jean-Baptiste Bellet
df6cd5b266 Add already ordered panel only on summary step 2022-03-17 16:47:16 +01:00
filipefurtad0
790bcc9ff2 Adds spec on open order information 2022-03-17 16:47:16 +01:00
Jean-Baptiste Bellet
6f6ad05ac2 Factorize some css rules for panel 2022-03-17 16:47:16 +01:00
Jean-Baptiste Bellet
ac361d3b64 Add already_opened on each step 2022-03-17 16:47:16 +01:00
Jean-Baptiste Bellet
13a45557a4 Load cart already opened boolean
thanks to EnterprisesHelper
2022-03-17 16:47:16 +01:00
Filipe
0dd398abba Merge pull request #8926 from mkllnk/8925-invalid-param
Gracefully handle admin UI failure on updating enterprise notifications
2022-03-17 14:19:34 +00:00
jibees
56912bb807 Merge pull request #9010 from openfoodfoundation/transifex
Transifex
2022-03-17 14:21:41 +01:00
Cillian O'Ruanaidh
7446dfb0b7 Don't allow subscriptions with no quantity to be saved
Before you could save a subscription even if the line item(s) it contained had 0 quantity.

For #8903
2022-03-17 11:54:24 +00:00
Transifex-Openfoodnetwork
37801f1345 Updating translations for config/locales/en_IE.yml 2022-03-17 22:14:51 +11:00
jibees
43b284a175 Merge pull request #9005 from openfoodfoundation/transifex
Transifex
2022-03-17 11:04:47 +01:00
Maikel
ab5a323044 Merge pull request #8980 from openfoodfoundation/dependabot/npm_and_yarn/karma-chrome-launcher-3.1.1
Bump karma-chrome-launcher from 3.1.0 to 3.1.1
2022-03-17 09:47:11 +11:00
Transifex-Openfoodnetwork
08755acfd1 Updating translations for config/locales/hu.yml 2022-03-17 04:39:12 +11:00
Jean-Baptiste Bellet
c9e40d084c Add spec around shipping methods filter for a guest + logged user 2022-03-16 11:14:02 +01:00
Jean-Baptiste Bellet
0948ce47ed Use EnterprisesHelper to retrieve shipping methods
that apply tag filtering on shipping methods
2022-03-16 11:10:46 +01:00
jibees
3a0f50395f Merge pull request #8989 from openfoodfoundation/transifex
Transifex
2022-03-16 10:41:55 +01:00
Maikel Linke
4606d81a28 Remove old config comments
SSL is enforced via `config.force_ssl = true` in the same files. We
don't need that comment any more.
2022-03-16 17:29:59 +11:00
filipefurtad0
4bdce59648 Clarifies context 2022-03-15 16:30:38 +00:00
filipefurtad0
ba5bdf688c Removes new address assignment; uses change helper 2022-03-15 16:14:44 +00:00
Nihal Mohammed
df7227443a Replace deprecated any_instace syntax with allow_any_instance_of in spec/system/consumer/registration_spec.rb 2022-03-15 05:35:43 +05:30
Nihal Mohammed
b3771bb623 Use bypass_sign_in method instead of bypass option in app/controllers/spree/users_controller.rb 2022-03-15 05:35:43 +05:30
Nihal Mohammed
8ceeaaa7d4 Fix deprecated Object warning in lib/spree/localized_number 2022-03-15 05:35:43 +05:30
Nihal Mohammed
ad52805a0d Change errors to be accessed by a block with single paramter instead of hash 2022-03-15 05:35:22 +05:30
filipefurtad0
f09f6df181 Adds coverage on shipping address 2022-03-14 13:49:32 +00:00
filipefurtad0
13b7d80632 Saves address for user 2022-03-14 13:14:11 +00:00
Nihal Mohammed
ccc3322c12 Change deprecated file path upload path syntax in enterprises_controller_spec 2022-03-14 18:42:58 +05:30
Nihal Mohammed
0f6b335a22 Change deprecated syntax File.exists? to File.exist? 2022-03-14 18:41:00 +05:30
filipefurtad0
6ba351f68f Updates spec to consider bug fix #8958 2022-03-14 12:51:20 +00:00
filipefurtad0
4877f96b4b Adds coverage on default billing address checkbox 2022-03-14 12:48:00 +00:00
filipefurtad0
ffe2a3076c Cleans up helper file and spec 2022-03-14 11:52:24 +00:00
Transifex-Openfoodnetwork
fb83ae2ad4 Updating translations for config/locales/en_GB.yml 2022-03-14 22:48:06 +11:00
dependabot[bot]
b9e0a5ecf7 Bump flatpickr from 4.6.9 to 4.6.11
Bumps [flatpickr](https://github.com/chmln/flatpickr) from 4.6.9 to 4.6.11.
- [Release notes](https://github.com/chmln/flatpickr/releases)
- [Commits](https://github.com/chmln/flatpickr/compare/v4.6.9...v4.6.11)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-14 09:05:55 +00:00
Jean-Baptiste Bellet
ea3e15f0c8 Max|Current fulfilled value is the max|current divided by group_buy_unit_size
+ improve testing with representative values
 + Update bulk_order_management_spec.rb and revert previously changed values
2022-03-14 09:06:05 +01:00
Jean-Baptiste Bellet
bcf6c7984e Display checkbox that "save as default address" 2022-03-14 09:05:45 +01:00
Jean-Baptiste Bellet
08d4aea2b9 "Send a cancellation email to the customer" checked by default 2022-03-14 09:05:17 +01:00
jibees
483ec42328 Merge pull request #8990 from jibees/8984-sc-test-failed
SplitCheckout: improve test that failed
2022-03-14 09:03:26 +01:00
Jean-Baptiste Bellet
65596f8467 Do not replace shipping_methods array but push into 2022-03-11 14:34:58 +01:00
Transifex-Openfoodnetwork
d273e97b88 Updating translations for config/locales/de_DE.yml 2022-03-12 00:29:23 +11:00
Transifex-Openfoodnetwork
b410585449 Updating translations for config/locales/en_FR.yml 2022-03-11 23:43:53 +11:00
Transifex-Openfoodnetwork
ac08602d94 Updating translations for config/locales/fr.yml 2022-03-11 23:43:14 +11:00
Jean-Baptiste Bellet
147d15332c Update all locales with the latest Transifex translations 2022-03-11 09:17:43 +01:00
jibees
31b60ca069 Merge pull request #8949 from openfoodfoundation/transifex
Transifex
2022-03-11 09:15:24 +01:00
jibees
1c5ada4d7c Merge pull request #8970 from seballot/docker-nodejs
Docker: upgrade nodeJs from 10 to 14
2022-03-11 09:03:25 +01:00
jibees
04ed7e4a94 Merge pull request #8972 from jibees/8965-retrieve-scale-of-a-product-in-the-BOM-interface
Improve the way we get the unit value (g, oz, lb, ...) in the Bulk Order Management interface
2022-03-11 09:01:02 +01:00
jibees
d4a4a36b14 Merge pull request #8766 from jibees/8477-cancel-order-and-send-confirmation-email-on-last-item-deletion
Edit order: on last item deletion, cancel the order and conditionally send cancellation email to consumer
2022-03-11 08:56:41 +01:00
Filipe
6474055380 Merge pull request #8964 from jibees/8963-display-shipping-options-checkboxes
SplitCheckout: Display shipping options checkboxes on invalid form submit
2022-03-10 16:41:10 +00:00
Filipe
3cf2db68b1 Merge pull request #8945 from jibees/8914-do-not-display-shipping-method-backoffice-only-for-split-checkout
SplitCheckout: display only shipping method that are set as front end available
2022-03-10 16:13:42 +00:00
Filipe
1522263cfc Merge pull request #8893 from jibees/8889-handle-redirect-to-next-step-for-the-split-checkout
SplitCheckout: handle navigation between steps
2022-03-10 16:07:58 +00:00
Filipe
3e4b39c26b Merge pull request #8966 from jibees/8958-improve-use-of-checkboxes-values-in-split-checkout
Splitcheckout: Don't save bill|ship address when associated checkbox is not checked during checkout process
2022-03-10 15:48:27 +00:00
Jean-Baptiste Bellet
e3a529be5d Display only shipping method that are set as front end available
and update the tests as well
2022-03-10 16:15:50 +01:00
Jean-Baptiste Bellet
60ad92c4ff Display ship address options checkboxes
+ Create the associated test: the trick is is that the selected delivery method is the one that required address **and** is before others that do not required ship address
2022-03-10 15:55:10 +01:00
Jean-Baptiste Bellet
20d5c45b7a Remove :debug tag 2022-03-10 15:53:19 +01:00
Filipe
6ce29f81d8 Merge pull request #8920 from apricot12/Remove_checkout_only_option_from_payment_methods_display
Remove checkout only option from payment methods edit form.
2022-03-10 14:38:45 +00:00
dependabot[bot]
0b1697c62b Bump karma-chrome-launcher from 3.1.0 to 3.1.1
Bumps [karma-chrome-launcher](https://github.com/karma-runner/karma-chrome-launcher) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/karma-runner/karma-chrome-launcher/releases)
- [Changelog](https://github.com/karma-runner/karma-chrome-launcher/blob/master/CHANGELOG.md)
- [Commits](https://github.com/karma-runner/karma-chrome-launcher/compare/v3.1.0...v3.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-10 09:05:18 +00:00
Maikel
e2f68dac54 Merge pull request #8977 from filipefurtad0/split_checkout_fees
Split-checkout transaction and shipping fees
2022-03-10 10:47:27 +11:00
Sebastian Castro
6f6a78b5a2 Docker: upgrade nodeJs from 10 to 14 2022-03-09 09:28:59 +00:00
filipefurtad0
16fcde7053 Fixes rubocop offenses 2022-03-08 23:13:24 +00:00
filipefurtad0
a6486c2701 Adds assertion on the order confirmation page 2022-03-08 23:12:05 +00:00
filipefurtad0
509a114d51 Adds coverage on transaction fees for split checkout 2022-03-08 23:10:48 +00:00
filipefurtad0
1fdd36e491 Adds coverage on shipping fees, on split checkout 2022-03-08 22:30:14 +00:00
Jean-Baptiste Bellet
0ccba7f144 As the product unit is 'g', we now display information in 'g' 2022-03-08 15:52:50 +01:00
Jean-Baptiste Bellet
915714246f Directly use the variant_unit_scale instead of VariantUnitManager.getScale
and update the tests as well
2022-03-08 14:59:08 +01:00
Jean-Baptiste Bellet
adcdca812d Delete that getScale method which is now useless
since we now rely on the serialized variant_unit_scale
2022-03-08 14:58:34 +01:00
Jean-Baptiste Bellet
aa71e12020 Serialize variant_unit_scale to be used in the Bulk Order Managment
to retrieve scale of the product
2022-03-08 14:55:25 +01:00
Jean-Baptiste Bellet
1fe7ebcec2 Check uncheck save_bill|ship_address don't save bill|ship_address 2022-03-07 17:42:06 +01:00
Jean-Baptiste Bellet
440e5aaf97 Default checked/unchecked values for checkbox is 0/1 2022-03-07 17:41:05 +01:00
Filipe
53d1994b2a Merge pull request #8956 from Matt-Yorkley/welsh-javascript-fixes
Fix Angular interpolation for translations with apostrophes
2022-03-07 12:23:04 +00:00
Nihal Mohammed
e2bdc69a90 Update available_payment_methods method in enterprises_helper and order model 2022-03-07 17:33:09 +05:30
Nihal Mohammed
e0e800a53f Remove translations for checkout only from edit form and index for payment methods 2022-03-07 17:33:09 +05:30
Nihal Mohammed
3820d4c591 Removed checkout only from DISPLAY options on payment method edit form and updated payment_method_spec 2022-03-07 17:33:09 +05:30
Nihal Mohammed
b0fd333126 Added migration to update display_on column in spree_payment_methods table where string is 'front_end' to NULL 2022-03-07 17:32:23 +05:30
Filipe
5606be7199 Merge pull request #8944 from jibees/8940-display-update-button-on-order-unless-order-is-complete
Split checkout: Display "Update" button on the order table page unless order is complete
2022-03-07 11:58:34 +00:00
Transifex-Openfoodnetwork
8982b34342 Updating translations for config/locales/en_GB.yml 2022-03-07 22:34:59 +11:00
Filipe
be2898f5a2 Merge pull request #8916 from jibees/8894-login-during-guest-checkout
SplitCheckout: as guest user, after login should redirect to the first step of checkout
2022-03-07 09:20:12 +00:00
Jean-Baptiste Bellet
7ca6434b14 Improve the test to delete a cloned order_cycle 2022-03-04 11:34:19 +01:00
Filipe
80ad18a684 Merge pull request #8953 from jibees/8951-load-stripejs-in-test-environment
Change css selector from stripe elements in test environment.
2022-03-04 09:57:28 +00:00
Matt-Yorkley
6729119489 Fix Angular interpolation for translations with apostrophes 2022-03-03 20:59:04 +00:00
Transifex-Openfoodnetwork
0b6288d97f Updating translations for config/locales/hu.yml 2022-03-04 01:27:19 +11:00
Jean-Baptiste Bellet
f8f57a31db Use the right selector
In test env. we don't use the stripejs but a mock. Slightly different.
2022-03-03 14:14:39 +01:00
Jean-Baptiste Bellet
5fc7d72b09 Check destroying order_cycle will delete associated coordinator fees 2022-03-03 09:06:38 +01:00
Transifex-Openfoodnetwork
9724b07062 Updating translations for config/locales/de_DE.yml 2022-03-03 03:48:11 +11:00
Filipe
0a9c3b1538 Merge pull request #8932 from filipefurtad0/change_paypal_spec
Clarifies context in checkout_paypal_spec and implements tests as shared examples
2022-03-02 12:21:13 +00: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
Transifex-Openfoodnetwork
87723217ec Updating translations for config/locales/ru.yml 2022-03-02 20:04:35 +11:00
Maikel Linke
12d989568e Safer API error reporting
We don't know what unknown errors would report. They could expose
sensitive data. So let's not pass that data on to the public while we
have the full details in Bugsnag.

Also, let's not catch Exception because that could catch interrupts to
gracefully shut down the application.
2022-03-02 11:59:35 +11:00
Maikel Linke
4aa70c1ffd Render pagination errors 2022-03-02 11:59:35 +11:00
Maikel Linke
b89715149c Sanitise pagination input for new API 2022-03-02 11:59:35 +11:00
Maikel Linke
75fc35574e Make json_response test helper deal with error response
It raised an error:

     NoMethodError:
       undefined method `map' for nil:NilClass
2022-03-02 11:59:35 +11:00
Maikel Linke
414bf5d074 Don't list guest customer records to guest users 2022-03-02 11:59:35 +11:00
Matt-Yorkley
bd9bed7323 Update schemas for relationships 2022-03-02 11:59:35 +11:00
Matt-Yorkley
2e59812bc1 Refactor to make more use of schema refs, and regenerate swagger file 2022-03-02 11:59:33 +11:00
Matt-Yorkley
d87e1805af Add relationships to resource serializers 2022-03-02 11:58:04 +11:00
Matt-Yorkley
d66d6d6bd6 Update use of links on relationships 2022-03-02 11:58:04 +11:00
Matt-Yorkley
3dbf00f302 Add pagination with Pagy using structure from JSON:API specification
https://jsonapi.org/examples/#pagination

Update schema for collections rendered with pagination data
2022-03-02 11:58:04 +11:00
Matt-Yorkley
c102ce8e7e Add RequestTimeout concern 2022-03-02 11:58:04 +11:00
Matt-Yorkley
8e61428cce Add 401 Unauthorized response test 2022-03-02 11:58:04 +11:00
Matt-Yorkley
a222b507fb Update and document authentication methods 2022-03-02 11:58:04 +11:00
Matt-Yorkley
56bc554f29 Regenerate swagger docs with rails rswag 2022-03-02 11:57:57 +11:00
Matt-Yorkley
028d02ccca Test serialized relationship data 2022-03-02 11:55:46 +11:00
Matt-Yorkley
46f9d3ef81 Test permissions combined with Ransack searches 2022-03-02 11:55:46 +11:00
Matt-Yorkley
76f14a03c6 Add specs and JSON schemas
Include test helpers
2022-03-02 11:55:46 +11:00
Matt-Yorkley
39f4feed4a Generate docs with rails rswag 2022-03-02 11:55:46 +11:00
Matt-Yorkley
cc4192047e Fill out customers controller
Add customer serializer
2022-03-02 11:55:46 +11:00
Matt-Yorkley
3128232d7e Create customers controller
And add new customers routes.

Disable them in production for now.
2022-03-02 11:55:46 +11:00
Matt-Yorkley
c4e2c8cb4c Tidy up error handling and update response formats for JSON:API standard
Update translation key namespacing
2022-03-02 11:55:46 +11:00
Matt-Yorkley
7d8ded5ab8 Bring simplified / cleaned up base controller into V1
- Inherits from ActionController::API
- Lots of superfluous junk removed
2022-03-02 11:55:46 +11:00
Maikel
9a8082e35c Merge pull request #8947 from openfoodfoundation/dependabot/npm_and_yarn/karma-6.3.17
Bump karma from 6.3.16 to 6.3.17
2022-03-02 11:27:28 +11:00
Transifex-Openfoodnetwork
bd031f4870 Updating translations for config/locales/en_FR.yml 2022-03-02 06:50:01 +11:00
Transifex-Openfoodnetwork
078309d4e7 Updating translations for config/locales/fr.yml 2022-03-02 06:12:32 +11:00
Jean-Baptiste Bellet
f47de45346 Reference splitcheckout as a checkout redirect
This stored in session value is used to redirect after login

Update tests as well, thanks @filipefurtad0 ! 🙏
2022-03-01 15:12:18 +01:00
Jean-Baptiste Bellet
e14dad1575 Update test on payment step 2022-03-01 14:51:24 +01:00
Jean-Baptiste Bellet
3e85762143 Create a test that test the redirection after the split checkout login
Should be redirected on the first step
2022-03-01 14:25:41 +01:00
Jean-Baptiste Bellet
96d4ee3f4f Extract to a method in the split checkout helper 2022-03-01 14:25:08 +01:00
Jean-Baptiste Bellet
2976b0717c Display "Update" button on the order table page unless order is complete
With the split checkout, we can access this page between the different steps: for this cases, cart actions should be displayed
2022-03-01 10:11:27 +01:00
dependabot[bot]
f573423d3a Bump karma from 6.3.16 to 6.3.17
Bumps [karma](https://github.com/karma-runner/karma) from 6.3.16 to 6.3.17.
- [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.16...v6.3.17)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-01 09:05:25 +00:00
Filipe
d052c4f8a4 Merge pull request #8869 from filipefurtad0/remove_signup_string
Removes signup string from private shop login screen
2022-03-01 08:20:06 +00:00
Maikel
c44de8dbb3 Merge pull request #8937 from openfoodfoundation/dependabot/npm_and_yarn/url-parse-1.5.10
Bump url-parse from 1.5.7 to 1.5.10
2022-03-01 11:26:43 +11:00
Maikel Linke
e266475cde Mark style violation as tech debt
There's an issue for it already and we want devs to be able to run
rubocop without seeing any issues they didn't introduce.
2022-03-01 11:21:31 +11:00
Filipe
1338bcbf57 Merge pull request #8939 from filipefurtad0/stock_spec_checkout_split
Checks stock restrictions on checkout split (system spec)
2022-02-28 16:42:58 +00:00
Filipe
d84b6ce2ad Merge pull request #8772 from filipefurtad0/add_specs_split_checkout_payment
[Split Checkout] Adds tests on payments
2022-02-28 16:42:12 +00:00
Jean-Baptiste Bellet
e47198f1e5 Handle both types of redirection
One is based on the order step itself, the other is based on the current step passed through the params
2022-02-28 15:23:37 +01:00
jibees
eeae67e2d0 Merge pull request #8935 from mkllnk/clean-rubocop
Relax our style guide
2022-02-28 15:16:46 +01:00
Filipe
499ad982c3 Merge pull request #8938 from filipefurtad0/controller_spec_checkout_split
Adds controller coverage for stock restrictions on split checkout
2022-02-28 10:32:46 +00:00
filipefurtad0
f6304892c2 Adds controller coverage for stock restrictions 2022-02-27 22:01:48 +00:00
filipefurtad0
7a6f3d67e2 Implements shared example; Checks stock restriction on payment step 2022-02-27 21:51:03 +00:00
filipefurtad0
eb56027505 Moves out-of-stock block within correct context 2022-02-27 19:56:45 +00:00
dependabot[bot]
f0cd9de1c3 Bump url-parse from 1.5.7 to 1.5.10
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.7 to 1.5.10.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.7...1.5.10)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-26 14:40:40 +00:00
Matt-Yorkley
50ab0731d7 Bump nokogiri to 1.13.2 2022-02-26 14:39:56 +00:00
filipefurtad0
8ac2035d0c Addresses style issue 2022-02-25 16:47:17 +00:00
filipefurtad0
751e817deb Renames shared_examples 2022-02-25 16:32:31 +00:00
filipefurtad0
82b6d39191 Re-names payment; addresses style issues 2022-02-25 16:06:26 +00:00
filipefurtad0
daffe333c5 Adds coverage on order completition for Cash/Paypal 2022-02-25 16:06:26 +00:00
filipefurtad0
c4bf36d402 Adds Stripe SCA to shared examples block 2022-02-25 16:06:26 +00:00
filipefurtad0
d336ab52a1 Adds Paypal to shared examples block 2022-02-25 16:06:26 +00:00
filipefurtad0
ae3eb90668 Adds shared examples block, with cash 2022-02-25 16:06:26 +00:00
filipefurtad0
09cd9b8462 Adds a test on payment method requirement 2022-02-25 16:06:26 +00:00
filipefurtad0
9449c7c919 Adds a context for existing test case 2022-02-25 16:06:26 +00:00
filipefurtad0
9dceda7e20 Creates a details test block; moves respective tests inside 2022-02-25 16:06:26 +00:00
Cillian O'Ruanaidh
21affa6250 Include language metatags in html template when more than one language available
Fixes #8902

This is to help Google find pages in all languages, see https://developers.google.com/search/docs/advanced/crawling/localized-versions
2022-02-25 12:49:49 +00:00
Maikel Linke
e6b4f462ef Revert "Add rubocop config to allow specs to be 300 lines long"
This reverts commit 0b51d8b297.

I think that this config was complicated in the setup and potentially
confusing to have different rules in different places.

It's better to fix those spec files by either making them smaller or
removing the `module` block in the spec. We can reference the modules
explicitely where needed.
2022-02-25 12:05:04 +11:00
Maikel Linke
cee6a0f17f Declare blocklength rules as agreed upon
The acceptance of this pull request will be the "agree" part. :-)
2022-02-25 11:57:43 +11:00
Maikel Linke
7acae6522b Relax cyclomatic complexity to community default
Why should we be more strict than the rest of the world?
2022-02-25 11:56:33 +11:00
Maikel Linke
2d1e746c64 Remove default values from contested settings
We can just use what the Rubocop community uses as default and we don't
need to spell it out again.
2022-02-25 11:51:35 +11:00
Maikel Linke
3382c1d0bb Relax some contested metrics rules
Rubocop often complains while we think that the code is totally fine. I
would like to achieve the default values one day but there are more
important issues at the moment.
2022-02-25 11:45:15 +11:00
Maikel Linke
0c89479de4 Update rubocop todo list 2022-02-25 11:05:36 +11:00
Maikel Linke
b999673dfc Remove old version of relaxed styled guide
We had an old version under "contested settings" and it looks like some
of them were modified. I hope that our new, separate file will
discourage manual tweaks.

We can include the relaxed rules from a gem as well. Let's see if we
need that complexity one day.
2022-02-25 10:51:54 +11:00
Maikel Linke
1d15f35522 Remove now unnecessary inline rubocop config 2022-02-25 10:46:51 +11:00
Maikel Linke
decab911bd Use relaxed Rubocop styleguide as basis
We then refine it with our own rules.
2022-02-25 10:44:32 +11:00
Matt-Yorkley
0b616aa9ce Update all locales with the latest Transifex translations 2022-02-24 23:34:16 +00:00
filipefurtad0
10217e2ec8 Sets guest and logged-in user as shared examples 2022-02-24 17:20:11 +00:00
filipefurtad0
9bf0667d04 Moves failed response stub into registered user context 2022-02-24 16:27:03 +00:00
Filipe
36e3f1b7a6 Merge pull request #8883 from jibees/8475-send-email-when-payment-needs-authorization
Backoffice order, using stripe payment: when card requires auth, send authorization email to guest user
2022-02-24 13:07:31 +00:00
Maikel Linke
8ffe6f6052 Sanitise user_id param on enterprise update 2022-02-24 14:51:23 +11:00
Maikel Linke
8e070f55ff Spec fail on bad enterprise param
It looks like some JS component can submit an invalid value here and it
causes a server error.
2022-02-24 14:46:42 +11:00
Matt-Yorkley
d945e69404 Merge pull request #8918 from openfoodfoundation/dependabot/npm_and_yarn/url-parse-1.5.7
Bump url-parse from 1.5.3 to 1.5.7
2022-02-22 08:17:02 +00:00
Filipe
385cd49964 Merge pull request #8876 from SarvarKh/product-import-validation
Fix product import on existing, empty unit_type and variant_unit
2022-02-21 23:20:04 +00:00
Filipe
28ac9d980c Merge pull request #8849 from jibees/render-pdf-with-stylesheet
Create a new method pdf_stylesheet_pack_tag that actually include CSS in PDF files
2022-02-21 23:09:21 +00:00
Filipe
dbf5eb76f8 Merge pull request #8689 from apricot12/Transaction_fee_when_crediting
Revoke transaction fee if there is an amount to be credited in order
2022-02-21 20:30:19 +00:00
Filipe
89dc9b938b Merge pull request #8864 from jibees/7934-display-tax-rate-for-shipping-on-invoice
Display tax rate for shipping in alternative invoice model
2022-02-21 20:02:44 +00:00
Filipe
7590b3ecf8 Merge pull request #8756 from jibees/8075-take-into-account-the-inherits_properties-attribute
Product that don't inherits from "producer"/"enterprise" properties should be filtered out by user on shop page
2022-02-21 19:04:08 +00:00
Filipe
9966b5b33c Merge pull request #8565 from jibees/8171-group-by-imperial-unit
Handle imperial units in the Bulk Order Management interface
2022-02-21 14:47:38 +00:00
dependabot[bot]
07d20d2ba0 Bump url-parse from 1.5.3 to 1.5.7
Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.3 to 1.5.7.
- [Release notes](https://github.com/unshiftio/url-parse/releases)
- [Commits](https://github.com/unshiftio/url-parse/compare/1.5.3...1.5.7)

---
updated-dependencies:
- dependency-name: url-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-19 09:25:58 +00:00
filipefurtad0
cefd5db6eb Renames require_login_3_html key 2022-02-18 11:07:37 +00:00
Matt-Yorkley
3effff8821 Show resent confirmation message in current tab 2022-02-18 09:42:49 +00:00
filipefurtad0
1113aefe11 Adds login modal test case from #8861 2022-02-17 13:19:32 +00:00
filipefurtad0
27bc5805ae Removes signup string from private shop login screen 2022-02-17 13:19:31 +00:00
Matt-Yorkley
6c695df917 Merge pull request #8895 from Matt-Yorkley/cloned-subscription-syncing
Sync subscriptions on newly-cloned order cycles
2022-02-17 12:44:39 +00:00
Matt-Yorkley
9a27addd14 Merge pull request #8763 from openfoodfoundation/8577-split-name-column-in-customers-table
Split name column in customers table
2022-02-17 11:57:01 +00:00
Filipe
a6c5d8ca73 Merge pull request #8673 from filipefurtad0/split_checkout_auth_spec
Adds split-checkout toggling lines
2022-02-17 11:10:44 +00:00
Filipe
4dbf047647 Merge pull request #8871 from jibees/8827-preselect-shipping-method
SplitCheckout: preselect the shipping/payment method if the only one available
2022-02-17 10:54:20 +00:00
Jean-Baptiste Bellet
bcd306ebd4 Authorize payment email could be send to guest user
Always send the email to the order.email value
2022-02-17 09:40:28 +01:00
Jean-Baptiste Bellet
012e91879a preselect the only available shipping method 2022-02-17 09:33:23 +01:00
Jean-Baptiste Bellet
716286497e Add test to cover "preselect the shipping method" if only one is available
+ do not preselect if more than one are available
2022-02-17 09:33:23 +01:00
Jean-Baptiste Bellet
7be2f418d0 preselect the only available payment method 2022-02-17 09:33:23 +01:00
Jean-Baptiste Bellet
0e053a2601 Add test to cover "preselect the payment method" if only one is available
+ do not preselect if more than one
2022-02-17 09:33:23 +01:00
Matt-Yorkley
00fa84e3b5 Sync when switching from nil dates to open 2022-02-16 21:45:43 +00:00
Matt-Yorkley
5913720c85 Sync for both open and upcoming OCs when switching from closed 2022-02-16 18:33:09 +00:00
Matt-Yorkley
4592827261 Sync OC subscriptions if transitioning from closed to open 2022-02-16 13:03:27 +00:00
Matt-Yorkley
4260422ea7 Remove a couple of unnecessary memory assignments 2022-02-16 12:55:19 +00:00
Matt-Yorkley
d4488fdb3f Return early if OC is closed 2022-02-16 12:53:22 +00:00
Matt-Yorkley
8c8b9d1b23 Sync subscriptions on newly-cloned order cycles 2022-02-16 10:44:22 +00:00
SarvarKhalimov
22de758e3a Add spec for product import validation 2022-02-16 14:17:35 +05:00
Maikel Linke
33969de371 Allow shared_examples to have more than 25 lines 2022-02-16 11:41:28 +11:00
Maikel Linke
a6dee77071 Style 2022-02-16 10:33:49 +11:00
filipefurtad0
78946f908a Adds shared examples; sets conditional filters on test cases 2022-02-15 23:23:31 +00:00
Matt-Yorkley
4c50ca69ea Improve data migration logic and add test coverage 2022-02-16 10:23:24 +11:00
Matt-Yorkley
fd815a6af6 Don't change Customer factory name generating logic 2022-02-16 10:23:24 +11:00
Matt-Yorkley
feaa92406a Split migration into two parts for easier testing 2022-02-16 10:23:24 +11:00
Maikel Linke
68193efcf6 Keep old customers.name column for compatibilty
Our app code will try to access the old attribute while the migration is
running. That would lead to errors during checkout.
2022-02-16 10:23:24 +11:00
François Turbelin
9a12957e27 Handle the empty-space name on customers 2022-02-16 10:23:23 +11:00
François Turbelin
de4d074cb3 Remove bill_address fetching logic 2022-02-16 10:23:23 +11:00
Maikel Linke
d09ba16411 Associate customers again
And simplify the before_validation actions.
2022-02-16 10:23:23 +11:00
Maikel Linke
07314af3f6 Spec customer record association more realistically
The newly added specs were tested on the master branch and passed. But
the previous commit broke one test case which I marked as pending here.

The removed specs are completely replaced by the new ones. Their main
downside was to test only small bits of internal behaviour without
considering the whole callback chain of the order. The new specs are
more realistic and catch bugs like mentioned above.
2022-02-16 10:23:23 +11:00
François Turbelin
554a8625e5 Refactor ensure_customer method 2022-02-16 10:23:23 +11:00
François Turbelin
5c9dd81595 Deal with nil attirubtes on bill_address 2022-02-16 10:23:23 +11:00
François Turbelin
6d986deb2d Remove translation changes from locale file 2022-02-16 10:23:23 +11:00
François Turbelin
4cb31d04a7 Repair specs with default values on ensure_customer method 2022-02-16 10:23:23 +11:00
François Turbelin
50302163c0 Update migration with better logic and cosmetics 2022-02-16 10:23:23 +11:00
François Turbelin
9682b9256b Arrange classes loading for good migration 2022-02-16 10:23:23 +11:00
François Turbelin
d016c47789 Refactor data migration to use data sets 2022-02-16 10:23:23 +11:00
François Turbelin
b8afb7ec4d Add default values for new fields 2022-02-16 10:23:23 +11:00
François Turbelin
836a60a6c7 Add missing full_name bind to subscriptions serializer 2022-02-16 10:23:23 +11:00
François Turbelin
23776c7a3e Fix more specs 2022-02-16 10:23:23 +11:00
François Turbelin
75345a95af Update customer factory 2022-02-16 10:23:22 +11:00
François Turbelin
eefd9891d6 Add en translations 2022-02-16 10:23:22 +11:00
François Turbelin
7c25127ab6 Improve first_name and last_name setup 2022-02-16 10:23:22 +11:00
Adrien Chauve
ca46359224 More fixes 2022-02-16 10:23:22 +11:00
Adrien Chauve
9b93102a96 More fixes 2022-02-16 10:23:22 +11:00
Adrien Chauve
ba6523bb76 Add Customer.full_name 2022-02-16 10:23:22 +11:00
Adrien Chauve
5ca4d549e7 Update customer creation 2022-02-16 10:23:22 +11:00
Adrien Chauve
d0f347efaa Add migration to split Customers.name into first and last names 2022-02-16 10:23:22 +11:00
Jean-Baptiste Bellet
405b7e6e17 Handle tax rates for ShippingMethod
Co-Authored-By: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com>
2022-02-15 15:16:58 +01:00
Matt-Yorkley
711a51f2ff Remove .eligible scope
In this case we actually expect there to be no payment fee adjustments at all on the payment, regardless of their eligibility.
2022-02-15 12:24:28 +00:00
Matt-Yorkley
5fba7811c4 Remove #try
#try is useful when the object might be nil or might not respond to the given method. In this case we expect it to exist and respond to #finalized?, so this is a bit more precise.
2022-02-15 12:21:34 +00:00
Matt-Yorkley
5be1b139b9 Replace .stub with expect(x).to receive(:y)
The #stub method is slightly deprecated syntax. Using #expect has the additional benefit here of failing if the object does not receive the expected method call.
2022-02-15 12:19:15 +00:00
Matt-Yorkley
8084ad0068 Extract a comment-method so the code conveys it's purpose 2022-02-15 12:17:08 +00:00
Nihal M. Kelanthodika
b017420319 Add specs to check ensure payment method fee is not applied when crediting/refunding order 2022-02-15 11:52:26 +00:00
Nihal M. Kelanthodika
9215ccc353 Prevents creation of payment adnustment when refunding or crediting an order 2022-02-15 11:52:26 +00:00
Matt-Yorkley
7c7a09a75c Merge pull request #8880 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-controls-6.4.19
Bump @storybook/addon-controls from 6.4.18 to 6.4.19
2022-02-15 11:33:04 +00:00
Matt-Yorkley
0d2374f07e Merge pull request #8881 from openfoodfoundation/dependabot/npm_and_yarn/storybook/server-6.4.19
Bump @storybook/server from 6.4.18 to 6.4.19
2022-02-15 11:32:47 +00:00
dependabot[bot]
1b7d72ffa7 Bump @storybook/server from 6.4.18 to 6.4.19
Bumps [@storybook/server](https://github.com/storybookjs/storybook/tree/HEAD/app/server) from 6.4.18 to 6.4.19.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.4.19/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.4.19/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-02-15 11:32:14 +00:00
dependabot[bot]
2952b0582a Bump @storybook/addon-controls from 6.4.18 to 6.4.19
Bumps [@storybook/addon-controls](https://github.com/storybookjs/storybook/tree/HEAD/addons/controls) from 6.4.18 to 6.4.19.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.4.19/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.4.19/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-02-15 11:31:49 +00:00
Matt-Yorkley
4726e7a8a4 Merge pull request #8879 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-docs-6.4.19
Bump @storybook/addon-docs from 6.4.18 to 6.4.19
2022-02-15 11:31:00 +00:00
Matt-Yorkley
46c0baee4f Merge pull request #8885 from jibees/8882-handle-webpacker-error-for-email
Modify assets builder to get CSS inside emails when running in development mode
2022-02-15 11:23:42 +00:00
Matt-Yorkley
e72cc516a8 Drop spree prefix in path generation 2022-02-15 09:47:06 +00:00
Matt-Yorkley
4fbaa65534 Handle unconfirmed email message in UserSessionsController 2022-02-15 09:47:06 +00:00
Maikel Linke
1d5ebe42a9 Update translations 2022-02-15 10:50:01 +11:00
Filipe
e9e5ad2221 Merge pull request #8865 from jibees/8769-use-the-user-in-the-request-to-check-flipper-constraint
Use the user in the request to check flipper constraint for split checkout urls
2022-02-14 19:38:27 +00:00
SarvarKhalimov
d69f42e940 Update app/models/product_import/entry_validator.rb
Co-authored-by: Maikel <maikel@email.org.au>
2022-02-15 00:10:32 +05:00
Filipe
2de2703e1f Merge pull request #8868 from jibees/8852-improve-total-cell-design-on-order-summary-table
SplitCheckout : Improve design of the order summary table
2022-02-14 18:48:20 +00:00
Filipe
a9d7fa473e Merge pull request #8870 from jibees/8853-handle-back-button-on-summary-page-for-the-split-checkout
Split checkout: handle the link for "Back to Payment method" button in the summary page
2022-02-14 18:29:11 +00:00
Filipe
ddfda4011d Merge pull request #8873 from Matt-Yorkley/stripe-retries
Update checkout retry logic
2022-02-14 15:28:56 +00:00
Matt-Yorkley
e4030e673d Merge pull request #8875 from openfoodfoundation/dependabot/npm_and_yarn/follow-redirects-1.14.8
Bump follow-redirects from 1.14.7 to 1.14.8
2022-02-14 14:03:59 +00:00
Jean-Baptiste Bellet
74ed878a0c Specify the asset host for the action mailer to get the assets
when running in development with webpacker running as well.
2022-02-14 14:54:09 +01:00
Matt-Yorkley
0c2a267bea Patch keyword arguments syntax in Paperclip error handling 2022-02-14 11:58:22 +00:00
Filipe
6acd8a29f2 Merge pull request #8874 from Matt-Yorkley/puma-update
Update puma to latest version
2022-02-14 09:11:51 +00:00
dependabot[bot]
699e9acfa5 Bump @storybook/addon-docs from 6.4.18 to 6.4.19
Bumps [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/addons/docs) from 6.4.18 to 6.4.19.
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/v6.4.19/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v6.4.19/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-02-14 09:03:42 +00:00
Matt-Yorkley
ad44bd854b Merge pull request #8878 from mkllnk/rubocop-action
Use our defined rubocop version on CI
2022-02-14 08:58:52 +00:00
Matt-Yorkley
3418e5282a Use our defined rubocop version on CI
The default is to use the latest version. That's often fine because we
keep our version up-to-date but it may not always be. It's also great if
builds are re-producible.
2022-02-14 15:56:18 +11:00
Maikel
7601bdfd45 Merge pull request #8867 from openfoodfoundation/transifex
Transifex
2022-02-14 11:20:00 +11:00
SarvarKhalimov
42a0a973ba Fix product import on existing, empty unit_type and variant_unit 2022-02-13 18:28:21 +05:00
dependabot[bot]
0338753421 Bump follow-redirects from 1.14.7 to 1.14.8
Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.7 to 1.14.8.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.7...v1.14.8)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-13 12:23:25 +00:00
Matt-Yorkley
996bc05b4f Merge pull request #8866 from openfoodfoundation/dependabot/npm_and_yarn/karma-6.3.16
Bump karma from 6.3.15 to 6.3.16
2022-02-13 12:22:34 +00:00
Matt-Yorkley
15fc50441f Update puma to latest version 2022-02-13 10:54:45 +00:00
Matt-Yorkley
e5818955ff Invalidate all incomplete payments when creating a new one, not just those in "checkout" state.
Looking at prod data; when a checkout submission fails due to something like a card being out of date, the payment's state seems to be "pending" and not "checkout", which means this mechanism fro invalidating old payments is potentially not working where it should.
2022-02-11 17:25:27 +00:00
Jean-Baptiste Bellet
43cd604405 Update to the right link the "Back to Payment method" button
+ create a spec as well
2022-02-11 15:01:53 +01:00
Cillian O'Ruanaidh
1b8c1bd27a Only initialise Stimulus app once in Jest tests in :beforeAll rather than :beforeEach
Before there was an issue with the remote_toggle_controller tests, which contains two tests. If you commented out one test and ran the other it would pass and vice versa but if both tests were uncommented only the first test would ever pass, the second one would fail. See https://github.com/openfoodfoundation/openfoodnetwork/pull/8805#discussion_r801464322

Co-authored-by: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com>
2022-02-11 10:21:26 +00:00
Jean-Baptiste Bellet
f60068c0ce Use the proxy OpenFoodNetwork::FeatureToggle
that actually call Flipper.enabled?
2022-02-11 11:19:00 +01:00
Jean-Baptiste Bellet
e50247db5a Directly used the user in the request
not the memoized one @spree_current_user
2022-02-11 11:19:00 +01:00
Jean-Baptiste Bellet
d858d6f941 Improve design by aligning cell on right but with padding 2022-02-11 11:09:54 +01:00
Transifex-Openfoodnetwork
5519b8b455 Updating translations for config/locales/cy.yml 2022-02-11 21:02:57 +11:00
dependabot[bot]
dd4f45a504 Bump karma from 6.3.15 to 6.3.16
Bumps [karma](https://github.com/karma-runner/karma) from 6.3.15 to 6.3.16.
- [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.15...v6.3.16)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 09:44:14 +00:00
Filipe
6e2c4a385a Merge pull request #8810 from Matt-Yorkley/split-checkout-tax
Reduce expensive tax recalculation calls
2022-02-10 17:42:39 +00:00
Filipe
d8936b412e Merge pull request #8819 from apricot12/8694-Improve_subsvriptions_index_perfomance
8694 improve subscriptions index perfomance by eager loading tags, suppliers and exchanges.
2022-02-10 17:37:00 +00:00
Filipe
820417e6cc Merge pull request #8828 from apricot12/8794-Keep_schedule_when_cloning_OC
Carry over linked schedule to cloned Order Cycle
2022-02-10 17:09:56 +00:00
Filipe
0802b04feb Merge pull request #8857 from jibees/8855-login-signup-on-private-shop
Open modal on login/signup links for a "Visible to Registered Customers Only" shop page
2022-02-10 13:47:02 +00:00
Jean-Baptiste Bellet
af8500e98c Add the test around the cancellation email sending or not 2022-02-10 14:39:00 +01:00
Jean-Baptiste Bellet
a99ecc473d Add tests around item deletion for an order 2022-02-10 14:39:00 +01:00
Jean-Baptiste Bellet
c9b19811ad Add missing i18n key 2022-02-10 14:39:00 +01:00
Jean-Baptiste Bellet
50f547af98 Add an attribute that conditions the sending of the cancellation email
true by default to not change the default behavior.
Can be set to false when sending params send_cancellation_email
2022-02-10 14:39:00 +01:00
Jean-Baptiste Bellet
8624fa2a85 On last item deletion, prevent user on order canceling and cancellation email
... with a modal.
User can cancel the modal or confirm the last item deletion & order cancelation with or without sending a cancellation email to the consumer.
2022-02-10 14:39:00 +01:00
Jean-Baptiste Bellet
17906f378a Create a method that actually adjust Items
Separate it from the adjustItems method that previously test about the item quantity
2022-02-10 14:34:39 +01:00
Jean-Baptiste Bellet
92cd918e5a Add LoginModal as controller + connect action to open login modal 2022-02-10 09:52:13 +01:00
Maikel Linke
9c786ff39e Update translations 2022-02-10 10:08:28 +11:00
Maikel
570f9f2dc0 Merge pull request #8837 from openfoodfoundation/transifex
Transifex
2022-02-10 10:04:20 +11:00
Maikel
fb920c8960 Merge pull request #8845 from mkllnk/swagger-cleanup
Add rspec tools for better integration of the coming API v1
2022-02-10 10:04:03 +11:00
Maikel
026d4dd087 Merge pull request #8848 from openfoodfoundation/dependabot/npm_and_yarn/jest-27.5.1
Bump jest from 27.5.0 to 27.5.1
2022-02-10 09:50:32 +11:00
Maikel
463473f2c3 Merge pull request #8840 from openfoodfoundation/dependabot/npm_and_yarn/karma-6.3.15
Bump karma from 6.3.13 to 6.3.15
2022-02-10 09:48:56 +11:00
Filipe
30c1d89525 Merge pull request #8822 from Matt-Yorkley/split-checkout-payment-total
[Split Checkout] Move setting of payment total during checkout into OrderUpdater
2022-02-09 16:21:47 +00:00
Transifex-Openfoodnetwork
61a4a72b97 Updating translations for config/locales/ru.yml 2022-02-09 23:30:55 +11:00
Jean-Baptiste Bellet
a951fd2c06 Create a new method pdf_stylesheet_pack_tag that actually include CSS file
If running in developpement (ie. `Webpacker.dev_server.running?`), use webpacker to actually render/serve the CSS files.

Source: https://stackoverflow.com/a/60541688
2022-02-09 11:21:50 +01:00
dependabot[bot]
4db72f7475 Bump jest from 27.5.0 to 27.5.1
Bumps [jest](https://github.com/facebook/jest) from 27.5.0 to 27.5.1.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v27.5.0...v27.5.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-09 09:04:31 +00:00
dependabot[bot]
0ebe46a17f Bump karma from 6.3.13 to 6.3.15
Bumps [karma](https://github.com/karma-runner/karma) from 6.3.13 to 6.3.15.
- [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.13...v6.3.15)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-09 08:38:21 +00:00
Matt-Yorkley
f065b4c787 Merge pull request #8847 from jibees/yarn-resolve-lock-file
Update js dependencies lock file
2022-02-08 12:30:36 +00:00
Matt-Yorkley
8dc743f2d4 Extract update_payment_total method 2022-02-08 12:27:42 +00:00
Matt-Yorkley
1c180299a5 Pass indexed payment method tags to PaymentMethod Serializer 2022-02-08 11:42:24 +00:00
Matt-Yorkley
37b5e1b014 Allow Payment Method Serializers to receive options 2022-02-08 11:42:24 +00:00
Nihal M. Kelanthodika
3152fef2ef Eager load distributors and cached_incoming_exchanges 2022-02-08 11:42:24 +00:00
Nihal M. Kelanthodika
f0d6cd1f59 Query payment_method_tags by id 2022-02-08 11:42:24 +00:00
Nihal M. Kelanthodika
ee77210e81 Eager load taggings in SubscriptionsController#Index 2022-02-08 11:42:24 +00:00
Matt-Yorkley
d1339fa253 Merge pull request #8833 from openfoodfoundation/dependabot/npm_and_yarn/webpack-dev-server-3.11.3
Bump webpack-dev-server from 3.11.2 to 3.11.3
2022-02-08 10:34:03 +00:00
Matt-Yorkley
eaeda23e4f Merge pull request #8838 from SarvarKh/updated-getting-started
Update GETTING_STARTED.md to include creation of a new user
2022-02-08 10:32:58 +00:00
Matt-Yorkley
65ed199ba9 Merge pull request #8842 from openfoodfoundation/dependabot/npm_and_yarn/jest-27.5.0
Bump jest from 27.4.7 to 27.5.0
2022-02-08 10:31:16 +00:00
Jean-Baptiste Bellet
e6f7c961e1 Update yarn.lock 2022-02-08 10:26:22 +01:00
Maikel Linke
8f5cb7bd91 Update swagger files, separate v0 and v1, delete old file
The new v1 doesn't contain any API endpoints yet. We will add them later
when they are ready.
2022-02-08 11:44:36 +11:00
Matt-Yorkley
9d67606490 Generate rswag routes and helper 2022-02-08 11:43:49 +11:00
Matt-Yorkley
ae2726fc6b Generate rswag initializers
Done via rswag rake tasks and tidied up a bit.
2022-02-08 11:43:49 +11:00
Matt-Yorkley
3a6fc59f80 Add rswag support gems 2022-02-08 11:43:49 +11:00
Maikel
1ba56851bb Merge pull request #8839 from mkllnk/style
Update Rubocop todo list
2022-02-08 09:13:54 +11:00
SarvarKhalimov
97bdceb78a Update GETTING_STARTED.md to include creation of a new user 2022-02-08 00:11:11 +05:00
dependabot[bot]
c0c7663452 Bump jest from 27.4.7 to 27.5.0
Bumps [jest](https://github.com/facebook/jest) from 27.4.7 to 27.5.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v27.4.7...v27.5.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-07 09:04:54 +00:00
Jean-Baptiste Bellet
4a3e0ea9b9 Use the right scope to retrieve products based on properties 2022-02-07 08:57:18 +01:00
Jean-Baptiste Bellet
dfe8ed26d9 Update tests and use ransack to search with the new scope: with_properties 2022-02-07 08:57:18 +01:00
Maikel Linke
572a65b324 Create a scope to retrieve product based on its properties
both inherited and own product properties

Update the product spec to test the scope that concern properties
2022-02-07 08:57:18 +01:00
Jean-Baptiste Bellet
f8002ae49a Add some controller specs that handle the supplier_property filtering
with product that don't inherits properties
2022-02-07 08:57:18 +01:00
Jean-Baptiste Bellet
242459fae4 Create the test that actually failed and should not 2022-02-07 08:57:18 +01:00
Maikel Linke
d0bb52f709 Update Rubocop todo list 2022-02-07 16:55:45 +11:00
Maikel
78cbd7b5c7 Merge pull request #8834 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-docs-6.4.18
Bump @storybook/addon-docs from 6.4.17 to 6.4.18
2022-02-07 16:29:50 +11:00
Maikel
0d729fa0a8 Merge pull request #8831 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-controls-6.4.18
Bump @storybook/addon-controls from 6.4.17 to 6.4.18
2022-02-07 16:29:02 +11:00
dependabot[bot]
f2c3afdbfd Bump @storybook/addon-docs from 6.4.17 to 6.4.18
Bumps [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/addons/docs) from 6.4.17 to 6.4.18.
- [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.18/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-02-07 05:16:40 +00:00
Maikel
3ae5672d1a Merge pull request #8832 from openfoodfoundation/dependabot/npm_and_yarn/storybook/server-6.4.18
Bump @storybook/server from 6.4.17 to 6.4.18
2022-02-07 16:15:49 +11:00
Transifex-Openfoodnetwork
4c0b3bf9bf Updating translations for config/locales/en_IE.yml 2022-02-05 03:19:28 +11:00
Transifex-Openfoodnetwork
f7de43e8b7 Updating translations for config/locales/en_IE.yml 2022-02-05 03:16:24 +11:00
Matt-Yorkley
8a1fcf8a62 Update all locales with the latest Transifex translations 2022-02-04 15:50:32 +00:00
Matt-Yorkley
08d7a4de92 Merge pull request #8799 from openfoodfoundation/transifex
Transifex
2022-02-04 15:46:52 +00:00
Cillian O'Ruanaidh
b43a68d717 Merge branch 'master' into remove-inline-advanced-settings-toggle-js 2022-02-04 12:24:17 +00:00
Cillian O'Ruanaidh
05756616dd Add a remote-toggle controller that can toggle elements outside of its scope
This is instead of adding the :data-controller attribute to the div#wrapper because that will wrap pretty much all content on the admin pages.

Co-authored-by: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com>
2022-02-04 12:23:24 +00:00
Cillian O'Ruanaidh
d03b52a163 Revert "Replace inline JS for toggling order cycle advanced settings with StimulusJs controller"
This reverts commit 67ae2e72f3.
2022-02-04 11:47:38 +00:00
Filipe
0777212607 Merge pull request #8774 from Matt-Yorkley/drop-dead-action
Remove unused controller action
2022-02-03 19:47:18 +00:00
Filipe
e403fc171d Merge pull request #8808 from Matt-Yorkley/login-modal
Remove all Angular code from Login/Signup process
2022-02-03 19:36:44 +00:00
Filipe
c4751d7056 Merge pull request #8813 from Matt-Yorkley/split-checkout-address-state
Split checkout: fix loading of saved addresses
2022-02-03 19:06:35 +00:00
Filipe
e2695fdbfb Merge pull request #8829 from mkllnk/8824-patch-aws-sdk
Fix image uploads by patching aws-sdk
2022-02-03 12:44:13 +00:00
dependabot[bot]
cd0542af85 Bump webpack-dev-server from 3.11.2 to 3.11.3
Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 3.11.2 to 3.11.3.
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/v3.11.3/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v3.11.2...v3.11.3)

---
updated-dependencies:
- dependency-name: webpack-dev-server
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-03 09:05:42 +00:00
dependabot[bot]
a8e29d7c07 Bump @storybook/server from 6.4.17 to 6.4.18
Bumps [@storybook/server](https://github.com/storybookjs/storybook/tree/HEAD/app/server) from 6.4.17 to 6.4.18.
- [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.18/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-02-03 09:05:34 +00:00
dependabot[bot]
67be08b40e Bump @storybook/addon-controls from 6.4.17 to 6.4.18
Bumps [@storybook/addon-controls](https://github.com/storybookjs/storybook/tree/HEAD/addons/controls) from 6.4.17 to 6.4.18.
- [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.18/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-02-03 09:05:19 +00:00
Maikel Linke
2e6d8c1216 Provide aws-sdk with working URI.encode method
The S3 class is calling URI.encode which is removed in Ruby 3. By
providing a URI module within the S3 class makes the S3 code call that
module instead.
2022-02-03 15:20:51 +11:00
Maikel Linke
6468b7d98d Spec image upload
The use of AWS S3 was untested before and it failed after upgrading to
Ruby 3.
2022-02-03 11:25:16 +11:00
Filipe
787b643832 Merge pull request #8818 from jibees/8793-specify-a-min-width-for-radio-input
Split checkout: specify a min width for radio input that improve the rendering on iOS
2022-02-02 18:31:27 +00:00
Nihal M. Kelanthodika
b45f0f3416 Update order_cycle model spec to account for cloning of schedule along with OC 2022-02-02 21:21:38 +05:30
Nihal M. Kelanthodika
6293e927bc Keep linked schedule when cloning OC 2022-02-02 19:13:48 +05:30
Maikel
433227cc09 Merge pull request #8820 from openfoodfoundation/dependabot/npm_and_yarn/karma-6.3.13
Bump karma from 6.3.12 to 6.3.13
2022-02-02 14:46:46 +11:00
Matt-Yorkley
f77ecc1968 Improve and simplify return authorizations test setup 2022-02-01 11:39:07 +00:00
Matt-Yorkley
7235d1813d Update totals and payment explicitly in current (non-split) checkout 2022-02-01 11:39:07 +00:00
Matt-Yorkley
35392cb117 Remove Order#set_payment_amount! 2022-02-01 11:39:07 +00:00
Matt-Yorkley
31e6405125 Handle setting of payment amount during checkout in OrderUpdater 2022-02-01 11:39:07 +00:00
Filipe
ca0166a420 Merge pull request #8807 from Matt-Yorkley/closed-oc-payment-auth
Fix Stripe payment authorizing for closed order cycles
2022-02-01 11:16:31 +00:00
Filipe
998f7afdc4 Merge pull request #8523 from seballot/progress-for-ajax-request
Improve loading spinner display
2022-02-01 10:03:04 +00:00
Filipe
012527522c Merge pull request #8640 from jibees/8630-make-buttons-sticky
Make split checkout buttons sticky on step 3
2022-02-01 09:41:33 +00:00
dependabot[bot]
bbf10a7198 Bump karma from 6.3.12 to 6.3.13
Bumps [karma](https://github.com/karma-runner/karma) from 6.3.12 to 6.3.13.
- [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.12...v6.3.13)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-01 09:04:04 +00:00
Maikel
b995c3ed49 Merge pull request #8815 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-controls-6.4.17
Bump @storybook/addon-controls from 6.4.14 to 6.4.17
2022-02-01 19:02:34 +11:00
dependabot[bot]
031258e1ee Bump @storybook/addon-controls from 6.4.14 to 6.4.17
Bumps [@storybook/addon-controls](https://github.com/storybookjs/storybook/tree/HEAD/addons/controls) from 6.4.14 to 6.4.17.
- [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.17/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-02-01 06:06:09 +00:00
Maikel
e060a059d8 Merge pull request #8817 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-docs-6.4.17
Bump @storybook/addon-docs from 6.4.14 to 6.4.17
2022-02-01 17:05:42 +11:00
dependabot[bot]
f02c79751c Bump @storybook/addon-docs from 6.4.14 to 6.4.17
Bumps [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/addons/docs) from 6.4.14 to 6.4.17.
- [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.17/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-02-01 05:40:34 +00:00
Maikel
2938de7eee Merge pull request #8816 from openfoodfoundation/dependabot/npm_and_yarn/storybook/server-6.4.17
Bump @storybook/server from 6.4.14 to 6.4.17
2022-02-01 16:39:47 +11:00
Filipe
8d18279f53 Merge pull request #8784 from apricot12/7398-Weight_field-on-non-weight-variants
Convert variant.weight into decimal if integer or 0.0 if nil
2022-01-31 18:55:31 +00:00
Matt-Yorkley
5eb88e020c Extract/clarify methods in tabs_controller 2022-01-31 16:35:41 +00:00
Matt-Yorkley
81f5755e3d Add tests for tabs_controller 2022-01-31 16:34:35 +00:00
Filipe
4e4d9bb5a5 Merge pull request #8804 from Matt-Yorkley/split-checkout-fees
[Split Checkout] Ensure fees are applied during checkout update
2022-01-31 16:26:22 +00:00
Matt-Yorkley
5b434ca7c4 Replace conditional with a guard clause 2022-01-31 15:55:35 +00:00
Matt-Yorkley
11ed1574ca Call #check_order_cycle_expiry in PaypalController and StripeController, but avoid it on #authorize action
The authorize action is used for authorizing off-session payments where the order is *already complete* and the order cycle may have closed (backoffice and subscriptions). They are essentially asynchronous and not coupled to the current open/closed state of the order cycle.
2022-01-31 15:55:35 +00:00
Matt-Yorkley
5e6dd1e6e1 Move #check_order_cycle_expiry method to OrderStockCheck and don't call it from BaseController :before_action callback 2022-01-31 15:55:35 +00:00
Jean-Baptiste Bellet
d97381548a Specify a min width for radio 2022-01-31 15:50:37 +01:00
Nihal M. Kelanthodika
ddaac654ef Add specs for conversion of variant weight input into decimal/0.0 2022-01-31 17:43:15 +05:30
Jean-Baptiste Bellet
da6be441f8 Make sticky buttons fullwidth on mobile 2022-01-31 11:47:35 +01:00
Jean-Baptiste Bellet
ae0a71b29d This row adds an extra space on the right of the page
which introduce an horizontal scroll: visual regression
2022-01-31 11:47:21 +01:00
Filipe
6dac65ace5 Merge pull request #8803 from Matt-Yorkley/buttons-regression
Fix visual regression on filter buttons
2022-01-31 10:32:57 +00:00
Jean-Baptiste Bellet
fdeadd0940 Reduce margin on step3 since the container could be a little too high 2022-01-31 11:31:32 +01:00
Jean-Baptiste Bellet
d8391aa1d3 Create a div with a special class (checkout-step3)
... and attach the controller to it

Add the T&Cs inside the sicked container with submit buttons
2022-01-31 11:31:32 +01:00
Jean-Baptiste Bellet
293bc10dde Create a sticky controller that handle the sticky position of an element
.. at the bottom
And then add the sticked class to this element if the element is actually sticked
2022-01-31 11:31:32 +01:00
Jean-Baptiste Bellet
3abef1b703 Specify css for this sticky container
with a nice box-shadow.
Handle special case for mobile view (ie. max width 700px)
2022-01-31 11:31:32 +01:00
Matt-Yorkley
5f02ab79d4 Adjust animation handling for show/hide 2022-01-31 10:02:09 +00:00
Transifex-Openfoodnetwork
8e1272b1e8 Updating translations for config/locales/en_GB.yml 2022-01-31 20:47:33 +11:00
dependabot[bot]
091c04427c Bump @storybook/server from 6.4.14 to 6.4.17
Bumps [@storybook/server](https://github.com/storybookjs/storybook/tree/HEAD/app/server) from 6.4.14 to 6.4.17.
- [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.17/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-01-31 09:04:40 +00:00
Matt-Yorkley
7c0a631f7f Remove an unnecessary assignment
Co-authored-by: Maikel <maikel@email.org.au>
2022-01-31 08:40:58 +00:00
Matt-Yorkley
0516ec6f15 Enable test for loading address (now passing) 2022-01-30 11:33:31 +00:00
Matt-Yorkley
5e321c9f48 Fix country/state selection for shipping address; missing controller and data 2022-01-30 11:33:31 +00:00
Matt-Yorkley
611beb2e90 Rearrange controller placement, field order, and nesting 2022-01-30 11:33:31 +00:00
Matt-Yorkley
908a22bcb6 Don't repopulate states select on page load; breaks pre-filling selection from saved address 2022-01-30 11:33:31 +00:00
Matt-Yorkley
370ec17818 Improve countries and states loading 2022-01-30 11:33:31 +00:00
Matt-Yorkley
bf4428b688 Tidy up dependent-select controller 2022-01-30 11:33:31 +00:00
Matt-Yorkley
7e62bfcdfb Add failing test for loading address with state correctly in split checkout 2022-01-30 11:33:31 +00:00
Matt-Yorkley
f5bde96701 Merge pull request #8812 from Matt-Yorkley/temp-translation
Disable test which depends on missing Transifex keys
2022-01-29 20:09:22 +00:00
Matt-Yorkley
f4fdc8740e Disable test that depends on missing Transifex keys 2022-01-29 20:06:46 +00:00
Matt-Yorkley
448e4bb67b Reduce expensive tax recalculation calls
This can only really be enabled once we've merged the split checkout
2022-01-29 18:56:52 +00:00
Transifex-Openfoodnetwork
22d5a63a5b Updating translations for config/locales/ar.yml 2022-01-30 03:59:54 +11:00
Matt-Yorkley
f3792acf55 Drop workaround previously required to avoid a bug caused by the stringex gem 2022-01-29 14:49:23 +00:00
Matt-Yorkley
8b59ef20db Improve controller tests 2022-01-29 14:49:23 +00:00
Matt-Yorkley
794e0e0326 Delete old login modal code 2022-01-29 14:49:23 +00:00
Matt-Yorkley
13a7fb79cf Move more login handling out of Angular 2022-01-29 14:49:23 +00:00
Matt-Yorkley
77d8e7da90 Use non-Angular login modal in /registration pages 2022-01-29 14:49:23 +00:00
Matt-Yorkley
a522e597e1 Add Matamo event 2022-01-29 14:49:23 +00:00
Matt-Yorkley
6116fd8881 Improve inaccurate specs 2022-01-29 14:49:23 +00:00
Matt-Yorkley
50389a864a Improve dynamic Angular Bootstrapping 2022-01-29 14:49:23 +00:00
Matt-Yorkley
89e692c6c8 Switch to CableCar for login responses 2022-01-29 14:49:23 +00:00
Matt-Yorkley
0577b46f3f Create simpler non-Angular login modal 2022-01-29 14:49:23 +00:00
Matt-Yorkley
8a18a4de66 Clear up redirecting logic and path building 2022-01-29 10:08:51 +00:00
Matt-Yorkley
04da148af0 Decouple login modal opening from Angular 2022-01-29 10:08:51 +00:00
Matt-Yorkley
6561a7246b Delete unused partial 2022-01-29 10:08:51 +00:00
Matt-Yorkley
798af2dafc Drop unused #create action 2022-01-29 10:08:50 +00:00
Transifex-Openfoodnetwork
a6bf6470f7 Updating translations for config/locales/de_DE.yml 2022-01-29 12:14:24 +11:00
Filipe
e63225d389 Merge pull request #8727 from Matt-Yorkley/js-matomo-login
Move Matomo event tracking for login modal into Authentication service
2022-01-28 20:02:46 +00:00
Cillian O'Ruanaidh
67ae2e72f3 Replace inline JS for toggling order cycle advanced settings with StimulusJs controller
Partially addresses #8699.

This adjusts the Stimulus toggle controller so you can toggle content in both directions via a single element. This is in addition to the previous behaviour for toggling via multiple elements like radio buttons when each element always toggles in one direction only.

If a toggle element contains a chevron icon this will automatically toggle the direction of that icon too.

Note, in order to not have to re-implement the animation provided by the slideToggle() function in standard JavaScript, this just switches the style :display between 'none' and 'block' so it is not as smooth. Perhaps it could be made more smooth later with a CSS transition.
2022-01-28 16:19:36 +00:00
Matt-Yorkley
6c6e5ca316 Ensure fees are applied during checkout 2022-01-28 11:38:23 +00:00
Matt-Yorkley
4ace7efd97 Fix visual regression on filter buttons 2022-01-28 10:40:01 +00:00
Transifex-Openfoodnetwork
6856f21e7e Updating translations for config/locales/it.yml 2022-01-28 19:05:08 +11:00
Transifex-Openfoodnetwork
aae40c74a9 Updating translations for config/locales/en_US.yml 2022-01-28 10:15:26 +11:00
Transifex-Openfoodnetwork
0397a68072 Updating translations for config/locales/fr_CA.yml 2022-01-28 09:31:49 +11:00
Transifex-Openfoodnetwork
ccb9df708b Updating translations for config/locales/en_CA.yml 2022-01-28 09:24:03 +11:00
Matt-Yorkley
8c33dc16e8 Update all locales with the latest Transifex translations 2022-01-27 18:24:01 +00:00
Matt-Yorkley
b588ab78b7 Merge pull request #8777 from openfoodfoundation/transifex
Transifex
2022-01-27 18:17:06 +00:00
Matt-Yorkley
73259d4fb7 Merge pull request #8797 from Matt-Yorkley/digest
Add digest gem explicitly
2022-01-27 18:09:14 +00:00
Matt-Yorkley
a535acc256 Add digest gem explicitly
This was previously part of the standard lib in Ruby, but is being transitioned to an external gem. Fixes console warning:

"warning: already initialized constant Digest::REQUIRE_MUTEX"
2022-01-27 15:51:27 +00:00
Filipe
49030049dd Merge pull request #8732 from Matt-Yorkley/template-cull
Remove some Angular templates
2022-01-27 15:18:06 +00:00
Transifex-Openfoodnetwork
2eed23d14b Updating translations for config/locales/fr.yml 2022-01-28 00:24:38 +11:00
Transifex-Openfoodnetwork
2e3bc758e3 Updating translations for config/locales/en_FR.yml 2022-01-28 00:24:36 +11:00
Matt-Yorkley
0bec693655 Merge pull request #8791 from Matt-Yorkley/split-checkout-terms
[Split Checkout] Update terms of service handling
2022-01-27 13:07:04 +00:00
Nihal M. Kelanthodika
23a7ba2479 Added before_save callback to convert variant weight to decimal and 0.0 if nil 2022-01-27 16:33:14 +05:30
Matt-Yorkley
312e6c3326 Merge pull request #8796 from Matt-Yorkley/drop-embedded-shops
Remove embedded shopfronts code
2022-01-27 10:05:51 +00:00
Transifex-Openfoodnetwork
9a46eaffba Updating translations for config/locales/en_FR.yml 2022-01-27 19:18:10 +11:00
Transifex-Openfoodnetwork
135b629134 Updating translations for config/locales/fr.yml 2022-01-27 19:17:46 +11:00
Matt-Yorkley
1ee3d0f7a1 Drop embedded shops code 2022-01-26 19:58:39 +00:00
Filipe
75395f6f29 Merge pull request #8648 from Matt-Yorkley/csp
Configure CSP
2022-01-26 19:55:11 +00:00
Filipe
28a126024f Merge pull request #8722 from cillian/remove-unused-js-from-products-form
Remove unused inline JavaScript from products/_form.html.haml
2022-01-26 19:14:24 +00:00
Filipe
374c05116b Merge pull request #8726 from Matt-Yorkley/stringex-machina
Reduce impact of stringex gem
2022-01-26 19:02:41 +00:00
Filipe
54083ea803 Merge pull request #8738 from jibees/add-locale-to-stripe-elements
Add locale to stripe elements options to display stripe error messages in globale interface chosen language
2022-01-26 19:01:37 +00:00
Filipe
62457f0c69 Merge pull request #8778 from georgethoppil/master
Adding deleted_at check on variant_stock move
2022-01-26 17:33:29 +00:00
Filipe
404fb4cb7f Merge pull request #8771 from tsara27/8458-missing-translation
Missing translation: table headers in product import validation table #8458
2022-01-26 17:22:44 +00:00
Filipe
53b96896a9 Merge pull request #8779 from mkllnk/7872-remove-stripe-connect
Upgrade old Stripe Connect payment methods to Stripe SCA and remove Stripe Connect
2022-01-26 11:57:26 +00:00
Filipe
cea4714296 Merge pull request #8761 from Dmoment/8457-missng-translation-or-between-buttons
removed translation or between buttons
2022-01-26 10:04:41 +00:00
Filipe
30b3b7455d Merge pull request #8717 from jibees/6139-improve-radio-button-on-split-checkout
SplitCheckout: adjust display of long shipping method or payment method label
2022-01-25 16:32:38 +00:00
Filipe
8715e9865b Merge pull request #8643 from jibees/8623-disable-save-card-option
Split Checkout: Show "Save card for future use" checkbox only on "Enter new card details" option selected
2022-01-25 16:11:20 +00:00
Filipe
733d788215 Merge pull request #8758 from Matt-Yorkley/split-checkout-payments
Split checkout: external payment processing
2022-01-25 15:55:56 +00:00
Matt-Yorkley
bfe70691c2 Add test coverage for accepting terms of service 2022-01-25 15:19:32 +00:00
Matt-Yorkley
6e8bb777e6 Show platform and distributor terms and conditions 2022-01-25 15:16:43 +00:00
jibees
b175375510 Merge pull request #8789 from Matt-Yorkley/drop-example-spec
Remove example system spec
2022-01-25 15:07:59 +01:00
Matt-Yorkley
31349ed3ae Remove example system spec 2022-01-25 13:45:15 +00:00
Matt-Yorkley
51990e978b Merge pull request #8786 from openfoodfoundation/dependabot/npm_and_yarn/karma-6.3.12
Bump karma from 6.3.11 to 6.3.12
2022-01-25 10:12:44 +00:00
dependabot[bot]
79547a07f7 Bump karma from 6.3.11 to 6.3.12
Bumps [karma](https://github.com/karma-runner/karma) from 6.3.11 to 6.3.12.
- [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.11...v6.3.12)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-25 09:04:15 +00:00
Matt-Yorkley
caab2421b3 Merge pull request #8785 from mkllnk/8702-flaky-ticket-spec
Wait for JS in ticket printing spec for consistent pass
2022-01-25 09:03:11 +00:00
Maikel Linke
828e3ab08d Wait for JS in spec for consistent pass 2022-01-25 14:12:50 +11:00
Maikel
792fc4bc6d Merge pull request #8782 from openfoodfoundation/dependabot/npm_and_yarn/storybook/server-6.4.14
Bump @storybook/server from 6.4.13 to 6.4.14
2022-01-25 14:11:24 +11:00
dependabot[bot]
b20cbf010c Bump @storybook/server from 6.4.13 to 6.4.14
Bumps [@storybook/server](https://github.com/storybookjs/storybook/tree/HEAD/app/server) from 6.4.13 to 6.4.14.
- [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.14/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-01-25 01:32:10 +00:00
Maikel
3dabb9a99c Merge pull request #8781 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-docs-6.4.14
Bump @storybook/addon-docs from 6.4.13 to 6.4.14
2022-01-25 12:31:36 +11:00
dependabot[bot]
5a0ab0380d Bump @storybook/addon-docs from 6.4.13 to 6.4.14
Bumps [@storybook/addon-docs](https://github.com/storybookjs/storybook/tree/HEAD/addons/docs) from 6.4.13 to 6.4.14.
- [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.14/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-01-25 00:04:55 +00:00
Maikel
662bc6816d Merge pull request #8780 from openfoodfoundation/dependabot/npm_and_yarn/storybook/addon-controls-6.4.14
Bump @storybook/addon-controls from 6.4.13 to 6.4.14
2022-01-25 11:04:16 +11:00
Matt-Yorkley
b5a1d9ebef Allow using saved cards at checkout 2022-01-24 23:06:43 +00:00
George Thoppil
77e5aab6c8 Merge branch 'openfoodfoundation:master' into master 2022-01-24 16:48:21 -05:00
Matt-Yorkley
8c9ca3b0c3 Extract method and allow Stripe payment completion on orders in confirmation state 2022-01-24 20:49:06 +00:00
Matt-Yorkley
8552da2377 Extract and stub PaymentMethodFetcher 2022-01-24 20:28:59 +00:00
Matt-Yorkley
ebb69d7f93 Add controller test for payment redirect 2022-01-24 20:28:59 +00:00
Matt-Yorkley
167adb3ddc Memoize selected_payment_method 2022-01-24 20:28:59 +00:00
Matt-Yorkley
02590014ab Improve split checkout feature toggle 2022-01-24 20:28:59 +00:00
Matt-Yorkley
50b82d347b Redirect to payment gateway during order confirmation 2022-01-24 20:28:59 +00:00
Matt-Yorkley
41d2fdb368 Bump cable_ready 2022-01-24 20:28:59 +00:00
Matt-Yorkley
b86e2c8c16 Merge pull request #8757 from Matt-Yorkley/ruby-3
Upgrade to Ruby 3
2022-01-24 19:54:13 +00:00
Matt-Yorkley
4082b867af Merge pull request #8783 from openfoodfoundation/dependabot/npm_and_yarn/node-fetch-2.6.7
Bump node-fetch from 2.6.1 to 2.6.7
2022-01-24 16:30:45 +00:00
Matt-Yorkley
41d56ce98b Add rexml
This was previously included in Ruby, and has now been extracted. It's used by activemerchant and selenium and possibly others, but those gems don't currently declare it as a dependency.
2022-01-24 14:34:48 +00:00
GeorgeThoppil
b2e9106654 Linting/Trailing whitespace 2022-01-24 09:30:55 -05:00
Matt-Yorkley
21a3a6e338 Update bootsnap 2022-01-24 14:11:08 +00:00
Matt-Yorkley
48a7cfa09e Fix more deprecated keyword arguments 2022-01-24 14:11:08 +00:00
Matt-Yorkley
f7b65efb00 Bump to Ruby 3.0.3 2022-01-24 14:11:08 +00:00
Matt-Yorkley
8ec7d3b651 Fix use of deprecated keyword args syntax in reports 2022-01-24 14:11:08 +00:00
Matt-Yorkley
783c097653 Update roo gem for Ruby 3 compatibility 2022-01-24 14:11:08 +00:00
Matt-Yorkley
06b2031914 Update Ruby to 3.0.2 2022-01-24 14:11:08 +00:00
George Thoppil
745758b7de Update spec/models/spree/order_spec.rb
Co-authored-by: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com>
2022-01-24 09:06:09 -05:00
Filipe
1ddff2c4bf Merge pull request #8678 from Matt-Yorkley/dead-code-js-uri
Remove outdated jsUri
2022-01-24 13:15:02 +00:00
dependabot[bot]
7eed639164 Bump node-fetch from 2.6.1 to 2.6.7
Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 2.6.1 to 2.6.7.
- [Release notes](https://github.com/node-fetch/node-fetch/releases)
- [Changelog](https://github.com/node-fetch/node-fetch/blob/main/docs/CHANGELOG.md)
- [Commits](https://github.com/node-fetch/node-fetch/compare/v2.6.1...v2.6.7)

---
updated-dependencies:
- dependency-name: node-fetch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-24 13:01:44 +00:00
Filipe
82b24026a7 Merge pull request #8747 from openfoodfoundation/dependabot/bundler/monetize-1.12.0
Bump monetize from 1.11.0 to 1.12.0
2022-01-24 13:01:08 +00:00
Filipe
1120e4e460 Merge pull request #8759 from jibees/8547-use-the-last-payment-in-the-Payment-Method-Report
Use the last payment method instead of the first for the Payment Method Report
2022-01-24 12:51:08 +00:00
Filipe
f17226ffbe Merge pull request #8438 from cillian/show-out-of-stock-line-items
If an order has out of stock line items display them and let admins remove them
2022-01-24 12:18:19 +00:00
dependabot[bot]
93619cffdf Bump @storybook/addon-controls from 6.4.13 to 6.4.14
Bumps [@storybook/addon-controls](https://github.com/storybookjs/storybook/tree/HEAD/addons/controls) from 6.4.13 to 6.4.14.
- [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.14/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-01-24 09:05:56 +00:00
Maikel Linke
19909deaf6 Remove obsolete StripeConnect payment gateway
The newer StripeSCA is a complete replacement.
2022-01-24 12:35:45 +11:00
Maikel Linke
ee85b9654d Remove references to StripeConnect class 2022-01-24 12:35:45 +11:00
Maikel Linke
f22c2b0e73 Remove option to create StripeConnect methods 2022-01-24 12:35:45 +11:00
Maikel Linke
191646b611 Update Stripe config description 2022-01-24 12:35:45 +11:00
Maikel Linke
9abacf9047 Upgrade old StripeConnect payment methods to SCA
StripeConnect has been replaced by StripeSCA. But we still have some
StripeConnect payment methods in our production databases. We need to
convert them to StripeSCA methods before we can remove the related
code and clean up. Otherwise our code would raise errors when
encountering an old StripeConnect method, not knowing what that is.
2022-01-24 12:35:45 +11:00
Maikel
205fb630cb Fix typos in release task template 2022-01-24 10:23:51 +11:00
GeorgeThoppil
f1c4f80be4 Adding deleted_at check on variant_stock move 2022-01-23 13:45:54 -05:00
Matt-Yorkley
04e2b8728b Merge pull request #8775 from openfoodfoundation/dependabot/npm_and_yarn/log4js-6.4.0
Bump log4js from 6.3.0 to 6.4.0
2022-01-22 10:56:18 +00:00
Matt-Yorkley
658011d574 Merge pull request #8776 from openfoodfoundation/dependabot/npm_and_yarn/nanoid-3.2.0
Bump nanoid from 3.1.30 to 3.2.0
2022-01-22 10:47:55 +00:00
Transifex-Openfoodnetwork
61b09a456b Updating translations for config/locales/it.yml 2022-01-22 21:20:24 +11:00
dependabot[bot]
5e21ae23c0 Bump nanoid from 3.1.30 to 3.2.0
Bumps [nanoid](https://github.com/ai/nanoid) from 3.1.30 to 3.2.0.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.1.30...3.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-22 09:49:33 +00:00
dependabot[bot]
30df9e5139 Bump log4js from 6.3.0 to 6.4.0
Bumps [log4js](https://github.com/log4js-node/log4js-node) from 6.3.0 to 6.4.0.
- [Release notes](https://github.com/log4js-node/log4js-node/releases)
- [Changelog](https://github.com/log4js-node/log4js-node/blob/master/CHANGELOG.md)
- [Commits](https://github.com/log4js-node/log4js-node/compare/v6.3.0...v6.4.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-21 22:50:55 +00:00
Matt-Yorkley
e077607767 Remove unused controller action 2022-01-21 21:31:42 +00:00
Tsara Sudrajat
56ac2e4e61 Convert product headings to load from translation 2022-01-21 18:30:38 +07:00
Filipe
42c6cea78d Merge pull request #8739 from Matt-Yorkley/split-checkout-completion
Split checkout completion
2022-01-20 14:38:01 +00:00
Deepak Chauhan
5a6f322fd7 Merge branch 'master' into 8457-missng-translation-or-between-buttons 2022-01-20 15:41:15 +05:30
Deepak Chauhan
45660b48bb removed or from admin/show_more.html.haml and split_checkout/_guest.html.haml 2022-01-20 15:35:58 +05:30
Deepak Chauhan
018e19c2c8 removed translation or from _edit_resourse_link to prevent rspec failing 2022-01-20 13:05:05 +05:30
Deepak Chauhan
3b3eb1e522 removed translation or from en.yml 2022-01-20 10:15:44 +05:30
Matt-Yorkley
2f7ef33caf Add test for maintaining hub selection after order completion 2022-01-19 22:43:54 +00:00
Matt-Yorkley
0f154de235 Use OrderCompletion in split checkout for #order_completion_reset 2022-01-19 17:51:03 +00:00
Matt-Yorkley
fb8f5ee5ce Increase flexibility in test setup 2022-01-19 17:51:03 +00:00
Matt-Yorkley
49623f6b4a Simplify test setup 2022-01-19 17:51:03 +00:00
Matt-Yorkley
d57e64cf7e Add new order factories for checkout steps 2022-01-19 17:49:05 +00:00
Deepak Chauhan
7adc1186c6 removed transaltion or between buttons from multiple views 2022-01-19 03:16:55 +05:30
Deepak Chauhan
1ed5b3a3f6 removed translation or between buttons 2022-01-19 02:01:29 +05:30
Jean-Baptiste Bellet
8455d79f9b Use the last payment method instead of the first for the Payment Method Report 2022-01-18 20:35:08 +01:00
Matt-Yorkley
9acc67d413 Use https when loading google maps JS 2022-01-18 12:22:06 +00:00
Matt-Yorkley
931e68ef6f Update script sources for google maps and bugnsag 2022-01-18 12:22:06 +00:00
Matt-Yorkley
a6af9b3ad5 Disable CSP on order ticket printing via QZ 2022-01-18 12:22:06 +00:00
Matt-Yorkley
8bb3fddbed Use https when loading fonts in admin 2022-01-18 12:22:06 +00:00
Matt-Yorkley
4c9e64589b Update style sources 2022-01-18 12:22:06 +00:00
Matt-Yorkley
6b0d5e01d5 Move preview pages to fixtures 2022-01-18 12:22:06 +00:00
Matt-Yorkley
accb9228ee Tidy up embedding specs 2022-01-18 12:22:06 +00:00
Matt-Yorkley
d691940623 Simplify header checking in tests 2022-01-18 12:22:06 +00:00
Matt-Yorkley
6af5f46d30 Update CSP; re-enable Angular templates
We really need to remove all those Angular templates as soon as possible, and then revert this commit...
2022-01-18 12:22:06 +00:00
Matt-Yorkley
e8f3fe8510 Update header checks in tests 2022-01-18 12:22:06 +00:00
Matt-Yorkley
dfbd384c95 Refactor embedding to a Concern 2022-01-18 12:22:06 +00:00
Matt-Yorkley
4649698fc4 Remove #set_response_headers 2022-01-18 12:19:54 +00:00
Matt-Yorkley
6a3ca98ac6 Add frame-ancestors to CSP 2022-01-18 12:19:54 +00:00
Matt-Yorkley
05abb63036 Remove X-Frame-Options header
This header is largely deprecated, and is functionally replaced here by use of the frame-ancestors CSP configuration
2022-01-18 12:19:54 +00:00
Matt-Yorkley
ce9b64a848 Set Angular CSP
If you don't set this flag, Angular helpfully attempts to check if this is disabled by *triggering* a CSP violation just to see what happens... 🙈
2022-01-18 12:19:54 +00:00
Matt-Yorkley
114a9d8993 Allow unsafe_inline 2022-01-18 12:19:54 +00:00
Matt-Yorkley
0fc6b4c882 Add some whitelisting 2022-01-18 12:19:54 +00:00
Matt-Yorkley
0dd97a631e Set CSP configuration 2022-01-18 12:19:54 +00:00
dependabot[bot]
944a899931 Bump monetize from 1.11.0 to 1.12.0
Bumps [monetize](https://github.com/RubyMoney/monetize) from 1.11.0 to 1.12.0.
- [Release notes](https://github.com/RubyMoney/monetize/releases)
- [Changelog](https://github.com/RubyMoney/monetize/blob/main/CHANGELOG.md)
- [Commits](https://github.com/RubyMoney/monetize/compare/v1.11.0...v1.12.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-18 10:22:31 +00:00
Matt-Yorkley
3bfea510b2 Update spec/services/url_generator_spec.rb
Co-authored-by: Maikel <maikel@email.org.au>
2022-01-18 08:45:46 +00:00
Jean-Baptiste Bellet
c22f3ec1db Add locale to stripe elements options to display messages in right language
List of supported language by stripe elements:
https://stripe.com/docs/js/appendix/supported_locales
2022-01-17 15:10:51 +01:00
Matt-Yorkley
31b4c06ea3 Update rendering and shipping_type_selector directive 2022-01-16 11:30:58 +00:00
Matt-Yorkley
a6ef7ca17f Move shipping_type_selector template to views 2022-01-16 11:05:17 +00:00
Matt-Yorkley
f06ec94b30 Render shop_variant partial normally and remove shop_variant directive 2022-01-16 10:46:26 +00:00
Matt-Yorkley
e5009432c3 Render regular partials 2022-01-16 10:45:26 +00:00
Matt-Yorkley
3afd6c273a Move shop_variant templates to views 2022-01-16 10:41:55 +00:00
Matt-Yorkley
26ac59fbba Move Matomo event tracking for login modal into Autherntication service 2022-01-15 16:21:33 +00:00
Matt-Yorkley
18ac9b5335 Add support for generating valid/unique permalinks for Enterprises with non-roman characters in their name 2022-01-15 13:21:09 +00:00
Matt-Yorkley
2063bffad6 Replace use of Stringex#to_url with (encapsulated) UrlGenerator#to_url 2022-01-15 13:21:09 +00:00
Matt-Yorkley
0ef35b319c Create UrlGenerator service 2022-01-15 13:21:09 +00:00
Matt-Yorkley
3f5e5d52ad Improve concern syntax and definition 2022-01-15 12:31:43 +00:00
Matt-Yorkley
ea312c78b0 Move PermalinkGenerator out of lib directory 2022-01-15 12:31:43 +00:00
Matt-Yorkley
1953a2ef6a Don't require stringex 2022-01-15 12:31:43 +00:00
Matt-Yorkley
7be31c74a7 Don't load stringex gem by default in gemfile 2022-01-15 12:31:43 +00:00
Matt-Yorkley
7062cab31f Replace unnecessary uses of StringEx#to_url with ActiveSupport#parameterize 2022-01-15 10:22:10 +00:00
Cillian O'Ruanaidh
bc33df6659 Remove unused inline JavaScript from products/_form.html.haml
For #8699. This code, which was introduced in 1309d80f65, does not appear to be used. The CSS at https://github.com/openfoodfoundation/openfoodnetwork/blob/master/app/webpacker/css/admin/sections/products.scss#L6 is used instead.
2022-01-14 12:07:33 +00:00
Jean-Baptiste Bellet
f78ff3fc3b Improve display when label is long
(ie. longer than the available screen width)
2022-01-13 11:05:44 +01:00
Sebastian Castro
115dfe445b loading-message: make them all look the same in admin
use font awesome spinner instead of an image
2022-01-11 21:55:07 +01:00
Sebastian Castro
4a436978a9 loading-popup: debounce display 2022-01-11 21:55:07 +01:00
Sebastian Castro
0eb97f1cdc loading-popup: improve style 2022-01-11 21:55:07 +01:00
Jean-Baptiste Bellet
a1b21d7706 Take into account the lb unit name 2022-01-10 11:50:40 +01:00
Jean-Baptiste Bellet
f6e64f3a3c Update the tests as well 2022-01-10 11:27:32 +01:00
Jean-Baptiste Bellet
c5beff249e Should be divided by scale if the smallest unit 2022-01-10 11:27:18 +01:00
Jean-Baptiste Bellet
4c508a5bf9 Group by unit size is specific: it needs to be divided by scale if not the smallest unit 2022-01-10 11:24:22 +01:00
Jean-Baptiste Bellet
da9c0f4b8c Refactor: create two internal methods: getScale and getFormattedValueWithUnitName
Then, the old formattedValueWithUnitName calls those two private methods
2022-01-10 11:23:30 +01:00
Jean-Baptiste Bellet
467183af48 Rename getScale to getLineItemScale to be more specific 2022-01-10 11:22:11 +01:00
Cillian O'Ruanaidh
e2b8108972 If an order has out of stock line items display them and let admins remove them 2022-01-07 13:15:44 +00:00
Jean-Baptiste Bellet
515e2cfc51 Multiply by unit_value as sumOfUnitValues is now scaled 2022-01-07 10:32:47 +01:00
Jean-Baptiste Bellet
b746eacd11 Both sumUnitValues and sumMaxUnitValues should handle imperial units 2022-01-07 10:32:46 +01:00
Jean-Baptiste Bellet
5db50481dd Rounding to 3 decimals as scope method 2022-01-07 10:32:46 +01:00
Jean-Baptiste Bellet
d4435b5f10 Update variant_unit_manager_spec.js.coffee 2022-01-07 10:32:46 +01:00
Jean-Baptiste Bellet
9cf5645478 Add a spec to handle imperial units 2022-01-07 10:32:46 +01:00
Jean-Baptiste Bellet
7b2a9df326 Handle unitsVariant when calling formattedValueWithUnitName
- unitsVariant was unread but is necessary to compute the unit_name thanks to `VariantUnitManager.getUnitName()`
2022-01-07 10:32:46 +01:00
Jean-Baptiste Bellet
3922ffa6a9 Handle imperial units for VariantUnitManager 2022-01-07 10:32:45 +01:00
Matt-Yorkley
14a62f5d49 Change paths helpers to urls 2022-01-06 13:10:48 +00:00
Matt-Yorkley
95464cf956 Update uses of (removed) jsuri interface 2022-01-06 13:10:48 +00:00
Matt-Yorkley
0721800f56 Remove jsuri.js 2022-01-06 13:10:48 +00:00
Jean-Baptiste Bellet
f121704dd5 "Save card for future use" checkbox is part of the stripelements
... and should be hidden is the end-user select an existing card
2021-12-23 14:25:24 +01:00
Guido Oliveira
db45d7f4eb Cancel empty orders on BOM page 2021-11-06 10:25:34 -03:00
774 changed files with 25234 additions and 17667 deletions

11
.env
View File

@@ -53,18 +53,11 @@ SMTP_PASSWORD="f00d"
# see="https://developers.google.com/maps/documentation/javascript/get-api-key
# GOOGLE_MAPS_API_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# Stripe Connect details for instance account
# Find these under 'API keys' and 'Connect' in your Stripe account dashboard -> Account Settings
# Stripe details for instance account
# Find these under 'Developers' -> 'API keys' in your Stripe account dashboard.
# Under 'Connect', the Redirect URI should be set to https://YOUR_SERVER_URL/stripe/callbacks (e.g. https://openfoodnetwork.org.uk/stripe/callbacks)
# Under 'Webhooks', you should set up a Connect endpoint pointing to https://YOUR_SERVER_URL/stripe/webhooks e.g. (https://openfoodnetwork.org.uk/stripe/webhooks)
# STRIPE_INSTANCE_SECRET_KEY="sk_test_xxxxxx" # This can be a test key or a live key
# 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"

View File

@@ -28,7 +28,7 @@ assignees: ''
<pre>
git checkout master # same version as the release draft
git fetch upstream
git diff upstream master -- config/locales/en.yml
git diff upstream/master -- config/locales/en.yml
tx pull --force # if no changes or only additions in the locale
git checkout --detach # if we need to commit new translations
git commit -a -m "Update translations"
@@ -43,7 +43,6 @@ assignees: ''
<pre>
cd ofn-install
git pull
(cd ../ofn-secrets && git pull)
ansible-playbook --limit all-prod --extra-vars "git_version=vx.y.z" playbooks/deploy.yml
</pre>
</details>

View File

@@ -11,6 +11,8 @@ jobs:
- name: rubocop
uses: reviewdog/action-rubocop@v2
with:
rubocop_version: gemfile
rubocop_extensions: rubocop-rails:gemfile
reporter: github-pr-check
level: error
fail_on_error: true

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

@@ -0,0 +1,46 @@
name: 'Mayhem for API'
on: [push]
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

@@ -10,6 +10,9 @@ inherit_from:
# The automatically generated todo list to ignore all current violations.
- .rubocop_todo.yml
# The relaxed style rules as a common starting point which we can refine.
- .rubocop_relaxed_styleguide.yml
# Our Open Food Network style guide. If you want to see all violations,
# then use only that configuration:
#

View File

@@ -0,0 +1,153 @@
# Relaxed.Ruby.Style
## Version 2.5
Style/Alias:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylealias
Style/AsciiComments:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#styleasciicomments
Style/BeginBlock:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylebeginblock
Style/BlockDelimiters:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#styleblockdelimiters
Style/CommentAnnotation:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylecommentannotation
Style/Documentation:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#styledocumentation
Layout/DotPosition:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#layoutdotposition
Style/DoubleNegation:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#styledoublenegation
Style/EndBlock:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#styleendblock
Style/FormatString:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#styleformatstring
Style/IfUnlessModifier:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#styleifunlessmodifier
Style/Lambda:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylelambda
Style/ModuleFunction:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylemodulefunction
Style/MultilineBlockChain:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylemultilineblockchain
Style/NegatedIf:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylenegatedif
Style/NegatedWhile:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylenegatedwhile
Style/NumericPredicate:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylenumericpredicate
Style/ParallelAssignment:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#styleparallelassignment
Style/PercentLiteralDelimiters:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylepercentliteraldelimiters
Style/PerlBackrefs:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#styleperlbackrefs
Style/Semicolon:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylesemicolon
Style/SignalException:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylesignalexception
Style/SingleLineBlockParams:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylesinglelineblockparams
Style/SingleLineMethods:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylesinglelinemethods
Layout/SpaceBeforeBlockBraces:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#layoutspacebeforeblockbraces
Layout/SpaceInsideParens:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#layoutspaceinsideparens
Style/SpecialGlobalVars:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylespecialglobalvars
Style/StringLiterals:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylestringliterals
Style/TrailingCommaInArguments:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#styletrailingcommainarguments
Style/TrailingCommaInArrayLiteral:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#styletrailingcommainarrayliteral
Style/TrailingCommaInHashLiteral:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#styletrailingcommainhashliteral
Style/SymbolArray:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylesymbolarray
Style/WhileUntilModifier:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylewhileuntilmodifier
Style/WordArray:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#stylewordarray
Lint/AmbiguousRegexpLiteral:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#lintambiguousregexpliteral
Lint/AssignmentInCondition:
Enabled: false
StyleGuide: https://relaxed.ruby.style/#lintassignmentincondition
Layout/LineLength:
Enabled: false
Metrics:
Enabled: false

View File

@@ -1,7 +0,0 @@
inherit_from:
- .rubocop.yml
# This rubocop config file is only used for specs
# Here we allow specs to be 300 lines long
Metrics/ModuleLength:
Max: 300

View File

@@ -19,6 +19,30 @@ AllCops:
#
# Cop settings that have been agreed upon by the OFN community
Metrics:
Enabled: true
Metrics/BlockLength:
IgnoredMethods: [
"class_eval",
"collection",
"context",
"delete",
"describe",
"feature",
"get",
"it",
"member",
"namespace",
"path",
"post",
"put",
"resource",
"resources",
"scenario",
"shared_examples",
]
Rails/SkipsModelValidations:
AllowedMethods:
- "touch"
@@ -46,6 +70,7 @@ Layout/MultilineMethodCallIndentation:
EnforcedStyle: indented
Layout/LineLength:
Enabled: true
Max: 100
Lint/RaiseException:
@@ -54,6 +79,11 @@ Lint/RaiseException:
Lint/StructNewOverride:
Enabled: true
Naming/VariableNumber:
AllowedIdentifiers:
- street_address_1
- street_address_2
Bundler/DuplicatedGem:
Enabled: false
@@ -75,156 +105,20 @@ Lint/UselessAssignment:
Exclude:
- spec/**/*
## Relaxed.Ruby.Style SETTINGS
#
# These styles are a starting point for the conversation around conventions
# They should be removed or tweaked and moved above as decisions are made
# NOTE: Cops which did not fail at the time of writing were removed
Layout/DotPosition:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#styledotposition
Layout/SpaceBeforeBlockBraces:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylespacebeforeblockbraces
Layout/SpaceInsideParens:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylespaceinsideparens
Style/Alias:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylealias
Style/BlockDelimiters:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#styleblockdelimiters
Style/CommentAnnotation:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylecommentannotation
Style/DoubleNegation:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#styledoublenegation
Style/FormatString:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#styleformatstring
Style/HashEachMethods:
Enabled: false
Style/HashTransformKeys:
Enabled: false
Style/HashTransformValues:
Enabled: false
Style/IfUnlessModifier:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#styleifunlessmodifier
Style/Lambda:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylelambda
Style/MultilineBlockChain:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylemultilineblockchain
Style/NegatedIf:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylenegatedif
Style/NegatedWhile:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylenegatedwhile
Style/ParallelAssignment:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#styleparallelassignment
Style/PercentLiteralDelimiters:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylepercentliteraldelimiters
Style/Semicolon:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylesemicolon
Style/SingleLineMethods:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylesinglelinemethods
Style/TrailingCommaInArguments:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#styletrailingcommainarguments
Style/TrailingCommaInArrayLiteral:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#styletrailingcommainliteral
Style/TrailingCommaInHashLiteral:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#styletrailingcommainliteral
Style/WordArray:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#stylewordarray
Style/SymbolArray:
Enabled: false
StyleGuide: https://rubocop.readthedocs.io/en/latest/cops_style/#stylesymbolarray
Lint/AmbiguousRegexpLiteral:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#lintambiguousregexpliteral
Lint/AssignmentInCondition:
Enabled: false
StyleGuide: http://relaxed.ruby.style/#lintassignmentincondition
Lint/MissingSuper:
Exclude:
- 'app/components/**/*'
Metrics/AbcSize:
Max: 15
Metrics/BlockLength:
Max: 25
IgnoredMethods: [
"class_eval",
"collection",
"context",
"describe",
"feature",
"it",
"member",
"namespace",
"resource",
"resources",
"scenario"
]
Metrics/BlockNesting:
Max: 3
Metrics/ClassLength:
Max: 100
Metrics/ModuleLength:
Max: 100
Metrics/CyclomaticComplexity:
Max: 6
Max: 30 # default 17
Metrics/MethodLength:
Max: 10
Metrics/ParameterLists:
Max: 5
Enabled: true
Max: 25 # default 10
Metrics/PerceivedComplexity:
Max: 7
Enabled: true
Max: 14 # default 8
Naming/PredicateName:
Enabled: false

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1 @@
2.7.3
3.0.3

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,20 +42,18 @@ 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 node & yarn
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && \
apt-get install -y nodejs yarn
# Install NodeJs and yarn
RUN curl -sL https://deb.nodesource.com/setup_14.x | bash - \
&& apt-get install --no-install-recommends -y nodejs \
&& npm install -g yarn
# Install Chrome
RUN wget --quiet -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
@@ -69,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

View File

@@ -60,7 +60,7 @@ If the script succeeds you're ready to start developing. If not, take a look at
Now, your dreams of spinning up a development server can be realised:
bundle exec rails server
foreman start
Go to [http://localhost:3000](http://localhost:3000) to play around!

22
Gemfile
View File

@@ -1,14 +1,20 @@
# frozen_string_literal: true
source 'https://rubygems.org'
ruby "2.7.3"
ruby "3.0.3"
git_source(:github) { |repo_name| "https://github.com/#{repo_name}.git" }
gem 'dotenv-rails', require: 'dotenv/rails-now' # Load ENV vars before other gems
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'
gem 'awesome_nested_set'
gem 'ransack', '2.4.2'
@@ -37,13 +43,14 @@ gem "pg", "~> 1.2.3"
gem 'acts_as_list', '1.0.4'
gem 'cancancan', '~> 1.15.0'
gem 'digest'
gem 'ffaker'
gem 'highline', '2.0.3' # Necessary for the install generator
gem 'json'
gem 'monetize', '~> 1.11'
gem 'paranoia', '~> 2.4'
gem 'state_machines-activerecord'
gem 'stringex', '~> 2.8.5'
gem 'stringex', '~> 2.8.5', require: false
gem 'paypal-sdk-merchant', '1.117.2'
gem 'stripe'
@@ -55,8 +62,12 @@ gem 'devise-token_authenticatable'
gem 'jwt', '~> 2.3'
gem 'oauth2', '~> 1.4.7' # Used for Stripe Connect
gem 'jsonapi-serializer'
gem 'pagy', '~> 5.1'
gem 'rswag-api'
gem 'rswag-ui'
gem 'angularjs-rails', '1.8.0'
gem 'aws-sdk', '1.67.0'
gem 'bugsnag'
@@ -75,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'
@@ -87,14 +97,14 @@ gem 'redis', '>= 4.0', require: ['redis', 'redis/connection/hiredis']
gem 'sidekiq'
gem 'sidekiq-scheduler'
gem "cable_ready", "5.0.0.pre2"
gem "cable_ready", "5.0.0.pre3"
gem 'combine_pdf'
gem 'wicked_pdf'
gem 'wkhtmltopdf-binary'
gem 'immigrant'
gem 'roo', '~> 2.8.3'
gem 'roo', github: "roo-rb/roo" # master is currently needed for Ruby 3.x (awaiting new release)
gem 'spreadsheet_architect'
gem 'whenever', require: false
@@ -143,7 +153,7 @@ group :test, :development do
gem 'letter_opener', '>= 1.4.1'
gem 'rspec-rails', ">= 3.5.2"
gem 'rspec-retry'
gem 'rswag'
gem 'rswag-specs'
gem 'selenium-webdriver'
gem 'shoulda-matchers'
gem 'timecop'

View File

@@ -24,6 +24,14 @@ 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:
@@ -93,6 +101,11 @@ GEM
rails-html-sanitizer (~> 1.1, >= 1.2.0)
active_model_serializers (0.8.4)
activemodel (>= 3.0)
active_storage_validations (0.9.7)
activejob (>= 5.2.0)
activemodel (>= 5.2.0)
activestorage (>= 5.2.0)
activesupport (>= 5.2.0)
activejob (6.1.4.4)
activesupport (= 6.1.4.4)
globalid (>= 0.3.6)
@@ -150,19 +163,35 @@ GEM
awesome_nested_set (3.4.0)
activerecord (>= 4.0.0, < 7.0)
awesome_print (1.9.2)
aws-eventstream (1.2.0)
aws-partitions (1.570.0)
aws-sdk (1.67.0)
aws-sdk-v1 (= 1.67.0)
aws-sdk-core (3.130.0)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.525.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.55.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.113.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
aws-sdk-v1 (1.67.0)
json (~> 1.4)
nokogiri (~> 1)
aws-sigv4 (1.4.0)
aws-eventstream (~> 1, >= 1.0.2)
axlsx_styler (1.1.0)
activesupport (>= 3.1)
caxlsx (>= 2.0.2)
bcrypt (3.1.16)
bigdecimal (3.0.2)
bindex (0.8.1)
bootsnap (1.9.1)
msgpack (~> 1.0)
bootsnap (1.10.1)
msgpack (~> 1.2)
bugsnag (6.24.1)
concurrent-ruby (~> 1.0)
builder (3.2.4)
@@ -170,7 +199,7 @@ GEM
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
byebug (11.1.3)
cable_ready (5.0.0.pre2)
cable_ready (5.0.0.pre3)
rails (>= 5.2)
thread-local (>= 1.1.0)
cancancan (1.15.0)
@@ -190,10 +219,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)
@@ -238,6 +264,7 @@ GEM
devise-token_authenticatable (1.1.0)
devise (>= 4.0.0, < 5.0.0)
diff-lcs (1.4.4)
digest (3.1.0)
docile (1.4.0)
dotenv (2.7.6)
dotenv-rails (2.7.6)
@@ -322,9 +349,13 @@ GEM
concurrent-ruby (~> 1.0)
i18n-js (3.9.0)
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)
@@ -337,6 +368,8 @@ GEM
json_spec (1.1.5)
multi_json (~> 1.0)
rspec (>= 2.0, < 4.0)
jsonapi-serializer (2.2.0)
activesupport (>= 4.2)
jwt (2.3.0)
knapsack (4.0.0)
rake
@@ -356,28 +389,26 @@ GEM
marcel (1.0.2)
matrix (0.4.2)
method_source (1.0.0)
mime-types (3.3.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.7.1)
mini_portile2 (2.8.0)
mini_racer (0.4.0)
libv8-node (~> 15.14.0.0)
minitest (5.15.0)
monetize (1.11.0)
monetize (1.12.0)
money (~> 6.12)
money (6.14.1)
money (6.16.0)
i18n (>= 0.6.4, <= 2)
msgpack (1.4.2)
multi_json (1.15.0)
multi_xml (0.6.0)
multipart-post (2.1.1)
nio4r (2.5.8)
nokogiri (1.13.1)
mini_portile2 (~> 2.7.0)
nokogiri (1.13.3)
mini_portile2 (~> 2.8.0)
racc (~> 1.4)
oauth2 (1.4.7)
faraday (>= 0.8, < 2.0)
@@ -390,12 +421,6 @@ 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)
@@ -421,7 +446,7 @@ GEM
byebug (~> 11.0)
pry (~> 0.13.0)
public_suffix (4.0.6)
puma (5.5.2)
puma (5.6.2)
nio4r (~> 2.0)
raabro (1.4.0)
racc (1.6.0)
@@ -500,9 +525,6 @@ GEM
builder (>= 3.0)
dry-inflector (~> 0.1)
rubyzip (>= 1.0)
roo (2.8.3)
nokogiri (~> 1)
rubyzip (>= 1.3.0, < 3.0.0)
rspec (3.10.0)
rspec-core (~> 3.10.0)
rspec-expectations (~> 3.10.0)
@@ -526,10 +548,6 @@ GEM
rspec-retry (0.6.2)
rspec-core (> 3.3)
rspec-support (3.10.2)
rswag (2.4.0)
rswag-api (= 2.4.0)
rswag-specs (= 2.4.0)
rswag-ui (= 2.4.0)
rswag-api (2.4.0)
railties (>= 3.1, < 7.0)
rswag-specs (2.4.0)
@@ -556,6 +574,8 @@ GEM
rubocop (>= 1.7.0, < 2.0)
ruby-progressbar (1.11.0)
ruby-rc4 (0.1.5)
ruby-vips (2.1.4)
ffi (~> 1.12)
ruby2_keywords (0.0.4)
rubyzip (2.3.2)
rufus-scheduler (3.7.0)
@@ -679,6 +699,7 @@ PLATFORMS
DEPENDENCIES
actionpack-action_caching
active_model_serializers (= 0.8.4)
active_storage_validations
activemerchant (>= 1.78.0)
activerecord-import
activerecord-postgresql-adapter
@@ -693,12 +714,13 @@ DEPENDENCIES
awesome_nested_set
awesome_print
aws-sdk (= 1.67.0)
aws-sdk-s3
bigdecimal (= 3.0.2)
bootsnap
bugsnag
bullet
byebug
cable_ready (= 5.0.0.pre2)
cable_ready (= 5.0.0.pre3)
cancancan (~> 1.15.0)
capybara
catalog!
@@ -714,6 +736,7 @@ DEPENDENCIES
devise-i18n
devise-token_authenticatable
dfc_provider!
digest
dotenv-rails
factory_bot_rails (= 6.2.0)
ffaker
@@ -731,11 +754,13 @@ DEPENDENCIES
hiredis
i18n
i18n-js (~> 3.9.0)
image_processing
immigrant
jquery-rails (= 4.4.0)
jquery-ui-rails (~> 4.2)
json
json_spec (~> 1.1.4)
jsonapi-serializer
jwt (~> 2.3)
knapsack
letter_opener (>= 1.4.1)
@@ -748,7 +773,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
@@ -768,11 +792,14 @@ DEPENDENCIES
redcarpet
redis (>= 4.0)
responders
rexml
roadie-rails
roo (~> 2.8.3)
roo!
rspec-rails (>= 3.5.2)
rspec-retry
rswag
rswag-api
rswag-specs
rswag-ui
rubocop
rubocop-rails
sd_notify
@@ -805,7 +832,7 @@ DEPENDENCIES
wkhtmltopdf-binary
RUBY VERSION
ruby 2.7.3p183
ruby 3.0.3p157
BUNDLED WITH
2.1.4

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

@@ -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,45 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
else
StatusMessage.display 'failure', t "unsaved_changes_error"
$scope.cancelOrder = (order, sendEmailCancellation) ->
return $http(
method: 'GET'
url: "/admin/orders/#{order.number}/fire?e=cancel&send_cancellation_email=#{sendEmailCancellation}")
$scope.deleteLineItem = (lineItem) ->
if ($scope.confirmDelete && confirm(t "are_you_sure")) || !$scope.confirmDelete
LineItems.delete lineItem
if lineItem.order.item_count == 1
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())
$scope.deleteLineItems = (lineItemsToDelete) ->
existingState = $scope.confirmDelete
$scope.confirmDelete = false
$scope.deleteLineItem lineItem for lineItem in lineItemsToDelete when lineItem.checked
$scope.confirmDelete = existingState
$scope.deleteLineItems = (lineItems) ->
lineItemsToDelete = lineItems.filter (item) -> item.checked
willCancelOrders = false
itemsPerOrder = new Map()
for item in lineItemsToDelete
{ order } = item
if itemsPerOrder.has(order)
itemsPerOrder.get(order).push(item)
else
itemsPerOrder.set(order, [item])
willCancelOrders = true if (order.item_count == itemsPerOrder.get(order).length)
if willCancelOrders
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) ->
@@ -128,29 +158,53 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
$scope.selectedUnitsProduct = unitsProduct
$scope.selectedUnitsVariant = unitsVariant
$scope.getLineItemScale = (lineItem) ->
if lineItem.units_product && lineItem.units_variant && (lineItem.units_product.variant_unit == "weight" || lineItem.units_product.variant_unit == "volume")
lineItem.units_product.variant_unit_scale
else
1
$scope.sumUnitValues = ->
sum = $scope.filteredLineItems?.reduce (sum,lineItem) ->
sum + lineItem.final_weight_volume
sum = $scope.filteredLineItems?.reduce (sum, lineItem) ->
sum + $scope.roundToThreeDecimals(lineItem.final_weight_volume / $scope.getLineItemScale(lineItem))
, 0
$scope.sumMaxUnitValues = ->
sum = $scope.filteredLineItems?.reduce (sum,lineItem) ->
sum + lineItem.max_quantity * lineItem.units_variant.unit_value
sum + lineItem.max_quantity * $scope.roundToThreeDecimals(lineItem.units_variant.unit_value / $scope.getLineItemScale(lineItem))
, 0
$scope.roundToThreeDecimals = (value) ->
Math.round(value * 1000) / 1000
$scope.allFinalWeightVolumesPresent = ->
for i,lineItem of $scope.filteredLineItems
return false if !lineItem.hasOwnProperty('final_weight_volume') || !(lineItem.final_weight_volume > 0)
true
# How is this different to OptionValueNamer#name?
# Should it be extracted to that class or VariantUnitManager?
$scope.formattedValueWithUnitName = (value, unitsProduct, unitsVariant) ->
# A Units Variant is an API object which holds unit properies of a variant
if unitsProduct.hasOwnProperty("variant_unit") && (unitsProduct.variant_unit == "weight" || unitsProduct.variant_unit == "volume") && value > 0
scale = VariantUnitManager.getScale(value, unitsProduct.variant_unit)
Math.round(value/scale * 1000)/1000 + " " + VariantUnitManager.getUnitName(scale, unitsProduct.variant_unit)
$scope.getScale = (unitsProduct, unitsVariant) ->
if unitsProduct.hasOwnProperty("variant_unit") && (unitsProduct.variant_unit == "weight" || unitsProduct.variant_unit == "volume")
unitsProduct.variant_unit_scale
else
null
$scope.getFormattedValueWithUnitName = (value, unitsProduct, unitsVariant, scale) ->
unit_name = VariantUnitManager.getUnitName(scale, unitsProduct.variant_unit)
$scope.roundToThreeDecimals(value) + " " + unit_name
$scope.getGroupBySizeFormattedValueWithUnitName = (value, unitsProduct, unitsVariant) ->
scale = $scope.getScale(unitsProduct, unitsVariant)
if scale
value = value / scale if scale != 28.35 && scale != 1 && scale != 453.6 # divide by scale if not smallest unit
$scope.getFormattedValueWithUnitName(value, unitsProduct, unitsVariant, scale)
else
''
$scope.formattedValueWithUnitName = (value, unitsProduct, unitsVariant) ->
scale = $scope.getScale(unitsProduct, unitsVariant)
if scale
$scope.getFormattedValueWithUnitName(value, unitsProduct, unitsVariant, scale)
else
''
$scope.fulfilled = (sumOfUnitValues) ->
@@ -158,7 +212,9 @@ angular.module("admin.lineItems").controller 'LineItemsCtrl', ($scope, $timeout,
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" )
Math.round( sumOfUnitValues / $scope.selectedUnitsProduct.group_buy_unit_size * 1000)/1000
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

@@ -1,4 +1,4 @@
angular.module('admin.orderCycles').factory 'OrderCycle', ($resource, $window, $timeout, StatusMessage, Panels) ->
angular.module('admin.orderCycles').factory 'OrderCycle', ($resource, $window, $timeout, StatusMessage, Panels, Enterprise) ->
OrderCycleResource = $resource '/admin/order_cycles/:action_name/:order_cycle_id.json', {}, {
'index': { method: 'GET', isArray: true}
'new' : { method: 'GET', params: { action_name: "new" } }
@@ -50,7 +50,14 @@ angular.module('admin.orderCycles').factory 'OrderCycle', ($resource, $window, $
(callback || angular.noop)()
addDistributor: (new_distributor_id, callback) ->
this.order_cycle.outgoing_exchanges.push({ enterprise_id: new_distributor_id, incoming: false, active: true, variants: {}, enterprise_fees: [] })
exchange = { enterprise_id: new_distributor_id, incoming: false, active: true, variants: {}, enterprise_fees: [] }
if (Enterprise.hub_enterprises.length == 1)
editable = this.order_cycle["editable_variants_for_outgoing_exchanges"][new_distributor_id] || []
variants = this.incomingExchangesVariants()
for variant in variants when variant in editable
exchange.variants[variant] = true
this.order_cycle.outgoing_exchanges.push(exchange)
$timeout ->
(callback || angular.noop)()

View File

@@ -37,17 +37,6 @@ angular.module("admin.products").factory "VariantUnitManager", (availableUnits)
options.push [[I18n.t('items'), 'items']]
options = [].concat options...
@getScale: (value, unitType) ->
scaledValue = null
validScales = []
unitScales = VariantUnitManager.unitScales(unitType)
validScales.unshift scale for scale in unitScales when value/scale >= 1
if validScales.length > 0
validScales[0]
else
unitScales[0]
@getUnitName: (scale, unitType) ->
if @units[unitType][scale]
@units[unitType][scale]['name']

View File

@@ -43,7 +43,7 @@ angular.module("admin.resources").factory 'OrderCycles', ($q, $injector, OrderCy
angular.extend(@byID[orderCycle.id], orderCycle)
angular.extend(@pristineByID[orderCycle.id], orderCycle)
form.$setPristine() if form?
StatusMessage.display('success', "Order cycles have been updated.")
StatusMessage.display('success', t('order_cycles_bulk_update_notice'))
, (response) =>
if response.data.errors?
StatusMessage.display('failure', response.data.errors[0])

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

@@ -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,38 +66,65 @@ $(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) {
ofnAlert(t("js.admin.orders.cannot_remove_last_item"));
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, restock_item, () => {
var redirectTo = new URL(Spree.routes.cancel_order.toString());
redirectTo.searchParams.append("send_cancellation_email", sendEmailCancellation);
window.location.href = redirectTo.toString();
});
}
});
return;
}
doAdjustItems(shipment_number, variant_id, quantity, inventory_units, restock_item, () => {
window.location.reload();
});
}
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"));
@@ -104,9 +132,9 @@ adjustItems = function(shipment_number, variant_id, quantity){
$.ajax({
type: "PUT",
url: Spree.url(url),
data: { variant_id: variant_id, quantity: new_quantity }
data: data
}).done(function( msg ) {
window.location.reload();
callback();
});
}
}
@@ -158,7 +186,7 @@ addVariantFromStockLocation = function() {
});
}else{
//add to existing shipment
adjustItems(shipment.number, variant_id, quantity);
adjustItems(shipment.number, variant_id, quantity, true);
}
return 1
}
@@ -181,8 +209,54 @@ ofnAlert = function(message) {
$('#custom-alert').show();
}
ofnConfirm = function(callback) {
$('#custom-confirm').data($(event.target).data());
$('#custom-confirm button.confirm').click(callback);
ofnCancelOrderAlert = function(callback, i18nKey) {
if (i18nKey == undefined) {
i18nKey = "js.admin.orders.cancel_the_order_html";
}
$('#custom-confirm .message').html(
` ${t(i18nKey)}
<div class="form">
<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'), $('#restock_items').is(':checked'));
});
$('#custom-confirm button.cancel').click(() => {
$('#custom-confirm').hide();
callback(false)
});
$('#custom-confirm').show();
}
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($('#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

@@ -1,7 +1,11 @@
$(document).ready ->
progressTimer = null
$(document).ajaxStart ->
$("#progress").fadeIn()
progressTimer = setTimeout ->
$("#progress").fadeIn()
, 500
$(document).ajaxStop ->
$("#progress").fadeOut()
clearTimeout(progressTimer) if progressTimer?
$("#progress").stop().hide()

View File

@@ -1,13 +1,10 @@
#= require jsuri
class window.Spree
# Helper function to take a URL and add query parameters to it
@url: (uri, query) ->
if uri.path == undefined
uri = new Uri(uri)
if query
$.each query, (key, value) ->
uri.addQueryParam(key, value)
@url: (uri) ->
if uri.pathname == undefined
uri = new URL(uri.toString())
if Spree.api_key
uri.addQueryParam('token', Spree.api_key)
params = new URLSearchParams(uri.search)
params.append('token', Spree.api_key)
return uri

View File

@@ -2,10 +2,9 @@ root = exports ? this
root.taxon_tree_menu = (obj, context) ->
base_url = Spree.url(Spree.routes.taxonomy_taxons_path)
admin_base_url = Spree.url(Spree.routes.admin_taxonomy_taxons_path)
edit_url = admin_base_url.clone()
edit_url.setPath(edit_url.path() + '/' + obj.attr("id") + "/edit");
base_url = Spree.url(Spree.routes.taxonomy_taxons)
admin_base_url = Spree.url(Spree.routes.admin_taxonomy_taxons)
edit_url = Spree.url(Spree.routes.admin_taxonomy_taxons + '/' + obj.attr("id") + "/edit");
create:
label: "<i class='icon-plus'></i> " + Spree.translations.add,

View File

@@ -9,7 +9,7 @@ handle_move = (e, data) ->
new_parent = data.rslt.np
url = Spree.url(base_url).clone()
url.setPath url.path() + '/' + node.attr("id")
url.pathname = url.pathname + '/' + node.attr("id")
$.ajax
type: "POST",
dataType: "json",
@@ -41,7 +41,7 @@ handle_rename = (e, data) ->
name = data.rslt.new_name
url = Spree.url(base_url).clone()
url.setPath(url.path() + '/' + node.attr("id"))
url.pathname = url.pathname + '/' + node.attr("id")
$.ajax
type: "POST",
@@ -70,10 +70,10 @@ root = exports ? this
root.setup_taxonomy_tree = (taxonomy_id) ->
if taxonomy_id != undefined
# this is defined within admin/taxonomies/edit
root.base_url = Spree.url(Spree.routes.taxonomy_taxons_path)
root.base_url = Spree.url(Spree.routes.taxonomy_taxons)
$.ajax
url: base_url.path().replace("/taxons", "/jstree"),
url: base_url.pathname.replace("/taxons", "/jstree"),
success: (taxonomy) ->
last_rollback = null
@@ -82,7 +82,7 @@ root.setup_taxonomy_tree = (taxonomy_id) ->
data: taxonomy,
ajax:
url: (e) ->
base_url.path() + '/' + e.attr('id') + '/jstree'
base_url.pathname + '/' + e.attr('id') + '/jstree'
themes:
theme: "apple",
url: "/assets/jquery.jstree/themes/apple/style.css"

View File

@@ -16,7 +16,7 @@ angular.module("admin.subscriptions").controller "DetailsController", ($scope, $
return if !newValue?
paymentMethod = ($scope.paymentMethods.filter (pm) -> pm.id == newValue)[0]
return unless paymentMethod?
$scope.cardRequired = (paymentMethod.type == "Spree::Gateway::StripeConnect" || paymentMethod.type == "Spree::Gateway::StripeSCA")
$scope.cardRequired = paymentMethod.type == "Spree::Gateway::StripeSCA"
$scope.loadCustomer() if $scope.cardRequired && !$scope.customer
$scope.loadCustomer = ->

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

@@ -56,7 +56,8 @@
#= require_tree .
document.addEventListener "turbo:load", ->
window.injector = angular.bootstrap document.body, ["Darkswarm"]
try
window.injector = angular.bootstrap document.body, ["Darkswarm"]
true
document.addEventListener "turbo:before-render", ->

View File

@@ -1,19 +0,0 @@
angular.module('Darkswarm').controller "ForgotCtrl", ($scope, $http, $location, AuthenticationService) ->
$scope.path = "/forgot"
$scope.sent = false
$scope.submit = ->
if $scope.spree_user.email != null
$http.post("/user/spree_user/password", {spree_user: $scope.spree_user}).then (response)->
$scope.sent = true
.catch (response) ->
$scope.errors = response.data.error
$scope.user_unconfirmed = (response.status == 401)
else
$scope.errors = t 'email_required'
$scope.resend_confirmation = ->
$http.post("/user/spree_user/confirmation", {spree_user: $scope.spree_user, return_url: $location.absUrl()}).then (response)->
$scope.messages = t('devise.confirmations.send_instructions')
.catch (response) ->
$scope.errors = t('devise.confirmations.failed_to_send')

View File

@@ -1,36 +0,0 @@
angular.module('Darkswarm').controller "LoginCtrl", ($scope, $timeout, $location, $http, $window, AuthenticationService, Redirections, Loading) ->
$scope.path = "/login"
$scope.modalMessage = null
$scope.$watch (->
AuthenticationService.modalMessage
), (newValue) ->
$scope.errors = newValue
$scope.submit = ->
Loading.message = t 'logging_in'
$http.post("/user/spree_user/sign_in", {spree_user: $scope.spree_user}).then (response)->
if window._paq
window._paq.push(['trackEvent', 'Signin/Signup', 'Login Submit Success', $location.absUrl()]);
if Redirections.after_login
$window.location.href = $window.location.origin + Redirections.after_login
else
$window.location.href = $window.location.origin + $window.location.pathname # Strips out hash fragments
.catch (response) ->
Loading.clear()
$scope.errors = response.data.message || response.data.error
$scope.user_unconfirmed = (response.data.error == t('devise.failure.unconfirmed'))
$scope.resend_confirmation = ->
$http.post("/user/spree_user/confirmation", {spree_user: $scope.spree_user, return_url: $location.absUrl()}).then (response)->
$scope.messages = t('devise.confirmations.send_instructions')
.catch (response) ->
$scope.errors = t('devise.confirmations.failed_to_send')
$timeout ->
if angular.isDefined($location.search()['validation'])
if $location.search()['validation'] == 'confirmed'
$scope.messages = t('devise.confirmations.confirmed')
if $location.search()['validation'] == 'not_confirmed'
$scope.errors = t('devise.confirmations.not_confirmed')

View File

@@ -1,17 +0,0 @@
angular.module('Darkswarm').controller "SignupCtrl", ($scope, $http, $window, $location, Redirections, AuthenticationService) ->
$scope.path = "/signup"
$scope.spree_user.password_confirmation = ''
$scope.errors =
email: null
password: null
$scope.submit = ->
$http.post("/user/spree_user", {spree_user: $scope.spree_user, return_url: $location.absUrl()}).then (response)->
$scope.errors = {email: null, password: null}
$scope.messages = t('devise.user_registrations.spree_user.signed_up_but_unconfirmed')
if window._paq
window._paq.push(['trackEvent', 'Signin/Signup', 'Signup Submit Success', $location.absUrl()]);
.catch (response) ->
$scope.errors = response.data

View File

@@ -1,12 +0,0 @@
angular.module('Darkswarm').controller "AuthenticationCtrl", ($scope, AuthenticationService, SpreeUser)->
$scope.open = AuthenticationService.open
$scope.toggle = AuthenticationService.toggle
$scope.spree_user = SpreeUser.spree_user
$scope.isActive = AuthenticationService.isActive
$scope.select = AuthenticationService.select
$scope.tabs =
login: { active: $scope.isActive('/login') }
signup: { active: $scope.isActive('/signup') }
forgot: { active: $scope.isActive('/forgot') }

View File

@@ -1,4 +1,4 @@
angular.module('Darkswarm').controller "CheckoutCtrl", ($scope, localStorageService, Checkout, CurrentUser, CurrentHub, AuthenticationService, SpreeUser, $http) ->
angular.module('Darkswarm').controller "CheckoutCtrl", ($scope, localStorageService, Checkout, CurrentUser, CurrentHub, $http) ->
$scope.Checkout = Checkout
$scope.submitted = false
@@ -35,14 +35,9 @@ angular.module('Darkswarm').controller "CheckoutCtrl", ($scope, localStorageServ
$scope.$broadcast 'purchaseFormInvalid', $scope.formdata
$scope.ensureUserIsGuest = (callback = null) ->
$http.post("/user/registered_email", {email: $scope.order.email}).then (response)->
if response.data.registered == true
$scope.promptLogin()
else
$http.post("/user/registered_email", {email: $scope.order.email})
.then (response)->
window.CableReady.perform(response.data)
.catch ->
$scope.validateForm() if $scope.submitted
callback() if callback
$scope.promptLogin = ->
SpreeUser.spree_user.email = $scope.order.email
AuthenticationService.pushMessage t('devise.failure.already_registered')
AuthenticationService.open '/login'

View File

@@ -1,4 +1,4 @@
angular.module('Darkswarm').controller "DetailsCtrl", ($scope, $timeout, $http, CurrentUser, AuthenticationService, SpreeUser, $controller) ->
angular.module('Darkswarm').controller "DetailsCtrl", ($scope, $timeout, $http, CurrentUser, SpreeUser, $controller) ->
angular.extend this, $controller('FieldsetMixin', {$scope: $scope})
$scope.name = "details"

View File

@@ -67,7 +67,7 @@ angular.module('Darkswarm').controller "ProductsCtrl", ($scope, $sce, $filter, $
page: page || $scope.page,
per_page: $scope.per_page,
'q[name_or_meta_keywords_or_variants_display_as_or_variants_display_name_or_supplier_name_cont]': $scope.query,
'q[properties_id_or_supplier_properties_id_in_any][]': $scope.activeProperties,
'q[with_properties][]': $scope.activeProperties,
'q[primary_taxon_id_in_any][]': $scope.activeTaxons
}

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,11 +0,0 @@
angular.module('Darkswarm').directive 'auth', (AuthenticationService) ->
restrict: 'A'
link: (scope, elem, attrs) ->
elem.bind "click", ->
AuthenticationService.open '/' + attrs.auth
window.addEventListener "login:modal:open", ->
AuthenticationService.open '/login'
scope.$on "$destroy", ->
window.removeEventListener "login:modal:open"

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

@@ -1,8 +1,6 @@
angular.module('Darkswarm').directive "shippingTypeSelector", ->
# Builds selector for shipping types
restrict: 'E'
replace: true
templateUrl: 'shipping_type_selector.html'
restrict: 'C'
link: (scope, elem, attr)->
scope.shippingTypes =
pickup: false

View File

@@ -1,7 +0,0 @@
angular.module('Darkswarm').directive "shopVariant", ->
restrict: 'E'
replace: true
templateUrl: 'shop_variant.html'
scope:
variant: '='
controller: 'ShopVariantCtrl'

View File

@@ -9,7 +9,7 @@ angular.module('Darkswarm').directive "stripeElements", ($injector, StripeElemen
if $injector.has('stripeObject')
stripe = $injector.get('stripeObject')
card = stripe.elements().create 'card',
card = stripe.elements({ locale: I18n.base_locale }).create 'card',
hidePostalCode: true
style:
base:

View File

@@ -1,54 +0,0 @@
# This class deals with displaying things in the login modal. It chooses
# the modal tab templates and deals with switching tabs and passing data
# between the tabs. It has direct access to the instance of the login modal,
# and provides that access to other controllers as a service.
angular.module('Darkswarm').factory "AuthenticationService", (Navigation, $modal, $location, Redirections, Loading)->
new class AuthenticationService
selectedPath: "/login"
modalMessage: null
constructor: ->
if $location.path() in ["/login", "/signup", "/forgot"] || location.pathname is '/register/auth'
@open @initialTab(), @initialTemplate()
open: (path = false, template = 'authentication.html') =>
@modalInstance = $modal.open
templateUrl: template
windowClass: "login-modal medium"
@modalInstance.result.then @close, @close
@selectedPath = path || @selectedPath
Navigation.navigate @selectedPath
# Opens the /login tab if returning from email confirmation,
# the /signup tab if opened from the enterprise registration page,
# otherwise opens whichever tab is selected in the URL params ('/login', '/signup', or '/forgot')
initialTab: ->
if angular.isDefined($location.search()['validation'])
'/login'
else if location.pathname is '/register/auth'
'/signup'
else
$location.path()
# Loads the registration page modal when needed, otherwise the default modal
initialTemplate: ->
if location.pathname is '/register/auth'
'registration_authentication.html'
else
'authentication.html'
pushMessage: (message) ->
@modalMessage = String(message)
select: (path)=>
@selectedPath = path
Navigation.navigate @selectedPath
isActive: Navigation.isActive
close: ->
if location.pathname in ["/register", "/register/auth"]
Loading.message = t 'going_back_to_home_page'
location.hash = ""
location.pathname = "/"

View File

@@ -1,3 +0,0 @@
angular.module('Darkswarm').factory "Redirections", ($location)->
new class Redirections
after_login: $location.search().after_login

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

@@ -6,6 +6,6 @@
.sixteen.columns.alpha#loading{ 'ng-show' => 'productsLoading()' }
%br
%img.spinner{ src: image_path("/spinning-circles.svg")}
%i.spinner.fa.fa-spin.fa-circle-o-notch
%h1
{{ 'js.admin.panels.exchange_products.loading_variants' | t }}

View File

@@ -21,5 +21,4 @@
%input.button{ type: 'submit', value: "{{ 'js.admin.order_cycles.schedules.update_schedule' | t }}", ng: { show: 'schedule.id' } }
%span{ ng: { show: 'schedule.id' } } or
%input.button.red{ type: 'button', value: "{{ 'js.admin.order_cycles.schedules.delete_schedule' | t }}", ng: { show: 'schedule.id', click: 'delete()'} }
or
%input.button{ type: 'button', value: "{{ 'actions.cancel' | t }}", ng: { click: 'close()' } }

View File

@@ -1,4 +1,3 @@
%div{ ng: { show: "data.length > limit" } }
%input{ type: 'button', value: t(:show_more), ng: { click: 'limit = limit + increment' } }
or
%input{ type: 'button', value: t(:show_all_with_more, num: '{{ data.length - limit }}'), ng: { click: 'limit = data.length' } }

View File

@@ -1,7 +0,0 @@
%div{"ng-controller" => "AuthenticationCtrl"}
%tabset
%ng-include{src: "'login.html'"}
%ng-include{src: "'signup.html'"}
%ng-include{src: "'forgot.html'"}
%a.close-reveal-modal{"ng-click" => "$close()"}
%i.ofn-i_009-close

View File

@@ -1,31 +0,0 @@
%tab#forgot{ heading: "{{'forgot_password' | t}}", active: "tabs.forgot.active", select: "select(path)"}
%form{ ng: { controller: "ForgotCtrl", submit: "submit()" } }
.row
.large-12.columns
.alert-box.success{"ng-show" => "sent"}
{{ 'password_reset_sent' | t }}
.alert-box.success{"ng-show" => "messages != null"}
{{ messages }}
.alert-box.alert{"ng-show" => "errors != null"}
{{ errors }}
%a{ng: {show: 'user_unconfirmed', click: 'resend_confirmation()'}}
= t('devise.confirmations.resend_confirmation_email')
.row
.large-12.columns
%label{for: "email"} {{'signup_email' | t}}
%input.title.input-text{name: "email",
type: "email",
id: "email",
tabindex: 1,
inputmode: "email",
"ng-model" => "spree_user.email"}
.row
.large-12.columns
%input.button.primary{name: "commit",
tabindex: "3",
type: "submit",
value: "{{'reset_password' | t}}"}

View File

@@ -1,48 +0,0 @@
%tab#login-content{ heading: "{{'label_login' | t}}", active: "tabs.login.active", select: "select(path)"}
%form{ ng: { controller: "LoginCtrl", submit: "submit()" } }
.row
.large-12.columns
.alert-box.alert{"ng-show" => "errors != null"}
{{ errors }}
%a{ng: {show: 'user_unconfirmed', click: 'resend_confirmation()'}}
= t('devise.confirmations.resend_confirmation_email')
.alert-box.success{ng: {show: 'messages != null'}}
{{ messages }}
.row
.large-12.columns
%label{for: "email"} {{'email' | t}}
%input.title.input-text{name: "email",
type: "email",
id: "email",
tabindex: "1",
inputmode: "email",
"ng-model" => "spree_user.email"}
.row
.large-12.columns
%label{for: "password"} {{'password' | t}}
%input.title.input-text{name: "password",
type: "password",
id: "password",
autocomplete: "off",
tabindex: "2",
inputmode: "password",
"ng-model" => "spree_user.password"}
.row
.large-12.columns
%input{name: "remember_me",
type: "checkbox",
id: "remember_me",
value: "1",
tabindex: "3",
"ng-model" => "spree_user.remember_me"}
%label{for: "remember_me"} {{'remember_me' | t}}
.row
.large-12.columns
%input.button.primary{name: "commit",
tabindex: "4",
type: "submit",
value: "{{'label_login' | t}}"}
:javascript
if (window._paq) {
window._paq.push(['trackEvent', 'Signin/Signup', 'Login Modal View', window.location.href]);
}

View File

@@ -1,17 +0,0 @@
.container
.row.modal-centered
%h2 {{'js.registration.welcome_to_ofn' | t}}
%h5 {{'js.registration.signup_or_login' | t}}:
%div{"ng-controller" => "AuthenticationCtrl"}
%tabset
%ng-include{src: "'signup.html'"}
%ng-include{src: "'login.html'"}
%ng-include{src: "'forgot.html'"}
%div{ ng: { show: "active('/signup')"} }
%hr
{{'js.registration.have_an_account' | t}}
%a{ href: "", ng: { click: "select('/login')"}}
{{'js.registration.action_login' | t}}
%a.close-reveal-modal{"ng-click" => "$close()"}
%i.ofn-i_009-close

View File

@@ -1,4 +0,0 @@
%ul.small-block-grid-2.medium-block-grid-4.large-block-grid-2
%active-selector{"ng-repeat" => "(name, selector) in selectors"}
%i{"ng-class" => "selector.icon"}
{{ selector.translation_key | t | capitalize }}

View File

@@ -1,23 +0,0 @@
.variants.row
.small-4.medium-4.large-5.columns.variant-name
.inline{"ng-if" => "::variant.display_name"} {{ ::variant.display_name }}
.variant-unit {{ ::variant.unit_to_display }}
.small-3.medium-3.large-2.columns.variant-price
%price-breakdown{"price-breakdown" => "_", variant: "variant",
"price-breakdown-append-to-body" => "true",
"price-breakdown-placement" => "bottom",
"price-breakdown-animation" => true}
{{ variant.price_with_fees | localizeCurrency }}
.unit-price.variant-unit-price
%question-mark-with-tooltip{"question-mark-with-tooltip" => "_",
"question-mark-with-tooltip-append-to-body" => "true",
"question-mark-with-tooltip-placement" => "top",
"question-mark-with-tooltip-animation" => true,
key: "'js.shopfront.unit_price_tooltip'"}
{{ variant.unit_price_price | localizeCurrency }}&nbsp;/&nbsp;{{ variant.unit_price_unit }}
.medium-2.large-2.columns.total-price
%span{"ng-class" => "{filled: variant.line_item.total_price}"}
{{ variant.line_item.total_price | localizeCurrency }}
%ng-include{src: "'partials/shop_variant_no_group_buy.html'"}
%ng-include{src: "'partials/shop_variant_with_group_buy.html'"}

View File

@@ -1,51 +0,0 @@
%tab#sign-up-content{ heading: "{{'label_signup' | t}}", active: 'tabs.signup.active', select: "select(path)"}
%form{ ng: { controller: "SignupCtrl", submit: "submit()" } }
.row
.large-12.columns
.alert-box.success{ng: {show: 'messages != null'}}
{{ messages }}
.large-12.columns
.alert-box.alert{ng: {show: 'errors.message != null'}}
{{ errors.message }}
.row
.large-12.columns
%label{for: "email"} {{'signup_email' | t}}
%input.title.input-text{name: "email",
type: "email",
id: "email",
tabindex: 1,
inputmode: "email",
"ng-model" => "spree_user.email"}
%span.error{"ng-show" => "errors.email != null"}
{{ errors.email.join(' ') }}
.row
.large-12.columns
%label{for: "password"} {{'choose_password' | t}}
%input.title.input-text{name: "password",
type: "password",
id: "password",
autocomplete: "off",
tabindex: 2,
inputmode: "password",
"ng-model" => "spree_user.password"}
%span.error{"ng-show" => "errors.password != null"}
{{ errors.password.join(' ') }}
.row
.large-12.columns
%label{for: "password_confirmation"} {{'confirm_password' | t}}
%input.title.input-text{name: "password_confirmation",
type: "password",
id: "password_confirmation",
autocomplete: "off",
tabindex: 2,
inputmode: "password",
"ng-model" => "spree_user.password_confirmation"}
%span.error{"ng-show" => "errors.password_confirmation != null"}
{{ errors.password_confirmation.join(' ') }}
.row
.large-12.columns
%input.button.primary{name: "commit",
tabindex: "3",
type: "submit",
value: "{{'action_signup' | t}}"}

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

@@ -2,10 +2,10 @@
class SplitCheckoutConstraint
def matches?(request)
Flipper.enabled? :split_checkout, current_user(request)
OpenFoodNetwork::FeatureToggle.enabled? :split_checkout, current_user(request)
end
def current_user(request)
@spree_current_user ||= request.env['warden'].user
request.env['warden'].user
end
end

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

@@ -99,7 +99,7 @@ module Admin
def customer_params
params.require(:customer).permit(
:enterprise_id, :name, :email, :code, :tag_list,
:enterprise_id, :first_name, :last_name, :email, :code, :tag_list,
ship_address_attributes: PermittedAttributes::Address.attributes,
bill_address_attributes: PermittedAttributes::Address.attributes,
)

View File

@@ -234,8 +234,10 @@ module Admin
end
def update_enterprise_notifications
if params.key? :receives_notifications
@enterprise.update_contact params[:receives_notifications]
user_id = params[:receives_notifications].to_i
if user_id.positive? && @enterprise.user_ids.include?(user_id)
@enterprise.update_contact(user_id)
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,23 @@ 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]
end
end
@report_subtypes = report_subtypes
@report_subtype = report_subtype
def load_form_options
return unless form_options_required?
# Initialize data
params[:display_summary_row] = true if request.get?
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

@@ -16,15 +16,16 @@ module Admin
respond_to do |format|
format.html do
if view_context.subscriptions_setup_complete?(@shops)
@order_cycles = OrderCycle.joins(:schedules).managed_by(spree_current_user)
@payment_methods = Spree::PaymentMethod.managed_by(spree_current_user)
@order_cycles = OrderCycle.joins(:schedules).managed_by(spree_current_user).includes([:distributors, :cached_incoming_exchanges])
@payment_methods = Spree::PaymentMethod.managed_by(spree_current_user).includes(:taggings)
@payment_method_tags = payment_method_tags_by_id
@shipping_methods = Spree::ShippingMethod.managed_by(spree_current_user)
else
@shop = @shops.first
render :setup_explanation
end
end
format.json { render_as_json @collection, ams_prefix: params[:ams_prefix] }
format.json { render_as_json @collection, ams_prefix: params[:ams_prefix], payment_method_tags: payment_method_tags_by_id }
end
end
@@ -165,5 +166,21 @@ module Admin
@subscription_params ||= PermittedAttributes::Subscription.new(params).call.
to_h.with_indifferent_access
end
def payment_method_tags_by_id
payment_method_tags = ::ActsAsTaggableOn::Tag.
joins(:taggings).
includes(:taggings).
where(taggings: { taggable_type: "Spree::PaymentMethod",
taggable_id: Spree::PaymentMethod.from(Enterprise.managed_by(spree_current_user).
select('enterprises.id').find_by(id: params[:enterprise_id])),
context: 'tags' })
payment_method_tags.each_with_object({}) do |tag, hash|
payment_method_id = tag.taggings.first.taggable_id
hash[payment_method_id] ||= []
hash[payment_method_id] << tag.name
end
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

@@ -81,8 +81,7 @@ module Api
def permitted_ransack_params
[:name_or_meta_keywords_or_variants_display_as_or_variants_display_name_or_supplier_name_cont,
:properties_id_or_supplier_properties_id_in_any,
:primary_taxon_id_in_any]
:with_properties, :primary_taxon_id_in_any]
end
def distributor

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

@@ -79,8 +79,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

@@ -0,0 +1,119 @@
# frozen_string_literal: true
module Api
module V1
class BaseController < ActionController::API
include CanCan::ControllerAdditions
include RequestTimeouts
include Pagy::Backend
include JsonApiPagination
include RaisingParameters
check_authorization
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
rescue_from ActiveRecord::RecordNotFound, with: :not_found
rescue_from Pagy::VariableError, with: :invalid_pagination
rescue_from ActionController::ParameterMissing, with: :missing_parameter
rescue_from ActionController::UnpermittedParameters, with: :unpermitted_parameters
private
def authenticate_user
return if (@current_api_user = request.env['warden'].user)
if api_key.blank?
# An anonymous user
@current_api_user = Spree::User.new
return
end
return if (@current_api_user = Spree::User.find_by(spree_api_key: api_key.to_s))
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
def api_key
request.headers["X-Api-Token"] || params[:token]
end
def error_during_processing(exception)
Bugsnag.notify(exception)
if Rails.env.development? || Rails.env.test?
render status: :unprocessable_entity,
json: json_api_error(exception.message, meta: exception.backtrace)
else
render status: :unprocessable_entity,
json: json_api_error(I18n.t(:unknown_error, scope: "api"))
end
end
def invalid_pagination(exception)
render status: :unprocessable_entity,
json: json_api_error(exception.message)
end
def missing_parameter(error)
message = I18n.t(:missing_parameter, param: error.param, scope: :api)
render status: :unprocessable_entity,
json: json_api_error(message)
end
def unpermitted_parameters(error)
message = I18n.t(:unpermitted_parameters, params: error.params.join(", "), scope: :api)
render status: :unprocessable_entity,
json: json_api_error(message)
end
def invalid_resource!(resource = nil)
render status: :unprocessable_entity,
json: json_api_invalid(
I18n.t(:invalid_resource, scope: "api"),
resource&.errors
)
end
def invalid_api_key
render status: :unauthorized,
json: json_api_error(I18n.t(:invalid_api_key, key: api_key, scope: "api"))
end
def unauthorized
render status: :unauthorized,
json: json_api_error(I18n.t(:unauthorized, scope: "api"))
end
def not_found
render status: :not_found,
json: json_api_error(I18n.t(:resource_not_found, scope: "api"))
end
def json_api_error(message, **options)
{ errors: [{ detail: message }] }.merge(options)
end
def json_api_invalid(message, errors)
error_response = { errors: [{ detail: message }] }
error_response.merge!(meta: { validation_errors: errors.to_a }) if errors.any?
error_response
end
end
end
end

View File

@@ -0,0 +1,136 @@
# frozen_string_literal: true
require 'open_food_network/permissions'
module Api
module V1
class CustomersController < Api::V1::BaseController
skip_authorization_check only: :index
before_action :set_customer, only: [:show, :update, :destroy]
before_action :authorize_action, only: [:show, :update, :destroy]
def index
@pagy, customers = pagy(search_customers, pagy_options)
render json: Api::V1::CustomerSerializer.new(customers, pagination_options)
end
def show
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)
if @customer.save
render json: Api::V1::CustomerSerializer.new(@customer), status: :created
else
invalid_resource! @customer
end
end
def update
if @customer.update(customer_params)
render json: Api::V1::CustomerSerializer.new(@customer)
else
invalid_resource! @customer
end
end
def destroy
if @customer.destroy
render json: Api::V1::CustomerSerializer.new(@customer)
else
invalid_resource! @customer
end
end
private
def set_customer
@customer = Customer.find(params[:id])
end
def authorize_action
authorize! action_name.to_sym, @customer
end
def search_customers
customers = visible_customers.includes(:bill_address, :ship_address)
customers = customers.where(enterprise_id: params[:enterprise_id]) if params[:enterprise_id]
customers.ransack(params[:q]).result
end
def visible_customers
current_api_user.customers.or(
Customer.where(enterprise_id: editable_enterprises)
)
end
def customer_params
attributes = params.require(:customer).permit(
:email, :enterprise_id,
:code, :first_name, :last_name,
:billing_address, shipping_address: [
:phone, :latitude, :longitude,
:first_name, :last_name,
:street_address_1, :street_address_2,
:postal_code, :locality, :region, :country,
]
).to_h
attributes.merge!(tag_list: params[:tags]) if params.key?(:tags)
transform_address!(attributes, :billing_address, :bill_address)
transform_address!(attributes, :shipping_address, :ship_address)
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
def include_options
fields = [params.fetch(:include, [])].flatten
{ include: fields.map(&:to_s) }
end
end
end
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
@@ -37,8 +38,8 @@ class ApplicationController < ActionController::Base
include Spree::Core::ControllerHelpers::RespondWith
include Spree::Core::ControllerHelpers::Common
prepend_before_action :restrict_iframes
before_action :set_cache_headers # prevent cart emptying via cache when using back button #1213
before_action :set_after_login_url
include RawParams
include EnterprisesHelper
@@ -62,15 +63,11 @@ class ApplicationController < ActionController::Base
end
def set_checkout_redirect
referer_path = OpenFoodNetwork::RefererParser.path(request.referer)
if referer_path
is_checkout_path_the_referer = [main_app.checkout_path].include?(referer_path)
session["spree_user_return_to"] = if is_checkout_path_the_referer
referer_path
else
main_app.root_path
end
end
referer_path = URI(request.referer.to_s).path
return unless referer_path == main_app.checkout_path ||
referer_path == main_app.checkout_step_path(:details)
session["spree_user_return_to"] = main_app.checkout_path
end
def shopfront_session
@@ -103,27 +100,20 @@ class ApplicationController < ActionController::Base
private
def set_after_login_url
store_location_for(:spree_user, params[:after_login]) if params[:after_login]
end
def shopfront_redirect
session[:shopfront_redirect]
end
def restrict_iframes
response.headers['X-Frame-Options'] = 'DENY'
response.headers['Content-Security-Policy'] = "frame-ancestors 'none'"
end
def enable_embedded_shopfront
embed_service = EmbeddedPageService.new(params, session, request, response)
embed_service.embed!
@shopfront_layout = 'embedded' if embed_service.use_embedded_layout?
end
def action
params[:action].to_sym
end
def require_distributor_chosen
unless @distributor = current_distributor
unless (@distributor = current_distributor)
redirect_to main_app.root_path
false
end
@@ -151,17 +141,6 @@ class ApplicationController < ActionController::Base
!current_distributor.ready_for_checkout?
end
def check_order_cycle_expiry
if current_order_cycle&.closed?
Bugsnag.notify("Notice: order cycle closed during checkout completion", order: current_order)
current_order.empty!
current_order.set_order_cycle! nil
flash[:info] = I18n.t('order_cycle_closed')
redirect_to main_app.shop_path
end
end
# All render calls within the block will be performed with the specified format
# Useful for rendering html within a JSON response, particularly if the specified
# template or partial then goes on to render further partials without specifying

View File

@@ -12,7 +12,6 @@ class BaseController < ApplicationController
include OrderCyclesHelper
before_action :set_locale
before_action :check_order_cycle_expiry
private

View File

@@ -3,11 +3,11 @@
require 'open_food_network/address_finder'
class CheckoutController < ::BaseController
layout 'darkswarm'
include OrderStockCheck
include OrderCompletion
layout 'darkswarm'
helper 'terms_and_conditions'
helper 'checkout'
@@ -26,7 +26,6 @@ class CheckoutController < ::BaseController
before_action :associate_user
before_action :check_authorization
before_action :enable_embedded_shopfront
helper 'spree/orders'
@@ -97,6 +96,7 @@ class CheckoutController < ::BaseController
def checkout_workflow(shipping_method_id)
while @order.state != "complete"
if @order.state == "payment"
update_payment_total
return if redirect_to_payment_gateway
return action_failed if @order.errors.any?
@@ -111,6 +111,11 @@ class CheckoutController < ::BaseController
update_response
end
def update_payment_total
@order.updater.update_totals
@order.updater.update_pending_payment
end
def redirect_to_payment_gateway
return unless selected_payment_method.external_gateway?
return unless (redirect_url = selected_payment_method.external_payment_url(order: @order))

View File

@@ -2,6 +2,7 @@
module CheckoutCallbacks
extend ActiveSupport::Concern
include EnterprisesHelper
included do
# We need pessimistic locking to avoid race conditions.
@@ -14,13 +15,12 @@ module CheckoutCallbacks
prepend_before_action :require_distributor_chosen
before_action :load_order, :associate_user, :load_saved_addresses, :load_saved_credit_cards
before_action :load_shipping_methods, :load_countries, if: -> { params[:step] == "details" }
before_action :load_shipping_methods, if: -> { params[:step] == "details" }
before_action :ensure_order_not_completed
before_action :ensure_checkout_allowed
before_action :handle_insufficient_stock
before_action :check_authorization
before_action :enable_embedded_shopfront
end
private
@@ -47,16 +47,7 @@ module CheckoutCallbacks
end
def load_shipping_methods
@shipping_methods = Spree::ShippingMethod.for_distributor(@order.distributor).order(:name)
end
def load_countries
@countries = available_countries.map { |c| [c.name, c.id] }
@countries_with_states = available_countries.map { |c|
[c.id, c.states.map { |s|
[s.name, s.id]
}]
}
@shipping_methods = available_shipping_methods.sort { |a, b| a.name.casecmp(b.name) }
end
def redirect_to_shop?

View File

@@ -0,0 +1,27 @@
# frozen_string_literal: true
module EmbeddedPages
extend ActiveSupport::Concern
included do
content_security_policy do |policy|
policy.frame_ancestors :self, -> { embed_service.embedding_domain }
end
before_action :enable_embedded_pages
end
private
def enable_embedded_pages
return unless embed_service.use_embedded_layout
@shopfront_layout = 'embedded'
end
def embed_service
@embed_service ||= EmbeddedPageService.
new(params, session, request, response).
tap(&:embed!)
end
end

View File

@@ -0,0 +1,74 @@
# frozen_string_literal: true
module JsonApiPagination
extend ActiveSupport::Concern
DEFAULT_PER_PAGE = 50
MAX_PER_PAGE = 200
def pagination_options
{
is_collection: true,
meta: meta_options,
links: links_options,
}
end
def pagy_options
{ items: final_per_page_value }
end
private
def meta_options
{
pagination: {
results: @pagy.count,
pages: total_pages,
page: current_page,
per_page: final_per_page_value
}
}
end
def links_options
{
self: pagination_url(current_page),
first: pagination_url(1),
prev: pagination_url(previous_page),
next: pagination_url(next_page),
last: pagination_url(total_pages)
}
end
def pagination_url(page_number)
return if page_number.nil?
url_for(only_path: false, params: request.query_parameters.merge(page: page_number))
end
# User-specified value, or DEFAULT_PER_PAGE, capped at MAX_PER_PAGE
def final_per_page_value
(params[:per_page] || DEFAULT_PER_PAGE).to_i.clamp(1, MAX_PER_PAGE)
end
def current_page
(params[:page] || 1).to_i
end
def total_pages
@pagy.pages
end
def previous_page
return nil if current_page < 2
current_page - 1
end
def next_page
return nil if current_page >= total_pages
current_page + 1
end
end

View File

@@ -18,6 +18,17 @@ module OrderStockCheck
redirect_to main_app.cart_path
end
def check_order_cycle_expiry
return unless current_order_cycle&.closed?
Bugsnag.notify("Notice: order cycle closed during checkout completion", order: current_order)
current_order.empty!
current_order.set_order_cycle! nil
flash[:info] = I18n.t('order_cycle_closed')
redirect_to main_app.shop_path
end
private
def sufficient_stock?
@@ -25,7 +36,7 @@ module OrderStockCheck
end
def reset_order_to_cart
return if Flipper.enabled? :split_checkout
return if Flipper.enabled? :split_checkout, spree_current_user
OrderCheckoutRestart.new(@order).call
end

View File

@@ -0,0 +1,23 @@
# frozen_string_literal: true
# The API uses strict parameter checking.
#
# We want to raise errors when unused or unpermitted parameters are given
# to the API. You then know straight away when a parameter isn't used.
module RaisingParameters
extend ActiveSupport::Concern
# ActionController manages this config on a per-class basis. The subclass
# enables us to raise errors only here and not in the rest of the app.
class Parameters < ActionController::Parameters
def self.action_on_unpermitted_parameters
:raise
end
end
# We override the params method so that we always use the strict parameters.
# We could rename this method if we need access to the orginal as well.
def params
Parameters.new(super.to_unsafe_hash)
end
end

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

@@ -14,7 +14,6 @@ class EnterprisesController < BaseController
prepend_before_action :set_order_cycles, :require_distributor_chosen, :reset_order, only: :shop
before_action :clean_permalink, only: :check_permalink
before_action :enable_embedded_shopfront
respond_to :js, only: :permalink_checker

View File

@@ -1,10 +1,11 @@
# frozen_string_literal: true
class GroupsController < BaseController
include EmbeddedPages
layout 'darkswarm'
def show
enable_embedded_shopfront
@hide_menu = true if @shopfront_layout == 'embedded'
@group = EnterpriseGroup.find_by(permalink: params[:id]) || EnterpriseGroup.find(params[:id])
end

View File

@@ -3,8 +3,6 @@
class HomeController < BaseController
layout 'darkswarm'
before_action :enable_embedded_shopfront
def index
if ContentConfig.home_show_stats
@num_distributors = cached_count('distributors', Enterprise.is_distributor.activated.visible)

View File

@@ -5,10 +5,10 @@ module PaymentGateways
include OrderStockCheck
include OrderCompletion
before_action :enable_embedded_shopfront
before_action :destroy_orphaned_paypal_payments, only: :confirm
before_action :load_checkout_order, only: [:express, :confirm]
before_action :handle_insufficient_stock, only: [:express, :confirm]
before_action :check_order_cycle_expiry, only: [:express, :confirm]
before_action :permit_parameters!
after_action :reset_order_when_complete, only: :confirm

View File

@@ -7,6 +7,7 @@ module PaymentGateways
before_action :load_checkout_order, only: :confirm
before_action :validate_payment_intent, only: :confirm
before_action :check_order_cycle_expiry, only: :confirm
before_action :validate_stock, only: :confirm
def confirm
@@ -46,7 +47,7 @@ module PaymentGateways
return if session[:access_token] || params[:order_token] || spree_current_user
flash[:error] = I18n.t("spree.orders.edit.login_to_view_order")
redirect_to root_path(anchor: "login?after_login=#{request.env['PATH_INFO']}")
redirect_to root_path(anchor: "login", after_login: request.original_fullpath)
end
def validate_stock
@@ -67,12 +68,16 @@ module PaymentGateways
@valid_payment_intent ||= begin
return false unless params["payment_intent"]&.starts_with?("pi_")
@order.state == "payment" &&
last_payment&.state == "requires_authorization" &&
last_payment&.response_code == params["payment_intent"]
order_and_payment_valid?
end
end
def order_and_payment_valid?
@order.state.in?(["payment", "confirmation"]) &&
last_payment&.state == "requires_authorization" &&
last_payment&.response_code == params["payment_intent"]
end
def last_payment
@last_payment ||= OrderPaymentFinder.new(@order).last_payment
end

View File

@@ -9,7 +9,7 @@ class PaymentsController < BaseController
@payment = Spree::Payment.find(params[:id])
authorize! :show, @payment.order
if url = @payment.cvv_response_message
if (url = @payment.cvv_response_message)
redirect_to url
else
redirect_to order_url(@payment.order)
@@ -21,7 +21,9 @@ class PaymentsController < BaseController
def require_logged_in
return if session[:access_token] || spree_current_user
store_location_for :spree_user, request.original_fullpath
flash[:error] = I18n.t("spree.orders.edit.login_to_view_order")
redirect_to main_app.root_path(anchor: "login?after_login=#{request.env['PATH_INFO']}")
redirect_to main_app.root_path(anchor: "/login", after_login: request.original_fullpath)
end
end

View File

@@ -1,9 +1,9 @@
# frozen_string_literal: true
class ProducersController < BaseController
layout 'darkswarm'
include EmbeddedPages
before_action :enable_embedded_shopfront
layout 'darkswarm'
def index
@enterprises = Enterprise

View File

@@ -19,7 +19,7 @@ class RegistrationController < BaseController
def check_user
if spree_current_user.nil?
redirect_to registration_auth_path(anchor: "signup?after_login=#{request.env['PATH_INFO']}")
redirect_to registration_auth_path(anchor: "/signup", after_login: request.original_fullpath)
elsif !spree_current_user.can_own_more_enterprises?
render :limit_reached
end

View File

@@ -3,7 +3,6 @@
class ShopController < BaseController
layout "darkswarm"
before_action :require_distributor_chosen, :set_order_cycles, except: :changeable_orders_alert
before_action :enable_embedded_shopfront
def show
redirect_to main_app.enterprise_shop_path(current_distributor)

View File

@@ -3,8 +3,6 @@
class ShopsController < BaseController
layout 'darkswarm'
before_action :enable_embedded_shopfront
def index
@enterprises = ShopsListService.new.open_shops
end

View File

@@ -8,29 +8,39 @@ class SplitCheckoutController < ::BaseController
include OrderStockCheck
include Spree::BaseHelper
include CheckoutCallbacks
include OrderCompletion
include CablecarResponses
helper 'terms_and_conditions'
helper 'checkout'
helper 'spree/orders'
helper EnterprisesHelper
helper OrderHelper
before_action :set_checkout_redirect
def edit
redirect_to_step unless params[:step]
redirect_to_step_based_on_order unless params[:step]
end
def update
if confirm_order || update_order
return if performed?
clear_invalid_payments
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
@@ -44,14 +54,31 @@ class SplitCheckoutController < ::BaseController
return unless validate_summary! && @order.errors.empty?
@order.customer.touch :terms_and_conditions_accepted_at
return true if redirect_to_payment_gateway
@order.confirm!
order_completion_reset @order
end
def redirect_to_payment_gateway
return unless selected_payment_method&.external_gateway?
return unless (redirect_url = selected_payment_method.external_payment_url(order: @order))
render operations: cable_car.redirect_to(url: redirect_url)
true
end
def selected_payment_method
@selected_payment_method ||= Checkout::PaymentMethodFetcher.new(@order).call
end
def update_order
return if @order.errors.any?
return if params[:confirm_order] || @order.errors.any?
@order.select_shipping_method(params[:shipping_method_id])
@order.update(order_params)
@order.updater.update_totals_and_states
validate_current_step!
@@ -93,10 +120,10 @@ class SplitCheckoutController < ::BaseController
end
def order_params
@order_params ||= Checkout::Params.new(@order, params).call
@order_params ||= Checkout::Params.new(@order, params, spree_current_user).call
end
def redirect_to_step
def redirect_to_step_based_on_order
case @order.state
when "cart", "address", "delivery"
redirect_to checkout_step_path(:details)
@@ -105,7 +132,17 @@ 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
def redirect_to_step
case params[:step]
when "details"
return redirect_to checkout_step_path(:payment)
when "payment"
return redirect_to checkout_step_path(:summary)
end
redirect_to_step_based_on_order
end
end

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