add release for OXID 4.10 / 5.3
This commit is contained in:
parent
f4a5d381c3
commit
44f093b950
26
README.md
26
README.md
@ -34,33 +34,32 @@ Gibt es in Ihrem Shop reguläre Steuersätze mit 16% oder 5%, werden diese beim
|
|||||||
|
|
||||||
## Systemanforderung
|
## Systemanforderung
|
||||||
|
|
||||||
- installierter OXID eShop in Version 6 und dessen Anforderungen
|
- installierter OXID eShop in Version 4.10 (CE, PE) oder 5.3 (EE) und dessen Anforderungen
|
||||||
|
|
||||||
|
Ein Einsatz in älteren Shopversionen ist vor dem Livebetrieb zwingend auf Verwendbarkeit zu testen.
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Während Installation werden noch keine Shopeinstellungen geändert. Führen Sie diesen Befehl im Shophauptverzeichnis aus:
|
Kopieren Sie den Inhalt des `copy_this`-Ordners in Ihren Shopordner. Achten Sie darauf, auch die verborgene .htaccess mitzukopieren, dass die Scripte nicht über den Browser von außen erreichbar sind.
|
||||||
|
|
||||||
|
Vergeben Sie den beiden Scripten im Ordner `_taxRates/bin` Ausführungsrechte.
|
||||||
```
|
|
||||||
composer require d3/taxratesadjustment:"^2.0" --no-dev
|
|
||||||
```
|
|
||||||
|
|
||||||
## Ausführung
|
## Ausführung
|
||||||
|
|
||||||
- Bitte führen Sie die Umstellung rechtzeitig vorab in einer Testinstallation durch und prüfen Ihren Shop, um Fehler im Livebetrieb zu vermeiden. Zum Übergehen der Datumsprüfung können Sie den folgenden Befehlen einfach den Parameter `-d` anhängen: z.B. `[ Shoppfad ]/vendor/bin/reduceTaxRate -d`. Für den Livebetrieb soll der Parameter nicht verwendet werden.
|
- Bitte führen Sie die Umstellung rechtzeitig vorab in einer Testinstallation durch und prüfen Ihren Shop, um Fehler im Livebetrieb zu vermeiden. Zum Übergehen der Datumsprüfung können Sie den folgenden Befehlen einfach den Parameter `-d` anhängen: z.B. `[ Shoppfad ]/_taxRates/bin/reduceTaxRate -d`. Für den Livebetrieb soll der Parameter nicht verwendet werden.
|
||||||
- Legen Sie sich unbedingt vor jeder Ausführung eine Datensicherung an. Die Software wird nach bestem Wissen erstellt. Durch die Vielzahl an möglichen Shopkonstellationen können wir jedoch keine Gewährleistung für die richtige Ausführung und eventuelle Folgen übernehmen.
|
- Legen Sie sich unbedingt vor jeder Ausführung eine Datensicherung an. Die Software wird nach bestem Wissen erstellt. Durch die Vielzahl an möglichen Shopkonstellationen können wir jedoch keine Gewährleistung für die richtige Ausführung und eventuelle Folgen übernehmen.
|
||||||
|
|
||||||
Richten Sie einen ersten Cronjob ein, der idealerweise am 01.07.2020 um 00:00 folgendes Script startet, um die Steuersätze zu senken. Alternativ führen Sie dieses Script zum passenden Zeitpunkt manuell aus:
|
Richten Sie einen ersten Cronjob ein, der idealerweise am 01.07.2020 um 00:00 folgendes Script startet, um die Steuersätze zu senken. Alternativ führen Sie dieses Script zum passenden Zeitpunkt manuell aus:
|
||||||
|
|
||||||
```
|
```
|
||||||
[ Shoppfad ]/vendor/bin/reduceTaxRate
|
[ Shoppfad ]/_taxRates/bin/reduceTaxRate
|
||||||
```
|
```
|
||||||
|
|
||||||
Richten Sie einen zweiten Cronjob ein, der idealerweise am 01.01.2021 um 00:00 folgendes Script startet, um die Steuersätze zurückzusetzen. Alternativ führen Sie dieses Script zum passenden Zeitpunkt manuell aus:
|
Richten Sie einen zweiten Cronjob ein, der idealerweise am 01.01.2021 um 00:00 folgendes Script startet, um die Steuersätze zurückzusetzen. Alternativ führen Sie dieses Script zum passenden Zeitpunkt manuell aus:
|
||||||
|
|
||||||
|
|
||||||
```
|
```
|
||||||
[ Shoppfad ]/vendor/bin/raiseTaxRate
|
[ Shoppfad ]/_taxRates/bin/raiseTaxRate
|
||||||
```
|
```
|
||||||
|
|
||||||
Bei Fragen zur Einrichtung der Cronjobs kontaktieren Sie bitte Ihren Hostingprovider.
|
Bei Fragen zur Einrichtung der Cronjobs kontaktieren Sie bitte Ihren Hostingprovider.
|
||||||
@ -73,18 +72,13 @@ Zur Definition, welche Subshops bearbeitet werden sollen, kann der Parameter `-s
|
|||||||
|
|
||||||
Entfernen Sie die eingerichteten Cronjobs nach den beiden Ausführungszeitpunkten, um versehentliche spätere Auslösungen zu vermeiden.
|
Entfernen Sie die eingerichteten Cronjobs nach den beiden Ausführungszeitpunkten, um versehentliche spätere Auslösungen zu vermeiden.
|
||||||
|
|
||||||
Nach heutigem Stand werden die Scripte nach dem Zurücksetzen der Steuersätze nicht mehr benötigt. Dann kann dieses Paket mit folgendem Befehl wieder aus der Installation entfernt werden:
|
Nach heutigem Stand werden die Scripte nach dem Zurücksetzen der Steuersätze nicht mehr benötigt. Dann kann der Ordner `_taxRates` wieder komplett aus der Installation entfernt werden.
|
||||||
|
|
||||||
```
|
|
||||||
composer remove d3/taxratesadjustment --no-dev
|
|
||||||
```
|
|
||||||
|
|
||||||
## Änderungshistorie
|
## Änderungshistorie
|
||||||
|
|
||||||
- 2.0.0:
|
- 1.0.0:
|
||||||
- scriptgesteuertes Ändern der Steuersätze (generell und artikelspezifisch) reduzierend und erhöhend für jeden Subshop
|
- scriptgesteuertes Ändern der Steuersätze (generell und artikelspezifisch) reduzierend und erhöhend für jeden Subshop
|
||||||
- per Argument übersteuerbare Ausführungsbeschränkung
|
- per Argument übersteuerbare Ausführungsbeschränkung
|
||||||
- 2.1.0
|
|
||||||
- Subshopfilter eingefügt
|
- Subshopfilter eingefügt
|
||||||
|
|
||||||
## Support
|
## Support
|
||||||
|
@ -1,25 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "d3/taxratesadjustment",
|
|
||||||
"description": "adjusts the tax rates for the German economic stimulus package 2020 / 2021",
|
|
||||||
"type": "library",
|
|
||||||
"require": {
|
|
||||||
"oxid-esales/oxideshop-ce": "^6.0"
|
|
||||||
},
|
|
||||||
"license": "GPL-3.0",
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "D3 Data Development (Inh. Thomas Dartsch)",
|
|
||||||
"email": "info@shopmodule.com",
|
|
||||||
"homepage": "https://www.d3data.de"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"D3\\TaxRatesAdjustment\\": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"bin": [
|
|
||||||
"bin/reduceTaxRate",
|
|
||||||
"bin/raiseTaxRate"
|
|
||||||
]
|
|
||||||
}
|
|
1
copy_this/_taxRates/.htaccess
Normal file
1
copy_this/_taxRates/.htaccess
Normal file
@ -0,0 +1 @@
|
|||||||
|
Deny from all
|
@ -13,11 +13,9 @@
|
|||||||
* @link http://www.oxidmodule.com
|
* @link http://www.oxidmodule.com
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// ShopId
|
|
||||||
|
|
||||||
namespace D3\TaxRatesAdjustment\Models;
|
namespace D3\TaxRatesAdjustment\Models;
|
||||||
|
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
require 'taxRateAbstract.php';
|
||||||
|
|
||||||
class raiseTaxRate extends taxRateAbstract
|
class raiseTaxRate extends taxRateAbstract
|
||||||
{
|
{
|
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
namespace D3\TaxRatesAdjustment\Models;
|
namespace D3\TaxRatesAdjustment\Models;
|
||||||
|
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
require 'taxRateAbstract.php';
|
||||||
|
|
||||||
class reduceTaxRate extends taxRateAbstract
|
class reduceTaxRate extends taxRateAbstract
|
||||||
{
|
{
|
@ -15,12 +15,11 @@
|
|||||||
|
|
||||||
namespace D3\TaxRatesAdjustment\Models;
|
namespace D3\TaxRatesAdjustment\Models;
|
||||||
|
|
||||||
use OxidEsales\Eshop\Application\Model\Article;
|
use oxArticle;
|
||||||
use OxidEsales\Eshop\Application\Model\Shop;
|
use oxConfig;
|
||||||
use OxidEsales\Eshop\Core\Config;
|
use oxDb;
|
||||||
use OxidEsales\Eshop\Core\DatabaseProvider;
|
use oxRegistry;
|
||||||
use OxidEsales\Eshop\Core\Exception\StandardException;
|
use oxShop;
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
|
||||||
|
|
||||||
abstract class taxRateAbstract
|
abstract class taxRateAbstract
|
||||||
{
|
{
|
||||||
@ -50,10 +49,6 @@ abstract class taxRateAbstract
|
|||||||
return (time() > strtotime($from)) && (time() < strtotime($to));
|
return (time() > strtotime($from)) && (time() < strtotime($to));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
|
|
||||||
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
|
|
||||||
*/
|
|
||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
if (false === $this->isInExecutableTimeRange()) {
|
if (false === $this->isInExecutableTimeRange()) {
|
||||||
@ -64,27 +59,23 @@ abstract class taxRateAbstract
|
|||||||
$this->changeTaxRates();
|
$this->changeTaxRates();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
|
|
||||||
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
|
|
||||||
*/
|
|
||||||
public function changeTaxRates()
|
public function changeTaxRates()
|
||||||
{
|
{
|
||||||
$shop = new Shop();
|
$shop = new oxShop();
|
||||||
|
|
||||||
// use shop list, when parameter -d is set
|
// use shop list, when parameter -d is set
|
||||||
$opts = getopt("s:");
|
$opts = getopt("s:");
|
||||||
|
|
||||||
$where = isset($opts['s']) ?
|
$where = isset($opts['s']) ?
|
||||||
"oxid IN (".implode(', ', array_map(
|
"oxid IN (".implode(', ', array_map(
|
||||||
function ($a) {return DatabaseProvider::getDb()->quote(trim($a));},
|
function ($a) {return oxDb::getDb()->quote(trim($a));},
|
||||||
explode(',', $opts['s']))
|
explode(',', $opts['s']))
|
||||||
).")" :
|
).")" :
|
||||||
"1";
|
"1";
|
||||||
|
|
||||||
$q = "SELECT oxid FROM " . $shop->getCoreTableName() . " WHERE ".$where ;
|
$q = "SELECT oxid FROM " . $shop->getCoreTableName() . " WHERE ".$where ;
|
||||||
|
|
||||||
foreach ( DatabaseProvider::getDb( DatabaseProvider::FETCH_MODE_ASSOC )->getAll( $q ) as $record ) {
|
foreach (oxDb::getDb(oxDb::FETCH_MODE_ASSOC )->getAll( $q ) as $record ) {
|
||||||
$shopId = (int) $record["oxid"];
|
$shopId = (int) $record["oxid"];
|
||||||
$this->switchToShop($shopId);
|
$this->switchToShop($shopId);
|
||||||
$this->changeDefaultTaxRate( $shopId );
|
$this->changeDefaultTaxRate( $shopId );
|
||||||
@ -99,18 +90,18 @@ abstract class taxRateAbstract
|
|||||||
*/
|
*/
|
||||||
public function switchToShop($id)
|
public function switchToShop($id)
|
||||||
{
|
{
|
||||||
if (Registry::getConfig()->isMall()
|
if (oxRegistry::getConfig()->isMall()
|
||||||
&& $id != Registry::getConfig()->getActiveShop()->getId()
|
&& $id != oxRegistry::getConfig()->getActiveShop()->getId()
|
||||||
) {
|
) {
|
||||||
/** @var Config $oNewConf */
|
/** @var oxConfig $oNewConf */
|
||||||
$oNewConf = new Config();
|
$oNewConf = new oxConfig();
|
||||||
$oNewConf->setShopId($id);
|
$oNewConf->setShopId($id);
|
||||||
$oNewConf->init();
|
$oNewConf->init();
|
||||||
|
|
||||||
Registry::getConfig()->onShopChange();
|
oxRegistry::getConfig()->onShopChange();
|
||||||
Registry::getSession()->setVariable('actshop', $id);
|
oxRegistry::getSession()->setVariable('actshop', $id);
|
||||||
Registry::getSession()->setVariable('currentadminshop', $id);
|
oxRegistry::getSession()->setVariable('currentadminshop', $id);
|
||||||
Registry::getConfig()->setShopId($id);
|
oxRegistry::getConfig()->setShopId($id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -119,7 +110,7 @@ abstract class taxRateAbstract
|
|||||||
*/
|
*/
|
||||||
public function changeDefaultTaxRate($shopId)
|
public function changeDefaultTaxRate($shopId)
|
||||||
{
|
{
|
||||||
$oCurrConfig = new Config();
|
$oCurrConfig = new oxConfig();
|
||||||
$newVat = $this->rateChanges[(int) $oCurrConfig->getConfigParam('dDefaultVAT')];
|
$newVat = $this->rateChanges[(int) $oCurrConfig->getConfigParam('dDefaultVAT')];
|
||||||
|
|
||||||
if ($newVat) {
|
if ($newVat) {
|
||||||
@ -132,21 +123,18 @@ abstract class taxRateAbstract
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param int $shopId
|
* @param int $shopId
|
||||||
*
|
|
||||||
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
|
|
||||||
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
|
|
||||||
*/
|
*/
|
||||||
public function changeArticlesTaxRate($shopId)
|
public function changeArticlesTaxRate($shopId)
|
||||||
{
|
{
|
||||||
$article = oxNew(Article::class);
|
$article = oxNew(oxArticle::class);
|
||||||
$q = "SELECT oxid FROM ".$article->getCoreTableName()."
|
$q = "SELECT oxid FROM ".$article->getCoreTableName()."
|
||||||
WHERE oxvat IN (".implode(', ', array_keys($this->rateChanges)).")
|
WHERE oxvat IN (".implode(', ', array_keys($this->rateChanges)).")
|
||||||
AND oxshopid = ".DatabaseProvider::getDb()->quote($shopId);
|
AND oxshopid = ". oxDb::getDb()->quote($shopId);
|
||||||
|
|
||||||
$counter = 0;
|
$counter = 0;
|
||||||
foreach (DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC)->getAll($q) as $articleRecord) {
|
foreach (oxDb::getDb(oxDb::FETCH_MODE_ASSOC)->getAll($q) as $articleRecord) {
|
||||||
$articleId = $articleRecord['oxid'];
|
$articleId = $articleRecord['oxid'];
|
||||||
$article = oxNew(Article::class);
|
$article = oxNew(oxArticle::class);
|
||||||
$article->load($articleId);
|
$article->load($articleId);
|
||||||
$article->assign(
|
$article->assign(
|
||||||
[
|
[
|
||||||
@ -163,9 +151,9 @@ abstract class taxRateAbstract
|
|||||||
|
|
||||||
$q = "SELECT count(*) FROM ".$article->getCoreTableName()."
|
$q = "SELECT count(*) FROM ".$article->getCoreTableName()."
|
||||||
WHERE oxvat IN (".implode(', ', array_keys($this->rateChanges)).")
|
WHERE oxvat IN (".implode(', ', array_keys($this->rateChanges)).")
|
||||||
AND oxshopid = ".DatabaseProvider::getDb()->quote($shopId);
|
AND oxshopid = ". oxDb::getDb()->quote($shopId);
|
||||||
|
|
||||||
if ($counter = DatabaseProvider::getDb()->getOne($q)) {
|
if ($counter = oxDb::getDb()->getOne($q)) {
|
||||||
echo "the tax rate update for " . $counter . " article(s) was failed in shop " . $shopId . PHP_EOL;
|
echo "the tax rate update for " . $counter . " article(s) was failed in shop " . $shopId . PHP_EOL;
|
||||||
}
|
}
|
||||||
}
|
}
|
2
bin/raiseTaxRate → copy_this/_taxRates/bin/raiseTaxRate
Normal file → Executable file
2
bin/raiseTaxRate → copy_this/_taxRates/bin/raiseTaxRate
Normal file → Executable file
@ -6,8 +6,10 @@ $currentDirectory = __DIR__ . '/';
|
|||||||
$filePath = $currentDirectory . $filePath;
|
$filePath = $currentDirectory . $filePath;
|
||||||
|
|
||||||
require($filePath);
|
require($filePath);
|
||||||
|
require(__DIR__.'/../Models/raiseTaxRate.php');
|
||||||
|
|
||||||
$change = new \D3\TaxRatesAdjustment\Models\raiseTaxRate();
|
$change = new \D3\TaxRatesAdjustment\Models\raiseTaxRate();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$change->run();
|
$change->run();
|
||||||
} catch ( \Exception $e) {
|
} catch ( \Exception $e) {
|
1
bin/reduceTaxRate → copy_this/_taxRates/bin/reduceTaxRate
Normal file → Executable file
1
bin/reduceTaxRate → copy_this/_taxRates/bin/reduceTaxRate
Normal file → Executable file
@ -6,6 +6,7 @@ $currentDirectory = __DIR__ . '/';
|
|||||||
$filePath = $currentDirectory . $filePath;
|
$filePath = $currentDirectory . $filePath;
|
||||||
|
|
||||||
require($filePath);
|
require($filePath);
|
||||||
|
require(__DIR__.'/../Models/reduceTaxRate.php');
|
||||||
|
|
||||||
$change = new \D3\TaxRatesAdjustment\Models\reduceTaxRate();
|
$change = new \D3\TaxRatesAdjustment\Models\reduceTaxRate();
|
||||||
try {
|
try {
|
@ -5,7 +5,7 @@ if (!empty($bootstrapFileName)) {
|
|||||||
$bootstrapFileName = realpath(trim(getenv('ESHOP_BOOTSTRAP_PATH')));
|
$bootstrapFileName = realpath(trim(getenv('ESHOP_BOOTSTRAP_PATH')));
|
||||||
} else {
|
} else {
|
||||||
$count = 0;
|
$count = 0;
|
||||||
$bootstrapFileName = '../../source/bootstrap.php';
|
$bootstrapFileName = '../bootstrap.php';
|
||||||
$currentDirectory = __DIR__ . '/';
|
$currentDirectory = __DIR__ . '/';
|
||||||
while ($count < 5) {
|
while ($count < 5) {
|
||||||
$count++;
|
$count++;
|
Reference in New Issue
Block a user