Pdfshipments.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Controller\Adminhtml\Order;
  7. use Magento\Framework\App\ResponseInterface;
  8. use Magento\Framework\App\Filesystem\DirectoryList;
  9. use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
  10. use Magento\Backend\App\Action\Context;
  11. use Magento\Framework\App\Response\Http\FileFactory;
  12. use Magento\Ui\Component\MassAction\Filter;
  13. use Magento\Sales\Model\Order\Pdf\Shipment;
  14. use Magento\Framework\Stdlib\DateTime\DateTime;
  15. use Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory as ShipmentCollectionFactory;
  16. use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
  17. /**
  18. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  19. */
  20. class Pdfshipments extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction
  21. {
  22. /**
  23. * Authorization level of a basic admin session
  24. */
  25. const ADMIN_RESOURCE = 'Magento_Sales::ship';
  26. /**
  27. * @var FileFactory
  28. */
  29. protected $fileFactory;
  30. /**
  31. * @var DateTime
  32. */
  33. protected $dateTime;
  34. /**
  35. * @var Shipment
  36. */
  37. protected $pdfShipment;
  38. /**
  39. * @var ShipmentCollectionFactory
  40. */
  41. protected $shipmentCollectionFactory;
  42. /**
  43. * @param Context $context
  44. * @param Filter $filter
  45. * @param CollectionFactory $collectionFactory
  46. * @param DateTime $dateTime
  47. * @param FileFactory $fileFactory
  48. * @param Shipment $shipment
  49. * @param ShipmentCollectionFactory $shipmentCollectionFactory
  50. */
  51. public function __construct(
  52. Context $context,
  53. Filter $filter,
  54. CollectionFactory $collectionFactory,
  55. DateTime $dateTime,
  56. FileFactory $fileFactory,
  57. Shipment $shipment,
  58. ShipmentCollectionFactory $shipmentCollectionFactory
  59. ) {
  60. $this->fileFactory = $fileFactory;
  61. $this->dateTime = $dateTime;
  62. $this->pdfShipment = $shipment;
  63. $this->collectionFactory = $collectionFactory;
  64. $this->shipmentCollectionFactory = $shipmentCollectionFactory;
  65. parent::__construct($context, $filter);
  66. }
  67. /**
  68. * Print shipments for selected orders
  69. *
  70. * @param AbstractCollection $collection
  71. * @return ResponseInterface|\Magento\Backend\Model\View\Result\Redirect
  72. * @throws \Exception
  73. */
  74. protected function massAction(AbstractCollection $collection)
  75. {
  76. $shipmentsCollection = $this->shipmentCollectionFactory
  77. ->create()
  78. ->setOrderFilter(['in' => $collection->getAllIds()]);
  79. if (!$shipmentsCollection->getSize()) {
  80. $this->messageManager->addErrorMessage(__('There are no printable documents related to selected orders.'));
  81. return $this->resultRedirectFactory->create()->setPath($this->getComponentRefererUrl());
  82. }
  83. $pdf = $this->pdfShipment->getPdf($shipmentsCollection->getItems());
  84. $fileContent = ['type' => 'string', 'value' => $pdf->render(), 'rm' => true];
  85. return $this->fileFactory->create(
  86. sprintf('packingslip%s.pdf', $this->dateTime->date('Y-m-d_H-i-s')),
  87. $fileContent,
  88. DirectoryList::VAR_DIR,
  89. 'application/pdf'
  90. );
  91. }
  92. }