Ejemplo n.º 1
1
 /**
  * Generate RSS XML with sales rules data
  *
  * @return string
  */
 protected function _toHtml()
 {
     $storeId = $this->_getStoreId();
     $storeModel = $this->_storeManager->getStore($storeId);
     $websiteId = $storeModel->getWebsiteId();
     $customerGroup = $this->_getCustomerGroupId();
     $now = date('Y-m-d');
     $url = $this->_urlBuilder->getUrl('');
     $newUrl = $this->_urlBuilder->getUrl('rss/catalog/salesrule');
     $title = __('%1 - Discounts and Coupons', $storeModel->getName());
     $lang = $this->_scopeConfig->getValue('general/locale/code', \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $storeModel);
     /** @var $rssObject \Magento\Rss\Model\Rss */
     $rssObject = $this->_rssFactory->create();
     $rssObject->_addHeader(array('title' => $title, 'description' => $title, 'link' => $newUrl, 'charset' => 'UTF-8', 'language' => $lang));
     /** @var $collection \Magento\SalesRule\Model\Resource\Rule\Collection */
     $collection = $this->_collectionFactory->create();
     $collection->addWebsiteGroupDateFilter($websiteId, $customerGroup, $now)->addFieldToFilter('is_rss', 1)->setOrder('from_date', 'desc');
     $collection->load();
     /** @var $ruleModel \Magento\SalesRule\Model\Rule */
     foreach ($collection as $ruleModel) {
         $description = '<table><tr>' . '<td style="text-decoration:none;">' . $ruleModel->getDescription() . '<br/>Discount Start Date: ' . $this->formatDate($ruleModel->getFromDate(), 'medium');
         if ($ruleModel->getToDate()) {
             $description .= '<br/>Discount End Date: ' . $this->formatDate($ruleModel->getToDate(), 'medium');
         }
         if ($ruleModel->getCouponCode()) {
             $description .= '<br/> Coupon Code: ' . $ruleModel->getCouponCode();
         }
         $description .= '</td></tr></table>';
         $rssObject->_addEntry(array('title' => $ruleModel->getName(), 'description' => $description, 'link' => $url));
     }
     return $rssObject->createRssXml();
 }
 /**
  * {@inheritdoc}
  */
 public function run()
 {
     $this->logger->log('Installing sales rules:');
     $file = 'SalesRule/sales_rules.csv';
     $fileName = $this->fixtureHelper->getPath($file);
     $csvReader = $this->csvReaderFactory->create(['fileName' => $fileName, 'mode' => 'r']);
     $attribute = $this->eavConfig->getAttribute('catalog_product', 'sku');
     if ($attribute->getIsUsedForPromoRules() == 0) {
         $attribute->setIsUsedForPromoRules('1')->save();
     }
     foreach ($csvReader as $row) {
         /** @var \Magento\SalesRule\Model\Resource\Rule\Collection $ruleCollection */
         $ruleCollection = $this->ruleCollectionFactory->create();
         $ruleCollection->addFilter('name', $row['name']);
         if ($ruleCollection->count() > 0) {
             continue;
         }
         $row['customer_group_ids'] = $this->catalogRule->getGroupIds();
         $row['website_ids'] = $this->catalogRule->getWebsiteIds();
         $row['conditions_serialized'] = $this->catalogRule->convertSerializedData($row['conditions_serialized']);
         $row['actions_serialized'] = $this->catalogRule->convertSerializedData($row['actions_serialized']);
         /** @var \Magento\SalesRule\Model\Rule $rule */
         $rule = $this->ruleFactory->create();
         $rule->loadPost($row);
         $rule->save();
         $this->logger->logInline('.');
     }
 }
Ejemplo n.º 3
0
 /**
  * @param int $websiteId
  * @param int $customerGroupId
  * @return \Magento\SalesRule\Model\Resource\Rule\Collection
  */
 public function getDiscountCollection($websiteId, $customerGroupId)
 {
     /** @var $collection \Magento\SalesRule\Model\Resource\Rule\Collection */
     $collection = $this->collectionFactory->create();
     $collection->addWebsiteGroupDateFilter($websiteId, $customerGroupId, (new \DateTime())->format(\Magento\Framework\Stdlib\DateTime::DATETIME_PHP_FORMAT))->addFieldToFilter('is_rss', 1)->setOrder('from_date', 'desc');
     $collection->load();
     return $collection;
 }
