Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Invoice.php
Go to the documentation of this file.
1 <?php
7 
9 
14 class Invoice extends AbstractPdf
15 {
19  protected $_storeManager;
20 
24  protected $_localeResolver;
25 
43  public function __construct(
44  \Magento\Payment\Helper\Data $paymentData,
45  \Magento\Framework\Stdlib\StringUtils $string,
46  \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
47  \Magento\Framework\Filesystem $filesystem,
48  Config $pdfConfig,
49  \Magento\Sales\Model\Order\Pdf\Total\Factory $pdfTotalFactory,
50  \Magento\Sales\Model\Order\Pdf\ItemsFactory $pdfItemsFactory,
51  \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
52  \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
55  \Magento\Framework\Locale\ResolverInterface $localeResolver,
56  array $data = []
57  ) {
58  $this->_storeManager = $storeManager;
59  $this->_localeResolver = $localeResolver;
60  parent::__construct(
61  $paymentData,
62  $string,
63  $scopeConfig,
65  $pdfConfig,
66  $pdfTotalFactory,
67  $pdfItemsFactory,
68  $localeDate,
71  $data
72  );
73  }
74 
81  protected function _drawHeader(\Zend_Pdf_Page $page)
82  {
83  /* Add table head */
84  $this->_setFontRegular($page, 10);
85  $page->setFillColor(new \Zend_Pdf_Color_Rgb(0.93, 0.92, 0.92));
86  $page->setLineColor(new \Zend_Pdf_Color_GrayScale(0.5));
87  $page->setLineWidth(0.5);
88  $page->drawRectangle(25, $this->y, 570, $this->y - 15);
89  $this->y -= 10;
90  $page->setFillColor(new \Zend_Pdf_Color_Rgb(0, 0, 0));
91 
92  //columns headers
93  $lines[0][] = ['text' => __('Products'), 'feed' => 35];
94 
95  $lines[0][] = ['text' => __('SKU'), 'feed' => 290, 'align' => 'right'];
96 
97  $lines[0][] = ['text' => __('Qty'), 'feed' => 435, 'align' => 'right'];
98 
99  $lines[0][] = ['text' => __('Price'), 'feed' => 360, 'align' => 'right'];
100 
101  $lines[0][] = ['text' => __('Tax'), 'feed' => 495, 'align' => 'right'];
102 
103  $lines[0][] = ['text' => __('Subtotal'), 'feed' => 565, 'align' => 'right'];
104 
105  $lineBlock = ['lines' => $lines, 'height' => 5];
106 
107  $this->drawLineBlocks($page, [$lineBlock], ['table_header' => true]);
108  $page->setFillColor(new \Zend_Pdf_Color_GrayScale(0));
109  $this->y -= 20;
110  }
111 
118  public function getPdf($invoices = [])
119  {
120  $this->_beforeGetPdf();
121  $this->_initRenderer('invoice');
122 
123  $pdf = new \Zend_Pdf();
124  $this->_setPdf($pdf);
125  $style = new \Zend_Pdf_Style();
126  $this->_setFontBold($style, 10);
127 
128  foreach ($invoices as $invoice) {
129  if ($invoice->getStoreId()) {
130  $this->_localeResolver->emulate($invoice->getStoreId());
131  $this->_storeManager->setCurrentStore($invoice->getStoreId());
132  }
133  $page = $this->newPage();
134  $order = $invoice->getOrder();
135  /* Add image */
136  $this->insertLogo($page, $invoice->getStore());
137  /* Add address */
138  $this->insertAddress($page, $invoice->getStore());
139  /* Add head */
140  $this->insertOrder(
141  $page,
142  $order,
143  $this->_scopeConfig->isSetFlag(
144  self::XML_PATH_SALES_PDF_INVOICE_PUT_ORDER_ID,
145  \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
146  $order->getStoreId()
147  )
148  );
149  /* Add document text and number */
150  $this->insertDocumentNumber($page, __('Invoice # ') . $invoice->getIncrementId());
151  /* Add table */
152  $this->_drawHeader($page);
153  /* Add body */
154  foreach ($invoice->getAllItems() as $item) {
155  if ($item->getOrderItem()->getParentItem()) {
156  continue;
157  }
158  /* Draw item */
159  $this->_drawItem($item, $page, $order);
160  $page = end($pdf->pages);
161  }
162  /* Add totals */
163  $this->insertTotals($page, $invoice);
164  if ($invoice->getStoreId()) {
165  $this->_localeResolver->revert();
166  }
167  }
168  $this->_afterGetPdf();
169  return $pdf;
170  }
171 
178  public function newPage(array $settings = [])
179  {
180  /* Add new table head */
181  $page = $this->_getPdf()->newPage(\Zend_Pdf_Page::SIZE_A4);
182  $this->_getPdf()->pages[] = $page;
183  $this->y = 800;
184  if (!empty($settings['table_header'])) {
185  $this->_drawHeader($page);
186  }
187  return $page;
188  }
189 }
_drawItem(\Magento\Framework\DataObject $item, \Zend_Pdf_Page $page, \Magento\Sales\Model\Order $order)
__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=[])
Definition: Invoice.php:43
$order
Definition: order.php:55
$storeManager
__()
Definition: __.php:13
$invoices
insertDocumentNumber(\Zend_Pdf_Page $page, $text)
$page
Definition: pages.php:8
drawLineBlocks(\Zend_Pdf_Page $page, array $draw, array $pageSettings=[])
$invoice
$settings
Definition: bootstrap.php:29
_drawHeader(\Zend_Pdf_Page $page)
Definition: Invoice.php:81
$filesystem
insertOrder(&$page, $obj, $putOrderId=true)
const SIZE_A4
Definition: Page.php:54