Pdfcreditmemos.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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\Ui\Component\MassAction\Filter;
  11. use Magento\Sales\Model\Order\Pdf\Creditmemo;
  12. use Magento\Framework\Stdlib\DateTime\DateTime;
  13. use Magento\Framework\App\Response\Http\FileFactory;
  14. use Magento\Backend\App\Action\Context;
  15. use Magento\Framework\Controller\ResultInterface;
  16. use Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory;
  17. use Magento\Sales\Model\ResourceModel\Order\Collection as OrderCollection;
  18. /**
  19. * Class Pdfcreditmemos
  20. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  21. */
  22. class Pdfcreditmemos extends \Magento\Sales\Controller\Adminhtml\Order\PdfDocumentsMassAction
  23. {
  24. /**
  25. * Authorization level of a basic admin session
  26. */
  27. const ADMIN_RESOURCE = 'Magento_Sales::creditmemo';
  28. /**
  29. * @var FileFactory
  30. */
  31. protected $fileFactory;
  32. /**
  33. * @var DateTime
  34. */
  35. protected $dateTime;
  36. /**
  37. * @var Creditmemo
  38. */
  39. protected $pdfCreditmemo;
  40. /**
  41. * @var CollectionFactory
  42. */
  43. protected $collectionFactory;
  44. /**
  45. * @param Context $context
  46. * @param Filter $filter
  47. * @param CollectionFactory $collectionFactory
  48. * @param DateTime $dateTime
  49. * @param FileFactory $fileFactory
  50. * @param Creditmemo $pdfCreditmemo
  51. */
  52. public function __construct(
  53. Context $context,
  54. Filter $filter,
  55. CollectionFactory $collectionFactory,
  56. DateTime $dateTime,
  57. FileFactory $fileFactory,
  58. Creditmemo $pdfCreditmemo
  59. ) {
  60. $this->fileFactory = $fileFactory;
  61. $this->dateTime = $dateTime;
  62. $this->pdfCreditmemo = $pdfCreditmemo;
  63. $this->collectionFactory = $collectionFactory;
  64. parent::__construct($context, $filter);
  65. }
  66. /**
  67. * Print credit memos for selected orders
  68. *
  69. * @param AbstractCollection $collection
  70. * @return ResponseInterface|ResultInterface
  71. * @throws \Exception
  72. */
  73. protected function massAction(AbstractCollection $collection)
  74. {
  75. $creditmemoCollection = $this->collectionFactory->create()->setOrderFilter(['in' => $collection->getAllIds()]);
  76. if (!$creditmemoCollection->getSize()) {
  77. $this->messageManager->addErrorMessage(__('There are no printable documents related to selected orders.'));
  78. return $this->resultRedirectFactory->create()->setPath($this->getComponentRefererUrl());
  79. }
  80. $pdf = $this->pdfCreditmemo->getPdf($creditmemoCollection->getItems());
  81. $fileContent = ['type' => 'string', 'value' => $pdf->render(), 'rm' => true];
  82. return $this->fileFactory->create(
  83. sprintf('creditmemo%s.pdf', $this->dateTime->date('Y-m-d_H-i-s')),
  84. $fileContent,
  85. DirectoryList::VAR_DIR,
  86. 'application/pdf'
  87. );
  88. }
  89. }