Compare commits

..

No commits in common. "master" and "2.0.1.0" have entirely different histories.

27 changed files with 150 additions and 187 deletions

View File

@ -11,7 +11,6 @@
namespace D3\PdfDocuments\Application\Controller;
use D3\PdfDocuments\Application\Model\Exceptions\noPdfHandlerFoundException;
use D3\PdfDocuments\Application\Model\Exceptions\wrongPdfGeneratorInterface;
use D3\PdfDocuments\Application\Model\Interfaces\pdfdocumentsOrderInterface;
use D3\PdfDocuments\Application\Model\Registries\registryOrderoverview;
use OxidEsales\Eshop\Application\Model\Order;
@ -23,9 +22,8 @@ class orderOverviewPdfGenerator
* @param Order $order
* @param int $iSelLang
* @throws noPdfHandlerFoundException
* @throws wrongPdfGeneratorInterface
*/
public function generatePdf(Order $order, int $iSelLang = 0)
public function generatePdf(Order $order, $iSelLang = 0)
{
$Pdf= $this->getPdfClass();
@ -36,7 +34,6 @@ class orderOverviewPdfGenerator
/**
* @return pdfdocumentsOrderInterface
* @throws noPdfHandlerFoundException
* @throws wrongPdfGeneratorInterface
*/
public function getPdfClass()
{

View File

@ -12,18 +12,22 @@ namespace D3\PdfDocuments\Application\Model\AbstractClasses;
use Assert\InvalidArgumentException;
use D3\PdfDocuments\Application\Model\Constants;
use D3\PdfDocuments\Application\Model\Exceptions\pdfGeneratorExceptionAbstract;
use D3\PdfDocuments\Application\Model\Interfaces\pdfdocumentsGenericInterface as genericInterface;
use OxidEsales\Eshop\Core\Base;
use OxidEsales\Eshop\Core\Exception\StandardException;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\UtilsView;
use OxidEsales\EshopCommunity\Core\Di\ContainerFacade;
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use OxidEsales\EshopCommunity\Internal\Framework\Module\Facade\ModuleSettingServiceInterface;
use OxidEsales\EshopCommunity\Internal\Framework\Templating\TemplateEngineInterface;
use OxidEsales\EshopCommunity\Internal\Framework\Templating\TemplateRenderer;
use OxidEsales\EshopCommunity\Internal\Framework\Templating\TemplateRendererBridgeInterface;
use OxidEsales\Twig\Resolver\TemplateChain\TemplateNotInChainException;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
use Smarty;
use Spipu\Html2Pdf\Exception\Html2PdfException;
use Spipu\Html2Pdf\Html2Pdf;
use Twig\Error\Error;
@ -42,9 +46,38 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
public $filenameExtension = 'pdf';
/** @var Smarty */
public $oTemplateEngine;
/** @var string */
public $filename;
/**
* pdfDocumentsGeneric constructor.
*/
public function __construct()
{
parent::__construct();
$this->oTemplateEngine = $this->d3GetTemplateEngine();
}
public function d3GetTemplateEngine() :TemplateEngineInterface
{
$renderer = $this->d3GetTemplateRendererBridge()->getTemplateRenderer();
return $renderer->getTemplateEngine();
}
/**
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function d3GetTemplateRendererBridge(): TemplateRendererBridgeInterface
{
return ContainerFactory::getInstance()->getContainer()
->get(TemplateRendererBridgeInterface::class);
}
public function runPreAction()
{
}
@ -54,14 +87,11 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
}
/**
* @param string $sFilename
* @param $sFilename
* @param int $iSelLang
* @param string $target
*
* @return string|null
* @throws ContainerExceptionInterface
* @return mixed|string|null
* @throws Html2PdfException
* @throws NotFoundExceptionInterface
*/
public function genPdf($sFilename, $iSelLang = 0, $target = self::PDF_DESTINATION_STDOUT)
{
@ -69,10 +99,10 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
$oPdf->setTestIsImage(false);
$htmlContent = $this->getHTMLContent($iSelLang);
$oPdf->writeHTML($htmlContent);
$oPdf->pdf->setAuthor( Registry::getConfig()->getActiveShop()->getFieldData( 'oxname'));
$oPdf->pdf->setTitle( Registry::getLang()->translateString( $this->getTitleIdent()));
$oPdf->pdf->setCreator( 'DÂł PDF Documents for OXID eShop');
$oPdf->pdf->setSubject( NULL);
$oPdf->pdf->SetAuthor(Registry::getConfig()->getActiveShop()->getFieldData('oxname'));
$oPdf->pdf->SetTitle(Registry::getLang()->translateString($this->getTitleIdent()));
$oPdf->pdf->SetCreator('DÂł PDF Documents for OXID eShop');
$oPdf->pdf->SetSubject(NULL);
return $this->output($oPdf, $sFilename, $target, $htmlContent);
}
@ -80,15 +110,6 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
* @param int $iLanguage
* @throws Html2PdfException
*/
/**
* @param $iLanguage
*
* @return void
* @throws ContainerExceptionInterface
* @throws Html2PdfException
* @throws NotFoundExceptionInterface
*/
public function downloadPdf($iLanguage = 0)
{
try {
@ -97,9 +118,12 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
$this->genPdf($sFilename, $iLanguage, self::PDF_DESTINATION_DOWNLOAD);
$this->runPostAction();
Registry::getUtils()->showMessageAndExit('');
} catch (InvalidArgumentException $e) {
Registry::getLogger()->error($e);
} catch (pdfGeneratorExceptionAbstract $e) {
Registry::get(UtilsView::class)->addErrorToDisplay($e);
Registry::getLogger()->error($e);
} catch (InvalidArgumentException $e) {
Registry::get(UtilsView::class)->addErrorToDisplay($e);
Registry::getLogger()->error($e);
}
}
@ -107,10 +131,7 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
* @param string $path
* @param int $iLanguage
*
* @return void
* @throws ContainerExceptionInterface
* @throws Html2PdfException
* @throws NotFoundExceptionInterface
*/
public function savePdfFile($path, $iLanguage = 0)
{
@ -123,6 +144,9 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
self::PDF_DESTINATION_FILE
);
$this->runPostAction();
} catch (pdfGeneratorExceptionAbstract $e) {
Registry::get(UtilsView::class)->addErrorToDisplay($e);
Registry::getLogger()->error($e);
} catch (InvalidArgumentException $e) {
Registry::get(UtilsView::class)->addErrorToDisplay($e);
Registry::getLogger()->error($e);
@ -132,10 +156,8 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
/**
* @param int $iLanguage
*
* @return string|null
* @throws ContainerExceptionInterface
* @return null|string
* @throws Html2PdfException
* @throws NotFoundExceptionInterface
*/
public function getPdfContent($iLanguage = 0)
{
@ -145,6 +167,9 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
$ret = $this->genPdf( $sFilename, $iLanguage, self::PDF_DESTINATION_STRING );
$this->runPostAction();
return $ret;
} catch (pdfGeneratorExceptionAbstract $e) {
Registry::get(UtilsView::class)->addErrorToDisplay($e);
Registry::getLogger()->error($e);
} catch (InvalidArgumentException $e) {
Registry::get(UtilsView::class)->addErrorToDisplay($e);
Registry::getLogger()->error($e);
@ -153,17 +178,18 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
return null;
}
public function getTemplateEngineVars(int $iSelLang): array
/**
* @param int $iSelLang
*/
public function setTemplateEngineVars($iSelLang)
{
unset($iSelLang);
return [
'config' => Registry::getConfig(),
'oViewConf' => Registry::getConfig()->getActiveView()->getViewConfig(),
'shop' => Registry::getConfig()->getActiveShop(),
'lang' => Registry::getLang(),
'document' => $this
];
$this->oTemplateEngine->addGlobal('config', Registry::getConfig());
$this->oTemplateEngine->addGlobal('oViewConf', Registry::getConfig()->getActiveView()->getViewConfig());
$this->oTemplateEngine->addGlobal('shop', Registry::getConfig()->getActiveShop());
$this->oTemplateEngine->addGlobal('lang', Registry::getLang());
$this->oTemplateEngine->addGlobal('document', $this);
}
/**
@ -172,7 +198,7 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
* @return mixed
* @throws InvalidArgumentException
*/
public function getHTMLContent(int $iSelLang = 0)
public function getHTMLContent($iSelLang = 0)
{
$blCurrentRenderFromAdmin = self::$_blIsAdmin;
self::$_blIsAdmin = $this->renderTemplateFromAdmin();
@ -182,16 +208,16 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
$currTplLang = $lang->getTplLanguage();
$lang->setTplLanguage($iSelLang);
$this->setTemplateEngineVars($iSelLang);
try {
$content = $this->getTemplateRenderer()->renderTemplate(
$this->getTemplate(),
$this->getTemplateEngineVars($iSelLang)
);
$content = $this->oTemplateEngine->render($this->getTemplate(), $this->d3GetTemplateEngine()->getGlobals());
} catch (Error|TemplateNotInChainException $error) {
//Registry::getLogger()->error(dumpVar(__METHOD__." ".__LINE__), [$error->getFile()]);
throw oxNew(StandardException::class, $error->getMessage());
$error = oxNew(StandardException::class, $error->getMessage());
throw $error;
}
$lang->setTplLanguage($currTplLang);
@ -201,13 +227,6 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
return $content;
}
protected function getTemplateRenderer(): TemplateRenderer
{
return ContainerFactory::getInstance()->getContainer()
->get(TemplateRendererBridgeInterface::class)
->getTemplateRenderer();
}
/**
* arguments for Html2Pdf class constructor
* - $orientation = 'P',
@ -305,12 +324,14 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
// maximize filename length to 255 bytes
$ext = pathinfo($filename, PATHINFO_EXTENSION);
return mb_strcut(
$filename = mb_strcut(
pathinfo($filename, PATHINFO_FILENAME),
0,
255 - ($ext ? strlen($ext) + 1 : 0),
mb_detect_encoding($filename)
) . ($ext ? '.' . $ext : '');
return $filename;
}
public function beautifyFilename($filename)

View File

@ -57,22 +57,19 @@ abstract class pdfdocumentsOrder extends pdfdocumentsGeneric implements orderInt
* @param int $iSelLang
* @throws InvalidArgumentException
*/
public function getTemplateEngineVars($iSelLang): array
public function setTemplateEngineVars($iSelLang)
{
parent::setTemplateEngineVars($iSelLang);
$this->oTemplateEngine->addGlobal('order', $this->getOrder());
$oUser = oxNew(User::Class);
$oUser->load($this->getOrder()->getFieldData('oxuserid'));
$this->oTemplateEngine->addGlobal('user', $oUser);
$oPayment = oxNew(Payment::class);
$oPayment->loadInLang($iSelLang, $this->getOrder()->getFieldData('oxpaymenttype'));
return array_merge(
parent::getTemplateEngineVars($iSelLang),
[
'order' => $this->getOrder(),
'user' => $oUser,
'payment' => $oPayment
]
);
$this->oTemplateEngine->addGlobal('payment', $oPayment);
}
/**
@ -119,7 +116,7 @@ abstract class pdfdocumentsOrder extends pdfdocumentsGeneric implements orderInt
}
/**
* @return false|int
* @return false|string
* @throws InvalidArgumentException
*/
public function getPayableUntilDate()

View File

@ -39,8 +39,7 @@ class invoicewithoutlogoPdf extends invoicePdf
/**
* @return string
*/
public function getTemplate()
{
public function getTemplate(){
return '@d3PdfDocuments/documents/invoice/invoiceNoLogo';
}
}

View File

@ -35,29 +35,29 @@ interface pdfdocumentsGenericInterface
/**
* @param int $iLanguage
*/
public function downloadPdf(int $iLanguage = 0);
public function downloadPdf($iLanguage = 0);
/**
* @param int $iLanguage
*
* @return string|null
*/
public function getPdfContent(int $iLanguage = 0);
public function getPdfContent($iLanguage = 0);
/**
* @param string $path
* @param int $iLanguage
*/
public function savePdfFile(string $path, int $iLanguage = 0);
public function savePdfFile($path, $iLanguage = 0);
/**
* @param string $sFilename
* @param $sFilename
* @param int $iSelLang
* @param string $target
*
* @return mixed
*/
public function genPdf(string $sFilename, int $iSelLang = 0, string $target = 'I');
public function genPdf($sFilename, $iSelLang = 0, $target = 'I');
/**
* @param string $filename

View File

@ -28,12 +28,10 @@ abstract class registryAbstract implements registryGenericInterface
/**
* @param $className
*
* @throws wrongPdfGeneratorInterface
*/
public function addGenerator($className)
{
if ( ! $this->hasGenerator( $className ) ) {
if (false == $this->hasGenerator($className)) {
/** @var pdfdocumentsGenericInterface $generator */
$generator = oxNew( $className );
@ -46,13 +44,12 @@ abstract class registryAbstract implements registryGenericInterface
/**
* @param $className * generator fully qualified class name
* @param pdfdocumentsGenericInterface $item
* @throws wrongPdfGeneratorInterface
*/
protected function addItem($className, pdfdocumentsGenericInterface $item)
{
$requiredInterface = $this->getRequiredGeneratorInterfaceClassName();
if ( ! $item instanceof $requiredInterface ) {
if (false == $item instanceof $requiredInterface) {
throw oxNew(wrongPdfGeneratorInterface::class, $requiredInterface);
}

View File

@ -14,14 +14,10 @@ use D3\PdfDocuments\Application\Model\Documents\deliverynotePdf;
use D3\PdfDocuments\Application\Model\Documents\deliverynotewithoutlogoPdf;
use D3\PdfDocuments\Application\Model\Documents\invoicePdf;
use D3\PdfDocuments\Application\Model\Documents\invoicewithoutlogoPdf;
use D3\PdfDocuments\Application\Model\Exceptions\wrongPdfGeneratorInterface;
use D3\PdfDocuments\Application\Model\Interfaces\pdfdocumentsOrderInterface;
class registryOrdermanagerActions extends registryAbstract implements registryOrdermanagerActionsInterface
{
/**
* @throws wrongPdfGeneratorInterface
*/
public function __construct()
{
$this->addGenerator(invoicePdf::class);

View File

@ -14,14 +14,10 @@ use D3\PdfDocuments\Application\Model\Documents\deliverynotePdf;
use D3\PdfDocuments\Application\Model\Documents\deliverynotewithoutlogoPdf;
use D3\PdfDocuments\Application\Model\Documents\invoicePdf;
use D3\PdfDocuments\Application\Model\Documents\invoicewithoutlogoPdf;
use D3\PdfDocuments\Application\Model\Exceptions\wrongPdfGeneratorInterface;
use D3\PdfDocuments\Application\Model\Interfaces\pdfdocumentsOrderInterface;
class registryOrderoverview extends registryAbstract implements registryOrderoverviewInterface
{
/**
* @throws wrongPdfGeneratorInterface
*/
public function __construct()
{
$this->addGenerator(invoicePdf::class);

View File

@ -13,59 +13,38 @@ namespace D3\PdfDocuments\Modules\Application\Controller;
use D3\PdfDocuments\Application\Controller\orderOverviewPdfGenerator;
use D3\PdfDocuments\Application\Model\Exceptions\noPdfHandlerFoundException;
use D3\PdfDocuments\Application\Model\Exceptions\pdfGeneratorExceptionAbstract;
use D3\PdfDocuments\Application\Model\Exceptions\wrongPdfGeneratorInterface;
use D3\PdfDocuments\Application\Model\Registries\registryOrderoverview;
use Doctrine\DBAL\Driver\Exception;
use Doctrine\DBAL\Exception as DBALException;
use Doctrine\DBAL\ParameterType;
use Doctrine\DBAL\Query\QueryBuilder;
use OxidEsales\Eshop\Application\Controller\Admin\OrderOverview;
use OxidEsales\Eshop\Application\Model\Order;
use OxidEsales\Eshop\Core\DatabaseProvider;
use OxidEsales\Eshop\Core\Exception\DatabaseConnectionException;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\TableViewNameGenerator;
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use OxidEsales\EshopCommunity\Internal\Framework\Database\QueryBuilderFactoryInterface;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface;
class d3_overview_controller_pdfdocuments extends d3_overview_controller_pdfdocuments_parent
{
/**
* @return bool
* @throws Exception
* @throws DatabaseConnectionException
*/
public function d3CanExport(): bool
public function d3CanExport()
{
try {
// We force reading from master to prevent issues with slow replications or open transactions (see ESDEV-3804).
$masterDb = DatabaseProvider::getMaster();
$sOrderId = $this->getEditObjectId();
$viewNameGenerator = Registry::get( TableViewNameGenerator::class );
$sTable = $viewNameGenerator->getViewName( "oxorderarticles" );
$viewNameGenerator = Registry::get(TableViewNameGenerator::class);
$sTable = $viewNameGenerator->getViewName("oxorderarticles");
/** @var QueryBuilder $queryBuilder */
$queryBuilder = ContainerFactory::getInstance()->getContainer()->get( QueryBuilderFactoryInterface::class )->create();
$queryBuilder
->select( 'oxid' )
->from( $sTable )
->where(
$queryBuilder->expr()->and(
$queryBuilder->expr()->eq( 'oxorderid', $queryBuilder->createNamedParameter( $sOrderId ) ),
$queryBuilder->expr()->eq( 'oxstorno', $queryBuilder->createNamedParameter( 0, ParameterType::INTEGER ) )
)
);
return $queryBuilder->execute()->fetchOne();
} catch (NotFoundExceptionInterface|ContainerExceptionInterface|DBALException) {
return false;
}
$sQ = "select count(oxid) from $sTable where oxorderid = " . $masterDb->quote($sOrderId) . " and oxstorno = 0";
return (bool) $masterDb->getOne($sQ);
}
/**
* @throws noPdfHandlerFoundException
* @throws pdfGeneratorExceptionAbstract
*/
public function d3CreatePDF(): void
public function d3CreatePDF()
{
$soxId = $this->getEditObjectId();
if ($soxId != "-1" && isset($soxId)) {
@ -80,9 +59,8 @@ class d3_overview_controller_pdfdocuments extends d3_overview_controller_pdfdocu
/**
* @return registryOrderoverview
* @throws wrongPdfGeneratorInterface
*/
public function d3getGeneratorList(): registryOrderoverview
public function d3getGeneratorList()
{
return oxNew(registryOrderoverview::class);
}

View File

@ -1,9 +1,4 @@
![stability mature](https://img.shields.io/badge/stability-mature-008000.svg)
[![latest tag](https://img.shields.io/packagist/v/d3/pdfdocuments?label=release)](https://packagist.org/packages/d3/pdfdocuments)
![License](https://img.shields.io/packagist/l/d3/pdfdocuments)
[![deutsche Version](https://logos.oxidmodule.com/de2_xs.svg)](README.md)
[![english version](https://logos.oxidmodule.com/en2_xs.svg)](README.en.md)
> [german version](README.md)
# PDF Documents
@ -17,7 +12,7 @@ The module can be easily extended to adapt existing documents or add new ones. E
## System requirements:
- installed OXID eShop version 7.x
- installed OXID eShop version from 7.0 - 7.1
- PHP version for which installation packages are available (PHP 8)
- Installation via Composer

View File

@ -1,15 +1,10 @@
![stability mature](https://img.shields.io/badge/stability-mature-008000.svg)
[![latest tag](https://img.shields.io/packagist/v/d3/pdfdocuments?label=release)](https://packagist.org/packages/d3/pdfdocuments)
![License](https://img.shields.io/packagist/l/d3/pdfdocuments)
[![deutsche Version](https://logos.oxidmodule.com/de2_xs.svg)](README.md)
[![english version](https://logos.oxidmodule.com/en2_xs.svg)](README.en.md)
> [english version](README.en.md)
# PDF-Dokumente
PDF-Dokumentgenerator fĂĽr OXID eShop
Erstellen Sie unterschiedliche statische oder dynamische PDF-Dokumente auf Knopfdruck. Der Dokumentinhalt wird aus Templates (Smarty bzw. Twig) erstellt.
Erstellen Sie unterschiedliche statische oder dynamische PDF-Dokumente auf Kopfdruck. Der Dokumentinhalt wird aus Templates (Smarty bzw. Twig) erstellt.
An den Bestellungen Ihres OXID-Shops steht Ihnen die Erstellung von Rechnung und Lieferschein zur VerfĂĽgung.
@ -17,7 +12,7 @@ Das Modul kann einfach erweitert werden, um bestehende Dokumente anzupassen oder
## Systemanforderungen:
- installierter OXID eShop in Version 7.x
- installierter OXID eShop in Version ab 7.0 - 7.1
- PHP-Version, fĂĽr die Installationspakete verfĂĽgbar sind (PHP 8)
- Installation via Composer

View File

@ -10,15 +10,13 @@
"PDF",
"documents",
"invoice",
"delivery note",
"d3dependencycheck",
"id_d3PdfDocuments"
"delivery note"
],
"authors": [
{
"name": "D3 Data Development (Inh. Thomas Dartsch)",
"email": "info@shopmodule.com",
"homepage": "https://www.d3data.de",
"homepage": "http://www.d3data.de",
"role": "Owner"
}
],
@ -28,7 +26,7 @@
],
"require": {
"php": "^8.0",
"oxid-esales/oxideshop-ce": "7.0 - 7.2",
"oxid-esales/oxideshop-ce": "7.0 - 7.1",
"spipu/html2pdf": "~5.2.8",
"beberlei/assert": "^3.3.2"
},

View File

@ -7,20 +7,7 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased](https://git.d3data.de/D3Public/pdfdokumente/compare/2.0.2.0...rel_2.x)
## [2.0.2.0](https://git.d3data.de/D3Public/pdfdokumente/compare/2.0.1.1...2.0.2.0) - 2025-01-21
### Added
- installierbar in OXID 7.2
### Fixed
- Syntaxfehler in Twig Templates
- Wiederverwendung von Captures in unterschiedlichen Templates der selben Rendererinstanz in Smarty behoben
### Changed
- Template Renderer Verwendung
## [2.0.1.1](https://git.d3data.de/D3Public/pdfdokumente/compare/2.0.1.0...2.0.1.1) - 2024-10-04
### Fixed
- Syntax der Steuerangaben in Twig-Templates
## [Unreleased](https://git.d3data.de/D3Public/pdfdokumente/compare/2.0.1.0...rel_2.x)
## [2.0.1.0](https://git.d3data.de/D3Public/pdfdokumente/compare/2.0.0.0...2.0.1.0) - 2024-10-01
### Added

View File

@ -1,9 +1,9 @@
{
"title": "<i class='fab fa-d3 d3fa-color-blue'></i> PDF Dokumente",
"moduleversion": "2.0.2.0",
"moduleversion": "2.0.1.0",
"titledesc": "fĂĽr den Oxid eShop",
"author": "DÂł Data Development",
"moduledate": "21.01.2025",
"moduledate": "01.10.2024",
"editors": "",
"tagline": "",
"image": "",

View File

@ -8,10 +8,10 @@ title: Systemanforderungen
* OXID eShop Community Edition (CE), Professional Edition (PE) oder Enterprise Edition (EE) in Compilation Version
* 7.0.x
* 7.1.x
* 7.2.x
* Themes
* Diese Modul bindet sich nicht in Frontendthemes ein und ist daher davon unabhängig
* (D3) Modul-Connector ([kostenfrei bei D3 erhältlich](https://www.oxidmodule.com/connector/)) ab Version 7.1
* Template-Engine
* Smarty
* Smarty ( Ungetestet! )
* Twig
* Installation via [Composer](https://getcomposer.org)

View File

@ -2,4 +2,4 @@
title: Kompatibilität mit anderen Modulen
---
Das PDF Dokumente-Modul integriert sich auch in die Erweiterung "Auftragsmanager" von (D3) Data Development, sofern dieses im Shop installiert wurde. Diese Integration wurde fĂĽr die Version 6.0.0.0 des "Auftragsmanager"-Moduls entwickelt.
Das PDF Dokumente-Modul integriert sich auch in die Erweiterung "Auftragsmanager" von (D3) Data Development, sofern dieses im Shop installiert wurde. Diese Integration wurde fĂĽr die Version 4.0.0.0 des "Auftragsmanager"-Moduls entwickelt.

View File

@ -2,7 +2,8 @@
title: Dateien löschen
---
Sofern nötig, bestätigen Sie im Shopadmin unter [ Erweiterungen ] -> [ Module ] -> [ Installierte Shop-Module ] die Nachricht:
Löschen Sie den Ordner `{$modulefolder}` und seine enthaltenen Elemente aus dem Verzeichnis `source/modules/d3` Ihres Shops.
Bestätigen Sie anschließend im Shopadmin unter [ Erweiterungen ] -> [ Module ] -> [ Installierte Shop-Module ] die Nachricht:
> Es gibt registrierte Erweiterungen im eShop, deren Verzeichnis nicht vorhanden ist.
> Möchten Sie alle Modulinformationen einschließlich Konfigurationseinstellungen und Blockinformationen für Templates löschen?

View File

@ -2,7 +2,7 @@
title: Funktionen
---
Erstellen Sie unterschiedlichste statische oder dynamische PDF-Dokument auf Kopfdruck. Der Dokumentinhalt wird aus Templates (Smarty bzw. Twig) erstellt.
Erstellen Sie unterschiedlichste statische oder dynamische PDF-Dokument auf Kopfdruck. Der Dokumentinhalt wird aus Twigtemplates erstellt.
An den Bestellungen Ihres OXID-Shops steht Ihnen die Erstellung von Rechnung und Lieferschein zur VerfĂĽgung.

View File

@ -2,7 +2,7 @@
title: Anpassungen an bestehenden Dokumenten
---
Die Dokumente werden aus Templates (Smarty bzw. Twig) erstellt, die Sie im Ordner `views/smarty/documents` bzw. `views/twig/documents` finden.
Die Dokumente werden aus Twigtemplates erstellt, die Sie im `views/twig/documents` finden. Die entsprechenden Smarty Pendants sind unter `views/smarty/documents`.
Für Änderungen einzelner Dokumentbereiche können Sie die darin notierten Templateblöcke in einem eigenen Modul überladen und deren Inhalt so verändern oder ergänzen. So müssen Sie das Originalmodul nicht verändern.

View File

@ -14,9 +14,10 @@ Layouts können mit inline CSS-Styles definiert werden. Die Einbindung externer
Beachten Sie bitte, dass auch nur ein CSS-Subset unterstützt wird. Mit etwas CSS-Kreativität sollten sich die üblichen Formatierungen dennoch deutlich einfacher umsetzen lassen, als dies direkt in PHP-Programmierung möglich wäre.
## Templates
## Twig
Innerhalb der Templates steht Ihnen die komplette Twig- bzw. Smarty-Funktionalität zur Verfügung.
Innerhalb der Templates steht Ihnen die komplette Twig-Funktionalität zur Verfügung.
Smarty wird perspektivisch noch nachgereich.
## Debug

View File

@ -12,15 +12,21 @@ use D3\PdfDocuments\Application\Model\Constants as Constants;
use D3\PdfDocuments\Modules\Application\Controller\d3_overview_controller_pdfdocuments;
use OxidEsales\Eshop\Application\Controller\Admin\OrderOverview;
/**
* Metadata version
*/
$sMetadataVersion = '2.1';
/**
* Module information
*/
$aModule = [
'id' => Constants::OXID_MODULE_ID,
'title' => [
'de' => '(D3) PDF-Dokumente',
'en' => '(D3) PDF documents',
],
'version' => '2.0.2.0',
'version' => '2.0.1.0',
'author' => 'D3 Data Development (Inh.: Thomas Dartsch)',
'email' => 'support@shopmodule.com',
'url' => 'https://www.oxidmodule.com/',

View File

@ -1,19 +1,19 @@
[{assign var="pagePadding" value=","|explode:"45,15,30,25"}] [{* top, right, bottom, left *}]
[{assign var="showLogo" value=$showLogo|default:true}]
[{capture assign="pdfBlock_style"}]
[{capture append="pdfBlock_style"}]
[{block name="pdfStyles"}]
[{include file="@d3PdfDocuments/assets/d3pdfstyles.css.tpl"}]
[{/block}]
[{/capture}]
[{capture assign="pdfBlock_header"}]
[{capture append="pdfBlock_header"}]
[{block name="pdfHeader"}]
[{include file="@d3PdfDocuments/documents/inc/page/header.tpl" showLogo=$showLogo}]
[{/block}]
[{/capture}]
[{capture assign="pdfBlock_content"}]
[{capture append="pdfBlock_content"}]
[{include file="@d3PdfDocuments/documents/inc/elements/foldmarks.tpl" pagePadding=$pagePadding}]
[{block name="pdfAddressArea"}]
@ -37,7 +37,7 @@
[{/block}]
[{/capture}]
[{capture assign="pdfBlock_footer"}]
[{capture append="pdfBlock_footer"}]
[{block name="pdfFooter"}]
[{include file="@d3PdfDocuments/documents/inc/page/footer.tpl" pagePadding=$pagePadding}]
[{/block}]

View File

@ -1,19 +1,19 @@
[{assign var="pagePadding" value=","|explode:"45,15,30,25"}] [{* top, right, bottom, left *}]
[{assign var="showLogo" value=$showLogo|default:true}]
[{capture assign="pdfBlock_style"}]
[{capture append="pdfBlock_style"}]
[{block name="pdfStyles"}]
[{include file="@d3PdfDocuments/assets/d3pdfstyles.css.tpl"}]
[{/block}]
[{/capture}]
[{capture assign="pdfBlock_header"}]
[{capture append="pdfBlock_header"}]
[{block name="pdfHeader"}]
[{include file="@d3PdfDocuments/documents/inc/page/header.tpl" showLogo=$showLogo}]
[{/block}]
[{/capture}]
[{capture assign="pdfBlock_content"}]
[{capture append="pdfBlock_content"}]
[{* include file="@d3PdfDocuments/documents/inc/helper/rulers" pagePadding=$pagePadding *}]
[{include file="@d3PdfDocuments/documents/inc/elements/foldmarks.tpl" pagePadding=$pagePadding}]
@ -42,7 +42,7 @@
[{/block}]
[{/capture}]
[{capture assign="pdfBlock_footer"}]
[{capture append="pdfBlock_footer"}]
[{block name="pdfFooter"}]
[{include file="@d3PdfDocuments/documents/inc/page/footer.tpl" pagePadding=$pagePadding}]
[{/block}]

View File

@ -3,7 +3,7 @@
{% block pdfDocumentInformations %}
<div>
{% set dateFormat = 'D3_PDFDOCUMENTS_DATE_FORMAT'|translate %}
{{ translate({ ident: "D3_PDFDOCUMENTS_DATE", suffix: "COLON" }) }} {{ "now"|date_format(dateFormat) }}
{{ translate({ ident: "D3_PDFDOCUMENTS_DATE", suffix: "COLON" }) }} {{ smarty.now|date_format(dateFormat) }}
</div>
{% endblock %}
</div>

View File

@ -32,7 +32,7 @@
<tr class="producttax">
<td class="indent"></td>
<td class="description">
{{ translate({ ident: "D3_PDFDOCUMENTS_TAX", suffix: "COLON" }) | format( VatKey ) }}
{{ translate({ ident: "D3_PDFDOCUMENTS_TAX", args: VatKey, suffix: "COLON" }) }}
</td>
<td class="values">
{{ lang.formatCurrency(oVat, currency) }} {{ currency.name }}
@ -104,7 +104,7 @@
<td class="indent"></td>
<td class="description">
{% if config.getConfigParam('sAdditionalServVATCalcMethod') != 'proportional' %}
{{ translate({ ident: "D3_PDFDOCUMENTS_TAX", suffix: "COLON" }) | format( order.getFieldData('oxdelvat') ) }}
{{ translate({ ident: "D3_PDFDOCUMENTS_TAX", args: order.getFieldData('oxdelvat'), suffix: "COLON" }) }}
{% else %}
{{ translate({ ident: "D3_PDFDOCUMENTS_PROPORTIONAL_TAX", suffix: "COLON" }) }}
{% endif %}
@ -142,7 +142,7 @@
<td class="indent"></td>
<td class="description">
{% if config.getConfigParam('sAdditionalServVATCalcMethod') != 'proportional' %}
{{ translate({ ident: "D3_PDFDOCUMENTS_TAX", suffix: "COLON" }) | format( order.getFieldData('oxpayvat') ) }}
{{ translate({ ident: "D3_PDFDOCUMENTS_TAX", args: order.getFieldData('oxpayvat'), suffix: "COLON" }) }}
{% else %}
{{ translate({ ident: "D3_PDFDOCUMENTS_PROPORTIONAL_TAX", suffix: "COLON" }) }}
{% endif %}

View File

@ -22,15 +22,15 @@
</style>
{# horizontal #}
{% for rulerItemsHorizontal in range(10, 600, 10) %}
<div class="rulerItemHorizontal" style="left: {{ loop.index0 - pagePadding.3 }}mm">
{% for rulerItemsHorizontal in 10..600 %}
<div class="rulerItemHorizontal" style="left: {{ smarty.section.rulerItemsHorizontal.index - pagePadding.3 }}mm">
{{ loop.index0 }}
</div>
{% endfor %}
{# vertical #}
{% for rulerItemsVertical in range(0, 600, 10) %}
<div class="rulerItemVertical" style="top: {{ loop.index0 - pagePadding.0 }}mm">
{% for rulerItemsVertical in 0..600 %}
<div class="rulerItemVertical" style="top: {{ smarty.section.rulerItemsVertical.index - pagePadding.0 }}mm">
{{ loop.index0 }}
</div>
{% endfor %}

View File

@ -14,7 +14,6 @@
{% endset %}
{% set pdfBlock_content %}
{# {% include "@d3PdfDocuments/documents/inc/helper/rulers.html.twig" with {pagePadding: pagePadding} %}#}
{% include "@d3PdfDocuments/documents/inc/elements/foldmarks.html.twig" with {pagePadding: pagePadding} %}
{% block pdfAddressArea %}