public function setUp() { parent::setUp(); BusinessRuleController::clearCache(); ActiveRecord::executeUpdate('DELETE FROM DeliveryZone'); ActiveRecord::executeUpdate('DELETE FROM Tax'); ActiveRecord::executeUpdate('DELETE FROM TaxRate'); ActiveRecord::executeUpdate('DELETE FROM DiscountCondition'); ActiveRecord::executeUpdate('DELETE FROM DiscountAction'); ActiveRecord::executeUpdate('DELETE FROM Currency'); $this->root = DiscountCondition::getRootNode(); $this->usd = ActiveRecordModel::getInstanceByIDIfExists('Currency', 'USD'); $this->usd->save(); $this->user = User::getNewInstance('discount.condition@test'); $this->user->save(); $this->order = CustomerOrder::getNewInstance($this->user); $this->order->currency->set($this->usd); $this->order->save(true); $this->product1 = Product::getNewInstance(Category::getRootNode()); $this->product1->isEnabled->set(true); $this->product1->setPrice('USD', 10); $this->product1->save(); $this->product2 = Product::getNewInstance(Category::getRootNode()); $this->product2->isEnabled->set(true); $this->product2->setPrice('USD', 20); $this->product2->save(); ActiveRecordModel::getApplication()->getConfig()->setRuntime('INVENTORY_TRACKING', 'DISABLE'); }
protected function processRecord(Product $product) { $act = $this->getAction(); $field = $this->getField(); if ('manufacturer' == $act) { $product->manufacturer->set($this->params['manufacturer']); } else { if ('price' == $act) { $product->setPrice($this->params['baseCurrency'], $this->params['price']); } else { if (in_array($act, array('inc_price', 'multi_price', 'div_price'))) { $actions = array('inc_price' => 'increasePriceByPercent', 'multi_price' => 'multiplyPrice', 'div_price' => 'dividePrice'); $action = $actions[$act]; $pricing = $product->getPricingHandler(); foreach ($this->params['currencies'] as $currency) { if ($pricing->isPriceSet($currency)) { $p = $pricing->getPrice($currency); $p->{$action}($this->params['inc_price_value'], $this->params['inc_quant_price']); $p->save(); } } } else { if ('inc_stock' == $act) { $product->stockCount->set($product->stockCount->get() + $this->request->get($act)); } else { if ('addRelated' == $act) { $product->addRelatedProduct($this->params['relatedProduct']); } else { if ('copy' == $act) { $cloned = clone $product; $cloned->category->set($this->params['category']); $cloned->save(); } else { if ('addCat' == $act) { // check if the product is not assigned to this category already $relation = ActiveRecordModel::getInstanceByIdIfExists('ProductCategory', array('productID' => $product->getID(), 'categoryID' => $this->params['category']->getID())); if (!$relation->isExistingRecord() && $product->category->get() !== $category) { $relation->save(); } } else { if ('theme' == $act) { $instance = CategoryPresentation::getInstance($product); $instance->theme->set($this->params['theme']); $instance->save(); } else { if ('shippingClass' == $act) { $product->shippingClass->set(ActiveRecordModel::getInstanceByIDIfExists('ShippingClass', $this->params['shippingClass'], false)); } else { if ('taxClass' == $act) { $product->taxClass->set(ActiveRecordModel::getInstanceByIDIfExists('TaxClass', $this->params['taxClass'], false)); } else { if (substr($act, 0, 13) == 'set_specField') { $this->params['request']->remove('manufacturer'); $product->loadRequestData($this->params['request']); } else { if (substr($act, 0, 16) == 'remove_specField') { $this->params['request']->remove('manufacturer'); if ($this->params['field']->isMultiValue->get()) { // remove only selected multi-select options $product->loadRequestData($this->params['request']); } else { $product->removeAttribute($this->params['field']); } } else { parent::processRecord($product); } } } } } } } } } } } } }
public function getNextCustomerOrder() { if (!($data = $this->loadRecord('SELECT * FROM ' . $this->getTablePrefix() . 'orders WHERE customerID > 0'))) { return null; } $user = ActiveRecordModel::getInstanceByIDIfExists('User', $this->getRealId('User', $data['customerID'], false)); if (!$user || !$user->isExistingRecord()) { return $this->getNextCustomerOrder(); } $currCode = $data['currency_code']; if (!($currency = ActiveRecordModel::getInstanceByIDIfExists('Currency', $currCode, false))) { $currency = Currency::getNewInstance($currCode); $currency->save(); } $order = CustomerOrder::getNewInstance($user); $order->currency->set($currency); $order->dateCompleted->set($data['order_time']); // products foreach ($this->getDataBySql('SELECT * FROM ' . $this->getTablePrefix() . 'ordered_carts WHERE orderID=' . $data['orderID']) as $item) { $product = null; // try to identify product by SKU preg_match('/\\[(.*)\\]/', $item['name'], $sku); if (isset($sku[1])) { $product = Product::getInstanceBySKU($sku[1]); } // if that doesn't work, then try to match the exact name if (!$product) { $productData = array_shift($this->getDataBySQL('SELECT productID FROM ' . $this->getTablePrefix() . 'products WHERE name="' . addslashes($item['name']) . '"')); if ($productData && is_array($productData)) { $product = Product::getInstanceByID($this->getRealId('Product', $productData['productID']), Product::LOAD_DATA); } } if ($product) { $order->addProduct($product, $item['Quantity'], true); $orderedItem = array_shift($order->getItemsByProduct($product)); $orderedItem->price->set($item['Price']); } } // addresses $order->shippingAddress->set($this->getUserAddress($data, 'shipping_')); $order->billingAddress->set($this->getUserAddress($data, 'billing_')); $order->status->set($this->getOrderStatus($data['statusID'])); if ($order->status->get() == CustomerOrder::STATUS_SHIPPED) { $order->isPaid->set(true); } $order->rawData = $data; return $order; }
protected function processRecord(Product $product) { $act = $this->getAction(); $field = $this->getField(); if ('manufacturer' == $act) { $product->manufacturer->set($this->params['manufacturer']); } else { if ('price' == $act) { $product->setPrice($this->params['baseCurrency'], $this->params['price']); } else { if ('inc_price' == $act) { $pricing = $product->getPricingHandler(); foreach ($this->params['currencies'] as $currency) { if ($pricing->isPriceSet($currency)) { $p = $pricing->getPrice($currency); $p->increasePriceByPercent($this->params['inc_price_value'], $this->params['inc_quant_price']); $p->save(); } } } else { if ('inc_stock' == $act) { $product->stockCount->set($product->stockCount->get() + $this->request->get($act)); } else { if ('addRelated' == $act) { $product->addRelatedProduct($this->params['relatedProduct']); } else { if ('copy' == $act) { $cloned = clone $product; $cloned->category->set($this->params['category']); $cloned->save(); } else { if ('addCat' == $act) { // check if the product is not assigned to this category already $relation = ActiveRecordModel::getInstanceByIdIfExists('ProductCategory', array('productID' => $product->getID(), 'categoryID' => $this->params['category']->getID())); if (!$relation->isExistingRecord() && $product->category->get() !== $category) { $relation->save(); } } else { if ('theme' == $act) { $instance = CategoryPresentation::getInstance($product); $instance->theme->set($this->params['theme']); $instance->save(); } else { if ('shippingClass' == $act) { $product->shippingClass->set(ActiveRecordModel::getInstanceByIDIfExists('ShippingClass', $this->params['shippingClass'], false)); } else { if ('taxClass' == $act) { $product->taxClass->set(ActiveRecordModel::getInstanceByIDIfExists('TaxClass', $this->params['taxClass'], false)); } else { parent::processRecord($product); } } } } } } } } } } }