OpenXE/cronjobs/belegeimport.php
2021-05-21 08:49:41 +02:00

67 lines
2.8 KiB
PHP

<?php
error_reporting(E_ERROR );
include_once dirname(__DIR__) . '/xentral_autoloader.php';
if(empty($app) || !($app instanceof ApplicationCore)) {
$app = new ApplicationCore();
}
/** @var Belegeimport $belegeimport*/
$belegeimport = $app->erp->LoadModul('belegeimport');
/** @var BelegeImporterService $belegeimportService */
$belegeimportService = $belegeimport->getImporterService();
if (!$app->DB->Select("SELECT id FROM prozessstarter WHERE mutex = 0 AND parameter = 'belegeimport' AND aktiv = 1")) {
$app->DB->Update("UPDATE prozessstarter SET mutexcounter = mutexcounter + 1 WHERE mutex = 1 AND parameter = 'belegeimport' AND aktiv = 1");
return;
}
$app->DB->Update("UPDATE prozessstarter SET mutex = 1, mutexcounter = 0 WHERE parameter = 'belegeimport' AND aktiv = 1");
$result = $app->DB->SelectArr("SELECT * FROM belegeimport_running WHERE command IN ('upload','write') ORDER BY id LIMIT 1");
if (count($result) > 0) {
$r = $result[0];
if($r['command']=='upload'){
//Der Prozessstarter bricht den alten Belegeimportprozess nicht ab, der Mutex wird aber irgendwann zurückgesetzt.
//Damit er nicht weitere Dateien beginnt abzuarbeiten:
$isWorking = $app->DB->Select("SELECT id FROM belegeimport_running WHERE command IN ('preparing','processing')");
if(!empty($isWorking)){
$app->DB->Update("UPDATE prozessstarter SET mutex = 1, mutexcounter = 0 WHERE parameter = 'belegeimport' AND aktiv = 1");
return;
}
//Um Mehrfachausführung im Prozessstarter zu vermeiden
$app->DB->Update("UPDATE belegeimport_running SET command='preparing' WHERE id = '".$r['id']."'");
$belegeimportService->BelegeimportRun($r['filename'], $r['art'], $r['status'],false,null,$r['userid']);
$app->DB->Update("UPDATE belegeimport_running SET command='ready' WHERE id = '".$r['id']."'");
unlink($r['filename']);
}
elseif($r['command']=='write'){
//Der Prozessstarter bricht den alten Belegeimportprozess nicht ab, der Mutex wird aber irgendwann zurückgesetzt.
//Damit er nicht weitere Dateien beginnt abzuarbeiten:
$isWorking = $app->DB->Select("SELECT id FROM belegeimport_running WHERE command IN ('preparing','processing')");
if(!empty($isWorking)){
$app->DB->Update("UPDATE prozessstarter SET mutex = 1, mutexcounter = 0 WHERE parameter = 'belegeimport' AND aktiv = 1");
return;
}
//Um Mehrfachausführung im Prozessstarter zu vermeiden
$app->DB->Update("UPDATE belegeimport_running SET command='processing' WHERE id = '".$r['id']."'");
$belegeimportService->BelegeimportAll(null, false,$r['userid'],$r['art']);
$app->DB->Delete("DELETE FROM belegeimport_running WHERE id=".$r['id']);
}
}
$app->DB->Update("UPDATE prozessstarter SET mutex = 0 , mutexcounter = 0 WHERE (parameter = 'belegeimport' ) AND aktiv = 1");