initial implementation
This commit is contained in:
parent
a484657381
commit
f742024e79
|
@ -1,11 +1,33 @@
|
|||
<?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;
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
<?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