Skip to content

Commit

Permalink
ENGCOM-4691: Purchasing a downloadable product as guest then creating…
Browse files Browse the repository at this point in the history
… an account on the onepagesuccess step doesn't link product with account magento#21711
  • Loading branch information
sivaschenko committed Apr 21, 2019
2 parents 2138de7 + 5070f14 commit 5afada0
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 0 deletions.
@@ -0,0 +1,80 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\Downloadable\Observer;

use Magento\Framework\Event\ObserverInterface;

/**
* Assign Downloadable links to customer created after issuing guest order.
*/
class UpdateLinkPurchasedObserver implements ObserverInterface
{
/**
* Core store config
* @var \Magento\Framework\App\Config\ScopeConfigInterface
*/
private $scopeConfig;

/**
* @var \Magento\Downloadable\Model\ResourceModel\Link\Purchased\CollectionFactory
*/
private $purchasedFactory;

/**
* @var \Magento\Framework\DataObject\Copy
*/
private $objectCopyService;

/**
* @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
* @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\CollectionFactory $purchasedFactory
* @param \Magento\Framework\DataObject\Copy $objectCopyService
*/
public function __construct(
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Downloadable\Model\ResourceModel\Link\Purchased\CollectionFactory $purchasedFactory,
\Magento\Framework\DataObject\Copy $objectCopyService
) {
$this->scopeConfig = $scopeConfig;
$this->purchasedFactory = $purchasedFactory;
$this->objectCopyService = $objectCopyService;
}

/**
* Re-save order data after order update.
*
* @param \Magento\Framework\Event\Observer $observer
* @return $this
*/
public function execute(\Magento\Framework\Event\Observer $observer)
{
$order = $observer->getEvent()->getOrder();

if (!$order->getId()) {
//order not saved in the database
return $this;
}

$purchasedLinks = $this->purchasedFactory->create()->addFieldToFilter(
'order_id',
['eq' => $order->getId()]
);

foreach ($purchasedLinks as $linkPurchased) {
$this->objectCopyService->copyFieldsetToTarget(
\downloadable_sales_copy_order::class,
'to_downloadable',
$order,
$linkPurchased
);
$linkPurchased->save();
}

return $this;
}
}
1 change: 1 addition & 0 deletions app/code/Magento/Downloadable/etc/events.xml
Expand Up @@ -11,6 +11,7 @@
</event>
<event name="sales_order_save_after">
<observer name="downloadable_observer" instance="Magento\Downloadable\Observer\SetLinkStatusObserver" />
<observer name="downloadable_observer_assign_customer" instance="Magento\Downloadable\Observer\UpdateLinkPurchasedObserver" />
</event>
<event name="sales_model_service_quote_submit_success">
<observer name="checkout_type_onepage_save_order_after" instance="Magento\Downloadable\Observer\SetHasDownloadableProductsObserver" />
Expand Down

0 comments on commit 5afada0

Please sign in to comment.