");
}
}
if($this->app->Secure->GetPOST('schritt2')!='' && $this->app->Secure->GetPOST('schritt1_check')=='1') {
$projekt = $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id='$id' LIMIT 1");
$this->app->erp->UpdateChecksumShopartikel($projekt);
$tmp = $this->app->remote->RemoteGetUpdateArticleList($id);
$this->app->Tpl->Set('SCHRITT2','');
$this->app->Tpl->Set('SCHRITT3','');
$this->app->Tpl->Set('HIDDENSCHRITT2',"");
$this->app->Tpl->Set('HIDDENSCHRITT3',"");
$html = "
";
$html = $html."
Pos.
Artikel
Nummer
Letzte Änderung
";
if(is_array($tmp)) {
foreach($tmp as $row) {
$checkarray[$row['artikel']] = $row['checksum'];
}
}
/*
if($projekt=="1") $checkmasterarray = $this->app->DB->SelectArr("SELECT id,checksum FROM artikel WHERE shop='1' AND projekt='$projekt' AND geloescht='0'");
else if ($projekt=="2") $checkmasterarray = $this->app->DB->SelectArr("SELECT id,checksum FROM artikel WHERE shop='2' AND projekt='$projekt' AND geloescht='0'");
else if ($projekt=="4") $checkmasterarray = $this->app->DB->SelectArr("SELECT id,checksum FROM artikel WHERE shop='3' AND projekt='$projekt' AND geloescht='0'");
*/
$checkmasterarray = $this->app->DB->SelectArr("SELECT id,checksum FROM artikel WHERE shop='$id' AND geloescht='0'");
$html = $html."
CMS
Inhaltsseiten (keine Shop-Artikeltexte)
(falls vorhanden)
";
$html = $html."
Artikelgruppen
Artikelgruppen
(falls vorhanden)
";
$html = $html."
Dateien/Bilder
Shopbilder (dauert bei vielen Bildern)
(falls vorhanden)
";
$aenderungen = 0;
$ccheckmasterarray = !empty($checkmasterarray)?count($checkmasterarray):0;
for($i=0; $i<$ccheckmasterarray;$i++) {
$artikel = $checkmasterarray[$i]['id'];
$checksum= $checkmasterarray[$i]['checksum'];
if(isset($checkarray) && isset($checkarray[$artikel]) && ($checkarray[$artikel]!=$checksum || $checkarray[$artikel]==""))
{
$aenderungen++;
$tmp = $this->app->DB->SelectArr("SELECT a.name_de, a.nummer FROM artikel a WHERE a. id='$artikel' LIMIT 1");
if($tmp)
{
$tmp[0]['logdatei'] = $this->app->DB->Select("SELECT logdatei FROM shopexport_artikel WHERE artikel='$artikel' AND shopexport='$id' LIMIT 1");
if($tmp[0]['logdatei']=="") $tmp[0]['logdatei']="noch nicht vorhanden";
$html = $html."
$aenderungen
{$tmp[0]['name_de']}
{$tmp[0]['nummer']}
{$tmp[0]['logdatei']}
";
}
}
if(isset($checkarray) && isset($checkarray[$artikel]))
{
unset($checkarray[$artikel]);
}
}
// loesche alle artikel im shop die nicht mehr im ERP als shop artikel vorhanden sind!
$ccheckarray = !empty($checkarray)?count($checkarray):0;
for($j=0;$j < $ccheckarray; $j++) {
if($ccheckarray > 0){
foreach ($checkarray as $key_artikel => $value_checksum) {
$pageContents = $this->app->remote->RemoteDeleteArticle($id, $key_artikel);
}
$this->app->Tpl->Set('STATUS', "
Es wurden " . $ccheckarray . " Artikel im Shop gelöscht (fehlende Attribute).
");
}
}
$this->app->Tpl->Add('STATUS',"
Änderungen an $aenderungen Artikel gefunden.
");
$html = $html ."
";
$this->app->Tpl->Set('UPDATES',$html);
}
if($this->app->Secure->GetPOST("schritt3")!="" && $this->app->Secure->GetPOST("schritt1_check")=="1" &&
$this->app->Secure->GetPOST("schritt2_check")=="1")
{
$artikel = $this->app->Secure->GetPOST("artikel");
$this->app->erp->NewEvent("Artikel-Export Online-Shop Nr. $id","onlineshop");
// artikelgruppen update
if($this->app->Secure->GetPOST("cms")=="1") {
$cms = $this->app->DB->Select("SELECT cms FROM shopexport WHERE id='$id' LIMIT 1");
if($cms=='1'){
$this->app->remote->RemoteSendInhalt($id);
}
}
if($this->app->Secure->GetPOST("artikelgruppen")=="1") {
$this->app->remote->RemoteSendArtikelgruppen($id);
$this->app->remote->RemoteSendArtikelArtikelgruppen($id);
}
// sende artikel liste
$tmp_anzahl = $this->app->remote->RemoteSendArticleList($id,$artikel);
// dateien update
//$dateien = $this->app->DB->SelectArr("SELECT DISTINCT ds.datei FROM datei_stichwoerter ds, datei d WHERE d.id=ds.datei AND (ds.subjekt!='Druckbild') AND (ds.objekt='Artikel' OR ds.objekt='Kampangen') AND d.geloescht=0 AND d.firma='".$this->app->User->GetFirma()."'");
// das sind zuviele bilder!!!! nur die bilder vom shop! TODO
//$dateien = $this->app->DB->SelectArr("SELECT DISTINCT ds.datei FROM datei_stichwoerter ds, datei d WHERE d.id=ds.datei AND (ds.subjekt!='Druckbild') AND (ds.objekt='Artikel' OR ds.objekt='Kampangen') AND d.firma='".$this->app->User->GetFirma()."'");
if($this->app->Secure->GetPOST("dateienupdate")==1) {
$dateien = $this->app->DB->SelectArr("SELECT DISTINCT ds.datei FROM datei_stichwoerter ds, datei d, artikel a WHERE d.id=ds.datei AND (ds.subjekt='Shopbild' OR ds.subjekt='Gruppenbild') AND ((ds.objekt='Artikel' AND ds.parameter=a.id) OR (ds.objekt='Kampangen' AND ds.parameter='$id')) AND d.firma='".$this->app->User->GetFirma()."' AND a.shop='$id'");
$tmp = $this->app->remote->RemoteGetFileList($id);
if(is_array($tmp)) {
foreach($tmp as $row) {
$checkarray[$row['datei']] = $row['checksum'];
}
}
$datei_updates = 0;
$cdateien = !empty($dateien)?count($dateien):0;
for($i=0;$i<$cdateien;$i++) {
$fid = $dateien[$i]['datei'];
$geloescht = $this->app->DB->Select("SELECT geloescht FROM datei WHERE id='$fid' LIMIT 1");
if(isset($checkarray) && ($checkarray[$fid]!=md5($this->app->erp->GetDatei($fid))) && $geloescht==0) {
$datei_updates++;
$this->app->remote->RemoteSendFile($id,$fid);
$this->app->remote->RemoteAddFileSubject($id,$fid);
$checkarray[$fid]="update";
}
else {
if($geloescht) {
$this->app->remote->RemoteDeleteFile($id,$fid);
$checkarray[$fid]='delete';
}
}
$checkarray[$fid]='mark';
// wenn datei lokal geloescht loesche diese auch auf dem server
// if($geloescht)
}
}
//print_r($checkarray);
if(is_array($checkarray) && (!empty($checkarray)?count($checkarray):0)>0) {
$delete=0;
foreach($checkarray as $key=>$value) {
if($checkarray[$key]!=='mark' && $checkarray[$key]!=='delete' && $checkarray[$key]!=='update') {
//echo "loesche $key ";
$this->app->remote->RemoteDeleteFile($id,$key);
$delete++;
}
}
}
//ENDE DATEIEN
// loesche nicht gebrauchte dateien
if($datei_updates>0) {
$this->app->Tpl->Set('STATUS',"
");
}
// ende dateien update
$this->app->DB->Insert("INSERT INTO shopexport_status (id, shopexport, bearbeiter,zeit, bemerkung,befehl)
VALUES('','$id','".$this->app->User->GetName()."',NOW(),'','".serialize($artikel)."')");
$this->app->Tpl->Add('STATUS',"
Erfolgreiche Updates an ".$tmp_anzahl." Artikeln durchgeführt.
");
}
$this->app->Tpl->Set('SUBHEADING','Starte Artikel Export');
$this->app->Tpl->Parse('PAGE','shopexport_export.tpl');
}
public function ShopexportArtikeluebertragungdel()
{
$id = (int)$this->app->Secure->GetGET('id');
$shop = (int)$this->app->Secure->GetGET('shop');;
if($id > 0){
$shop = $this->app->DB->Select("SELECT shop FROM shopexport_artikeluebertragen WHERE artikel='$id' AND shop = '$shop' LIMIT 1");
$this->app->DB->Delete("DELETE FROM shopexport_artikeluebertragen WHERE artikel='$id' AND shop = '$shop' LIMIT 1");
$this->app->DB->Delete("DELETE FROM shopexport_artikeluebertragen_check WHERE artikel='$id' AND shop = '$shop' LIMIT 1");
}
$msg = $this->app->erp->base64_url_encode('
Der Artikel wurde aus der Übertragung entfernt.
');
$this->app->Location->execute('index.php?module=shopexport&action=artikeluebertragung&id='.$shop.'&msg='.$msg);
}
public function ShopexportAdressuebertragungdel()
{
$id = (int)$this->app->Secure->GetGET('id');
$shop = 0;
if($id > 0){
$shop = $this->app->DB->Select("SELECT shop FROM shopexport_adressenuebertragen WHERE id='$id' LIMIT 1");
$this->app->DB->Delete("DELETE FROM shopexport_adressenuebertragen WHERE id='$id' LIMIT 1");
}
$msg = $this->app->erp->base64_url_encode('
Die Adresse wurde aus der Übertragung entfernt.
');
$this->app->Location->execute('index.php?module=shopexport&action=adressuebertragung&id='.$shop.'&msg='.$msg);
}
/**
* @param int $shopId
*
* @return array
*/
public function getChangedCount($shopId)
{
$checkedStarted = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_start_'.$shopId);
$checked = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_checked_'.$shopId);
$changed = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_changed_'.$shopId);
$transfered = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_transfered_'.$shopId);
$lastid = (int)$this->app->erp->GetKonfiguration('shopexport_artikeluebertragen_check_lastid_'.$shopId);
return [$checkedStarted, $checked, $changed, $checked - $changed, $transfered, $lastid];
}
/**
* @param int $shopId
*/
public function resetChangedInfo($shopId) {
$this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_start_'.$shopId,'');
$this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_checked_'.$shopId,'');
$this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_changed_'.$shopId,'');
$this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_transfered_'.$shopId,'');
$this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_lastid_'.$shopId,'');
}
/**
* @param int $ids
*/
public function addChangedArticles($minutes = 15)
{
$ids = $this->app->DB->SelectFirstCols(
sprintf(
'SELECT `id`
FROM `shopexport`
WHERE `aktiv` = 1 AND `autosendarticle` = 1 AND `artikelexport` = 1
AND (`autosendarticle_last` IS NULL OR DATE_ADD(`autosendarticle_last`, INTERVAL %d MINUTE) <= NOW())',
$minutes
)
);
if(empty($ids)) {
return;
}
$this->app->DB->Insert(
sprintf(
"INSERT INTO `shopexport_artikeluebertragen_check` (`shop`, `artikel`)
SELECT s.id as shop, a.id
FROM `artikel` AS `a`
INNER JOIN `shopexport` AS `s` ON s.id IN (%s)
LEFT JOIN (
SELECT `artikel`, `shop`
FROM `artikel_onlineshops`
WHERE `shop` IN (%s) AND `aktiv` = 1
GROUP BY `artikel`, `shop`
) AS `oa` ON a.id = oa.artikel AND s.id = oa.shop
LEFT JOIN `shopexport_artikeluebertragen_check` AS `sac` ON a.id = sac.artikel AND sac.shop = s.id
LEFT JOIN `shopexport_artikeluebertragen` AS `sa` ON sa.shop = s.id AND sa.artikel = a.id
WHERE (a.shop=s.id OR a.shop2=s.id OR a.shop3=s.id OR oa.artikel IS NOT NULL)
AND a.geloescht!=1 AND sa.id IS NULL
AND sac.id IS NULL
GROUP BY a.id, s.id",
implode(',', $ids), implode(',', $ids)
)
);
}
/**
* @return RedirectResponse
*/
public function HandleResetArticleCacheForArticleWithZeroStock(): RedirectResponse
{
$anz = 0;
$id = (int)$this->app->Secure->GetGET('id');
if($id > 0) {
$this->app->DB->Update(
"UPDATE `artikel` AS `a`
INNER JOIN
`artikel_onlineshops` AS `oa` ON oa.shop = '$id' AND oa.aktiv = 1 AND a.id = oa.artikel
SET oa.storage_cache = -999, oa.pseudostorage_cache = -999
WHERE (oa.storage_cache = 0 OR oa.storage_cache IS NULL) AND a.geloescht = 0"
);
$anz = $this->app->DB->affected_rows();
$this->app->erp->LogFile("Lagerzahlencache zurückgesetzt für $anz Artikel mit 0-Mengen, shopid: $id");
}
$msg = $this->app->erp->base64_url_encode(
"
Lagerzahlen Cache für ".$anz." Artikel zurückgesetzt.
"
);
return RedirectResponse::createFromUrl("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
}
public function ShopexportArtikeluebertragung()
{
$id = (int)$this->app->Secure->GetGET('id');
$alle = $this->app->Secure->GetPOST('alle');
$allchanged = $this->app->Secure->GetPOST('allchanged');
$bestaetigen = $this->app->Secure->GetPOST('bestaetigen');
$abbrechen = $this->app->Secure->GetPOST('abbrechen');
$artikelladen = $this->app->Secure->GetPOST('artikelladen');
$artikel = $this->app->Secure->GetPOST('artikel');
$kategorie = $this->app->Secure->GetPOST('kategorie');
$unterartikel = $this->app->Secure->GetPOST('unterartikel');
$unterartikelkategorie = $this->app->Secure->GetPOST('unterartikelkategorie');
$kategorieladen = $this->app->Secure->GetPOST('kategorieladen');
$delcache = $this->app->Secure->GetPOST('delcache');
$delzerostockcache = $this->app->Secure->GetPOST('delzerostockcache');
$delArticleCache = $this->app->Secure->GetPOST('delarticlecache');
$artikelexporterlauben = $this->app->Secure->GetPOST('artikelexporterlauben');
if(!empty($artikelexporterlauben)){
$this->app->DB->Update("UPDATE shopexport SET artikelexport=1 WHERE id='$id' LIMIT 1");
}
if(!empty($delzerostockcache)) {
$this->HandleResetArticleCacheForArticleWithZeroStock()->send();
$this->app->ExitXentral();
}
if(!empty($delcache)) {
$anz = 0;
if($id > 0) {
$this->app->DB->Update("UPDATE artikel a
LEFT JOIN (SELECT artikel FROM artikel_onlineshops WHERE shop = '$id' AND aktiv = 1 GROUP BY artikel) oa ON a.id = oa.artikel
SET a.cache_lagerplatzinhaltmenge = -999 WHERE (a.shop = '$id' OR a.shop2 = '$id' OR a.shop3 = '$id' OR NOT ISNULL(oa.artikel)) AND a.geloescht = 0");
$anz = $this->app->DB->affected_rows();
$this->app->erp->LogFile("Lagerzahlencache zurückgesetzt für $anz Artikel, shopid: $id");
}
$msg = $this->app->erp->base64_url_encode("
Lagerzahlen Cache für ".$anz." Artikel zurückgesetzt.
");
$this->app->Location->execute("index.php?module=shopexport&action=artikeluebertragung&id=$id&msg=$msg");
}
if(!empty($allchanged)) {
if(!empty($bestaetigen)) {
if($id > 0){
/*$artikelarr = $this->app->DB->SelectArr("SELECT a.id FROM artikel a
LEFT JOIN (SELECT artikel FROM artikel_onlineshops WHERE shop = '$id' AND aktiv = 1 GROUP BY artikel) oa ON a.id = oa.artikel
WHERE (a.shop='$id' OR a.shop2='$id' OR a.shop3='$id' OR NOT ISNULL(oa.artikel)) AND a.geloescht!=1");
$cartikelarr = !empty($artikelarr) ? count($artikelarr) : 0;
for ($i = 0; $i < $cartikelarr; $i++) {
$this->app->DB->Insert("INSERT INTO shopexport_artikeluebertragen_check (id,shop,artikel) VALUES ('','$id','" . $artikelarr[$i]['id'] . "')");
}
}*/
$this->resetChangedInfo($id);
$this->app->DB->Delete(
sprintf(
'DELETE FROM shopexport_artikeluebertragen_check WHERE shop = %d',
$id
)
);
$this->app->DB->Insert(
sprintf(
"INSERT INTO shopexport_artikeluebertragen_check (shop, artikel)
SELECT '%d' as shop, a.id FROM artikel a
LEFT JOIN (
SELECT artikel FROM artikel_onlineshops WHERE shop = %d AND aktiv = 1 GROUP BY artikel
) oa ON a.id = oa.artikel
LEFT JOIN shopexport_artikeluebertragen AS sa ON sa.shop = %d AND sa.artikel = a.id
WHERE (a.shop=%d OR a.shop2=%d OR a.shop3=%d OR NOT ISNULL(oa.artikel)) AND a.geloescht!=1 AND ISNULL(sa.id)
GROUP BY a.id",
$id, $id, $id, $id, $id, $id
)
);
echo $this->app->DB->error();
$changeStart = $this->app->DB->affected_rows();
$this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_start_'.$id,
$changeStart
);
$this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_checked_'.$id,0);
$this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_check_changed_'.$id,0);
$this->app->erp->SetKonfigurationValue(
'shopexport_artikeluebertragen_check_lastid_'.$id,
mt_rand(1,2000000000)
);
}
$msg = $this->app->erp->base64_url_encode("
Alle Artikel die mit dem Shop verknüpft sind werden überprüft.
');
}
if(!empty($alle)) {
if(!empty($bestaetigen)) {
if($id > 0){
/*$artikelarr = $this->app->DB->SelectArr("SELECT a.id FROM artikel a
LEFT JOIN (SELECT artikel FROM artikel_onlineshops WHERE shop = '$id' AND aktiv = 1 GROUP BY artikel) oa ON a.id = oa.artikel
WHERE (a.shop='$id' OR a.shop2='$id' OR a.shop3='$id' OR NOT ISNULL(oa.artikel)) AND a.geloescht!=1");
$cartikelarr = !empty($artikelarr) ? count($artikelarr) : 0;
for ($i = 0; $i < $cartikelarr; $i++) {
$this->app->DB->Insert("INSERT INTO shopexport_artikeluebertragen (id,shop,artikel) VALUES ('','$id','" . $artikelarr[$i]['id'] . "')");
}
*/
$this->resetChangedInfo($id);
$this->app->DB->Insert(
sprintf(
"INSERT INTO shopexport_artikeluebertragen (shop, artikel)
SELECT '%d' AS shop, a.id FROM artikel a
LEFT JOIN (
SELECT artikel FROM artikel_onlineshops WHERE shop = %d AND aktiv = 1 GROUP BY artikel
) AS oa ON a.id = oa.artikel
WHERE (a.shop=%d OR a.shop2=%d OR a.shop3=%d OR NOT ISNULL(oa.artikel)) AND a.geloescht!=1",
$id,$id, $id, $id, $id
)
);
$this->app->erp->SetKonfigurationValue('shopexport_artikeluebertragen_start_'.$id,
$this->app->DB->affected_rows()
);
}
$msg = $this->app->erp->base64_url_encode("
Alle Artikel die mit dem Shop verknüpft sind werden übertragen.
');
}
if(!empty($abbrechen)) {
$this->app->DB->Delete("DELETE FROM shopexport_artikeluebertragen WHERE shop='$id'");
$this->app->DB->Delete("DELETE FROM shopexport_artikeluebertragen_check WHERE shop='$id'");
$this->resetChangedInfo($id);
//$this->app->erp-> 'shopexport_artikeluebertragen_check_start_'.$id
$msg = $this->app->erp->base64_url_encode('
Alle aktuellen Artikel wurden aus der Übertragung entfernt.
');
$this->app->Location->execute('index.php?module=shopexport&action=artikeluebertragung&id='.$id.'&msg='.$msg);
}
if($kategorieladen != '') {
if(!empty($bestaetigen)) {
$typ = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung!='' AND bezeichnung='$kategorie' LIMIT 1");
if($typ) {
$typ .= '_kat';
}
else{
$typ = $kategorie;
}
if((String)$typ !== '') {
$this->app->DB->Query("INSERT INTO shopexport_artikeluebertragen (artikel, shop) SELECT id as artikel ,'$id' as shop FROM artikel WHERE (geloescht = 0 OR isnull(geloescht)) AND nummer <> 'DEL' AND nummer <> '' AND typ = '$typ'");
$anz = (int)$this->app->DB->affected_rows();
//$artikelarr = $this->app->DB->SelectArr("SELECT id FROM artikel WHERE (geloescht = 0 OR isnull(geloescht)) AND nummer <> 'DEL' AND nummer <> '' AND typ = '$typ'");
if($anz > 0) {
$msg = $this->app->erp->base64_url_encode("
Die Artikelkategorie wurde der Übertragung hinzugefügt ($anz Artikel).
');
}
if($artikelladen!='') {
if(!empty($bestaetigen)) {
$artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer!='' AND nummer='$artikel' AND (geloescht = 0 OR isnull(geloescht)) AND nummer <> 'DEL' LIMIT 1");
if($artikelid > 0 && $id > 0)
{
$this->app->DB->Insert("INSERT INTO shopexport_artikeluebertragen (id,shop,artikel) VALUES ('','$id','$artikelid')");
$msg = $this->app->erp->base64_url_encode("
' .$checked.' von '.$start.
' Artikel wurden überprüft. '.(!empty($transfered)?$transfered:$changed).' veränderte Artikel wurden gefunden und an den Shop übertragen.
');
}
else{
$this->app->Tpl->Add(
'MESSAGE',
'
' .$checked.' von '.$start.' Artikel wurden überprüft. '.$changed.
' veränderte Artikel wurden gefunden und '.$transfered.' davon an den Shop übertragen.
');
}
if(!empty($abbrechen)) {
$this->app->DB->Delete("DELETE FROM shopexport_adressenuebertragen WHERE shop='$id'");
$msg = $this->app->erp->base64_url_encode('
Alle Adressen wurden aus der Übertragung entfernt.
');
$this->app->Location->execute('index.php?module=shopexport&action=adressuebertragung&id='.$id.'&msg='.$msg);
}
if($gruppeladen!='') {
if(!empty($bestaetigen) && $gruppe!='') {
$gruppetmp = explode(' ', $gruppe);
$gruppenid = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer='".$gruppetmp[0]."' LIMIT 1");
if($gruppenid > 0 && $id > 0)
{
$this->app->DB->Insert("INSERT INTO shopexport_adressenuebertragen (shop,adresse) SELECT $id, a.id FROM adresse a JOIN adresse_rolle ar ON a.id = ar.adresse WHERE ar.subjekt='Mitglied' AND ar.objekt='Gruppe' AND ar.parameter='$gruppenid' AND a.geloescht <> 1 AND a.kundennummer <> '' AND a.id NOT IN (SELECT adresse FROM shopexport_adressenuebertragen WHERE shop = $id)");
$msg = $this->app->erp->base64_url_encode("