/** * 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('.'); } }
/** * @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; }
/** * 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; }
/** * 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; }