123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Sales\Model\ResourceModel;
- use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
- use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
- use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
- use Magento\SalesSequence\Model\Manager;
- use Magento\Sales\Model\EntityInterface;
- /**
- * Abstract sales entity provides to its children knowledge about eventPrefix and eventObject
- *
- * @api
- * @SuppressWarnings(PHPMD.NumberOfChildren)
- * @since 100.0.2
- */
- abstract class EntityAbstract extends AbstractDb
- {
- /**
- * Event prefix
- *
- * @var string
- */
- protected $_eventPrefix = 'sales_order_resource';
- /**
- * Event object
- *
- * @var string
- */
- protected $_eventObject = 'resource';
- /**
- * Use additional is object new check for this resource
- *
- * @var bool
- */
- protected $_useIsObjectNew = true;
- /**
- * @var \Magento\Eav\Model\Entity\TypeFactory
- */
- protected $_eavEntityTypeFactory;
- /**
- * @var \Magento\Sales\Model\ResourceModel\Attribute
- */
- protected $attribute;
- /**
- * @var Manager
- */
- protected $sequenceManager;
- /**
- * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
- * @param Snapshot $entitySnapshot
- * @param RelationComposite $entityRelationComposite
- * @param Attribute $attribute
- * @param Manager $sequenceManager
- * @param string $connectionName
- */
- public function __construct(
- \Magento\Framework\Model\ResourceModel\Db\Context $context,
- Snapshot $entitySnapshot,
- RelationComposite $entityRelationComposite,
- \Magento\Sales\Model\ResourceModel\Attribute $attribute,
- Manager $sequenceManager,
- $connectionName = null
- ) {
- $this->attribute = $attribute;
- $this->sequenceManager = $sequenceManager;
- if ($connectionName === null) {
- $connectionName = 'sales';
- }
- parent::__construct($context, $entitySnapshot, $entityRelationComposite, $connectionName);
- }
- /**
- * Perform actions after object save
- *
- * @param \Magento\Framework\Model\AbstractModel $object
- * @param string $attribute
- * @return $this
- * @throws \Exception
- */
- public function saveAttribute(\Magento\Framework\Model\AbstractModel $object, $attribute)
- {
- $this->attribute->saveAttribute($object, $attribute);
- return $this;
- }
- /**
- * Prepares data for saving and removes update time (if exists).
- * This prevents saving same update time on each entity update.
- *
- * @param \Magento\Framework\Model\AbstractModel $object
- * @return array
- */
- protected function _prepareDataForSave(\Magento\Framework\Model\AbstractModel $object)
- {
- $data = parent::_prepareDataForTable($object, $this->getMainTable());
- if (isset($data['updated_at'])) {
- unset($data['updated_at']);
- }
- return $data;
- }
- /**
- * Perform actions before object save
- * Perform actions before object save, calculate next sequence value for increment Id
- *
- * @param \Magento\Framework\Model\AbstractModel|\Magento\Framework\DataObject $object
- * @return $this
- */
- protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object)
- {
- /** @var \Magento\Sales\Model\AbstractModel $object */
- if ($object instanceof EntityInterface && $object->getIncrementId() == null) {
- $store = $object->getStore();
- $storeId = $store->getId();
- if ($storeId === null) {
- $storeId = $store->getGroup()->getDefaultStoreId();
- }
- $object->setIncrementId(
- $this->sequenceManager->getSequence(
- $object->getEntityType(),
- $storeId
- )->getNextValue()
- );
- }
- parent::_beforeSave($object);
- return $this;
- }
- /**
- * Perform actions after object save
- *
- * @param \Magento\Framework\Model\AbstractModel $object
- * @return $this
- */
- protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
- {
- $connection = $this->getConnection();
- $columns = $connection->describeTable($this->getMainTable());
- if (isset($columns['created_at'], $columns['updated_at'])) {
- $select = $connection->select()
- ->from($this->getMainTable(), ['created_at', 'updated_at'])
- ->where($this->getIdFieldName() . ' = :entity_id');
- $row = $connection->fetchRow($select, [':entity_id' => $object->getId()]);
- if (is_array($row) && isset($row['created_at'], $row['updated_at'])) {
- $object->setCreatedAt($row['created_at']);
- $object->setUpdatedAt($row['updated_at']);
- }
- }
- parent::_afterSave($object);
- return $this;
- }
- /**
- * @inheritdoc
- */
- protected function updateObject(\Magento\Framework\Model\AbstractModel $object)
- {
- $condition = $this->getConnection()->quoteInto($this->getIdFieldName() . '=?', $object->getId());
- $data = $this->_prepareDataForSave($object);
- unset($data[$this->getIdFieldName()]);
- $this->getConnection()->update($this->getMainTable(), $data, $condition);
- }
- /**
- * @inheritdoc
- */
- protected function saveNewObject(\Magento\Framework\Model\AbstractModel $object)
- {
- $bind = $this->_prepareDataForSave($object);
- unset($bind[$this->getIdFieldName()]);
- $this->getConnection()->insert($this->getMainTable(), $bind);
- $object->setId($this->getConnection()->lastInsertId($this->getMainTable()));
- if ($this->_useIsObjectNew) {
- $object->isObjectNew(false);
- }
- }
- /**
- * Perform actions after object delete
- *
- * @param \Magento\Framework\Model\AbstractModel $object
- * @return $this
- */
- protected function _afterDelete(\Magento\Framework\Model\AbstractModel $object)
- {
- parent::_afterDelete($object);
- return $this;
- }
- }
|