diff --git a/www/lib/class.remote.php b/www/lib/class.remote.php index 937ae7a7..e87eb432 100644 --- a/www/lib/class.remote.php +++ b/www/lib/class.remote.php @@ -1,4 +1,5 @@ app=$app; - } +class Remote { - /** - * @param int $shopId - * @param null|bool $extra - * - * @return mixed - * @throws Exception - */ - public function RemoteConnection($shopId, $extra = null) - { - $ret = $this->RemoteCommand($shopId,'auth', $extra); - if($ret !== 'success' && empty($extra) && method_exists($this->app->erp, 'setSystemHealth')) { - $this->app->erp->setSystemHealth( - 'shopexport', - 'auth', - 'warning', - 'Verbindung zu '. - $this->app->DB->Select( - sprintf( - 'SELECT bezeichnung FROM shopexport WHERE id = %d', - $shopId - ) - ).' fehlgeschlagen.' - ); - try { - /** @var Systemhealth $systemhealth */ - $systemhealth = $this->app->erp->LoadModul('systemhealth'); - if($systemhealth !== null && method_exists($systemhealth, 'createEvent')){ - $systemhealth->createEvent('shopexport', 'auth', 'warning', 'shopexport', $shopId); + /** @var ApplicationCore $app */ + public $app; + + public function __construct($app) { + $this->app = $app; + } + + /** + * @param int $shopId + * @param null|bool $extra + * + * @return mixed + * @throws Exception + */ + public function RemoteConnection($shopId, $extra = null) { + $ret = $this->RemoteCommand($shopId, 'auth', $extra); + if ($ret !== 'success' && empty($extra) && method_exists($this->app->erp, 'setSystemHealth')) { + $this->app->erp->setSystemHealth( + 'shopexport', + 'auth', + 'warning', + 'Verbindung zu ' . + $this->app->DB->Select( + sprintf( + 'SELECT bezeichnung FROM shopexport WHERE id = %d', + $shopId + ) + ) . ' fehlgeschlagen.' + ); + try { + /** @var Systemhealth $systemhealth */ + $systemhealth = $this->app->erp->LoadModul('systemhealth'); + if ($systemhealth !== null && method_exists($systemhealth, 'createEvent')) { + $systemhealth->createEvent('shopexport', 'auth', 'warning', 'shopexport', $shopId); + } + } catch (Exception $d) { + + } } - } - catch (Exception $d) { - - } - } - return $ret; - } - - /** - * @param int $shopId - * - * @return mixed - * @throws Exception - */ - public function RemoteGetUpdateArticleList($shopId) - { - return $this->RemoteCommand($shopId,'getlist'); - } - - /** - * @param int $shopId - * - * @return mixed - * @throws Exception - */ - public function RemoteGetFileList($shopId) - { - return $this->RemoteCommand($shopId,'getfilelist'); - } - - /** - * @param int $shopId - * @param int|string $articleId - * - * @return mixed - * @throws Exception - */ - public function RemoteGetFileListArticle($shopId, $article) - { - $data['artikel'] = $article; - - return $this->RemoteCommand($shopId,'getfilelistarticle', $data); - } - - /** - * @param int $shopId - * @param array|string $data - * - * @return mixed|string - * @throws Exception - */ - public function RemoteGetAuftraegeAnzahl($shopId,$data = '') - { - if(!empty($data)) - { - return $this->RemoteCommand($shopId,'getauftraegeanzahl', $data); - } - $data = array(); - $shopexportArr = $this->app->DB->SelectRow(sprintf('SELECT * FROM shopexport WHERE id = %d LIMIT 1', $shopId)); - $holealle = $shopexportArr['holealle']; - $holeallestati = $shopexportArr['holeallestati']; - $zeitraum = [ - 'datumvon'=>$shopexportArr['datumvon'], - 'datumbis'=>$shopexportArr['datumbis'], - 'tmpdatumvon'=>$shopexportArr['tmpdatumvon'], - 'tmpdatumbis'=>$shopexportArr['tmpdatumbis'], - 'anzgleichzeitig'=>$shopexportArr['anzgleichzeitig'], - ]; - if(!empty($zeitraum)) - { - $data['datumvon'] = $zeitraum['datumvon']; - $data['datumbis'] = $zeitraum['datumbis']; - //if(strtotime($zeitraum[0]['tmpdatumbis']) > 0)$data['datumbis'] = $zeitraum[0]['tmpdatumbis']; - //if(strtotime($zeitraum[0]['tmpdatumvon']) > 0)$data['datumvon'] = $zeitraum[0]['tmpdatumbis']; - if($data['datumvon'] === null || $data['datumvon'] === '0000-00-00 00:00:00'|| strtotime($data['datumvon'])<=0) { - $data['datumvon'] = '2000-01-01 00:00:00'; - } - if($data['datumbis'] === null || $data['datumbis'] === '0000-00-00 00:00:00'|| strtotime($data['datumbis'])<=0) { - $data['datumbis'] = date('Y-m-d H:i:s'); - $data['datumbis_utc'] = $this->app->DB->Select('select date_sub(UTC_TIMESTAMP, INTERVAL 0 MINUTE)'); - } - $data['anzgleichzeitig'] = $zeitraum[0]['anzgleichzeitig']; - if($holeallestati && $data['anzgleichzeitig'] > 1) - { - $data['holeallestati'] = 1; - } - } - if($holealle) - { - $ab_nummer = $shopexportArr['ab_nummer']; - $data = array('ab_nummer' => $ab_nummer); - if($holeallestati) - { - $data['holeallestati'] = 1; - } - - return $this->RemoteCommand($shopId,'getauftraegeanzahl', $data); + return $ret; } - return $this->RemoteCommand($shopId,'getauftraegeanzahl'); - } - - /** - * @param int $shopId - * @param string $nummer - * - * @return mixed|string - * @throws Exception - */ - public function RemoteGetAuftraegeAnzahlNummer($shopId, $nummer) - { - $data = array('nummer' => $nummer); - - return $this->RemoteCommand($shopId,'getauftraegeanzahl', $data); - } - - /** - * @param int $shopId - * @param null|array $data - * - * @return mixed|string - * @throws Exception - */ - public function RemoteGetAuftrag($shopId, $data = null) - { - if(!empty($data)) { - return $this->RemoteCommand($shopId,'getauftrag', $data); - } - $data = array(); - - $shopexportArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM shopexport WHERE id = %d LIMIT 1', - $shopId - ) - ); - $holealle = $shopexportArr['holealle']; - $holeallestati = $shopexportArr['holeallestati']; - $zeitraum = [ - 'datumvon'=>$shopexportArr['datumvon'], - 'datumbis'=>$shopexportArr['datumbis'], - 'tmpdatumvon'=>$shopexportArr['tmpdatumvon'], - 'tmpdatumbis'=>$shopexportArr['tmpdatumbis'], - 'anzgleichzeitig'=>$shopexportArr['anzgleichzeitig'], - ]; - if(!empty($zeitraum)) { - $data['datumvon'] = $zeitraum['datumvon']; - $data['datumbis'] = $zeitraum['datumbis']; - if($zeitraum['tmpdatumbis'] !== null && $zeitraum['tmpdatumbis'] !== '0000-00-00 00:00:00' && - strtotime($zeitraum['tmpdatumbis']) > 0) { - $data['datumbis'] = $zeitraum['tmpdatumbis']; - } - //if(strtotime($zeitraum[0]['tmpdatumvon']) > 0)$data['datumvon'] = $zeitraum[0]['tmpdatumbis']; - if($data['datumvon'] === null || $data['datumvon'] === '0000-00-00 00:00:00' || strtotime($data['datumvon'])<=0) { - $data['datumvon'] = '2000-01-01 00:00:00'; - } - if($data['datumbis'] === null || $data['datumbis'] === '0000-00-00 00:00:00' || strtotime($data['datumbis'])<=0) { - $data['datumbis'] = date('Y-m-d H:i:s'); - $data['datumbis_utc'] = $this->app->DB->Select('select date_sub(UTC_TIMESTAMP, INTERVAL 0 MINUTE)'); - } - $data['anzgleichzeitig'] = $zeitraum['anzgleichzeitig']; - if($data['anzgleichzeitig'] > 1 && $shopexportArr['einzelsync']) { - $data['anzgleichzeitig'] = 1; - } - if($holeallestati) { - $data['holeallestati'] = 1; - } - } - if($holealle) { - $ab_nummer = $shopexportArr['ab_nummer']; - $data['ab_nummer'] = $ab_nummer; - if($holeallestati) { - $data['holeallestati'] = 1; - } - - return $this->RemoteCommand($shopId,'getauftrag', $data); - } - if(!empty($zeitraum)) { - return $this->RemoteCommand($shopId,'getauftrag', $data); - } - - return $this->RemoteCommand($shopId,'getauftrag'); - } - - /** - * @param int $shopId - * @param string $nummer - * - * @return mixed|string - * @throws Exception - */ - public function RemoteGetAuftragNummer($shopId, $nummer) - { - $holealle = $this->app->DB->Select("SELECT holealle FROM shopexport WHERE id = '$shopId' LIMIT 1"); - if($holealle) - { - $data = array('nummer' => $nummer); - - return $this->RemoteCommand($shopId,'getauftrag', $data); + /** + * @param int $shopId + * + * @return mixed + * @throws Exception + */ + public function RemoteGetUpdateArticleList($shopId) { + return $this->RemoteCommand($shopId, 'getlist'); } - return ''; - } + /** + * @param int $shopId + * + * @return mixed + * @throws Exception + */ + public function RemoteGetFileList($shopId) { + return $this->RemoteCommand($shopId, 'getfilelist'); + } - /** - * @param int $shopId - * - * @return mixed - * @throws Exception - */ - public function RemoteSendExportlink($shopId) - { - // passwort erzeugen , daten verschluesseln, wenn passwort neu link an kunden senden - // alternativ artikel umfrage - // $all = $this->app->DB->SelectArr("SELECT * FROM artikelgruppen WHERE shop='$id'"); + /** + * @param int $shopId + * @param int|string $articleId + * + * @return mixed + * @throws Exception + */ + public function RemoteGetFileListArticle($shopId, $article) { + $data['artikel'] = $article; - // alle artikelid = 38 die in einem auftrag sind + return $this->RemoteCommand($shopId, 'getfilelistarticle', $data); + } + /** + * @param int $shopId + * @param array|string $data + * + * @return mixed|string + * @throws Exception + */ + public function RemoteGetAuftraegeAnzahl($shopId, $data = '') { + if (!empty($data)) { + return $this->RemoteCommand($shopId, 'getauftraegeanzahl', $data); + } + $data = array(); + $shopexportArr = $this->app->DB->SelectRow(sprintf('SELECT * FROM shopexport WHERE id = %d LIMIT 1', $shopId)); + $holealle = $shopexportArr['holealle']; + $holeallestati = $shopexportArr['holeallestati']; + $zeitraum = [ + 'datumvon' => $shopexportArr['datumvon'], + 'datumbis' => $shopexportArr['datumbis'], + 'tmpdatumvon' => $shopexportArr['tmpdatumvon'], + 'tmpdatumbis' => $shopexportArr['tmpdatumbis'], + 'anzgleichzeitig' => $shopexportArr['anzgleichzeitig'], + ]; + if (!empty($zeitraum)) { + $data['datumvon'] = $zeitraum['datumvon']; + $data['datumbis'] = $zeitraum['datumbis']; + //if(strtotime($zeitraum[0]['tmpdatumbis']) > 0)$data['datumbis'] = $zeitraum[0]['tmpdatumbis']; + //if(strtotime($zeitraum[0]['tmpdatumvon']) > 0)$data['datumvon'] = $zeitraum[0]['tmpdatumbis']; + if ($data['datumvon'] === null || $data['datumvon'] === '0000-00-00 00:00:00' || strtotime($data['datumvon']) <= 0) { + $data['datumvon'] = '2000-01-01 00:00:00'; + } + if ($data['datumbis'] === null || $data['datumbis'] === '0000-00-00 00:00:00' || strtotime($data['datumbis']) <= 0) { + $data['datumbis'] = date('Y-m-d H:i:s'); + $data['datumbis_utc'] = $this->app->DB->Select('select date_sub(UTC_TIMESTAMP, INTERVAL 0 MINUTE)'); + } + $data['anzgleichzeitig'] = $zeitraum[0]['anzgleichzeitig']; + if ($holeallestati && $data['anzgleichzeitig'] > 1) { + $data['holeallestati'] = 1; + } + } + if ($holealle) { + $ab_nummer = $shopexportArr['ab_nummer']; + $data = array('ab_nummer' => $ab_nummer); + if ($holeallestati) { + $data['holeallestati'] = 1; + } - // usb90key - $artikelid= 38; + return $this->RemoteCommand($shopId, 'getauftraegeanzahl', $data); + } - $all = $this->app->DB->SelectArr("SELECT a.id as auftrag, a.adresse as adresse + return $this->RemoteCommand($shopId, 'getauftraegeanzahl'); + } + + /** + * @param int $shopId + * @param string $nummer + * + * @return mixed|string + * @throws Exception + */ + public function RemoteGetAuftraegeAnzahlNummer($shopId, $nummer) { + $data = array('nummer' => $nummer); + + return $this->RemoteCommand($shopId, 'getauftraegeanzahl', $data); + } + + /** + * @param int $shopId + * @param null|array $data + * + * @return mixed|string + * @throws Exception + */ + public function RemoteGetAuftrag($shopId, $data = null) { + if (!empty($data)) { + return $this->RemoteCommand($shopId, 'getauftrag', $data); + } + $data = array(); + + $shopexportArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM shopexport WHERE id = %d LIMIT 1', + $shopId + ) + ); + $holealle = $shopexportArr['holealle']; + $holeallestati = $shopexportArr['holeallestati']; + $zeitraum = [ + 'datumvon' => $shopexportArr['datumvon'], + 'datumbis' => $shopexportArr['datumbis'], + 'tmpdatumvon' => $shopexportArr['tmpdatumvon'], + 'tmpdatumbis' => $shopexportArr['tmpdatumbis'], + 'anzgleichzeitig' => $shopexportArr['anzgleichzeitig'], + ]; + if (!empty($zeitraum)) { + $data['datumvon'] = $zeitraum['datumvon']; + $data['datumbis'] = $zeitraum['datumbis']; + if ($zeitraum['tmpdatumbis'] !== null && $zeitraum['tmpdatumbis'] !== '0000-00-00 00:00:00' && + strtotime($zeitraum['tmpdatumbis']) > 0) { + $data['datumbis'] = $zeitraum['tmpdatumbis']; + } + //if(strtotime($zeitraum[0]['tmpdatumvon']) > 0)$data['datumvon'] = $zeitraum[0]['tmpdatumbis']; + if ($data['datumvon'] === null || $data['datumvon'] === '0000-00-00 00:00:00' || strtotime($data['datumvon']) <= 0) { + $data['datumvon'] = '2000-01-01 00:00:00'; + } + if ($data['datumbis'] === null || $data['datumbis'] === '0000-00-00 00:00:00' || strtotime($data['datumbis']) <= 0) { + $data['datumbis'] = date('Y-m-d H:i:s'); + $data['datumbis_utc'] = $this->app->DB->Select('select date_sub(UTC_TIMESTAMP, INTERVAL 0 MINUTE)'); + } + $data['anzgleichzeitig'] = $zeitraum['anzgleichzeitig']; + if ($data['anzgleichzeitig'] > 1 && $shopexportArr['einzelsync']) { + $data['anzgleichzeitig'] = 1; + } + if ($holeallestati) { + $data['holeallestati'] = 1; + } + } + if ($holealle) { + $ab_nummer = $shopexportArr['ab_nummer']; + $data['ab_nummer'] = $ab_nummer; + if ($holeallestati) { + $data['holeallestati'] = 1; + } + + return $this->RemoteCommand($shopId, 'getauftrag', $data); + } + if (!empty($zeitraum)) { + return $this->RemoteCommand($shopId, 'getauftrag', $data); + } + + return $this->RemoteCommand($shopId, 'getauftrag'); + } + + /** + * @param int $shopId + * @param string $nummer + * + * @return mixed|string + * @throws Exception + */ + public function RemoteGetAuftragNummer($shopId, $nummer) { + $holealle = $this->app->DB->Select("SELECT holealle FROM shopexport WHERE id = '$shopId' LIMIT 1"); + if ($holealle) { + $data = array('nummer' => $nummer); + + return $this->RemoteCommand($shopId, 'getauftrag', $data); + } + + return ''; + } + + /** + * @param int $shopId + * + * @return mixed + * @throws Exception + */ + public function RemoteSendExportlink($shopId) { + // passwort erzeugen , daten verschluesseln, wenn passwort neu link an kunden senden + // alternativ artikel umfrage + // $all = $this->app->DB->SelectArr("SELECT * FROM artikelgruppen WHERE shop='$id'"); + // alle artikelid = 38 die in einem auftrag sind + // usb90key + $artikelid = 38; + + $all = $this->app->DB->SelectArr("SELECT a.id as auftrag, a.adresse as adresse FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$artikelid' AND ap.geliefert_menge < ap.menge AND a.status!='storniert' AND a.status!='abgeschlossen'"); - // mail mit url senden - if(empty($all)) { - return ''; - } - $loop = 0; - $call = (!empty($all)?count($all):0); - for($i=0;$i<$call;$i++) - { - $auftragid = $all[$i]['auftrag']; - $adresse = $all[$i]['adresse']; + // mail mit url senden + if (empty($all)) { + return ''; + } + $loop = 0; + $call = (!empty($all) ? count($all) : 0); + for ($i = 0; $i < $call; $i++) { + $auftragid = $all[$i]['auftrag']; + $adresse = $all[$i]['adresse']; - $grund = 'artikel'; + $grund = 'artikel'; - $check = $this->app->DB->Select("SELECT reg FROM exportlink_sent WHERE adresse='$adresse' AND objekt='$artikelid' AND ident='$auftragid' LIMIT 1"); + $check = $this->app->DB->Select("SELECT reg FROM exportlink_sent WHERE adresse='$adresse' AND objekt='$artikelid' AND ident='$auftragid' LIMIT 1"); - if($check=='') - { - $checkreg = 1; - while($checkreg!='') - { - $token1 = md5(uniqid(rand(), true)); - $token2 = md5(uniqid(rand(), true)); + if ($check == '') { + $checkreg = 1; + while ($checkreg != '') { + $token1 = md5(uniqid(rand(), true)); + $token2 = md5(uniqid(rand(), true)); - $token3 = md5(uniqid(rand(), true)); - $token4 = md5(uniqid(rand(), true)); + $token3 = md5(uniqid(rand(), true)); + $token4 = md5(uniqid(rand(), true)); - $zufall = $token1 . '-' . $token2; - $zufall = md5($zufall); + $zufall = $token1 . '-' . $token2; + $zufall = md5($zufall); - $zufall2 = $token3 . '-' . $token4; - $zufall2 = md5($zufall2); + $zufall2 = $token3 . '-' . $token4; + $zufall2 = md5($zufall2); - $reg = md5($zufall2.$zufall); + $reg = md5($zufall2 . $zufall); - $checkreg = $this->app->DB->Select("SELECT reg FROM exportlink_sent WHERE reg='$reg' LIMIT 1"); + $checkreg = $this->app->DB->Select("SELECT reg FROM exportlink_sent WHERE reg='$reg' LIMIT 1"); + } + + // pruefen ob es zahl schon gibt sonst nochmal + + $data[$loop]['reg'] = $reg; + $data[$loop]['grund'] = $grund; + $data[$loop]['objekt'] = $artikelid; // artikel id + $data[$loop]['ident'] = $auftragid; // + $loop++; + + $this->app->DB->Insert("INSERT INTO exportlink_sent (reg,grund,objekt,ident,adresse,datum) VALUES ($reg','$grund','$artikelid','$auftragid','$adresse',NOW())"); + } } - // pruefen ob es zahl schon gibt sonst nochmal - - $data[$loop]['reg'] = $reg; - $data[$loop]['grund'] = $grund; - $data[$loop]['objekt'] = $artikelid; // artikel id - $data[$loop]['ident'] = $auftragid;// - $loop++; - - $this->app->DB->Insert("INSERT INTO exportlink_sent (reg,grund,objekt,ident,adresse,datum) VALUES ($reg','$grund','$artikelid','$auftragid','$adresse',NOW())"); - } + return $this->RemoteCommand($shopId, 'exportlink', $data); } - return $this->RemoteCommand($shopId,'exportlink',$data); - } + /** + * @param int $shopId + * + * @return mixed + * @throws Exception + */ + public function RemoteSendNavigation($shopId) { + //$data[0] = array('aasas','asddd'); - /** - * @param int $shopId - * - * @return mixed - * @throws Exception - */ - public function RemoteSendNavigation($shopId) - { - //$data[0] = array('aasas','asddd'); + $all = $this->app->DB->SelectArr("SELECT * FROM shopnavigation WHERE shop='$shopId'"); + $call = $all ? count($all) : 0; + $data = $call > 0 ? array() : null; + for ($i = 0; $i < $call; $i++) { + $data[$i]['id'] = $all[$i]['id']; + $data[$i]['bezeichnung'] = $all[$i]['bezeichnung']; + $data[$i]['position'] = $all[$i]['position']; + $data[$i]['parent'] = $all[$i]['parent']; + $data[$i]['bezeichnung_en'] = $all[$i]['bezeichnung_en']; + $data[$i]['plugin'] = $all[$i]['plugin']; + $data[$i]['pluginparameter'] = $all[$i]['pluginparameter']; + $data[$i]['target'] = $all[$i]['target']; + } - $all = $this->app->DB->SelectArr("SELECT * FROM shopnavigation WHERE shop='$shopId'"); - $call = $all?count($all):0; - $data = $call > 0?array():null; - for($i=0;$i<$call;$i++) - { - $data[$i]['id'] = $all[$i]['id']; - $data[$i]['bezeichnung'] = $all[$i]['bezeichnung']; - $data[$i]['position'] = $all[$i]['position']; - $data[$i]['parent'] = $all[$i]['parent']; - $data[$i]['bezeichnung_en'] = $all[$i]['bezeichnung_en']; - $data[$i]['plugin'] = $all[$i]['plugin']; - $data[$i]['pluginparameter'] = $all[$i]['pluginparameter']; - $data[$i]['target'] = $all[$i]['target']; + return $this->RemoteCommand($shopId, 'navigation', $data); } - return $this->RemoteCommand($shopId,'navigation',$data); - } - - /** - * @param int $shopId - * - * @return mixed|string - * @throws Exception - */ - public function RemoteSendArtikelgruppen($shopId) - { - $all = $this->app->DB->SelectArr("SELECT id, bezeichnung,bezeichnung_en,beschreibung_de,beschreibung_en + /** + * @param int $shopId + * + * @return mixed|string + * @throws Exception + */ + public function RemoteSendArtikelgruppen($shopId) { + $all = $this->app->DB->SelectArr("SELECT id, bezeichnung,bezeichnung_en,beschreibung_de,beschreibung_en FROM artikelgruppen WHERE shop='$shopId'"); - if(empty($all)) { - return ''; + if (empty($all)) { + return ''; + } + + return $this->RemoteCommand($shopId, 'artikelgruppen', $all); } - return $this->RemoteCommand($shopId,'artikelgruppen',$all); - } + /** + * @param int $shopId + * + * @return mixed + * @throws Exception + */ + public function RemoteSendInhalt($shopId) { + $all = $this->app->DB->SelectArr("SELECT * FROM inhalt WHERE shop='$shopId' AND aktiv=1"); + if (empty($all)) { + return ''; + } + $call = (!empty($all) ? count($all) : 0); - /** - * @param int $shopId - * - * @return mixed - * @throws Exception - */ - public function RemoteSendInhalt($shopId) - { - $all = $this->app->DB->SelectArr("SELECT * FROM inhalt WHERE shop='$shopId' AND aktiv=1"); - if(empty($all)) { - return ''; - } - $call = (!empty($all)?count($all):0); + $data = array(); + for ($i = 0; $i < $call; $i++) { + $data[$i]['sprache'] = $all[$i]['sprache']; + $data[$i]['inhalt'] = $all[$i]['inhalt']; + $data[$i]['kurztext'] = $all[$i]['kurztext']; + $data[$i]['html'] = $all[$i]['html']; + $data[$i]['title'] = $all[$i]['title']; + $data[$i]['description'] = $all[$i]['description']; + $data[$i]['keywords'] = $all[$i]['keywords']; + $data[$i]['inhaltstyp'] = $all[$i]['inhaltstyp']; + $data[$i]['template'] = $all[$i]['template']; + $data[$i]['finalparse'] = $all[$i]['finalparse']; + $data[$i]['navigation'] = $all[$i]['navigation']; + $data[$i]['sichtbarbis'] = $all[$i]['sichtbarbis']; + $data[$i]['datum'] = $all[$i]['datum']; + $data[$i]['aktiv'] = $all[$i]['aktiv']; + } - $data = array(); - for ($i = 0; $i < $call; $i++) { - $data[$i]['sprache'] = $all[$i]['sprache']; - $data[$i]['inhalt'] = $all[$i]['inhalt']; - $data[$i]['kurztext'] = $all[$i]['kurztext']; - $data[$i]['html'] = $all[$i]['html']; - $data[$i]['title'] = $all[$i]['title']; - $data[$i]['description'] = $all[$i]['description']; - $data[$i]['keywords'] = $all[$i]['keywords']; - $data[$i]['inhaltstyp'] = $all[$i]['inhaltstyp']; - $data[$i]['template'] = $all[$i]['template']; - $data[$i]['finalparse'] = $all[$i]['finalparse']; - $data[$i]['navigation'] = $all[$i]['navigation']; - $data[$i]['sichtbarbis'] = $all[$i]['sichtbarbis']; - $data[$i]['datum'] = $all[$i]['datum']; - $data[$i]['aktiv'] = $all[$i]['aktiv']; + return $this->RemoteCommand($shopId, 'inhalt', $data); } - return $this->RemoteCommand($shopId, 'inhalt', $data); - } + /** + * @param int $shopId + * + * @return mixed + * @throws Exception + */ + public function RemoteSendArtikelArtikelgruppen($shopId) { + $all = $this->app->DB->SelectArr('SELECT * FROM artikel_artikelgruppe'); + $call = $all ? count($all) : 0; + if ($call > 0) { + $data = array(); + for ($i = 0; $i < $call; $i++) { + $data[$i]['id'] = $all[$i]['id']; + $data[$i]['artikel'] = $all[$i]['artikel']; + $data[$i]['artikelgruppe'] = $all[$i]['artikelgruppe']; + $data[$i]['position'] = $all[$i]['position']; + } - /** - * @param int $shopId - * - * @return mixed - * @throws Exception - */ - public function RemoteSendArtikelArtikelgruppen($shopId) - { - $all = $this->app->DB->SelectArr('SELECT * FROM artikel_artikelgruppe'); - $call = $all?count($all):0; - if($call > 0){ - $data = array(); - for ($i = 0; $i < $call; $i++) { - $data[$i]['id'] = $all[$i]['id']; - $data[$i]['artikel'] = $all[$i]['artikel']; - $data[$i]['artikelgruppe'] = $all[$i]['artikelgruppe']; - $data[$i]['position'] = $all[$i]['position']; - } + return $this->RemoteCommand($shopId, 'artikelartikelgruppen', $data); + } - return $this->RemoteCommand($shopId, 'artikelartikelgruppen', $data); + return ''; } - return ''; - } - - /** - * @param int $shopId - * @param string $tabelle - * @param int $intid - * @param int $intid2 - * - * @return mixed - */ - public function GetShopexportMappingExt($shopId, $tabelle, $intid, $intid2 = 0) - { - return $this->app->DB->Select("SELECT extid + /** + * @param int $shopId + * @param string $tabelle + * @param int $intid + * @param int $intid2 + * + * @return mixed + */ + public function GetShopexportMappingExt($shopId, $tabelle, $intid, $intid2 = 0) { + return $this->app->DB->Select("SELECT extid FROM shopexport_mapping - WHERE shop = '$shopId' AND tabelle = '$tabelle' AND intid = '$intid' ".($intid2?" AND intid2 = '$intid2' ":'')." LIMIT 1"); - } + WHERE shop = '$shopId' AND tabelle = '$tabelle' AND intid = '$intid' " . ($intid2 ? " AND intid2 = '$intid2' " : '') . " LIMIT 1"); + } - /** - * @param int $shopId - * @param string $tabelle - * @param string $extid - * @param int $intid2 - * - * @return mixed - */ - protected function GetShopexportMappingInt($shopId, $tabelle, $extid, $intid2 = 0) - { - return $this->app->DB->Select("SELECT intid + /** + * @param int $shopId + * @param string $tabelle + * @param string $extid + * @param int $intid2 + * + * @return mixed + */ + protected function GetShopexportMappingInt($shopId, $tabelle, $extid, $intid2 = 0) { + return $this->app->DB->Select("SELECT intid FROM shopexport_mapping - WHERE shop = '$shopId' AND tabelle = '$tabelle' AND extid = '$extid' ".($intid2?" AND intid2 = '$intid2' ":'')." + WHERE shop = '$shopId' AND tabelle = '$tabelle' AND extid = '$extid' " . ($intid2 ? " AND intid2 = '$intid2' " : '') . " LIMIT 1"); - } + } - /** - * @param int $shop - * @param string $tabelle - * @param int $intid - * @param string $extid - * @param int $intid2 - * - * @return mixed - */ - public function ShopexportMappingSet($shop, $tabelle, $intid, $extid, $intid2 = 0) - { - $check = $this->app->DB->Select("SELECT id FROM shopexport_mapping + /** + * @param int $shop + * @param string $tabelle + * @param int $intid + * @param string $extid + * @param int $intid2 + * + * @return mixed + */ + public function ShopexportMappingSet($shop, $tabelle, $intid, $extid, $intid2 = 0) { + $check = $this->app->DB->Select("SELECT id FROM shopexport_mapping WHERE shop = '$shop' AND tabelle = '$tabelle' AND intid = '$intid' AND intid2 = '$intid2' LIMIT 1"); - if(!$check) - { - $this->app->DB->Insert("INSERT INTO shopexport_mapping (shop, tabelle, intid, intid2, extid, zeitstempel) + if (!$check) { + $this->app->DB->Insert("INSERT INTO shopexport_mapping (shop, tabelle, intid, intid2, extid, zeitstempel) VALUES ('$shop', '$tabelle', '$intid', '$intid2', '$extid', now())"); - return $this->app->DB->GetInsertID(); - } - $this->app->DB->Update("UPDATE shopexport_mapping SET extid = '$extid' WHERE id = '$check' LIMIT 1"); + return $this->app->DB->GetInsertID(); + } + $this->app->DB->Update("UPDATE shopexport_mapping SET extid = '$extid' WHERE id = '$check' LIMIT 1"); - return $check; - } + return $check; + } - /** - * @param int $id - * @param string $nummer - * @param bool $create - * - * @return mixed - * @throws Exception - */ - public function RemoteGetArticle($id,$nummer, $create = false) - { - if($create) - { - $data['nummerintern'] = $nummer; - }else { - $data['nummer'] = $nummer; - } - $ret = $this->RemoteCommand($id,'getarticle',$data); - $variante_von = null; - //if(!$create)return $ret; - $_nummer = null; - $shopexportArr = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id = '$id' LIMIT 1"); - $projekt = $shopexportArr['projekt']; - $nurneueartikel = $shopexportArr['nurneueartikel']; - $artikelnummerbeimanlegenausshop = $shopexportArr['artikelnummerbeimanlegenausshop']; - if(!$create){ - $nurneueartikel = false; - } - if(!isset($ret['nummer']) && isset($ret[0]) && isset($ret[0]['nummer'])) - { - $reta = $ret; - }elseif(isset($ret['nummer'])) - { - $reta[] = $ret; - }elseif(isset($ret[0]) && isset($ret[0]['name'])){ - $ret[0]['nummer'] = '';//$nummer; - $reta = $ret; - }elseif(isset($ret['name'])){ - $ret['nummer'] = '';//$nummer; - $reta[] = $ret; - }else - { - return $ret; - } - if(!$reta || !is_array($reta)) - { - return $ret; - } - $stuecklistenmechanik = false; - $variantevonorig = null; - $steuersatz_normal = $this->app->erp->Firmendaten('steuersatz_normal'); - $steuersatz_ermaessigt = $this->app->erp->Firmendaten('steuersatz_ermaessigt'); - if(empty($steuersatz_ermaessigt)) - { - $steuersatz_ermaessigt = 7; - } - if(empty($steuersatz_normal)) - { - $steuersatz_normal = 19; - } - $crossellingInstalled = $this->app->erp->ModulVorhanden('crossselling'); - foreach($reta as $k => $ret) - { - if(isset($ret['stueckliste'])){ - $stuecklistenmechanik = $ret['stueckliste']; - } - $ret['nummer'] = $this->app->DB->real_escape_string(trim($ret['nummer'])); - $articleid = null; - if($k == 0) - { - $articleid = $this->app->erp->GetArticleIDFromShopnumber($id, $nummer,true); - if($articleid) - { - $variantevonorig = $this->app->DB->Select("SELECT variante_von + /** + * @param int $id + * @param string $nummer + * @param bool $create + * + * @return mixed + * @throws Exception + */ + public function RemoteGetArticle($id, $nummer, $create = false) { + if ($create) { + $data['nummerintern'] = $nummer; + } else { + $data['nummer'] = $nummer; + } + $ret = $this->RemoteCommand($id, 'getarticle', $data); + $variante_von = null; + //if(!$create)return $ret; + $_nummer = null; + $shopexportArr = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id = '$id' LIMIT 1"); + $projekt = $shopexportArr['projekt']; + $nurneueartikel = $shopexportArr['nurneueartikel']; + $artikelnummerbeimanlegenausshop = $shopexportArr['artikelnummerbeimanlegenausshop']; + if (!$create) { + $nurneueartikel = false; + } + if (!isset($ret['nummer']) && isset($ret[0]) && isset($ret[0]['nummer'])) { + $reta = $ret; + } elseif (isset($ret['nummer'])) { + $reta[] = $ret; + } elseif (isset($ret[0]) && isset($ret[0]['name'])) { + $ret[0]['nummer'] = ''; //$nummer; + $reta = $ret; + } elseif (isset($ret['name'])) { + $ret['nummer'] = ''; //$nummer; + $reta[] = $ret; + } else { + return $ret; + } + if (!$reta || !is_array($reta)) { + return $ret; + } + $stuecklistenmechanik = false; + $variantevonorig = null; + $steuersatz_normal = $this->app->erp->Firmendaten('steuersatz_normal'); + $steuersatz_ermaessigt = $this->app->erp->Firmendaten('steuersatz_ermaessigt'); + if (empty($steuersatz_ermaessigt)) { + $steuersatz_ermaessigt = 7; + } + if (empty($steuersatz_normal)) { + $steuersatz_normal = 19; + } + $crossellingInstalled = $this->app->erp->ModulVorhanden('crossselling'); + foreach ($reta as $k => $ret) { + if (isset($ret['stueckliste'])) { + $stuecklistenmechanik = $ret['stueckliste']; + } + $ret['nummer'] = $this->app->DB->real_escape_string(trim($ret['nummer'])); + $articleid = null; + if ($k == 0) { + $articleid = $this->app->erp->GetArticleIDFromShopnumber($id, $nummer, true); + if ($articleid) { + $variantevonorig = $this->app->DB->Select("SELECT variante_von FROM artikel WHERE id = '$articleid' AND variante = 1 LIMIT 1"); - if(!$variantevonorig) - { - $articleid = $this->app->DB->Select("SELECT id + if (!$variantevonorig) { + $articleid = $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$articleid' AND ifnull(geloescht,0) = 0 AND nummer <> 'DEL' LIMIT 1"); - } - } - } - if((isset($ret['nummerintern']) && $ret['nummerintern'] != '') && !$articleid) - { - $articleid = $this->app->erp->GetArticleIDFromShopnumber($id, $ret['nummerintern']); - } - if(($ret['nummer'] != '') && !$articleid) - { - $articleid = $this->app->erp->GetArticleIDFromShopnumber($id, $ret['nummer']); - } - if(($ret['ean'] != '') && !$articleid) - { - $articleid = $this->app->erp->GetArticleIDFromShopnumber($id, $ret['ean']); - } - if($articleid) - { - if(isset($ret['shoparticleid']) && $ret['shoparticleid'] != '' && trim($this->app->DB->real_escape_string($ret['shoparticleid'])) != '') - { - if(!$this->app->DB->Select("SELECT id FROM `artikelnummer_fremdnummern` WHERE shopid = '$id' AND artikel = '$articleid' AND nummer = '".trim($this->app->DB->real_escape_string($ret['shoparticleid']))."' LIMIT 1")) - { - $this->app->DB->Insert("INSERT INTO `artikelnummer_fremdnummern` (artikel, shopid, aktiv, nummer, bezeichnung) - VALUES ('$articleid','$id','1','".trim($this->app->DB->real_escape_string($ret['shoparticleid']))."','SHOPID')"); - } - } - } - if(!$articleid && !$create) - { - continue; - } - if(!$articleid || !$nurneueartikel) - { - if($articleid) - { - $arr['id'] = $articleid; - $arr['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$articleid' LIMIT 1"); - }elseif($ret['nummer'] == '') - { - $arr['nummer'] = $this->app->erp->GetNextArtikelnummer('',1,$shopexportArr['projekt']); - } - /*if(isset($ret['nummer']) && $ret['nummer'] == '' && !is_null($variante_von)) - { - $ret['nummer'] = $_nummer.'-'.$ret['nummer']; - $arr['nummer'] = $ret['nummer']; - }*/ - if(isset($ret['stueckliste']) && empty($variante_von)){ - $arr['stueckliste'] = $ret['stueckliste']; - } - $arr['projekt'] = $shopexportArr['projekt']; - $arr['name_de'] = $ret['name']; - $arr['uebersicht_de'] = $ret['uebersicht_de'] ?? ''; - $arr['kurztext_de'] = $ret['kurztext_de'] ?? ''; - $arr['name_en'] = $ret['name_en']; - $arr['uebersicht_en'] = $ret['uebersicht_en'] ?? ''; - $arr['kurztext_en'] = $ret['kurztext_en'] ?? ''; - $arr['metakeywords_de'] = $ret['metakeywords_de'] ?? ''; - $arr['metakeywords_en'] = $ret['metakeywords_en'] ?? ''; - $arr['metatitle_de'] = $ret['metatitle_de'] ?? ''; - $arr['metatitle_en'] = $ret['metatitle_en'] ?? ''; - $arr['metadescription_de'] = $ret['metadescription_de'] ?? ''; - $arr['metadescription_en'] = $ret['metadescription_en'] ?? ''; - //$arr['anabregs_text'] = isset($ret['uebersicht_de'])?$ret['uebersicht_de']:''; - if(isset($ret['ean']) && $ret['ean'] != '') - { - $arr['ean'] = $ret['ean']; - } - if(isset($ret['gewicht']) && $ret['gewicht'] !== '') - { - $arr['gewicht'] = $ret['gewicht']; - } - if(isset($ret['laenge']) && $ret['laenge'] !== '') - { - $arr['laenge'] = $ret['laenge']; - } - if(isset($ret['hoehe']) && $ret['hoehe'] !== '') - { - $arr['hoehe'] = $ret['hoehe']; - } - if(isset($ret['breite']) && $ret['breite'] !== '') - { - $arr['breite'] = $ret['breite']; - } - - if(!$articleid){ - $arr['lagerartikel'] = 1; - } - if(true) - { - if(!empty($ret['umsatzsteuer'])){ - if(is_numeric($ret['umsatzsteuer'])){ - if($ret['umsatzsteuer'] == $steuersatz_normal) - { - $arr['umsatzsteuer'] = 'normal'; - }elseif($ret['umsatzsteuer'] == $steuersatz_ermaessigt) - { - $arr['umsatzsteuer'] = 'ermaessigt'; - } - }elseif(in_array($ret['umsatzsteuer'], array('normal', 'ermaessigt', 'befreit'))){ - $arr['umsatzsteuer'] = $ret['umsatzsteuer']; + } + } } - } - } + if ((isset($ret['nummerintern']) && $ret['nummerintern'] != '') && !$articleid) { + $articleid = $this->app->erp->GetArticleIDFromShopnumber($id, $ret['nummerintern']); + } + if (($ret['nummer'] != '') && !$articleid) { + $articleid = $this->app->erp->GetArticleIDFromShopnumber($id, $ret['nummer']); + } + if (($ret['ean'] != '') && !$articleid) { + $articleid = $this->app->erp->GetArticleIDFromShopnumber($id, $ret['ean']); + } + if ($articleid) { + if (isset($ret['shoparticleid']) && $ret['shoparticleid'] != '' && trim($this->app->DB->real_escape_string($ret['shoparticleid'])) != '') { + if (!$this->app->DB->Select("SELECT id FROM `artikelnummer_fremdnummern` WHERE shopid = '$id' AND artikel = '$articleid' AND nummer = '" . trim($this->app->DB->real_escape_string($ret['shoparticleid'])) . "' LIMIT 1")) { + $this->app->DB->Insert("INSERT INTO `artikelnummer_fremdnummern` (artikel, shopid, aktiv, nummer, bezeichnung) + VALUES ('$articleid','$id','1','" . trim($this->app->DB->real_escape_string($ret['shoparticleid'])) . "','SHOPID')"); + } + } + } + if (!$articleid && !$create) { + continue; + } + if (!$articleid || !$nurneueartikel) { + if ($articleid) { + $arr['id'] = $articleid; + $arr['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$articleid' LIMIT 1"); + } elseif ($ret['nummer'] == '') { + $arr['nummer'] = $this->app->erp->GetNextArtikelnummer('', 1, $shopexportArr['projekt']); + } + /* if(isset($ret['nummer']) && $ret['nummer'] == '' && !is_null($variante_von)) + { + $ret['nummer'] = $_nummer.'-'.$ret['nummer']; + $arr['nummer'] = $ret['nummer']; + } */ + if (isset($ret['stueckliste']) && empty($variante_von)) { + $arr['stueckliste'] = $ret['stueckliste']; + } + $arr['projekt'] = $shopexportArr['projekt']; + $arr['name_de'] = $ret['name']; + $arr['uebersicht_de'] = $ret['uebersicht_de'] ?? ''; + $arr['kurztext_de'] = $ret['kurztext_de'] ?? ''; + $arr['name_en'] = $ret['name_en']; + $arr['uebersicht_en'] = $ret['uebersicht_en'] ?? ''; + $arr['kurztext_en'] = $ret['kurztext_en'] ?? ''; + $arr['metakeywords_de'] = $ret['metakeywords_de'] ?? ''; + $arr['metakeywords_en'] = $ret['metakeywords_en'] ?? ''; + $arr['metatitle_de'] = $ret['metatitle_de'] ?? ''; + $arr['metatitle_en'] = $ret['metatitle_en'] ?? ''; + $arr['metadescription_de'] = $ret['metadescription_de'] ?? ''; + $arr['metadescription_en'] = $ret['metadescription_en'] ?? ''; + //$arr['anabregs_text'] = isset($ret['uebersicht_de'])?$ret['uebersicht_de']:''; + if (isset($ret['ean']) && $ret['ean'] != '') { + $arr['ean'] = $ret['ean']; + } + if (isset($ret['gewicht']) && $ret['gewicht'] !== '') { + $arr['gewicht'] = $ret['gewicht']; + } + if (isset($ret['laenge']) && $ret['laenge'] !== '') { + $arr['laenge'] = $ret['laenge']; + } + if (isset($ret['hoehe']) && $ret['hoehe'] !== '') { + $arr['hoehe'] = $ret['hoehe']; + } + if (isset($ret['breite']) && $ret['breite'] !== '') { + $arr['breite'] = $ret['breite']; + } - $arr['hersteller'] = $ret['hersteller']; - if(!$stuecklistenmechanik && isset($ret['variante_von']) && !$articleid){ - $variantevon = $this->app->DB->Select("SELECT artikel + if (!$articleid) { + $arr['lagerartikel'] = 1; + } + if (true) { + if (!empty($ret['umsatzsteuer'])) { + if (is_numeric($ret['umsatzsteuer'])) { + if ($ret['umsatzsteuer'] == $steuersatz_normal) { + $arr['umsatzsteuer'] = 'normal'; + } elseif ($ret['umsatzsteuer'] == $steuersatz_ermaessigt) { + $arr['umsatzsteuer'] = 'ermaessigt'; + } + } elseif (in_array($ret['umsatzsteuer'], array('normal', 'ermaessigt', 'befreit'))) { + $arr['umsatzsteuer'] = $ret['umsatzsteuer']; + } + } + } + + $arr['hersteller'] = $ret['hersteller']; + if (!$stuecklistenmechanik && isset($ret['variante_von']) && !$articleid) { + $variantevon = $this->app->DB->Select("SELECT artikel FROM `artikelnummer_fremdnummern` - WHERE shopid = '$id' AND aktiv = 1 AND nummer = '".trim($ret['variante_von'])."' AND nummer <> '' + WHERE shopid = '$id' AND aktiv = 1 AND nummer = '" . trim($ret['variante_von']) . "' AND nummer <> '' LIMIT 1"); - if(empty($variantevon)) - { - $variantevon = $this->app->DB->Select("SELECT id + if (empty($variantevon)) { + $variantevon = $this->app->DB->Select("SELECT id FROM artikel - WHERE ifnull(geloescht,0) = 0 AND nummer <> 'DEL' AND nummer <> '' AND nummer = '".trim($ret['variante_von'])."' + WHERE ifnull(geloescht,0) = 0 AND nummer <> 'DEL' AND nummer <> '' AND nummer = '" . trim($ret['variante_von']) . "' ORDER BY projekt = '$projekt' DESC LIMIT 1"); - } - if(empty($variantevon)) - { - $variantevon = $variantevonorig; - } - if(!empty($variantevon)) - { - $arr['variante'] = 1; - $arr['variante_von'] = $variantevon; - } - }elseif($variante_von) - { - if($variante_von) - { - $arr['variante'] = 1; - } - if($variante_von) - { - $arr['variante_von'] = $variante_von; - } - } - $freifeldmapping = $this->app->DB->SelectArr("SELECT * + } + if (empty($variantevon)) { + $variantevon = $variantevonorig; + } + if (!empty($variantevon)) { + $arr['variante'] = 1; + $arr['variante_von'] = $variantevon; + } + } elseif ($variante_von) { + if ($variante_von) { + $arr['variante'] = 1; + } + if ($variante_von) { + $arr['variante_von'] = $variante_von; + } + } + $freifeldmapping = $this->app->DB->SelectArr("SELECT * FROM shopexport_freifelder WHERE shop = '$id' AND aktiv = 1 AND freifeld_shop <> '' AND freifeld_wawi <> ''"); - if(!empty($freifeldmapping)) - { - foreach($freifeldmapping as $freifeldval) - { - $freifeldShopKey = 'freifeld_'.$freifeldval['freifeld_shop']; - if(isset($ret[$freifeldShopKey])) - { - $arr[$freifeldval['freifeld_wawi']] = $ret[$freifeldShopKey]; - } - } - } - $articleid = $this->app->erp->InsertUpdateArtikel($arr); - unset($arr); - if($artikelnummerbeimanlegenausshop && !empty($ret['artikelnummerausshop'])) - { - $this->app->DB->Update("UPDATE artikel SET nummer = '".$ret['artikelnummerausshop']."' WHERE id = '$articleid'"); - } - - $ret['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$articleid' LIMIT 1"); - if(isset($ret['bilder']) && $ret['bilder'] && is_array($ret['bilder'])) - { - $dateien = $this->app->DB->SelectArr("SELECT * FROM datei_stichwoerter ds INNER JOIN datei_version dv ON ds.datei = dv.datei AND ds.parameter = '$articleid' AND ds.objekt LIKE 'Artikel' ORDER BY ds.sort"); - if(empty($dateien)) - { - foreach($ret['bilder'] as $v) - { - if($v['path'] != '' && $v['content'] != '') - { - $path_parts = pathinfo($v['path']); - $tmpfilename = tempnam($this->app->erp->GetTMP(), 'img'); - file_put_contents($tmpfilename, base64_decode($v['content'])); - $fileid = $this->app->erp->CreateDatei($path_parts['basename'], 'Shopbild', '', '', $tmpfilename, 'Cronjob'); - $this->app->erp->AddDateiStichwort($fileid, 'Shopbild', 'artikel', $articleid); - if (@is_file($tmpfilename)) - unlink($tmpfilename); - } - } - }elseif($dateien[0]['subjekt'] === 'shopbild'){ - $this->app->DB->Update("UPDATE datei_stichwoerter SET subjekt = 'Shopbild' WHERE id = '".$dateien[0]['id']."' AND subjekt = 'shopbild' LIMIT 1"); - } - } - if($variante_von === null) - { - $variante_von = $articleid; - $_nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$articleid' LIMIT 1"); - $nummer = isset($ret['nummerintern'])?$ret['nummerintern']:(isset($ret['nummer'])?$ret['nummer']:''); - } - if(!empty($ret['preis_netto']) && $ret['preis_netto'] > 0) - { - $this->app->erp->AddVerkaufspreis($articleid,1,0,$ret['preis_netto']); - } - - if(!empty($ret['bilder']) && is_array($ret['bilder'])) - { - $dateien = $this->app->DB->SelectArr("SELECT * + if (!empty($freifeldmapping)) { + foreach ($freifeldmapping as $freifeldval) { + $freifeldShopKey = 'freifeld_' . $freifeldval['freifeld_shop']; + if (isset($ret[$freifeldShopKey])) { + $arr[$freifeldval['freifeld_wawi']] = $ret[$freifeldShopKey]; + } + } + } + $articleid = $this->app->erp->InsertUpdateArtikel($arr); + unset($arr); + if ($artikelnummerbeimanlegenausshop && !empty($ret['artikelnummerausshop'])) { + $this->app->DB->Update("UPDATE artikel SET nummer = '" . $ret['artikelnummerausshop'] . "' WHERE id = '$articleid'"); + } + + $ret['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$articleid' LIMIT 1"); + if (isset($ret['bilder']) && $ret['bilder'] && is_array($ret['bilder'])) { + $dateien = $this->app->DB->SelectArr("SELECT * FROM datei_stichwoerter ds INNER JOIN datei_version dv ON ds.datei = dv.datei AND ds.parameter = '$articleid' AND ds.objekt LIKE 'Artikel' ORDER BY ds.sort"); + if (empty($dateien)) { + foreach ($ret['bilder'] as $v) { + if ($v['path'] != '' && $v['content'] != '') { + $path_parts = pathinfo($v['path']); + $tmpfilename = tempnam($this->app->erp->GetTMP(), 'img'); + file_put_contents($tmpfilename, base64_decode($v['content'])); + $fileid = $this->app->erp->CreateDatei($path_parts['basename'], 'Shopbild', '', '', $tmpfilename, 'Cronjob'); + $this->app->erp->AddDateiStichwort($fileid, 'Shopbild', 'artikel', $articleid); + if (@is_file($tmpfilename)) + unlink($tmpfilename); + } + } + } elseif ($dateien[0]['subjekt'] === 'shopbild') { + $this->app->DB->Update("UPDATE datei_stichwoerter SET subjekt = 'Shopbild' WHERE id = '" . $dateien[0]['id'] . "' AND subjekt = 'shopbild' LIMIT 1"); + } + } + if ($variante_von === null) { + $variante_von = $articleid; + $_nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$articleid' LIMIT 1"); + $nummer = isset($ret['nummerintern']) ? $ret['nummerintern'] : (isset($ret['nummer']) ? $ret['nummer'] : ''); + } + if (!empty($ret['preis_netto']) && $ret['preis_netto'] > 0) { + $this->app->erp->AddVerkaufspreis($articleid, 1, 0, $ret['preis_netto']); + } + + if (!empty($ret['bilder']) && is_array($ret['bilder'])) { + $dateien = $this->app->DB->SelectArr("SELECT * FROM datei_stichwoerter ds INNER JOIN datei_version dv ON ds.datei = dv.datei AND ds.parameter = '$articleid' AND ds.objekt LIKE 'Artikel' ORDER BY ds.sort"); - if(empty($dateien)) - { - foreach($ret['bilder'] as $v) - { - if($v['path'] != '' && $v['content'] != '') - { - $path_parts = pathinfo($v['path']); - $tmpfilename = tempnam($this->app->erp->GetTMP(), 'img'); - file_put_contents($tmpfilename, base64_decode($v['content'])); - $fileid = $this->app->erp->CreateDatei($path_parts['basename'], 'Shopbild', '', '', $tmpfilename, 'Cronjob'); - if(isset($v['id'])) - { - $this->ShopexportMappingSet($id, 'datei', $fileid, $v['id'], $articleid); + if (empty($dateien)) { + foreach ($ret['bilder'] as $v) { + if ($v['path'] != '' && $v['content'] != '') { + $path_parts = pathinfo($v['path']); + $tmpfilename = tempnam($this->app->erp->GetTMP(), 'img'); + file_put_contents($tmpfilename, base64_decode($v['content'])); + $fileid = $this->app->erp->CreateDatei($path_parts['basename'], 'Shopbild', '', '', $tmpfilename, 'Cronjob'); + if (isset($v['id'])) { + $this->ShopexportMappingSet($id, 'datei', $fileid, $v['id'], $articleid); + } + $this->app->erp->AddDateiStichwort($fileid, 'Shopbild', 'artikel', $articleid); + if (@is_file($tmpfilename)) + unlink($tmpfilename); + } + } + } } - $this->app->erp->AddDateiStichwort($fileid, 'Shopbild', 'artikel', $articleid); - if (@is_file($tmpfilename)) - unlink($tmpfilename); - } - } - } - } - if($crossellingInstalled){ - if(!empty($ret['crossselling'])){ - if(!empty($ret['crossselling']['similar'])){ - foreach ($ret['crossselling']['similar'] as $cskey => $csvalue) { - $crosssellingartikel = $this->app->DB->Select("SELECT id from artikel WHERE nummer= '".$csvalue."' and geloescht='0'"); - if($crosssellingartikel){ - if(!$this->app->DB->Select("SELECT id FROM crossselling_artikel WHERE artikel='$articleid' AND crosssellingartikel='$crosssellingartikel' AND shop='$id'")){ - $sort = $this->app->DB->Select("SELECT MAX(sort)+1 from crossselling_artikel WHERE artikel='$articleid' AND shop='$id'"); - $this->app->DB->Insert("INSERT INTO crossselling_artikel (aktiv, art, artikel, crosssellingartikel, shop, sort, bemerkung) VALUES ('1','1','$articleid','$crosssellingartikel','$id','$sort','Über Artikelimport hinzugefügt')"); - } + if ($crossellingInstalled) { + if (!empty($ret['crossselling'])) { + if (!empty($ret['crossselling']['similar'])) { + foreach ($ret['crossselling']['similar'] as $cskey => $csvalue) { + $crosssellingartikel = $this->app->DB->Select("SELECT id from artikel WHERE nummer= '" . $csvalue . "' and geloescht='0'"); + if ($crosssellingartikel) { + if (!$this->app->DB->Select("SELECT id FROM crossselling_artikel WHERE artikel='$articleid' AND crosssellingartikel='$crosssellingartikel' AND shop='$id'")) { + $sort = $this->app->DB->Select("SELECT MAX(sort)+1 from crossselling_artikel WHERE artikel='$articleid' AND shop='$id'"); + $this->app->DB->Insert("INSERT INTO crossselling_artikel (aktiv, art, artikel, crosssellingartikel, shop, sort, bemerkung) VALUES ('1','1','$articleid','$crosssellingartikel','$id','$sort','Über Artikelimport hinzugefügt')"); + } + } + } + } + if (!empty($ret['crossselling']['related'])) { + foreach ($ret['crossselling']['related'] as $cskey => $csvalue) { + $crosssellingartikel = $this->app->DB->Select("SELECT id from artikel WHERE nummer= '" . $csvalue . "' and geloescht='0'"); + if ($crosssellingartikel) { + if (!$this->app->DB->Select("SELECT id FROM crossselling_artikel WHERE artikel='$articleid' AND crosssellingartikel='$crosssellingartikel' AND shop='$id'")) { + $sort = $this->app->DB->Select("SELECT MAX(sort)+1 from crossselling_artikel WHERE artikel='$articleid' AND shop='$id'"); + $this->app->DB->Insert("INSERT INTO crossselling_artikel (aktiv, art, artikel, crosssellingartikel, shop, sort, bemerkung) VALUES ('1','2','$articleid','$crosssellingartikel','$id','$sort','Über Artikelimport hinzugefügt')"); + } + } + } + } + } } - } - } - if(!empty($ret['crossselling']['related'])){ - foreach ($ret['crossselling']['related'] as $cskey => $csvalue) { - $crosssellingartikel = $this->app->DB->Select("SELECT id from artikel WHERE nummer= '".$csvalue."' and geloescht='0'"); - if($crosssellingartikel){ - if(!$this->app->DB->Select("SELECT id FROM crossselling_artikel WHERE artikel='$articleid' AND crosssellingartikel='$crosssellingartikel' AND shop='$id'")){ - $sort = $this->app->DB->Select("SELECT MAX(sort)+1 from crossselling_artikel WHERE artikel='$articleid' AND shop='$id'"); - $this->app->DB->Insert("INSERT INTO crossselling_artikel (aktiv, art, artikel, crosssellingartikel, shop, sort, bemerkung) VALUES ('1','2','$articleid','$crosssellingartikel','$id','$sort','Über Artikelimport hinzugefügt')"); - } - } - } - } - } - } - $katext = 0; - if(isset($ret['kategorien_all']) && $ret['kategorien_all']) - { - foreach($ret['kategorien_all'] as $v) - { - if($katext == 0 && $v['parent'] == 0) - { - $katext = $v['id']; - } - if(!$this->app->DB->Select("SELECT id + $katext = 0; + if (isset($ret['kategorien_all']) && $ret['kategorien_all']) { + foreach ($ret['kategorien_all'] as $v) { + if ($katext == 0 && $v['parent'] == 0) { + $katext = $v['id']; + } + if (!$this->app->DB->Select("SELECT id FROM shopexport_kategorien - WHERE shop = '$id' AND extid = '".$this->app->DB->real_escape_string($v['id'])."' LIMIT 1")){ - $this->app->DB->Insert("INSERT INTO shopexport_kategorien (shop, extid, aktiv,extname,extparent,extsort) VALUES - ('$id','" . $this->app->DB->real_escape_string($v['id']) . "','" . (int)$v['aktiv'] . "','" . $this->app->DB->real_escape_string($v['name']) . "','" . $this->app->DB->real_escape_string($v['parent']) . "','" . (int)$v['sort'] . "')"); - } - } - $shopkategorien = $this->getShopKatgeorien($id); - /** @var Onlineshops $onlineShopObj */ - $onlineShopObj = $this->app->loadModule('onlineshops'); - $categoryRootId = 0; - if(!empty($onlineShopObj) && method_exists($onlineShopObj, 'getJsonSettings')) { - $categoryRootId = (int)$onlineShopObj->getJsonSettings($id, 'category_root_id'); - } - $kategorientoint = [$categoryRootId]; + WHERE shop = '$id' AND extid = '" . $this->app->DB->real_escape_string($v['id']) . "' LIMIT 1")) { + $this->app->DB->Insert("INSERT INTO shopexport_kategorien (shop, extid, aktiv,extname,extparent,extsort) VALUES + ('$id','" . $this->app->DB->real_escape_string($v['id']) . "','" . (int) $v['aktiv'] . "','" . $this->app->DB->real_escape_string($v['name']) . "','" . $this->app->DB->real_escape_string($v['parent']) . "','" . (int) $v['sort'] . "')"); + } + } + $shopkategorien = $this->getShopKatgeorien($id); + /** @var Onlineshops $onlineShopObj */ + $onlineShopObj = $this->app->loadModule('onlineshops'); + $categoryRootId = 0; + if (!empty($onlineShopObj) && method_exists($onlineShopObj, 'getJsonSettings')) { + $categoryRootId = (int) $onlineShopObj->getJsonSettings($id, 'category_root_id'); + } + $kategorientoint = [$categoryRootId]; - if(!empty($shopkategorien)) - { - foreach($shopkategorien as $v) - { - if(!$v['kategorie']) - { - $parentInXentral = $kategorientoint[$v['extparent']]; - if(empty($parentInXentral)){ - $parentInXentral = $this->app->DB->Select("SELECT kategorie FROM shopexport_kategorien WHERE shop='$id' AND extid='".$v['extparent']."' LIMIT 1"); + if (!empty($shopkategorien)) { + foreach ($shopkategorien as $v) { + if (!$v['kategorie']) { + $parentInXentral = $kategorientoint[$v['extparent']]; + if (empty($parentInXentral)) { + $parentInXentral = $this->app->DB->Select("SELECT kategorie FROM shopexport_kategorien WHERE shop='$id' AND extid='" . $v['extparent'] . "' LIMIT 1"); + } + $this->app->DB->Insert("INSERT INTO `artikelkategorien` (bezeichnung,parent) + VALUES ('" . $this->app->DB->real_escape_string($v['extname']) . "','$parentInXentral')"); + $kategorientoint[$v['extid']] = $this->app->DB->GetInsertID(); + $this->app->DB->Update("UPDATE shopexport_kategorien + SET kategorie = '" . $kategorientoint[$v['extid']] . "' + WHERE id = '" . $v['id'] . "' LIMIT 1"); + $v['kategorie'] = $kategorientoint[$v['extid']]; + } + } + } } - $this->app->DB->Insert("INSERT INTO `artikelkategorien` (bezeichnung,parent) - VALUES ('".$this->app->DB->real_escape_string($v['extname'])."','$parentInXentral')"); - $kategorientoint[$v['extid']] = $this->app->DB->GetInsertID(); - $this->app->DB->Update("UPDATE shopexport_kategorien - SET kategorie = '".$kategorientoint[$v['extid']]."' - WHERE id = '".$v['id']."' LIMIT 1"); - $v['kategorie'] = $kategorientoint[$v['extid']]; - } - } - } - } - if(!empty($ret['kategorien'])) - { - $shopkategorien = $this->app->DB->SelectArr("SELECT * + if (!empty($ret['kategorien'])) { + $shopkategorien = $this->app->DB->SelectArr("SELECT * FROM shopexport_kategorien WHERE shop = '$id' AND kategorie > 0 ORDER BY extparent, extsort"); - if(!empty($shopkategorien)) - { - foreach($shopkategorien as $v) - { - $kategorientoint[$v['extid']] = $v['kategorie']; - } - $kategoriezugewiesen = false; - foreach($ret['kategorien'] as $v) - { - if(!$kategoriezugewiesen){ - $kategorieid = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung='".$v['name']."' AND parent=0 AND geloescht=0 LIMIT 1"); - if($kategorieid){ - $this->app->DB->Update("UPDATE artikel SET typ = '".$kategorieid."_kat' WHERE id = '$articleid' LIMIT 1"); - $kategoriezugewiesen = true; - } - } + if (!empty($shopkategorien)) { + foreach ($shopkategorien as $v) { + $kategorientoint[$v['extid']] = $v['kategorie']; + } + $kategoriezugewiesen = false; + foreach ($ret['kategorien'] as $v) { + if (!$kategoriezugewiesen) { + $kategorieid = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung='" . $v['name'] . "' AND parent=0 AND geloescht=0 LIMIT 1"); + if ($kategorieid) { + $this->app->DB->Update("UPDATE artikel SET typ = '" . $kategorieid . "_kat' WHERE id = '$articleid' LIMIT 1"); + $kategoriezugewiesen = true; + } + } - if(isset($kategorientoint[$v['id']]) && $kategorientoint[$v['id']]) - { - if(!$this->app->DB->Select("SELECT id FROM artikelbaum_artikel WHERE artikel = '$articleid' AND kategorie = '".$kategorientoint[$v['id']]."' LIMIT 1")) - { - $this->app->DB->Insert("INSERT INTO artikelbaum_artikel (artikel, kategorie) - VALUES ('$articleid', '".$kategorientoint[$v['id']]."')"); + if (isset($kategorientoint[$v['id']]) && $kategorientoint[$v['id']]) { + if (!$this->app->DB->Select("SELECT id FROM artikelbaum_artikel WHERE artikel = '$articleid' AND kategorie = '" . $kategorientoint[$v['id']] . "' LIMIT 1")) { + $this->app->DB->Insert("INSERT INTO artikelbaum_artikel (artikel, kategorie) + VALUES ('$articleid', '" . $kategorientoint[$v['id']] . "')"); + } + } + } + } } - } - } - } - } - if(!empty($ret['eigenschaften'])) - { - foreach($ret['eigenschaften'] as $v) - { - if($v['name'] != '') - { - $eigenschaft = $this->app->DB->Select("SELECT id + if (!empty($ret['eigenschaften'])) { + foreach ($ret['eigenschaften'] as $v) { + if ($v['name'] != '') { + $eigenschaft = $this->app->DB->Select("SELECT id FROM `artikeleigenschaften` - WHERE name = '".$this->app->DB->real_escape_string($v['name'])."' AND geloescht = 0 + WHERE name = '" . $this->app->DB->real_escape_string($v['name']) . "' AND geloescht = 0 LIMIT 1"); - if(!$eigenschaft) - { - $this->app->DB->Insert("INSERT INTO `artikeleigenschaften` (name) - VALUES ('".$this->app->DB->real_escape_string($v['name'])."')"); - $eigenschaft = $this->app->DB->GetInsertID(); - } - if($eigenschaft) - { - $wert = $this->app->DB->Select("SELECT id + if (!$eigenschaft) { + $this->app->DB->Insert("INSERT INTO `artikeleigenschaften` (name) + VALUES ('" . $this->app->DB->real_escape_string($v['name']) . "')"); + $eigenschaft = $this->app->DB->GetInsertID(); + } + if ($eigenschaft) { + $wert = $this->app->DB->Select("SELECT id FROM artikeleigenschaftenwerte - WHERE artikel = '$articleid' AND artikeleigenschaften = '$eigenschaft' AND wert = '".$this->app->DB->real_escape_string($v['values'])."' + WHERE artikel = '$articleid' AND artikeleigenschaften = '$eigenschaft' AND wert = '" . $this->app->DB->real_escape_string($v['values']) . "' LIMIT 1"); - if(!$wert) - { - $this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (artikel,artikeleigenschaften,wert) - VALUES ('$articleid','$eigenschaft','".$this->app->DB->real_escape_string($v['values'])."')"); + if (!$wert) { + $this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (artikel,artikeleigenschaften,wert) + VALUES ('$articleid','$eigenschaft','" . $this->app->DB->real_escape_string($v['values']) . "')"); + } + } + } + } } - } - } - } - } - if(!empty($ret['matrixprodukt_gruppe1'])){ - $query = sprintf("UPDATE artikel SET matrixprodukt=1 WHERE id='%s'",$articleid); - $this->app->DB->Update($query); - for($m=1;$m<=3;$m++){ - if(empty($ret['matrixprodukt_gruppe'.$m])){ - continue; - } + if (!empty($ret['matrixprodukt_gruppe1'])) { + $query = sprintf("UPDATE artikel SET matrixprodukt=1 WHERE id='%s'", $articleid); + $this->app->DB->Update($query); + for ($m = 1; $m <= 3; $m++) { + if (empty($ret['matrixprodukt_gruppe' . $m])) { + continue; + } - $gruppeName = $this->app->DB->real_escape_string($ret['matrixprodukt_gruppe'.$m]); - $query = sprintf("SELECT id FROM matrixprodukt_eigenschaftengruppen_artikel WHERE artikel='%s' AND name='%s'", - $articleid, $gruppeName); - $gruppeId = $this->app->DB->Select($query); - if(empty($gruppeId)){ - $query = sprintf("SELECT MAX(sort) FROM matrixprodukt_eigenschaftengruppen_artikel WHERE artikel='%s' AND name='%s'", - $articleid, $gruppeName); - $sort = $this->app->DB->Select($query); - if(empty($sort)){ - $sort = '0'; - } - $query = sprintf("INSERT INTO matrixprodukt_eigenschaftengruppen_artikel + $gruppeName = $this->app->DB->real_escape_string($ret['matrixprodukt_gruppe' . $m]); + $query = sprintf("SELECT id FROM matrixprodukt_eigenschaftengruppen_artikel WHERE artikel='%s' AND name='%s'", + $articleid, $gruppeName); + $gruppeId = $this->app->DB->Select($query); + if (empty($gruppeId)) { + $query = sprintf("SELECT MAX(sort) FROM matrixprodukt_eigenschaftengruppen_artikel WHERE artikel='%s' AND name='%s'", + $articleid, $gruppeName); + $sort = $this->app->DB->Select($query); + if (empty($sort)) { + $sort = '0'; + } + $query = sprintf("INSERT INTO matrixprodukt_eigenschaftengruppen_artikel (artikel, aktiv, name, name_ext,projekt,bearbeiter,erstellt,sort, pflicht, oeffentlich,typ) VALUES ('%s','1','%s','','0','','NOW()','%s','1','0','0')", $articleid, $gruppeName, $sort); - $this->app->DB->Insert($query); - $gruppeId = $this->app->DB->GetInsertID(); - } + $this->app->DB->Insert($query); + $gruppeId = $this->app->DB->GetInsertID(); + } - foreach ($ret['matrixprodukt_optionen'.$m] as $optionBezeichnung){ - $optionBezeichnung = $this->app->DB->real_escape_string($optionBezeichnung); - $query = sprintf("SELECT id FROM matrixprodukt_eigenschaftenoptionen_artikel WHERE artikel='%s' AND name='%s'", - $articleid, $optionBezeichnung); - $optionId = $this->app->DB->Select($query); - if(empty($optionId)){ - $query = sprintf("SELECT MAX(sort) FROM matrixprodukt_eigenschaftenoptionen_artikel WHERE artikel='%s' AND name='%s'", - $articleid, $optionBezeichnung); - $sort = $this->app->DB->Select($query); - if(empty($sort)){ - $sort = '1'; - } - $query = sprintf("INSERT INTO matrixprodukt_eigenschaftenoptionen_artikel + foreach ($ret['matrixprodukt_optionen' . $m] as $optionBezeichnung) { + $optionBezeichnung = $this->app->DB->real_escape_string($optionBezeichnung); + $query = sprintf("SELECT id FROM matrixprodukt_eigenschaftenoptionen_artikel WHERE artikel='%s' AND name='%s'", + $articleid, $optionBezeichnung); + $optionId = $this->app->DB->Select($query); + if (empty($optionId)) { + $query = sprintf("SELECT MAX(sort) FROM matrixprodukt_eigenschaftenoptionen_artikel WHERE artikel='%s' AND name='%s'", + $articleid, $optionBezeichnung); + $sort = $this->app->DB->Select($query); + if (empty($sort)) { + $sort = '1'; + } + $query = sprintf("INSERT INTO matrixprodukt_eigenschaftenoptionen_artikel (artikel, matrixprodukt_eigenschaftenoptionen, aktiv,name,name_ext,sort,erstellt,gruppe,bearbeiter,artikelnummer) VALUES ('%s','0','1','%s','','%s','NOW()','%s','','')", - $articleid, $optionBezeichnung, $sort, $gruppeId); - $this->app->DB->Insert($query); - } - } - } - } + $articleid, $optionBezeichnung, $sort, $gruppeId); + $this->app->DB->Insert($query); + } + } + } + } - if(!empty($ret['matrixprodukt_wert1'])){ - for($m=1;$m<=3;$m++){ - if(empty($ret['matrixprodukt_wert'.$m])){ - continue; + if (!empty($ret['matrixprodukt_wert1'])) { + for ($m = 1; $m <= 3; $m++) { + if (empty($ret['matrixprodukt_wert' . $m])) { + continue; + } + + $optionBezeichnung = $this->app->DB->real_escape_string($ret['matrixprodukt_wert' . $m]); + $query = sprintf("SELECT id FROM matrixprodukt_eigenschaftenoptionen_artikel WHERE artikel='%s' AND name='%s'", + $variante_von, $optionBezeichnung); + $optionId = $this->app->DB->Select($query); + if (!empty($optionId)) { + $query = sprintf("SELECT id FROM matrixprodukt_optionen_zu_artikel WHERE artikel='%s' AND option_id='%s'", + $articleid, $optionId); + $zuordnungId = $this->app->DB->Select($query); + if (empty($zuordnungId)) { + $query = sprintf("INSERT INTO matrixprodukt_optionen_zu_artikel (artikel,option_id) VALUES ('%s','%s')", + $articleid, $optionId); + $this->app->DB->Insert($query); + } + } + } + } + + if (!$this->app->DB->Select("SELECT id FROM `artikel_onlineshops` WHERE artikel = '$articleid' AND shop = '$id' AND aktiv = 1 LIMIT 1")) { + $this->app->DB->Insert("INSERT INTO `artikel_onlineshops` (artikel, shop,aktiv, ausartikel) VALUES ('$articleid', '$id',1 ,1)"); + } + if (isset($ret['nummerintern']) && trim($ret['nummerintern']) != '') { + $data['nummerintern'] = trim($ret['nummerintern']); + } + if (($ret['nummer'] != $data['nummerintern']) && $data['nummerintern'] != '' && trim($data['nummerintern']) != '') { + $data['nummerintern'] = trim($data['nummerintern']); + if (!$this->app->DB->Select("SELECT id FROM `artikelnummer_fremdnummern` WHERE artikel = '$articleid' AND shopid = '$id' AND nummer = '" . $this->app->DB->real_escape_string($data['nummerintern']) . "' AND nummer <> '' LIMIT 1")) { + $this->app->DB->Insert("INSERT INTO `artikelnummer_fremdnummern` (artikel, shopid, aktiv, bearbeiter, zeitstempel,nummer) VALUES ('$articleid','$id','1','Cronjob',now(),'" . $this->app->DB->real_escape_string($data['nummerintern']) . "')"); + } + } + } elseif ($articleid) { + if (isset($ret['ean']) && ($ret['ean'] != '') && $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$articleid' AND ifnull(ean,'') = '' LIMIT 1")) { + $this->app->DB->Update("UPDATE artikel SET ean = '" . $this->app->DB->real_escape_string($ret['ean']) . "' WHERE id = '$articleid' AND ifnull(ean,'') = '' LIMIT 1"); + } } - $optionBezeichnung = $this->app->DB->real_escape_string($ret['matrixprodukt_wert'.$m]); - $query = sprintf("SELECT id FROM matrixprodukt_eigenschaftenoptionen_artikel WHERE artikel='%s' AND name='%s'", - $variante_von, $optionBezeichnung); - $optionId = $this->app->DB->Select($query); - if(!empty($optionId)){ - $query = sprintf("SELECT id FROM matrixprodukt_optionen_zu_artikel WHERE artikel='%s' AND option_id='%s'", - $articleid, $optionId); - $zuordnungId = $this->app->DB->Select($query); - if(empty($zuordnungId)){ - $query = sprintf("INSERT INTO matrixprodukt_optionen_zu_artikel (artikel,option_id) VALUES ('%s','%s')", - $articleid,$optionId); - $this->app->DB->Insert($query); - } - } - } - } - - if(!$this->app->DB->Select("SELECT id FROM `artikel_onlineshops` WHERE artikel = '$articleid' AND shop = '$id' AND aktiv = 1 LIMIT 1")) { - $this->app->DB->Insert("INSERT INTO `artikel_onlineshops` (artikel, shop,aktiv, ausartikel) VALUES ('$articleid', '$id',1 ,1)"); - } - if(isset($ret['nummerintern']) && trim($ret['nummerintern']) != '') - { - $data['nummerintern'] = trim($ret['nummerintern']); - } - if(($ret['nummer'] != $data['nummerintern']) && $data['nummerintern'] != '' && trim($data['nummerintern']) != '') - { - $data['nummerintern'] = trim($data['nummerintern']); - if(!$this->app->DB->Select("SELECT id FROM `artikelnummer_fremdnummern` WHERE artikel = '$articleid' AND shopid = '$id' AND nummer = '".$this->app->DB->real_escape_string($data['nummerintern'])."' AND nummer <> '' LIMIT 1")) - { - $this->app->DB->Insert("INSERT INTO `artikelnummer_fremdnummern` (artikel, shopid, aktiv, bearbeiter, zeitstempel,nummer) VALUES ('$articleid','$id','1','Cronjob',now(),'".$this->app->DB->real_escape_string($data['nummerintern'])."')"); - } - } - }elseif($articleid) - { - if(isset($ret['ean']) && ($ret['ean'] != '') && $this->app->DB->Select("SELECT id FROM artikel WHERE id = '$articleid' AND ifnull(ean,'') = '' LIMIT 1")) - { - $this->app->DB->Update("UPDATE artikel SET ean = '".$this->app->DB->real_escape_string($ret['ean'])."' WHERE id = '$articleid' AND ifnull(ean,'') = '' LIMIT 1"); - } - } - - if($stuecklistenmechanik && !empty($variante_von) && !$this->app->erp->IstStuecklistenZirkel($articleid,$variante_von)){ - $stuecklistenmenge = 1; - if(!empty($ret['stuecklistemenge'])){ - $stuecklistenmenge = $ret['stuecklistemenge']; - } - $query = sprintf('SELECT MAX(sort) FROM stueckliste WHERE stuecklistevonartikel=%d',$variante_von); - $sort = $this->app->DB->Select($query); - if($sort !== NULL){ - $sort++; - }else{ - $sort = 0; - } - $query = sprintf("INSERT INTO stueckliste (sort, artikel, referenz, place, layer, stuecklistevonartikel, + if ($stuecklistenmechanik && !empty($variante_von) && !$this->app->erp->IstStuecklistenZirkel($articleid, $variante_von)) { + $stuecklistenmenge = 1; + if (!empty($ret['stuecklistemenge'])) { + $stuecklistenmenge = $ret['stuecklistemenge']; + } + $query = sprintf('SELECT MAX(sort) FROM stueckliste WHERE stuecklistevonartikel=%d', $variante_von); + $sort = $this->app->DB->Select($query); + if ($sort !== NULL) { + $sort++; + } else { + $sort = 0; + } + $query = sprintf("INSERT INTO stueckliste (sort, artikel, referenz, place, layer, stuecklistevonartikel, menge, firma, wert, bauform, alternative, zachse, xpos, ypos, art) VALUES (%d, %d, '', 'DP', 'Top', %d, %d, 1, '', '', 0, '', '', '', 'et')", - $sort,$articleid,$variante_von,$stuecklistenmenge); - $this->app->DB->Insert($query); - } - - if($variante_von === null) { - if(!empty($articleid) && $stuecklistenmechanik){ - $query = sprintf('DELETE FROM stueckliste WHERE stuecklistevonartikel=%d',$articleid); - $this->app->DB->Delete($query); - } - $variante_von = $articleid; - } - - if(isset($ret['inaktiv'])){ - $ret['aktiv'] = !$ret['inaktiv']; - } - - if(isset($ret['aktiv'])) - { - if($ret['aktiv']){ - $this->app->DB->Update("UPDATE artikel SET inaktiv = '0' WHERE id = '$articleid' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE artikel SET inaktiv = '1' WHERE id = '$articleid' LIMIT 1"); - } - } - if(isset($ret['staffelpreise'])){ - $date = new DateTime(); - $date->sub(new DateInterval('P1D')); - $gestern = $date->format('Y-m-d'); - $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis='$gestern' WHERE artikel='$articleid' AND adresse='0' AND art='Kunde'"); - - foreach ($ret['staffelpreise'] as $staffelpreis){ - $preis = $staffelpreis['preis']; - if($staffelpreis['brutto']){ - $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$articleid' LIMIT 1"); - $steuersatz = 0; - if($umsatzsteuer === 'ermaessigt') - { - $steuersatz = $this->app->erp->Firmendaten('steuersatz_ermaessigt'); + $sort, $articleid, $variante_von, $stuecklistenmenge); + $this->app->DB->Insert($query); } - if($umsatzsteuer === 'normal'){ - $steuersatz = $this->app->erp->Firmendaten('steuersatz_normal'); - } - $preis /= 1+$steuersatz/100; - } - $this->app->erp->AddVerkaufspreis($articleid,$staffelpreis['ab_menge'],0,$preis); - } - } - if(isset($ret['fremdnummern']) && !empty($ret['fremdnummern'])){ - foreach ($ret['fremdnummern'] as $fremdnummer){ - $query = sprintf("SELECT id FROM artikelnummer_fremdnummern WHERE shopid=%d AND nummer='%s' AND bezeichnung='%s' AND aktiv=%d AND artikel=%s", - $id,$this->app->DB->real_escape_string($fremdnummer['nummer']),$this->app->DB->real_escape_string($fremdnummer['bezeichnung']),'1',$articleid); - $fremdnummerfehlt = empty($this->app->DB->Select($query)); - if($fremdnummerfehlt){ - $query = sprintf("INSERT INTO artikelnummer_fremdnummern + if ($variante_von === null) { + if (!empty($articleid) && $stuecklistenmechanik) { + $query = sprintf('DELETE FROM stueckliste WHERE stuecklistevonartikel=%d', $articleid); + $this->app->DB->Delete($query); + } + $variante_von = $articleid; + } + + if (isset($ret['inaktiv'])) { + $ret['aktiv'] = !$ret['inaktiv']; + } + + if (isset($ret['aktiv'])) { + if ($ret['aktiv']) { + $this->app->DB->Update("UPDATE artikel SET inaktiv = '0' WHERE id = '$articleid' LIMIT 1"); + } else { + $this->app->DB->Update("UPDATE artikel SET inaktiv = '1' WHERE id = '$articleid' LIMIT 1"); + } + } + if (isset($ret['staffelpreise'])) { + $date = new DateTime(); + $date->sub(new DateInterval('P1D')); + $gestern = $date->format('Y-m-d'); + $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis='$gestern' WHERE artikel='$articleid' AND adresse='0' AND art='Kunde'"); + + foreach ($ret['staffelpreise'] as $staffelpreis) { + $preis = $staffelpreis['preis']; + if ($staffelpreis['brutto']) { + $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$articleid' LIMIT 1"); + $steuersatz = 0; + if ($umsatzsteuer === 'ermaessigt') { + $steuersatz = $this->app->erp->Firmendaten('steuersatz_ermaessigt'); + } + if ($umsatzsteuer === 'normal') { + $steuersatz = $this->app->erp->Firmendaten('steuersatz_normal'); + } + $preis /= 1 + $steuersatz / 100; + } + $this->app->erp->AddVerkaufspreis($articleid, $staffelpreis['ab_menge'], 0, $preis); + } + } + if (isset($ret['fremdnummern']) && !empty($ret['fremdnummern'])) { + foreach ($ret['fremdnummern'] as $fremdnummer) { + $query = sprintf("SELECT id FROM artikelnummer_fremdnummern WHERE shopid=%d AND nummer='%s' AND bezeichnung='%s' AND aktiv=%d AND artikel=%s", + $id, $this->app->DB->real_escape_string($fremdnummer['nummer']), $this->app->DB->real_escape_string($fremdnummer['bezeichnung']), '1', $articleid); + $fremdnummerfehlt = empty($this->app->DB->Select($query)); + + if ($fremdnummerfehlt) { + $query = sprintf("INSERT INTO artikelnummer_fremdnummern (artikel, bezeichnung, nummer, shopid, bearbeiter, aktiv) VALUES (%d,'%s','%s',%d,'%s',%d)", - $articleid,$this->app->DB->real_escape_string($fremdnummer['bezeichnung']), - $this->app->DB->real_escape_string($fremdnummer['nummer']),$id,$this->app->User->GetName(),1); - $this->app->DB->Insert($query); - } - } - } + $articleid, $this->app->DB->real_escape_string($fremdnummer['bezeichnung']), + $this->app->DB->real_escape_string($fremdnummer['nummer']), $id, $this->app->User->GetName(), 1); + $this->app->DB->Insert($query); + } + } + } + + if (isset($ret['pseudopreis'])) { + $this->app->DB->Update(sprintf("UPDATE artikel SET pseudopreis='%s' WHERE id=%d", $ret['pseudopreis'], $articleid)); + } + if (!$create) { + return $ret; + } + } - if(isset($ret['pseudopreis'])){ - $this->app->DB->Update(sprintf("UPDATE artikel SET pseudopreis='%s' WHERE id=%d",$ret['pseudopreis'],$articleid)); - } - if(!$create) - { return $ret; - } } - return $ret; - } - - /** - * @param int $shopId - * @param int $parent - * @param int $lvl - * - * @return array - */ - protected function getShopKatgeorien($shopId, $parent = 0, $lvl = 0) - { - if($lvl > 20) - { - return []; - } - $ret = []; - $shopkategorien = $this->app->DB->SelectArr("SELECT * FROM shopexport_kategorien WHERE shop = '$shopId' AND extparent = '$parent' AND extid <> '' ORDER BY extsort"); - if($shopkategorien) - { - foreach($shopkategorien as $v) - { - $ret[] = $v; - $subkategorien = $this->getShopKatgeorien($shopId, $v['extid'], $lvl + 1); - if(!empty($subkategorien)) - { - foreach($subkategorien as $v2) - { - $ret[] = $v2; - } + /** + * @param int $shopId + * @param int $parent + * @param int $lvl + * + * @return array + */ + protected function getShopKatgeorien($shopId, $parent = 0, $lvl = 0) { + if ($lvl > 20) { + return []; } - } - } - - return $ret; - } - - /** - * @param int $id - * @param array $artikel_arr - * @param string|array $extnummer - * @param bool $nurlager - * - * @return mixed|null - * @throws Exception - */ - public function RemoteSendArticleList($id,$artikel_arr, $extnummer = '', $nurlager = false) - { - if(!class_exists('ObjGenArtikel') && - is_file(dirname(__DIR__) . '/objectapi/mysql/_gen/object.gen.artikel.php')){ - include_once dirname(__DIR__) . '/objectapi/mysql/_gen/object.gen.artikel.php'; - } - $shopexportarr = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id='$id' LIMIT 1"); - $artikelexport = $shopexportarr['artikelexport']; - - $loadElements = [ - 'foreign_numbers' => true, - 'article_descriptions' => true, - 'translations' => true, - 'categories' => true, - 'properties' => true, - 'pictures' => true, - 'cross_selling' => true, - 'bulk_prices' => true, - 'standard_price' => true, - 'variants' => true, - 'free_fields' => true, - ]; - - if( - ($nurlager || empty($artikelexport)) - && !empty($shopexportarr['modulename']) - && !is_file(dirname(__DIR__).'/pages/'.$shopexportarr['modulename'].'_custom.php') - ) { - $elementsNotNeededByModule = ShopimporterBase::storageNotNeededElements($shopexportarr['modulename']); - foreach($elementsNotNeededByModule as $element) { - $loadElements[$element] = false; - } - } - - //$lagerexport = $shopexportarr['lagerexport']; - $lagergrundlage = $shopexportarr['lagergrundlage']; - $shopbilderuebertragen = $shopexportarr['shopbilderuebertragen']; - $projekt = (int)$shopexportarr['projekt']; - $projektlager = $this->app->DB->Select("SELECT id FROM projekt WHERE id = $projekt AND projektlager = 1 LIMIT 1"); - $tmp = new ObjGenArtikel($this->app); - $cartikel_arr = !empty($artikel_arr)?count($artikel_arr):0; - - for($i=0;$i<$cartikel_arr;$i++) - { - - $artikel = $artikel_arr[$i]; - $lagerexport = $this->app->erp->GetArtikelShopEinstellung('autolagerlampe', $artikel, $shopexportarr); - $tmp->Select($artikel); - $data[$i] = ['artikel' => $artikel,'artikelid' => $artikel]; - $data[$i]['nummer'] = $tmp->GetNummer(); - $projekt = $tmp->GetProjekt(); - if(is_array($extnummer) && (!empty($extnummer)?count($extnummer):0) > $i && !empty($extnummer[$i]) && trim($extnummer[$i]) != '') - { - if($data[$i]['nummer'] != trim($extnummer[$i])){ - $data[$i]['fremdnummer'] = trim($extnummer[$i]); - } - } - - $data[$i]['inaktiv'] = $tmp->GetInaktiv(); - - if($tmp->GetIntern_Gesperrt()=='1'){ - $data[$i]['inaktiv'] = 1; - } - - $data[$i]['name_de'] = $tmp->GetName_De(); - $data[$i]['name_en'] = $tmp->GetName_En(); - $data[$i]['einheit'] = $tmp->GetEinheit(); - $data[$i]['hersteller'] = $tmp->GetHersteller(); - $data[$i]['herstellernummer'] = $tmp->GetHerstellernummer(); - $data[$i]['ean'] = $tmp->GetEan(); - if(!empty($loadElements['foreign_numbers'])) { - $data[$i]['artikelnummer_fremdnummern'] = $this->app->DB->SelectArr("SELECT * FROM artikelnummer_fremdnummern WHERE artikel = '" . $tmp->GetId() . "' AND shopid = '$id' AND aktiv = '1' AND nummer <> '' ORDER BY bezeichnung = 'SHOPID' DESC"); - if(!empty($data[$i]['artikelnummer_fremdnummern'])){ - foreach ($data[$i]['artikelnummer_fremdnummern'] as $fkey => $fval) { - $data[$i]['artikelnummer_fremdnummern'][$fkey]['nummer'] = trim($fval['nummer']); - } - } - } - - if(!empty($loadElements['article_descriptions'])) { - $data[$i]['kurztext_de'] = $tmp->GetKurztext_De(); - $data[$i]['kurztext_en'] = $tmp->GetKurztext_En(); - $data[$i]['anabregs_text'] = htmlspecialchars($tmp->GetAnabregs_Text(),ENT_QUOTES); - $data[$i]['anabregs_text_en'] = htmlspecialchars($tmp->GetAnabregs_Text_En(),ENT_QUOTES); - $data[$i]['beschreibung_de'] = $tmp->GetBeschreibung_De(); - $data[$i]['beschreibung_en'] = $tmp->GetBeschreibung_En(); - $data[$i]['uebersicht_de'] = htmlspecialchars($tmp->GetUebersicht_De(),ENT_QUOTES); - $data[$i]['uebersicht_en'] = htmlspecialchars($tmp->GetUebersicht_En(),ENT_QUOTES); - $data[$i]['herkunftsland'] = $tmp->GetHerkunftsland(); - - $data[$i]['texteuebertragen'] = $shopexportarr['texteuebertragen']; - - if(method_exists($tmp,'GetMetadescription_De')) - { - $data[$i]['metadescription_de'] = $tmp->GetMetadescription_De(); - } - if(method_exists($tmp,'GetMetadescription_En')) - { - $data[$i]['metadescription_en'] = $tmp->GetMetadescription_En(); - } - if(method_exists($tmp,'GetMetakeywords_De')) - { - $data[$i]['metakeywords_de'] = $tmp->GetMetakeywords_De(); - } - if(method_exists($tmp,'GetMetakeywords_En')) - { - $data[$i]['metakeywords_en'] = $tmp->GetMetakeywords_En(); - } - if(method_exists($tmp,'GetMetatitle_De')) - { - $data[$i]['metatitle_de'] = $tmp->GetMetatitle_De(); - } - if(method_exists($tmp,'GetMetatitle_En')) - { - $data[$i]['metatitle_en'] = $tmp->GetMetatitle_En(); - } - } - if($tmp->GetVariante()) - { - $variante_von = $tmp->GetVariante_Von(); - if($variante_von) - { - $tmp_2 = new ObjGenArtikel($this->app); - $tmp_2->Select($variante_von); - if($data[$i]['kurztext_de'] == '') - { - $data[$i]['kurztext_de'] = $tmp_2->GetKurztext_De(); - } - if($data[$i]['kurztext_en'] == '') - { - $data[$i]['kurztext_en'] = $tmp_2->GetKurztext_En(); - } - if($data[$i]['beschreibung_de'] == '') - { - $data[$i]['beschreibung_de'] = $tmp_2->GetBeschreibung_De(); - } - if($data[$i]['beschreibung_en'] == '') - { - $data[$i]['beschreibung_en'] = $tmp_2->GetBeschreibung_En(); - } - if($data[$i]['uebersicht_de'] == '') - { - $data[$i]['uebersicht_de'] = htmlspecialchars($tmp_2->GetUebersicht_De(),ENT_QUOTES); - } - if($data[$i]['uebersicht_en'] == '') - { - $data[$i]['uebersicht_en'] = htmlspecialchars($tmp_2->GetUebersicht_En(),ENT_QUOTES); - } - } - } - - if($data[$i]['uebersicht_de'] == '' && $data[$i]['beschreibung_de'] == '' && $data[$i]['kurztext_de'] == '') - { - $data[$i]['uebersicht_de'] = $data[$i]['anabregs_text']; - } - - $data[$i]['links_de'] = $tmp->GetLinks_De(); - $data[$i]['altersfreigabe'] = $tmp->GetAltersfreigabe(); - $data[$i]['links_en'] = $tmp->GetLinks_En(); - $data[$i]['startseite_de'] = $tmp->GetStartseite_De(); - $data[$i]['startseite_en'] = $tmp->GetStartseite_En(); - $data[$i]['restmenge'] = $this->app->erp->GetArtikelShopEinstellung('restmenge', $artikel, $shopexportarr); - $data[$i]['startseite'] = $tmp->GetStartseite(); - $data[$i]['standardbild'] = $tmp->GetStandardbild(); - $data[$i]['herstellerlink'] = $tmp->GetHerstellerlink(); - $data[$i]['herstellernummer'] = $tmp->GetHerstellernummer(); - $data[$i]['hersteller'] = $tmp->GetHersteller(); - $data[$i]['lieferzeit'] = $tmp->GetLieferzeit(); - $data[$i]['lieferzeitmanuell'] = $this->app->erp->GetArtikelShopEinstellung('lieferzeitmanuell', $artikel, $shopexportarr); - $data[$i]['gewicht'] = $tmp->GetGewicht(); - $data[$i]['laenge'] = $tmp->GetLaenge(); - $data[$i]['breite'] = $tmp->GetBreite(); - $data[$i]['hoehe'] = $tmp->GetHoehe(); - - $data[$i]['wichtig'] = $tmp->GetWichtig(); - $data[$i]['porto'] = $tmp->GetPorto(); - $data[$i]['gesperrt'] = $tmp->GetGesperrt(); - $data[$i]['sperrgrund'] = $tmp->GetSperrgrund(); - $data[$i]['gueltigbis'] = $tmp->GetGueltigbis(); - $data[$i]['umsatzsteuer'] = $tmp->GetUmsatzsteuer(); - if($data[$i]['umsatzsteuer']!=='ermaessigt' && $data[$i]['umsatzsteuer']!=='befreit') { - $data[$i]['umsatzsteuer']="normal"; - } - $data[$i]['ausverkauft'] = $tmp->GetAusverkauft(); - $data[$i]['variante'] = $tmp->GetVariante(); - $data[$i]['variante_von_id'] = $tmp->GetVariante_Von(); - $data[$i]['variantevon'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='".$tmp->GetVariante_Von()."' LIMIT 1"); - $data[$i]['variantevon_fremdnummer'] = trim($this->app->DB->Select("SELECT nummer FROM `artikelnummer_fremdnummern` WHERE shopid = '$id' AND aktiv = 1 AND artikel = '".$tmp->GetVariante_Von()."' AND trim(nummer) <> '' ORDER BY bezeichnung = 'SHOPID' DESC LIMIT 1")); - if($data[$i]['variantevon_fremdnummer'] == '') - { - unset($data[$i]['variantevon_fremdnummer']); - } - //$data[$i]['pseudopreis'] = $tmp->GetPseudopreis(); - $data[$i]['pseudopreis'] = $this->app->erp->GetArtikelShopEinstellung('pseudopreis', $artikel, $shopexportarr); - $data[$i]['keinrabatterlaubt'] = $tmp->GetKeinrabatterlaubt(); - $data[$i]['einkaufspreis'] = $this->app->erp->GetEinkaufspreis($artikel,1); - //$data[$i]['pseudolager'] = $tmp->GetPseudolager(); - $data[$i]['pseudolager'] = $this->app->erp->GetArtikelShopEinstellung('pseudolager', $artikel, $shopexportarr); - $this->app->erp->RunHook('remote_send_article_list_pseudostorage', 3, $id, $artikel, $data[$i]['pseudolager']); - if(is_numeric($data[$i]['pseudolager']) && $data[$i]['pseudolager'] < 0) { - $data[$i]['pseudolager'] = 0; - } - $data[$i]['downloadartikel'] = $tmp->GetDownloadartikel(); - $data[$i]['zolltarifnummer'] = $tmp->GetZolltarifnummer(); - $preisgruppe = $this->app->DB->Select("SELECT s.preisgruppe FROM shopexport s INNER JOIN gruppen g ON s.preisgruppe = g.id AND g.aktiv = 1 WHERE s.id='$id' LIMIT 1"); - - if(empty($loadElements['free_fields'])) { - $freifelder = null; - } - else{ - $freifelder = $this->app->DB->SelectArr("SELECT freifeld_wawi, freifeld_shop FROM shopexport_freifelder WHERE shop = '$id' AND aktiv = 1 AND freifeld_wawi <> '' AND freifeld_shop <> ''"); - } - if($freifelder) - { - /** - * @deprecated 20.1 - * AP - * Konstrunktion 'freifeld_Mappingname -> Wert' wird ersetzt durch 'Freifelder-> DE -> Mappingname -> Wert' - */ - foreach($freifelder as $freifeld) - { - if(method_exists($tmp,'Get'.ucfirst($freifeld['freifeld_wawi']))) - { - $_funktionsname = 'Get'.ucfirst($freifeld['freifeld_wawi']); - $data[$i]['freifeld_'.$freifeld['freifeld_shop']] = $tmp->$_funktionsname(); - } - } - /** - * @deprecated Ende - */ - - foreach($freifelder as $freifeld) - { - $_funktionsname = 'Get'.ucfirst($freifeld['freifeld_wawi']); - if(method_exists($tmp,$_funktionsname)) - { - $data[$i]['freifelder']['DE'][$freifeld['freifeld_shop']] = $tmp->$_funktionsname(); - } - } - - //Freifeldübersetzungen - $freifelduebersetzungen = $this->app->DB->SelectArr("SELECT sf.freifeld_shop, af.sprache, af.nummer, af.wert FROM shopexport_freifelder sf JOIN artikel_freifelder af ON sf.freifeld_wawi = CONCAT('freifeld',af.nummer) WHERE sf.shop = '$id' AND af.artikel = '$artikel' AND sf.aktiv = 1 AND sf.freifeld_wawi <> '' AND sf.freifeld_shop <> '' AND af.wert <> ''"); - if(!empty($freifelduebersetzungen)){ - foreach ($freifelduebersetzungen as $ffukey => $ffuvalue) { - $data[$i]['freifelder'][$ffuvalue['sprache']][] = array('mapping' => $ffuvalue['freifeld_shop'], 'freifeldnummer' => $ffuvalue['nummer'], 'wert' => $ffuvalue['wert']); - } - } - } - - $data[$i]['typ'] = $tmp->GetTyp(); - $data[$i]['kategoriename'] = $tmp->GetTyp(); - if(strpos($data[$i]['typ'], '_kat')) - { - $data[$i]['kategoriename'] = $this->app->DB->Select("SELECT bezeichnung FROM artikelkategorien WHERE id = '".(int)str_replace('_kat','',$data[$i]['typ'])."' LIMIT 1"); - } - - $kategorienuebertragen = $shopexportarr['kategorienuebertragen'];//$this->app->DB->Select("SELECT kategorienuebertragen FROM shopexport WHERE id = '$id' LIMIT 1"); - if(!empty($kategorienuebertragen) && !empty($loadElements['categories'])) - { - $kategorienbaum = null; - /** @var Onlineshops $onlineShopObj */ - $onlineShopObj = $this->app->loadModule('onlineshops'); - $categoryRootId = 0; - if(!empty($onlineShopObj) && method_exists($onlineShopObj, 'getJsonSettings')) { - $categoryRootId = (int)$onlineShopObj->getJsonSettings($id, 'category_root_id'); - } - $this->app->erp->GetKategorienbaum($kategorienbaum, $categoryRootId, 0, $id); - if(!empty($kategorienbaum)) - { - $kategorien = $this->app->DB->SelectArr("SELECT ak.id, ak.bezeichnung FROM `artikelbaum_artikel` aa INNER JOIN `artikelkategorien` ak ON aa.kategorie = ak.id AND ak.geloescht <> 1 AND aa.artikel = '$artikel' ORDER by ak.bezeichnung"); - if($kategorien) - { - foreach($kategorien as $v) - { - $katid[$v['id']] = true; + $ret = []; + $shopkategorien = $this->app->DB->SelectArr("SELECT * FROM shopexport_kategorien WHERE shop = '$shopId' AND extparent = '$parent' AND extid <> '' ORDER BY extsort"); + if ($shopkategorien) { + foreach ($shopkategorien as $v) { + $ret[] = $v; + $subkategorien = $this->getShopKatgeorien($shopId, $v['extid'], $lvl + 1); + if (!empty($subkategorien)) { + foreach ($subkategorien as $v2) { + $ret[] = $v2; + } + } } - } - if(!empty($katid)) - { - foreach($kategorienbaum as $v) - { - $data[$i]['kompletter_kategorienbaum'][] = array('name'=>$v['bezeichnung'],'parent'=>$v['parent'],'id'=>$v['id'],'lvl'=>$v['lvl'],'extid'=>$v['extid']); - if(isset($katid[$v['id']])) - { - $data[$i]['kategorien'][] = array('name'=>$v['bezeichnung'],'parent'=>$v['parent'],'id'=>$v['id'],'lvl'=>$v['lvl'],'extid'=>$v['extid']); - } - } - } } - } - $eigenschaftenuebertragen = $shopexportarr['eigenschaftenuebertragen'];//$this->app->DB->Select("SELECT eigenschaftenuebertragen FROM shopexport WHERE id = '$id' LIMIT 1"); - if(!empty($eigenschaftenuebertragen) && !empty($loadElements['properties'])) { - $eigenschaften = $this->app->DB->SelectArr("SELECT e.name, ew.wert FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften + return $ret; + } + + /** + * @param int $id + * @param array $artikel_arr + * @param string|array $extnummer + * @param bool $nurlager + * + * @return mixed|null + * @throws Exception + */ + public function RemoteSendArticleList($id, $artikel_arr, $extnummer = '', $nurlager = false) { + if (!class_exists('ObjGenArtikel') && + is_file(dirname(__DIR__) . '/objectapi/mysql/_gen/object.gen.artikel.php')) { + include_once dirname(__DIR__) . '/objectapi/mysql/_gen/object.gen.artikel.php'; + } + $shopexportarr = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id='$id' LIMIT 1"); + $artikelexport = $shopexportarr['artikelexport']; + + $loadElements = [ + 'foreign_numbers' => true, + 'article_descriptions' => true, + 'translations' => true, + 'categories' => true, + 'properties' => true, + 'pictures' => true, + 'cross_selling' => true, + 'bulk_prices' => true, + 'standard_price' => true, + 'variants' => true, + 'free_fields' => true, + ]; + + if ( + ($nurlager || empty($artikelexport)) && !empty($shopexportarr['modulename']) && !is_file(dirname(__DIR__) . '/pages/' . $shopexportarr['modulename'] . '_custom.php') + ) { + $elementsNotNeededByModule = ShopimporterBase::storageNotNeededElements($shopexportarr['modulename']); + foreach ($elementsNotNeededByModule as $element) { + $loadElements[$element] = false; + } + } + + //$lagerexport = $shopexportarr['lagerexport']; + $lagergrundlage = $shopexportarr['lagergrundlage']; + $shopbilderuebertragen = $shopexportarr['shopbilderuebertragen']; + $projekt = (int) $shopexportarr['projekt']; + $projektlager = $this->app->DB->Select("SELECT id FROM projekt WHERE id = $projekt AND projektlager = 1 LIMIT 1"); + $tmp = new ObjGenArtikel($this->app); + $cartikel_arr = !empty($artikel_arr) ? count($artikel_arr) : 0; + + for ($i = 0; $i < $cartikel_arr; $i++) { + + $artikel = $artikel_arr[$i]; + $lagerexport = $this->app->erp->GetArtikelShopEinstellung('autolagerlampe', $artikel, $shopexportarr); + $tmp->Select($artikel); + $data[$i] = ['artikel' => $artikel, 'artikelid' => $artikel]; + $data[$i]['nummer'] = $tmp->GetNummer(); + $projekt = $tmp->GetProjekt(); + if (is_array($extnummer) && (!empty($extnummer) ? count($extnummer) : 0) > $i && !empty($extnummer[$i]) && trim($extnummer[$i]) != '') { + if ($data[$i]['nummer'] != trim($extnummer[$i])) { + $data[$i]['fremdnummer'] = trim($extnummer[$i]); + } + } + + $data[$i]['inaktiv'] = $tmp->GetInaktiv(); + + if ($tmp->GetIntern_Gesperrt() == '1') { + $data[$i]['inaktiv'] = 1; + } + + $data[$i]['name_de'] = $tmp->GetName_De(); + $data[$i]['name_en'] = $tmp->GetName_En(); + $data[$i]['einheit'] = $tmp->GetEinheit(); + $data[$i]['hersteller'] = $tmp->GetHersteller(); + $data[$i]['herstellernummer'] = $tmp->GetHerstellernummer(); + $data[$i]['ean'] = $tmp->GetEan(); + if (!empty($loadElements['foreign_numbers'])) { + $data[$i]['artikelnummer_fremdnummern'] = $this->app->DB->SelectArr("SELECT * FROM artikelnummer_fremdnummern WHERE artikel = '" . $tmp->GetId() . "' AND shopid = '$id' AND aktiv = '1' AND nummer <> '' ORDER BY bezeichnung = 'SHOPID' DESC"); + if (!empty($data[$i]['artikelnummer_fremdnummern'])) { + foreach ($data[$i]['artikelnummer_fremdnummern'] as $fkey => $fval) { + $data[$i]['artikelnummer_fremdnummern'][$fkey]['nummer'] = trim($fval['nummer']); + } + } + } + + if (!empty($loadElements['article_descriptions'])) { + $data[$i]['kurztext_de'] = $tmp->GetKurztext_De(); + $data[$i]['kurztext_en'] = $tmp->GetKurztext_En(); + $data[$i]['anabregs_text'] = htmlspecialchars($tmp->GetAnabregs_Text(), ENT_QUOTES); + $data[$i]['anabregs_text_en'] = htmlspecialchars($tmp->GetAnabregs_Text_En(), ENT_QUOTES); + $data[$i]['beschreibung_de'] = $tmp->GetBeschreibung_De(); + $data[$i]['beschreibung_en'] = $tmp->GetBeschreibung_En(); + $data[$i]['uebersicht_de'] = htmlspecialchars($tmp->GetUebersicht_De(), ENT_QUOTES); + $data[$i]['uebersicht_en'] = htmlspecialchars($tmp->GetUebersicht_En(), ENT_QUOTES); + $data[$i]['herkunftsland'] = $tmp->GetHerkunftsland(); + + $data[$i]['texteuebertragen'] = $shopexportarr['texteuebertragen']; + + if (method_exists($tmp, 'GetMetadescription_De')) { + $data[$i]['metadescription_de'] = $tmp->GetMetadescription_De(); + } + if (method_exists($tmp, 'GetMetadescription_En')) { + $data[$i]['metadescription_en'] = $tmp->GetMetadescription_En(); + } + if (method_exists($tmp, 'GetMetakeywords_De')) { + $data[$i]['metakeywords_de'] = $tmp->GetMetakeywords_De(); + } + if (method_exists($tmp, 'GetMetakeywords_En')) { + $data[$i]['metakeywords_en'] = $tmp->GetMetakeywords_En(); + } + if (method_exists($tmp, 'GetMetatitle_De')) { + $data[$i]['metatitle_de'] = $tmp->GetMetatitle_De(); + } + if (method_exists($tmp, 'GetMetatitle_En')) { + $data[$i]['metatitle_en'] = $tmp->GetMetatitle_En(); + } + } + if ($tmp->GetVariante()) { + $variante_von = $tmp->GetVariante_Von(); + if ($variante_von) { + $tmp_2 = new ObjGenArtikel($this->app); + $tmp_2->Select($variante_von); + if ($data[$i]['kurztext_de'] == '') { + $data[$i]['kurztext_de'] = $tmp_2->GetKurztext_De(); + } + if ($data[$i]['kurztext_en'] == '') { + $data[$i]['kurztext_en'] = $tmp_2->GetKurztext_En(); + } + if ($data[$i]['beschreibung_de'] == '') { + $data[$i]['beschreibung_de'] = $tmp_2->GetBeschreibung_De(); + } + if ($data[$i]['beschreibung_en'] == '') { + $data[$i]['beschreibung_en'] = $tmp_2->GetBeschreibung_En(); + } + if ($data[$i]['uebersicht_de'] == '') { + $data[$i]['uebersicht_de'] = htmlspecialchars($tmp_2->GetUebersicht_De(), ENT_QUOTES); + } + if ($data[$i]['uebersicht_en'] == '') { + $data[$i]['uebersicht_en'] = htmlspecialchars($tmp_2->GetUebersicht_En(), ENT_QUOTES); + } + } + } + + if ($data[$i]['uebersicht_de'] == '' && $data[$i]['beschreibung_de'] == '' && $data[$i]['kurztext_de'] == '') { + $data[$i]['uebersicht_de'] = $data[$i]['anabregs_text']; + } + + $data[$i]['links_de'] = $tmp->GetLinks_De(); + $data[$i]['altersfreigabe'] = $tmp->GetAltersfreigabe(); + $data[$i]['links_en'] = $tmp->GetLinks_En(); + $data[$i]['startseite_de'] = $tmp->GetStartseite_De(); + $data[$i]['startseite_en'] = $tmp->GetStartseite_En(); + $data[$i]['restmenge'] = $this->app->erp->GetArtikelShopEinstellung('restmenge', $artikel, $shopexportarr); + $data[$i]['startseite'] = $tmp->GetStartseite(); + $data[$i]['standardbild'] = $tmp->GetStandardbild(); + $data[$i]['herstellerlink'] = $tmp->GetHerstellerlink(); + $data[$i]['herstellernummer'] = $tmp->GetHerstellernummer(); + $data[$i]['hersteller'] = $tmp->GetHersteller(); + $data[$i]['lieferzeit'] = $tmp->GetLieferzeit(); + $data[$i]['lieferzeitmanuell'] = $this->app->erp->GetArtikelShopEinstellung('lieferzeitmanuell', $artikel, $shopexportarr); + $data[$i]['gewicht'] = $tmp->GetGewicht(); + $data[$i]['laenge'] = $tmp->GetLaenge(); + $data[$i]['breite'] = $tmp->GetBreite(); + $data[$i]['hoehe'] = $tmp->GetHoehe(); + + $data[$i]['wichtig'] = $tmp->GetWichtig(); + $data[$i]['porto'] = $tmp->GetPorto(); + $data[$i]['gesperrt'] = $tmp->GetGesperrt(); + $data[$i]['sperrgrund'] = $tmp->GetSperrgrund(); + $data[$i]['gueltigbis'] = $tmp->GetGueltigbis(); + $data[$i]['umsatzsteuer'] = $tmp->GetUmsatzsteuer(); + if ($data[$i]['umsatzsteuer'] !== 'ermaessigt' && $data[$i]['umsatzsteuer'] !== 'befreit') { + $data[$i]['umsatzsteuer'] = "normal"; + } + $data[$i]['ausverkauft'] = $tmp->GetAusverkauft(); + $data[$i]['variante'] = $tmp->GetVariante(); + $data[$i]['variante_von_id'] = $tmp->GetVariante_Von(); + $data[$i]['variantevon'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='" . $tmp->GetVariante_Von() . "' LIMIT 1"); + $data[$i]['variantevon_fremdnummer'] = trim($this->app->DB->Select("SELECT nummer FROM `artikelnummer_fremdnummern` WHERE shopid = '$id' AND aktiv = 1 AND artikel = '" . $tmp->GetVariante_Von() . "' AND trim(nummer) <> '' ORDER BY bezeichnung = 'SHOPID' DESC LIMIT 1")); + if ($data[$i]['variantevon_fremdnummer'] == '') { + unset($data[$i]['variantevon_fremdnummer']); + } + //$data[$i]['pseudopreis'] = $tmp->GetPseudopreis(); + $data[$i]['pseudopreis'] = $this->app->erp->GetArtikelShopEinstellung('pseudopreis', $artikel, $shopexportarr); + $data[$i]['keinrabatterlaubt'] = $tmp->GetKeinrabatterlaubt(); + $data[$i]['einkaufspreis'] = $this->app->erp->GetEinkaufspreis($artikel, 1); + //$data[$i]['pseudolager'] = $tmp->GetPseudolager(); + $data[$i]['pseudolager'] = $this->app->erp->GetArtikelShopEinstellung('pseudolager', $artikel, $shopexportarr); + $this->app->erp->RunHook('remote_send_article_list_pseudostorage', 3, $id, $artikel, $data[$i]['pseudolager']); + if (is_numeric($data[$i]['pseudolager']) && $data[$i]['pseudolager'] < 0) { + $data[$i]['pseudolager'] = 0; + } + $data[$i]['downloadartikel'] = $tmp->GetDownloadartikel(); + $data[$i]['zolltarifnummer'] = $tmp->GetZolltarifnummer(); + $preisgruppe = $this->app->DB->Select("SELECT s.preisgruppe FROM shopexport s INNER JOIN gruppen g ON s.preisgruppe = g.id AND g.aktiv = 1 WHERE s.id='$id' LIMIT 1"); + + if (empty($loadElements['free_fields'])) { + $freifelder = null; + } else { + $freifelder = $this->app->DB->SelectArr("SELECT freifeld_wawi, freifeld_shop FROM shopexport_freifelder WHERE shop = '$id' AND aktiv = 1 AND freifeld_wawi <> '' AND freifeld_shop <> ''"); + } + if ($freifelder) { + /** + * @deprecated 20.1 + * AP + * Konstrunktion 'freifeld_Mappingname -> Wert' wird ersetzt durch 'Freifelder-> DE -> Mappingname -> Wert' + */ + foreach ($freifelder as $freifeld) { + if (method_exists($tmp, 'Get' . ucfirst($freifeld['freifeld_wawi']))) { + $_funktionsname = 'Get' . ucfirst($freifeld['freifeld_wawi']); + $data[$i]['freifeld_' . $freifeld['freifeld_shop']] = $tmp->$_funktionsname(); + } + } + /** + * @deprecated Ende + */ + foreach ($freifelder as $freifeld) { + $_funktionsname = 'Get' . ucfirst($freifeld['freifeld_wawi']); + if (method_exists($tmp, $_funktionsname)) { + $data[$i]['freifelder']['DE'][$freifeld['freifeld_shop']] = $tmp->$_funktionsname(); + } + } + + //Freifeldübersetzungen + $freifelduebersetzungen = $this->app->DB->SelectArr("SELECT sf.freifeld_shop, af.sprache, af.nummer, af.wert FROM shopexport_freifelder sf JOIN artikel_freifelder af ON sf.freifeld_wawi = CONCAT('freifeld',af.nummer) WHERE sf.shop = '$id' AND af.artikel = '$artikel' AND sf.aktiv = 1 AND sf.freifeld_wawi <> '' AND sf.freifeld_shop <> '' AND af.wert <> ''"); + if (!empty($freifelduebersetzungen)) { + foreach ($freifelduebersetzungen as $ffukey => $ffuvalue) { + $data[$i]['freifelder'][$ffuvalue['sprache']][] = array('mapping' => $ffuvalue['freifeld_shop'], 'freifeldnummer' => $ffuvalue['nummer'], 'wert' => $ffuvalue['wert']); + } + } + } + + $data[$i]['typ'] = $tmp->GetTyp(); + $data[$i]['kategoriename'] = $tmp->GetTyp(); + if (strpos($data[$i]['typ'], '_kat')) { + $data[$i]['kategoriename'] = $this->app->DB->Select("SELECT bezeichnung FROM artikelkategorien WHERE id = '" . (int) str_replace('_kat', '', $data[$i]['typ']) . "' LIMIT 1"); + } + + $kategorienuebertragen = $shopexportarr['kategorienuebertragen']; //$this->app->DB->Select("SELECT kategorienuebertragen FROM shopexport WHERE id = '$id' LIMIT 1"); + if (!empty($kategorienuebertragen) && !empty($loadElements['categories'])) { + $kategorienbaum = null; + /** @var Onlineshops $onlineShopObj */ + $onlineShopObj = $this->app->loadModule('onlineshops'); + $categoryRootId = 0; + if (!empty($onlineShopObj) && method_exists($onlineShopObj, 'getJsonSettings')) { + $categoryRootId = (int) $onlineShopObj->getJsonSettings($id, 'category_root_id'); + } + $this->app->erp->GetKategorienbaum($kategorienbaum, $categoryRootId, 0, $id); + if (!empty($kategorienbaum)) { + $kategorien = $this->app->DB->SelectArr("SELECT ak.id, ak.bezeichnung FROM `artikelbaum_artikel` aa INNER JOIN `artikelkategorien` ak ON aa.kategorie = ak.id AND ak.geloescht <> 1 AND aa.artikel = '$artikel' ORDER by ak.bezeichnung"); + if ($kategorien) { + foreach ($kategorien as $v) { + $katid[$v['id']] = true; + } + } + if (!empty($katid)) { + foreach ($kategorienbaum as $v) { + $data[$i]['kompletter_kategorienbaum'][] = array('name' => $v['bezeichnung'], 'parent' => $v['parent'], 'id' => $v['id'], 'lvl' => $v['lvl'], 'extid' => $v['extid']); + if (isset($katid[$v['id']])) { + $data[$i]['kategorien'][] = array('name' => $v['bezeichnung'], 'parent' => $v['parent'], 'id' => $v['id'], 'lvl' => $v['lvl'], 'extid' => $v['extid']); + } + } + } + } + } + + $eigenschaftenuebertragen = $shopexportarr['eigenschaftenuebertragen']; //$this->app->DB->Select("SELECT eigenschaftenuebertragen FROM shopexport WHERE id = '$id' LIMIT 1"); + if (!empty($eigenschaftenuebertragen) && !empty($loadElements['properties'])) { + $eigenschaften = $this->app->DB->SelectArr("SELECT e.name, ew.wert FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften WHERE ew.artikel = '$artikel' AND e.name <> '' AND ew.wert <> '' AND e.geloescht <> 1"); - if(!empty($eigenschaften)) - { - $eigenschaftind = 0; - foreach($eigenschaften as $eigenschaft) - { - $eigenschaftind++; - $data[$i]['eigenschaften'][] = array('name'=>$eigenschaft['name'], 'values'=>$eigenschaft['wert']); - } - } + if (!empty($eigenschaften)) { + $eigenschaftind = 0; + foreach ($eigenschaften as $eigenschaft) { + $eigenschaftind++; + $data[$i]['eigenschaften'][] = array('name' => $eigenschaft['name'], 'values' => $eigenschaft['wert']); + } + } - $eigenschaftenuebersetzungen = $this->app->DB->SelectArr("SELECT language_from, language_to, property_from, property_to,property_value_from,property_value_to FROM article_property_translation WHERE article_id = '$artikel'"); - $data[$i]['eigenschaftenuebersetzungen'] = $eigenschaftenuebersetzungen; - } + $eigenschaftenuebersetzungen = $this->app->DB->SelectArr("SELECT language_from, language_to, property_from, property_to,property_value_from,property_value_to FROM article_property_translation WHERE article_id = '$artikel'"); + $data[$i]['eigenschaftenuebersetzungen'] = $eigenschaftenuebersetzungen; + } - //Bilder - $dateien = null; - if ($shopbilderuebertragen && !empty($loadElements['pictures'])) { - $dateien = $this->getImagesForArticle($artikel); - if (!empty($dateien)) { - $data[$i]['Dateien'] = []; - foreach ($dateien as $datei) { - $filename = $this->app->erp->GetDateiName($datei['id']); - $path_info = pathinfo($filename); - $data[$i]['Dateien'][] = array( - 'datei' => base64_encode($this->app->erp->GetDatei($datei['id'])), - 'filename' => $filename, - 'extension' => $path_info['extension'], - 'titel' => $datei['titel'], - 'beschreibung' => $datei['beschreibung'], - 'id' => $datei['id'], - 'version' => $datei['version'], - 'stichwort' => $datei['subjekt'], - 'extid' => $this->GetShopexportMappingExt($id, 'datei', $datei['id'])); - } - } - $dateiengeloescht = $this->app->DB->SelectArr("SELECT s.extid FROM shopexport_mapping s LEFT JOIN datei d ON s.intid = d.id AND d.geloescht = 0 WHERE s.shop = '$id' AND s.tabelle = 'datei' AND s.intid2 = '$artikel' AND isnull(d.id)"); - if (!empty($dateiengeloescht)) { - if (empty($dateien)) { - $data[$i]['Dateien'] = []; - } - foreach ($dateiengeloescht as $datei) { - $data[$i]['Dateien'][] = array('loeschen' => 1, 'extid' => $datei['extid']); - } - } - } + //Bilder + $dateien = null; + if ($shopbilderuebertragen && !empty($loadElements['pictures'])) { + $dateien = $this->getImagesForArticle($artikel); + if (!empty($dateien)) { + $data[$i]['Dateien'] = []; + foreach ($dateien as $datei) { + $filename = $this->app->erp->GetDateiName($datei['id']); + $path_info = pathinfo($filename); + $data[$i]['Dateien'][] = array( + 'datei' => base64_encode($this->app->erp->GetDatei($datei['id'])), + 'filename' => $filename, + 'extension' => $path_info['extension'], + 'titel' => $datei['titel'], + 'beschreibung' => $datei['beschreibung'], + 'id' => $datei['id'], + 'version' => $datei['version'], + 'stichwort' => $datei['subjekt'], + 'extid' => $this->GetShopexportMappingExt($id, 'datei', $datei['id'])); + } + } + $dateiengeloescht = $this->app->DB->SelectArr("SELECT s.extid FROM shopexport_mapping s LEFT JOIN datei d ON s.intid = d.id AND d.geloescht = 0 WHERE s.shop = '$id' AND s.tabelle = 'datei' AND s.intid2 = '$artikel' AND isnull(d.id)"); + if (!empty($dateiengeloescht)) { + if (empty($dateien)) { + $data[$i]['Dateien'] = []; + } + foreach ($dateiengeloescht as $datei) { + $data[$i]['Dateien'][] = array('loeschen' => 1, 'extid' => $datei['extid']); + } + } + } - if (method_exists($tmp, 'GetSteuer_Art_Produkt')) { - $data[$i]['steuer_art_produkt'] = $tmp->GetSteuer_Art_Produkt(); - } - if (method_exists($tmp, 'GetSteuer_Art_Produkt_Download')) { - $data[$i]['steuer_art_produkt_download'] = $tmp->GetSteuer_Art_Produkt_Download(); - } + if (method_exists($tmp, 'GetSteuer_Art_Produkt')) { + $data[$i]['steuer_art_produkt'] = $tmp->GetSteuer_Art_Produkt(); + } + if (method_exists($tmp, 'GetSteuer_Art_Produkt_Download')) { + $data[$i]['steuer_art_produkt_download'] = $tmp->GetSteuer_Art_Produkt_Download(); + } - $projekt = $tmp->GetProjekt(); - $projektlager = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND projektlager = 1 LIMIT 1"); - $data[$i]['anzahl_bilder'] = $this->app->DB->Select("SELECT COUNT(datei) FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$artikel'"); + $projekt = $tmp->GetProjekt(); + $projektlager = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '$projekt' AND projektlager = 1 LIMIT 1"); + $data[$i]['anzahl_bilder'] = $this->app->DB->Select("SELECT COUNT(datei) FROM datei_stichwoerter WHERE subjekt='Shopbild' AND objekt='Artikel' AND parameter='$artikel'"); - $bestandalternativartikel = method_exists($tmp, 'GetBestandalternativartikel') ? $tmp->GetBestandalternativartikel() : 0; + $bestandalternativartikel = method_exists($tmp, 'GetBestandalternativartikel') ? $tmp->GetBestandalternativartikel() : 0; - if ($bestandalternativartikel) { - $data[$i]['anzahl_lager'] = floor($this->app->erp->ArtikelAnzahlVerkaufbar($bestandalternativartikel, 0, $projektlager, $id, $lagergrundlage)); - $data[$i]['lagerkorrekturwert'] = floor(-($this->app->erp->ArtikelAnzahlVerkaufbar($bestandalternativartikel, 0, $projektlager, 0, $lagergrundlage) - $data[$i]['anzahl_lager'])); - } else { - $data[$i]['anzahl_lager'] = floor($this->app->erp->ArtikelAnzahlVerkaufbar($artikel, 0, $projektlager, $id, $lagergrundlage)); - $data[$i]['lagerkorrekturwert'] = floor(-($this->app->erp->ArtikelAnzahlVerkaufbar($artikel, 0, $projektlager, 0, $lagergrundlage) - $data[$i]['anzahl_lager'])); - } + if ($bestandalternativartikel) { + $data[$i]['anzahl_lager'] = floor($this->app->erp->ArtikelAnzahlVerkaufbar($bestandalternativartikel, 0, $projektlager, $id, $lagergrundlage)); + $data[$i]['lagerkorrekturwert'] = floor(-($this->app->erp->ArtikelAnzahlVerkaufbar($bestandalternativartikel, 0, $projektlager, 0, $lagergrundlage) - $data[$i]['anzahl_lager'])); + } else { + $data[$i]['anzahl_lager'] = floor($this->app->erp->ArtikelAnzahlVerkaufbar($artikel, 0, $projektlager, $id, $lagergrundlage)); + $data[$i]['lagerkorrekturwert'] = floor(-($this->app->erp->ArtikelAnzahlVerkaufbar($artikel, 0, $projektlager, 0, $lagergrundlage) - $data[$i]['anzahl_lager'])); + } - $data[$i]['pseudolager'] = $this->app->erp->GetArtikelShopEinstellung('pseudolager', $artikel, $shopexportarr); - $this->app->erp->RunHook('remote_send_article_list_pseudostorage', 3, $id, $artikel, $data[$i]['pseudolager']); - if (is_numeric($data[$i]['pseudolager']) && $data[$i]['pseudolager'] < 0) { - $data[$i]['pseudolager'] = 0; - $data[$i]['anzahl_lager'] = 0; - } elseif ($data[$i]['pseudolager'] > 0) { - $data[$i]['anzahl_lager'] = $data[$i]['pseudolager']; - } - if ($data[$i]['anzahl_lager'] < 0) { - $data[$i]['anzahl_lager'] = 0; - } - $data[$i]['autolagerlampe'] = $tmp->GetAutolagerlampe(); - if (method_exists($this->app->erp, 'GetArtikelShopEinstellung')) { - $data[$i]['autolagerlampe'] = $this->app->erp->GetArtikelShopEinstellung('autolagerlampe', $artikel, $shopexportarr); - } - if ($data[$i]['autolagerlampe'] != '1') { - $data[$i]['anzahl_lager'] = ''; - $data[$i]['pseudolager'] = ''; - $this->app->DB->Update( - sprintf( - 'UPDATE `artikel_onlineshops` + $data[$i]['pseudolager'] = $this->app->erp->GetArtikelShopEinstellung('pseudolager', $artikel, $shopexportarr); + $this->app->erp->RunHook('remote_send_article_list_pseudostorage', 3, $id, $artikel, $data[$i]['pseudolager']); + if (is_numeric($data[$i]['pseudolager']) && $data[$i]['pseudolager'] < 0) { + $data[$i]['pseudolager'] = 0; + $data[$i]['anzahl_lager'] = 0; + } elseif ($data[$i]['pseudolager'] > 0) { + $data[$i]['anzahl_lager'] = $data[$i]['pseudolager']; + } + if ($data[$i]['anzahl_lager'] < 0) { + $data[$i]['anzahl_lager'] = 0; + } + $data[$i]['autolagerlampe'] = $tmp->GetAutolagerlampe(); + if (method_exists($this->app->erp, 'GetArtikelShopEinstellung')) { + $data[$i]['autolagerlampe'] = $this->app->erp->GetArtikelShopEinstellung('autolagerlampe', $artikel, $shopexportarr); + } + if ($data[$i]['autolagerlampe'] != '1') { + $data[$i]['anzahl_lager'] = ''; + $data[$i]['pseudolager'] = ''; + $this->app->DB->Update( + sprintf( + 'UPDATE `artikel_onlineshops` SET `storage_cache` = NULL, `pseudostorage_cache` = NULL WHERE `artikel` = %d AND `shop` = %d', - $artikel, $id - ) - ); - } else { - $this->app->DB->Update( - sprintf( - 'UPDATE `artikel_onlineshops` + $artikel, $id + ) + ); + } else { + $this->app->DB->Update( + sprintf( + 'UPDATE `artikel_onlineshops` SET `storage_cache` = %d, `pseudostorage_cache` = %s WHERE `artikel` = %d AND `shop` = %d', - $data[$i]['anzahl_lager'], - !isset($data[$i]['pseudolager']) || !is_numeric($data[$i]['pseudolager']) ? 'NULL' : $data[$i]['pseudolager'], - $artikel, - $id - ) - ); - } + $data[$i]['anzahl_lager'], + !isset($data[$i]['pseudolager']) || !is_numeric($data[$i]['pseudolager']) ? 'NULL' : $data[$i]['pseudolager'], + $artikel, + $id + ) + ); + } - $projekt = $shopexportarr['projekt'];// $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id='$id' LIMIT 1"); - if (!empty($shopexportarr['crosssellingartikeluebertragen']) && !empty($loadElements['cross_selling'])) { - //if($this->app->DB->Select("SELECT crosssellingartikeluebertragen FROM shopexport WHERE id = '$id' LIMIT 1")){ - $data[$i]['crosssellingartikel'] = $this->app->DB->SelectArr("SELECT a.id, a.nummer, ak.bezeichnung as kategorie, a.name_de, a.name_en, ca.art, ca.gegenseitigzuweisen, af.nummer AS fremdnummer + $projekt = $shopexportarr['projekt']; // $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id='$id' LIMIT 1"); + if (!empty($shopexportarr['crosssellingartikeluebertragen']) && !empty($loadElements['cross_selling'])) { + //if($this->app->DB->Select("SELECT crosssellingartikeluebertragen FROM shopexport WHERE id = '$id' LIMIT 1")){ + $data[$i]['crosssellingartikel'] = $this->app->DB->SelectArr("SELECT a.id, a.nummer, ak.bezeichnung as kategorie, a.name_de, a.name_en, ca.art, ca.gegenseitigzuweisen, af.nummer AS fremdnummer FROM crossselling_artikel ca JOIN artikel a ON ca.crosssellingartikel = a.id LEFT JOIN artikelkategorien ak ON CONCAT(ak.id,'_kat') = a.typ @@ -1587,14 +1436,12 @@ class Remote WHERE ca.artikel='" . $tmp->GetId() . "' AND (ca.shop='$id' OR ca.shop='0') GROUP BY ca.crosssellingartikel, ca.art"); - if (empty($data[$i]['crosssellingartikel'])) { - $data[$i]['crosssellingartikel'] = []; - } + if (empty($data[$i]['crosssellingartikel'])) { + $data[$i]['crosssellingartikel'] = []; + } - - $sql = - - "SELECT a.id, a.nummer, ak.bezeichnung as kategorie, a.name_de, a.name_en, ca.art, ca.gegenseitigzuweisen, af.nummer AS fremdnummer + + $sql = "SELECT a.id, a.nummer, ak.bezeichnung as kategorie, a.name_de, a.name_en, ca.art, ca.gegenseitigzuweisen, af.nummer AS fremdnummer FROM crossselling_artikel ca JOIN artikel a ON ca.artikel = a.id LEFT JOIN artikelkategorien ak ON CONCAT(ak.id,'_kat') = a.typ @@ -1603,139 +1450,139 @@ class Remote WHERE ca.crosssellingartikel='" . $tmp->GetId() . "' AND ca.gegenseitigzuweisen=1 AND (ca.shop='$id' OR ca.shop='0') GROUP BY ca.artikel, ca.art"; - $gegenseitigzugewiesen = $this->app->DB->SelectArr($sql); + $gegenseitigzugewiesen = $this->app->DB->SelectArr($sql); - if (!empty($gegenseitigzugewiesen)) { - foreach ($gegenseitigzugewiesen as $gegenseitigzugewiesenercrosssellingartikel) { - $data[$i]['crosssellingartikel'][] = $gegenseitigzugewiesenercrosssellingartikel; - } - } - } - - if (!empty($loadElements['article_descriptions']) && $this->app->erp->ModulVorhanden('artikel_texte')) { - $sprachen = ['de', 'en']; - foreach ($sprachen as $sprache) { - $query = sprintf("SELECT * FROM artikel_texte WHERE shop=%d AND sprache='%s' AND artikel=%d AND aktiv=1 LIMIT 1", - $id, strtoupper($sprache), $artikel); - $ersetzeStandardbeschreibung = $this->app->DB->SelectRow($query); - if (!empty($ersetzeStandardbeschreibung)) { - $data[$i]['name_' . $sprache] = $ersetzeStandardbeschreibung['name']; - $data[$i]['beschreibung_' . $sprache] = $ersetzeStandardbeschreibung['beschreibung_online']; - $data[$i]['kurztext_' . $sprache] = $ersetzeStandardbeschreibung['kurztext']; - $data[$i]['metadescription_' . $sprache] = $ersetzeStandardbeschreibung['meta_description']; - $data[$i]['metakeywords_' . $sprache] = $ersetzeStandardbeschreibung['meta_keywords']; - $data[$i]['metatitle_' . $sprache] = $ersetzeStandardbeschreibung['meta_title']; - if ($sprache === 'de') { - $data[$i]['anabregs_text'] = $ersetzeStandardbeschreibung['beschreibung']; - } else { - $data[$i]['anabregs_text_en'] = $ersetzeStandardbeschreibung['beschreibung']; + if (!empty($gegenseitigzugewiesen)) { + foreach ($gegenseitigzugewiesen as $gegenseitigzugewiesenercrosssellingartikel) { + $data[$i]['crosssellingartikel'][] = $gegenseitigzugewiesenercrosssellingartikel; + } + } } - } - } - } - if(!empty($loadElements['standard_price'])){ + if (!empty($loadElements['article_descriptions']) && $this->app->erp->ModulVorhanden('artikel_texte')) { + $sprachen = ['de', 'en']; + foreach ($sprachen as $sprache) { + $query = sprintf("SELECT * FROM artikel_texte WHERE shop=%d AND sprache='%s' AND artikel=%d AND aktiv=1 LIMIT 1", + $id, strtoupper($sprache), $artikel); + $ersetzeStandardbeschreibung = $this->app->DB->SelectRow($query); + if (!empty($ersetzeStandardbeschreibung)) { + $data[$i]['name_' . $sprache] = $ersetzeStandardbeschreibung['name']; + $data[$i]['beschreibung_' . $sprache] = $ersetzeStandardbeschreibung['beschreibung_online']; + $data[$i]['kurztext_' . $sprache] = $ersetzeStandardbeschreibung['kurztext']; + $data[$i]['metadescription_' . $sprache] = $ersetzeStandardbeschreibung['meta_description']; + $data[$i]['metakeywords_' . $sprache] = $ersetzeStandardbeschreibung['meta_keywords']; + $data[$i]['metatitle_' . $sprache] = $ersetzeStandardbeschreibung['meta_title']; + if ($sprache === 'de') { + $data[$i]['anabregs_text'] = $ersetzeStandardbeschreibung['beschreibung']; + } else { + $data[$i]['anabregs_text_en'] = $ersetzeStandardbeschreibung['beschreibung']; + } + } + } + } - $priceInformation = $this->app->DB->SelectArr("SELECT v.preis AS preis, v.waehrung + if (!empty($loadElements['standard_price'])) { + + $priceInformation = $this->app->DB->SelectArr("SELECT v.preis AS preis, v.waehrung FROM `verkaufspreise` AS `v` WHERE v.artikel = '{$artikel}' AND v.ab_menge = 1 AND v.geloescht = 0 AND v.art != 'Gruppe' AND (v.objekt = 'Standard' OR v.objekt = '') AND (v.adresse = '0' OR v.adresse = '') AND (v.gueltig_bis >= NOW() OR v.gueltig_bis = '0000-00-00') ORDER BY v.preis DESC LIMIT 1"); - $priceInformation = reset($priceInformation); - $defaultPrice = $priceInformation['preis']; - $defaultCurrency = $priceInformation['waehrung'] ?: 'EUR'; - if($preisgruppe && method_exists($this->app->erp, 'GetVerkaufspreisGruppe')){ - $defaultCurrency = 'EUR'; //the follow up function imply EUR as the default currency - $defaultPrice = $this->app->erp->GetVerkaufspreisGruppe($artikel, 1, $preisgruppe); - } + $priceInformation = reset($priceInformation); + $defaultPrice = $priceInformation['preis']; + $defaultCurrency = $priceInformation['waehrung'] ?: 'EUR'; + if ($preisgruppe && method_exists($this->app->erp, 'GetVerkaufspreisGruppe')) { + $defaultCurrency = 'EUR'; //the follow up function imply EUR as the default currency + $defaultPrice = $this->app->erp->GetVerkaufspreisGruppe($artikel, 1, $preisgruppe); + } - $data[$i]['waehrung'] = $defaultCurrency; - $data[$i]['preis'] = $defaultPrice; + $data[$i]['waehrung'] = $defaultCurrency; + $data[$i]['preis'] = $defaultPrice; - if(!empty($tmp->GetSteuersatz()) && $tmp->GetSteuersatz() != -1){ - $data[$i]['steuersatz'] = (float)$tmp->GetSteuersatz(); - }elseif($data[$i]['umsatzsteuer'] === 'ermaessigt'){ - $data[$i]['steuersatz'] = (float)$this->app->erp->GetStandardSteuersatzErmaessigt($projekt); - }elseif($data[$i]['umsatzsteuer'] === 'befreit'){ - $data[$i]['steuersatz'] = 0; - }else{ - $data[$i]['steuersatz'] = (float)$this->app->erp->GetStandardSteuersatzNormal($projekt); - } + if (!empty($tmp->GetSteuersatz()) && $tmp->GetSteuersatz() != -1) { + $data[$i]['steuersatz'] = (float) $tmp->GetSteuersatz(); + } elseif ($data[$i]['umsatzsteuer'] === 'ermaessigt') { + $data[$i]['steuersatz'] = (float) $this->app->erp->GetStandardSteuersatzErmaessigt($projekt); + } elseif ($data[$i]['umsatzsteuer'] === 'befreit') { + $data[$i]['steuersatz'] = 0; + } else { + $data[$i]['steuersatz'] = (float) $this->app->erp->GetStandardSteuersatzNormal($projekt); + } - $steuer = ($data[$i]['steuersatz'] + 100) / 100.0; + $steuer = ($data[$i]['steuersatz'] + 100) / 100.0; - if(!empty($shopexportarr['staffelpreiseuebertragen']) && !empty($loadElements['bulk_prices'])){ - $preisgruppenzusatz = " AND v.art = 'Kunde' AND v.adresse = 0"; - if(!empty($preisgruppe)){ - $preisgruppenzusatz = " AND v.gruppe = '$preisgruppe'"; - } - $query = sprintf("SELECT v.adresse, g.name, g.kennziffer, v.ab_menge, v.preis, g.id, v.waehrung + if (!empty($shopexportarr['staffelpreiseuebertragen']) && !empty($loadElements['bulk_prices'])) { + $preisgruppenzusatz = " AND v.art = 'Kunde' AND v.adresse = 0"; + if (!empty($preisgruppe)) { + $preisgruppenzusatz = " AND v.gruppe = '$preisgruppe'"; + } + $query = sprintf("SELECT v.adresse, g.name, g.kennziffer, v.ab_menge, v.preis, g.id, v.waehrung FROM `verkaufspreise` AS `v` LEFT JOIN `gruppen` AS `g` on v.gruppe = g.id WHERE v.artikel = %d AND v.geloescht = 0 AND (v.gueltig_bis = '0000-00-00' OR curdate() <= v.gueltig_bis OR isnull(v.gueltig_bis)) AND v.adresse = 0 AND (v.gueltig_ab = '0000-00-00' OR curdate() >= v.gueltig_ab OR isnull(v.gueltig_ab)) %s ORDER by g.id, v.ab_menge", $artikel, $preisgruppenzusatz); - $standardstaffelpreise = $this->app->DB->SelectArr($query); - $data[$i]['staffelpreise_standard'] = []; - if(!empty($standardstaffelpreise)){ - foreach ($standardstaffelpreise as $staffelpreis) { - $data[$i]['staffelpreise_standard'][] = [ - 'ab_menge' => $staffelpreis['ab_menge'], - 'preis' => $staffelpreis['preis'], - 'bruttopreis' => $staffelpreis['preis'] * $steuer, - 'waehrung' => $staffelpreis['waehrung'] ?: 'EUR' - ]; - } - } + $standardstaffelpreise = $this->app->DB->SelectArr($query); + $data[$i]['staffelpreise_standard'] = []; + if (!empty($standardstaffelpreise)) { + foreach ($standardstaffelpreise as $staffelpreis) { + $data[$i]['staffelpreise_standard'][] = [ + 'ab_menge' => $staffelpreis['ab_menge'], + 'preis' => $staffelpreis['preis'], + 'bruttopreis' => $staffelpreis['preis'] * $steuer, + 'waehrung' => $staffelpreis['waehrung'] ?: 'EUR' + ]; + } + } - $query = sprintf("SELECT a.name AS `kundenname`, a.email, v.adresse, v.ab_menge, v.preis, v.waehrung + $query = sprintf("SELECT a.name AS `kundenname`, a.email, v.adresse, v.ab_menge, v.preis, v.waehrung FROM `verkaufspreise` AS `v` JOIN `adresse` AS `a` ON v.adresse = a.id AND v.art LIKE 'Kunde' WHERE v.`artikel` = %d AND v.geloescht = 0 AND (v.gueltig_bis = '0000-00-00' OR curdate() <= v.gueltig_bis OR isnull(v.gueltig_bis)) AND (v.gueltig_ab = '0000-00-00' OR curdate() >= v.gueltig_ab OR isnull(v.gueltig_ab)) ORDER by v.adresse, v.ab_menge", $artikel); - $staffelpreisekunden = $this->app->DB->SelectArr($query); - if(!empty($staffelpreisekunden)){ - foreach ($staffelpreisekunden as $staffelpreis) { - $data[$i]['staffelpreise_kunden'][] = [ - 'ab_menge' => $staffelpreis['ab_menge'], - 'preis' => $staffelpreis['preis'], - 'bruttopreis' => $staffelpreis['preis'] * $steuer, - 'waehrung' => $staffelpreis['waehrung'] ?: 'EUR', - 'email' => $staffelpreis['email'], - 'kundenname' => $staffelpreis['kundenname'] - ]; - } - } + $staffelpreisekunden = $this->app->DB->SelectArr($query); + if (!empty($staffelpreisekunden)) { + foreach ($staffelpreisekunden as $staffelpreis) { + $data[$i]['staffelpreise_kunden'][] = [ + 'ab_menge' => $staffelpreis['ab_menge'], + 'preis' => $staffelpreis['preis'], + 'bruttopreis' => $staffelpreis['preis'] * $steuer, + 'waehrung' => $staffelpreis['waehrung'] ?: 'EUR', + 'email' => $staffelpreis['email'], + 'kundenname' => $staffelpreis['kundenname'] + ]; + } + } - $query = sprintf("SELECT g.name, g.kennziffer, v.ab_menge, v.preis, g.id, v.waehrung, sk.extgruppename + $query = sprintf("SELECT g.name, g.kennziffer, v.ab_menge, v.preis, g.id, v.waehrung, sk.extgruppename FROM `verkaufspreise` AS `v` JOIN `gruppen` AS `g` on v.gruppe = g.id JOIN `shopexport_kundengruppen` AS `sk` ON sk.gruppeid = v.gruppe WHERE v.`artikel` = %d AND v.geloescht = 0 AND (v.gueltig_bis = '0000-00-00' OR curdate() <= v.gueltig_bis OR isnull(v.gueltig_bis)) AND v.art like 'Gruppe' AND v.gruppe <> '%s' AND sk.shopid = %d AND sk.aktiv = 1 AND (v.gueltig_ab = '0000-00-00' OR curdate() >= v.gueltig_ab OR isnull(v.gueltig_ab)) ORDER by g.id, v.ab_menge", $artikel, $preisgruppe, $id); - $staffelpreisegruppen = $this->app->DB->SelectArr($query); - if(!empty($staffelpreisegruppen)){ - foreach ($staffelpreisegruppen as $staffelpreis) { - $data[$i]['staffelpreise_gruppen'][] = [ - 'ab_menge' => $staffelpreis['ab_menge'], - 'preis' => $staffelpreis['preis'], - 'bruttopreis' => $staffelpreis['preis'] * $steuer, - 'waehrung' => $staffelpreis['waehrung'] ?: 'EUR', - 'kennziffer' => $staffelpreis['kennziffer'], - 'gruppenname' => $staffelpreis['name'], - 'gruppeextern' => $staffelpreis['extgruppename'] - ]; - } - } + $staffelpreisegruppen = $this->app->DB->SelectArr($query); + if (!empty($staffelpreisegruppen)) { + foreach ($staffelpreisegruppen as $staffelpreis) { + $data[$i]['staffelpreise_gruppen'][] = [ + 'ab_menge' => $staffelpreis['ab_menge'], + 'preis' => $staffelpreis['preis'], + 'bruttopreis' => $staffelpreis['preis'] * $steuer, + 'waehrung' => $staffelpreis['waehrung'] ?: 'EUR', + 'kennziffer' => $staffelpreis['kennziffer'], + 'gruppenname' => $staffelpreis['name'], + 'gruppeextern' => $staffelpreis['extgruppename'] + ]; + } + } - /** - * @deprecated 20.3 - * Staffelpreise werden gesondert uebergeben statt in einem sammelarray - */ - $staffelpreise = $this->app->DB->SelectArr(" + /** + * @deprecated 20.3 + * Staffelpreise werden gesondert uebergeben statt in einem sammelarray + */ + $staffelpreise = $this->app->DB->SelectArr(" SELECT a.name AS kundenname, a.email, v.adresse, g.name,g.kennziffer, v.ab_menge, v.preis, g.id, v.waehrung, art.umsatzsteuer FROM `verkaufspreise` AS v INNER JOIN artikel art ON v.artikel = art.id @@ -1744,63 +1591,62 @@ class Remote WHERE v.`artikel` = '$artikel' AND v.geloescht = 0 AND (v.gueltig_bis = '0000-00-00' OR curdate() <= v.gueltig_bis OR isnull(v.gueltig_bis)) AND (v.gueltig_ab = '0000-00-00' OR curdate() >= v.gueltig_ab OR isnull(v.gueltig_ab)) ORDER by g.id, ab_menge"); - if(!empty($staffelpreise)){ - foreach ($staffelpreise as $k => $v) { - if(empty($v['adresse'])){ - $data[$i]['staffelpreise'][] = array('ab_menge' => $v['ab_menge'], 'preis' => $v['preis'], 'bruttopreis' => $v['preis'] * $steuer, 'waehrung' => ($v['waehrung'] ? $v['waehrung'] : 'EUR')); - if($v['id']){ - $data[$i]['staffelpreise'][count($data[$i]['staffelpreise']) - 1]['gruppenkennziffer'] = $v['kennziffer']; - $data[$i]['staffelpreise'][count($data[$i]['staffelpreise']) - 1]['gruppenname'] = $v['name']; + if (!empty($staffelpreise)) { + foreach ($staffelpreise as $k => $v) { + if (empty($v['adresse'])) { + $data[$i]['staffelpreise'][] = array('ab_menge' => $v['ab_menge'], 'preis' => $v['preis'], 'bruttopreis' => $v['preis'] * $steuer, 'waehrung' => ($v['waehrung'] ? $v['waehrung'] : 'EUR')); + if ($v['id']) { + $data[$i]['staffelpreise'][count($data[$i]['staffelpreise']) - 1]['gruppenkennziffer'] = $v['kennziffer']; + $data[$i]['staffelpreise'][count($data[$i]['staffelpreise']) - 1]['gruppenname'] = $v['name']; + } + } + } + } + /** + * @deprecated Ende + */ + } + + + $data[$i]['bruttopreis'] = $data[$i]['preis'] * $steuer; + } + $data[$i]['checksum'] = $tmp->GetChecksum(); + if ($data[$i]['preis'] == '' && !empty($artikelexport) && !$nurlager) { + if ($lagerexport) { + $nurlager = true; + } else { + $this->app->erp->Systemlog( + 'Shopexport bei Artikel ' . $data[$i]['nummer'] . ' ' . $data[$i]['name_de'] . ' fehlgeschlagen, da Verkaufspreis fehlt.' + ); + $data[$i]['artikel'] = 'ignore'; } - } } - } - /** - * @deprecated Ende - */ - } + $steuerermaessigt = ($this->app->erp->GetStandardSteuersatzErmaessigt($projekt) + 100) / 100.0; + $steuernormal = ($this->app->erp->GetStandardSteuersatzNormal($projekt) + 100) / 100.0; + $steuermapping = [ + 'befreit' => 1, + 'ermaessigt' => $steuerermaessigt, + 'normal' => $steuernormal + ]; - $data[$i]['bruttopreis'] = $data[$i]['preis'] * $steuer; - } - $data[$i]['checksum'] = $tmp->GetChecksum(); - if ($data[$i]['preis'] == '' && !empty($artikelexport) && !$nurlager) { - if($lagerexport){ - $nurlager = true; - } else { - $this->app->erp->Systemlog( - 'Shopexport bei Artikel ' . $data[$i]['nummer'] . ' ' . $data[$i]['name_de'] . ' fehlgeschlagen, da Verkaufspreis fehlt.' - ); - $data[$i]['artikel'] = 'ignore'; - } - } + if (!empty($loadElements['variants']) && !empty($shopexportarr['variantenuebertragen']) && $this->app->erp->ModulVorhanden('matrixprodukt') && $tmp->GetMatrixprodukt()) { + $artfreifeld = ''; + for ($_i = 1; $_i <= 40; $_i++) { + $artfreifeld .= sprintf(' art.freifeld%d AS `freifeld%d`, ', $_i, $_i); + } + $varianten = null; - $steuerermaessigt = ($this->app->erp->GetStandardSteuersatzErmaessigt($projekt) + 100) / 100.0; - $steuernormal = ($this->app->erp->GetStandardSteuersatzNormal($projekt) + 100) / 100.0; - $steuermapping = [ - 'befreit' => 1, - 'ermaessigt' => $steuerermaessigt, - 'normal' => $steuernormal - ]; + $data[$i]['artikel_varianten'] = []; + $db = $this->app->Container->get('Database'); - if (!empty($loadElements['variants']) && !empty($shopexportarr['variantenuebertragen']) - && $this->app->erp->ModulVorhanden('matrixprodukt') && $tmp->GetMatrixprodukt()) { - $artfreifeld = ''; - for ($_i = 1; $_i <= 40; $_i++) { - $artfreifeld .= sprintf(' art.freifeld%d AS `freifeld%d`, ',$_i,$_i); - } - $varianten = null; + $offset = 0; + $eigenschaftind = 0; - $data[$i]['artikel_varianten'] = []; - $db = $this->app->Container->get('Database'); + $gruppenuebersetzung = []; + $gruppenwertuebersetzung = []; - $offset = 0; - $eigenschaftind = 0; - - $gruppenuebersetzung = []; - $gruppenwertuebersetzung = []; - - $query = sprintf('SELECT meoa.name AS wert,meoa.name_ext AS wert_ext, mega.name AS gruppe, mega.name_ext AS gruppe_ext + $query = sprintf('SELECT meoa.name AS wert,meoa.name_ext AS wert_ext, mega.name AS gruppe, mega.name_ext AS gruppe_ext FROM matrixprodukt_optionen_zu_artikel AS moza JOIN matrixprodukt_eigenschaftenoptionen_artikel AS meoa ON moza.option_id = meoa.id JOIN matrixprodukt_eigenschaftengruppen_artikel AS mega ON mega.id = meoa.gruppe @@ -1808,42 +1654,42 @@ class Remote WHERE art.variante_von=%d ANd art.geloescht=0 AND art.nummer <> "DEL" AND art.intern_gesperrt=0 GROUP BY mega.id, meoa.id ORDER BY SUM(POW(10,1-mega.sort) * meoa.sort) ASC', $artikel); - foreach ($db->yieldAll($query) as $matrixdaten) { - $data[$i]['matrix_varianten']['gruppen'][$matrixdaten['gruppe']][$matrixdaten['wert']] = true; + foreach ($db->yieldAll($query) as $matrixdaten) { + $data[$i]['matrix_varianten']['gruppen'][$matrixdaten['gruppe']][$matrixdaten['wert']] = true; - if (!empty($loadElements['translations'])) { - if (empty($gruppenuebersetzung[$matrixdaten['gruppe']])) { - $gruppennamen = $this->app->DB->SelectArr("SELECT + if (!empty($loadElements['translations'])) { + if (empty($gruppenuebersetzung[$matrixdaten['gruppe']])) { + $gruppennamen = $this->app->DB->SelectArr("SELECT IF(name_external_from<>'',name_external_from,name_from) AS name_from, IF(name_external_to<>'',name_external_to,name_to) AS name_to, language_to FROM `matrix_article_translation` WHERE name_from='" . $matrixdaten['gruppe'] . "' AND (project=0 OR project='$projekt')"); - $gruppenuebersetzung[$matrixdaten['gruppe']] = true; - if (!empty($gruppennamen)) { - foreach ($gruppennamen as $gruppenname) { - $data[$i]['matrix_varianten']['texte']['gruppen'][$gruppenname['language_to']][$gruppenname['name_from']] = $gruppenname['name_to']; - } - } - } - if (empty($gruppenwertuebersetzung[$matrixdaten['wert']])) { - $gruppenwerte = $this->app->DB->SelectArr("SELECT + $gruppenuebersetzung[$matrixdaten['gruppe']] = true; + if (!empty($gruppennamen)) { + foreach ($gruppennamen as $gruppenname) { + $data[$i]['matrix_varianten']['texte']['gruppen'][$gruppenname['language_to']][$gruppenname['name_from']] = $gruppenname['name_to']; + } + } + } + if (empty($gruppenwertuebersetzung[$matrixdaten['wert']])) { + $gruppenwerte = $this->app->DB->SelectArr("SELECT IF(maot.name_external_from<>'',maot.name_external_from,maot.name_from) AS `name_from`, IF(maot.name_external_to<>'',maot.name_external_to,maot.name_to) AS `name_to`, maot.language_to FROM `matrix_article_options_translation` AS `maot` WHERE maot.name_from='" . $this->app->DB->real_escape_string($matrixdaten['wert']) . "'"); - $gruppenwertuebersetzung[$matrixdaten['wert']] = true; - foreach ($gruppenwerte as $gruppenwert) { - $data[$i]['matrix_varianten']['texte']['werte'][$gruppenwert['language_to']][$gruppenwert['name_from']] = $gruppenwert['name_to']; - } - } - } - } + $gruppenwertuebersetzung[$matrixdaten['wert']] = true; + foreach ($gruppenwerte as $gruppenwert) { + $data[$i]['matrix_varianten']['texte']['werte'][$gruppenwert['language_to']][$gruppenwert['name_from']] = $gruppenwert['name_to']; + } + } + } + } - do { - unset($data[$i]['matrix_varianten']['artikel']); - unset($data[$i]['artikel_varianten']); - //if($this->app->DB->Select("SELECT variantenuebertragen FROM shopexport WHERE id = '$id' LIMIT 1")){ - $varianten = "SELECT art.pseudolager AS `pseudolager`, art.nummer AS `nummer`, art.inaktiv AS `inaktiv`, + do { + unset($data[$i]['matrix_varianten']['artikel']); + unset($data[$i]['artikel_varianten']); + //if($this->app->DB->Select("SELECT variantenuebertragen FROM shopexport WHERE id = '$id' LIMIT 1")){ + $varianten = "SELECT art.pseudolager AS `pseudolager`, art.nummer AS `nummer`, art.inaktiv AS `inaktiv`, art.id AS `artikel`, art.gewicht AS `gewicht`, art.zolltarifnummer AS `zolltarifnummer`, art.name_en AS `name_en`, $artfreifeld art.pseudopreis AS `pseudopreis`, art.lieferzeitmanuell AS `lieferzeitmanuell`, art.altersfreigabe AS `altersfreigabe`, @@ -1870,77 +1716,75 @@ class Remote GROUP BY art.id ORDER BY SUM(POW(10,1-mega.sort) * meoa.sort) ASC LIMIT 5000 OFFSET $offset"; - $offset += 5000; + $offset += 5000; - foreach ($db->yieldAll($varianten) as $eigenschaft) { - $eigenschaftind++; - $steuer = $steuermapping[$eigenschaft['umsatzsteuer']]; - if(!empty($eigenschaft['steuersatz']) && $eigenschaft['steuersatz'] != -1){ - $steuer = ($eigenschaft['steuersatz'] + 100) / 100; - } - if (empty($steuer)) { - $steuer = $steuernormal; - } - $matrixPseudoStorage = $eigenschaft['pseudolager']; - $this->app->erp->RunHook('remote_send_article_list_pseudostorage', 3, $id, $eigenschaft['artikel'], $matrixPseudoStorage); - if(is_numeric($matrixPseudoStorage) && $matrixPseudoStorage < 0) { - $matrixPseudoStorage = 0; - } - if($matrixStock < 0) { - $matrixStock = 0; - } - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][] = - array('zolltarifnummer' => $eigenschaft['zolltarifnummer'], 'gewicht' => $eigenschaft['gewicht'], - 'artikel' => $eigenschaft['artikel'], 'preis' => $eigenschaft['preis'], 'gesperrt' => $eigenschaft['gesperrt'], - 'nummer' => $eigenschaft['nummer'], 'lieferzeitmanuell' => $eigenschaft['lieferzeitmanuell'], - 'altersfreigabe' => $eigenschaft['altersfreigabe'], 'ean' => $eigenschaft['ean'], - 'lag' => $matrixStock, - 'pseudolager' => $matrixPseudoStorage, 'pseudopreis' => $eigenschaft['pseudopreis'], - 'restmenge' => $eigenschaft['restmenge'], 'steuersatz' => ($steuer - 1) * 100, 'umsatzsteuer' => $eigenschaft['umsatzsteuer'], - 'bruttopreis' => $eigenschaft['preis'] * $steuer, 'inaktiv' => $eigenschaft['inaktiv'], - 'name_de' => $eigenschaft['name_de'], 'name_en' => $eigenschaft['name_en'], - 'uebersicht_de' => $eigenschaft['uebersicht_de'], 'uebersicht_en' => $eigenschaft['uebersicht_en']); - if ($freifelder) { - foreach ($freifelder as $freifeld) { - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']]) - 1]['freifelder']['DE'][$freifeld['freifeld_shop']] = - $this->app->DB->Select('SELECT ' . $freifeld['freifeld_wawi'] . ' FROM artikel WHERE id=' . $eigenschaft['artikel']); - } + foreach ($db->yieldAll($varianten) as $eigenschaft) { + $eigenschaftind++; + $steuer = $steuermapping[$eigenschaft['umsatzsteuer']]; + if (!empty($eigenschaft['steuersatz']) && $eigenschaft['steuersatz'] != -1) { + $steuer = ($eigenschaft['steuersatz'] + 100) / 100; + } + if (empty($steuer)) { + $steuer = $steuernormal; + } + $matrixPseudoStorage = $eigenschaft['pseudolager']; + $this->app->erp->RunHook('remote_send_article_list_pseudostorage', 3, $id, $eigenschaft['artikel'], $matrixPseudoStorage); + if (is_numeric($matrixPseudoStorage) && $matrixPseudoStorage < 0) { + $matrixPseudoStorage = 0; + } + if ($matrixStock < 0) { + $matrixStock = 0; + } + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][] = array('zolltarifnummer' => $eigenschaft['zolltarifnummer'], 'gewicht' => $eigenschaft['gewicht'], + 'artikel' => $eigenschaft['artikel'], 'preis' => $eigenschaft['preis'], 'gesperrt' => $eigenschaft['gesperrt'], + 'nummer' => $eigenschaft['nummer'], 'lieferzeitmanuell' => $eigenschaft['lieferzeitmanuell'], + 'altersfreigabe' => $eigenschaft['altersfreigabe'], 'ean' => $eigenschaft['ean'], + 'lag' => $matrixStock, + 'pseudolager' => $matrixPseudoStorage, 'pseudopreis' => $eigenschaft['pseudopreis'], + 'restmenge' => $eigenschaft['restmenge'], 'steuersatz' => ($steuer - 1) * 100, 'umsatzsteuer' => $eigenschaft['umsatzsteuer'], + 'bruttopreis' => $eigenschaft['preis'] * $steuer, 'inaktiv' => $eigenschaft['inaktiv'], + 'name_de' => $eigenschaft['name_de'], 'name_en' => $eigenschaft['name_en'], + 'uebersicht_de' => $eigenschaft['uebersicht_de'], 'uebersicht_en' => $eigenschaft['uebersicht_en']); + if ($freifelder) { + foreach ($freifelder as $freifeld) { + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']]) - 1]['freifelder']['DE'][$freifeld['freifeld_shop']] = $this->app->DB->Select('SELECT ' . $freifeld['freifeld_wawi'] . ' FROM artikel WHERE id=' . $eigenschaft['artikel']); + } - //Freifeldübersetzungen - $freifelduebersetzungen = $this->app->DB->SelectArr("SELECT sf.freifeld_shop, af.sprache, af.nummer, af.wert FROM shopexport_freifelder sf JOIN artikel_freifelder af ON sf.freifeld_wawi = CONCAT('freifeld',af.nummer) WHERE sf.shop = '$id' AND af.artikel = '" . $eigenschaft['artikel'] . "' AND sf.aktiv = 1 AND sf.freifeld_wawi <> '' AND sf.freifeld_shop <> '' AND af.wert <> ''"); - if (!empty($freifelduebersetzungen)) { - foreach ($freifelduebersetzungen as $ffukey => $ffuvalue) { - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']]) - 1]['freifelder'][$ffuvalue['sprache']][] = array('mapping' => $ffuvalue['freifeld_shop'], 'freifeldnummer' => $ffuvalue['nummer'], 'wert' => $ffuvalue['wert']); - } - } - } + //Freifeldübersetzungen + $freifelduebersetzungen = $this->app->DB->SelectArr("SELECT sf.freifeld_shop, af.sprache, af.nummer, af.wert FROM shopexport_freifelder sf JOIN artikel_freifelder af ON sf.freifeld_wawi = CONCAT('freifeld',af.nummer) WHERE sf.shop = '$id' AND af.artikel = '" . $eigenschaft['artikel'] . "' AND sf.aktiv = 1 AND sf.freifeld_wawi <> '' AND sf.freifeld_shop <> '' AND af.wert <> ''"); + if (!empty($freifelduebersetzungen)) { + foreach ($freifelduebersetzungen as $ffukey => $ffuvalue) { + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']]) - 1]['freifelder'][$ffuvalue['sprache']][] = array('mapping' => $ffuvalue['freifeld_shop'], 'freifeldnummer' => $ffuvalue['nummer'], 'wert' => $ffuvalue['wert']); + } + } + } - if ($shopbilderuebertragen && !empty($loadElements['pictures'])) { - $dateien = $this->getImagesForArticle($eigenschaft['artikel']); - if (!empty($dateien)) { - foreach ($dateien as $datei) { - $filename = $this->app->erp->GetDateiName($datei['id']); - $path_info = pathinfo($filename); - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['datei'][] = base64_encode($this->app->erp->GetDatei($datei['id'])); - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['filename'][] = $filename; - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['extension'][] = $path_info['extension']; - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['titel'][] = $datei['titel']; - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['beschreibung'][] = $datei['beschreibung']; - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['stichwort'][] = $datei['subjekt']; - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['id'][] = $datei['id']; - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['version'][] = $datei['version']; - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['extid'][] = $this->GetShopexportMappingExt($id, 'datei', $datei['id']); - } - } - } + if ($shopbilderuebertragen && !empty($loadElements['pictures'])) { + $dateien = $this->getImagesForArticle($eigenschaft['artikel']); + if (!empty($dateien)) { + foreach ($dateien as $datei) { + $filename = $this->app->erp->GetDateiName($datei['id']); + $path_info = pathinfo($filename); + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['datei'][] = base64_encode($this->app->erp->GetDatei($datei['id'])); + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['filename'][] = $filename; + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['extension'][] = $path_info['extension']; + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['titel'][] = $datei['titel']; + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['beschreibung'][] = $datei['beschreibung']; + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['stichwort'][] = $datei['subjekt']; + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['id'][] = $datei['id']; + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['version'][] = $datei['version']; + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']['extid'][] = $this->GetShopexportMappingExt($id, 'datei', $datei['id']); + } + } + } - $standardstaffelpreise = null; - if(!empty($loadElements['standard_price'])){ - $preisgruppenzusatz = " AND v.art = 'Kunde' AND v.adresse = 0"; - if(!empty($preisgruppe)){ - $preisgruppenzusatz = " AND v.gruppe = '$preisgruppe'"; - } - $standardstaffelpreise = $this->app->DB->SelectArr(" + $standardstaffelpreise = null; + if (!empty($loadElements['standard_price'])) { + $preisgruppenzusatz = " AND v.art = 'Kunde' AND v.adresse = 0"; + if (!empty($preisgruppe)) { + $preisgruppenzusatz = " AND v.gruppe = '$preisgruppe'"; + } + $standardstaffelpreise = $this->app->DB->SelectArr(" SELECT v.adresse, g.name,g.kennziffer, v.ab_menge, v.preis, g.id, v.waehrung, art.umsatzsteuer FROM `verkaufspreise` AS v INNER JOIN artikel art ON v.artikel = art.id @@ -1948,20 +1792,20 @@ class Remote WHERE v.`artikel` = '" . $eigenschaft['artikel'] . "' AND v.geloescht = 0 AND (v.gueltig_bis = '0000-00-00' OR curdate() <= v.gueltig_bis OR isnull(v.gueltig_bis)) AND v.adresse=0 AND (v.gueltig_ab = '0000-00-00' OR curdate() >= v.gueltig_ab OR isnull(v.gueltig_ab)) $preisgruppenzusatz ORDER by g.id, ab_menge"); - } - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise_standard'] = []; - if (!empty($standardstaffelpreise)) { - foreach ($standardstaffelpreise as $staffelpreis) { - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise_standard'][] = [ - 'ab_menge' => $staffelpreis['ab_menge'], - 'preis' => $staffelpreis['preis'], - 'bruttopreis' => $staffelpreis['preis'] * $steuer, - 'waehrung' => $staffelpreis['waehrung'] ?: 'EUR' - ]; - } - } - if(!empty($loadElements['bulk_prices'])){ - $staffelpreisekunden = $this->app->DB->SelectArr(" + } + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise_standard'] = []; + if (!empty($standardstaffelpreise)) { + foreach ($standardstaffelpreise as $staffelpreis) { + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise_standard'][] = [ + 'ab_menge' => $staffelpreis['ab_menge'], + 'preis' => $staffelpreis['preis'], + 'bruttopreis' => $staffelpreis['preis'] * $steuer, + 'waehrung' => $staffelpreis['waehrung'] ?: 'EUR' + ]; + } + } + if (!empty($loadElements['bulk_prices'])) { + $staffelpreisekunden = $this->app->DB->SelectArr(" SELECT a.name AS kundenname, a.email, v.adresse, v.ab_menge, v.preis, v.waehrung, art.umsatzsteuer FROM `verkaufspreise` AS v INNER JOIN artikel art ON v.artikel = art.id @@ -1969,20 +1813,20 @@ class Remote WHERE v.`artikel` = '" . $eigenschaft['artikel'] . "' AND v.geloescht = 0 AND (v.gueltig_bis = '0000-00-00' OR curdate() <= v.gueltig_bis OR isnull(v.gueltig_bis)) AND (v.gueltig_ab = '0000-00-00' OR curdate() >= v.gueltig_ab OR isnull(v.gueltig_ab)) ORDER by v.adresse, ab_menge"); - if(!empty($staffelpreisekunden)){ - foreach ($staffelpreisekunden as $staffelpreis) { - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise_kunden'][] = [ - 'ab_menge' => $staffelpreis['ab_menge'], - 'preis' => $staffelpreis['preis'], - 'bruttopreis' => $staffelpreis['preis'] * $steuer, - 'waehrung' => $staffelpreis['waehrung'] ?: 'EUR', - 'email' => $staffelpreis['email'], - 'kundenname' => $staffelpreis['kundenname'] - ]; - } - } + if (!empty($staffelpreisekunden)) { + foreach ($staffelpreisekunden as $staffelpreis) { + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise_kunden'][] = [ + 'ab_menge' => $staffelpreis['ab_menge'], + 'preis' => $staffelpreis['preis'], + 'bruttopreis' => $staffelpreis['preis'] * $steuer, + 'waehrung' => $staffelpreis['waehrung'] ?: 'EUR', + 'email' => $staffelpreis['email'], + 'kundenname' => $staffelpreis['kundenname'] + ]; + } + } - $staffelpreisegruppen = $this->app->DB->SelectArr(" + $staffelpreisegruppen = $this->app->DB->SelectArr(" SELECT g.name,g.kennziffer, v.ab_menge, v.preis, g.id, v.waehrung, art.umsatzsteuer,sk.extgruppename FROM `verkaufspreise` AS v INNER JOIN artikel art ON v.artikel = art.id @@ -1991,217 +1835,212 @@ class Remote WHERE v.`artikel` = '" . $eigenschaft['artikel'] . "' AND v.geloescht = 0 AND (v.gueltig_bis = '0000-00-00' OR curdate() <= v.gueltig_bis OR isnull(v.gueltig_bis)) AND v.art like 'Gruppe' AND v.gruppe<>'$preisgruppe' AND sk.shopid='$id' AND sk.aktiv=1 AND (v.gueltig_ab = '0000-00-00' OR curdate() >= v.gueltig_ab OR isnull(v.gueltig_ab)) ORDER by g.id, ab_menge"); - if(!empty($staffelpreisegruppen)){ - foreach ($staffelpreisegruppen as $staffelpreis) { - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise_gruppen'][] = [ - 'ab_menge' => $staffelpreis['ab_menge'], - 'preis' => $staffelpreis['preis'], - 'bruttopreis' => $staffelpreis['preis'] * $steuer, - 'waehrung' => $staffelpreis['waehrung'] ?: 'EUR', - 'kennziffer' => $staffelpreis['kennziffer'], - 'gruppenname' => $staffelpreis['name'], - 'gruppeextern' => $staffelpreis['extgruppename'] - ]; - } - } - } - $staffelpreisema = null; - if (!empty($shopexportarr['crosssellingartikeluebertragen']) && !empty($loadElements['cross_selling'])) { - //if($this->app->DB->Select("SELECT crosssellingartikeluebertragen FROM shopexport WHERE id = '$id' LIMIT 1")){ - $preisgruppenzusatz = ''; - if (!empty($preisgruppe)) { - $preisgruppenzusatz = " AND v.gruppe = '$preisgruppe'"; - } - $staffelpreisema = $this->app->DB->SelectArr(" + if (!empty($staffelpreisegruppen)) { + foreach ($staffelpreisegruppen as $staffelpreis) { + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise_gruppen'][] = [ + 'ab_menge' => $staffelpreis['ab_menge'], + 'preis' => $staffelpreis['preis'], + 'bruttopreis' => $staffelpreis['preis'] * $steuer, + 'waehrung' => $staffelpreis['waehrung'] ?: 'EUR', + 'kennziffer' => $staffelpreis['kennziffer'], + 'gruppenname' => $staffelpreis['name'], + 'gruppeextern' => $staffelpreis['extgruppename'] + ]; + } + } + } + $staffelpreisema = null; + if (!empty($shopexportarr['crosssellingartikeluebertragen']) && !empty($loadElements['cross_selling'])) { + //if($this->app->DB->Select("SELECT crosssellingartikeluebertragen FROM shopexport WHERE id = '$id' LIMIT 1")){ + $preisgruppenzusatz = ''; + if (!empty($preisgruppe)) { + $preisgruppenzusatz = " AND v.gruppe = '$preisgruppe'"; + } + $staffelpreisema = $this->app->DB->SelectArr(" SELECT g.name, g.kennziffer, v.ab_menge, v.preis, g.id, v.waehrung, v.id, v.adresse, v.art, sk.extgruppename FROM `verkaufspreise` AS v LEFT JOIN gruppen g on v.gruppe = g.id AND v.art like 'Gruppe' LEFT JOIN shopexport_kundengruppen sk ON sk.gruppeid=v.gruppe WHERE v.`artikel` = '" . $eigenschaft['artikel'] . "' AND v.geloescht = 0 AND (ifnull(v.gueltig_bis,'0000-00-00') = '0000-00-00' OR curdate() <= v.gueltig_bis OR isnull(v.gueltig_bis)) AND (v.gueltig_ab = '0000-00-00' OR curdate() >= v.gueltig_ab OR isnull(v.gueltig_ab)) $preisgruppenzusatz ORDER by g.id, ab_menge"); - } - if (!empty($staffelpreisema)) { - foreach ($staffelpreisema as $k => $v) { - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise'][] = array('ab_menge' => $v['ab_menge'], 'preis' => $v['preis'], 'bruttopreis' => $v['preis'] * $steuer, 'waehrung' => ($v['waehrung'] ? $v['waehrung'] : 'EUR')); - if ($v['id']) { - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise'][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise']) - 1]['gruppenkennziffer'] = $v['kennziffer']; - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise'][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise']) - 1]['gruppenname'] = $v['name']; - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise'][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise']) - 1]['adresse'] = $v['adresse']; - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise'][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise']) - 1]['art'] = $v['art']; - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise'][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise']) - 1]['gruppeextern'] = $v['extgruppename']; - } - } - } + } + if (!empty($staffelpreisema)) { + foreach ($staffelpreisema as $k => $v) { + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise'][] = array('ab_menge' => $v['ab_menge'], 'preis' => $v['preis'], 'bruttopreis' => $v['preis'] * $steuer, 'waehrung' => ($v['waehrung'] ? $v['waehrung'] : 'EUR')); + if ($v['id']) { + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise'][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise']) - 1]['gruppenkennziffer'] = $v['kennziffer']; + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise'][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise']) - 1]['gruppenname'] = $v['name']; + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise'][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise']) - 1]['adresse'] = $v['adresse']; + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise'][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise']) - 1]['art'] = $v['art']; + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise'][count($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['staffelpreise']) - 1]['gruppeextern'] = $v['extgruppename']; + } + } + } - $articleVariant = $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]; - $articleVariant['artikel'] = $eigenschaft['artikel']; - $data[$i]['artikel_varianten'][] = $articleVariant; - unset($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']); + $articleVariant = $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]; + $articleVariant['artikel'] = $eigenschaft['artikel']; + $data[$i]['artikel_varianten'][] = $articleVariant; + unset($data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][0]['Dateien']); - - $query = sprintf('SELECT meoa.name AS wert,meoa.name_ext AS wert_ext, mega.name AS gruppe, mega.name_ext AS gruppe_ext + $query = sprintf('SELECT meoa.name AS wert,meoa.name_ext AS wert_ext, mega.name AS gruppe, mega.name_ext AS gruppe_ext FROM matrixprodukt_optionen_zu_artikel AS moza JOIN matrixprodukt_eigenschaftenoptionen_artikel AS meoa ON moza.option_id = meoa.id JOIN matrixprodukt_eigenschaftengruppen_artikel AS mega ON mega.id = meoa.gruppe WHERE moza.artikel=%d ORDER BY mega.id, moza.id', $eigenschaft['artikel']); - $matrixdaten = $this->app->DB->SelectArr($query); + $matrixdaten = $this->app->DB->SelectArr($query); - for ($iv = 0, $ivMax = (!empty($matrixdaten)?count($matrixdaten):0); $iv < $ivMax; $iv++) { - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][$iv]['name'] = $matrixdaten[$iv]['gruppe']; - $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][$iv]['values'] = $matrixdaten[$iv]['wert']; + for ($iv = 0, $ivMax = (!empty($matrixdaten) ? count($matrixdaten) : 0); $iv < $ivMax; $iv++) { + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][$iv]['name'] = $matrixdaten[$iv]['gruppe']; + $data[$i]['matrix_varianten']['artikel'][$eigenschaft['artikel']][$iv]['values'] = $matrixdaten[$iv]['wert']; + } + } + + $result = null; + if (empty($data)) { + continue; + } + if (!empty($lagerexport)) { + $result = $this->sendlistlager($i, $id, $data); + } + if (!empty($artikelexport) && !$nurlager) { + $result = $this->sendlist($i, $id, $data, true); + } + } while (count($data[$i]['matrix_varianten']['artikel'] ?? []) >= 5000); + + return $result; } - } - $result = null; - if(empty($data)) { - continue; - } - if (!empty($lagerexport)) { - $result = $this->sendlistlager($i, $id, $data); - } - if (!empty($artikelexport) && !$nurlager) { - $result = $this->sendlist($i, $id, $data, true); - } + if (!empty($loadElements['variants']) && $this->app->DB->Select("SELECT id FROM artikel WHERE variante_von = '$artikel' AND variante = 1 AND geloescht <> 1 AND nummer != 'DEL' LIMIT 1")) { + if ($this->app->DB->Select("SELECT id FROM artikel WHERE id = '$artikel' AND variante = 0 AND matrixprodukt=0 AND geloescht <> 1 AND nummer != 'DEL' LIMIT 1")) { + $data[$i]['artikel_varianten'] = []; + $data[$i]['variantevorhanden'] = 1; + $varianten = "SELECT * FROM artikel WHERE variante_von = '$artikel' AND variante = 1 AND geloescht <> 1 AND nummer != 'DEL'"; + $db = $this->app->Container->get('Database'); + foreach ($db->yieldAll($varianten) as $v) { + $steuer = $steuermapping[$v['umsatzsteuer']]; + if ($v['steuersatz'] != -1 && !empty($v['steuersatz'])) { + $steuer = ($v['steuersatz'] + 100) / 100; + } + if (empty($steuer)) { + $steuer = $steuernormal; + } + $variantennettopreis = null; + if (!empty($loadElements['standard_price'])) { + if ($preisgruppe && method_exists($this->app->erp, 'GetVerkaufspreisGruppe')) { + $variantennettopreis = $this->app->erp->GetVerkaufspreisGruppe($v['id'], 1, $preisgruppe); + } else { + $variantennettopreis = $this->app->erp->GetVerkaufspreis($v['id'], 1, 0); + } + } + $sprachen = ['de', 'en']; + foreach ($sprachen as $sprache) { + $query = sprintf("SELECT * FROM artikel_texte WHERE shop=%d AND sprache='%s' AND artikel=%d AND aktiv=1 LIMIT 1", + $id, strtoupper($sprache), $v['id']); + $ersetzeStandardbeschreibung = $this->app->DB->SelectRow($query); + if (!empty($ersetzeStandardbeschreibung)) { + $v['name_' . $sprache] = $ersetzeStandardbeschreibung['name']; + } + } - } while (count($data[$i]['matrix_varianten']['artikel'] ?? [])>=5000); + $this->app->erp->RunHook('remote_send_article_list_pseudostorage', 3, $id, $v['id'], $v['pseudolager']); + if (is_numeric($v['pseudolager']) && $v['pseudolager'] < 0) { + $v['pseudolager'] = 0; + } + $projectStockId = $this->app->DB->Select("SELECT `id` FROM `projekt` WHERE `id` = '{$projekt}' AND `projektlager` = 1 LIMIT 1"); + $stock = (float) $this->app->erp->ArtikelAnzahlVerkaufbar( + $v['id'], + 0, + $projectStockId, + $id, + $lagergrundlage + ); + if ($stock < 0) { + $stock = 0; + } + $data[$i]['artikel_varianten'][] = array('nummer' => $v['nummer'], 'name_de' => $v['name_de'], 'name_en' => $v['name_en'], 'restmenge' => $v['restmenge'], 'gesperrt' => ($v['gesperrt'] == 1 || $v['intern_gesperrt'] == 1 ? 1 : 0), + 'artikel' => $v['id'], 'zolltarifnummer' => $v['zolltarifnummer'], 'ean' => $v['ean'], 'gewicht' => $v['gewicht'], 'inaktiv' => $v['inaktiv'], 'uebersicht_de' => $v['uebersicht_de'], + 'lag' => $stock, + 'pseudolager' => $v['pseudolager'], 'pseudopreis' => $v['pseudopreis'], 'preis' => $variantennettopreis, 'bruttopreis' => $variantennettopreis * $steuer, + 'artikelnummer_fremdnummern' => $this->app->DB->SelectArr("SELECT * FROM artikelnummer_fremdnummern WHERE artikel = '" . $v['id'] . "' AND nummer <> '' AND shopid = '$id' AND aktiv = '1'"), + 'steuersatz' => ($steuer - 1) * 100); + if (!empty($data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['artikelnummer_fremdnummern'])) { + foreach ($data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['artikelnummer_fremdnummern'] as $fkey => $fval) { + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['artikelnummer_fremdnummern'][$fkey]['nummer'] = trim($fval['nummer']); + } + } + if ($eigenschaftenuebertragen && !empty($loadElements['properties'])) { + $varianteneigenschaften = $this->app->DB->SelectArr("SELECT e.name, ew.wert FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften + WHERE ew.artikel = '" . $v['id'] . "' AND e.name <> '' AND ew.wert <> '' AND e.geloescht <> 1 ORDER BY e.name"); + if (!empty($varianteneigenschaften)) { + foreach ($varianteneigenschaften as $eigenschaft) { + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['eigenschaften'][] = array('name' => $eigenschaft['name'], 'values' => $eigenschaft['wert']); + } + } + $eigenschaftenuebersetzungen = $this->app->DB->SelectArr("SELECT language_from, language_to, property_from, property_to,property_value_from,property_value_to FROM article_property_translation WHERE article_id = '" . $v['id'] . "'"); + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['eigenschaftenuebersetzungen'] = $eigenschaftenuebersetzungen; + } + + if (!empty($freifelder) && !empty($loadElements['free_fields'])) { + foreach ($freifelder as $freifeld) { + if (method_exists($tmp, 'Get' . ucfirst($freifeld['freifeld_wawi']))) { + $_funktionsname = 'Get' . ucfirst($freifeld['freifeld_wawi']); + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['freifelder']['DE'][$freifeld['freifeld_shop']] = $v[$freifeld['freifeld_wawi']]; + } + } + //Freifeldübersetzungen + $freifelduebersetzungen = $this->app->DB->SelectArr("SELECT sf.freifeld_shop, af.sprache, af.nummer, af.wert FROM shopexport_freifelder sf JOIN artikel_freifelder af ON sf.freifeld_wawi = CONCAT('freifeld',af.nummer) WHERE sf.shop = '$id' AND af.artikel = '" . $v['id'] . "' AND sf.aktiv = 1 AND sf.freifeld_wawi <> '' AND sf.freifeld_shop <> '' AND af.wert <> ''"); + if (!empty($freifelduebersetzungen)) { + foreach ($freifelduebersetzungen as $ffukey => $ffuvalue) { + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['freifelder'][$ffuvalue['sprache']][] = array('mapping' => $ffuvalue['freifeld_shop'], 'freifeldnummer' => $ffuvalue['nummer'], 'wert' => $ffuvalue['wert']); + } + } + } + if ($shopbilderuebertragen && !empty($loadElements['pictures'])) { + $dateien = $this->getImagesForArticle($v['id']); + if (!empty($dateien)) { + foreach ($dateien as $datei) { + $filename = $this->app->erp->GetDateiName($datei['id']); + $path_info = pathinfo($filename); + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['datei'][] = base64_encode($this->app->erp->GetDatei($datei['id'])); + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['filename'][] = $filename; + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['extension'][] = $path_info['extension']; + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['titel'][] = $datei['titel']; + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['beschreibung'][] = $datei['beschreibung']; + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['stichwort'][] = $datei['subjekt']; + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['id'][] = $datei['id']; + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['version'][] = $datei['version']; + $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['extid'][] = $this->GetShopexportMappingExt($id, 'datei', $datei['id']); + } + } + } + } + } + } else { + $data[$i]['variantevorhanden'] = 0; + } + + $result = null; + if (empty($data)) { + continue; + } + if (!empty($lagerexport)) { + $result = $this->sendlistlager($i, $id, $data); + } + if (!empty($artikelexport) && !$nurlager) { + $result = $this->sendlist($i, $id, $data, true); + } + } return $result; - } - - if(!empty($loadElements['variants']) && $this->app->DB->Select("SELECT id FROM artikel WHERE variante_von = '$artikel' AND variante = 1 AND geloescht <> 1 AND nummer != 'DEL' LIMIT 1")) { - if($this->app->DB->Select("SELECT id FROM artikel WHERE id = '$artikel' AND variante = 0 AND matrixprodukt=0 AND geloescht <> 1 AND nummer != 'DEL' LIMIT 1")){ - $data[$i]['artikel_varianten'] = []; - $data[$i]['variantevorhanden'] = 1; - $varianten = "SELECT * FROM artikel WHERE variante_von = '$artikel' AND variante = 1 AND geloescht <> 1 AND nummer != 'DEL'"; - $db = $this->app->Container->get('Database'); - foreach ($db->yieldAll($varianten) as $v) { - $steuer = $steuermapping[$v['umsatzsteuer']]; - if($v['steuersatz'] != -1 && !empty($v['steuersatz'])){ - $steuer = ($v['steuersatz'] + 100) / 100; - } - if(empty($steuer)) { - $steuer = $steuernormal; - } - $variantennettopreis = null; - if(!empty($loadElements['standard_price'])){ - if($preisgruppe && method_exists($this->app->erp, 'GetVerkaufspreisGruppe')){ - $variantennettopreis = $this->app->erp->GetVerkaufspreisGruppe($v['id'], 1, $preisgruppe); - }else{ - $variantennettopreis = $this->app->erp->GetVerkaufspreis($v['id'], 1, 0); - } - } - $sprachen = ['de','en']; - foreach ($sprachen as $sprache){ - $query = sprintf("SELECT * FROM artikel_texte WHERE shop=%d AND sprache='%s' AND artikel=%d AND aktiv=1 LIMIT 1", - $id,strtoupper($sprache),$v['id']); - $ersetzeStandardbeschreibung = $this->app->DB->SelectRow($query); - if(!empty($ersetzeStandardbeschreibung)) { - $v['name_'.$sprache] = $ersetzeStandardbeschreibung['name']; - } - } - - $this->app->erp->RunHook('remote_send_article_list_pseudostorage', 3, $id, $v['id'], $v['pseudolager']); - if(is_numeric($v['pseudolager']) && $v['pseudolager'] < 0) { - $v['pseudolager'] = 0; - } - $projectStockId = $this->app->DB->Select("SELECT `id` FROM `projekt` WHERE `id` = '{$projekt}' AND `projektlager` = 1 LIMIT 1"); - $stock = (float)$this->app->erp->ArtikelAnzahlVerkaufbar( - $v['id'], - 0, - $projectStockId, - $id, - $lagergrundlage - ); - if($stock < 0) { - $stock = 0; - } - $data[$i]['artikel_varianten'][] = array('nummer' => $v['nummer'], 'name_de' => $v['name_de'], 'name_en' => $v['name_en'],'restmenge' => $v['restmenge'], 'gesperrt' => ($v['gesperrt']==1||$v['intern_gesperrt']==1?1:0), - 'artikel' => $v['id'],'zolltarifnummer' => $v['zolltarifnummer'],'ean' => $v['ean'],'gewicht' => $v['gewicht'], 'inaktiv' => $v['inaktiv'], 'uebersicht_de' => $v['uebersicht_de'], - 'lag' => $stock, - 'pseudolager' => $v['pseudolager'], 'pseudopreis' => $v['pseudopreis'], 'preis' => $variantennettopreis, 'bruttopreis' => $variantennettopreis * $steuer, - 'artikelnummer_fremdnummern' => $this->app->DB->SelectArr("SELECT * FROM artikelnummer_fremdnummern WHERE artikel = '" . $v['id'] . "' AND nummer <> '' AND shopid = '$id' AND aktiv = '1'"), - 'steuersatz' => ($steuer - 1) * 100); - if(!empty($data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten'])-1]['artikelnummer_fremdnummern'])) { - foreach($data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten'])-1]['artikelnummer_fremdnummern'] as $fkey => $fval) { - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten'])-1]['artikelnummer_fremdnummern'][$fkey]['nummer'] = trim($fval['nummer']); - } - } - if($eigenschaftenuebertragen && !empty($loadElements['properties'])){ - $varianteneigenschaften = $this->app->DB->SelectArr("SELECT e.name, ew.wert FROM artikeleigenschaften e INNER JOIN artikeleigenschaftenwerte ew ON e.id = ew.artikeleigenschaften - WHERE ew.artikel = '".$v['id']."' AND e.name <> '' AND ew.wert <> '' AND e.geloescht <> 1 ORDER BY e.name"); - if(!empty($varianteneigenschaften)){ - foreach($varianteneigenschaften as $eigenschaft){ - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['eigenschaften'][] = array('name'=>$eigenschaft['name'], 'values'=>$eigenschaft['wert']); - } - } - $eigenschaftenuebersetzungen = $this->app->DB->SelectArr("SELECT language_from, language_to, property_from, property_to,property_value_from,property_value_to FROM article_property_translation WHERE article_id = '".$v['id']."'"); - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['eigenschaftenuebersetzungen'] = $eigenschaftenuebersetzungen; - } - - if(!empty($freifelder) && !empty($loadElements['free_fields'])) - { - foreach($freifelder as $freifeld) - { - if(method_exists($tmp,'Get'.ucfirst($freifeld['freifeld_wawi']))) - { - $_funktionsname = 'Get'.ucfirst($freifeld['freifeld_wawi']); - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['freifelder']['DE'][$freifeld['freifeld_shop']] = $v[$freifeld['freifeld_wawi']]; - } - } - //Freifeldübersetzungen - $freifelduebersetzungen = $this->app->DB->SelectArr("SELECT sf.freifeld_shop, af.sprache, af.nummer, af.wert FROM shopexport_freifelder sf JOIN artikel_freifelder af ON sf.freifeld_wawi = CONCAT('freifeld',af.nummer) WHERE sf.shop = '$id' AND af.artikel = '".$v['id']."' AND sf.aktiv = 1 AND sf.freifeld_wawi <> '' AND sf.freifeld_shop <> '' AND af.wert <> ''"); - if(!empty($freifelduebersetzungen)){ - foreach ($freifelduebersetzungen as $ffukey => $ffuvalue) { - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['freifelder'][$ffuvalue['sprache']][] = array('mapping' => $ffuvalue['freifeld_shop'], 'freifeldnummer' => $ffuvalue['nummer'], 'wert' => $ffuvalue['wert']); - } - } - } - if ($shopbilderuebertragen && !empty($loadElements['pictures'])) { - $dateien = $this->getImagesForArticle($v['id']); - if (!empty($dateien)) { - foreach ($dateien as $datei) { - $filename = $this->app->erp->GetDateiName($datei['id']); - $path_info = pathinfo($filename); - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['datei'][] = base64_encode($this->app->erp->GetDatei($datei['id'])); - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['filename'][] = $filename; - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['extension'][] = $path_info['extension']; - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['titel'][] = $datei['titel']; - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['beschreibung'][] = $datei['beschreibung']; - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['stichwort'][] = $datei['subjekt']; - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['id'][] = $datei['id']; - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['version'][] = $datei['version']; - $data[$i]['artikel_varianten'][count($data[$i]['artikel_varianten']) - 1]['Dateien']['extid'][] = $this->GetShopexportMappingExt($id, 'datei', $datei['id']); - } - } - } - } - } - }else{ - $data[$i]['variantevorhanden'] = 0; - } - - $result = null; - if(empty($data)){ - continue; - } - if(!empty($lagerexport)) { - $result = $this->sendlistlager($i, $id, $data); - } - if (!empty($artikelexport) && !$nurlager) { - $result = $this->sendlist($i, $id, $data, true); - } } - return $result; - } - /** * @param int $articleId * @return array|null */ - protected function getImagesForArticle($articleId){ - $query = sprintf("SELECT d.id AS `id`, dv.id AS `vid`, d.titel, d.beschreibung, ds.subjekt, ds.sort, dv.version AS `version` + protected function getImagesForArticle($articleId) { + $query = sprintf("SELECT d.id AS `id`, dv.id AS `vid`, d.titel, d.beschreibung, ds.subjekt, ds.sort, dv.version AS `version` FROM `datei_stichwoerter` AS `ds` INNER JOIN `datei` AS `d` ON ds.datei = d.id INNER JOIN `datei_version` AS `dv` ON dv.datei = ds.datei @@ -2209,117 +2048,111 @@ class Remote WHERE ds.parameter = %d AND ds.objekt like 'Artikel' AND ds.subjekt LIKE 'Shopbild' AND d.geloescht = 0 ORDER BY ds.sort", $articleId); - return $this->app->DB->SelectArr($query); - } - - protected function sendlistlager($i,$id,$data){ - $data2 = $data; - foreach ($data2 as $key => $value){ - $data2[$key]['artikel'] = $value['artikelid']; + return $this->app->DB->SelectArr($query); } - $result = $this->RemoteCommand($id,'sendlistlager',$data2); - $this->app->DB->Update( - sprintf( - 'UPDATE artikel_onlineshops SET last_storage_transfer = NOW() WHERE artikel = %d AND shop = %d', - $data2[$i]['artikel'], $id - ) - ); - return $result; - } - protected function sendlist($i,$id,$data,$isLagerExported){ - /** @var Shopexport $objShopexport */ - $objShopexport = $this->app->loadModule('shopexport'); - $changedHash = $objShopexport->hasArticleHashChanged($data[0]['artikel'], $id); - $hash = $changedHash['hash']; - //$changedHash = $changedHash['changed']; + protected function sendlistlager($i, $id, $data) { + $data2 = $data; + foreach ($data2 as $key => $value) { + $data2[$key]['artikel'] = $value['artikelid']; + } + $result = $this->RemoteCommand($id, 'sendlistlager', $data2); + $this->app->DB->Update( + sprintf( + 'UPDATE artikel_onlineshops SET last_storage_transfer = NOW() WHERE artikel = %d AND shop = %d', + $data2[$i]['artikel'], $id + ) + ); + return $result; + } - $result = $this->RemoteCommand($id,'sendlist',$data); - $checkAo = $this->app->DB->Select( - sprintf( - 'SELECT id FROM artikel_onlineshops WHERE artikel = %d AND shop=%d LIMIT 1', - $data[0]['artikel'], $id - ) - ); - if(empty($checkAo)) { - $this->app->DB->Insert( - sprintf( - 'INSERT INTO artikel_onlineshops (artikel, shop, aktiv, ausartikel) + protected function sendlist($i, $id, $data, $isLagerExported) { + /** @var Shopexport $objShopexport */ + $objShopexport = $this->app->loadModule('shopexport'); + $changedHash = $objShopexport->hasArticleHashChanged($data[0]['artikel'], $id); + $hash = $changedHash['hash']; + //$changedHash = $changedHash['changed']; + + $result = $this->RemoteCommand($id, 'sendlist', $data); + $checkAo = $this->app->DB->Select( + sprintf( + 'SELECT id FROM artikel_onlineshops WHERE artikel = %d AND shop=%d LIMIT 1', + $data[0]['artikel'], $id + ) + ); + if (empty($checkAo)) { + $this->app->DB->Insert( + sprintf( + 'INSERT INTO artikel_onlineshops (artikel, shop, aktiv, ausartikel) VALUES (%d, %d, 1, 1) ', - $data[0]['artikel'], $id - ) - ); - } - $this->app->DB->Update( - sprintf( - "UPDATE artikel_onlineshops + $data[0]['artikel'], $id + ) + ); + } + $this->app->DB->Update( + sprintf( + "UPDATE artikel_onlineshops SET last_article_transfer = NOW(), last_article_hash = '%s' WHERE artikel = %d AND shop = %d", - $this->app->DB->real_escape_string($hash) ,$data[0]['artikel'], $id - ) - ); - if(!empty($result) && is_array($result) && !empty($result['new'])) - { - foreach($result['new'] as $artikelid => $fremdnummer) - { - $artikelid = (int)$artikelid; - $artikelnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikelid' LIMIT 1"); - if($artikelid > 0 && $artikelnummer != trim($fremdnummer) && - ($this->app->DB->Select("SELECT id FROM artikel WHERE id = '$artikelid' AND (shop = '$id' OR shop2 = '$id' OR shop3 = '$id') LIMIT 1") || - $this->app->DB->Select("SELECT id FROM artikel_onlineshops WHERE artikel = '$artikelid' AND aktiv = 1") - ) && trim($fremdnummer) !== '') - { - //Nur falls Artikel zum Shop passt und keine aktive Fremdnummer exisitert. - if(!$this->app->DB->Select("SELECT id FROM `artikelnummer_fremdnummern` WHERE artikel = '$artikelid' AND shopid = '$id' AND nummer <> '' AND (aktiv = 1 OR nummer = '".trim($this->app->DB->real_escape_string($fremdnummer))."') LIMIT 1 ")) - { - $this->app->DB->Insert("INSERT INTO `artikelnummer_fremdnummern` (artikel, bezeichnung, nummer, shopid, bearbeiter, zeitstempel, aktiv) - VALUES ('$artikelid','Erstellt durch Artikelexport','".trim($this->app->DB->real_escape_string($fremdnummer))."','$id','".((isset($this->app->User)&& method_exists($this->app->User,'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob') ."',now(),0) + $this->app->DB->real_escape_string($hash), $data[0]['artikel'], $id + ) + ); + if (!empty($result) && is_array($result) && !empty($result['new'])) { + foreach ($result['new'] as $artikelid => $fremdnummer) { + $artikelid = (int) $artikelid; + $artikelnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikelid' LIMIT 1"); + if ($artikelid > 0 && $artikelnummer != trim($fremdnummer) && + ($this->app->DB->Select("SELECT id FROM artikel WHERE id = '$artikelid' AND (shop = '$id' OR shop2 = '$id' OR shop3 = '$id') LIMIT 1") || + $this->app->DB->Select("SELECT id FROM artikel_onlineshops WHERE artikel = '$artikelid' AND aktiv = 1") + ) && trim($fremdnummer) !== '') { + //Nur falls Artikel zum Shop passt und keine aktive Fremdnummer exisitert. + if (!$this->app->DB->Select("SELECT id FROM `artikelnummer_fremdnummern` WHERE artikel = '$artikelid' AND shopid = '$id' AND nummer <> '' AND (aktiv = 1 OR nummer = '" . trim($this->app->DB->real_escape_string($fremdnummer)) . "') LIMIT 1 ")) { + $this->app->DB->Insert("INSERT INTO `artikelnummer_fremdnummern` (artikel, bezeichnung, nummer, shopid, bearbeiter, zeitstempel, aktiv) + VALUES ('$artikelid','Erstellt durch Artikelexport','" . trim($this->app->DB->real_escape_string($fremdnummer)) . "','$id','" . ((isset($this->app->User) && method_exists($this->app->User, 'GetName')) ? $this->app->DB->real_escape_string($this->app->User->GetName()) : 'Cronjob') . "',now(),0) "); - } + } + } + } + if (isset($result['anzahl'])) { + $result = $result['anzahl']; + }//Altes Verhalten } - } - if(isset($result['anzahl'])) - { - $result = $result['anzahl']; - }//Altes Verhalten + if (!$isLagerExported) { + $data2 = $data; + foreach ($data2 as $key => $value) { + $data2[$key]['artikel'] = $value['artikelid']; + } + $this->RemoteCommand($id, 'sendlistlager', $data2); + $this->app->DB->Update( + sprintf( + 'UPDATE artikel_onlineshops SET last_storage_transfer = NOW() WHERE artikel = %d AND shop = %d', + $data2[$i]['artikel'], $id + ) + ); + } + return $result; } - if(!$isLagerExported){ - $data2 = $data; - foreach ($data2 as $key => $value){ - $data2[$key]['artikel'] = $value['artikelid']; - } - $this->RemoteCommand($id,'sendlistlager',$data2); - $this->app->DB->Update( - sprintf( - 'UPDATE artikel_onlineshops SET last_storage_transfer = NOW() WHERE artikel = %d AND shop = %d', - $data2[$i]['artikel'], $id - ) - ); - } - return $result; - } - public function getDataToSendForUpdateOrder(int $shopId, int $orderId): ?OrderStatusUpdateRequest - { - $orderArr = $this->app->DB->SelectRow("SELECT `zahlungsweise`, `shopextid` FROM `auftrag` WHERE `id` = $orderId LIMIT 1"); - if (empty($orderArr)) - return null; + public function getDataToSendForUpdateOrder(int $shopId, int $orderId): ?OrderStatusUpdateRequest { + $orderArr = $this->app->DB->SelectRow("SELECT `zahlungsweise`, `shopextid` FROM `auftrag` WHERE `id` = $orderId LIMIT 1"); + if (empty($orderArr)) + return null; - $data = new OrderStatusUpdateRequest(); - $data->orderId = $orderId; - $data->shopOrderId = $orderArr['shopextid']; + $data = new OrderStatusUpdateRequest(); + $data->orderId = $orderId; + $data->shopOrderId = $orderArr['shopextid']; - $statusArr = $this->app->DB->SelectFirstCols("SELECT DISTINCT status FROM auftrag WHERE id = $orderId OR teillieferungvon = $orderId"); - if (in_array('storniert', $statusArr)) - $data->orderStatus = OrderStatus::Cancelled; - if (in_array('abgeschlossen', $statusArr)) - $data->orderStatus = OrderStatus::Completed; - if (in_array('freigegeben', $statusArr)) - $data->orderStatus = OrderStatus::InProgress; - if (in_array('angelegt', $statusArr)) - $data->orderStatus = OrderStatus::Imported; + $statusArr = $this->app->DB->SelectFirstCols("SELECT DISTINCT status FROM auftrag WHERE id = $orderId OR teillieferungvon = $orderId"); + if (in_array('storniert', $statusArr)) + $data->orderStatus = OrderStatus::Cancelled; + if (in_array('abgeschlossen', $statusArr)) + $data->orderStatus = OrderStatus::Completed; + if (in_array('freigegeben', $statusArr)) + $data->orderStatus = OrderStatus::InProgress; + if (in_array('angelegt', $statusArr)) + $data->orderStatus = OrderStatus::Imported; - $sql = " + $sql = " SELECT DISTINCT v.id, v.tracking, @@ -2340,530 +2173,483 @@ class Remote WHERE (a.id = $orderId OR a.teillieferungvon = $orderId) AND v.id IS NOT NULL ORDER BY v.id"; - $shipments = $this->app->DB->SelectArr($sql); - foreach ($shipments as $shipment) { - $item = new Shipment(); - $item->id = $shipment['id']; - $item->trackingNumber = $shipment['tracking']; - $item->trackingUrl = $shipment['tracking_link']; - $item->shippingMethod = $shipment['versandart']; - $data->shipments[] = $item; - } + $shipments = $this->app->DB->SelectArr($sql); + foreach ($shipments as $shipment) { + $item = new Shipment(); + $item->id = $shipment['id']; + $item->trackingNumber = $shipment['tracking']; + $item->trackingUrl = $shipment['tracking_link']; + $item->shippingMethod = $shipment['versandart']; + $data->shipments[] = $item; + } - return $data; - } + return $data; + } - /** - * @param int $shopId - * @param int $orderId - * - * @throws Exception - */ - public function RemoteUpdateAuftrag($shopId, $orderId) - { - $data = $this->getDataToSendForUpdateOrder((int)$shopId, (int)$orderId); - if($data?->orderStatus !== OrderStatus::Completed) - return; + /** + * @param int $shopId + * @param int $orderId + * + * @throws Exception + */ + public function RemoteUpdateAuftrag($shopId, $orderId) { + $data = $this->getDataToSendForUpdateOrder((int) $shopId, (int) $orderId); + if ($data?->orderStatus !== OrderStatus::Completed) + return; - $bearbeiter = 'Cronjob'; - if(isset($this->app->User)){ - $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName()); - } + $bearbeiter = 'Cronjob'; + if (isset($this->app->User)) { + $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName()); + } - $response = $this->RemoteCommand($shopId, 'updateauftrag', $data); - if($response instanceOf ShopConnectorResponseInterface && !$response->isSuccessful()){ - $query = sprintf('UPDATE `auftrag` + $response = $this->RemoteCommand($shopId, 'updateauftrag', $data); + if ($response instanceOf ShopConnectorResponseInterface && !$response->isSuccessful()) { + $query = sprintf('UPDATE `auftrag` SET `shop_status_update_attempt` = `shop_status_update_attempt` + 1, `shop_status_update_last_attempt_at` = NOW() WHERE `id` = %d', $orderId); - $this->app->DB->Update($query); + $this->app->DB->Update($query); - $this->app->erp->AuftragProtokoll($orderId, 'Versandmeldung an Shop fehlgeschlagen', $bearbeiter); - $this->app->erp->Logfile('Versandmeldung an Shop fehlgeschlagen', print_r([ - 'orderId' => $orderId, - 'shopId' => $shopId, - 'message' => $response->getMessage()],true)); + $this->app->erp->AuftragProtokoll($orderId, 'Versandmeldung an Shop fehlgeschlagen', $bearbeiter); + $this->app->erp->Logfile('Versandmeldung an Shop fehlgeschlagen', print_r([ + 'orderId' => $orderId, + 'shopId' => $shopId, + 'message' => $response->getMessage()], true)); - return; - } + return; + } - $this->app->erp->AuftragProtokoll($orderId, 'Versandmeldung an Shop übertragen', $bearbeiter); - $this->app->DB->Update("UPDATE `auftrag` SET `shopextstatus` = 'abgeschlossen' WHERE `id` = $orderId LIMIT 1"); - } - - /** - * @param int $shopId - * @param string $auftrag - * - * @param string $internet - * - * @throws Exception - */ - public function RemoteDeleteAuftrag($shopId, $auftrag, $internet='') - { - $data['auftrag'] = $auftrag; - $data['internet'] = $internet; - $this->RemoteCommand($shopId,'deleteauftrag',$data); - } - - /** - * @param int $shopId - * @param int $orderId - * - * @throws Exception - */ - public function RemoteStorniereAuftrag($shopId, $orderId) - { - $orderArr = $this->app->DB->SelectRow("SELECT shopextid, internet FROM auftrag WHERE id='$orderId' LIMIT 1"); - if(empty($orderArr)) { - return; + $this->app->erp->AuftragProtokoll($orderId, 'Versandmeldung an Shop übertragen', $bearbeiter); + $this->app->DB->Update("UPDATE `auftrag` SET `shopextstatus` = 'abgeschlossen' WHERE `id` = $orderId LIMIT 1"); } - $shopextid = $orderArr['shopextid']; - $internet = $orderArr['internet']; - $data['auftrag'] = $shopextid; - $data['internet'] = $internet; - - $this->app->DB->Insert(" + + /** + * @param int $shopId + * @param string $auftrag + * + * @param string $internet + * + * @throws Exception + */ + public function RemoteDeleteAuftrag($shopId, $auftrag, $internet = '') { + $data['auftrag'] = $auftrag; + $data['internet'] = $internet; + $this->RemoteCommand($shopId, 'deleteauftrag', $data); + } + + /** + * @param int $shopId + * @param int $orderId + * + * @throws Exception + */ + public function RemoteStorniereAuftrag($shopId, $orderId) { + $orderArr = $this->app->DB->SelectRow("SELECT shopextid, internet FROM auftrag WHERE id='$orderId' LIMIT 1"); + if (empty($orderArr)) { + return; + } + $shopextid = $orderArr['shopextid']; + $internet = $orderArr['internet']; + $data['auftrag'] = $shopextid; + $data['internet'] = $internet; + + $this->app->DB->Insert(" INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) - VALUES ($orderId,now(),'".(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')."', + VALUES ($orderId,now(),'" . (isset($this->app->User) ? $this->app->DB->real_escape_string($this->app->User->GetName()) : 'Cronjob') . "', 'Stonierung an Shop übertragen')" - ); - $this->RemoteCommand($shopId,'storniereauftrag',$data); - $shopextstatus='storniert'; - $this->app->DB->Update("UPDATE auftrag SET shopextstatus='$shopextstatus' WHERE id='$orderId' LIMIT 1"); - } + ); + $this->RemoteCommand($shopId, 'storniereauftrag', $data); + $shopextstatus = 'storniert'; + $this->app->DB->Update("UPDATE auftrag SET shopextstatus='$shopextstatus' WHERE id='$orderId' LIMIT 1"); + } - /** - * @param int $shopId - * @param int $fileId - * - * @return mixed - * @throws Exception - */ - public function RemoteDeleteFile($shopId, $fileId) - { - $inhalt = $this->app->erp->GetDatei($fileId); - $fileArr = $this->app->DB->SelectRow("SELECT titel,beschreibung FROM datei WHERE id='$fileId' LIMIT 1"); - $titel = $fileArr['titel']; - $beschreibung = $fileArr['beschreibung']; + /** + * @param int $shopId + * @param int $fileId + * + * @return mixed + * @throws Exception + */ + public function RemoteDeleteFile($shopId, $fileId) { + $inhalt = $this->app->erp->GetDatei($fileId); + $fileArr = $this->app->DB->SelectRow("SELECT titel,beschreibung FROM datei WHERE id='$fileId' LIMIT 1"); + $titel = $fileArr['titel']; + $beschreibung = $fileArr['beschreibung']; - $data['datei'] = $fileId; - //$data['checksum'] = md5($inhalt); - $data['checksum'] = md5($inhalt.$titel.$beschreibung); - return $this->RemoteCommand($shopId,'deletefile',$data); - } + $data['datei'] = $fileId; + //$data['checksum'] = md5($inhalt); + $data['checksum'] = md5($inhalt . $titel . $beschreibung); + return $this->RemoteCommand($shopId, 'deletefile', $data); + } - /** - * @param int $articleId - * @param int $shopId - */ - public function RemoteUpdateFilesArtikel($articleId, $shopId) - { - $files = $this->app->DB->SelectArr("SELECT DISTINCT ds.datei + /** + * @param int $articleId + * @param int $shopId + */ + public function RemoteUpdateFilesArtikel($articleId, $shopId) { + $files = $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='$shopId')) AND - d.firma='".$this->app->User->GetFirma()."' AND a.shop='$shopId' AND a.id='$articleId'" - ); + d.firma='" . $this->app->User->GetFirma() . "' AND a.shop='$shopId' AND a.id='$articleId'" + ); - $tmp = $this->app->remote->RemoteGetFileListArticle($shopId,$articleId); - if(!empty($tmp)){ - foreach ($tmp as $row) { - $checkarray[$row['datei']] = $row['checksum']; - } - } - - if(!empty($files)){ - foreach($files as $file) { - $fid = $file['datei']; - $geloescht = $this->app->DB->Select("SELECT geloescht FROM datei WHERE id='$fid' LIMIT 1"); - if($geloescht){ - $this->app->remote->RemoteDeleteFile($shopId, $fid); - $checkarray[$fid] = 'delete'; - }else{ - $md5 = !empty($checkarray[$fid]) ? (String)$checkarray[$fid] : ''; - $md5file = md5($this->app->erp->GetDatei($fid)); - if($md5 !== $md5file){ - $this->app->remote->RemoteSendFile($shopId, $fid); - $this->app->remote->RemoteAddFileSubject($shopId, $fid); - $checkarray[$fid] = 'update'; - } + $tmp = $this->app->remote->RemoteGetFileListArticle($shopId, $articleId); + if (!empty($tmp)) { + foreach ($tmp as $row) { + $checkarray[$row['datei']] = $row['checksum']; + } } - $checkarray[$fid] = 'mark'; - } - } - if(!empty($checkarray)) - { - foreach($checkarray as $key=>$value) - { - if($checkarray[$key]!=='mark' && $checkarray[$key]!=='delete' && $checkarray[$key]!=='update') - { - $this->app->remote->RemoteDeleteFile($shopId,$key); + + if (!empty($files)) { + foreach ($files as $file) { + $fid = $file['datei']; + $geloescht = $this->app->DB->Select("SELECT geloescht FROM datei WHERE id='$fid' LIMIT 1"); + if ($geloescht) { + $this->app->remote->RemoteDeleteFile($shopId, $fid); + $checkarray[$fid] = 'delete'; + } else { + $md5 = !empty($checkarray[$fid]) ? (String) $checkarray[$fid] : ''; + $md5file = md5($this->app->erp->GetDatei($fid)); + if ($md5 !== $md5file) { + $this->app->remote->RemoteSendFile($shopId, $fid); + $this->app->remote->RemoteAddFileSubject($shopId, $fid); + $checkarray[$fid] = 'update'; + } + } + $checkarray[$fid] = 'mark'; + } + } + if (!empty($checkarray)) { + foreach ($checkarray as $key => $value) { + if ($checkarray[$key] !== 'mark' && $checkarray[$key] !== 'delete' && $checkarray[$key] !== 'update') { + $this->app->remote->RemoteDeleteFile($shopId, $key); + } + } } - } } - } + /** + * @param int $shopId + * @param int $fileId + * + * @return mixed|string + * @throws Exception + */ + public function RemoteSendFile($shopId, $fileId) { + // sende stichwoerter + $fileArr = $this->app->DB->SelectRow("SELECT geloescht, titel, beschreibung FROM datei WHERE id='$fileId' LIMIT 1"); + if (empty($fileArr)) { + return ''; + } + $geloescht = $fileArr['geloescht']; + $titel = $fileArr['titel']; + $beschreibung = $fileArr['beschreibung']; - /** - * @param int $shopId - * @param int $fileId - * - * @return mixed|string - * @throws Exception - */ - public function RemoteSendFile($shopId, $fileId) - { - // sende stichwoerter - $fileArr = $this->app->DB->SelectRow("SELECT geloescht, titel, beschreibung FROM datei WHERE id='$fileId' LIMIT 1"); - if(empty($fileArr)) { - return ''; + $inhalt = $this->app->erp->GetDatei($fileId); + $data['datei'] = $fileId; + $data['titel'] = $titel; + $data['beschreibung'] = $beschreibung; + $data['inhalt'] = base64_encode($inhalt); + $data['checksum'] = md5($inhalt . $titel . $beschreibung); + if (!$geloescht) { + return $this->RemoteCommand($shopId, 'sendfile', $data); + } + return ''; } - $geloescht = $fileArr['geloescht']; - $titel = $fileArr['titel']; - $beschreibung = $fileArr['beschreibung']; - $inhalt = $this->app->erp->GetDatei($fileId); - $data['datei'] = $fileId; - $data['titel'] = $titel; - $data['beschreibung'] =$beschreibung; - $data['inhalt'] = base64_encode($inhalt); - $data['checksum'] = md5($inhalt.$titel.$beschreibung); - if(!$geloescht){ - return $this->RemoteCommand($shopId, 'sendfile', $data); - } - return ''; - } - - /** - * @param int $shopId - * @param int $fileId - * - * @throws Exception - */ - public function RemoteAddFileSubject($shopId, $fileId) - { - // sende stichwoerter - $fileList = $this->app->DB->SelectArr("SELECT subjekt, parameter + /** + * @param int $shopId + * @param int $fileId + * + * @throws Exception + */ + public function RemoteAddFileSubject($shopId, $fileId) { + // sende stichwoerter + $fileList = $this->app->DB->SelectArr("SELECT subjekt, parameter FROM datei_stichwoerter WHERE (objekt='Artikel' OR objekt='Kampangen') AND datei='$fileId'" - ); - if(empty($fileList)) { - return; - } - - foreach($fileList as $fileRow) { - $geloescht = $this->app->DB->Select("SELECT geloescht FROM datei WHERE id='$fileId' LIMIT 1"); - $stichwort['subjekt'] = $fileRow['subjekt']; - $stichwort['artikel'] = $fileRow['parameter']; - $stichwort['datei'] = $fileId; - if(!$geloescht){ - $this->RemoteCommand($shopId, 'addfilesubjekt', $stichwort); - } - } - } - - /** - * @param int $shopId - * @param array $artikel - * - * @return mixed - * @throws Exception - */ - public function RemoteDeleteArticle($shopId,$artikel) - { - return $this->RemoteCommand($shopId,'deletearticle',$artikel); - } - - /** - * @param int $shopId - * @param array $partner - * - * @return mixed - * @throws Exception - */ - public function RemoteSendPartner($shopId, $partner) - { - return $this->RemoteCommand($shopId, 'partnerlist', $partner); - } - - /** - * @param object $obj - * @param string $methodname - * - * @return string - */ - public function getMethod($obj, $methodname) - { - $methodname = trim((String)$methodname); - if($methodname === '') - { - return ''; - } - if(!$obj) - { - return ''; - } - if(method_exists($obj, $methodname)) - { - return $methodname; - } - $methods = get_class_methods($obj); - $classname = get_class($obj); - foreach($methods as $v) - { - if(strtolower($v) === 'import'.strtolower($methodname)) - { - return $v; - } - if(strtolower($v) === strtolower($classname.$methodname)) - { - return $v; - } - } - foreach($methods as $v) - { - if(strtolower($v) === strtolower($methodname)) - { - return $v; - } - } - return ''; - } - - /** - * @param int $id - * @param string $action - * @param string|array $data - * - * @return mixed - * @throws Exception - */ - public function RemoteCommand($id,$action,$data='') - { - $challenge = ''; - $shoptyp = $this->app->DB->Select("SELECT shoptyp FROM shopexport WHERE id='$id' LIMIT 1"); - $modulename = trim($this->app->DB->Select("SELECT modulename FROM shopexport WHERE id='$id' LIMIT 1"),'.'); - $isActionAuth = $action === 'auth'; - if($shoptyp === 'custom') - { - if($modulename != '') - { - - $file = dirname(__DIR__) . '/plugins/external/shopimporter/'.$modulename; - $classa = explode('_',str_replace('_'.$id.'.php','', $modulename)); - foreach($classa as $k => $v) - { - $classa[$k] = ucfirst($v); + ); + if (empty($fileList)) { + return; } - $class = implode('_', $classa); - if($this->app->DB->Select("SELECT aktiv FROM shopexport WHERE id = '$id' LIMIT 1")) - { - if(file_exists($file)) - { - include_once($file); - if(class_exists($class)){ - $obj = new $class($this->app, true); - if($obj){ - if(method_exists($obj,'getKonfig')) - { - $obj->getKonfig($id, $data); - } - $method = $this->getMethod($obj, $action); - if(method_exists($obj,$method)) - { - $ret = $obj->$method(); - if(!empty($this->app->stringcleaner)){ - $this->app->stringcleaner->XMLArray_clean($ret); - } - }elseif($isActionAuth) - { - return 'Fehler: Importer konnte nicht initialisiert werden'; - } - }elseif($isActionAuth) - { - return 'Fehler: Importer konnte nicht initialisiert werden'; - } - }elseif($isActionAuth) - { - return 'Fehler: Importer konnte nicht initialisiert werden'; + + foreach ($fileList as $fileRow) { + $geloescht = $this->app->DB->Select("SELECT geloescht FROM datei WHERE id='$fileId' LIMIT 1"); + $stichwort['subjekt'] = $fileRow['subjekt']; + $stichwort['artikel'] = $fileRow['parameter']; + $stichwort['datei'] = $fileId; + if (!$geloescht) { + $this->RemoteCommand($shopId, 'addfilesubjekt', $stichwort); } - }elseif($isActionAuth) - { - return 'Fehler: Datei '.$file.' existiert nicht'; - } - }elseif($isActionAuth) { - return 'Fehler: Schnittstelle nicht aktiv'; } - } - return ''; } - if($shoptyp === 'intern') - { - if($modulename != '') - { - if($this->app->erp->ModulVorhanden($modulename)) - { - $obj = $this->app->erp->LoadModul($modulename); - if($obj){ - if(method_exists($obj,'getKonfig')) - { - $obj->getKonfig($id, $data); + + /** + * @param int $shopId + * @param array $artikel + * + * @return mixed + * @throws Exception + */ + public function RemoteDeleteArticle($shopId, $artikel) { + return $this->RemoteCommand($shopId, 'deletearticle', $artikel); + } + + /** + * @param int $shopId + * @param array $partner + * + * @return mixed + * @throws Exception + */ + public function RemoteSendPartner($shopId, $partner) { + return $this->RemoteCommand($shopId, 'partnerlist', $partner); + } + + /** + * @param object $obj + * @param string $methodname + * + * @return string + */ + public function getMethod($obj, $methodname) { + $methodname = trim((String) $methodname); + if ($methodname === '') { + return ''; + } + if (!$obj) { + return ''; + } + if (method_exists($obj, $methodname)) { + return $methodname; + } + $methods = get_class_methods($obj); + $classname = get_class($obj); + foreach ($methods as $v) { + if (strtolower($v) === 'import' . strtolower($methodname)) { + return $v; } - $method = 'Import'.$action; - if(method_exists($obj,$method)) { - try { - $ret = $obj->$method(); - } - catch(Exception $e) { - if($isActionAuth) { - return 'Fehler: '.$e->getMessage(); + if (strtolower($v) === strtolower($classname . $methodname)) { + return $v; + } + } + foreach ($methods as $v) { + if (strtolower($v) === strtolower($methodname)) { + return $v; + } + } + return ''; + } + + /** + * @param int $id + * @param string $action + * @param string|array $data + * + * @return mixed + * @throws Exception + */ + public function RemoteCommand($id, $action, $data = '') { + $challenge = ''; + $shoptyp = $this->app->DB->Select("SELECT shoptyp FROM shopexport WHERE id='$id' LIMIT 1"); + $modulename = trim($this->app->DB->Select("SELECT modulename FROM shopexport WHERE id='$id' LIMIT 1"), '.'); + $isActionAuth = $action === 'auth'; + if ($shoptyp === 'custom') { + if ($modulename != '') { + + $file = dirname(__DIR__) . '/plugins/external/shopimporter/' . $modulename; + $classa = explode('_', str_replace('_' . $id . '.php', '', $modulename)); + foreach ($classa as $k => $v) { + $classa[$k] = ucfirst($v); } + $class = implode('_', $classa); + if ($this->app->DB->Select("SELECT aktiv FROM shopexport WHERE id = '$id' LIMIT 1")) { + if (file_exists($file)) { + include_once($file); + if (class_exists($class)) { + $obj = new $class($this->app, true); + if ($obj) { + if (method_exists($obj, 'getKonfig')) { + $obj->getKonfig($id, $data); + } + $method = $this->getMethod($obj, $action); + if (method_exists($obj, $method)) { + $ret = $obj->$method(); + if (!empty($this->app->stringcleaner)) { + $this->app->stringcleaner->XMLArray_clean($ret); + } + } elseif ($isActionAuth) { + return 'Fehler: Importer konnte nicht initialisiert werden'; + } + } elseif ($isActionAuth) { + return 'Fehler: Importer konnte nicht initialisiert werden'; + } + } elseif ($isActionAuth) { + return 'Fehler: Importer konnte nicht initialisiert werden'; + } + } elseif ($isActionAuth) { + return 'Fehler: Datei ' . $file . ' existiert nicht'; + } + } elseif ($isActionAuth) { + return 'Fehler: Schnittstelle nicht aktiv'; + } + } + return ''; + } + if ($shoptyp === 'intern') { + if ($modulename != '') { + if ($this->app->erp->ModulVorhanden($modulename)) { + $obj = $this->app->erp->LoadModul($modulename); + if ($obj) { + if (method_exists($obj, 'getKonfig')) { + $obj->getKonfig($id, $data); + } + $method = 'Import' . $action; + if (method_exists($obj, $method)) { + try { + $ret = $obj->$method(); + } catch (Exception $e) { + if ($isActionAuth) { + return 'Fehler: ' . $e->getMessage(); + } + return ''; + } + + if (!empty($this->app->stringcleaner)) { + $this->app->stringcleaner->XMLArray_clean($ret); + } + $this->parseReturn($ret, $id, $action); + return $ret; + } + } elseif ($isActionAuth) { + return 'Fehler: Importer konnte nicht initialisiert werden'; + } + } elseif ($isActionAuth) { + return 'Fehler: Dieses Modul ist nicht verfügbar'; + } + } elseif ($isActionAuth) { + return 'Fehler: Kein Modul vorhanden'; + } + return ''; + } + $shopexport = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id='$id' LIMIT 1"); + if ($shopexport) { + if ($shopexport['shoptyp'] === 'intern' || $shopexport['shoptyp'] === 'custom') { return ''; - } - - if(!empty($this->app->stringcleaner)){ - $this->app->stringcleaner->XMLArray_clean($ret); - } - $this->parseReturn($ret, $id, $action); - return $ret; } - }elseif($isActionAuth) - { - return 'Fehler: Importer konnte nicht initialisiert werden'; - } - }elseif($isActionAuth) - { - return 'Fehler: Dieses Modul ist nicht verfügbar'; + $token = $shopexport['token']; + $url = $shopexport['url']; + $z = $shopexport['passwort']; + $bezeichnung = $shopexport['bezeichnung']; + } else { + $token = ''; + $z = ''; + $url = ''; } - }elseif($isActionAuth) - { - return 'Fehler: Kein Modul vorhanden'; - } - return ''; - } - $shopexport = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id='$id' LIMIT 1"); - if($shopexport){ - if($shopexport['shoptyp'] === 'intern' || $shopexport['shoptyp'] === 'custom'){ - return ''; - } - $token = $shopexport['token']; - $url = $shopexport['url']; - $z = $shopexport['passwort']; - $bezeichnung = $shopexport['bezeichnung']; - } - else { - $token = ''; - $z = ''; - $url = ''; - } - if($isActionAuth) { - if($token === '' || strlen($z) < 32 || $url === '') { - return 'Fehler: Bitte Zugangsdaten prüfen'; - } - } - elseif($token === '' || strlen($z) < 32 || $url === '' || !$this->app->DB->Select("SELECT id FROM shopexport WHERE id = '$id' AND aktiv = 1 LIMIT 1")){ - return ''; - } - - $tmp = parse_url($url); - $tmp['host'] = rtrim($tmp['host'],'/'); - $tmp['path'] = rtrim($tmp['path'],'/').'/'; - - $aes = new AES($z); - $token = base64_encode($aes->encrypt(serialize($token))); - $client = new HttpClient($tmp['host'], stripos($url,'https') === 0?443:80); - $geturl = $tmp['path'].'index.php?module=import&action='.$action.'&challenge='.(isset($challenge)?$challenge:''); - //Kein Fragezeichen vor module=import... - if(false !== stripos($bezeichnung, 'woocommerce')) { - $geturl = $tmp['path'].'module=import&action='.$action.'&challenge='.(isset($challenge)?$challenge:''); - } - if(false !== stripos($bezeichnung, 'shopware plugin')) { - $geturl = $tmp['path'].'wawisionimporter/?smodule=import&saction='.$action.'&challenge='.(isset($challenge)?$challenge:''); - } - - $post_data['token'] = $token; - $post_data['data'] = base64_encode(serialize($data)); - $client->timeout = 120; - if(!$client->post($geturl,$post_data)) { - $this->app->erp->LogFile(mysqli_real_escape_string($this->app->DB->connection,'An error occurred: '.$client->getError())); - throw new Exception('An error occurred: '.$client->getError()); - //return 'Netzwerkverbindung von WaWison zu Shopimporter fehlgeschlagen: '.$client->getError(); - } - $ret = unserialize(base64_decode($client->getContent())); - if(!empty($this->app->stringcleaner)){ - $this->app->stringcleaner->XMLArray_clean($ret); - } - $this->parseReturn($ret, $id, $action); - return $ret; - } - - /** - * @param mixed $ret - * @param int $id - * @param string $action - */ - public function parseReturn($ret, $id, $action) - { - if($action === 'getarticlelist') { - if(empty($ret)) { - return; - } - $anz = 0; - if(empty($ret['errors'])) { - foreach($ret as $v) { - $anz++; - $this->app->DB->Insert("INSERT INTO shopexport_getarticles (shop, nummer) VALUES ('$id', '".$this->app->DB->real_escape_string($v)."')"); + if ($isActionAuth) { + if ($token === '' || strlen($z) < 32 || $url === '') { + return 'Fehler: Bitte Zugangsdaten prüfen'; + } + } elseif ($token === '' || strlen($z) < 32 || $url === '' || !$this->app->DB->Select("SELECT id FROM shopexport WHERE id = '$id' AND aktiv = 1 LIMIT 1")) { + return ''; } - if(!$this->app->DB->Select("SELECT id FROM `prozessstarter` WHERE aktiv = 1 AND parameter = 'getarticles' LIMIT 1")) { - $this->app->DB->Update("UPDATE `prozessstarter` SET aktiv = 1 WHERE parameter = 'getarticles' LIMIT 1"); + + $tmp = parse_url($url); + $tmp['host'] = rtrim($tmp['host'], '/'); + $tmp['path'] = rtrim($tmp['path'], '/') . '/'; + + $aes = new AES($z); + $token = base64_encode($aes->encrypt(serialize($token))); + $client = new HttpClient($tmp['host'], stripos($url, 'https') === 0 ? 443 : 80); + $geturl = $tmp['path'] . 'index.php?module=import&action=' . $action . '&challenge=' . (isset($challenge) ? $challenge : ''); + //Kein Fragezeichen vor module=import... + if (false !== stripos($bezeichnung, 'woocommerce')) { + $geturl = $tmp['path'] . 'module=import&action=' . $action . '&challenge=' . (isset($challenge) ? $challenge : ''); } - $this->app->DB->Update("UPDATE `prozessstarter` SET letzteausfuerhung = DATE_SUB(now(), INTERVAL periode MINUTE) WHERE aktiv = 1 AND parameter = 'getarticles' AND mutex = 0 LIMIT 1"); - } - $this->app->erp->SetKonfigurationValue('artikelimportanzahl_'.$id, $anz); + if (false !== stripos($bezeichnung, 'shopware plugin')) { + $geturl = $tmp['path'] . 'wawisionimporter/?smodule=import&saction=' . $action . '&challenge=' . (isset($challenge) ? $challenge : ''); + } + + $post_data['token'] = $token; + $post_data['data'] = base64_encode(serialize($data)); + $client->timeout = 120; + if (!$client->post($geturl, $post_data)) { + $this->app->erp->LogFile(mysqli_real_escape_string($this->app->DB->connection, 'An error occurred: ' . $client->getError())); + throw new Exception('An error occurred: ' . $client->getError()); + //return 'Netzwerkverbindung von WaWison zu Shopimporter fehlgeschlagen: '.$client->getError(); + } + $ret = unserialize(base64_decode($client->getContent())); + if (!empty($this->app->stringcleaner)) { + $this->app->stringcleaner->XMLArray_clean($ret); + } + $this->parseReturn($ret, $id, $action); + return $ret; } - } - /** - * @param int $id - * @param string $action - * @param string|array $data - * - * @return mixed|string - * @throws Exception - */ - public function RemoteCommandAES($id,$action,$data='') - { - $challenge = ''; - $shopexport = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id='$id' LIMIT 1"); - if(!empty($shopexport)){ - if($shopexport['shoptyp'] === 'intern' || $shopexport['shoptyp'] === 'custom'){ - return ''; - } - $token = $shopexport['token']; - $url = $shopexport['url']; - $z = $shopexport['passwort']; - if($z === '' || $token === '' || $url === '') - { - throw new Exception('Der ImportKey/ImportToken/ImportUrl ist leer'); - } + /** + * @param mixed $ret + * @param int $id + * @param string $action + */ + public function parseReturn($ret, $id, $action) { + if ($action === 'getarticlelist') { + if (empty($ret)) { + return; + } + $anz = 0; + if (empty($ret['errors'])) { + foreach ($ret as $v) { + $anz++; + $this->app->DB->Insert("INSERT INTO shopexport_getarticles (shop, nummer) VALUES ('$id', '" . $this->app->DB->real_escape_string($v) . "')"); + } + if (!$this->app->DB->Select("SELECT id FROM `prozessstarter` WHERE aktiv = 1 AND parameter = 'getarticles' LIMIT 1")) { + $this->app->DB->Update("UPDATE `prozessstarter` SET aktiv = 1 WHERE parameter = 'getarticles' LIMIT 1"); + } + $this->app->DB->Update("UPDATE `prozessstarter` SET letzteausfuerhung = DATE_SUB(now(), INTERVAL periode MINUTE) WHERE aktiv = 1 AND parameter = 'getarticles' AND mutex = 0 LIMIT 1"); + } + $this->app->erp->SetKonfigurationValue('artikelimportanzahl_' . $id, $anz); + } } - $tmp = parse_url($url); - $aes = new AES($z); - $token = base64_encode($aes->encrypt(serialize($token))); + /** + * @param int $id + * @param string $action + * @param string|array $data + * + * @return mixed|string + * @throws Exception + */ + public function RemoteCommandAES($id, $action, $data = '') { + $challenge = ''; + $shopexport = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id='$id' LIMIT 1"); + if (!empty($shopexport)) { + if ($shopexport['shoptyp'] === 'intern' || $shopexport['shoptyp'] === 'custom') { + return ''; + } + $token = $shopexport['token']; + $url = $shopexport['url']; + $z = $shopexport['passwort']; + if ($z === '' || $token === '' || $url === '') { + throw new Exception('Der ImportKey/ImportToken/ImportUrl ist leer'); + } + } + $tmp = parse_url($url); - $client = new HttpClient($tmp['host']); - $geturl = $tmp['path'].'index.php?module=import&action='.$action.'&challenge='.$challenge; + $aes = new AES($z); + $token = base64_encode($aes->encrypt(serialize($token))); - $post_data['token'] = $token; - $post_data['data'] = base64_encode($aes->encrypt(serialize($data))); + $client = new HttpClient($tmp['host']); + $geturl = $tmp['path'] . 'index.php?module=import&action=' . $action . '&challenge=' . $challenge; - if(!$client->post($geturl,$post_data)) - { - $this->app->erp->LogFile(mysqli_real_escape_string($this->app->DB->connection,'An error occurred: '.$client->getError())); - throw new Exception('An error occurred: '.$client->getError()); + $post_data['token'] = $token; + $post_data['data'] = base64_encode($aes->encrypt(serialize($data))); + + if (!$client->post($geturl, $post_data)) { + $this->app->erp->LogFile(mysqli_real_escape_string($this->app->DB->connection, 'An error occurred: ' . $client->getError())); + throw new Exception('An error occurred: ' . $client->getError()); + } + return unserialize($aes->decrypt(base64_decode($client->getContent()))); } - return unserialize($aes->decrypt(base64_decode($client->getContent()))); - } } +