initial implementation
This commit is contained in:
parent
a484657381
commit
f742024e79
|
@ -1,11 +1,33 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This Software is the property of Data Development and is protected
|
||||||
|
* by copyright law - it is NOT Freeware.
|
||||||
|
* Any unauthorized use of this software without a valid license
|
||||||
|
* is a violation of the license agreement and will be prosecuted by
|
||||||
|
* civil and criminal law.
|
||||||
|
* http://www.shopmodule.com
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
|
||||||
|
* @link http://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
// ShopId
|
||||||
|
|
||||||
namespace D3\TaxRatesAdjustment\Models;
|
namespace D3\TaxRatesAdjustment\Models;
|
||||||
|
|
||||||
class raiseTaxRate
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
|
|
||||||
|
class raiseTaxRate extends taxRateAbstract
|
||||||
{
|
{
|
||||||
public function run()
|
public $execPeriod = [
|
||||||
|
'2020-12-30',
|
||||||
|
'2021-01-03',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
{
|
{
|
||||||
dumpvar(__METHOD__);
|
$this->rateChanges = array_flip($this->rateChanges);
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This Software is the property of Data Development and is protected
|
||||||
|
* by copyright law - it is NOT Freeware.
|
||||||
|
* Any unauthorized use of this software without a valid license
|
||||||
|
* is a violation of the license agreement and will be prosecuted by
|
||||||
|
* civil and criminal law.
|
||||||
|
* http://www.shopmodule.com
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
|
||||||
|
* @link http://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace D3\TaxRatesAdjustment\Models;
|
||||||
|
|
||||||
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
|
|
||||||
|
class reduceTaxRate extends taxRateAbstract
|
||||||
|
{
|
||||||
|
public $execPeriod = [
|
||||||
|
'2020-06-01',
|
||||||
|
'2020-07-03',
|
||||||
|
];
|
||||||
|
}
|
|
@ -0,0 +1,154 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This Software is the property of Data Development and is protected
|
||||||
|
* by copyright law - it is NOT Freeware.
|
||||||
|
* Any unauthorized use of this software without a valid license
|
||||||
|
* is a violation of the license agreement and will be prosecuted by
|
||||||
|
* civil and criminal law.
|
||||||
|
* http://www.shopmodule.com
|
||||||
|
*
|
||||||
|
* @copyright (C) D3 Data Development (Inh. Thomas Dartsch)
|
||||||
|
* @author D3 Data Development - Daniel Seifert <support@shopmodule.com>
|
||||||
|
* @link http://www.oxidmodule.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace D3\TaxRatesAdjustment\Models;
|
||||||
|
|
||||||
|
use OxidEsales\Eshop\Application\Model\Article;
|
||||||
|
use OxidEsales\Eshop\Application\Model\Shop;
|
||||||
|
use OxidEsales\Eshop\Core\Config;
|
||||||
|
use OxidEsales\Eshop\Core\DatabaseProvider;
|
||||||
|
use OxidEsales\Eshop\Core\Exception\StandardException;
|
||||||
|
use OxidEsales\Eshop\Core\Registry;
|
||||||
|
|
||||||
|
abstract class taxRateAbstract
|
||||||
|
{
|
||||||
|
public $execPeriod = [
|
||||||
|
'2020-01-01',
|
||||||
|
'2019-12-31',
|
||||||
|
];
|
||||||
|
|
||||||
|
public $rateChanges = [
|
||||||
|
19 => 16,
|
||||||
|
7 => 5
|
||||||
|
];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function isInExecutableTimeRange()
|
||||||
|
{
|
||||||
|
list($from, $to) = $this->execPeriod;
|
||||||
|
|
||||||
|
return (time() > strtotime($from)) && (time() < strtotime($to));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
|
||||||
|
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
|
||||||
|
*/
|
||||||
|
public function run()
|
||||||
|
{
|
||||||
|
if (false === $this->isInExecutableTimeRange()) {
|
||||||
|
trigger_error("script shouldn't run outside the defined time range", E_USER_WARNING);
|
||||||
|
die();
|
||||||
|
};
|
||||||
|
|
||||||
|
$this->changeDefaultTaxRates();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
|
||||||
|
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
|
||||||
|
*/
|
||||||
|
public function changeDefaultTaxRates() {
|
||||||
|
$shop = new Shop();
|
||||||
|
|
||||||
|
$q = "SELECT oxid FROM " . $shop->getCoreTableName() . " WHERE 1";
|
||||||
|
foreach ( DatabaseProvider::getDb( DatabaseProvider::FETCH_MODE_ASSOC )->getAll( $q ) as $record ) {
|
||||||
|
$shopId = (int) $record['oxid'];
|
||||||
|
$this->switchToShop($shopId);
|
||||||
|
$this->changeDefaultTaxRate( $shopId );
|
||||||
|
$this->changeArticlesTaxRate( $shopId );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $id
|
||||||
|
*
|
||||||
|
* @throws \oxConnectionException
|
||||||
|
*/
|
||||||
|
public function switchToShop($id)
|
||||||
|
{
|
||||||
|
if (Registry::getConfig()->isMall()
|
||||||
|
&& $id != Registry::getConfig()->getActiveShop()->getId()
|
||||||
|
) {
|
||||||
|
/** @var Config $oNewConf */
|
||||||
|
$oNewConf = new Config();
|
||||||
|
$oNewConf->setShopId($id);
|
||||||
|
$oNewConf->init();
|
||||||
|
|
||||||
|
Registry::getConfig()->onShopChange();
|
||||||
|
Registry::getSession()->setVariable('actshop', $id);
|
||||||
|
Registry::getSession()->setVariable('currentadminshop', $id);
|
||||||
|
Registry::getConfig()->setShopId($id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $shopId
|
||||||
|
*/
|
||||||
|
public function changeDefaultTaxRate($shopId)
|
||||||
|
{
|
||||||
|
$oCurrConfig = new Config();
|
||||||
|
$newVat = $this->rateChanges[(int) $oCurrConfig->getConfigParam('dDefaultVAT')];
|
||||||
|
|
||||||
|
if ($newVat) {
|
||||||
|
$oCurrConfig->saveShopConfVar('num', 'dDefaultVAT', $newVat);
|
||||||
|
echo "default tax rate was sucessfully changed in shop ".$shopId.PHP_EOL;
|
||||||
|
} else {
|
||||||
|
echo "no changeable default tax rate found in shop ".$shopId.PHP_EOL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $shopId
|
||||||
|
*
|
||||||
|
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseConnectionException
|
||||||
|
* @throws \OxidEsales\Eshop\Core\Exception\DatabaseErrorException
|
||||||
|
*/
|
||||||
|
public function changeArticlesTaxRate($shopId)
|
||||||
|
{
|
||||||
|
$article = oxNew(Article::class);
|
||||||
|
$q = "SELECT oxid FROM ".$article->getCoreTableName()."
|
||||||
|
WHERE oxvat IN (".implode(', ', array_keys($this->rateChanges)).")
|
||||||
|
AND oxshopid = ".DatabaseProvider::getDb()->quote($shopId);
|
||||||
|
|
||||||
|
$counter = 0;
|
||||||
|
foreach (DatabaseProvider::getDb(DatabaseProvider::FETCH_MODE_ASSOC)->getAll($q) as $articleRecord) {
|
||||||
|
$articleId = $articleRecord['oxid'];
|
||||||
|
$article = oxNew(Article::class);
|
||||||
|
$article->load($articleId);
|
||||||
|
$article->assign(
|
||||||
|
[
|
||||||
|
'oxvat' => $this->rateChanges[(int) $article->getFieldData('oxvat')]
|
||||||
|
]
|
||||||
|
);
|
||||||
|
$article->save();
|
||||||
|
$counter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($counter) {
|
||||||
|
echo "the tax rate for " . $counter . " article(s) was changed in shop " . $shopId . PHP_EOL;
|
||||||
|
}
|
||||||
|
|
||||||
|
$q = "SELECT count(*) FROM ".$article->getCoreTableName()."
|
||||||
|
WHERE oxvat IN (".implode(', ', array_keys($this->rateChanges)).")
|
||||||
|
AND oxshopid = ".DatabaseProvider::getDb()->quote($shopId);
|
||||||
|
|
||||||
|
if ($counter = DatabaseProvider::getDb()->getOne($q)) {
|
||||||
|
echo "the tax rate update for " . $counter . " article(s) was failed in shop " . $shopId . PHP_EOL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
14
README.md
14
README.md
|
@ -1,3 +1,15 @@
|
||||||
# TaxRatesAdjustment
|
# TaxRatesAdjustment
|
||||||
|
|
||||||
Anpassung der Steuersätze (speziell für den 01.07.2020 + 01.01.2021)
|
Anpassung der Steuersätze im Rahmen des deutschen Konjunkturpaketes 2020 / 2021
|
||||||
|
|
||||||
|
per Cronjob am 01.07.2020 auszufuehren:
|
||||||
|
|
||||||
|
```
|
||||||
|
./vendor/bin/reduceTaxRate
|
||||||
|
```
|
||||||
|
|
||||||
|
per Cronjob am 01.01.2021 auszufuehren:
|
||||||
|
|
||||||
|
```
|
||||||
|
./vendor/bin/raiseTaxRate
|
||||||
|
```
|
|
@ -1,2 +1,15 @@
|
||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
$filePath = '../bootstrap.php';
|
||||||
|
$currentDirectory = __DIR__ . '/';
|
||||||
|
$filePath = $currentDirectory . $filePath;
|
||||||
|
|
||||||
|
require($filePath);
|
||||||
|
|
||||||
|
$change = new \D3\TaxRatesAdjustment\Models\reduceTaxRate();
|
||||||
|
try {
|
||||||
|
$change->run();
|
||||||
|
} catch ( \Exception $e) {
|
||||||
|
echo $e->getMessage();
|
||||||
|
}
|
Reference in New Issue