implement pdf invoice generation workflow
This commit is contained in:
@@ -41,6 +41,7 @@ class Pdf extends BaseAction implements EventSubscriberInterface
|
|||||||
|
|
||||||
$domPdf = new \DOMPDF();
|
$domPdf = new \DOMPDF();
|
||||||
$domPdf->load_html($event->getContent());
|
$domPdf->load_html($event->getContent());
|
||||||
|
$domPdf->render();
|
||||||
|
|
||||||
$event->setPdf($domPdf->output());
|
$event->setPdf($domPdf->output());
|
||||||
}
|
}
|
||||||
@@ -67,7 +68,7 @@ class Pdf extends BaseAction implements EventSubscriberInterface
|
|||||||
*/
|
*/
|
||||||
public static function getSubscribedEvents()
|
public static function getSubscribedEvents()
|
||||||
{
|
{
|
||||||
array(
|
return array(
|
||||||
TheliaEvents::GENERATE_PDF => array("generatePdf", 128)
|
TheliaEvents::GENERATE_PDF => array("generatePdf", 128)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -111,6 +111,11 @@
|
|||||||
<tag name="kernel.event_subscriber"/>
|
<tag name="kernel.event_subscriber"/>
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
<service id="thelia.action.pdf" class="Thelia\Action\Pdf">
|
||||||
|
<argument type="service" id="service_container"/>
|
||||||
|
<tag name="kernel.event_subscriber"/>
|
||||||
|
</service>
|
||||||
|
|
||||||
</services>
|
</services>
|
||||||
|
|
||||||
</config>
|
</config>
|
||||||
|
|||||||
@@ -150,6 +150,11 @@
|
|||||||
<default key="_controller">Thelia\Controller\Admin\OrderController::updateAddress</default>
|
<default key="_controller">Thelia\Controller\Admin\OrderController::updateAddress</default>
|
||||||
</route>
|
</route>
|
||||||
|
|
||||||
|
<route id="admin.order.pdf.invoice" path="/admin/order/pdf/invoice/{order_id}">
|
||||||
|
<default key="_controller">Thelia\Controller\Admin\OrderController::generateInvoicePdf</default>
|
||||||
|
<requirement key="order_id">\d+</requirement>
|
||||||
|
</route>
|
||||||
|
|
||||||
<!-- end order management -->
|
<!-- end order management -->
|
||||||
|
|
||||||
<!-- Categories management -->
|
<!-- Categories management -->
|
||||||
|
|||||||
@@ -187,12 +187,12 @@ class BaseAdminController extends BaseController
|
|||||||
/**
|
/**
|
||||||
* @return a ParserInterface instance parser
|
* @return a ParserInterface instance parser
|
||||||
*/
|
*/
|
||||||
protected function getParser()
|
protected function getParser($template = null)
|
||||||
{
|
{
|
||||||
$parser = $this->container->get("thelia.parser");
|
$parser = $this->container->get("thelia.parser");
|
||||||
|
|
||||||
// Define the template thant shoud be used
|
// Define the template thant shoud be used
|
||||||
$parser->setTemplate(ConfigQuery::read('base_admin_template', 'admin/default'));
|
$parser->setTemplate($template ?: ConfigQuery::read('base_admin_template', 'admin/default'));
|
||||||
|
|
||||||
return $parser;
|
return $parser;
|
||||||
}
|
}
|
||||||
@@ -378,10 +378,12 @@ class BaseAdminController extends BaseController
|
|||||||
* Render the given template, and returns the result as a string.
|
* Render the given template, and returns the result as a string.
|
||||||
*
|
*
|
||||||
* @param $templateName the complete template name, with extension
|
* @param $templateName the complete template name, with extension
|
||||||
* @param array $args the template arguments
|
* @param array $args the template arguments
|
||||||
|
* @param null $templateDir
|
||||||
|
*
|
||||||
* @return \Symfony\Component\HttpFoundation\Response
|
* @return \Symfony\Component\HttpFoundation\Response
|
||||||
*/
|
*/
|
||||||
protected function renderRaw($templateName, $args = array())
|
protected function renderRaw($templateName, $args = array(), $templateDir = null)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Add the template standard extension
|
// Add the template standard extension
|
||||||
@@ -417,7 +419,7 @@ class BaseAdminController extends BaseController
|
|||||||
|
|
||||||
// Render the template.
|
// Render the template.
|
||||||
try {
|
try {
|
||||||
$data = $this->getParser()->render($templateName, $args);
|
$data = $this->getParser($templateDir)->render($templateName, $args);
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
} catch (AuthenticationException $ex) {
|
} catch (AuthenticationException $ex) {
|
||||||
|
|||||||
@@ -23,10 +23,13 @@
|
|||||||
|
|
||||||
namespace Thelia\Controller\Admin;
|
namespace Thelia\Controller\Admin;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Thelia\Core\Event\Order\OrderAddressEvent;
|
use Thelia\Core\Event\Order\OrderAddressEvent;
|
||||||
use Thelia\Core\Event\Order\OrderEvent;
|
use Thelia\Core\Event\Order\OrderEvent;
|
||||||
|
use Thelia\Core\Event\PdfEvent;
|
||||||
use Thelia\Core\Event\TheliaEvents;
|
use Thelia\Core\Event\TheliaEvents;
|
||||||
use Thelia\Form\OrderUpdateAddress;
|
use Thelia\Form\OrderUpdateAddress;
|
||||||
|
use Thelia\Model\ConfigQuery;
|
||||||
use Thelia\Model\Base\OrderAddressQuery;
|
use Thelia\Model\Base\OrderAddressQuery;
|
||||||
use Thelia\Model\OrderQuery;
|
use Thelia\Model\OrderQuery;
|
||||||
use Thelia\Model\OrderStatusQuery;
|
use Thelia\Model\OrderStatusQuery;
|
||||||
@@ -193,4 +196,42 @@ class OrderController extends BaseAdminController
|
|||||||
|
|
||||||
$this->redirect(URL::getInstance()->absoluteUrl($this->getRoute("admin.order.update.view", $params)));
|
$this->redirect(URL::getInstance()->absoluteUrl($this->getRoute("admin.order.update.view", $params)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function generateInvoicePdf($order_id)
|
||||||
|
{
|
||||||
|
if (null !== $response = $this->checkAuth("admin.order.update")) return $response;
|
||||||
|
|
||||||
|
|
||||||
|
$html = $this->renderRaw(
|
||||||
|
ConfigQuery::read('pdf_invoice_file', 'invoice'),
|
||||||
|
array(
|
||||||
|
'order_id' => $order_id
|
||||||
|
),
|
||||||
|
ConfigQuery::read('pdf_template', 'pdf')
|
||||||
|
);
|
||||||
|
|
||||||
|
$order = OrderQuery::create()->findPk($order_id);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$pdfEvent = new PdfEvent($html);
|
||||||
|
|
||||||
|
$this->dispatch(TheliaEvents::GENERATE_PDF, $pdfEvent);
|
||||||
|
|
||||||
|
if($pdfEvent->hasPdf()) {
|
||||||
|
return Response::create($pdfEvent->getPdf(), 200,
|
||||||
|
array(
|
||||||
|
'Content-type' => "application/pdf",
|
||||||
|
'Content-Disposition' => sprintf('Attachment;filename=%s.pdf', $order->getRef()),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
\Thelia\Log\Tlog::getInstance()->error(sprintf('error during generating invoice pdf for order id : %d', $order_id));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->redirect(URL::getInstance()->absoluteUrl($this->getRoute("admin.order.update.view", array(
|
||||||
|
'order_id' => $order_id
|
||||||
|
))));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,4 +65,9 @@ class PdfEvent extends ActionEvent
|
|||||||
{
|
{
|
||||||
return $this->pdf;
|
return $this->pdf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function hasPdf()
|
||||||
|
{
|
||||||
|
return null !== $this->pdf;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -193,7 +193,7 @@
|
|||||||
<caption class="clearfix">
|
<caption class="clearfix">
|
||||||
{intl l='Invoice informations'}
|
{intl l='Invoice informations'}
|
||||||
<div class="pull-right">
|
<div class="pull-right">
|
||||||
<a class="btn btn-default btn-primary" title="{intl l='Download invoice as PDF'}" href="#">
|
<a class="btn btn-default btn-primary" title="{intl l='Download invoice as PDF'}" href="{url path="/admin/order/pdf/invoice/$ID"}">
|
||||||
<span class="glyphicon glyphicon-cloud-download"></span> {intl l='PDF | Invoice'}
|
<span class="glyphicon glyphicon-cloud-download"></span> {intl l='PDF | Invoice'}
|
||||||
</a>
|
</a>
|
||||||
<a class="btn btn-default btn-primary js-update-order-address" data-address-id="{$INVOICE_ADDRESS}" title="{intl l='Edit invoice address'}" href="#edit_order_address_dialog" data-toggle="modal">
|
<a class="btn btn-default btn-primary js-update-order-address" data-address-id="{$INVOICE_ADDRESS}" title="{intl l='Edit invoice address'}" href="#edit_order_address_dialog" data-toggle="modal">
|
||||||
|
|||||||
9
templates/pdf/invoice.html
Normal file
9
templates/pdf/invoice.html
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>REF</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
generate invoice
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user