app=$app;
if($intern) {
return;
}
$this->app->ActionHandlerInit($this);
$this->app->ActionHandler("list","Vatreduction2020List");
$this->app->ActionHandlerListen($app);
$this->app->erp->Headlines('Auftragsblocker');
}
public function Install()
{
$this->app->erp->RegisterHook('BelegFreigabe', 'vatreduction2020', 'HookBelegFreigabe');
$this->app->erp->RegisterHook('ANABREGSNeuberechnen_1', 'vatreduction2020', 'HookRecalcDoctype');
$this->app->erp->RegisterHook('Shopimport', 'vatreduction2020', 'HookShopimport');
}
/**
* @param string $doctype
* @param int $doctypeId
*/
public function HookRecalcDoctype($doctype, $doctypeId)
{
$this->HookBelegFreigabe($doctype, $doctypeId);
}
/**
* @param string $doctype
* @param int $tmpauftragid
* @param int $shopid
*/
public function HookShopimport($doctype, $tmpauftragid, $shopid)
{
if($doctype !== 'auftrag' || empty($tmpauftragid)
|| empty($this->app->erp->GetKonfiguration('vatreduction2020_active'))
) {
return;
}
$this->HookBelegFreigabe($doctype, $tmpauftragid);
$date = (string)$this->app->erp->GetKonfiguration('vatreduction2020_date');
if($date === '') {
$date = '2020-07-01';
}
if(strpos($date,'.') !== false) {
$date = $this->app->String->Convert($date, '%1.%2.%3', '%3-%2-%1');
}
$date = (new DateTime($date))->format('Y-m-d');
$this->app->DB->Update(
sprintf(
"UPDATE `auftrag`
SET `autoversand` = 0
WHERE `id` = %d AND `autoversand` = 1 AND `datum` < '%s'
AND `status` = 'freigegeben'",
$tmpauftragid, $date
)
);
}
/**
* @param string $doctype
* @param int $doctypeId
*/
public function HookBelegFreigabe($doctype, $doctypeId)
{
if(
$doctype !== 'auftrag'
|| $doctypeId <= 0
|| empty($this->app->erp->GetKonfiguration('vatreduction2020_active'))
) {
return;
}
if($this->app->DB->Select(
sprintf(
"SELECT `auftrag`
FROM `auftrag_protokoll`
WHERE `auftrag` = %d AND `grund` = 'Autoversandfreigabe durch Auftragsblocker entfernt'
LIMIT 1",
$doctypeId
)
)
) {
return;
}
$date = (string)$this->app->erp->GetKonfiguration('vatreduction2020_date');
if($date === '') {
$date = '2020-07-01';
}
if(strpos($date,'.') !== false) {
$date = $this->app->String->Convert($date, '%1.%2.%3', '%3-%2-%1');
}
$date = (new DateTime($date))->format('Y-m-d');
$this->app->DB->Update(
sprintf(
"UPDATE `auftrag`
SET `autoversand` = 0
WHERE `id` = %d AND `autoversand` = 1 AND `datum` < '%s'
AND `status` = 'freigegeben'",
$doctypeId, $date
)
);
if($this->app->DB->affected_rows() > 0) {
$this->app->erp->AuftragProtokoll($doctypeId, 'Autoversandfreigabe durch Auftragsblocker entfernt');
}
}
/**
* @param null|bool $hasSpecialTaxes
*/
public function displayTaxMessageIfNeeded($hasSpecialTaxes = null)
{
$hasSpecialTaxes = $hasSpecialTaxes !== null?$hasSpecialTaxes:$this->hasSpecialTaxes();
if($hasSpecialTaxes) {
return;
}
$this->app->Tpl->Add(
'MESSAGE',
'
'
);
}
/**
* @return bool
*/
public function hasSpecialTaxes()
{
return $this->app->DB->Select(
sprintf(
"SELECT `id`
FROM `steuersaetze`
WHERE `set_data` = 1 AND `satz` = 16 AND `type` = 'normal'
AND (`country_code` = '' OR `country_code` = 'DE')
LIMIT 1"
)
) || $this->app->DB->Select(
sprintf(
"SELECT `id`
FROM `steuersaetze`
WHERE `set_data` = 1 AND `satz` = 5 AND `type` = 'ermaessigt'
AND (`country_code` = '' OR `country_code` = 'DE')
LIMIT 1"
)
);
}
/**
* @param null|bool $hasSpecialTaxes
*/
public function createTaxes($hasSpecialTaxes = null)
{
$hasSpecialTaxes = $hasSpecialTaxes !== null?$hasSpecialTaxes:$this->hasSpecialTaxes();
if($hasSpecialTaxes) {
return;
}
$this->app->DB->Insert(
sprintf(
"INSERT INTO `steuersaetze`
(`bezeichnung`, `satz`, `aktiv`, `bearbeiter`, `zeitstempel`, `project_id`,
`valid_from`, `valid_to`, `type`, `set_data`, `country_code`) VALUES
('2020 normal', 16, 1, '', NOW(), 0, '2020-07-01', '2020-12-31', 'normal', 1, 'DE')"
)
);
$this->app->DB->Insert(
sprintf(
"INSERT INTO `steuersaetze`
(`bezeichnung`, `satz`, `aktiv`, `bearbeiter`, `zeitstempel`, `project_id`,
`valid_from`, `valid_to`, `type`, `set_data`, `country_code`) VALUES
('normal', 19, 1, '', NOW(), 0, '2021-01-01', NULL, 'normal', 1, 'DE')"
)
);
$this->app->DB->Insert(
sprintf(
"INSERT INTO `steuersaetze`
(`bezeichnung`, `satz`, `aktiv`, `bearbeiter`, `zeitstempel`, `project_id`,
`valid_from`, `valid_to`, `type`, `set_data`, `country_code`) VALUES
('2020 ermäßigt', 5, 1, '', NOW(), 0, '2020-07-01', '2020-12-31', 'ermaessigt', 1, 'DE')"
)
);
$this->app->DB->Insert(
sprintf(
"INSERT INTO `steuersaetze`
(`bezeichnung`, `satz`, `aktiv`, `bearbeiter`, `zeitstempel`, `project_id`,
`valid_from`, `valid_to`, `type`, `set_data`, `country_code`) VALUES
('ermäßigt', 7, 1, '', NOW(), 0, '2021-01-01', NULL, 'ermaessigt', 1, 'DE')"
)
);
}
public function Vatreduction2020List()
{
$createTaxes = !empty($this->app->Secure->GetPOST('createtaxes'));
$hasTaxes = $this->hasSpecialTaxes();
if($createTaxes) {
$this->createTaxes($hasTaxes);
$this->app->Location->execute('index.php?module=vatreduction2020&action=list');
}
$isActive = !empty($this->app->erp->GetKonfiguration('vatreduction2020_active'));
$date = (string)$this->app->erp->GetKonfiguration('vatreduction2020_date');
if($date === '') {
$date = '2020-07-01';
$this->app->erp->SetKonfigurationValue('vatreduction2020_date', $date);
}
if(strpos($date, '-') !== false) {
$date = $this->app->String->Convert($date, '%1-%2-%3', '%3.%2.%1');
}
$this->app->Tpl->Set('VATREDUCTION2020_DATE', $date);
$this->app->YUI->DatePicker('vatreduction2020_date');
if($isActive) {
$this->app->Tpl->Set('ISACTIVE', ' checked="checked" ');
}
$this->app->YUI->AutoSaveKonfiguration('vatreduction2020_active', 'vatreduction2020_active');
$this->app->YUI->AutoSaveKonfiguration('vatreduction2020_date', 'vatreduction2020_date');
$this->displayTaxMessageIfNeeded($hasTaxes);
$this->app->erp->Headlines('Auftragsblocker');
$this->app->erp->MenuEintrag('index.php?module=vatreduction2020&action=list', 'Übersicht');
$this->app->Tpl->Parse('PAGE', 'vatreduction2020_list.tpl');
}
}