mirror of
https://github.com/bdnugget/magento2.git
synced 2026-11-07 17:27:36 +00:00
219 lines
6.6 KiB
PHP
219 lines
6.6 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
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\Framework\ObjectManager\ResetAfterRequestInterface;
|
|
use Magento\SalesSequence\Model\Manager;
|
|
use Magento\Sales\Model\EntityInterface;
|
|
|
|
/**
|
|
* Abstract sales entity provides to its children knowledge about eventPrefix and eventObject
|
|
*
|
|
* phpcs:disable Magento2.Classes.AbstractApi
|
|
* @api
|
|
* @SuppressWarnings(PHPMD.NumberOfChildren)
|
|
* @since 100.0.2
|
|
*/
|
|
abstract class EntityAbstract extends AbstractDb implements ResetAfterRequestInterface
|
|
{
|
|
/**
|
|
* @var string
|
|
*/
|
|
protected $_eventPrefix = 'sales_order_resource';
|
|
|
|
/**
|
|
* @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 AbstractAttribute|string[]|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->getEntityId() == null && $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()]);
|
|
if (count($data) > 0) {
|
|
$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;
|
|
}
|
|
|
|
/**
|
|
* @inheritDoc
|
|
*/
|
|
public function _resetState(): void
|
|
{
|
|
$this->_uniqueFields = null;
|
|
$this->serializer = null;
|
|
}
|
|
}
|