public function testGetProductGroups()
 {
     // new product
     $product = Product::getNewInstance($this->rootCategory, 'test');
     $product->save();
     $groups = array();
     foreach (range(1, 3) as $i) {
         $groups[$i] = ProductRelationshipGroup::getNewInstance($product, ProductRelationship::TYPE_CROSS);
         $groups[$i]->position->set($i);
         $groups[$i]->setValueByLang('name', 'en', 'TEST_GROUP_' . $i);
         $groups[$i]->save();
     }
     $this->assertEqual(count($groups), ProductRelationshipGroup::getProductGroups($product, ProductRelationship::TYPE_CROSS)->getTotalRecordCount());
     $i = 1;
     foreach (ProductRelationshipGroup::getProductGroups($product, ProductRelationship::TYPE_CROSS) as $group) {
         $this->assertTrue($groups[$i] === $group);
         $i++;
     }
 }
Example #2
0
 public function getRelatedProductsWithGroupsArray($type = 0)
 {
     ClassLoader::import('application.model.product.ProductRelationshipGroup');
     return ProductRelationshipGroup::mergeGroupsWithFields($this->getRelationshipGroupArray($type), $this->getRelationshipsArray($type));
 }
 /**
  * @role update
  */
 public function sort()
 {
     $target = $this->request->get('target');
     if (!$target) {
         foreach ($this->request->toArray() as $key => $value) {
             if (is_array($value)) {
                 $target = $key;
                 break;
             }
         }
     }
     $product = Product::getInstanceByID($this->request->get('id'));
     $type = $this->request->get('type');
     preg_match('/_(\\d+)$/', $target, $match);
     // Get group.
     if (substr($target, 0, 8) == 'noGroup_') {
         $match = array();
     }
     foreach ($this->request->get($target, array()) as $position => $key) {
         if (empty($key)) {
             continue;
         }
         $relationship = ProductRelationship::getInstance($product, Product::getInstanceByID((int) $key), $type);
         $relationship->position->set((int) $position);
         if (isset($match[1])) {
             $relationship->productRelationshipGroup->set(ProductRelationshipGroup::getInstanceByID((int) $match[1]));
         } else {
             $relationship->productRelationshipGroup->setNull();
         }
         $relationship->save();
     }
     return new JSONResponse(false, 'success');
 }
Example #4
0
 public function testClone()
 {
     $image = ActiveRecordModel::getNewInstance('ProductImage');
     $image->product->set($this->product);
     $image->save();
     $this->assertSame($image, $this->product->defaultImage->get());
     $numField = SpecField::getNewInstance($this->productCategory, SpecField::DATATYPE_NUMBERS, SpecField::TYPE_NUMBERS_SIMPLE);
     $numField->save();
     $this->product->setAttributeValue($numField, 100);
     $this->product->save();
     $option = ProductOption::getNewInstance($this->product);
     $option->type->set(ProductOption::TYPE_SELECT);
     $option->setValueByLang('name', 'en', 'test');
     $option->save();
     $related = Product::getNewInstance($this->productCategory, 'related');
     $related->save();
     $relGroup = ProductRelationshipGroup::getNewInstance($this->product, ProductRelationship::TYPE_CROSS);
     $relGroup->save();
     $rel = ProductRelationship::getNewInstance($this->product, $related, $relGroup);
     $rel->save();
     $this->assertEquals(1, $this->product->getRelationships()->size());
     $cloned = clone $this->product;
     $this->assertEquals(100, $cloned->getSpecification()->getAttribute($numField)->value->get());
     $cloned->setAttributeValue($numField, 200);
     $cloned->setPrice($this->usd, 80);
     $cloned->save();
     $this->assertNotEquals($cloned->getID(), $this->product->getID());
     ActiveRecordModel::clearPool();
     $reloaded = Product::getInstanceByID($cloned->getID(), true);
     $reloaded->loadPricing();
     $this->assertEquals(80, $reloaded->getPrice($this->usd));
     $reloaded->loadSpecification();
     $this->assertEquals(200, $reloaded->getSpecification()->getAttribute($numField)->value->get());
     // related products
     $rel = $reloaded->getRelationships();
     $this->assertEquals(1, $rel->size());
     $this->assertSame($reloaded, $rel->get(0)->productRelationshipGroup->get()->product->get());
     // options
     $clonedOpts = ProductOption::getProductOptions($reloaded);
     $this->assertEquals(1, $clonedOpts->size());
     // image
     $this->assertTrue(is_object($reloaded->defaultImage->get()));
     $this->assertNotEquals($reloaded->defaultImage->get()->getID(), $this->product->defaultImage->get()->getID());
 }
 public function testGetRelatedProducts()
 {
     // new product
     $product = Product::getNewInstance($this->rootCategory, 'test');
     $product->save();
     // groups
     $groups = array(0 => null);
     foreach (range(1, 2) as $i) {
         $groups[$i] = ProductRelationshipGroup::getNewInstance($product, ProductRelationship::TYPE_CROSS);
         $groups[$i]->position->set($i);
         $groups[$i]->setValueByLang('name', 'en', 'TEST_GROUP_' . $i);
         $groups[$i]->save();
     }
     // related products
     $relatedProducts = array();
     $relationships = array();
     foreach (range(1, 9) as $i) {
         $relatedProducts[$i] = Product::getNewInstance($this->rootCategory, 'test');
         $relatedProducts[$i]->save();
         $relationships[$i] = ProductRelationship::getNewInstance($product, $relatedProducts[$i], $groups[floor(($i - 1) / 3)]);
         $relationships[$i]->position->set(9 - $i);
         $relationships[$i]->save();
     }
     // test order
     $groupPosition = -1;
     $productPosition = -1;
     foreach (ProductRelationship::getRelationships($product, false, ProductRelationship::TYPE_CROSS) as $relationship) {
         $currentGroupPosition = $relationship->productRelationshipGroup->get() ? $relationship->productRelationshipGroup->get()->position->get() : $groupPosition;
         $currentProductPosition = $relationship->position->get();
         $this->assertTrue($productPosition <= $currentProductPosition || $groupPosition <= $currentGroupPosition, "{$productPosition} <= {$currentProductPosition} || {$groupPosition} <= {$currentGroupPosition}");
         $groupPosition = $currentGroupPosition;
         $productPosition = $currentProductPosition;
     }
 }
 /**
  * @role update
  */
 public function create()
 {
     $group = ProductRelationshipGroup::getNewInstance($this->getOwnerInstanceByID($this->request->get('ownerID')), $this->request->get('type'));
     return $this->save($group);
 }