Skip to content
Code-Schnipsel Gruppen Projekte
Commit 8884ea22 erstellt von Patrick Müller's avatar Patrick Müller
Dateien durchsuchen

Merge branch 'feat-outputprovider' into dev

Übergeordnete 67c4c591 78fdd727
Keine zugehörigen Branchen gefunden
Keine zugehörigen Tags gefunden
Keine zugehörigen Merge Requests gefunden
......@@ -108,9 +108,20 @@
<de><![CDATA[Vorgangsnummer]]></de>
<en><![CDATA[Processing-ID]]></en>
</locale>
<locale name="output.default_template.suffix">
<de><![CDATA[(System-Standard)]]></de>
<en><![CDATA[(System default)]]></en>
</locale>
</groups>
<groups name="quiqqer/erp" datatype="php">
<locale name="exception.ajax.output.sendMail.error">
<de><![CDATA[Leider ist beim E-Mail-Verand ein unerwarteter Fehler aufgetreten. Bitte wiederholen Sie den Vorgang, prüfen Sie die Fehler-Logs oder kontaktieren Sie einen Administator.]]></de>
<en><![CDATA[Unfortunately, an unexpected error has occurred when sending the e-mail. Please repeat the process, check the error logs or contact an administrator.]]></en>
</locale>
<locale name="user.settings.title">
<de><![CDATA[Rechnungsdaten]]></de>
<en><![CDATA[Billing Details]]></en>
......@@ -155,6 +166,15 @@
<en><![CDATA[Privacy Policy]]></en>
</locale>
<locale name="menu.erp.output.title">
<de><![CDATA[Beleg-Ausgabe / PDF]]></de>
<en><![CDATA[Document output / PDF]]></en>
</locale>
<locale name="menu.erp.output.default_templates">
<de><![CDATA[Vorausgewählte Templates]]></de>
<en><![CDATA[Preselected templates]]></en>
</locale>
<locale name="shop.settings.general.precision">
<de><![CDATA[Verwendete Nachkommastellen]]></de>
<en><![CDATA[Used decimal digits]]></en>
......@@ -304,6 +324,16 @@
We're sorry, but something went wrong. Please contact an administrator.
]]></en>
</locale>
<locale name="Output.send.success">
<de><![CDATA[E-Mail erfolgreich versandt.]]></de>
<en><![CDATA[E-Mail sent successfully.]]></en>
</locale>
<locale name="exception.Output.sendPdfViaMail.missing_recipient">
<de><![CDATA[Das Dokument kann nicht per E-Mail versendet werden, da keine gültige Empfänger E-Mail-Adresse angegeben wurde.]]></de>
<en><![CDATA[The document cannot be sent by e-mail because no valid recipient e-mail address has been specified.]]></en>
</locale>
</groups>
<groups name="quiqqer/erp" datatype="js">
......@@ -331,6 +361,95 @@
<de><![CDATA[Artikelübersichtsrechnung]]></de>
<en><![CDATA[Article overview calculation]]></en>
</locale>
<!-- Controls -->
<locale name="controls.OutputDialog.labelEntityId">
<de><![CDATA[Beleg-Nr.]]></de>
<en><![CDATA[Document no.]]></en>
</locale>
<locale name="controls.OutputDialog.labelTemplate">
<de><![CDATA[Vorlage (Template)]]></de>
<en><![CDATA[Template]]></en>
</locale>
<locale name="controls.OutputDialog.labelOutputType">
<de><![CDATA[Ausgabe]]></de>
<en><![CDATA[Output]]></en>
</locale>
<locale name="controls.OutputDialog.labelMarkAsSent">
<de><![CDATA[Als versandt markieren]]></de>
<en><![CDATA[Mark as sent]]></en>
</locale>
<locale name="controls.OutputDialog.labelOpenMailEditor">
<de><![CDATA[E-Mail bearbeiten]]></de>
<en><![CDATA[Edit e-mail]]></en>
</locale>
<locale name="controls.OutputDialog.data.output.print">
<de><![CDATA[Drucken]]></de>
<en><![CDATA[Print]]></en>
</locale>
<locale name="controls.OutputDialog.data.output.pdf">
<de><![CDATA[Als PDF speichern]]></de>
<en><![CDATA[Save as PDF]]></en>
</locale>
<locale name="controls.OutputDialog.data.output.email">
<de><![CDATA[Per E-Mail versenden]]></de>
<en><![CDATA[Send via e-mail]]></en>
</locale>
<locale name="controls.OutputDialog.data.output.print.btn">
<de><![CDATA[Drucken]]></de>
<en><![CDATA[Print]]></en>
</locale>
<locale name="controls.OutputDialog.data.output.pdf.btn">
<de><![CDATA[Herunterladen]]></de>
<en><![CDATA[Download]]></en>
</locale>
<locale name="controls.OutputDialog.data.output.email.btn">
<de><![CDATA[Senden]]></de>
<en><![CDATA[Send]]></en>
</locale>
<locale name="controls.OutputDialog.title">
<de><![CDATA[Beleg Druck / PDF / Versand]]></de>
<en><![CDATA[Document print / PDF / send]]></en>
</locale>
<locale name="controls.OutputDialog.no_templates_found">
<de><![CDATA[Keine Vorlagen gefunden]]></de>
<en><![CDATA[No templates found]]></en>
</locale>
<locale name="controls.OutputDialog.no_preview">
<de><![CDATA[Das Dokument ist aktuell nicht verfügbar, da keine Vorlage ausgewählt oder gefunden wurde.]]></de>
<en><![CDATA[The document is currently not available because no template was selected or found.]]></en>
</locale>
<locale name="controls.OutputDialog.preview_error">
<de><![CDATA[Die Vorschau konnte leider nicht geladen werden. Bitte prüfen Sie die Fehler-Logs oder kontaktieren Sie einen Administrator.]]></de>
<en><![CDATA[The preview could not loaded. Please check the error logs or contact an administrator.]]></en>
</locale>
<locale name="controls.OutputDialog.descMarkAsSent">
<de><![CDATA[Markiert den Beleg als versandt, sofern noch kein Versanddatum gesetzt ist.]]></de>
<en><![CDATA[Marks the document as sent, provided that no shipping date has been set.]]></en>
</locale>
<locale name="controls.OutputMailEditor.title">
<de><![CDATA[E-Mail für Beleg bearbeiten]]></de>
<en><![CDATA[Edit document e-mail]]></en>
</locale>
<locale name="controls.OutputMailEditor.labelMailSubject">
<de><![CDATA[Betreff]]></de>
<en><![CDATA[Subject]]></en>
</locale>
<locale name="controls.OutputMailEditor.labelMailContent">
<de><![CDATA[Inhalt (ohne Kopf- und Fußzeile)]]></de>
<en><![CDATA[Content (without header and footer)]]></en>
</locale>
<locale name="controls.OutputMailEditor.info" html="true">
<de><![CDATA[<b>Hinweis:</b> Der Beleg wird als PDF-Datei im Anhang der E-Mail mitgesendet.]]></de>
<en><![CDATA[<b>Hint:</b> The document is sent as a PDF file attached to the e-mail.]]></en>
</locale>
<locale name="controls.settings.OutputTemplates.tpl.labelHideSystemDefault">
<de><![CDATA[System-Standard Template im Ausgabe-Dialog nicht zur Auswahl anbieten]]></de>
<en><![CDATA[Do not offer System Standard Template for selection in output dialog]]></en>
</locale>
</groups>
</locales>
......@@ -29,6 +29,12 @@
</conf>
</section>
<section name="output">
<conf name="default_templates">
<type><![CDATA[string]]></type>
</conf>
</section>
<section name="paymentsChangeable"/>
<section name="timestampFormat"/>
<section name="dateFormat"/>
......@@ -153,6 +159,20 @@
</text>
</input>
</settings>
<settings>
<title>
<locale group="quiqqer/erp" var="menu.erp.output.title"/>
</title>
<input conf="output.default_templates"
data-qui="package/quiqqer/erp/bin/backend/controls/settings/OutputTemplates">
<text>
<locale group="quiqqer/erp" var="menu.erp.output.default_templates"/>
</text>
</input>
</settings>
</category>
<category name="currencies" index="1">
......
<?php
namespace QUI\ERP\Output;
use QUI;
use QUI\ERP\Accounting\Invoice\Settings;
use QUI\ERP\Accounting\Invoice\Utils\Invoice as InvoiceUtils;
/**
* Class Output
*
* Main handler for serving previews, PDFs and downloads for QUIQQER ERP documents
*/
class Output
{
/**
* Get the ERP Output Provider for a specific package
*
* @param string $package
* @return OutputProviderInterface|false - OutputProvider class (static) or false if none found
*/
public static function getOutputProviderByPackage(string $package)
{
foreach (self::getAllOutputProviders() as $outputProvider) {
if ($outputProvider['package'] === $package) {
return $outputProvider['class'];
}
}
return false;
}
/**
* Get the OutputProvider for a specific entity type
*
* @param string $entityType
* @return OutputProviderInterface|false - OutputProvider class (static) or false if none found
*/
public static function getOutputProviderByEntityType(string $entityType)
{
foreach (self::getAllOutputProviders() as $outputProvider) {
/** @var OutputProviderInterface $class */
$class = $outputProvider['class'];
if ($class::getEntityType() === $entityType) {
return $class;
}
}
return false;
}
/**
* Get HTML output for a specific document
*
* @param string|int $entityId
* @param string $entityType
* @param OutputProviderInterface $OutputProvider (optional)
* @param OutputTemplateProviderInterface $TemplateProvider (optional)
* @param string $template (optional)
* @param bool $preview (optional) - Get preview HTML
*
* @return string
*
* @throws QUI\Exception
*/
public static function getDocumentHtml(
$entityId,
string $entityType,
$OutputProvider = null,
$TemplateProvider = null,
string $template = null,
bool $preview = false
) {
if (empty($OutputProvider)) {
$OutputProvider = self::getOutputProviderByEntityType($entityType);
}
if (empty($OutputProvider)) {
throw new QUI\Exception('No output provider found for entity type "'.$entityType.'"');
}
if (empty($TemplateProvider)) {
$TemplateProvider = self::getDefaultOutputTemplateProviderForEntityType($entityType);
}
if (empty($TemplateProvider)) {
throw new QUI\Exception('No default output template provider found for entity type "'.$entityType.'"');
}
$OutputTemplate = new OutputTemplate(
$TemplateProvider,
$OutputProvider,
$entityId,
$entityType,
$template
);
return $OutputTemplate->getHTML($preview);
}
/**
* Get HTML output for a specific document
*
* @param string|int $entityId
* @param string $entityType
* @param OutputProviderInterface $OutputProvider (optional)
* @param OutputTemplateProviderInterface $TemplateProvider (optional)
* @param string $template (optional)
*
* @return QUI\HtmlToPdf\Document
*
* @throws QUI\Exception
*/
public static function getDocumentPdf(
$entityId,
string $entityType,
$OutputProvider = null,
$TemplateProvider = null,
string $template = null
) {
if (empty($OutputProvider)) {
$OutputProvider = self::getOutputProviderByEntityType($entityType);
}
if (empty($TemplateProvider)) {
$TemplateProvider = self::getDefaultOutputTemplateProviderForEntityType($entityType);
}
$OutputTemplate = new OutputTemplate(
$TemplateProvider,
$OutputProvider,
$entityId,
$entityType,
$template
);
return $OutputTemplate->getPDFDocument();
}
/**
* Get HTML output for a specific document
*
* @param string|int $entityId
* @param string $entityType
*
* @return string
*/
public static function getDocumentPdfDownloadUrl(
$entityId,
string $entityType
) {
$url = URL_OPT_DIR.'quiqqer/erp/bin/output/frontend/download.php?';
$url .= \http_build_query([
'id' => $entityId,
't' => $entityType
]);
return $url;
}
/**
* Send document as e-mail with PDF attachment
*
* @param string|int $entityId
* @param string $entityType
* @param OutputProviderInterface $OutputProvider (optional)
* @param OutputTemplateProviderInterface $TemplateProvider (optional)
* @param string $template (optional)
* @param string $recipientEmail (optional)
* @param string $mailSubject (optional)
* @param string $mailContent (optional)
*
* @return void
*
* @throws QUI\Exception
*/
public static function sendPdfViaMail(
$entityId,
string $entityType,
$OutputProvider = null,
$TemplateProvider = null,
string $template = null,
string $recipientEmail = null,
string $mailSubject = null,
string $mailContent = null
) {
if (empty($OutputProvider)) {
$OutputProvider = self::getOutputProviderByEntityType($entityType);
}
if (empty($TemplateProvider)) {
$TemplateProvider = self::getDefaultOutputTemplateProviderForEntityType($entityType);
}
$OutputTemplate = new OutputTemplate(
$TemplateProvider,
$OutputProvider,
$entityId,
$entityType,
$template
);
$pdfFile = $OutputTemplate->getPDFDocument()->createPDF();
if (empty($recipientEmail) || !QUI\Utils\Security\Orthos::checkMailSyntax($recipientEmail)) {
$recipientEmail = $OutputProvider::getEmailAddress($entityId);
}
if (empty($recipientEmail)) {
throw new QUI\ERP\Exception([
'quiqqer/erp',
'exception.Output.sendPdfViaMail.missing_recipient'
]);
}
// mail send
$Mailer = new QUI\Mail\Mailer();
$Mailer->addRecipient($recipientEmail);
$Mailer->addAttachment($pdfFile);
if (!empty($mailSubject)) {
$Mailer->setSubject($mailSubject);
} else {
$Mailer->setSubject($OutputProvider::getMailSubject($entityId));
}
if (!empty($mailContent)) {
$Mailer->setBody($mailContent);
} else {
$Mailer->setBody($OutputProvider::getMailBody($entityId));
}
$Mailer->send();
QUI::getEvents()->fireEvent('quiqqerErpOutputSendMail', [$entityId, $entityType, $recipientEmail]);
// Delete PDF file after send
if (\file_exists($pdfFile)) {
\unlink($pdfFile);
}
}
/**
* Get available templates for $entityType (e.g. "Invoice", "InvoiceTemporary" etc.)
*
* @param string $package
* @return OutputTemplateProviderInterface|false - OutputProvider class (static) or false if
* @throws QUI\Exception
*/
public static function getOutputTemplateProviderByPackage(string $package)
{
foreach (self::getAllOutputTemplateProviders() as $provider) {
if ($provider['package'] === $package) {
return $provider['class'];
}
}
return false;
}
/**
* Get available templates for $entityType (e.g. "Invoice", "InvoiceTemporary" etc.)
*
* @param string $entityType (optional) - Restrict to templates of $entityType [default: fetch templates for all entity types]
* @return array
*/
public static function getTemplates(string $entityType = null)
{
$templates = [];
$outputProviders = [];
if (empty($entityType)) {
$outputProviders = \array_column(self::getAllOutputProviders(), 'class');
} else {
$OutputProvider = self::getOutputProviderByEntityType($entityType);
if ($OutputProvider) {
$outputProviders[] = $OutputProvider;
}
}
foreach (self::getAllOutputTemplateProviders() as $provider) {
/** @var OutputTemplateProviderInterface $class */
$class = $provider['class'];
$package = $provider['package'];
/** @var OutputProviderInterface $OutputProvider */
foreach ($outputProviders as $OutputProvider) {
$entityType = $OutputProvider::getEntityType();
$defaultOutputTemplate = self::getDefaultOutputTemplateForEntityType($entityType);
foreach ($class::getTemplates($entityType) as $providerTemplateId) {
$templateTitle = $class::getTemplateTitle($providerTemplateId);
if ($provider['isSystemDefault']) {
$templateTitle .= ' '.QUI::getLocale()->get('quiqqer/erp', 'output.default_template.suffix');
}
$isDefault = $defaultOutputTemplate['provider'] === $provider['package'] &&
$defaultOutputTemplate['id'] === $providerTemplateId;
$providerTemplate = [
'id' => $providerTemplateId,
'title' => $templateTitle,
'provider' => $package,
'isSystemDefault' => $provider['isSystemDefault'],
'isDefault' => $isDefault,
'entityType' => $entityType,
'entityTypeTitle' => $OutputProvider::getEntityTypeTitle()
];
$templates[] = $providerTemplate;
}
}
}
// Sort so that system default is first
\usort($templates, function ($a, $b) {
if ($a['isSystemDefault']) {
return -1;
}
if ($b['isSystemDefault']) {
return 1;
}
return 0;
});
return $templates;
}
/**
* Return default template id for a specific entity type
*
* @param string $entityType
* @return array - Containting template ID and template provider package
*/
public static function getDefaultOutputTemplateForEntityType(string $entityType)
{
$fallBackTemplate = [
'id' => 'system_default',
'provider' => 'quiqqer/invoice-accounting-template',
'hideSystemDefault' => false
];
try {
$Conf = QUI::getPackage('quiqqer/erp')->getConfig();
$defaultTemplates = $Conf->get('output', 'default_templates');
if (empty($defaultTemplates)) {
return $fallBackTemplate;
}
$defaultTemplates = \json_decode($defaultTemplates, true);
if (empty($defaultTemplates[$entityType])) {
return $fallBackTemplate;
}
return $defaultTemplates[$entityType];
} catch (\Exception $Exception) {
QUI\System\Log::writeException($Exception);
return $fallBackTemplate;
}
}
/**
* Return default Output Template provider class for a specific entity type
*
* @param string $entityType
* @return OutputTemplateProviderInterface|false
*/
public static function getDefaultOutputTemplateProviderForEntityType(string $entityType)
{
foreach (self::getAllOutputTemplateProviders() as $provider) {
/** @var OutputTemplateProviderInterface $class */
$class = $provider['class'];
$providerTemplates = $class::getTemplates($entityType);
if (!empty($providerTemplates)) {
return $class;
}
}
return false;
}
/**
* Get all available ERP Output provider classes
*
* @return array - Provider classes
*/
protected static function getAllOutputProviders()
{
$packages = QUI::getPackageManager()->getInstalled();
$providerClasses = [];
foreach ($packages as $installedPackage) {
try {
$Package = QUI::getPackage($installedPackage['name']);
if (!$Package->isQuiqqerPackage()) {
continue;
}
$packageProvider = $Package->getProvider();
if (empty($packageProvider['erpOutput'])) {
continue;
}
/** @var OutputProviderInterface $class */
foreach ($packageProvider['erpOutput'] as $class) {
if (!\class_exists($class)) {
continue;
}
$providerClasses[] = [
'class' => $class,
'package' => $installedPackage['name']
];
}
} catch (QUI\Exception $Exception) {
QUI\System\Log::writeException($Exception);
}
}
return $providerClasses;
}
/**
* Get all available ERP Output Template provider classes
*
* @return array - Provider classes
*/
protected static function getAllOutputTemplateProviders()
{
$packages = QUI::getPackageManager()->getInstalled();
$providerClasses = [];
foreach ($packages as $installedPackage) {
try {
$Package = QUI::getPackage($installedPackage['name']);
if (!$Package->isQuiqqerPackage()) {
continue;
}
$packageProvider = $Package->getProvider();
if (empty($packageProvider['erpOutputTemplate'])) {
continue;
}
/** @var OutputTemplateProviderInterface $class */
foreach ($packageProvider['erpOutputTemplate'] as $class) {
if (!\class_exists($class)) {
continue;
}
$providerClasses[] = [
'class' => $class,
'package' => $installedPackage['name'],
'isSystemDefault' => $installedPackage['name'] === 'quiqqer/invoice-accounting-template'
];
}
} catch (QUI\Exception $Exception) {
QUI\System\Log::writeException($Exception);
}
}
return $providerClasses;
}
}
<?php
namespace QUI\ERP\Output;
use QUI\HtmlToPdf\Document;
use QUI\Interfaces\Users\User;
use QUI\Locale;
/**
* Interface OutputProviderInterface
*
* Main interface for all ERP Output providers
*/
interface OutputProviderInterface
{
/**
* Get output type
*
* The output type determines the type of templates/providers that are used
* to output documents.
*
* @return string
*/
public static function getEntityType();
/**
* Get title for the output entity
*
* @param Locale $Locale (optional) - If ommitted use \QUI::getLocale()
* @return mixed
*/
public static function getEntityTypeTitle(Locale $Locale = null);
/**
* Get the entity the output is created for
*
* @param string|int $entityId
* @return mixed
*/
public static function getEntity($entityId);
/**
* Get download filename (without file extension)
*
* @param string|int $entityId
* @return string
*/
public static function getDownloadFileName($entityId);
/**
* Get output Locale by entity
*
* @param string|int $entityId
* @return Locale
*/
public static function getLocale($entityId);
/**
* Fill the OutputTemplate with appropriate entity data
*
* @param string|int $entityId
* @return array
*/
public static function getTemplateData($entityId);
/**
* Checks if $User has permission to download the document of $entityId
*
* @param string|int $entityId
* @param User $User
* @return bool
*/
public static function hasDownloadPermission($entityId, User $User);
/**
* Get e-mail address of the document recipient
*
* @param string|int $entityId
* @return string|false - E-Mail address or false if no e-mail address available
*/
public static function getEmailAddress($entityId);
/**
* Get e-mail subject when document is sent via mail
*
* @param string|int $entityId
* @return string
*/
public static function getMailSubject($entityId);
/**
* Get e-mail body when document is sent via mail
*
* @param string|int $entityId
* @return string
*/
public static function getMailBody($entityId);
}
<?php
namespace QUI\ERP\Output;
use QUI;
use QUI\Package\Package;
use QUI\ERP\Accounting\Invoice\Exception;
use QUI\ERP\Accounting\Invoice\Handler;
use QUI\ERP\Accounting\Invoice\Invoice;
use QUI\ERP\Accounting\Invoice\InvoiceTemporary;
/**
* Class OutputTemplate
*/
class OutputTemplate
{
/**
* @var OutputTemplateProviderInterface
*/
protected $TemplateProvider;
/**
* @var OutputProviderInterface
*/
protected $OutputProvider;
/**
* @var string
*/
protected $template;
/**
* @var QUI\Interfaces\Template\EngineInterface
*/
protected $Engine;
/**
* @var string
*/
protected $entityType;
/**
* @var string|int
*/
protected $entityId;
/**
* The entity the output is created for
*
* @var mixed
*/
protected $Entity;
/**
* @var bool
*/
protected $preview = false;
/**
* Template constructor.
*
* @param OutputTemplateProviderInterface $TemplateProvider - Template provider class
* @param OutputProviderInterface $OutputProvider - Output provider class
* @param string|int $entityId
* @param string $entityType
* @param string $template (optional) - Template identifier (from template provider)
*
* @throws QUI\Exception
*/
public function __construct(
$TemplateProvider,
$OutputProvider,
$entityId,
string $entityType,
string $template = null
) {
$this->Engine = QUI::getTemplateManager()->getEngine();
$this->TemplateProvider = $TemplateProvider;
$this->OutputProvider = $OutputProvider;
$templates = $this->TemplateProvider::getTemplates($entityType);
if (empty($template)) {
$template = $templates[0];
} else {
// Check if $template is provided by template provider
$templateIsProvided = false;
foreach ($templates as $providerTemplateId) {
if ($providerTemplateId === $template) {
$templateIsProvided = true;
break;
}
}
if (!$templateIsProvided) {
$template = $templates[0];
}
}
$this->template = $template;
$this->entityType = $entityType;
$this->entityId = $entityId;
$this->Entity = $this->OutputProvider::getEntity($entityId);
}
/**
* Render the html
*
* @param bool $preview (optional) -
* @return string - HTML content
*/
public function getHTML($preview = false)
{
$templateData = $this->OutputProvider::getTemplateData($this->entityId);
$this->Engine->assign($templateData);
$this->preview = $preview;
return $this->getHTMLHeader().
$this->getHTMLBody().
$this->getHTMLFooter();
}
/**
* Get PDF output
*
* @return QUI\HtmlToPdf\Document
* @throws QUI\Exception
* @throws QUI\ExceptionStack
*/
public function getPDFDocument()
{
$Locale = $this->OutputProvider::getLocale($this->entityId);
$Document = new QUI\HtmlToPdf\Document([
'marginTop' => 30, // dies ist variabel durch quiqqerInvoicePdfCreate
'filename' => $this->OutputProvider::getDownloadFileName($this->entityId).'.pdf',
'marginBottom' => 80, // dies ist variabel durch quiqqerInvoicePdfCreate,
'pageNumbersPrefix' => $Locale->get('quiqqer/htmltopdf', 'footer.page.prefix')
]);
QUI::getEvents()->fireEvent(
'quiqqerErpOutputPdfCreate',
[$this, $Document]
);
try {
$templateData = $this->OutputProvider::getTemplateData($this->entityId);
$this->Engine->assign($templateData);
$Document->setHeaderHTML($this->getHTMLHeader());
$Document->setContentHTML($this->getHTMLBody());
$Document->setFooterHTML($this->getHTMLFooter());
} catch (QUI\Exception $Exception) {
QUI\System\Log::writeException($Exception);
}
return $Document;
}
/**
* @return QUI\Interfaces\Template\EngineInterface
*/
public function getEngine()
{
return $this->Engine;
}
//region Template Output Helper
/**
* Return the html header
*
* @return string
*/
public function getHTMLHeader()
{
return $this->TemplateProvider::getHeaderHtml($this->template, $this->entityType, $this->Engine, $this->Entity);
}
/**
* Return the html body
*
* @return string
*/
public function getHTMLBody()
{
$Output = new QUI\Output();
$Output->setSetting('use-system-image-paths', true);
return $Output->parse(
$this->TemplateProvider::getBodyHtml(
$this->template,
$this->entityType,
$this->Engine,
$this->Entity
)
);
}
/**
* Return the html body
*
* @return string
*/
public function getHTMLFooter()
{
$footerHtml = '<div class="quiqqer-erp-output-footer">';
$footerHtml .= $this->TemplateProvider::getFooterHtml(
$this->template,
$this->entityType,
$this->Engine,
$this->Entity
);
$footerHtml .= '</div>';
$css = '';
if ($this->preview) {
$css = '<style>';
$css .= '
.quiqqer-erp-output-footer {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
}
';
$css .= '</style>';
}
return $css.$footerHtml;
}
//endregion
}
<?php
namespace QUI\ERP\Output;
use QUI\HtmlToPdf\Document;
use QUI\Interfaces\Template\EngineInterface;
use QUI\Locale;
/**
* Interface OutputTemplateProviderInterface
*
* Main interface for all ERP Output template providers
*/
interface OutputTemplateProviderInterface
{
/**
* Get all entity types the template package provides templates for
*
* @return string[]
*/
public static function getEntityTypes();
/**
* Get all available templates for $entityType
*
* @param string $entityType
* @return string[]|int[] - Collection of templateIds
*/
public static function getTemplates(string $entityType);
/**
* Get title of Template
*
* @param string|int $templateId
* @param Locale $Locale (optional) - If omitted use \QUI::getLocale()
* @return string
*/
public static function getTemplateTitle($templateId, Locale $Locale = null);
/**
* Get HTML for document header area
*
* @param string|int $templateId
* @param string $entityType
* @param EngineInterface $Engine
* @param mixed $Entity - The entity the output is created for
* @return string|false
*/
public static function getHeaderHtml($templateId, string $entityType, EngineInterface $Engine, $Entity);
/**
* Get HTML for document body area
*
* @param string|int $templateId
* @param string $entityType
* @param EngineInterface $Engine
* @param mixed $Entity - The entity the output is created for
* @return string|false
*/
public static function getBodyHtml($templateId, string $entityType, EngineInterface $Engine, $Entity);
/**
* Get HTML for document footer area
*
* @param string|int $templateId
* @param string $entityType
* @param EngineInterface $Engine
* @param mixed $Entity - The entity the output is created for
* @return string|false
*/
public static function getFooterHtml($templateId, string $entityType, EngineInterface $Engine, $Entity);
}
0% Lade oder .
You are about to add 0 people to the discussion. Proceed with caution.
Bearbeitung dieser Nachricht zuerst beenden!
Bitte registrieren oder zum Kommentieren