Pdfdocs.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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\Sales\Model\Order\Pdf\Invoice;
  11. use Magento\Backend\App\Action\Context;
  12. use Magento\Framework\App\Response\Http\FileFactory;
  13. use Magento\Ui\Component\MassAction\Filter;
  14. use Magento\Sales\Model\Order\Pdf\Shipment;
  15. use Magento\Sales\Model\Order\Pdf\Creditmemo;
  16. use Magento\Framework\Stdlib\DateTime\DateTime;
  17. use Magento\Sales\Model\ResourceModel\Order\CollectionFactory as OrderCollectionFactory;
  18. use Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory as ShipmentCollectionFactory;
  19. use Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory as InvoiceCollectionFactory;
  20. use Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory as CreditmemoCollectionFactory;
  21. /**
  22. * Class Pdfdocs
  23. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  24. */
  25. class Pdfdocs extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction
  26. {
  27. /**
  28. * @var \Magento\Framework\App\Response\Http\FileFactory
  29. */
  30. protected $fileFactory;
  31. /**
  32. * @var Invoice
  33. */
  34. protected $pdfInvoice;
  35. /**
  36. * @var Shipment
  37. */
  38. protected $pdfShipment;
  39. /**
  40. * @var Creditmemo
  41. */
  42. protected $pdfCreditmemo;
  43. /**
  44. * @var DateTime
  45. */
  46. protected $dateTime;
  47. /**
  48. * @var ShipmentCollectionFactory
  49. */
  50. protected $shipmentCollectionFactory;
  51. /**
  52. * @var InvoiceCollectionFactory
  53. */
  54. protected $invoiceCollectionFactory;
  55. /**
  56. * @var CreditmemoCollectionFactory
  57. */
  58. protected $creditmemoCollectionFactory;
  59. /**
  60. * @param Context $context
  61. * @param Filter $filter
  62. * @param FileFactory $fileFactory
  63. * @param Invoice $pdfInvoice
  64. * @param Shipment $pdfShipment
  65. * @param Creditmemo $pdfCreditmemo
  66. * @param DateTime $dateTime
  67. * @param ShipmentCollectionFactory $shipmentCollectionFactory
  68. * @param InvoiceCollectionFactory $invoiceCollectionFactory
  69. * @param CreditmemoCollectionFactory $creditmemoCollectionFactory
  70. * @param OrderCollectionFactory $orderCollectionFactory
  71. *
  72. * @SuppressWarnings(PHPMD.ExcessiveParameterList)
  73. */
  74. public function __construct(
  75. Context $context,
  76. Filter $filter,
  77. FileFactory $fileFactory,
  78. Invoice $pdfInvoice,
  79. Shipment $pdfShipment,
  80. Creditmemo $pdfCreditmemo,
  81. DateTime $dateTime,
  82. ShipmentCollectionFactory $shipmentCollectionFactory,
  83. InvoiceCollectionFactory $invoiceCollectionFactory,
  84. CreditmemoCollectionFactory $creditmemoCollectionFactory,
  85. OrderCollectionFactory $orderCollectionFactory
  86. ) {
  87. $this->pdfInvoice = $pdfInvoice;
  88. $this->pdfShipment = $pdfShipment;
  89. $this->pdfCreditmemo = $pdfCreditmemo;
  90. $this->fileFactory = $fileFactory;
  91. $this->dateTime = $dateTime;
  92. $this->shipmentCollectionFactory = $shipmentCollectionFactory;
  93. $this->invoiceCollectionFactory = $invoiceCollectionFactory;
  94. $this->creditmemoCollectionFactory = $creditmemoCollectionFactory;
  95. $this->collectionFactory = $orderCollectionFactory;
  96. parent::__construct($context, $filter);
  97. }
  98. /**
  99. * Print all documents for selected orders
  100. *
  101. * @param AbstractCollection $collection
  102. * @return ResponseInterface|\Magento\Backend\Model\View\Result\Redirect
  103. *
  104. * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  105. * @throws \Exception
  106. */
  107. protected function massAction(AbstractCollection $collection)
  108. {
  109. $orderIds = $collection->getAllIds();
  110. $shipments = $this->shipmentCollectionFactory->create()->setOrderFilter(['in' => $orderIds]);
  111. $invoices = $this->invoiceCollectionFactory->create()->setOrderFilter(['in' => $orderIds]);
  112. $creditmemos = $this->creditmemoCollectionFactory->create()->setOrderFilter(['in' => $orderIds]);
  113. $documents = [];
  114. if ($invoices->getSize()) {
  115. $documents[] = $this->pdfInvoice->getPdf($invoices);
  116. }
  117. if ($shipments->getSize()) {
  118. $documents[] = $this->pdfShipment->getPdf($shipments);
  119. }
  120. if ($creditmemos->getSize()) {
  121. $documents[] = $this->pdfCreditmemo->getPdf($creditmemos);
  122. }
  123. if (empty($documents)) {
  124. $this->messageManager->addErrorMessage(__('There are no printable documents related to selected orders.'));
  125. return $this->resultRedirectFactory->create()->setPath($this->getComponentRefererUrl());
  126. }
  127. $pdf = array_shift($documents);
  128. foreach ($documents as $document) {
  129. $pdf->pages = array_merge($pdf->pages, $document->pages);
  130. }
  131. $fileContent = ['type' => 'string', 'value' => $pdf->render(), 'rm' => true];
  132. return $this->fileFactory->create(
  133. sprintf('docs%s.pdf', $this->dateTime->date('Y-m-d_H-i-s')),
  134. $fileContent,
  135. DirectoryList::VAR_DIR,
  136. 'application/pdf'
  137. );
  138. }
  139. }