Ejemplo n.º 4
0
 /**
  * Init validator
  * Init process load collection of rules for specific website,
  * customer group and coupon code
  *
  * @param int $websiteId
  * @param int $customerGroupId
  * @param string $couponCode
  * @return $this
  */
 public function init($websiteId, $customerGroupId, $couponCode)
 {
     $this->setWebsiteId($websiteId)->setCustomerGroupId($customerGroupId)->setCouponCode($couponCode);
     $key = $websiteId . '_' . $customerGroupId . '_' . $couponCode;
     if (!isset($this->_rules[$key])) {
         $this->_rules[$key] = $this->_collectionFactory->create()->setValidationFilter($websiteId, $customerGroupId, $couponCode)->addFieldToFilter('is_active', 1)->load();
     }
     return $this;
 }
Ejemplo n.º 5
0
 protected function checkSalesRuleAvailability($attributeCode)
 {
     $collection = $this->getMock('Magento\\SalesRule\\Model\\Resource\\Rule\\Collection', ['addAttributeInConditionFilter', '__wakeup'], [], '', false);
     $rule = $this->getMock('Magento\\SalesRule\\Model\\Rule', ['setIsActive', 'getConditions', 'getActions', 'save', '__wakeup'], [], '', false);
     $combine = $this->getMock('Magento\\Rule\\Model\\Condition\\Combine', ['getConditions', 'setConditions', '__wakeup'], [], '', false);
     $combineProduct = $this->getMock('Magento\\SalesRule\\Model\\Rule\\Condition\\Product', ['getAttribute', 'setConditions', '__wakeup'], [], '', false);
     $this->collectionFactory->expects($this->once())->method('create')->will($this->returnValue($collection));
     $collection->expects($this->once())->method('addAttributeInConditionFilter')->with($attributeCode)->will($this->returnValue([$rule]));
     $rule->expects($this->once())->method('setIsActive')->with(0);
     $rule->expects($this->once())->method('getConditions')->will($this->returnValue($combine));
     $rule->expects($this->once())->method('getActions')->will($this->returnValue($combine));
     $combine->expects($this->at(0))->method('getConditions')->will($this->returnValue([$combine]));
     $combine->expects($this->at(1))->method('getConditions')->will($this->returnValue([$combineProduct]));
     $combine->expects($this->at(4))->method('getConditions')->will($this->returnValue([]));
     $combineProduct->expects($this->once())->method('getAttribute')->will($this->returnValue($attributeCode));
     $combine->expects($this->any())->method('setConditions')->will($this->returnValueMap([[[], null], [[$combine], null], [[], null]]));
     $this->messageManager->expects($this->once())->method('addWarning')->with(sprintf('1 Shopping Cart Price Rules based on "%s" attribute have been disabled.', $attributeCode));
 }
Ejemplo n.º 6
0
 /**
  * Check rules that contains affected attribute
  * If rules were found they will be set to inactive and notice will be add to admin session
  *
  * @param string $attributeCode
  * @return $this
  */
 protected function _checkSalesRulesAvailability($attributeCode)
 {
     /* @var $collection \Magento\SalesRule\Model\Resource\Rule\Collection */
     $collection = $this->_collectionFactory->create()->addAttributeInConditionFilter($attributeCode);
     $disabledRulesCount = 0;
     foreach ($collection as $rule) {
         /* @var $rule \Magento\SalesRule\Model\Rule */
         $rule->setIsActive(0);
         /* @var $rule->getConditions() \Magento\SalesRule\Model\Rule\Condition\Combine */
         $this->_removeAttributeFromConditions($rule->getConditions(), $attributeCode);
         $this->_removeAttributeFromConditions($rule->getActions(), $attributeCode);
         $rule->save();
         $disabledRulesCount++;
     }
     if ($disabledRulesCount) {
         $this->messageManager->addWarning(__('%1 Shopping Cart Price Rules based on "%2" attribute have been disabled.', $disabledRulesCount, $attributeCode));
     }
     return $this;
 }