public function saveSelectRecord() { $condition = ActiveRecordModel::getInstanceByID('DiscountCondition', $this->request->get('id'), DiscountCondition::LOAD_DATA); $condition->serializedCondition->setNull(); $condition->conditionClass->set($this->request->get('type')); $condition->save(); // delete existing record $record = ActiveRecordModel::getInstanceByID($this->request->get('class'), $this->request->get('recordID')); foreach ($record->getRelatedRecordSet('DiscountConditionRecord', new ARSelectFilter(new EqualsCond(new ARFieldHandle('DiscountConditionRecord', 'conditionID'), $condition->getID()))) as $existing) { $existing->delete(); } $this->deleteOtherTypeRecords($condition, $record); // create if ($this->request->get('state') == 'true') { $rec = DiscountConditionRecord::getNewInstance($condition, $record); $rec->save(); } }
public function testDiscountByAdditionalCategories() { $product = $this->products[1]; $condition = DiscountCondition::getNewInstance(); $condition->isEnabled->set(true); $condition->save(); $actionCondition = DiscountCondition::getNewInstance(); $actionCondition->isEnabled->set(true); $actionCondition->conditionClass->set('RuleConditionContainsProduct'); $actionCondition->save(); $action = DiscountAction::getNewInstance($condition); $action->actionCondition->set($actionCondition); $action->isEnabled->set(true); $action->type->set(DiscountAction::TYPE_ITEM_DISCOUNT); $action->amount->set(10); $action->actionClass->set('RuleActionPercentageDiscount'); $action->save(); $randomCategory = Category::getNewInstance(Category::getRootNode()); $randomCategory->save(); DiscountConditionRecord::getNewInstance($actionCondition, $randomCategory)->save(); $this->order->addProduct($product, 1, true); $this->order->save(); Category::recalculateProductsCount(); $product->reload(); $this->assertFalse(RuleCondition::create($actionCondition)->isProductMatching($product)); $customCategory = Category::getNewInstance(Category::getRootNode()); $customCategory->save(); ProductCategory::getNewInstance($product, $customCategory)->save(); DiscountConditionRecord::getNewInstance($actionCondition, $customCategory)->save(); Category::recalculateProductsCount(); $product->reload(); $actionCondition->loadAll(); $this->assertTrue(RuleCondition::create($actionCondition)->isProductMatching($product)); $this->assertEquals(count($this->order->getDiscountActions(true)), 1); $this->assertEquals($this->products[1]->getPrice($this->usd) * 0.9, $this->order->getTotal(true)); ActiveRecordModel::clearPool(); $order = CustomerOrder::getInstanceByID($this->order->getID()); $order->loadAll(); $this->assertEquals($this->products[1]->getPrice($this->usd) * 0.9, $this->order->getTotal(true)); }
/** * @todo: doesn't work */ public function testAdditionalCategories() { $customCategory = Category::getNewInstance(Category::getRootNode()); $customCategory->save(); $product = $this->product1; $this->order->addProduct($product, 1, true); $this->order->save(); $condition = DiscountCondition::getNewInstance(); $condition->isEnabled->set(true); $condition->conditionClass->set('RuleConditionContainsProduct'); $condition->save(); DiscountConditionRecord::getNewInstance($condition, $customCategory)->save(); $this->assertEquals(0, count($this->order->getDiscountConditions(true))); ProductCategory::getNewInstance($product, $customCategory)->save(); $condition->loadAll(); //$this->assertEquals(1, count($this->order->getDiscountConditions(true))); }
public function registerRecord(DiscountConditionRecord $record) { $this->records[$record->getID()] = $record; }