123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Sales\Model\Order\Pdf;
- use Magento\Sales\Model\ResourceModel\Order\Invoice\Collection;
- /**
- * Sales Order Invoice PDF model
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class Invoice extends AbstractPdf
- {
- /**
- * @var \Magento\Store\Model\StoreManagerInterface
- */
- protected $_storeManager;
- /**
- * @var \Magento\Framework\Locale\ResolverInterface
- */
- protected $_localeResolver;
- /**
- * @param \Magento\Payment\Helper\Data $paymentData
- * @param \Magento\Framework\Stdlib\StringUtils $string
- * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
- * @param \Magento\Framework\Filesystem $filesystem
- * @param Config $pdfConfig
- * @param \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory
- * @param \Magento\Sales\Model\Order\Pdf\ItemsFactory $pdfItemsFactory
- * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
- * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
- * @param \Magento\Sales\Model\Order\Address\Renderer $addressRenderer
- * @param \Magento\Store\Model\StoreManagerInterface $storeManager
- * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
- * @param array $data
- *
- * @SuppressWarnings(PHPMD.ExcessiveParameterList)
- */
- public function __construct(
- \Magento\Payment\Helper\Data $paymentData,
- \Magento\Framework\Stdlib\StringUtils $string,
- \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
- \Magento\Framework\Filesystem $filesystem,
- Config $pdfConfig,
- \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory,
- \Magento\Sales\Model\Order\Pdf\ItemsFactory $pdfItemsFactory,
- \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
- \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
- \Magento\Sales\Model\Order\Address\Renderer $addressRenderer,
- \Magento\Store\Model\StoreManagerInterface $storeManager,
- \Magento\Framework\Locale\ResolverInterface $localeResolver,
- array $data = []
- ) {
- $this->_storeManager = $storeManager;
- $this->_localeResolver = $localeResolver;
- parent::__construct(
- $paymentData,
- $string,
- $scopeConfig,
- $filesystem,
- $pdfConfig,
- $pdfTotalFactory,
- $pdfItemsFactory,
- $localeDate,
- $inlineTranslation,
- $addressRenderer,
- $data
- );
- }
- /**
- * Draw header for item table
- *
- * @param \Zend_Pdf_Page $page
- * @return void
- */
- protected function _drawHeader(\Zend_Pdf_Page $page)
- {
- /* Add table head */
- $this->_setFontRegular($page, 10);
- $page->setFillColor(new \Zend_Pdf_Color_Rgb(0.93, 0.92, 0.92));
- $page->setLineColor(new \Zend_Pdf_Color_GrayScale(0.5));
- $page->setLineWidth(0.5);
- $page->drawRectangle(25, $this->y, 570, $this->y - 15);
- $this->y -= 10;
- $page->setFillColor(new \Zend_Pdf_Color_Rgb(0, 0, 0));
- //columns headers
- $lines[0][] = ['text' => __('Products'), 'feed' => 35];
- $lines[0][] = ['text' => __('SKU'), 'feed' => 290, 'align' => 'right'];
- $lines[0][] = ['text' => __('Qty'), 'feed' => 435, 'align' => 'right'];
- $lines[0][] = ['text' => __('Price'), 'feed' => 360, 'align' => 'right'];
- $lines[0][] = ['text' => __('Tax'), 'feed' => 495, 'align' => 'right'];
- $lines[0][] = ['text' => __('Subtotal'), 'feed' => 565, 'align' => 'right'];
- $lineBlock = ['lines' => $lines, 'height' => 5];
- $this->drawLineBlocks($page, [$lineBlock], ['table_header' => true]);
- $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
- $this->y -= 20;
- }
- /**
- * Return PDF document
- *
- * @param array|Collection $invoices
- * @return \Zend_Pdf
- */
- public function getPdf($invoices = [])
- {
- $this->_beforeGetPdf();
- $this->_initRenderer('invoice');
- $pdf = new \Zend_Pdf();
- $this->_setPdf($pdf);
- $style = new \Zend_Pdf_Style();
- $this->_setFontBold($style, 10);
- foreach ($invoices as $invoice) {
- if ($invoice->getStoreId()) {
- $this->_localeResolver->emulate($invoice->getStoreId());
- $this->_storeManager->setCurrentStore($invoice->getStoreId());
- }
- $page = $this->newPage();
- $order = $invoice->getOrder();
- /* Add image */
- $this->insertLogo($page, $invoice->getStore());
- /* Add address */
- $this->insertAddress($page, $invoice->getStore());
- /* Add head */
- $this->insertOrder(
- $page,
- $order,
- $this->_scopeConfig->isSetFlag(
- self::XML_PATH_SALES_PDF_INVOICE_PUT_ORDER_ID,
- \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
- $order->getStoreId()
- )
- );
- /* Add document text and number */
- $this->insertDocumentNumber($page, __('Invoice # ') . $invoice->getIncrementId());
- /* Add table */
- $this->_drawHeader($page);
- /* Add body */
- foreach ($invoice->getAllItems() as $item) {
- if ($item->getOrderItem()->getParentItem()) {
- continue;
- }
- /* Draw item */
- $this->_drawItem($item, $page, $order);
- $page = end($pdf->pages);
- }
- /* Add totals */
- $this->insertTotals($page, $invoice);
- if ($invoice->getStoreId()) {
- $this->_localeResolver->revert();
- }
- }
- $this->_afterGetPdf();
- return $pdf;
- }
- /**
- * Create new page and assign to PDF object
- *
- * @param array $settings
- * @return \Zend_Pdf_Page
- */
- public function newPage(array $settings = [])
- {
- /* Add new table head */
- $page = $this->_getPdf()->newPage(\Zend_Pdf_Page::SIZE_A4);
- $this->_getPdf()->pages[] = $page;
- $this->y = 800;
- if (!empty($settings['table_header'])) {
- $this->_drawHeader($page);
- }
- return $page;
- }
- }
|