Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Pdfdocs.php
Go to the documentation of this file.
1 <?php
7 
19 use Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory as ShipmentCollectionFactory;
20 use Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory as InvoiceCollectionFactory;
21 use Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory as CreditmemoCollectionFactory;
22 
27 class Pdfdocs extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction
28 {
32  protected $fileFactory;
33 
37  protected $pdfInvoice;
38 
42  protected $pdfShipment;
43 
47  protected $pdfCreditmemo;
48 
52  protected $dateTime;
53 
58 
63 
68 
84  public function __construct(
85  Context $context,
92  ShipmentCollectionFactory $shipmentCollectionFactory,
93  InvoiceCollectionFactory $invoiceCollectionFactory,
94  CreditmemoCollectionFactory $creditmemoCollectionFactory,
95  OrderCollectionFactory $orderCollectionFactory
96  ) {
97  $this->pdfInvoice = $pdfInvoice;
98  $this->pdfShipment = $pdfShipment;
99  $this->pdfCreditmemo = $pdfCreditmemo;
100  $this->fileFactory = $fileFactory;
101  $this->dateTime = $dateTime;
102  $this->shipmentCollectionFactory = $shipmentCollectionFactory;
103  $this->invoiceCollectionFactory = $invoiceCollectionFactory;
104  $this->creditmemoCollectionFactory = $creditmemoCollectionFactory;
105  $this->collectionFactory = $orderCollectionFactory;
106  parent::__construct($context, $filter);
107  }
108 
119  {
120  $orderIds = $collection->getAllIds();
121 
122  $shipments = $this->shipmentCollectionFactory->create()->setOrderFilter(['in' => $orderIds]);
123  $invoices = $this->invoiceCollectionFactory->create()->setOrderFilter(['in' => $orderIds]);
124  $creditmemos = $this->creditmemoCollectionFactory->create()->setOrderFilter(['in' => $orderIds]);
125 
126  $documents = [];
127  if ($invoices->getSize()) {
128  $documents[] = $this->pdfInvoice->getPdf($invoices);
129  }
130  if ($shipments->getSize()) {
131  $documents[] = $this->pdfShipment->getPdf($shipments);
132  }
133  if ($creditmemos->getSize()) {
134  $documents[] = $this->pdfCreditmemo->getPdf($creditmemos);
135  }
136 
137  if (empty($documents)) {
138  $this->messageManager->addErrorMessage(__('There are no printable documents related to selected orders.'));
139  return $this->resultRedirectFactory->create()->setPath($this->getComponentRefererUrl());
140  }
141 
142  $pdf = array_shift($documents);
143  foreach ($documents as $document) {
144  $pdf->pages = array_merge($pdf->pages, $document->pages);
145  }
146  $fileContent = ['type' => 'string', 'value' => $pdf->render(), 'rm' => true];
147 
148  return $this->fileFactory->create(
149  sprintf('docs%s.pdf', $this->dateTime->date('Y-m-d_H-i-s')),
150  $fileContent,
151  DirectoryList::VAR_DIR,
152  'application/pdf'
153  );
154  }
155 }
__()
Definition: __.php:13
$shipments
$invoices
massAction(AbstractCollection $collection)
Definition: Pdfdocs.php:118
$orderIds
Definition: results.phtml:9
__construct(Context $context, Filter $filter, FileFactory $fileFactory, Invoice $pdfInvoice, Shipment $pdfShipment, Creditmemo $pdfCreditmemo, DateTime $dateTime, ShipmentCollectionFactory $shipmentCollectionFactory, InvoiceCollectionFactory $invoiceCollectionFactory, CreditmemoCollectionFactory $creditmemoCollectionFactory, OrderCollectionFactory $orderCollectionFactory)
Definition: Pdfdocs.php:84