Commit Graph

9982 Commits

Author SHA1 Message Date
Matt-Yorkley
5593da2928 Delete dead code #update_hooks
These hooks allow Spree core to be modified by other gems and apps without changing Spree code. We don't use it. #YAGNI
2021-01-15 16:49:45 +00:00
Andy Brett
f179214920 Merge pull request #6677 from Matt-Yorkley/remove-debugging
Remove debugging code from spec
2021-01-15 08:30:00 -08:00
Matt-Yorkley
8cc4c6a63f Introduce soft-deprecation strategy when modifying tax rates
If an admin changes the amount on a tax rate, and that rate has been used by adjustments in the past, we need to soft-delete and clone it to preserve the data integrity of previous adjustments that were created using that rate.
2021-01-15 13:38:03 +00:00
Matt-Yorkley
c870af8981 Remove debugging output. 2021-01-15 13:21:03 +00:00
Pau Pérez Fabregat
f240402c43 Merge pull request #6654 from Matt-Yorkley/update-without-callbacks
Remove #update_attributes_without_callbacks
2021-01-15 12:24:42 +01:00
Cillian O'Ruanaidh
79668e06a7 Remove ability to create new product from products page, use /admin/products/new instead.
It's simpler if there is just one place to add a new product. Closes #6650

This removes the 'creating directly from the new product path' test scenario because we have another 'assigning important attributes' scenario above which provides enough coverage.
2021-01-15 10:24:50 +00:00
Cillian O'Ruanaidh
110d692ffa Include the 'Ready for' time for the order cycle in the Notify Producers Email
This is so people can distinguish which order cycle the email is referring to. Fixes #6371
2021-01-15 09:24:05 +00:00
Andy Brett
7ca81f45d0 Merge pull request #6641 from Matt-Yorkley/shipping-method-soft-deletion
Ensure ShippingMethod is correctly using soft-deletion
2021-01-14 11:53:19 -08:00
Andy Brett
18dcbbd892 Merge pull request #6613 from Matt-Yorkley/variant-override-serialization
Don't serialize all variant override objects where they are not needed
2021-01-14 10:59:11 -08:00
Pau Pérez Fabregat
9689fe2edf Merge pull request #6384 from andrewpbrett/fix-product-descriptions
correctly display '&' and ' ' in product descriptions
2021-01-14 17:00:16 +01:00
Luis Ramos
fd0bba19a7 Adapt enterprises code and specs to new namespace Sets::EnterpriseSet 2021-01-14 09:41:07 +00:00
Luis Ramos
19b12092a0 Fix rubocop issues and adapt exceptions file 2021-01-14 09:41:07 +00:00
Luis Ramos
5d6d7f7ad0 Adapt enterprise fees code and specs to new namespace of Sets::EnterpriseFeeSet 2021-01-14 09:41:07 +00:00
Luis Ramos
96a351ad0e Adapt usage of Sets to their new location 2021-01-14 09:41:07 +00:00
Luis Ramos
8e65d29b02 Move sets to specific services namespace 2021-01-14 09:41:07 +00:00
Pau Pérez Fabregat
9db4f9be15 Merge pull request #6634 from Matt-Yorkley/jobs-cleanup
Jobs cleanup
2021-01-14 10:08:15 +01:00
Maikel
168958311a Merge pull request #6656 from Matt-Yorkley/payment-identifier
Fix payment identifier generation
2021-01-14 17:34:38 +11:00
Maikel
fbda1fffd7 Merge pull request #6653 from Matt-Yorkley/dead-code-available-payment
Dead code: #has_available_payment
2021-01-14 17:33:07 +11:00
Andy Brett
08d9ef5832 rename spec file; add test for nil content 2021-01-13 21:01:12 -08:00
Maikel Linke
f1618ec35f Remove old spec context
The specs all stay the same, just changing the indent.
2021-01-14 12:05:41 +11:00
Maikel Linke
be229c9002 Simplify email config by removing unused option
Spree used to give you more options to configure ActionMailer but our
setup is much simpler. We can remove unused code.

The removed option was never used by OFN and defaulted to true. We don't
need a database migration because the value isn't set in the database.
2021-01-14 12:05:41 +11:00
Andy Brett
8c4d12a501 limit item counter to max quantity available even if amount is manually filled in 2021-01-13 16:23:41 -08:00
Matt-Yorkley
5f2dc38241 Merge pull request #6098 from brymut/item-counter-fix
Fix #5989 Item counter accepts higher amount than available stock
2021-01-13 22:33:08 +01:00
Andy Brett
c29d57b54e Merge pull request #6369 from Matt-Yorkley/broken-variants
Fix variant data inconsistencies
2021-01-13 11:10:44 -08:00
Matt-Yorkley
9633ddf7ce Add test for variant override symbol and tooltip 2021-01-13 18:19:16 +00:00
Matt-Yorkley
18c9e16303 Fix payment identifier generation
Upstream fix from Spree 2.2.

See: 4e747187d7
2021-01-13 17:37:22 +00:00
Matt-Yorkley
aacd942697 Update specs that stub associations inaccurately
These specs fail if the code is using #sum on stubbed objects that don't respond to it nicely.
2021-01-13 17:32:20 +00:00
Matt-Yorkley
305ae103ce Use :create instead of :build in order updater specs
The order updater requires a persisted order
2021-01-13 17:09:02 +00:00
Matt-Yorkley
8d338a06f3 Delete dead code #has_available_payment
This is removed in Spree 2.2, as it serves no purpose.

