1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<?php
/**
* Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
*/
namespace Temando\Shipping\Plugin\Rma;
use Magento\Backend\Block\Widget\Container;
use Magento\Framework\UrlInterface;
use Magento\Framework\View\LayoutInterface;
use Magento\Rma\Block\Adminhtml\Rma\Edit as RmaEdit;
use Magento\Sales\Api\Data\OrderInterface;
use Temando\Shipping\Model\Config\ModuleConfigInterface;
use Temando\Shipping\Model\ResourceModel\Rma\RmaAccess;
use Temando\Shipping\Model\Shipping\Carrier;
/**
* AddRmaToolbarButtonPlugin
*
* @package Temando\Shipping\Plugin
* @author Christoph Aßmann <christoph.assmann@netresearch.de>
* @license https://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
* @link https://www.temando.com/
*/
class AddRmaToolbarButtonPlugin
{
/**
* @var ModuleConfigInterface
*/
private $config;
/**
* @var RmaAccess
*/
private $rmaAccess;
/**
* @var UrlInterface
*/
private $urlBuilder;
/**
* AddRmaToolbarButtonPlugin constructor.
* @param ModuleConfigInterface $config
* @param RmaAccess $rmaAccess
* @param UrlInterface $urlBuilder
*/
public function __construct(
ModuleConfigInterface $config,
RmaAccess $rmaAccess,
UrlInterface $urlBuilder
) {
$this->config = $config;
$this->rmaAccess = $rmaAccess;
$this->urlBuilder = $urlBuilder;
}
/**
* Add "Create Return Shipment" button to toolbar if original order was shipped
* with Temando Shipping.
*
* @param RmaEdit|Container $block
* @param LayoutInterface $layout
*
* @return null
*/
public function beforeSetLayout(RmaEdit $block, LayoutInterface $layout)
{
// only display button if rma is enabled for temando shipping
if (!$this->config->isRmaEnabled()) {
return null;
}
// only display button if rma is registered
/** @var \Magento\Rma\Model\Rma $rma */
$rma = $this->rmaAccess->getCurrentRma();
if (!$rma) {
return null;
}
/** @var \Magento\Sales\Model\Order $order */
$order = $rma->getOrder();
if (!$order instanceof OrderInterface || !$order->getData('shipping_method')) {
// wrong type, virtual or corrupt order
return null;
}
$shippingMethod = $order->getShippingMethod(true);
if ($shippingMethod->getData('carrier_code') !== Carrier::CODE) {
return null;
}
$isRmaAuthorized = in_array($rma->getStatus(), [
\Magento\Rma\Model\Rma\Source\Status::STATE_AUTHORIZED,
\Magento\Rma\Model\Rma\Source\Status::STATE_PARTIAL_AUTHORIZED
]);
$createUrl = $this->urlBuilder->getUrl(
'temando/rma_shipment/create',
['rma_id' => $rma->getId()]
);
$block->addButton(
'create_return_shipment',
[
'label' => __('Create Return Shipment'),
'class' => $isRmaAuthorized ? '' : 'disabled',
'onclick' => sprintf("setLocation('%s')", $createUrl)
],
6
);
// original method's argument does not get changed.
return null;
}
}