PrintAction.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. /**
  3. * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
  4. */
  5. namespace Temando\Shipping\Controller\Adminhtml\Pickup;
  6. use Magento\Backend\App\Action;
  7. use Magento\Backend\App\Action\Context;
  8. use Magento\Framework\App\Filesystem\DirectoryList;
  9. use Magento\Framework\App\Response\Http\FileFactory;
  10. use Magento\Framework\App\ResponseInterface;
  11. use Magento\Framework\Controller\Result\Redirect;
  12. use Magento\Framework\Stdlib\DateTime\DateTime;
  13. use Temando\Shipping\Model\Pickup\Pdf\PickupPdfFactory;
  14. use Temando\Shipping\Model\Pickup\PickupLoader;
  15. use Temando\Shipping\Model\PickupProviderInterface;
  16. /**
  17. * Temando Print Action
  18. *
  19. * @package Temando\Shipping\Controller
  20. * @author Benjamin Heuer <benjamin.heuer@netresearch.de>
  21. * @license https://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  22. * @link https://www.temando.com/
  23. */
  24. class PrintAction extends Action
  25. {
  26. /**
  27. * Authorization level
  28. */
  29. const ADMIN_RESOURCE = 'Temando_Shipping::pickups';
  30. /**
  31. * @var FileFactory
  32. */
  33. private $fileFactory;
  34. /**
  35. * @var DateTime
  36. */
  37. private $dateTime;
  38. /**
  39. * @var PickupPdfFactory
  40. */
  41. private $pickupPdfFactory;
  42. /**
  43. * @var PickupLoader
  44. */
  45. private $pickupLoader;
  46. /**
  47. * @var PickupProviderInterface
  48. */
  49. private $pickupProvider;
  50. /**
  51. * @param Context $context
  52. * @param DateTime $dateTime
  53. * @param FileFactory $fileFactory
  54. * @param PickupPdfFactory $pickupPdfFactory
  55. * @param PickupLoader $pickupLoader
  56. * @param PickupProviderInterface $pickupProvider
  57. */
  58. public function __construct(
  59. Context $context,
  60. DateTime $dateTime,
  61. FileFactory $fileFactory,
  62. PickupPdfFactory $pickupPdfFactory,
  63. PickupLoader $pickupLoader,
  64. PickupProviderInterface $pickupProvider
  65. ) {
  66. $this->fileFactory = $fileFactory;
  67. $this->dateTime = $dateTime;
  68. $this->pickupPdfFactory = $pickupPdfFactory;
  69. $this->pickupLoader = $pickupLoader;
  70. $this->pickupProvider = $pickupProvider;
  71. parent::__construct($context);
  72. }
  73. /**
  74. * Execute action.
  75. *
  76. * @return ResponseInterface|Redirect
  77. */
  78. public function execute()
  79. {
  80. $pickupId = $this->getRequest()->getParam('pickup_id');
  81. $orderId = $this->getRequest()->getParam('sales_order_id');
  82. try {
  83. $downloadResponse = $this->createPackagingSlip($pickupId, $orderId);
  84. return $downloadResponse;
  85. } catch (\Exception $e) {
  86. $this->messageManager->addErrorMessage(__('There was an error creating package slip pdf.'));
  87. $redirect = $this->resultRedirectFactory->create();
  88. $redirect->setPath($this->_redirect->getRefererUrl());
  89. return $redirect;
  90. }
  91. }
  92. /**
  93. * Prepare download response.
  94. *
  95. * @param string $pickupId
  96. * @param string $orderId
  97. *
  98. * @return ResponseInterface|Redirect
  99. * @throws \Exception
  100. */
  101. private function createPackagingSlip($pickupId, $orderId)
  102. {
  103. $pickups = $this->pickupLoader->load((int)$orderId, (string)$pickupId);
  104. $this->pickupLoader->register($pickups, (int)$orderId, (string)$pickupId);
  105. $pickup = $this->pickupProvider->getPickup();
  106. $order = $this->pickupProvider->getOrder();
  107. $pickupPdf = $this->pickupPdfFactory->create(
  108. ['data' => ['order' => $order, 'pickup' => $pickup, 'pickups' => $pickups]]
  109. );
  110. $filename = sprintf(
  111. 'packingslip-%s-%s.pdf',
  112. $pickupId,
  113. $this->dateTime->date('Y-m-d_H-i-s')
  114. );
  115. $content = $pickupPdf->getPdf()->render();
  116. $response = $this->fileFactory->create(
  117. $filename,
  118. $content,
  119. DirectoryList::VAR_DIR,
  120. 'application/pdf'
  121. );
  122. return $response;
  123. }
  124. }