See: 0617bdce30
2021-01-13 15:48:02 +00:00
Andy Brett
67e5825739 add specs for content sanitizer 2021-01-11 21:34:59 -08:00
Matt-Yorkley
ca4de40fa2 Associate all adjustments with an order
This change is introduced in the adjustments updates from Spree 2.2 and used heavily in new scopes and methods (not included here).
2021-01-11 17:35:35 +00:00
Matt-Yorkley
46ff247bc9 Ensure ShippingMethod#destroy is using soft-deletion
25f5c2daf8

We've already applied some of the changes in this commit during previous Spree upgrade work, but there were a couple of bits missing.
2021-01-11 15:46:38 +00:00
Pau Perez
dfed20d634 Consider awaiting_return, returned in balance
These states are reached when the order is complete and shipped. An
admin can create a new return authorization, which will set the order in
`awaiting_return` state. It's only after, when we call
`return_authorization#receive` that the return authorization moves to
`received` state and the order to `returned`.

You can do so from the UI by editing the return authorization and
clicking on Receive. However, we didn't find any order in such state in
UK, FR and AU. The UX is quite obfuscated. That must be why no users
clicked on it.

The `returned` state cannot count for the balance as is, since some of
the products are returned to the shop. That's enough for now.
2021-01-11 15:50:19 +01:00
Pau Perez
aa3fc71626 Consider resumed & payment orders in balance
These order states are already taken care of because they fall in the
`WHEN state IS NOT NULL` case.
2021-01-11 15:50:19 +01:00
Pau Perez
5018e88a34 Consider all states prior to checkout in balance 2021-01-11 15:50:19 +01:00
Pau Perez
398467e7ed Hide new balance impl. under feature toggle
This makes it possible to deploy it without releasing it to users since
the toggle is not enabled for anyone.

It aims to make the balance calculation consistent across pages.
2021-01-11 15:50:19 +01:00
Pau Perez
46d997406a Filter out cart orders when fetching customers
We only care about non-cart orders and skipping carts, saves PostgreSQL
query planner to go through thousands of records in production use cases
(my food hub).

We go from

```sql
 ->  Index Scan using index_spree_orders_on_customer_id on spree_orders  (cost=0.42..12049.45 rows=152002 width=15) (actual time=0.015..11.703 rows=13867 loops=1)
```

to

```sql
->  Index Scan using index_spree_orders_on_customer_id on spree_orders  (cost=0.42..12429.46 rows=10802 width=15) (actual time=0.025..17.705 rows=9954 loops=1)
```
2021-01-11 15:50:19 +01:00
Pau Perez
539c5d067a Update order payment_total when voiding a payment
As is, `payment_total` is only increased after successfully processing
a payment and never updated. This inconsistency breaks
`CustomerWithBalance` which relies on it.

Needless to say that if we keep this denormalized column, we better make
it consistent. I investigated current Spree's master branch (709e686cc0)
and they also realized it was broken. Now `Payment` runs the following
from the `after_save` `update_order` callback.

```rb
order.updater.update_payment_total if completed? || void?
```

I also took the chance to rearrange tests a bit.
2021-01-11 15:50:19 +01:00
Pau Perez
04930877dd Test that payment_total is stored after payment
CustomerWithBalance totally relies on `spree_orders.payment_total` so we
better cover it with tests.
2021-01-11 15:50:19 +01:00
Pau Perez
93cdca85c6 Return 0 balance when the customer has no orders 2021-01-11 15:50:19 +01:00
Pau Perez
96a91969c9 Extract balance-specific serializer
So we only show the customer balance where really needed. Aggregating
the balance can be costly. Also, we avoid defensive coding.
2021-01-11 15:50:19 +01:00
Pau Perez
9d0dd968b1 Test customer balance query with guest orders
Guest orders also have an associated customer record that is created
by Spree::Order#ensure_customer at checkout. Subsequent orders will use
that one due to Spree::Order#associate_customer.
2021-01-11 15:50:19 +01:00
Pau Perez
1e9a1f340e Don't consider order total when it is canceled 2021-01-11 15:50:19 +01:00
Pau Perez
d62ab06504 Refactor DB query to aggregate customer balance
It's simpler and many orders of magnitude more efficient to ask the DB
to aggregate the customer balance based on their orders. It removes
a nasty N+1.

The resulting SQL query is:

```sql
SELECT customers.*, SUM(spree_orders.total - spree_orders.payment_total) AS balance
FROM "customers"
INNER JOIN "spree_orders"
    ON "spree_orders"."customer_id" = "customers"."id"
WHERE "customers"."enterprise_id" = 1
    AND (completed_at IS NOT NULL)
    AND (state != 'canceled')
GROUP BY customers.id
ORDER BY email;
```
2021-01-11 15:50:19 +01:00
Andy Brett
ffeea631b3 add spec for exceeding available quantity 2021-01-09 18:49:53 -08:00
Andy Brett
c12abf8057 Merge pull request #6617 from Matt-Yorkley/stock-items-variant-deletion
Stock items and variant deletion
2021-01-09 12:12:24 -08:00
Matt-Yorkley
dd5a197fb3 Remove ManagerInvitationJob 2021-01-09 11:56:27 +00:00
Matt-Yorkley
ca42b1fff7 Remove ConfirmSignupJob 2021-01-09 11:38:29 +00:00
Matt-Yorkley
6a7f795f64 Remove WelcomeEnterpriseJob 2021-01-09 11:33:10 +00:00
Andy Brett
3877721209 Merge pull request #6631 from Matt-Yorkley/actionmailer-deliver
[Deprecation] Replace ActionMailer#deliver with ActionMailer#deliver_now
2021-01-08 17:42:31 -08:00