Comparer les révisions

..

Pas de révisions en commun. "master" et "2.0.0.0" ont des historiques entièrement différents.

43 fichiers modifiés avec 290 ajouts et 592 suppressions

Voir le fichier

@ -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()
{

Voir le fichier

@ -11,19 +11,22 @@
namespace D3\PdfDocuments\Application\Model\AbstractClasses;
use Assert\InvalidArgumentException;
use D3\ModCfg\Application\Model\d3filesystem;
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 +45,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 +86,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 +98,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 +109,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,20 +117,20 @@ 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);
}
}
/**
* @param string $path
* @param int $iLanguage
* @param int $iLanguage
*
* @return void
* @throws ContainerExceptionInterface
* @throws Html2PdfException
* @throws NotFoundExceptionInterface
*/
public function savePdfFile($path, $iLanguage = 0)
{
@ -123,6 +143,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 +155,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 +166,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,26 +177,52 @@ 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('sAlternativePdfLogo', $this->getAlternativePdfLogoFileName());
$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);
}
/**
* @return string
*/
public function getAlternativePdfLogoFileName() :string
{
$sStandardLogoFile = 'pdf_logo.jpg';
$oViewConf = Registry::getConfig()->getActiveView()->getViewConfig();
$moduleSettingService = ContainerFacade::get(ModuleSettingServiceInterface::class);
$sAlternativePdfLogoName = $moduleSettingService->getString(Constants::OXID_MODULE_ID."_sAlternativePdfLogoName", Constants::OXID_MODULE_ID);
$sAlternativePdfLogoName = trim($sAlternativePdfLogoName) ?: $sStandardLogoFile;
$bAlternativeFileExists = file_exists(Registry::getConfig()->getImagePath($sAlternativePdfLogoName));
$bFileExists = file_exists(Registry::getConfig()->getImagePath($sStandardLogoFile));
return $bAlternativeFileExists
? $oViewConf->getImageUrl($sAlternativePdfLogoName, true)
: (
$bFileExists
? $oViewConf->getImageUrl($sStandardLogoFile, true)
: ""
);
}
/**
* @param int $iSelLang
*
* @return mixed
* @throws InvalidArgumentException
*/
public function getHTMLContent(int $iSelLang = 0)
public function getHTMLContent($iSelLang = 0)
{
$blCurrentRenderFromAdmin = self::$_blIsAdmin;
self::$_blIsAdmin = $this->renderTemplateFromAdmin();
@ -182,16 +232,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 +251,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',
@ -279,66 +322,14 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
/**
* Gets proper file name
*
* @param $filename
* @param string $sFilename file name
*
* @return string
*/
public function makeValidFileName($filename)
public function makeValidFileName($sFilename)
{
// sanitize filename
$filename = preg_replace(
'~
[<>:"/\\\\|?*]| # file system reserved
[\x00-\x1F]| # control characters
[\x7F\xA0\xAD]| # non-printing characters DEL, NO-BREAK SPACE, SOFT HYPHEN
[#\[\]@!$&\'()+,;=]| # URI reserved
[{}^\~`] # URL unsafe characters
~x',
'-',
$filename
);
// avoids ".", ".." or ".hiddenFiles"
$filename = ltrim($filename, '.-');
$filename = $this->beautifyFilename($filename);
// maximize filename length to 255 bytes
$ext = pathinfo($filename, PATHINFO_EXTENSION);
return mb_strcut(
pathinfo($filename, PATHINFO_FILENAME),
0,
255 - ($ext ? strlen($ext) + 1 : 0),
mb_detect_encoding($filename)
) . ($ext ? '.' . $ext : '');
}
public function beautifyFilename($filename)
{
// reduce consecutive characters
$filename = preg_replace([
// "file name.zip" becomes "file-name.zip"
'/ +/',
// "file___name.zip" becomes "file-name.zip"
'/_{2,}/',
// "file---name.zip" becomes "file-name.zip"
'/-+/',
], '-', $filename);
$filename = preg_replace([
// "file--.--.-.--name.zip" becomes "file.name.zip"
'/-*\.-*/',
// "file...name..zip" becomes "file.name.zip"
'/\.{2,}/',
], '.', $filename);
// lowercase for windows/unix interoperability
$filename = mb_strtolower($filename, mb_detect_encoding($filename));
// ".file-name.-" becomes "file-name"
$filename = trim($filename, '.-');
return trim($filename);
$fs = oxNew(d3filesystem::class);
return $fs->filterFilename($sFilename);
}
/**
@ -351,19 +342,15 @@ abstract class pdfdocumentsGeneric extends Base implements genericInterface
/**
* @param Html2Pdf $oPdf
* @param $sFilename
* @param $target
* @param $html
*
* @param $sFilename
* @param $target
* @param $html
* @return string|null
* @throws Html2PdfException
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function output(Html2Pdf $oPdf, $sFilename, $target, $html)
{
$moduleSettings = ContainerFactory::getInstance()->getContainer()->get(ModuleSettingServiceInterface::class);
if ($moduleSettings->getBoolean( 'd3PdfDocumentsbDev', Constants::OXID_MODULE_ID )) {
if ((bool) Registry::getConfig()->getConfigParam('d3PdfDocumentsbDev') === true) {
return $this->outputDev($oPdf, $sFilename, $target, $html);
} else {
return $oPdf->output($sFilename, $target);

Voir le fichier

@ -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()

Voir le fichier

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

Voir le fichier

@ -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

Voir le fichier

@ -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);
}

Voir le fichier

@ -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);

Voir le fichier

@ -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);

Voir le fichier

@ -8,14 +8,16 @@
* @link http://www.oxidmodule.com
*/
use D3\PdfDocuments\Application\Model\Constants;
$sLangName = "Deutsch";
$aLang = array(
'charset' => 'utf-8',
'SHOP_MODULE_GROUP_d3PdfDocumentsmain' => 'Grundeinstellungen',
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'bDev' => 'Entwicklermodus',
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'bDev' => 'Entwicklermodus',
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'_sAlternativePdfLogoName' => 'Alternativer PDF-Logo Name<br><br>
Ohne Angabe ( leer ) wird <u style="color: orangered">automatisch</u> folgender Datei-Name gewählt: <b>pdf_logo.jpg</b><br>
Diese Datei muss sich im <b>source/out/THEME/img/</b> Ordner befinden <b>und muss aus technischen Gründen PNG/ JPG sein</b>.<br><br>
<u>Notfalls wird kein Bild eingefügt!</u>',
'D3_PDFDOCUMENTS' => 'PDF-Dokumente',
'D3_PDFDOCUMENTS_INVOICE' => 'Rechnung',

Voir le fichier

@ -8,14 +8,16 @@
* @link http://www.oxidmodule.com
*/
use D3\PdfDocuments\Application\Model\Constants;
$sLangName = "English";
$aLang = array(
'charset' => 'utf-8',
'SHOP_MODULE_GROUP_d3PdfDocumentsmain' => 'Basic settings',
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'bDev' => 'Developer mode',
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'bDev' => 'Developer mode',
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'_sAlternativePdfLogoName' => 'Alternative PDF Logo Name<br><br>
Without specification (empty) the following file name will be <u style="color: orangered">automatically</u> selected: <b>pdf_logo.jpg</b><br>
This file must be located in the <b>source/out/THEME/img/</b> folder <b>and must be PNG or JPG for technical reasons</b>.<br><br>
<u>If necessary, no image will be inserted!</u>',
'D3_PDFDOCUMENTS' => 'PDF Documents',
'D3_PDFDOCUMENTS_INVOICE' => 'Invoice',

Voir le fichier

@ -15,7 +15,11 @@ $aLang = array(
'charset' => 'utf-8',
'SHOP_MODULE_GROUP_d3PdfDocumentsmain' => 'Grundeinstellungen',
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'bDev' => 'Entwicklermodus',
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'bDev' => 'Entwicklermodus',
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'_sAlternativePdfLogoName' => 'Alternativer PDF-Logo Name<br><br>
Ohne Angabe ( leer ) wird <u style="color: orangered">automatisch</u> folgender Datei-Name gewählt: <b>pdf_logo.jpg</b><br>
Diese Datei muss sich im <b>source/out/THEME/img/</b> Ordner befinden <b>und muss aus technischen Gründen PNG oder JPG sein</b>.<br><br>
<u>Notfalls wird kein Bild eingefügt!</u>',
'D3_PDFDOCUMENTS' => 'PDF-Dokumente',
'D3_PDFDOCUMENTS_INVOICE' => 'Rechnung',

Voir le fichier

@ -8,14 +8,16 @@
* @link http://www.oxidmodule.com
*/
use D3\PdfDocuments\Application\Model\Constants;
$sLangName = "English";
$aLang = array(
'charset' => 'utf-8',
'SHOP_MODULE_GROUP_d3PdfDocumentsmain' => 'Basic settings',
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'bDev' => 'Developer mode',
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'bDev' => 'Developer mode',
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'_sAlternativePdfLogoName' => 'Alternative PDF Logo Name<br><br>
Without specification (empty) the following file name will be <u style="color: orangered">automatically</u> selected: <b>pdf_logo.jpg</b><br>
This file must be located in the <b>source/out/THEME/img/</b> folder <b>and must be PNG/ JPG for technical reasons</b>.<br><br>
<u>If necessary, no image will be inserted!</u>',
'D3_PDFDOCUMENTS' => 'PDF Documents',
'D3_PDFDOCUMENTS_INVOICE' => 'Invoice',

Voir le fichier

@ -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 {
$sOrderId = $this->getEditObjectId();
// 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)) {
@ -79,10 +58,9 @@ class d3_overview_controller_pdfdocuments extends d3_overview_controller_pdfdocu
}
/**
* @return registryOrderoverview
* @throws wrongPdfGeneratorInterface
*/
public function d3getGeneratorList(): registryOrderoverview
* @return registryOrderoverview
*/
public function d3getGeneratorList()
{
return oxNew(registryOrderoverview::class);
}

Voir le fichier

@ -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)
> [german version](README.md)
# PDF Documents
PDF document generator for OXID eShop
Create a wide variety of static or dynamic PDF documents at the touch of a button. The document content is created from templates (Smarty or Twig).
Create a wide variety of static or dynamic PDF documents at the touch of a button. The document content is created from Smarty templates.
At the orders of your OXID shop you have the option of creating an invoice and delivery note.
@ -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
@ -43,8 +38,7 @@ Detailed installation instructions can be found [online](https://docs.oxidmodule
## Credits:
- PDF logo made by Dimitriy Morilubov by www.flaticon.com
- example company logo by https://www.logologo.com/
- PDF logo made by Dimitriy Morilubov from www.flaticon.com
## License

Voir le fichier

@ -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 Smartytemplates 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
@ -44,7 +39,6 @@ Eine detaillierte Installationsanleitung finden Sie [online](https://docs.oxidmo
## Danksagung:
- PDF-Logo erstellt von Dimitriy Morilubov von www.flaticon.com
- Beispielfirmenlogo von https://www.logologo.com/
## Lizenz

Fichier binaire non affiché.

Avant

Largeur:  |  Hauteur:  |  Taille: 4.4 KiB

Voir le fichier

@ -7,18 +7,13 @@
"modules",
"eShop",
"d3",
"PDF",
"documents",
"invoice",
"delivery note",
"d3dependencycheck",
"id_d3PdfDocuments"
"PDF"
],
"authors": [
{
"name": "D3 Data Development (Inh. Thomas Dartsch)",
"email": "info@shopmodule.com",
"homepage": "https://www.d3data.de",
"homepage": "http://www.d3data.de",
"role": "Owner"
}
],
@ -26,10 +21,19 @@
"license": [
"GPL-3.0-or-later"
],
"extra": {
"oxideshop": {
"blacklist-filter": [
"composer.json",
"docs/**/*.*"
]
}
},
"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",
"d3/modcfg": "^7.1",
"beberlei/assert": "^3.3.2"
},
"autoload": {

Voir le fichier

@ -1,29 +0,0 @@
# Entwicklungen
Um das Modul anzupassen, gibt es verschiedene Möglichkeiten:
## Grundsätzliches
Wir empfehlen dringend, alle Veränderungen bestehender Dokumente und auch neue Dokumente in einem eigenen Modul abzulegen,
um die Updatefähigkeit zu behalten.
## neue Dokumente hinzufügen
Neue Dokumente können analog zu den Bestehenden angelegt werden. Jedes Dokument besteht aus der entsprechenden
PHP-Klasse (unter Application/Model/Documents) und deren Template (unter views/.../documents). Verwenden Sie die
Bestandsdokumente als Implementierungsreferenz.
Dokumentlisten sind für den Bestellbereich im Shopadmin sowie für die Generierung über den D3 Auftragsmanagers
enthalten (unter Application/Model/Registries). Überladen Sie die Klassen und ergänzen Sie im Konstruktor Ihre neuen
Dokumente.
## bestehende Dokumente verändern
Die Grundangaben eines Dokuments sind in dessen PHP-Datei definiert. Überladen Sie diese bei Bedarf und ändern die
Einstellung.
Die Inhalte der Dokumente sind in Templates definiert. In den Templates sind Blöcke eingerichtet, die mit den
Überladungsmöglichkeiten des Shops ergänzt oder ersetzt werden können.
Bei umfangreichen Anpassungen kann es sinnvoll sein, eigene Templates anzulegen, die in der PHP-Klasse des Dokuments als
Quelle definiert wird.

Voir le fichier

@ -7,38 +7,11 @@ 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)
## [Unreleased](https://git.d3data.de/D3Public/pdfdokumente/compare/2.0.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
## [2.0.1.0](https://git.d3data.de/D3Public/pdfdokumente/compare/2.0.0.0...2.0.1.0) - 2024-10-01
### Added
- Entwicklungshandbuch
- Überladungsblock für Unternehmenslogo
### Fixed
- CSS wird nicht als Referenz sondern inline eingebunden
- Entwicklermodus kann konfiguriert werden
- Smarty Templates
### Removed
- Modul Connector Bedingung
## [2.0.0.0](https://git.d3data.de/D3Public/pdfdokumente/compare/1.0.4.0...2.0.0.0) - 2024-09-12
## [2.0.0](https://git.d3data.de/D3Public/pdfdokumente/compare/1.0.4.0...2.0.0) - 2024-08-XX
### Added
- installierbar in OXID 7.0 && 7.1 (CE 7.0.x - 7.1.x)
- Support für Smarty- und Twig-Templates
### Removed
- Support für OXID < 7.0
## [1.0.4.0](https://git.d3data.de/D3Public/pdfdokumente/compare/1.0.3.1...1.0.4.0) - 2023-12-22
### Added

Voir le fichier

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

Voir le fichier

@ -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)

Voir le fichier

@ -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.

Voir le fichier

@ -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?

Voir le fichier

@ -2,8 +2,8 @@
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.
Das Modul kann einfach erweitert werden, um bestehende Dokumente anzupassen oder Neue hinzuzufügen.
Das Modul kann einfach erweitert werden, um bestehende Dokumente anzupassen oder Neue hinzuzufügen.

Voir le fichier

@ -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.

Voir le fichier

@ -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

Voir le fichier

@ -12,16 +12,24 @@ 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';
$logo = '<img src="https://logos.oxidmodule.com/d3logo.svg" alt="(D3)" style="height:1em;width:1em">';
/**
* Module information
*/
$aModule = [
'id' => Constants::OXID_MODULE_ID,
'title' => [
'de' => '(D3) PDF-Dokumente',
'en' => '(D3) PDF documents',
'de' => $logo.' PDF-Dokumente',
'en' => $logo.' PDF documents',
],
'version' => '2.0.2.0',
'author' => 'D3 Data Development (Inh.: Thomas Dartsch)',
'version' => '2.0.0',
'author' => $logo.' Data Development (Inh.: Thomas Dartsch)',
'email' => 'support@shopmodule.com',
'url' => 'https://www.oxidmodule.com/',
'extend' => [
@ -34,41 +42,41 @@ $aModule = [
'@' . Constants::OXID_MODULE_ID . '/admin/d3orderoverview_pdfform.tpl' => 'views/smarty/admin/orderoverview_pdfform.tpl',
// Frontend - Flow - Deliverynote
'@' . Constants::OXID_MODULE_ID . '/documents/deliverynote/deliverynote.tpl' => 'views/smarty/documents/deliverynote/deliverynote.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/deliverynote/deliverynoteNoLogo.tpl' => 'views/smarty/documents/deliverynote/deliverynoteNoLogo.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/deliverynote/informations.tpl' => 'views/smarty/documents/deliverynote/inc/informations.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/deliverynote/recipientAddress.tpl' => 'views/smarty/documents/deliverynote/inc/recipientAddress.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/deliverynote/salutation.tpl' => 'views/smarty/documents/deliverynote/inc/salutation.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/deliverynote/conclusion.tpl' => 'views/smarty/documents/deliverynote/inc/conclusion.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/deliverynote/deliverynote.tpl' => 'views/smarty/flow/documents/deliverynote/deliverynote.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/deliverynote/deliverynoteNoLogo.tpl' => 'views/smarty/flow/documents/deliverynote/deliverynoteNoLogo.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/deliverynote/informations.tpl' => 'views/smarty/flow/documents/deliverynote/inc/informations.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/deliverynote/recipientAddress.tpl' => 'views/smarty/flow/documents/deliverynote/inc/recipientAddress.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/deliverynote/salutation.tpl' => 'views/smarty/flow/documents/deliverynote/inc/salutation.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/deliverynote/conclusion.tpl' => 'views/smarty/flow/documents/deliverynote/inc/conclusion.tpl',
// Frontend - Flow - Invoice
'@' . Constants::OXID_MODULE_ID . '/documents/invoice/invoice.tpl' => 'views/smarty/documents/invoice/invoice.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/invoice/invoiceNoLogo.tpl' => 'views/smarty/documents/invoice/invoiceNoLogo.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/invoice/informations.tpl' => 'views/smarty/documents/invoice/inc/informations.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/invoice/salutation.tpl' => 'views/smarty/documents/invoice/inc/salutation.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/invoice/conclusion.tpl' => 'views/smarty/documents/invoice/inc/conclusion.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/invoice/payinfo.tpl' => 'views/smarty/documents/invoice/inc/payinfo.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/invoice/invoice.tpl' => 'views/smarty/flow/documents/invoice/invoice.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/invoice/invoiceNoLogo.tpl' => 'views/smarty/flow/documents/invoice/invoiceNoLogo.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/invoice/informations.tpl' => 'views/smarty/flow/documents/invoice/inc/informations.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/invoice/salutation.tpl' => 'views/smarty/flow/documents/invoice/inc/salutation.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/invoice/conclusion.tpl' => 'views/smarty/flow/documents/invoice/inc/conclusion.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/invoice/payinfo.tpl' => 'views/smarty/flow/documents/invoice/inc/payinfo.tpl',
// Frontend - Flow - Inc - Page
'@' . Constants::OXID_MODULE_ID . '/documents/inc/page/base.tpl' => 'views/smarty/documents/inc/page/base.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/page/header.tpl' => 'views/smarty/documents/inc/page/header.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/page/footer.tpl' => 'views/smarty/documents/inc/page/footer.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/page/returnaddress.tpl' => 'views/smarty/documents/inc/page/returnaddress.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/page/base.tpl' => 'views/smarty/flow/documents/inc/page/base.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/page/header.tpl' => 'views/smarty/flow/documents/inc/page/header.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/page/footer.tpl' => 'views/smarty/flow/documents/inc/page/footer.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/page/returnaddress.tpl' => 'views/smarty/flow/documents/inc/page/returnaddress.tpl',
// Frontend - Flow - Inc - Elements
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/addressarea.tpl' => 'views/smarty/documents/inc/elements/addressarea.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/recipientAddress.tpl' => 'views/smarty/documents/inc/elements/recipientAddress.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/informations.tpl' => 'views/smarty/documents/inc/elements/informations.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/deliveryaddress.tpl' => 'views/smarty/documents/inc/elements/deliveryaddress.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/articlelist.tpl' => 'views/smarty/documents/inc/elements/articlelist.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/articlecostssummary.tpl' => 'views/smarty/documents/inc/elements/articlecostssummary.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/foldmarks.tpl' => 'views/smarty/documents/inc/elements/foldmarks.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/addressarea.tpl' => 'views/smarty/flow/documents/inc/elements/addressarea.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/recipientAddress.tpl' => 'views/smarty/flow/documents/inc/elements/recipientAddress.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/informations.tpl' => 'views/smarty/flow/documents/inc/elements/informations.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/deliveryaddress.tpl' => 'views/smarty/flow/documents/inc/elements/deliveryaddress.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/articlelist.tpl' => 'views/smarty/flow/documents/inc/elements/articlelist.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/articlecostssummary.tpl' => 'views/smarty/flow/documents/inc/elements/articlecostssummary.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/elements/foldmarks.tpl' => 'views/smarty/flow/documents/inc/elements/foldmarks.tpl',
// Frontend - Flow - Inc - Helper
'@' . Constants::OXID_MODULE_ID . '/documents/inc/helper/rulers.tpl' => 'views/smarty/documents/inc/helper/rulers.tpl',
'@' . Constants::OXID_MODULE_ID . '/documents/inc/helper/rulers.tpl' => 'views/smarty/flow/documents/inc/helper/rulers.tpl',
// Frontend - Flow - Inc - Styles
'@' . Constants::OXID_MODULE_ID . '/assets/d3pdfstyles.css.tpl' => 'views/smarty/assets/pdfStyling.css.tpl',
'@' . Constants::OXID_MODULE_ID . '/assets/d3pdfstyles.css' => 'assets/out/src/css/pdfStyling.css',
],
'events' => [],
'blocks' => [
@ -84,6 +92,12 @@ $aModule = [
'name' => Constants::OXID_MODULE_ID.'bDev',
'type' => 'bool',
'value' => false
],
[
'group' => Constants::OXID_MODULE_ID.'main',
'name' => Constants::OXID_MODULE_ID.'_sAlternativePdfLogoName',
'type' => 'str',
'value' => ''
]
]
];

Voir le fichier

@ -1,35 +1,35 @@
[{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"}]
[{include file="@d3PdfDocuments/assets/d3pdfstyles.css"}]
[{/block}]
[{/capture}]
[{capture assign="pdfBlock_header"}]
[{capture append="pdfBlock_header"}]
[{block name="pdfHeader"}]
[{include file="@d3PdfDocuments/documents/inc/page/header.tpl" showLogo=$showLogo}]
[{include file="@d3PdfDocuments/documents/inc/page/header" showLogo=$showLogo}]
[{/block}]
[{/capture}]
[{capture assign="pdfBlock_content"}]
[{include file="@d3PdfDocuments/documents/inc/elements/foldmarks.tpl" pagePadding=$pagePadding}]
[{capture append="pdfBlock_content"}]
[{include file="@d3PdfDocuments/documents/inc/elements/foldmarks" pagePadding=$pagePadding}]
[{block name="pdfAddressArea"}]
[{include file="@d3PdfDocuments/documents/inc/elements/addressarea.tpl" addressfile="@d3PdfDocuments/documents/deliverynote/recipientAddress.tpl"}]
[{include file="@d3PdfDocuments/documents/inc/elements/addressarea" addressfile="@d3PdfDocuments/documents/deliverynote/recipientAddress"}]
[{/block}]
[{block name="pdfInformations"}]
[{include file="@d3PdfDocuments/documents/inc/elements/informations.tpl" documentinformationfile="@d3PdfDocuments/documents/deliverynote/informations.tpl"}]
[{include file="@d3PdfDocuments/documents/inc/elements/informations" documentinformationfile="@d3PdfDocuments/documents/deliverynote/informations"}]
[{/block}]
[{block name="pdfSalutation"}]
[{include file="@d3PdfDocuments/documents/deliverynote/salutation.tpl"}]
[{include file="@d3PdfDocuments/documents/deliverynote/salutation"}]
[{/block}]
[{block name="pdfArticleList"}]
[{include file="@d3PdfDocuments/documents/inc/elements/articlelist.tpl" showPrices=false}]
[{include file="@d3PdfDocuments/documents/inc/elements/articlelist" showPrices=false}]
[{/block}]
[{block name="pdfConclusion"}]
@ -37,10 +37,10 @@
[{/block}]
[{/capture}]
[{capture assign="pdfBlock_footer"}]
[{capture append="pdfBlock_footer"}]
[{block name="pdfFooter"}]
[{include file="@d3PdfDocuments/documents/inc/page/footer.tpl" pagePadding=$pagePadding}]
[{include file="@d3PdfDocuments/documents/inc/page/footer" pagePadding=$pagePadding}]
[{/block}]
[{/capture}]
[{include file="@d3PdfDocuments/documents/inc/page/base.tpl" pagePadding=$pagePadding}]
[{include file="@d3PdfDocuments/documents/inc/page/base" pagePadding=$pagePadding}]

Voir le fichier

@ -1 +1 @@
[{include file="@d3PdfDocuments/documents/deliverynote/deliverynote.tpl" showLogo=false}]
[{include file="@d3PdfDocuments/documents/deliverynote/deliverynote" showLogo=false}]

Voir le fichier

@ -1,5 +1,5 @@
[{assign var="backaddressfile" value=$backaddressfile|default:"@d3PdfDocuments/documents/inc/page/returnaddress.tpl"}]
[{assign var="addressfile" value=$addressfile|default:"@d3PdfDocuments/documents/inc/elements/recipientAddress.tpl"}]
[{assign var="backaddressfile" value=$backaddressfile|default:"@d3PdfDocuments/documents/inc/page/returnaddress"}]
[{assign var="addressfile" value=$addressfile|default:"@d3PdfDocuments/documents/inc/elements/recipientAddress"}]
<div class="addressarea">
<div class="returnAddress">

Voir le fichier

@ -54,7 +54,7 @@
<nobreak>
<table class="article_costs_table">
[{block name="d3_article_costs_summary"}]
[{include file="@d3PdfDocuments/documents/inc/elements/articlecostssummary.tpl"}]
[{include file="@d3PdfDocuments/documents/inc/elements/articlecostssummary"}]
[{/block}]
</table>
</nobreak>

Voir le fichier

@ -3,9 +3,11 @@
[{block name="pdfHeader"}]
<div class="header">
[{if $showLogo}]
[{block name="pdfHeaderLogo"}]
<img class="logo" alt="Logo" src="[{$oViewConf->getModulePath('d3PdfDocuments', 'out/img/clogo.jpg')}]">
[{/block}]
[{* pdf logo is available only in non admin theme *}]
[{assign var="isAdmin" value=$viewConfig->isAdmin()}]
[{$viewConfig->setAdminMode(false)}]
<img class="logo" alt="Logo" src="[{$viewConfig->getImageUrl('pdf_logo.jpg')}]">
[{$viewConfig->setAdminMode($isAdmin)}]
[{/if}]
</div>
[{/block}]

Voir le fichier

@ -5,7 +5,7 @@
[{oxmultilang ident="D3_PDFDOCUMENTS_USED_PAYMENTMETHOD" suffix="COLON"}]
[{$payment->getFieldData('oxdesc')}]<br>
[{include file="@d3PdfDocuments/documents/invoice/payinfo.tpl"}]
[{include file="@d3PdfDocuments/documents/invoice/payinfo"}]
</div>
[{/block}]

Voir le fichier

@ -1,51 +1,51 @@
[{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"}]
[{include file="@d3PdfDocuments/assets/d3pdfstyles.css"}]
[{/block}]
[{/capture}]
[{capture assign="pdfBlock_header"}]
[{capture append="pdfBlock_header"}]
[{block name="pdfHeader"}]
[{include file="@d3PdfDocuments/documents/inc/page/header.tpl" showLogo=$showLogo}]
[{include file="@d3PdfDocuments/documents/inc/page/header" 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}]
[{include file="@d3PdfDocuments/documents/inc/elements/foldmarks" pagePadding=$pagePadding}]
[{block name="pdfAddressArea"}]
[{include file="@d3PdfDocuments/documents/inc/elements/addressarea.tpl"}]
[{include file="@d3PdfDocuments/documents/inc/elements/addressarea"}]
[{/block}]
[{block name="pdfInformations"}]
[{include file="@d3PdfDocuments/documents/inc/elements/informations.tpl" documentinformationfile="@d3PdfDocuments/documents/invoice/informations.tpl"}]
[{include file="@d3PdfDocuments/documents/inc/elements/informations" documentinformationfile="@d3PdfDocuments/documents/invoice/informations"}]
[{/block}]
[{block name="pdfDeliveryAddress"}]
[{include file="@d3PdfDocuments/documents/inc/elements/deliveryaddress.tpl"}]
[{include file="@d3PdfDocuments/documents/inc/elements/deliveryaddress"}]
[{/block}]
[{block name="pdfSalutation"}]
[{include file="@d3PdfDocuments/documents/invoice/salutation.tpl"}]
[{include file="@d3PdfDocuments/documents/invoice/salutation"}]
[{/block}]
[{block name="pdfArticleList"}]
[{include file="@d3PdfDocuments/documents/inc/elements/articlelist.tpl"}]
[{include file="@d3PdfDocuments/documents/inc/elements/articlelist"}]
[{/block}]
[{block name="pdfConclusion"}]
[{include file="@d3PdfDocuments/documents/invoice/conclusion.tpl"}]
[{include file="@d3PdfDocuments/documents/invoice/conclusion"}]
[{/block}]
[{/capture}]
[{capture assign="pdfBlock_footer"}]
[{capture append="pdfBlock_footer"}]
[{block name="pdfFooter"}]
[{include file="@d3PdfDocuments/documents/inc/page/footer.tpl" pagePadding=$pagePadding}]
[{include file="@d3PdfDocuments/documents/inc/page/footer" pagePadding=$pagePadding}]
[{/block}]
[{/capture}]
[{include file="@d3PdfDocuments/documents/inc/page/base.tpl" pagePadding=$pagePadding}]
[{include file="@d3PdfDocuments/documents/inc/page/base" pagePadding=$pagePadding}]

Voir le fichier

@ -1 +1 @@
[{include file="@d3PdfDocuments/documents/invoice/invoice.tpl" showLogo=false}]
[{include file="@d3PdfDocuments/documents/invoice/invoice" showLogo=false}]

Voir le fichier

@ -1,219 +0,0 @@
table{
font-family: "helvetica";
}
.header {
padding: 5mm;
height: 35mm;
width: 100%;
position: relative;
}
.header img.logo {
float: right;
margin: 10mm;
margin-right: 0;
}
.addressarea,
.deliveryaddress {
left: 0;
width: 80mm;
height: 45mm;
position: relative;
}
.deliveryaddress {
margin-top: 10mm;
height: 27.3mm;
}
.addressarea .returnAddress,
.addressarea .recipientAddress {
position: relative;
}
.addressarea .returnAddress {
height: 17.7mm;
font-size: 8px;
}
.addressarea .returnAddress div {
padding-top: 3mm;
}
.addressarea .recipientAddress {
height: 27.3mm;
}
.addressarea .recipientAddress .location,
.deliveryaddress .location {
font-weight: bold;
}
.addressarea .recipientAddress .country {
padding-top: 5mm;
}
.deliveryaddress .headline {
font-size: 10px;
padding-bottom: 2mm;
}
.informations {
width: 75mm;
right: 0;
top: 5mm;
position: absolute;
}
.contactinformations,
.bankaccountinformations,
.documentinformations {
margin-bottom: 5mm;
}
.contactinformations div,
.bankaccountinformations div,
.documentinformations div {
text-align: right;
font-size: 11px;
}
.contactinformations div.headline,
.bankaccountinformations div.headline,
.documentinformations div.headline {
font-weight: bold;
}
.salutation {
margin-top: 5mm;
}
.salutation .documenttype {
font-weight: bold;
margin-bottom: 5mm;
}
.article_table,
.article_table_prices {
width: 100%;
margin-top: 5mm;
border-spacing: 0;
border-collapse: collapse;
}
.article_table th,
.article_table td,
.article_table_prices th,
.article_table_prices td {
padding-bottom: 2mm;
vertical-align: top;
}
.article_table th,
.article_table_prices th {
border-bottom: solid 0.75pt #000;
font-weight: normal;
font-size: 11px;
}
.article_table td,
.article_table_prices td {
padding-top: 2mm;
font-size: 12px;
}
.article_table th.amount,
.article_table td.amount {
width: 10%;
}
.article_table_prices th.amount,
.article_table_prices td.amount,
.article_table_prices th.tax,
.article_table_prices td.tax {
width: 10%;
}
.article_table_prices th.tax,
.article_table_prices td.tax {
text-align: right;
padding-right: 0;
}
.article_table th.description,
.article_table td.description {
width: 90%;
}
.article_table_prices th.description,
.article_table_prices td.description {
width: 50%;
}
.article_table td.description .artnr,
.article_table_prices td.description .artnr {
font-size: 9px;
}
.article_table_prices th.unitPrice,
.article_table_prices td.unitPrice,
.article_table_prices th.totalPrice,
.article_table_prices td.totalPrice {
width: 15%;
text-align: right;
}
.article_table td.amount,
.article_table_prices td.amount {
text-align: right;
padding-right: 10mm;
}
.article_table_prices td.unitPrice,
.article_table_prices td.totalPrice {
text-align: right;
padding-right: 0;
}
.article_costs_table{
width: 100%;
border-spacing: 0;
border-collapse: collapse;
}
.article_costs_table .indent {
width: 10%;
}
.article_costs_table .description {
width: 75%;
}
.article_costs_table td {
padding-bottom: 5px;
padding-top: 5px;
font-size: 12px;
}
.article_costs_table .values {
width: 15%;
margin-right: -2.2px;
text-align: right;
}
.article_costs_table .sumnetto td {
border-top: 0.75pt solid #000;
}
.article_costs_table .voucherdiscount td,
.article_costs_table .sumbrutto td {
border-bottom: solid 0.75pt #000;
}
.article_costs_table .totalseparator td {
height: 0;
line-height: 0;
}
.article_costs_table .totalseparator td,
.article_costs_table .totalsum td {
border-bottom: solid 0.75pt #000;
font-weight: bold;
}
.article_costs_table .totalsum td {
border-bottom: double 2pt #000;
}
.conclusion_payment,
.conclusion_thankyou {
margin-top: 5mm;
font-size: 12px;
}
.footer{
width: 173mm;
font-size: 9px;
position: relative;
margin: 0;
padding: 0;
}
.footer table {
border-top: solid 0.75pt #000;
width: 100%;
position: relative;
}
.footerLeft,
.footerCenter,
.footerRight {
width: 33%;
padding: 0 2mm;
}

Voir le fichier

@ -3,7 +3,8 @@
{% set pdfBlock_style %}
{% block pdfStyles %}
{% include "@d3PdfDocuments/assets/pdfStyling.css.twig" %}
{{ style({ include: oViewConf.getModuleUrl('d3PdfDocuments', 'out/src/css/pdfStyling.css') }) }}
{{ style() }}
{% endblock %}
{% endset %}

Voir le fichier

@ -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>

Voir le fichier

@ -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 %}

Voir le fichier

@ -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 %}

Voir le fichier

@ -1,11 +1,16 @@
{% set showLogo = showLogo|default(1) %}
{% set sPdfLogo = sAlternativePdfLogo %}
{% block pdfHeader %}
<div class="header">
{% if showLogo %}
{% block pdfHeaderLogo %}
<img class="logo" alt="Logo" src="{{ oViewConf.getModulePath('d3PdfDocuments', 'out/img/clogo.jpg') }}">
{% endblock %}
{# pdf logo is available only in non admin theme #}
{% set isAdmin = oViewConf.isAdmin() %}
{{ oViewConf.setAdminMode(false) }}
{% if sPdfLogo %}
<img class="logo" alt="Logo" src="{{ sPdfLogo }}">
{% endif %}
{{ oViewConf.setAdminMode(isAdmin) }}
{% endif %}
</div>
{% endblock %}

Voir le fichier

@ -3,7 +3,8 @@
{% set pdfBlock_style %}
{% block pdfStyles %}
{% include "@d3PdfDocuments/assets/pdfStyling.css.twig" %}
{{ style({ include: oViewConf.getModuleUrl('d3PdfDocuments', 'out/src/css/pdfStyling.css') }) }}
{{ style() }}
{% endblock %}
{% endset %}
@ -14,7 +15,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 %}