From caf51306c930362bde75562d8cf93a5272bef1ae Mon Sep 17 00:00:00 2001 From: MarkusGaertner Date: Mon, 18 Nov 2024 12:18:40 +0100 Subject: [PATCH] Revert "Start master" This reverts commit 01f567f3d702a2e8c5e7b6a07dd8fc846960e222. --- README.md | 13 ++- composer.json | 37 ++++++++ .../views/admin/blocks/order_overview.tpl | 51 +++++++++++ .../views/admin/de/config_lang.php | 29 ++++++ .../Controller/Admin/OrderOverview.php | 58 ++++++++++++ src/Modules/Application/Model/Order.php | 84 ++++++++++++++++++ src/metadata.php | 84 ++++++++++++++++++ src/out/img/xrechnung.png | Bin 0 -> 6789 bytes src/picture.png | Bin 0 -> 12988 bytes 9 files changed, 355 insertions(+), 1 deletion(-) create mode 100644 composer.json create mode 100644 src/Application/views/admin/blocks/order_overview.tpl create mode 100644 src/Application/views/admin/de/config_lang.php create mode 100644 src/Modules/Application/Controller/Admin/OrderOverview.php create mode 100644 src/Modules/Application/Model/Order.php create mode 100644 src/metadata.php create mode 100644 src/out/img/xrechnung.png create mode 100644 src/picture.png diff --git a/README.md b/README.md index d14334e..063f39a 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,14 @@ -### XRechnung4OXID +### Installation + +## Datenbank + ALTER TABLE `oxorder` + ADD COLUMN `D3LEITWEGID` VARCHAR(25) NOT NULL COMMENT 'xRechnung' AFTER `OSC_AMAZON_REMARK` + +## Composer + composer require d3/xrechnung:dev-modules/rel_mod_xrechnung + +## Zugangsdaten + Die Zugangdaten hinter https://xrechnung.DOMAIN.TLD/xrechnung.php? entsprechend modifizieren - .env. + diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..f61f220 --- /dev/null +++ b/composer.json @@ -0,0 +1,37 @@ +{ + "name": "d3/xrechnung", + "description": "xRechnung", + "type": "oxideshop-module", + "keywords": [ + "oxid", + "modules", + "eShop", + "d3" + ], + "authors": [ + { + "name": "D3 Data Development (Inh. Thomas Dartsch)", + "email": "info@shopmodule.com", + "homepage": "https://www.d3data.de", + "role": "Owner" + } + ], + "support": { + "email": "support@shopmodule.com" + }, + "homepage": "https://www.oxidmodule.com/", + + "require": { + }, + "extra": { + "oxideshop": { + "source-directory": "/src", + "target-directory": "d3/xrechnung" + } + }, + "autoload": { + "psr-4": { + "D3\\XRechnung\\": "../../../source/modules/d3/xrechnung" + } + } +} diff --git a/src/Application/views/admin/blocks/order_overview.tpl b/src/Application/views/admin/blocks/order_overview.tpl new file mode 100644 index 0000000..1154ff7 --- /dev/null +++ b/src/Application/views/admin/blocks/order_overview.tpl @@ -0,0 +1,51 @@ +[{$smarty.block.parent}] + +[{if $edit && $oView->d3CanExport() && $oViewConf->getActiveClassName()|oxlower == 'order_overview'}] +
+
+ [{$oViewConf->getHiddenSid()}] + + + + +
+ xRechnung + + + + + + + + + [{* + + *}] + + + +
+ [{oxmultilang ident= + + :  + +
+ + +
+ + +

+ + +
+
+
+[{/if}] \ No newline at end of file diff --git a/src/Application/views/admin/de/config_lang.php b/src/Application/views/admin/de/config_lang.php new file mode 100644 index 0000000..6b2181d --- /dev/null +++ b/src/Application/views/admin/de/config_lang.php @@ -0,0 +1,29 @@ + + * @link http://www.oxidmodule.com + */ + +// @codeCoverageIgnoreStart + +$sLangName = "Deutsch"; +$iLangNr = 0; + +$aLang = array( + //Navigation + 'charset' => 'UTF-8', + 'SHOP_MODULE_GROUP_d3xrechnung' => 'Einstellungen', + 'SHOP_MODULE_d3xrechnung_PATH_GENERATOR' => 'Pfad xRechnung', + 'SHOP_MODULE_d3xrechnung_HTACCESS_USER' => '.htaccess - User', + 'SHOP_MODULE_d3xrechnung_HTACCESS_PASSWORD' => '.htaccess - Password', +); \ No newline at end of file diff --git a/src/Modules/Application/Controller/Admin/OrderOverview.php b/src/Modules/Application/Controller/Admin/OrderOverview.php new file mode 100644 index 0000000..fb9ce80 --- /dev/null +++ b/src/Modules/Application/Controller/Admin/OrderOverview.php @@ -0,0 +1,58 @@ +getEditObjectId(); + if ($soxId != "-1" && isset($soxId)) { + // load object + $oOrder = oxNew(\OxidEsales\Eshop\Application\Model\Order::class); + if ($oOrder->load($soxId)) { + $oConfig = $this->getConfig(); + $aParams = $oConfig->getRequestParameter("editval"); + + if($aParams["oxorder__d3leitwegid"]) + { + $oOrder->assign( + array('d3leitwegid' => $aParams["oxorder__d3leitwegid"]) + ); + $oOrder->save(); + } + + $oUtils = \OxidEsales\Eshop\Core\Registry::getUtils(); + $sTrimmedBillName = trim($oOrder->oxorder__oxbilllname->getRawValue()); + if(!$sTrimmedBillName) { + return FALSE; + } + else { + $strx=array('#[^a-zA-Z0-9äöüß\040]#','# +#','#ä#','#ö#','#ü#','#ß#'); + $stry=array(' ',' ','ae','oe','ue','ss'); + $sTrimmedBillName=preg_replace($strx,$stry,$sTrimmedBillName); + $sTrimmedBillName=trim($sTrimmedBillName); + $sTrimmedBillName=strtolower($sTrimmedBillName); + } + $sFilename = $oOrder->oxorder__oxordernr->value . "_" . $sTrimmedBillName . ".xml"; + $sFilename = $this->makeValidFileName($sFilename); + ob_start(); + $oOrder->genXRechnung($sFilename, \OxidEsales\Eshop\Core\Registry::getConfig()->getRequestParameter("xmllanguage"), false); + + $myConfig = Registry::getConfig(); + + echo file_get_contents($myConfig->getConfigParam('sShopDir')."/export/xml/".$sFilename); + $sXML = ob_get_contents(); + ob_end_clean(); + $oUtils->setHeader("Pragma: public"); + $oUtils->setHeader("Cache-Control: must-revalidate, post-check=0, pre-check=0"); + $oUtils->setHeader("Expires: 0"); + $oUtils->setHeader("Content-type: application/xml"); + $oUtils->setHeader("Content-Disposition: attachment; filename=" . $sFilename); + \OxidEsales\Eshop\Core\Registry::getUtils()->showMessageAndExit($sXML); + } + } + } +} diff --git a/src/Modules/Application/Model/Order.php b/src/Modules/Application/Model/Order.php new file mode 100644 index 0000000..d345bc8 --- /dev/null +++ b/src/Modules/Application/Model/Order.php @@ -0,0 +1,84 @@ +oxorder__oxbillnr->value) { + $this->oxorder__oxbillnr->setValue($this->getNextBillNum()); + $blIsNewOrder = 1; + } + // setting invoice date + if ($this->oxorder__oxbilldate->value == '0000-00-00') { + $this->oxorder__oxbilldate->setValue(date('Y-m-d', mktime(0, 0, 0, date('m'), date('d'), date('Y')))); + $blIsNewOrder = 1; + } + + if ($blIsNewOrder) { + $this->save(); + } + + // adding info data + switch (\OxidEsales\Eshop\Core\Registry::getConfig()->getRequestParameter('exporttype')) { + case ('xml'): + return $this->getXRechnungXml($sFilename, $this->getId(), $iSelLang, $sendContent); + break; + default: + return $this->getXRechnungXml($sFilename, $this->getId(), $iSelLang, $sendContent); + } + } + + /** + * @param $sOrderId + * @return true + */ + protected function getXRechnungXml(string $sFilename, string $sOrderId, int $iSelLang, bool $sendContent = false) + { + $oConfig = Registry::getConfig(); + $oConfig->getConfigParam('d3xrechnung_PATH_GENERATOR'); + + $sPathDetails = $oConfig->getConfigParam('d3xrechnung_PATH_GENERATOR'); + $sPathDetails .= 'orderid='.$sOrderId; + $sPathDetails .= '&filename='.$sFilename; + $sPathDetails .= '&iSelLang='.$iSelLang; + $sPathDetails .= '&sendContent='.$sendContent; + $sPathDetails .= '&combinexmlpdf=false'; + + $sUser = $oConfig->getConfigParam('d3xrechnung_HTACCESS_USER'); + $sPassword = $oConfig->getConfigParam('d3xrechnung_HTACCESS_PASSWORD'); + + $client = new Client(); + try { + /* + $response = $client->request('GET', $sPathDetails, + ['auth' => ['schmidt', 'tGiVLrBQik!8']] + ); + */ + + $response = $client->request('GET', $sPathDetails, + ['auth' => [$sUser, $sPassword]] + ); + + if($sendContent) { + return $response->getBody(); // '{"id": 1420053, "name": "guzzle", ...}' + } + return true; + } + catch (ClientException $exception) { + $logger = Registry::getLogger(); + $logger->error(Psr7\Message::toString($exception->getRequest()), [$exception]); + $logger->error(Psr7\Message::toString($exception->getResponse()), [$exception]); + } + return true; + } + +} diff --git a/src/metadata.php b/src/metadata.php new file mode 100644 index 0000000..b89401f --- /dev/null +++ b/src/metadata.php @@ -0,0 +1,84 @@ + + * @link https://www.oxidmodule.com + */ + +declare(strict_types=1); + +use D3\DelUserExtension\Modules\Controller\Admin\userDeletingList; +use D3\DelUserExtension\Modules\Controller\Admin\userDeletingMain; +use D3\DelUserExtension\Modules\Core\Model\ListModel; + +$sMetadataVersion = '2.1'; + +$sModuleId = 'd3xrechnung'; +$logo = '(D3)'; + +/** + * Module information + */ +$aModule = [ + 'id' => $sModuleId, + 'title' => $logo.' Anpassung: xRechnung / Zugferd', + 'description' => [ + 'de' => '
+ Ruft den Generator auf, und gibt die erstellte XML-Datei an den Browser zum Download aus.
+Der Pfad und Zugangsschutz zum Generator wird in der Konfiguration des Moduls hinterlegt. +
+ Pfad: https://xrechnung.DOMAIN.TLD/xrechnung.php?
+ Validierung:https://www.epoconsulting.com/erechnung-sap/xrechnung-validator
+ Tickets: + + ', + 'en' => '', + ], + 'thumbnail' => 'picture.png', + 'version' => '1.0.0', + 'author' => $logo.' Data Development (Inh.: Thomas Dartsch)', + 'email' => 'support@shopmodule.com', + 'url' => 'https://www.oxidmodule.com/', + 'extend' => [ + \OxidEsales\Eshop\Application\Controller\Admin\OrderOverview::class => D3\XRechnung\Modules\Application\Controller\Admin\OrderOverview::class, + \OxidEsales\Eshop\Application\Model\Order::class => \D3\XRechnung\Modules\Application\Model\Order::class + ], + 'templates' => [ + ], + 'settings' => [ + [ + 'group' => 'd3xrechnung', + 'name' => 'd3xrechnung_PATH_GENERATOR', + 'type' => 'str', + 'value' => 'https://xrechnung.DOMAIN.TLD/xrechnung.php?' + ], + [ + 'group' => 'd3xrechnung', + 'name' => 'd3xrechnung_HTACCESS_USER', + 'type' => 'str', + 'value' => '' + ], + [ + 'group' => 'd3xrechnung', + 'name' => 'd3xrechnung_HTACCESS_PASSWORD', + 'type' => 'str', + 'value' => '' + ], + ], + 'blocks' => array( + array( + 'template' => 'order_overview.tpl', + 'block' => 'admin_order_overview_export', + 'file' => 'Application/views/admin/blocks/order_overview.tpl', + 'position' => 100 + ), + ), +]; diff --git a/src/out/img/xrechnung.png b/src/out/img/xrechnung.png new file mode 100644 index 0000000000000000000000000000000000000000..3fe6b1d250df67d7759ac645ebaaa0197990a9a2 GIT binary patch literal 6789 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 rW+`lqX&C>7jHCzs&xHK-g-S*3Xuju!