diff --git a/docs/upgrades/upgrade_7.5.10-7.5.11.pl b/docs/upgrades/upgrade_7.5.10-7.5.11.pl index 4a5444af8..d1fc1835a 100644 --- a/docs/upgrades/upgrade_7.5.10-7.5.11.pl +++ b/docs/upgrades/upgrade_7.5.10-7.5.11.pl @@ -808,7 +808,7 @@ EOSQL1 ##Truncate title to 30 chars for short desc #printf "\t\tAdding variant to %s\n", $productData->{title} unless $quiet; my $product = WebGUI::Asset::Sku::Product->new($session, $productData->{assetId}, 'WebGUI::Asset::Sku::Product', $productData->{revisionDate}); - $product->setCollateral('variantsJSON', 'new', { + $product->setCollateral('variantsJSON', 'variantId', 'new', { varSku => ($productData->{productNumber} || $session->id->generate), shortdesc => substr($productData->{title}, 0, 30), price => $productData->{price}, @@ -965,7 +965,7 @@ sub mergeProductsWithCommerce { $variant->{weight} = $variantData->{weight}; $variant->{quantity} = $variantData->{available}; $variant->{shortdesc} = $shortdesc; - $sku->setCollateral('variantsJSON', 'new', $variant); + $sku->setCollateral('variantsJSON', 'variantId', 'new', $variant); } } $productSth->finish; diff --git a/lib/WebGUI/Asset/Sku/Product.pm b/lib/WebGUI/Asset/Sku/Product.pm index 097c6cf1b..5e09d6cb2 100644 --- a/lib/WebGUI/Asset/Sku/Product.pm +++ b/lib/WebGUI/Asset/Sku/Product.pm @@ -671,7 +671,9 @@ sub setCollateral { ##the object cache directly. my $table = $self->getAllCollateral($tableName); if ($keyValue eq 'new' || $keyValue eq '') { - if (! exists $properties->{$keyName} or $properties->{$keyName} eq 'new') { + if (! exists $properties->{$keyName} + or $properties->{$keyName} eq 'new' + or $properties->{$keyName} eq '') { $properties->{$keyName} = $self->session->id->generate; } push @{ $table }, $properties; @@ -893,7 +895,7 @@ sub www_deleteRelatedConfirm { sub www_deleteVariantConfirm { my $self = shift; return $self->session->privilege->insufficient() unless ($self->canEdit); - $self->deleteCollateral('variantsJSON', $self->session->form->process('vid')); + $self->deleteCollateral('variantsJSON', 'variantId', $self->session->form->process('vid')); return ''; } @@ -1076,11 +1078,11 @@ sub www_editVariant { my $vid = shift || $self->session->form->process("vid"); return $self->session->privilege->insufficient() unless ($self->canEdit); my $i18n = WebGUI::International->new($self->session,'Asset_Product'); - my $data = $self->getCollateral("variantsJSON", $vid); + my $data = $self->getCollateral("variantsJSON", 'variantId', $vid); my $f = WebGUI::HTMLForm->new($self->session, -action=>$self->getUrl); $f->hidden( -name => 'func', - -value => "editVariantSave", + -value => 'editVariantSave', ); $f->hidden( -name => 'vid', @@ -1130,14 +1132,20 @@ sub www_editVariant { sub www_editVariantSave { my $self = shift; return $self->session->privilege->insufficient() unless ($self->canEdit); - ##Mandatory variable check - $self->setCollateral('variantsJSON', $self->session->form->process('vid'), { - varSku => $self->session->form->process('varSku', 'text'), - shortdesc => $self->session->form->process('shortdesc', 'text'), - price => $self->session->form->process('price', 'float'), - weight => $self->session->form->process('weight', 'float'), - quantity => $self->session->form->process('quantity', 'integer'), - }); + my $vid = $self->session->form->process('vid', 'text'); + $self->setCollateral( + 'variantsJSON', + 'variantId', + $vid, + { + variantId => $vid, + varSku => $self->session->form->process('varSku', 'text'), + shortdesc => $self->session->form->process('shortdesc', 'text'), + price => $self->session->form->process('price', 'float'), + weight => $self->session->form->process('weight', 'float'), + quantity => $self->session->form->process('quantity', 'integer'), + } + ); return $self->www_view unless($self->session->form->process('proceed')); return $self->www_editVariant('new'); @@ -1227,16 +1235,16 @@ sub www_moveSpecificationUp { sub www_moveVariantDown { my $self = shift; return $self->session->privilege->insufficient() unless ($self->canEdit); - $self->moveCollateralDown("variantsJSON", $self->session->form->process("vid")); - return ""; + $self->moveCollateralDown('variantsJSON', 'variantId', $self->session->form->process('vid')); + return ''; } #------------------------------------------------------------------- sub www_moveVariantUp { my $self = shift; return $self->session->privilege->insufficient() unless ($self->canEdit); - $self->moveCollateralUp("variantsJSON", $self->session->form->process("vid")); - return ""; + $self->moveCollateralUp('variantsJSON', 'variantId', $self->session->form->process('vid')); + return ''; } #------------------------------------------------------------------- @@ -1388,7 +1396,7 @@ sub view { my %variants = (); tie %variants, 'Tie::IxHash'; foreach my $collateral ( @{ $self->getAllCollateral('variantsJSON')} ) { - my $id = $collateral->{collateralIndex}; + my $id = $collateral->{variantId}; $segment = $self->session->icon->delete('func=deleteVariantConfirm&vid='.$id,$self->get('url'),$i18n->get('delete variant confirm')) . $self->session->icon->edit('func=editVariant&vid='.$id,$self->get('url')) . $self->session->icon->moveUp('func=moveVariantUp&vid='.$id,$self->get('url')) diff --git a/t/Asset/Sku/ProductCollateral.t b/t/Asset/Sku/ProductCollateral.t index dd5a67199..33b5b0e94 100644 --- a/t/Asset/Sku/ProductCollateral.t +++ b/t/Asset/Sku/ProductCollateral.t @@ -35,7 +35,7 @@ my $session = WebGUI::Test->session; #---------------------------------------------------------------------------- # Tests -plan tests => 29; # Increment this number for each test you create +plan tests => 32; # Increment this number for each test you create #---------------------------------------------------------------------------- # put your tests here @@ -50,6 +50,7 @@ ok(! exists $product->{_collateral}, 'object cache does not exist yet'); my $vid = $product->setCollateral('variantsJSON', 'vid', 'new', {a => 'aye', b => 'bee'}); isa_ok($product->{_collateral}, 'HASH', 'object cache created for collateral'); +isnt($vid, 'new', 'setCollateral assigns a new id to collateral without one'); ok($session->id->valid($vid), 'a valid id was generated for the new collateral entry'); my $json; @@ -267,11 +268,14 @@ my $product4 = $root->addChild({ title => "Pinch a loaf", }); -my $bareVid = $product4->setCollateral('variantsJSON', 'vid', 'new', { major => 'problem' }); -isnt($bareVid, 'new', 'setCollateral assigns a new id to collateral without one'); +my $newVid; +$newVid = $product4->setCollateral('variantsJSON', 'vid', 'new', { major => 'problem', vid => 'new' }); +isnt($newVid, 'new', 'setCollateral assigns a new id to collateral with an id of "new"...'); +ok($session->id->valid($newVid), '... and it is a valid GUID'); -my $newVid = $product4->setCollateral('variantsJSON', 'vid', 'new', { major => 'problem', vid => 'new' }); -isnt($newVid, 'new', 'setCollateral assigns a new id to collateral with an id of "new"'); +$newVid = $product4->setCollateral('variantsJSON', 'vid', 'new', { major => 'problem', vid => '' }); +isnt($newVid, 'new', 'setCollateral assigns a new id to collateral with an id of ""'); +ok($session->id->valid($newVid), '... and it is a valid GUID'); $product4->purge;