/magento/module-catalog-rule/Model/ResourceModel/Rule.php
PHP | 284 lines | 127 code | 27 blank | 130 comment | 4 complexity | f4ec0ff3c4be1a561eaa95ff8ca606ff MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.1, MIT, Apache-2.0
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- /**
- * Catalog rules resource model
- *
- * @author Magento Core Team <core@magentocommerce.com>
- */
- namespace Magento\CatalogRule\Model\ResourceModel;
- use Magento\Catalog\Model\Product;
- use Magento\Framework\Model\AbstractModel;
- use Magento\Framework\Pricing\PriceCurrencyInterface;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class Rule extends \Magento\Rule\Model\ResourceModel\AbstractResource
- {
- /**
- * Store number of seconds in a day
- */
- const SECONDS_IN_DAY = 86400;
- /**
- * @var \Psr\Log\LoggerInterface
- */
- protected $_logger;
- /**
- * Catalog rule data
- *
- * @var \Magento\CatalogRule\Helper\Data
- */
- protected $_catalogRuleData = null;
- /**
- * Core event manager proxy
- *
- * @var \Magento\Framework\Event\ManagerInterface
- */
- protected $_eventManager = null;
- /**
- * @var \Magento\Eav\Model\Config
- */
- protected $_eavConfig;
- /**
- * @var \Magento\Framework\Stdlib\DateTime\DateTime
- */
- protected $_coreDate;
- /**
- * @var \Magento\Catalog\Model\Product\ConditionFactory
- */
- protected $_conditionFactory;
- /**
- * @var \Magento\Store\Model\StoreManagerInterface
- */
- protected $_storeManager;
- /**
- * @var \Magento\Framework\Stdlib\DateTime
- */
- protected $dateTime;
- /**
- * @var PriceCurrencyInterface
- */
- protected $priceCurrency;
- /**
- * @var \Magento\Framework\EntityManager\EntityManager
- */
- protected $entityManager;
- /**
- * Rule constructor.
- * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
- * @param \Magento\Store\Model\StoreManagerInterface $storeManager
- * @param Product\ConditionFactory $conditionFactory
- * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate
- * @param \Magento\Eav\Model\Config $eavConfig
- * @param \Magento\Framework\Event\ManagerInterface $eventManager
- * @param \Magento\CatalogRule\Helper\Data $catalogRuleData
- * @param \Psr\Log\LoggerInterface $logger
- * @param \Magento\Framework\Stdlib\DateTime $dateTime
- * @param PriceCurrencyInterface $priceCurrency
- * @param null $connectionName
- * @SuppressWarnings(PHPMD.ExcessiveParameterList)
- */
- public function __construct(
- \Magento\Framework\Model\ResourceModel\Db\Context $context,
- \Magento\Store\Model\StoreManagerInterface $storeManager,
- \Magento\Catalog\Model\Product\ConditionFactory $conditionFactory,
- \Magento\Framework\Stdlib\DateTime\DateTime $coreDate,
- \Magento\Eav\Model\Config $eavConfig,
- \Magento\Framework\Event\ManagerInterface $eventManager,
- \Magento\CatalogRule\Helper\Data $catalogRuleData,
- \Psr\Log\LoggerInterface $logger,
- \Magento\Framework\Stdlib\DateTime $dateTime,
- PriceCurrencyInterface $priceCurrency,
- $connectionName = null
- ) {
- $this->_storeManager = $storeManager;
- $this->_conditionFactory = $conditionFactory;
- $this->_coreDate = $coreDate;
- $this->_eavConfig = $eavConfig;
- $this->_eventManager = $eventManager;
- $this->_catalogRuleData = $catalogRuleData;
- $this->_logger = $logger;
- $this->dateTime = $dateTime;
- $this->priceCurrency = $priceCurrency;
- $this->_associatedEntitiesMap = $this->getAssociatedEntitiesMap();
- parent::__construct($context, $connectionName);
- }
- /**
- * Initialize main table and table id field
- *
- * @return void
- * @codeCoverageIgnore
- */
- protected function _construct()
- {
- $this->_init('catalogrule', 'rule_id');
- }
- /**
- * @param \Magento\Framework\Model\AbstractModel $rule
- * @return $this
- */
- protected function _afterDelete(\Magento\Framework\Model\AbstractModel $rule)
- {
- $connection = $this->getConnection();
- $connection->delete(
- $this->getTable('catalogrule_product'),
- ['rule_id=?' => $rule->getId()]
- );
- $connection->delete(
- $this->getTable('catalogrule_group_website'),
- ['rule_id=?' => $rule->getId()]
- );
- return parent::_afterDelete($rule);
- }
- /**
- * Get catalog rules product price for specific date, website and
- * customer group
- *
- * @param \DateTimeInterface $date
- * @param int $wId
- * @param int $gId
- * @param int $pId
- * @return float|false
- */
- public function getRulePrice($date, $wId, $gId, $pId)
- {
- $data = $this->getRulePrices($date, $wId, $gId, [$pId]);
- if (isset($data[$pId])) {
- return $data[$pId];
- }
- return false;
- }
- /**
- * Retrieve product prices by catalog rule for specific date, website and customer group
- * Collect data with product Id => price pairs
- *
- * @param \DateTimeInterface $date
- * @param int $websiteId
- * @param int $customerGroupId
- * @param array $productIds
- * @return array
- */
- public function getRulePrices(\DateTimeInterface $date, $websiteId, $customerGroupId, $productIds)
- {
- $connection = $this->getConnection();
- $select = $connection->select()
- ->from($this->getTable('catalogrule_product_price'), ['product_id', 'rule_price'])
- ->where('rule_date = ?', $date->format('Y-m-d'))
- ->where('website_id = ?', $websiteId)
- ->where('customer_group_id = ?', $customerGroupId)
- ->where('product_id IN(?)', $productIds);
- return $connection->fetchPairs($select);
- }
- /**
- * Get active rule data based on few filters
- *
- * @param int|string $date
- * @param int $websiteId
- * @param int $customerGroupId
- * @param int $productId
- * @return array
- */
- public function getRulesFromProduct($date, $websiteId, $customerGroupId, $productId)
- {
- $connection = $this->getConnection();
- if (is_string($date)) {
- $date = strtotime($date);
- }
- $select = $connection->select()
- ->from($this->getTable('catalogrule_product'))
- ->where('website_id = ?', $websiteId)
- ->where('customer_group_id = ?', $customerGroupId)
- ->where('product_id = ?', $productId)
- ->where('from_time = 0 or from_time < ?', $date)
- ->where('to_time = 0 or to_time > ?', $date);
- return $connection->fetchAll($select);
- }
- /**
- * @param \Magento\Framework\Model\AbstractModel $object
- * @param mixed $value
- * @param string $field
- * @return $this
- * @SuppressWarnings(PHPMD.UnusedFormalParameter)
- */
- public function load(\Magento\Framework\Model\AbstractModel $object, $value, $field = null)
- {
- $this->getEntityManager()->load($object, $value);
- return $this;
- }
- /**
- * @param AbstractModel $object
- * @return $this
- * @throws \Exception
- */
- public function save(\Magento\Framework\Model\AbstractModel $object)
- {
- $this->getEntityManager()->save($object);
- return $this;
- }
- /**
- * Delete the object
- *
- * @param \Magento\Framework\Model\AbstractModel $object
- * @return $this
- * @throws \Exception
- */
- public function delete(AbstractModel $object)
- {
- $this->getEntityManager()->delete($object);
- return $this;
- }
- /**
- * @return array
- * @deprecated 100.1.0
- */
- private function getAssociatedEntitiesMap()
- {
- if (!$this->_associatedEntitiesMap) {
- $this->_associatedEntitiesMap = \Magento\Framework\App\ObjectManager::getInstance()
- ->get(\Magento\CatalogRule\Model\ResourceModel\Rule\AssociatedEntityMap::class)
- ->getData();
- }
- return $this->_associatedEntitiesMap;
- }
- /**
- * @return \Magento\Framework\EntityManager\EntityManager
- * @deprecated 100.1.0
- */
- private function getEntityManager()
- {
- if (null === $this->entityManager) {
- $this->entityManager = \Magento\Framework\App\ObjectManager::getInstance()
- ->get(\Magento\Framework\EntityManager\EntityManager::class);
- }
- return $this->entityManager;
- }
- }