When a Sku is purged, delete it from all carts. Better handling for cartItems whose assets have been deleted. Fixes bug #12213
This commit is contained in:
parent
44f62c9884
commit
3b7dd524db
5 changed files with 32 additions and 4 deletions
|
|
@ -2,6 +2,7 @@
|
|||
- rfe #12207: Thingy. Field_name info returned by www_editThingDataSaveViaAjax
|
||||
- fixed #12206: Bad Subscription Groups in Duplicated Threads
|
||||
- fixed #12208: replacements don't work
|
||||
- fixed #12213: Unable to view cart when an asset is deleted.
|
||||
|
||||
7.10.21
|
||||
- added #9668 extension template variable to attachment loops for the following assets:
|
||||
|
|
|
|||
|
|
@ -628,6 +628,22 @@ sub processStyle {
|
|||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 purge ( )
|
||||
|
||||
Extent the base class to clean out any items using this Sku in all Carts.
|
||||
|
||||
=cut
|
||||
|
||||
sub purge {
|
||||
my $self = shift;
|
||||
my $assetId = $self->getId;
|
||||
my $success = $self->SUPER::purge;
|
||||
return $success unless $success;
|
||||
$self->session->db->write('delete from cartItem where assetId=?',[$assetId]);
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
=head2 setTaxConfiguration ($namespace, $configuration)
|
||||
|
||||
=head3 $namespace
|
||||
|
|
|
|||
|
|
@ -676,8 +676,11 @@ sub requiresShipping {
|
|||
my $self = shift;
|
||||
|
||||
# Look for recurring items in the cart
|
||||
foreach my $item (@{ $self->getItems }) {
|
||||
return 1 if $item->getSku->isShippingRequired;
|
||||
ITEM: foreach my $item (@{ $self->getItems }) {
|
||||
my $sku = $item->getSku;
|
||||
next ITEM unless $sku;
|
||||
return 1 if $sku->isShippingRequired;
|
||||
|
||||
}
|
||||
|
||||
# No recurring items in cart so return false
|
||||
|
|
|
|||
|
|
@ -175,7 +175,8 @@ sub getSku {
|
|||
my ($self) = @_;
|
||||
my $asset = '';
|
||||
$asset = WebGUI::Asset->newByDynamicClass($self->cart->session, $self->get("assetId"));
|
||||
$asset->applyOptions($self->get("options")) if $asset;
|
||||
return undef if ! $asset;
|
||||
$asset->applyOptions($self->get("options"));
|
||||
return $asset;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ use strict;
|
|||
use lib "$FindBin::Bin/../lib";
|
||||
use Test::More;
|
||||
use Test::Deep;
|
||||
use Test::Exception;
|
||||
use Scalar::Util qw/refaddr/;
|
||||
use WebGUI::Test; # Must use this before any other WebGUI modules
|
||||
use WebGUI::Session;
|
||||
|
|
@ -35,7 +36,7 @@ my $i18n = WebGUI::International->new($session, "Shop");
|
|||
#----------------------------------------------------------------------------
|
||||
# Tests
|
||||
|
||||
plan tests => 36; # Increment this number for each test you create
|
||||
plan tests => 38; # Increment this number for each test you create
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# put your tests here
|
||||
|
|
@ -225,3 +226,9 @@ is($cart->delete, undef, "Can destroy cart.");
|
|||
|
||||
$product->purge;
|
||||
|
||||
my $requiresShipping_ok = lives_ok { $cart->requiresShipping; } 'requiresShipping does not die if the asset in the cart has been deleted';
|
||||
|
||||
SKIP: {
|
||||
skip 1, 'requiresShipping died, so skipping' unless $requiresShipping_ok;
|
||||
ok !$cart->requiresShipping, 'Shipping no longer required on a cart with missing assets';
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue