public function generateVariationsFromAttributes(AttributeType $attributetype, array $values)
    {
        //TODO: introduce transactions here, in case objects get half made etc
        //if product has variation attribute types
        if (!empty($values)) {
            //TODO: get values dataobject set
            $avalues = $attributetype->convertArrayToValues($values);
            $existingvariations = $this->owner->Variations();
            if ($existingvariations->exists()) {
                //delete old variation, and create new ones - to prevent modification of exising variations
                foreach ($existingvariations as $oldvariation) {
                    $oldvalues = $oldvariation->AttributeValues();
                    foreach ($avalues as $value) {
                        $newvariation = $oldvariation->duplicate();
                        $newvariation->InternalItemID = $this->owner->InternalItemID . '-' . $newvariation->ID;
                        $newvariation->AttributeValues()->addMany($oldvalues);
                        $newvariation->AttributeValues()->add($value);
                        $newvariation->write();
                        $existingvariations->add($newvariation);
                    }
                    $existingvariations->remove($oldvariation);
                    $oldvariation->AttributeValues()->removeAll();
                    $oldvariation->delete();
                    $oldvariation->destroy();
                    //TODO: check that old variations actually stick around, as they will be needed for past orders etc
                }
            } else {
                foreach ($avalues as $value) {
                    $variation = Variation::create();
                    $variation->ProductID = $this->owner->ID;
                    $variation->Price = $this->owner->BasePrice;
                    $variation->write();
                    $variation->InternalItemID = $this->owner->InternalItemID . '-' . $variation->ID;
                    $variation->AttributeValues()->add($value);
                    $variation->write();
                    $existingvariations->add($variation);
                }
            }
        }
    }
public function generateVariationsFromAttributes(AttributeType $attributetype, array $values)
    {
        //TODO: introduce transactions here, in case objects get half made etc
        //if product has variation attribute types
        if (!empty($values)) {
            //TODO: get values dataobject set
            $avalues = $attributetype->convertArrayToValues($values);
            $existingvariations = $this->owner->Variations();
            if ($existingvariations->exists()) {
                //delete old variation, and create new ones - to prevent modification of exising variations
                foreach ($existingvariations as $oldvariation) {
                    $oldvalues = $oldvariation->AttributeValues();
                    foreach ($avalues as $value) {
                        $newvariation = $oldvariation->duplicate();
                        $newvariation->InternalItemID = $this->owner->InternalItemID . '-' . $newvariation->ID;
                        $newvariation->AttributeValues()->addMany($oldvalues);
                        $newvariation->AttributeValues()->add($value);
                        $newvariation->write();
                        $existingvariations->add($newvariation);
                    }
                    $existingvariations->remove($oldvariation);
                    $oldvariation->AttributeValues()->removeAll();
                    $oldvariation->delete();
                    $oldvariation->destroy();
                    //TODO: check that old variations actually stick around, as they will be needed for past orders etc
                }
            } else {
                foreach ($avalues as $value) {
                    $variation = Variation::create();
                    $variation->ProductID = $this->owner->ID;
                    $variation->Price = $this->owner->BasePrice;
                    $variation->write();
                    $variation->InternalItemID = $this->owner->InternalItemID . '-' . $variation->ID;
                    $variation->AttributeValues()->add($value);
                    $variation->write();
                    $existingvariations->add($variation);
                }
            }
        }
    }
public function generateVariationsFromAttributes ( AttributeType $ attributetype , array $ values ) { //TODO: introduce transactions here, in case objects get half made etc //if product has variation attribute types if ( ! empty ( $ values ) ) { //TODO: get values dataobject set $ avalues = $ attributetype -> convertArrayToValues ( $ values ) ; $ existingvariations = $ this -> owner -> Variations ( ) ; if ( $ existingvariations -> exists ( ) ) { //delete old variation, and create new ones - to prevent modification of exising variations foreach ( $ existingvariations as $ oldvariation ) { $ oldvalues = $ oldvariation -> AttributeValues ( ) ; foreach ( $ avalues as $ value ) { $ newvariation = $ oldvariation -> duplicate ( ) ; $ newvariation -> InternalItemID = $ this -> owner -> InternalItemID . '-' . $ newvariation -> ID ; $ newvariation -> AttributeValues ( ) -> addMany ( $ oldvalues ) ; $ newvariation -> AttributeValues ( ) -> add ( $ value ) ; $ newvariation -> write ( ) ; $ existingvariations -> add ( $ newvariation ) ; } $ existingvariations -> remove ( $ oldvariation ) ; $ oldvariation -> AttributeValues ( ) -> removeAll ( ) ; $ oldvariation -> delete ( ) ; $ oldvariation -> destroy ( ) ; //TODO: check that old variations actually stick around, as they will be needed for past orders etc } } else { foreach ( $ avalues as $ value ) { $ variation = Variation :: create ( ) ; $ variation -> ProductID = $ this -> owner -> ID ; $ variation -> Price = $ this -> owner -> BasePrice ; $ variation -> write ( ) ; $ variation -> InternalItemID = $ this -> owner -> InternalItemID . '-' . $ variation -> ID ; $ variation -> AttributeValues ( ) -> add ( $ value ) ; $ variation -> write ( ) ; $ existingvariations -> add ( $ variation ) ; } } } }
Generates variations based on selected attributes.

@param  AttributeType $attributetype
@param  array         $values
@throws \SilverStripe\ORM\ValidationException
Generates variations based on selected attributes .