mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-27 07:00:29 +01:00
3367 lines
123 KiB
PHP
3367 lines
123 KiB
PHP
<?php
|
|
/*
|
|
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
|
*
|
|
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
|
|
*
|
|
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
|
|
*
|
|
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
|
|
* to obtain the text of the corresponding license version.
|
|
*
|
|
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
|
*/
|
|
?>
|
|
<?php
|
|
use Xentral\Components\Http\JsonResponse;
|
|
|
|
class Shopimporter_Shopware extends ShopimporterBase
|
|
{
|
|
var $intern = false;
|
|
var $shopid;
|
|
var $data;
|
|
var $nurpreise;
|
|
var $url;
|
|
var $kategorien;
|
|
var $groups;
|
|
var $ignoreartikelbeschreibung;
|
|
var $useorderid;
|
|
protected $protokoll;
|
|
/**
|
|
* @var Application
|
|
*/
|
|
protected $app;
|
|
protected $dump;
|
|
|
|
|
|
protected $abzuholenderStatusId = 0;
|
|
protected $abgeholtStatusId = 1;
|
|
protected $abgeschlossenStatusId = 7;
|
|
|
|
/** @var bool $useDigestAuth */
|
|
protected $useDigestAuth;
|
|
|
|
/**
|
|
* @var Shopimporter_Shopware_Adapter
|
|
*/
|
|
protected $adapter;
|
|
/* Legacy Objekt für überladene Shopimporter */
|
|
public $client;
|
|
|
|
public function __construct($app, $intern = false)
|
|
{
|
|
$this->app=$app;
|
|
$this->intern = true;
|
|
if($intern)
|
|
{
|
|
return;
|
|
}
|
|
$this->app->ActionHandlerInit($this);
|
|
|
|
$this->dump=false;
|
|
|
|
$this->app->ActionHandler("auth","ImportAuth");
|
|
$this->app->ActionHandler("list","ImportList");
|
|
$this->app->ActionHandler("getlist","ImportGetList");
|
|
$this->app->ActionHandler("sendlist","ImportSendList");
|
|
$this->app->ActionHandler("sendadresse","ImportSendAdresse");
|
|
$this->app->ActionHandler("creategroup","ImportCreateGroup");
|
|
$this->app->ActionHandler("sendlistlager","ImportSendListLager");
|
|
$this->app->ActionHandler("getarticle","ImportGetArticle");
|
|
$this->app->ActionHandler("getfilelist","ImportGetFileList");
|
|
$this->app->ActionHandler("getfilelistarticle","ImportGetFileListArticle");
|
|
$this->app->ActionHandler("getauftraegeanzahl","ImportGetAuftraegeAnzahl");
|
|
$this->app->ActionHandler("getauftrag","ImportGetAuftrag");
|
|
$this->app->ActionHandler("deletearticle","ImportDeleteArticle");
|
|
$this->app->ActionHandler("sendfile","ImportSendFile");
|
|
$this->app->ActionHandler("deletefile","ImportDeleteFile");
|
|
$this->app->ActionHandler("deleteauftrag","ImportDeleteAuftrag");
|
|
$this->app->ActionHandler("updateauftrag","ImportUpdateAuftrag");
|
|
$this->app->ActionHandler("navigation","ImportNavigation");
|
|
$this->app->ActionHandler("artikelgruppen","ImportArtikelgruppen");
|
|
$this->app->ActionHandler("exportlink","ImportExportlink");
|
|
$this->app->ActionHandler("artikelartikelgruppen","ImportArtikelArtikelGruppe");
|
|
$this->app->ActionHandler("addfilesubjekt","ImportAddFileSubjekt");
|
|
$this->app->ActionHandler("inhalt","ImportInhalt");
|
|
$this->app->ActionHandler("test","ImportTest");
|
|
$this->app->ActionHandler("partnerlist","ImportPartnerList");
|
|
$this->app->ActionHandler("getarticlelist","ImportGetArticleList");
|
|
$this->app->ActionHandler("updatezahlungsstatus","ImportUpdateZahlungsstatus");
|
|
$this->app->ActionHandler("storniereauftrag","ImportStorniereAuftrag");
|
|
|
|
$this->app->DefaultActionHandler("list");
|
|
$this->app->ActionHandlerListen($app);
|
|
}
|
|
|
|
/**
|
|
* @param null $dummy
|
|
*/
|
|
public function DumpVar($dummy = null)
|
|
{
|
|
|
|
}
|
|
|
|
|
|
public function ImportCreateGroup(){
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
$gruppenfilter = 'filter[0][property]=key&filter[0][expression]==&filter[0][value]='.$tmp['kennziffer'];
|
|
$gruppenresult = $this->adapter->get('customerGroups',[],$gruppenfilter);
|
|
|
|
$gruppendaten = array(
|
|
'discount' => $tmp['grundrabatt'],
|
|
'name' => $tmp['name']);
|
|
if(count($gruppenresult['data'])>0){
|
|
$this->adapter->put('customerGroups/'.$gruppenresult['data'][0]['id'], $gruppendaten);
|
|
}else{
|
|
$gruppendaten['key'] = $tmp['kennziffer'];
|
|
$this->adapter->post('customerGroups/', $gruppendaten);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public function ImportGetOrderStatus($external_order){
|
|
$order = $this->getOrderById($external_order);
|
|
$orderData = [];
|
|
if(!is_array($order)){
|
|
//Muss nicht zwingend heißen dass die Bestellung gelöscht wurde, vielleicht nur Verbindungsproblem?
|
|
//return 'deleted';
|
|
}
|
|
$orderData['orderStatus'] = 'unpaid';
|
|
if((int)$order['data']['orderStatusId'] === 4){
|
|
$orderData['orderStatus'] = 'canceled';
|
|
}
|
|
if((int)$order['data']['paymentStatusId'] === 12){
|
|
$orderData['orderStatus'] = 'paid';
|
|
}
|
|
return $orderData;
|
|
}
|
|
|
|
public function ImportSendAdresse(){
|
|
$adressId = $this->CatchRemoteCommand('data');
|
|
$meldung = array();
|
|
|
|
$data = reset($this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adressId'"));
|
|
|
|
if($data['email']){
|
|
$direktquery = 'filter[0][property]=email&filter[0][expression]==&filter[0][value]='.$data['email'];
|
|
$adresseAusShop = $this->adapter->get('customers',[],$direktquery);
|
|
$sprache = $data['sprache'];
|
|
$subshopid = $this->app->DB->Select("SELECT subshopkennung FROM shopexport_subshop WHERE shop='$this->shopid' and sprache='$sprache' and aktiv=1");
|
|
|
|
$firma ='';
|
|
if(strtolower($data['typ'])==='firma'){
|
|
$firma = $data['name'];
|
|
$name = explode(' ',$data['ansprechpartner']);
|
|
}else{
|
|
$name = explode(' ',$data['name']);
|
|
}
|
|
$vorname = $name[0];
|
|
unset($name[0]);
|
|
$nachname = implode(' ',$name);
|
|
$anrede = 'mr';
|
|
if(strtolower($data['typ'])==='frau'){
|
|
$anrede = 'ms';
|
|
}
|
|
$telefon = $data['telefon'];
|
|
if($data['abweichende_rechnungsadresse']){
|
|
$rechnungname = explode(' ',$data['rechnung_name']);
|
|
$rechnungnachname = (isset($rechnungname[1])?$rechnungname[1]:' ');
|
|
$rechnungstrasse = $data['rechnung_name'];
|
|
$rechnungort = $data['rechnung_ort'];
|
|
$rechnungplz = $data['rechnung_plz'];
|
|
$rechnungland = $data['rechnung_land'];
|
|
}else{
|
|
$rechnungname = $vorname;
|
|
$rechnungnachname = $nachname;
|
|
$rechnungstrasse = $data['strasse'];
|
|
$rechnungort = $data['ort'];
|
|
$rechnungplz = $data['plz'];
|
|
$rechnungland = $data['land'];
|
|
}
|
|
$gruppenschluessel = '';
|
|
$gruppen = $this->app->DB->SelectArr("SELECT g.kennziffer FROM adresse_rolle ar
|
|
JOIN gruppen g ON ar.parameter = g.id
|
|
WHERE ar.adresse = '$adressId' AND ar.subjekt = 'Mitglied' AND ar.objekt = 'Gruppe'");
|
|
|
|
if((!empty($gruppen)?count($gruppen):0)>0){
|
|
foreach ($gruppen as $key => $value) {
|
|
$gruppenfilter = 'filter[0][property]=key&filter[0][expression]==&filter[0][value]='.$value['kennziffer'];
|
|
$gruppenresult = $this->adapter->get('customerGroups',[],$gruppenfilter);
|
|
$gruppenschluessel = $gruppenresult['data'][0]['key'];
|
|
if($gruppenschluessel){
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
$rechnunglandid = 2;
|
|
$laender = $this->adapter->get('countries');
|
|
foreach ($laender['data'] as $indexkey => $laenderdata) {
|
|
if($laenderdata['iso'] === $rechnungland){
|
|
$rechnunglandid = $laenderdata['id'];
|
|
break;
|
|
}
|
|
}
|
|
|
|
$adressdaten = array();
|
|
$adressdaten['firstname'] = $vorname;
|
|
$adressdaten['lastname'] = $nachname;
|
|
$adressdaten['salutation'] = $anrede;
|
|
$adressdaten['billing']['firstname'] = $rechnungname;
|
|
$adressdaten['billing']['lastname'] = $rechnungnachname;
|
|
$adressdaten['billing']['salutation'] = $anrede;
|
|
$adressdaten['billing']['street'] = $rechnungstrasse;
|
|
$adressdaten['billing']['city'] = $rechnungort;
|
|
$adressdaten['billing']['zipcode'] = $rechnungplz;
|
|
$adressdaten['billing']['country'] = $rechnunglandid;
|
|
$adressdaten['billing']['phone'] = $telefon;
|
|
if($firma){
|
|
$adressdaten['billing']['company'] = $firma;
|
|
}
|
|
|
|
if($gruppenschluessel){
|
|
$adressdaten['groupKey'] = $gruppenschluessel;
|
|
}
|
|
|
|
if($data['kundennummer']){
|
|
$adressdaten['number'] = $data['kundennummer'];
|
|
}
|
|
|
|
if($subshopid){
|
|
$adressdaten['languageId'] = $subshopid;
|
|
}
|
|
|
|
if($adresseAusShop['total'] < 1){
|
|
//Adresse anlegen
|
|
$adressdaten['email'] = $data['email'];
|
|
//'encoderName' => "bcrypt",
|
|
//$adressdaten['password'] = $data['email']; //Besser wäre: //'hashPassword' => password_hash($data['email'],PASSWORD_BCRYPT),
|
|
|
|
$antwortVomShop = $this->adapter->post('customers', $adressdaten);
|
|
$meldungtext = 'angelegt.';
|
|
}else{
|
|
$antwortVomShop = $this->adapter->post('customers/'.$adresseAusShop['data'][0]['id'], $adressdaten);
|
|
$meldungtext = 'aktualisiert.';
|
|
}
|
|
if(is_array($antwortVomShop) && $antwortVomShop['success']){
|
|
$meldung['meldung'] = 'Adresse wurde erfolgreich '.$meldungtext;
|
|
}else{
|
|
$meldung['fehler'] = $antwortVomShop;
|
|
}
|
|
}
|
|
|
|
return $meldung;
|
|
}
|
|
|
|
public function ImportGetArticleList()
|
|
{
|
|
$limit = 1000;
|
|
$start = 1;
|
|
|
|
do{
|
|
$ret = [];
|
|
$params = array(
|
|
'limit' => $limit,
|
|
'start' => $start
|
|
);
|
|
$result = $this->adapter->get('articles',$params);
|
|
if(count($result['data'])>0){
|
|
foreach ($result['data'] as $article){
|
|
$ret[] = $article['mainDetail']['number'];
|
|
}
|
|
}
|
|
|
|
foreach($ret as $v)
|
|
{
|
|
$this->app->DB->Insert("INSERT INTO shopexport_getarticles (shop, nummer) VALUES ('$this->shopid', '".$this->app->DB->real_escape_string($v)."')");
|
|
}
|
|
$start +=$limit;
|
|
}while(count($result['data']) === $limit);
|
|
|
|
|
|
$anzahl = $this->app->DB->Select("SELECT COUNT(id) FROM shopexport_getarticles WHERE shop=$this->shopid");
|
|
$this->app->erp->SetKonfigurationValue('artikelimportanzahl_'.$this->shopid, $anzahl);
|
|
|
|
}
|
|
|
|
public function ImportStorniereAuftrag()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
$einstellungen = $this->app->DB->Select("SELECT einstellungen_json FROM shopexport WHERE id = '$this->shopid' LIMIT 1");
|
|
if($einstellungen)$einstellungen = json_decode($einstellungen,true);
|
|
$stornostatusid = $einstellungen['felder']['StorniertStatusID'];
|
|
|
|
$auftrag = $tmp['auftrag'];
|
|
$this->adapter->put('orders/'.$auftrag, array('orderStatusId' => $stornostatusid));
|
|
}
|
|
|
|
|
|
function getKonfig($shopid, $data)
|
|
{
|
|
$this->shopid = $shopid;
|
|
$this->data = $data;
|
|
$einstellungen = $this->app->DB->Select("SELECT einstellungen_json FROM shopexport WHERE id = '$shopid' LIMIT 1");
|
|
if($einstellungen)$einstellungen = json_decode($einstellungen,true);
|
|
|
|
$this->protokoll = $einstellungen['felder']['protokoll'];
|
|
$ImportShopwareApiUser = $einstellungen['felder']['ImportShopwareApiUser'];
|
|
$ImportShopwareKey = $einstellungen['felder']['ImportShopwareKey'];
|
|
$ImportShopwareApiUrl = $einstellungen['felder']['ImportShopwareApiUrl'];
|
|
$this->useorderid = $einstellungen['felder']['useorderid'];
|
|
$this->url = $ImportShopwareApiUrl;
|
|
$this->nurpreise = $this->app->DB->Select("SELECT nurpreise FROM shopexport WHERE id = '$shopid' LIMIT 1");
|
|
$this->RootCategoryName = $einstellungen['felder']['RootCategoryName'];
|
|
$useDigestAuth = !empty($einstellungen['felder']['useDigestAuth']);
|
|
|
|
include_once 'Shopimporter_Shopware_Adapter.php';
|
|
if($this->adapter === null){
|
|
$this->adapter = new Shopimporter_Shopware_Adapter($ImportShopwareApiUrl, $ImportShopwareApiUser, $ImportShopwareKey, $useDigestAuth);
|
|
|
|
// Legacy Objekt für überladene Shopimporter
|
|
$this->client = $this->adapter;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param $adapter
|
|
*/
|
|
public function setAdapter($adapter){
|
|
$this->adapter = $adapter;
|
|
}
|
|
|
|
public function getAdapter(){
|
|
return $this->adapter;
|
|
}
|
|
|
|
|
|
public function EinstellungenStruktur()
|
|
{
|
|
return
|
|
array(
|
|
'ausblenden'=>array('abholmodus'=>array('zeitbereich')),
|
|
'erlauben'=>array('nurpreise'),
|
|
'archiv'=>array('ab_nummer'),
|
|
'functions'=>array('getarticlelist','updatezahlungsstatus','exportartikelbaum'),
|
|
'felder'=>array(
|
|
'protokoll'=>array('typ'=>'checkbox','bezeichnung'=>'Protokollierung im Logfile:'),
|
|
'ImportShopwareApiUser'=>array('typ'=>'text','bezeichnung'=>'{|API User:','size'=>40),
|
|
'ImportShopwareKey'=>array('typ'=>'text','bezeichnung'=>'{|API Key|}:','size'=>40),
|
|
'ImportShopwareApiUrl'=>array('typ'=>'text','bezeichnung'=>'{|API URL|}:','size'=>40),
|
|
'StorniertStatusID'=>array('typ'=>'text','bezeichnung'=>'{|Storniert Status ID|}:','size'=>5, 'default'=>'4'),
|
|
'priceGroupIdStandard'=>array('typ'=>'text','bezeichnung'=>'{|ID Standard Preisgruppe|}:','size'=>5, 'default'=>'1'),
|
|
'limitedtosubshop'=>array('typ'=>'text','bezeichnung'=>'{|Begrenzen auf Subshop|}:','size'=>5, 'default'=>''),
|
|
'benutzergruppenuebernehmen'=>array('typ'=>'checkbox','bezeichnung'=>'{|Benutzergruppen aus Shop übernehmen|}:'),
|
|
'benutzergruppenanlegen'=>array('typ'=>'checkbox','bezeichnung'=>'{|Neue Benutzergruppen anlegen|}:'),
|
|
'gutscheinalslagerartikel'=>array('typ'=>'checkbox','bezeichnung'=>'{|Gutscheine als Lagerartikel anlegen|}:'),
|
|
'RootCategoryName'=>array('typ'=>'text','bezeichnung'=>'{|Wurzelkategoriename|}:', 'default' => 'Deutsch'),
|
|
'useorderid'=>array('typ'=>'checkbox','bezeichnung'=>'{|Order ID statt Bestellnummer verwenden|}:'),
|
|
'getunpaidorders'=>array('typ'=>'checkbox','bezeichnung'=>'{|Unbezahlte Bestellungen abholen|}:'),
|
|
'useDigestAuth'=>array('typ'=>'checkbox','bezeichnung'=>'{|Authentifizierung über Digest|}:')
|
|
));
|
|
}
|
|
|
|
|
|
|
|
public function ImportSendArtikelbaum(){
|
|
$kategorienbaum = [];
|
|
$this->app->erp->GetKategorienbaum($kategorienbaum, 0, 0, $this->shopid);
|
|
//Wenn Artikelbaum übertragen wird, Arays vorbereiten
|
|
$kategorieparentid = array();
|
|
foreach ($kategorienbaum as $key => $value) {
|
|
$kategorienbaum[$key]['erledigt'] = false;
|
|
$kategorienbaum[$key]['shopid'] = '';
|
|
$kategorienbaum[$key]['aktiv'] = false;
|
|
$kategorieparentid[$value['id']] = $key;
|
|
}
|
|
|
|
$rootcategoryid = 1;
|
|
if(!empty($this->RootCategoryName)){
|
|
$params = ['filter' => [[
|
|
'property' => 'name',
|
|
'value' => $this->RootCategoryName
|
|
]]];
|
|
$result = $this->adapter->get('categories', $params);
|
|
if($result['total'] > 0){
|
|
$rootcategoryid = $result['data'][0]['id'];
|
|
}
|
|
}elseif(strtolower($kategorienbaum[0]['bezeichnung']) === 'root'){
|
|
$rootcategoryid = null;
|
|
}
|
|
|
|
foreach ($kategorienbaum as $key => $value) {
|
|
$this->kategoriebaumanlegen($key, $kategorienbaum, $kategorieparentid,$rootcategoryid);
|
|
}
|
|
}
|
|
|
|
private function kategoriebaumanlegen($id, &$kompletterbaum, $hilfsbaum, $rootcategoryid){
|
|
$idparent = $rootcategoryid;
|
|
$kategorieid = 0;
|
|
if($kompletterbaum[$id]['parent']){
|
|
$idparent = $kompletterbaum[$hilfsbaum[$kompletterbaum[$id]['parent']]]['shopid'];
|
|
}
|
|
if($kompletterbaum[$id]['parent'] && !$kompletterbaum[$hilfsbaum[$kompletterbaum[$id]['parent']]]['erledigt']){
|
|
$this->kategoriebaumanlegen($hilfsbaum[$kompletterbaum[$id]['parent']],$kompletterbaum,$hilfsbaum,$rootcategoryid);
|
|
}
|
|
$kompletterbaum[$id]['erledigt'] = true;
|
|
|
|
|
|
$kategoriebezeichnung = $kompletterbaum[$id]['bezeichnung'];
|
|
$params = [
|
|
'filter' => [
|
|
['property' => 'name','value' => $kategoriebezeichnung],
|
|
['property' => 'parentId','value' => $idparent]
|
|
]
|
|
];
|
|
$result = $this->adapter->get('categories', $params);
|
|
$gefunden = $result['total'];
|
|
if($gefunden)
|
|
{
|
|
$kategorieid = $result['data'][0]['id'];
|
|
}
|
|
|
|
if(!$kategorieid){
|
|
$kategoriedaten = array('parentId' => $idparent,
|
|
'name' => $kategoriebezeichnung,
|
|
'metaKeywords' => $kategoriebezeichnung,
|
|
'metaDescription' => $kategoriebezeichnung,
|
|
'cmsheadline' => $kategoriebezeichnung
|
|
);
|
|
$result = $this->adapter->post('categories', $kategoriedaten);
|
|
if($result['data']['id'])
|
|
{
|
|
$kategorieid = $result['data']['id'];
|
|
}
|
|
}
|
|
|
|
if($kategorieid){
|
|
$kompletterbaum[$id]['shopid'] = $kategorieid;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function ImportList()
|
|
{
|
|
$msg = $this->app->erp->base64_url_encode('<div class="info">Sie können hier die Shops einstellen</div>');
|
|
header('Location: index.php?module=onlineshops&action=list&msg='.$msg);
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* @param $nummer
|
|
* @param $fremdnummer
|
|
*
|
|
* @return array|null
|
|
* @throws Exception
|
|
*/
|
|
|
|
protected function getIdByNumber($artikelId, $nummer, $matrixartikel= false, $variantennummer = ''){
|
|
$params = array('useNumberAsId' => true);
|
|
$response = [
|
|
'id' => '',
|
|
'typ' => 'normal'
|
|
];
|
|
|
|
|
|
if($matrixartikel){
|
|
$id = $this->app->erp->GetShopArtikel($this->shopid,$artikelId,'ShopwareArtikelId');
|
|
if(!empty($id)){
|
|
$result = $this->adapter->put('articles/'.$id, []);
|
|
$id = '';
|
|
if(is_array($result)){
|
|
$id = $result['data']['id'];
|
|
}
|
|
}
|
|
if(!empty($id)){
|
|
$response['id'] = $id;
|
|
return $response;
|
|
}
|
|
$id = '';
|
|
$result = $this->adapter->get('articles/'.$nummer, $params);
|
|
if(is_array($result)){
|
|
$id = $result['data']['id'];
|
|
}
|
|
if(empty($id)){
|
|
$result = $this->adapter->get('variants/'.$variantennummer, $params);
|
|
if(is_array($result['data'])){
|
|
$id = $result['data']['articleId'];
|
|
}
|
|
}
|
|
if(!empty($id)){
|
|
$response['id'] = $id;
|
|
$this->app->erp->SaveShopArtikel($this->shopid, $artikelId, ['ShopwareArtikelId' => $response['id']], false);
|
|
return $response;
|
|
}
|
|
}
|
|
|
|
$result = $this->adapter->get('variants/'.$nummer, $params);
|
|
|
|
if(!is_array($result)){
|
|
return $response;
|
|
}
|
|
$response['id'] = $result['data']['articleId'];
|
|
if($matrixartikel && !empty($response['id'])){
|
|
$this->app->erp->SaveShopArtikel($this->shopid, $artikelId, ['ShopwareArtikelId' => $response['id']], false);
|
|
}
|
|
if(count($result['data']['configuratorOptions']) > 1){
|
|
//TODO
|
|
}
|
|
if($result['data']['id'] !== $result['data']['article']['mainDetailId']){
|
|
$response['id'] = $result['data']['id'];
|
|
$response['typ'] = 'variant';
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
|
|
protected function getVariantProductInfoByNumber($nummer, $fremdnummer,$forcevariant = false){
|
|
$params = array('useNumberAsId' => true);
|
|
$result = null;
|
|
$nummer = (string)$nummer;
|
|
$fremdnummer = (string)$fremdnummer;
|
|
|
|
if($fremdnummer !== '' && $fremdnummer !== $nummer){
|
|
$result = $this->adapter->get('articles/'.$fremdnummer,$params);
|
|
}
|
|
|
|
if(!is_array($result) && $nummer !== ''){
|
|
$result = $this->adapter->get('articles/'.$nummer, $params);
|
|
}
|
|
|
|
if(!is_array($result)){
|
|
return null;
|
|
}
|
|
|
|
if($result['data']['mainDetail']['number'] === $nummer || $result['data']['mainDetail']['number'] === $fremdnummer || $result['data']['mainDetail']['id'] === $nummer || $result['data']['mainDetail']['id'] === $fremdnummer){
|
|
if($forcevariant && !empty($result['data']['mainDetail']['id'])){
|
|
return array('typ'=>'variant', 'id' => $result['data']['mainDetail']['id']);
|
|
}
|
|
return array('typ'=>'normal', 'id' => $result['data']['id']);
|
|
}
|
|
foreach ($result['data']['details'] as $detail){
|
|
if($detail['number'] === $nummer || $detail['number'] === $fremdnummer || $detail['id'] === $nummer || $detail['id'] === $fremdnummer){
|
|
return array('typ'=>'variant', 'id' => $detail['id']);
|
|
}
|
|
}
|
|
|
|
return array('typ'=>'normal','id'=>$result['data']['id']);
|
|
}
|
|
|
|
protected function GetArticleByNumber($nummer, $fremdnummer = '')
|
|
{
|
|
$params = array('useNumberAsId' => true);
|
|
$result = null;
|
|
|
|
if($fremdnummer != '' && $fremdnummer != $nummer){
|
|
$result = $this->adapter->get('articles/'.$fremdnummer, $params);
|
|
}
|
|
|
|
if(!is_array($result) && $nummer != ''){
|
|
$result = $this->adapter->get('articles/'.$nummer, $params);
|
|
}
|
|
|
|
if(!is_array($result)){
|
|
return null;
|
|
}else{
|
|
return $result['data'];
|
|
}
|
|
}
|
|
|
|
protected function GetIdbyNummer($nummer, $fremdnummer = '')
|
|
{
|
|
$result = $this->GetArticleByNumber($nummer, $fremdnummer);
|
|
if(is_null($result))
|
|
{
|
|
return $result;
|
|
}
|
|
return $result['id'];
|
|
}
|
|
|
|
|
|
public function ImportPartnerList()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
if((!empty($tmp)?count($tmp):0) > 0)
|
|
{
|
|
foreach($tmp as $key=>$value)
|
|
{
|
|
|
|
$checkid = $this->app->DB->Select("SELECT id FROM s_emarketing_partner WHERE idcode='".$value['ref']."' AND idcode!='' LIMIT 1");
|
|
if($checkid<=0)
|
|
{
|
|
$this->app->DB->Insert("INSERT INTO s_emarketing_partner (id,idcode,datum,active,userID) VALUES ('','".$value['ref']."',NOW(),1,0)");
|
|
$checkid = $this->app->DB->GetInsertID();
|
|
}
|
|
|
|
foreach($value as $column=>$cvalue)
|
|
{
|
|
switch($column)
|
|
{
|
|
case "name": $this->app->DB->Update("UPDATE s_emarketing_partner SET company='$cvalue' WHERE id='$checkid' LIMIT 1");break;
|
|
case "netto": $this->app->DB->Update("UPDATE s_emarketing_partner SET percent='$cvalue' WHERE id='$checkid' LIMIT 1");break;
|
|
case "strasse": $this->app->DB->Update("UPDATE s_emarketing_partner SET street='$cvalue' WHERE id='$checkid' LIMIT 1");break;
|
|
case "email": $this->app->DB->Update("UPDATE s_emarketing_partner SET email='$cvalue' WHERE id='$checkid' LIMIT 1");break;
|
|
case "telefax": $this->app->DB->Update("UPDATE s_emarketing_partner SET fax='$cvalue' WHERE id='$checkid' LIMIT 1");break;
|
|
case "telefon": $this->app->DB->Update("UPDATE s_emarketing_partner SET phone='$cvalue' WHERE id='$checkid' LIMIT 1");break;
|
|
case "ort": $this->app->DB->Update("UPDATE s_emarketing_partner SET city='$cvalue' WHERE id='$checkid' LIMIT 1");break;
|
|
case "plz": $this->app->DB->Update("UPDATE s_emarketing_partner SET zipcode='$cvalue' WHERE id='$checkid' LIMIT 1");break;
|
|
case "land": $this->app->DB->Update("UPDATE s_emarketing_partner SET country='$cvalue' WHERE id='$checkid' LIMIT 1");break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return 'ok';
|
|
}
|
|
|
|
|
|
// get checksum list from the files
|
|
public function ImportGetArticle()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
if(isset($tmp['nummerintern']))
|
|
{
|
|
$nummer = $tmp['nummerintern'];
|
|
}else{
|
|
$nummer = $tmp['nummer'];
|
|
}
|
|
$params = array(
|
|
'useNumberAsId' => true
|
|
);
|
|
|
|
$result = $this->adapter->get('articles/'.$nummer,$params);
|
|
|
|
if(!isset($result['data']['name']))
|
|
{
|
|
$this->error[]='Artikel in der Shop Datenbank nicht gefunden!';
|
|
return;
|
|
} else {
|
|
$data['result'] = json_decode(json_encode($result['data']),true);
|
|
$data['name']=$result['data']['name'];
|
|
if(isset($tmp['nummerintern']))
|
|
{
|
|
$data['nummer'] = $result['data']['mainDetail']['number'];
|
|
}
|
|
$staffelpreise = array();
|
|
foreach ($result['data']['mainDetail']['prices'] as $staffelpreis){
|
|
if($staffelpreis['customerGroupKey'] === 'EK'){
|
|
$staffelpreise[] = array('ab_menge'=>$staffelpreis['from'], 'preis'=>$staffelpreis['price'], 'brutto'=>$staffelpreis['customerGroup']['taxInput']);
|
|
}
|
|
}
|
|
if((!empty($staffelpreise)?count($staffelpreise):0) >1){
|
|
$data['staffelpreise'] = $staffelpreise;
|
|
}
|
|
$data['artikelnummerausshop'] = $result['data']['mainDetail']['number'];
|
|
$data['kurztext_de']=$result['data']['description'];
|
|
$data['uebersicht_de']=str_replace('<br />','</p><p>',$result['data']['descriptionLong']);
|
|
|
|
if(isset($result['data']['price']) && $result['data']['price']!=''){
|
|
$data['preis_netto'] = $result['data']['price'];
|
|
}
|
|
else{
|
|
$data['preis_netto'] = $result['data']['mainDetail']['prices'][0]['price'];
|
|
}
|
|
|
|
$data['aktiv']=$result['data']['active'];
|
|
$data['restmenge']=$result['data']['lastStock'];
|
|
|
|
if($result['data']['mainDetail']['prices'][0]['customerGroup']['taxInput'] === true){
|
|
$data['pseudopreis'] = $result['data']['mainDetail']['prices'][0]['pseudoPrice']*(1+(float)$result['data']['tax']['tax']/100);
|
|
}else{
|
|
$data['pseudopreis'] = $result['data']['mainDetail']['prices'][0]['pseudoPrice'];
|
|
}
|
|
|
|
//$data['pseudolager']=$result['data']['mainDetail']['inStock'];
|
|
$data['lieferzeitmanuell']=$result['data']['mainDetail']['shippingTime'];
|
|
|
|
|
|
if(isset($result['data']['mainDetail']['weight']) && $result['data']['mainDetail']['weight'] > 0)
|
|
{
|
|
$data['gewicht'] = $result['data']['mainDetail']['weight'];
|
|
}
|
|
if(isset($result['data']['mainDetail']['supplierNumber']) && (String)$result['data']['mainDetail']['supplierNumber'] <> '')
|
|
{
|
|
$data['herstellernummer'] = (String)$result['data']['mainDetail']['supplierNumber'];
|
|
}
|
|
if(isset($result['data']['mainDetail']['ean']) && (String)$result['data']['mainDetail']['ean'] <> '')
|
|
{
|
|
$data['ean'] = (String)$result['data']['mainDetail']['ean'];
|
|
}
|
|
|
|
if(isset($result['data']['supplier']) && isset($result['data']['supplier']['name']) && (String)$result['data']['supplier']['name'] != '')
|
|
{
|
|
$data['hersteller'] = (String)$result['data']['supplier']['name'];
|
|
}
|
|
|
|
if(isset($result['data']['propertyValues']) && $result['data']['propertyValues'] && isset($result['data']['propertyGroup']))
|
|
{
|
|
$groups = $this->GetGroups();
|
|
if($groups)
|
|
{
|
|
foreach($groups as $v)
|
|
{
|
|
if($v['id'] == $result['data']['propertyGroup']['id'])
|
|
{
|
|
if(!empty($v['options']))
|
|
{
|
|
foreach($v['options'] as $v2)
|
|
{
|
|
$optionen[$v2['id']] = $v2['name'];
|
|
}
|
|
foreach($result['data']['propertyValues'] as $v3)
|
|
{
|
|
if(isset($optionen[$v3['optionId']]))
|
|
{
|
|
$data['eigenschaften'][] = array('name'=> $optionen[$v3['optionId']], 'values'=>$v3['value']);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(isset($result['data']['categories']))
|
|
{
|
|
foreach($result['data']['categories'] as $v)
|
|
{
|
|
$data['kategorien'][] = array('id'=>$v['id'],'name'=>$v['name']);
|
|
}
|
|
}
|
|
|
|
$data['kategorien_all'] = $this->GetKategorien();
|
|
|
|
if(!empty($result['data']['images']))
|
|
{
|
|
foreach($result['data']['images'] as $k => $v)
|
|
{
|
|
$media = $this->adapter->get('media/'.$v['mediaId']);
|
|
if(!empty($media['data']) && isset($media['data']['path']))
|
|
{
|
|
$data['bilder'][] = $media['data'];
|
|
$data['bilder'][count($data['bilder'])-1]['content']=base64_encode(@file_get_contents($media['data']['path']));
|
|
$data['bilder'][count($data['bilder'])-1]['id'] = $v['mediaId'];
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!empty($result['data']['mainDetail']['attribute']))
|
|
{
|
|
foreach($result['data']['mainDetail']['attribute'] as $k => $v)
|
|
{
|
|
if(strpos($k, 'attr') === 0)
|
|
{
|
|
$data['freifeld_'.$k] = $v;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(isset($result['data']['similar'])){
|
|
foreach ($result['data']['similar'] as $key => $value) {
|
|
$id = $value['id'];
|
|
$crosssellingartikel = $this->adapter->get('articles/'.$id);
|
|
if(!isset($crosssellingartikel['data']['name']))
|
|
{
|
|
continue;
|
|
}
|
|
$nummertmp = $crosssellingartikel['data']['mainDetail']['number'];
|
|
$data['crossselling']['similar'][] = $nummertmp;
|
|
}
|
|
}
|
|
if(isset($result['data']['similar'])){
|
|
foreach ($result['data']['related'] as $key => $value) {
|
|
$id = $value['id'];
|
|
$crosssellingartikel = $this->adapter->get('articles/'.$id);
|
|
if(!isset($crosssellingartikel['data']['name']))
|
|
{
|
|
continue;
|
|
}
|
|
$nummertmp = $crosssellingartikel['data']['mainDetail']['number'];
|
|
$data['crossselling']['related'][] = $nummertmp;
|
|
}
|
|
}
|
|
|
|
if(!empty($result['data']['tax']) && !empty($result['data']['tax']['tax']))
|
|
{
|
|
$data['umsatzsteuer'] = $result['data']['tax']['tax'];
|
|
}
|
|
|
|
if(isset($tmp['nummerintern']) && !empty($result['data']['details']) && is_array($result['data']['details']) && count($result['data']['details']) > 0)
|
|
{
|
|
$arrayOfArticles = array($data);
|
|
unset($data['artikelnummerausshop']);
|
|
if(isset($data['bilder']))
|
|
{
|
|
unset($data['bilder']);
|
|
}
|
|
if(isset($data['result']))
|
|
{
|
|
unset($data['result']);
|
|
}
|
|
unset($data['kurztext_de']);
|
|
unset($data['uebersicht_de']);
|
|
if(isset($data['ean']))unset($data['ean']);
|
|
if(isset($data['herstellernummer']))unset($data['herstellernummer']);
|
|
foreach($data as $k => $v)
|
|
{
|
|
if(strpos($k, 'freifeld_') === 0)unset($data[$k]);
|
|
}
|
|
foreach($result['data']['details'] as $vdetail)
|
|
{
|
|
if($vdetail['number'] == $result['data']['mainDetail']['number'])
|
|
{
|
|
}else{
|
|
if(!empty($result['data']['mainDetail']['configuratorOptions']))
|
|
{
|
|
$namea = null;
|
|
foreach($result['data']['mainDetail']['configuratorOptions'] as $k => $v)
|
|
{
|
|
if(isset($v['name']))
|
|
{
|
|
$namea[$v['id']] = (String)$v['name'];
|
|
}
|
|
}
|
|
sort($namea);
|
|
$data['name'] .= ' '.implode(' ', $namea);
|
|
}
|
|
|
|
$arrayOfArticles[] = $data;
|
|
unset($arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0)-1]['pseudopreis']);
|
|
$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0)-1]['nummer'] = $vdetail['number'];
|
|
if(!empty($vdetail['number']))
|
|
{
|
|
$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0)-1]['artikelnummerausshop'] = $vdetail['number'];
|
|
}
|
|
$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0)-1]['name'] = $arrayOfArticles[0]['name'];
|
|
if(isset($vdetail['price']) && $vdetail['price']!=''){
|
|
$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0) - 1]['preis_netto'] = $vdetail['data']['price'];
|
|
}
|
|
elseif(!empty($vdetail['prices']) && !empty($vdetail['prices'][0]) && $vdetail['prices'][0]['price'] != 0){
|
|
$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0) - 1]['preis_netto'] = $vdetail['prices'][0]['price'];
|
|
}
|
|
if(isset( $vdetail['prices'][0]['pseudoPrice']) && $vdetail['prices'][0]['pseudoPrice']!='' &&
|
|
round($vdetail['prices'][0]['price'],5)!==round($vdetail['prices'][0]['pseudoPrice'],5)){
|
|
$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0)-1]['pseudopreis'] = $vdetail['prices'][0]['pseudoPrice'] * ((100 + $result['data']['tax']['tax']) / 100);
|
|
}
|
|
if(isset($vdetail['shippingTime']) && $vdetail['shippingTime'] != '')$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0)-1]['lieferzeitmanuell'] = $vdetail['shippingTime'];
|
|
if(isset($vdetail['ean']) && $vdetail['ean'] != '')$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0)-1]['ean'] = $vdetail['ean'];
|
|
if(isset($vdetail['supplierNumber']) && $vdetail['supplierNumber'] != '')$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0)-1]['herstellernummer'] = $vdetail['supplierNumber'];
|
|
if(isset($vdetail['weight']) && $vdetail['shippingTime'] > 0)$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0)-1]['gewicht'] = $vdetail['weight'];
|
|
if(isset($vdetail['active']))$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0)-1]['aktiv'] = $vdetail['active'];
|
|
if(!empty($vdetail['configuratorOptions']))
|
|
{
|
|
$namea = null;
|
|
foreach($vdetail['configuratorOptions'] as $k => $v)
|
|
{
|
|
if(isset($v['name']))
|
|
{
|
|
$namea[$v['id']] = (String)$v['name'];
|
|
}
|
|
}
|
|
sort($namea);
|
|
$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0)-1]['name'] .= ' '.implode(' ', $namea);
|
|
}
|
|
if(!empty($vdetail['attribute']))
|
|
{
|
|
foreach($vdetail['attribute'] as $k => $v)
|
|
{
|
|
if(strpos($k, 'attr') === 0)
|
|
{
|
|
$arrayOfArticles[(!empty($arrayOfArticles)?count($arrayOfArticles):0)-1]['freifeld_'.$k] = $v;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if(!empty($result['data']['mainDetail']['configuratorOptions']))
|
|
{
|
|
$namea = null;
|
|
foreach($result['data']['mainDetail']['configuratorOptions'] as $k => $v)
|
|
{
|
|
if(isset($v['name']))
|
|
{
|
|
$namea[$v['id']] = (String)$v['name'];
|
|
}
|
|
}
|
|
sort($namea);
|
|
|
|
$arrayOfArticles[0]['name'] .= ' '.implode(' ', $namea);
|
|
}
|
|
return $arrayOfArticles;
|
|
}
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
protected function GetGroup($name)
|
|
{
|
|
$groups = $this->adapter->get('propertyGroups/');
|
|
foreach ($groups['data'] as $key => $value) {
|
|
if($value['name'] == $name){
|
|
$group = $value;
|
|
}
|
|
}
|
|
return $group;
|
|
}
|
|
|
|
protected function GetGroups()
|
|
{
|
|
if($this->groups)
|
|
{
|
|
return $this->groups;
|
|
}
|
|
$groups = $this->adapter->get('propertyGroups/');
|
|
if(isset($groups['data']))
|
|
{
|
|
$this->groups = $groups['data'];
|
|
}
|
|
return $this->groups;
|
|
}
|
|
|
|
protected function GetKategorien()
|
|
{
|
|
if($this->kategorien)
|
|
{
|
|
return $this->kategorien;
|
|
}
|
|
$data = $this->adapter->get('categories/');
|
|
|
|
$rootId = 0;
|
|
$rootParentId = 0;
|
|
|
|
if(!empty($data['data'][0]['id']) && $data['data'][0]['name'] === 'Root'){
|
|
$rootId = $data['data'][0]['id'];
|
|
$rootParentId = $data['data'][0]['parentId'];
|
|
}
|
|
|
|
if(isset($data['data']))
|
|
{
|
|
$_data = null;
|
|
foreach($data['data'] as $v)
|
|
{
|
|
if($v['id'] === $rootId){
|
|
continue;
|
|
}
|
|
if($v['parentId'] === $rootId){
|
|
$v['parentId'] = $rootParentId;
|
|
}
|
|
$_data[] = array('id'=>$v['id'],'name'=>$v['name'],'aktiv'=>$v['active'],'parent'=>(int)$v['parentId'],'pos'=>$v['position']);
|
|
}
|
|
$this->kategorien = $_data;
|
|
}
|
|
return $this->kategorien;
|
|
}
|
|
|
|
public function ImportTest()
|
|
{
|
|
return 'TEST';
|
|
}
|
|
|
|
// receive all new articles
|
|
public function ImportSendListLager()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
$anzahl = 0;
|
|
$ctmp = (!empty($tmp)?count($tmp):0);
|
|
for($i=0;$i<$ctmp;$i++)
|
|
{
|
|
$artikel = $tmp[$i]['artikel'];
|
|
$nummer = $tmp[$i]['nummer'];
|
|
$fremdnummer = isset($tmp[$i]['fremdnummer'])?$tmp[$i]['fremdnummer']:'';
|
|
$lageranzahl = $tmp[$i]['anzahl_lager'];
|
|
$laststock = $tmp[$i]['restmenge'];
|
|
$inaktiv = $tmp[$i]['inaktiv'];
|
|
$shippingtime = $tmp[$i]['lieferzeitmanuell'];
|
|
$pseudolager = trim($tmp[$i]['pseudolager']);
|
|
|
|
$aktiv=1;
|
|
if($inaktiv){
|
|
$aktiv=0;
|
|
}
|
|
|
|
if($pseudolager > 0){
|
|
$lageranzahl=$pseudolager;
|
|
}
|
|
|
|
if($tmp[$i]['ausverkauft']){
|
|
$lageranzahl=0;
|
|
$laststock=1;
|
|
}
|
|
|
|
if($laststock!="1"){
|
|
$laststock=0;
|
|
}
|
|
$variantennummer = '';
|
|
if(isset($tmp[$i]['matrix_varianten'])){
|
|
foreach ($tmp[$i]['matrix_varianten']['artikel'] as $artikelId => $variantenInfos){
|
|
if($variantenInfos[0]['gesperrt']){
|
|
continue;
|
|
}
|
|
foreach ($variantenInfos as $daten){
|
|
if(!empty($daten['nummer'])){
|
|
$variantennummer = $daten['nummer'];
|
|
break 2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$artikelinfo = $this->getIdByNumber($tmp[$i]['artikelid'],$fremdnummer?:$nummer,!empty($tmp[$i]['matrix_varianten']),$variantennummer);
|
|
$id = $artikelinfo['id'];
|
|
$artikeltyp = $artikelinfo['typ'];
|
|
if($artikel!=='ignore' && !empty($id))
|
|
{
|
|
if($artikeltyp === 'normal'){
|
|
$updateInStock = array(
|
|
'active' => $aktiv,
|
|
'lastStock' => $laststock,
|
|
'attributeVisionPhysicalStockForSale' => $lageranzahl,
|
|
'mainDetail' => array(
|
|
'lastStock' => $laststock,
|
|
'shippingtime' => $shippingtime,
|
|
'active' => $aktiv,
|
|
'inStock' => $lageranzahl,
|
|
'attributeVisionPhysicalStockForSale' => $lageranzahl,
|
|
)
|
|
);
|
|
|
|
$result = $this->adapter->put('articles/'.$id, $updateInStock);
|
|
$this->ShopwareLog("Shopware Lagerzahlenübertragung für Artikel: $nummer / $fremdnummer - Anzahl: $lageranzahl", print_r($result,true));
|
|
|
|
$anzahl++;
|
|
}else{
|
|
$updateVariantInStock = array(
|
|
'inStock' => $lageranzahl,
|
|
'attributeVisionPhysicalStockForSale' => $lageranzahl,
|
|
'active' => $aktiv,
|
|
);
|
|
$result = $this->adapter->put('variants/'.$id, $updateVariantInStock);
|
|
$this->ShopwareLog("Shopware Lagerzahlenübertragung für Variante: $nummer / $fremdnummer - Anzahl: $lageranzahl", print_r($result,true));
|
|
|
|
$anzahl++;
|
|
}
|
|
}
|
|
|
|
}
|
|
return $anzahl;
|
|
}
|
|
|
|
|
|
function getCategoryParentId($categoryData,&$kategoriebaumid){
|
|
$parentid = $kategoriebaumid[$categoryData['parent']]['shopwareid'];
|
|
if(!empty($parentid)){
|
|
return $parentid;
|
|
}
|
|
|
|
$parentCategoryData = $this->app->DB->SelectRow("SELECT id,parent,bezeichnung AS name FROM artikelkategorien WHERE id<>'' AND id<>'0' AND id='".$categoryData['parent']."' LIMIT 1");
|
|
if(empty($parentCategoryData)){
|
|
return null;
|
|
}
|
|
|
|
$params = ['filter' => [['property' => 'name','value' => $parentCategoryData['name']]]];
|
|
$result = $this->adapter->get('categories', $params);
|
|
if(count($result['data']) < 1){
|
|
return null;
|
|
}
|
|
|
|
if(count($result['data']) === 1){
|
|
$parentCategoryData['shopwareid'] = $result['data'][0]['id'];
|
|
$kategoriebaumid[$parentCategoryData['id']] = $parentCategoryData;
|
|
return $result['data'][0]['id'];
|
|
}
|
|
|
|
$grandparentid = $this->getCategoryParentId($parentCategoryData,$kategoriebaumid);
|
|
$params = ['filter' => [['property' => 'name','value' => $parentCategoryData['name']],['property' => 'parentId', 'value' => $grandparentid]]];
|
|
$result = $this->adapter->get('categories', $params);
|
|
if(count($result['data']) === 1){
|
|
$parentCategoryData['shopwareid'] = $result['data'][0]['id'];
|
|
$kategoriebaumid[$parentCategoryData['id']] = $parentCategoryData;
|
|
return $result['data'][0]['id'];
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
// receive all new articles
|
|
public function ImportSendList()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
$anzahl = 0;
|
|
$bilderarray = array();
|
|
$ctmp = (!empty($tmp)?count($tmp):0);
|
|
$shopeinstellungen = $this->app->DB->SelectArr("SELECT * FROM shopexport WHERE id = '".$this->shopid."' AND aktiv = 1 LIMIT 1");
|
|
if(!empty($shopeinstellungen))
|
|
{
|
|
$shopeinstellungen = reset($shopeinstellungen);
|
|
$einstellungen = json_decode($shopeinstellungen['einstellungen_json'],true);
|
|
$eigenschaftenuebertragen = $shopeinstellungen['eigenschaftenuebertragen'];
|
|
$kategorienuebertragen = $shopeinstellungen['kategorienuebertragen'];
|
|
$shopbilderuebertragen = $shopeinstellungen['shopbilderuebertragen'];
|
|
$variantenuebertragen = $shopeinstellungen['variantenuebertragen'];
|
|
$crosssellingartikeluebertragen = $shopeinstellungen['crosssellingartikeluebertragen'];
|
|
$preisgruppe = $shopeinstellungen['preisgruppe'];
|
|
$this->GetGroups();
|
|
}else{
|
|
$eigenschaftenuebertragen = 0;
|
|
$kategorienuebertragen = 0;
|
|
$shopbilderuebertragen = 0;
|
|
$variantenuebertragen = 0;
|
|
$crosssellingartikeluebertragen = 0;
|
|
$preisgruppe = 0;
|
|
}
|
|
for($i=0;$i<$ctmp;$i++)
|
|
{
|
|
$filtergruppe = 0;
|
|
$rootcategory = 1;
|
|
if(!empty($this->RootCategoryName)) {
|
|
$params = ['filter' => [[
|
|
'property' => 'name',
|
|
'value' => $this->RootCategoryName
|
|
]]];
|
|
$result = $this->adapter->get('categories', $params);
|
|
if($result['total'])
|
|
{
|
|
$rootcategory = $result['data'][0]['id'];
|
|
}
|
|
}
|
|
|
|
//Schritt 1: Kategorien abarbeiten
|
|
$kategoriename = $tmp[$i]['kategoriename'];
|
|
$kategoriebaum = $tmp[$i]['kategorien'];
|
|
|
|
$kategorientmp = array();
|
|
$kategorien = array();
|
|
|
|
if(!empty($kategoriebaum)){
|
|
$kategoriebaumid = array();
|
|
foreach ($kategoriebaum as $key => $value){
|
|
$value['shopwareparent'] = 0;
|
|
if(!$value['parent']){
|
|
$value['shopwareid'] = $rootcategory;
|
|
}
|
|
$kategoriebaumid[$value['id']] = $value;
|
|
}
|
|
|
|
foreach ($kategoriebaum as $key => $value) {
|
|
$parentid = $rootcategory;
|
|
if(!empty($value['parent'])){
|
|
$parentid = $this->getCategoryParentId($value,$kategoriebaumid);
|
|
}
|
|
|
|
$params = [
|
|
'filter' => [
|
|
['property' => 'name','value' => $value['name']]
|
|
]
|
|
];
|
|
if(!empty($parentid)){
|
|
$params['filter'][] = ['property' => 'parentId', 'value' => $parentid];
|
|
}
|
|
|
|
$result = $this->adapter->get('categories', $params);
|
|
$gefunden = $result['total'];
|
|
if($gefunden)
|
|
{
|
|
$kategoriebaumid[$value['id']]['shopwareid'] = $result['data'][0]['id'];
|
|
$kategorientmp[] = $result['data'][0]['id'];
|
|
}
|
|
|
|
}
|
|
|
|
}else if($kategoriename){
|
|
//einfache Artikelkategorie benutzen
|
|
$params = ['filter' => [[
|
|
'property' => 'name',
|
|
'value' => $kategoriename
|
|
]]];
|
|
$result = $this->adapter->get('categories', $params);
|
|
$gefunden = $result['total'];
|
|
if($gefunden)
|
|
{
|
|
//TODO Falls mehrere Kategorien mit dem selben Namen existieren sollten hier aufbohren:
|
|
$kategorientmp[] = $result['data'][0]['id'];
|
|
} elseif($kategorienuebertragen) {
|
|
//Erstelle einfache Kategorie immer in der obersten Ebene
|
|
|
|
$kategoriedaten = array('parentId' => $rootcategory,
|
|
'name' => $kategoriename,
|
|
'metaKeywords' => $kategoriename,
|
|
'metaDescription' => $kategoriename,
|
|
'cmsheadline' => $kategoriename
|
|
);
|
|
$result = $this->adapter->post('categories', $kategoriedaten);
|
|
if(!empty($result['data']['id']))
|
|
{
|
|
$kategorientmp[] = $result['data']['id'];
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!empty($kategorientmp)){
|
|
foreach ($kategorientmp as $key => $value) {
|
|
$kategorien[] = array('id' => $value);
|
|
}
|
|
}
|
|
|
|
//Schritt 2: Artikeleigenschaften
|
|
$artikel = $tmp[$i]['artikel'];
|
|
$nummer = isset($tmp[$i]['fremdnummer'])?$tmp[$i]['fremdnummer']:$tmp[$i]['nummer'];
|
|
$inaktiv = $tmp[$i]['inaktiv'];
|
|
$name_de = $tmp[$i]['name_de'];
|
|
$name_en = $tmp[$i]['name_en'];
|
|
$hersteller = $tmp[$i]['hersteller'];
|
|
$herstellernummer = $tmp[$i]['herstellernummer'];
|
|
$herstellerlink = $tmp[$i]['herstellerlink'];
|
|
$description = $tmp[$i]['metadescription_de'];
|
|
$description_en = $tmp[$i]['metadescription_en'];
|
|
$keywords = $tmp[$i]['metakeywords_de'];
|
|
$keywords_en = $tmp[$i]['metakeywords_en'];
|
|
$metatitle = $tmp[$i]['metatitle_de'];
|
|
$metatitle_en = $tmp[$i]['metatitle_en'];
|
|
|
|
$laenge = $tmp[$i]['laenge'];
|
|
$breite = $tmp[$i]['breite'];
|
|
$hoehe = $tmp[$i]['hoehe'];
|
|
$gewicht = $tmp[$i]['gewicht'];
|
|
|
|
$lageranzahl = $tmp[$i]['anzahl_lager'];
|
|
$laststock = $tmp[$i]['restmenge'];
|
|
|
|
$preis = $tmp[$i]['bruttopreis'];
|
|
if(!$preis){
|
|
return 'error: Im Artikel ist kein Preis hinterlegt.';
|
|
}
|
|
|
|
$nettopreis =$tmp[$i]['preis'];
|
|
$einkaufspreis = $tmp[$i]['einkaufspreis'];
|
|
$pseudopreisBrutto = $tmp[$i]['pseudopreis'];//*1.19;
|
|
$steuersatz = $tmp[$i]['steuersatz'];
|
|
$ean = $tmp[$i]['ean'];
|
|
$shippingtime = $tmp[$i]['lieferzeitmanuell'];
|
|
$mindestabnahme = 999999;
|
|
|
|
$description_long = htmlspecialchars_decode($tmp[$i]['uebersicht_de']);
|
|
$description_long_en = htmlspecialchars_decode($tmp[$i]['uebersicht_en']);
|
|
|
|
if(isset($tmp[$i]['texte'])){
|
|
$ctexte = count($tmp[$i]['texte']);
|
|
for ($t=0; $t < $ctexte; $t++){
|
|
if($tmp[$i]['texte'][$t]['sprache'] === 'DE'){
|
|
if(!empty($tmp[$i]['texte'][$t]['name'])){
|
|
$name_de = $tmp[$i]['texte'][$t]['name'];
|
|
}
|
|
if(!empty($tmp[$i]['texte'][$t]['meta_description'])){
|
|
$description = $tmp[$i]['texte'][$t]['meta_description'];
|
|
}
|
|
if(!empty($tmp[$i]['texte'][$t]['beschreibung_online'])){
|
|
$description_long = $tmp[$i]['texte'][$t]['beschreibung_online'];
|
|
}
|
|
if(!empty($tmp[$i]['texte'][$t]['meta_keywords'])){
|
|
$keywords = $tmp[$i]['texte'][$t]['meta_keywords'];
|
|
}
|
|
if(!empty($tmp[$i]['texte'][$t]['meta_title'])){
|
|
$metatitle = $tmp[$i]['texte'][$t]['meta_title'];
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
|
|
$crosssellingaehnlich = array();
|
|
$crosssellingzubehoer = array();
|
|
$gegenseitigzuweisen = array();
|
|
if($crosssellingartikeluebertragen && isset($tmp[$i]['crosssellingartikel']) && is_array($tmp[$i]['crosssellingartikel'])){
|
|
foreach ($tmp[$i]['crosssellingartikel'] as $crosssellingartikel){
|
|
$csnummer = $crosssellingartikel['nummer'];
|
|
if(!empty($crosssellingartikel['fremdnummer'])){
|
|
$csnummer = $crosssellingartikel['fremdnummer'];
|
|
}
|
|
$cstmpid = 0;
|
|
$response = $this->getIdByNumber($crosssellingartikel['id'],$csnummer);
|
|
if(!empty($response['id'])){
|
|
$cstmpid = $response['id'];
|
|
}
|
|
|
|
if($cstmpid > 0){
|
|
switch ($crosssellingartikel['art']) {
|
|
case '1':
|
|
$crosssellingaehnlich[] = array('id' => $cstmpid, 'name' => $crosssellingartikel['name_de']);
|
|
break;
|
|
case '2':
|
|
$crosssellingzubehoer[] = array('id' => $cstmpid, 'name' => $crosssellingartikel['name_de']);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
if($crosssellingartikel['gegenseitigzuweisen']){
|
|
$crosssellingartikel['shopwareid'] = $cstmpid;
|
|
$gegenseitigzuweisen[] = $crosssellingartikel;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if(empty($hersteller))
|
|
{
|
|
$hersteller='Sonstige';
|
|
}
|
|
|
|
if($laststock!='1')
|
|
{
|
|
$laststock=0;
|
|
}
|
|
|
|
//HTML Maskierung bekämpfen
|
|
$name_de = str_replace(array("'"), "'", $name_de);
|
|
$name_en = str_replace(array("'"), "'", $name_en);
|
|
$description = str_replace(array("'"), "'", $description);
|
|
$description_en = str_replace(array("'"), "'", $description_en);
|
|
$metatitle = str_replace(array("'"), "'", $metatitle);
|
|
$metatitle_en = str_replace(array("'"), "'", $metatitle_en);
|
|
$keywords = str_replace(array("'"), "'", $keywords);
|
|
$keywords_en = str_replace(array("'"), "'", $keywords_en);
|
|
$description = str_replace(array("<",">","&"), "", $description);
|
|
$description_en = str_replace(array("<",">","&"), "", $description_en);
|
|
$metatitle = str_replace(array("<",">","&"), "", $metatitle);
|
|
$metatitle_en = str_replace(array("<",">","&"), "", $metatitle_en);
|
|
$keywords = str_replace(array("<",">","&"), "", $keywords);
|
|
$keywords_en = str_replace(array("<",">","&"), "", $keywords_en);
|
|
//$keywords = preg_replace("/[^a-zA-Z0-9äüöß ]/",'',$keywords);
|
|
//$metatitle = preg_replace("/[^a-zA-Z0-9äöüß ]/",'',$metatitle);
|
|
|
|
if($inaktiv)
|
|
{
|
|
$aktiv=0;
|
|
} else {
|
|
$aktiv=1;
|
|
}
|
|
|
|
if($tmp[$i]['ausverkauft']){
|
|
$lageranzahl=0;
|
|
$laststock='1';
|
|
}
|
|
|
|
$topseller=0;
|
|
if($tmp[$i]['topseller']){
|
|
$topseller=1;
|
|
}
|
|
|
|
$pseudolager = trim($tmp[$i]['pseudolager']);
|
|
if($pseudolager > 0){
|
|
$lageranzahl=$pseudolager;
|
|
}
|
|
|
|
$prices = array();
|
|
$kundengruppentmp = $this->adapter->get('customerGroups');
|
|
$kundengruppen = array();
|
|
if(!empty($kundengruppentmp['data']) && is_array($kundengruppentmp['data'])){
|
|
foreach ($kundengruppentmp['data'] as $key => $value) {
|
|
$kundengruppen[$value['key']] = array('id' => $value['id'],'taxInput' =>$value['taxInput']);
|
|
}
|
|
}
|
|
|
|
$pseudoPriceForDefaultGroup = $pseudopreisBrutto;
|
|
if(!$kundengruppen['EK']['taxInput']){
|
|
$pseudoPriceForDefaultGroup = $pseudopreisBrutto / (1 + ($steuersatz / 100));
|
|
}
|
|
|
|
if(count($tmp[$i]['staffelpreise_standard'])>0){
|
|
$bismenge = 0;
|
|
$mindestabnahme = 1;
|
|
|
|
$hilfsarray = [];
|
|
foreach ($tmp[$i]['staffelpreise_standard'] as $standardstaffelpreis){
|
|
$hilfsarray[$standardstaffelpreis['ab_menge']] = [
|
|
'preis' => $standardstaffelpreis['preis'],
|
|
'bruttopreis' => $standardstaffelpreis['bruttopreis']];
|
|
}
|
|
krsort($hilfsarray);
|
|
|
|
foreach ($hilfsarray as $key => $value)
|
|
{
|
|
if($mindestabnahme > $key){
|
|
$mindestabnahme = $key;
|
|
}
|
|
$prices[] = array(
|
|
'customerGroupKey' => 'EK',
|
|
'price' => $kundengruppen['EK']['taxInput']?$value['bruttopreis']:$value['preis'],
|
|
'pseudoPrice' => $pseudoPriceForDefaultGroup,
|
|
'from' => $key,
|
|
'to' => $bismenge-1);
|
|
$bismenge = $key;
|
|
}
|
|
$prices[(!empty($prices)?count($prices):0)-1]['from'] = 1;
|
|
}else{
|
|
//Einfacher Preis
|
|
$prices[] = array(
|
|
'customerGroupKey' => 'EK',
|
|
'price' => $kundengruppen['EK']['taxInput']?$preis:$nettopreis,
|
|
'pseudoPrice' => $pseudoPriceForDefaultGroup);
|
|
$mindestabnahme = 1;
|
|
}
|
|
|
|
if(count($tmp[$i]['staffelpreise_gruppen'])>0){
|
|
$hilfsarray = array();
|
|
|
|
foreach ($tmp[$i]['staffelpreise_gruppen'] as $gruppenstaffelpreise){
|
|
if(array_key_exists($gruppenstaffelpreise['gruppeextern'], $kundengruppen)){
|
|
$gruppenpreis = $gruppenstaffelpreise['bruttopreis'];
|
|
$gruppenpseudopreis = $pseudopreisBrutto;
|
|
if(!$kundengruppen[$gruppenstaffelpreise['gruppeextern']]['taxInput']){
|
|
$gruppenpreis = $gruppenstaffelpreise['preis'];
|
|
$gruppenpseudopreis = $pseudopreisBrutto / (1 + ($steuersatz / 100));
|
|
}
|
|
$hilfsarray[$gruppenstaffelpreise['gruppeextern']][$gruppenstaffelpreise['ab_menge']] = [
|
|
'preis' => $gruppenpreis,
|
|
'pseudopreis' => $gruppenpseudopreis];
|
|
}
|
|
}
|
|
|
|
foreach ($hilfsarray as $kundengruppe => $preisdatenarray) {
|
|
$bismenge = 0;
|
|
krsort($preisdatenarray);
|
|
foreach ($preisdatenarray as $abmenge => $preisdaten) {
|
|
$prices[] = array(
|
|
'customerGroupKey' => $kundengruppe,
|
|
'price' => $preisdaten['preis'],
|
|
'pseudoPrice' => $preisdaten['pseudopreis'],
|
|
'from' => $abmenge,
|
|
'to' => $bismenge-1);
|
|
$bismenge = $abmenge;
|
|
}
|
|
$prices[(!empty($prices)?count($prices):0)-1]['from'] = 1;
|
|
}
|
|
}
|
|
|
|
//Schritt 3: Bild des Hauptartikels hinzufügen
|
|
if($shopbilderuebertragen && !empty($tmp[$i]['matrix_varianten']) && count($tmp[$i]['matrix_varianten'])){
|
|
//Es gibt Varianten also Suche nach Gruppenbild
|
|
//Versuch 1: Suche nach Standardgruppenbild
|
|
$bildgefunden = false;
|
|
$vorschaubereitsgesetzt = false;
|
|
$cdateien = count($tmp[$i]['Dateien']);
|
|
for ($k=0; $k < $cdateien; $k++){
|
|
if(!$bildgefunden && $tmp[$i]['Dateien'][$k]['stichwort'] === 'Gruppenbild'){
|
|
$dateiname = $tmp[$i]['Dateien'][$k]['titel'];
|
|
if($dateiname === ''){
|
|
$dateiname = $tmp[$i]['Dateien'][$k]['filename'];
|
|
$dateiname = substr($dateiname, 0, strlen($dateiname)-(strlen($tmp[$i]['Dateien'][$k]['extension'])+1));
|
|
}
|
|
$dateiname = preg_replace('/[^a-zA-Z0-9._\-]/', '', $dateiname);
|
|
$bildgefunden = true;
|
|
$vorschaubereitsgesetzt = true;
|
|
$bilderarray[$nummer][] = array(
|
|
'album' => -1,
|
|
'extension' => $tmp[$i]['Dateien'][$k]['extension'],
|
|
'name' => $dateiname,
|
|
'description' => $tmp[$i]['Dateien'][$k]['beschreibung']?$tmp[$i]['Dateien'][$k]['beschreibung']:$name_de,
|
|
'filename' => $tmp[$i]['Dateien'][$k]['filename'],
|
|
'main' => 1,
|
|
'intid' => $tmp[$i]['Dateien'][$k]['id'],
|
|
'extid' => $tmp[$i]['Dateien'][$k]['extid'],
|
|
'version' => $tmp[$i]['Dateien'][$k]['version'],
|
|
'file' => 'data:image/'.$tmp[$i]['Dateien'][$k]['extension'].';base64,'.$tmp[$i]['Dateien'][$k]['datei']);
|
|
break;
|
|
}
|
|
}
|
|
//Falls kein Standardgruppenbild existiert: Nimm erstbestes Shopbild als Gruppenbild
|
|
if(!$bildgefunden){
|
|
$cdateien = !empty($tmp[$i]['Dateien'])?count($tmp[$i]['Dateien']):0;
|
|
for ($k=0; $k < $cdateien; $k++) {
|
|
if($tmp[$i]['Dateien'][$k]['stichwort'] === 'Shopbild'){
|
|
$dateiname = $tmp[$i]['Dateien'][$k]['titel'];
|
|
if($dateiname === ''){
|
|
$dateiname = $tmp[$i]['Dateien'][$k]['filename'];
|
|
$dateiname = substr($dateiname, 0, strlen($dateiname)-(strlen($tmp[$i]['Dateien'][$k]['extension'])+1));
|
|
}
|
|
$dateiname = preg_replace('/[^a-zA-Z0-9._\-]/', '', $dateiname);
|
|
$bilderarray[$nummer][] = array(
|
|
'album' => -1,
|
|
'extension' => $tmp[$i]['Dateien'][$k]['extension'],
|
|
'name' => $dateiname,
|
|
'description' => $tmp[$i]['Dateien'][$k]['beschreibung']?:$name_de,
|
|
'filename' => $tmp[$i]['Dateien'][$k]['filename'],
|
|
'intid' => $tmp[$i]['Dateien'][$k]['id'],
|
|
'extid' => $tmp[$i]['Dateien'][$k]['extid'],
|
|
'version' => $tmp[$i]['Dateien'][$k]['version'],
|
|
'main' => 2,
|
|
'file' => 'data:image/'.$tmp[$i]['Dateien'][$k]['extension'].';base64,'.$tmp[$i]['Dateien'][$k]['datei']);
|
|
}
|
|
}
|
|
}
|
|
}elseif($shopbilderuebertragen){
|
|
$firstismain = 1;
|
|
$cdateien = count($tmp[$i]['Dateien']);
|
|
for ($l=0; $l < $cdateien; $l++) {
|
|
if($tmp[$i]['Dateien'][$l]['stichwort'] === 'Shopbild'){
|
|
$dateiname = $tmp[$i]['Dateien'][$l]['titel'];
|
|
if($dateiname === ''){
|
|
$dateiname = $tmp[$i]['Dateien'][$l]['filename'];
|
|
$dateiname = substr($dateiname, 0, strlen($dateiname)-(strlen($tmp[$i]['Dateien'][$l]['extension'])+1));
|
|
}
|
|
$dateiname = preg_replace('/[^a-zA-Z0-9._\-]/', '', $dateiname);
|
|
$bilderarray[$nummer][] = array(
|
|
'album' => -1,
|
|
'extension' => $tmp[$i]['Dateien'][$l]['extension'],
|
|
'name' => $dateiname,
|
|
'description' => $tmp[$i]['Dateien'][$l]['beschreibung']?$tmp[$i]['Dateien'][$l]['beschreibung']:$name_de,
|
|
'filename' => $tmp[$i]['Dateien'][$l]['filename'],
|
|
'intid' => $tmp[$i]['Dateien'][$l]['id'],
|
|
'extid' => $tmp[$i]['Dateien'][$l]['extid'],
|
|
'version' => $tmp[$i]['Dateien'][$l]['version'],
|
|
'main' => $firstismain?1:2,
|
|
'file' => 'data:image/'.$tmp[$i]['Dateien'][$l]['extension'].';base64,'.$tmp[$i]['Dateien'][$l]['datei']);
|
|
$firstismain = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//Schritt 4: Varianten abarbeiten
|
|
$varianten = null;
|
|
if($variantenuebertragen && !empty($tmp[$i]['matrix_varianten']) && count($tmp[$i]['matrix_varianten']))
|
|
{
|
|
$gruppen = null;
|
|
$first = true;
|
|
|
|
foreach($tmp[$i]['matrix_varianten']['gruppen'] as $gruppe => $eigenschaftenarr)
|
|
{
|
|
$varianten['configuratorSet']['groups'][] = array('name'=>$gruppe);
|
|
$key = count($varianten['configuratorSet']['groups'])-1;
|
|
foreach($eigenschaftenarr as $eigenschaft => $v)
|
|
{
|
|
$varianten['configuratorSet']['groups'][$key]['options'][] = array('name'=>(string)$eigenschaft);
|
|
}
|
|
}
|
|
$firstismain = 1;
|
|
foreach($tmp[$i]['matrix_varianten']['artikel'] as $art => $varr)
|
|
{
|
|
if($varr[0]['gesperrt']){
|
|
continue;
|
|
}
|
|
//Der Artikel muss als Variante von sich selbst eingetragen werden um über seine eigene Nummer gefunden werden zu können
|
|
if($firstismain){
|
|
$varianten['variants'][] = array(
|
|
'number'=>$nummer,
|
|
'inStock'=>($varr[0]['pseudolager'] > 0?$varr[0]['pseudolager']:$varr[0]['lag']),
|
|
'attributeVisionPhysicalStockForSale'=>($varr[0]['pseudolager'] > 0?$varr[0]['pseudolager']:$varr[0]['lag']),
|
|
'active' => 0,
|
|
'ean' => $varr[0]['ean'],
|
|
'isMain' => 0,
|
|
'lastStock' => $varr[0]['restmenge']);
|
|
$key = count($varianten['variants'])-1;
|
|
$varianten['variants'][$key]['additionalText'] = '';
|
|
}
|
|
|
|
$varianten['variants'][] = array(
|
|
'number'=> $varr[0]['nummer'],
|
|
'inStock'=> ($varr[0]['pseudolager'] > 0?$varr[0]['pseudolager']:$varr[0]['lag']),
|
|
'attributeVisionPhysicalStockForSale'=> ($varr[0]['pseudolager'] > 0?$varr[0]['pseudolager']:$varr[0]['lag']),
|
|
'active' => 1,
|
|
'ean' => $varr[0]['ean'],
|
|
'isMain' => $firstismain,
|
|
'lastStock' => $varr[0]['restmenge']);
|
|
$key = count($varianten['variants'])-1;
|
|
$varianten['variants'][$key]['additionalText'] = '';
|
|
|
|
|
|
//Schritt 3b: Variantenbilder
|
|
$variantenarrayid = -1;
|
|
//Prüfen welchen Index die Variante im Variantenarray hat
|
|
$cvarianten = count($tmp[$i]['artikel_varianten']);
|
|
for ($k=0; $k < $cvarianten; $k++) {
|
|
if($tmp[$i]['artikel_varianten'][$k]['nummer'] == $varr[0]['nummer']){
|
|
$variantenarrayid = $k;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if($vorschaubereitsgesetzt){
|
|
$firstismain = 0;
|
|
}
|
|
if($shopbilderuebertragen){
|
|
$cdateien = count($tmp[$i]['artikel_varianten'][$variantenarrayid]['Dateien']['filename']);
|
|
for ($l = $cdateien-1; $l >= 0; $l--) {
|
|
if($tmp[$i]['artikel_varianten'][$variantenarrayid]['Dateien']['stichwort'][$l] === 'Shopbild'){
|
|
$bilderarray[$tmp[$i]['artikel_varianten'][$k]['nummer']][] = array(
|
|
'album' => -1,
|
|
'extension' => $tmp[$i]['artikel_varianten'][$variantenarrayid]['Dateien']['extension'][$l],
|
|
'title' => preg_replace('/[^a-zA-Z0-9._\-]/', '', $tmp[$i]['artikel_varianten'][$variantenarrayid]['Dateien']['titel'][$l]),
|
|
'description' => ($tmp[$i]['artikel_varianten'][$variantenarrayid]['Dateien']['beschreibung'][$l] ? $tmp[$i]['artikel_varianten'][$variantenarrayid]['Dateien']['beschreibung'][$l] : $name_de),
|
|
'filename' => $tmp[$i]['artikel_varianten'][$variantenarrayid]['Dateien']['filename'][$l],
|
|
'main' => ($firstismain ? 1 : 2),
|
|
'intid' => $tmp[$i]['artikel_varianten'][$variantenarrayid]['Dateien']['id'][$l],
|
|
'extid' => $tmp[$i]['artikel_varianten'][$variantenarrayid]['Dateien']['extid'][$l],
|
|
'version' => $tmp[$i]['artikel_varianten'][$variantenarrayid]['Dateien']['version'][$l],
|
|
'file' => 'data:image/' . $tmp[$i]['artikel_varianten'][$variantenarrayid]['Dateien']['extension'][$l] . ';base64,' . $tmp[$i]['artikel_varianten'][$variantenarrayid]['Dateien']['datei'][$l]);
|
|
}
|
|
}
|
|
}
|
|
foreach($varr as $v)
|
|
{
|
|
$varianten['variants'][$key]['additionalText'] .= ($varianten['variants'][$key]['additionalText']!=''?' / ': '').$v['values'];
|
|
$varianten['variants'][$key]['configuratorOptions'][] = array(
|
|
'group'=>$v['name'],
|
|
'option'=>$v['values']);
|
|
}
|
|
|
|
$gruppenpseudopreis = $varr[0]['pseudopreis'];
|
|
if(!empty($varr[0]['staffelpreise_standard'])){
|
|
$vbismenge = 0;
|
|
$vmindestabnahme = 1;
|
|
|
|
$hilfsarray = [];
|
|
foreach ($varr[0]['staffelpreise_standard'] as $standardstaffelpreis){
|
|
$hilfsarray[$standardstaffelpreis['ab_menge']] = [
|
|
'preis' => $standardstaffelpreis['preis'],
|
|
'bruttopreis' => $standardstaffelpreis['bruttopreis']];
|
|
}
|
|
|
|
krsort($hilfsarray);
|
|
|
|
$vprices = [];
|
|
foreach ($hilfsarray as $vkey => $vvalue)
|
|
{
|
|
if($vmindestabnahme > $vkey){
|
|
$vmindestabnahme = $vkey;
|
|
}
|
|
$vprices[] = array(
|
|
'customerGroupKey' => 'EK',
|
|
'pseudoPrice' => $gruppenpseudopreis,
|
|
'price' => $kundengruppen['EK']['taxInput']?$vvalue['bruttopreis']:$vvalue['preis'],
|
|
'from' => $vkey,
|
|
'to' => $vbismenge-1);
|
|
$vbismenge = $vkey;
|
|
}
|
|
$vprices[(!empty($vprices)?count($vprices):0)-1]['from'] = 1;
|
|
|
|
|
|
if(count($varr[0]['staffelpreise_gruppen'])>0){
|
|
$hilfsarray = array();
|
|
|
|
foreach ($varr[0]['staffelpreise_gruppen'] as $gruppenstaffelpreise){
|
|
if(array_key_exists($gruppenstaffelpreise['gruppeextern'], $kundengruppen)){
|
|
$gruppenpreis = $gruppenstaffelpreise['bruttopreis'];
|
|
$gruppenpseudopreis = $pseudopreisBrutto;
|
|
if(!$kundengruppen[$gruppenstaffelpreise['gruppeextern']]['taxInput']){
|
|
$gruppenpreis = $gruppenstaffelpreise['preis'];
|
|
$gruppenpseudopreis = $pseudopreisBrutto / (1 + ($steuersatz / 100));
|
|
}
|
|
$hilfsarray[$gruppenstaffelpreise['gruppeextern']][$gruppenstaffelpreise['ab_menge']] = [
|
|
'preis' => $gruppenpreis,
|
|
'pseudopreis' => $gruppenpseudopreis];
|
|
}
|
|
}
|
|
|
|
foreach ($hilfsarray as $kundengruppe => $preisdatenarray) {
|
|
$bismenge = 0;
|
|
krsort($preisdatenarray);
|
|
foreach ($preisdatenarray as $abmenge => $preisdaten) {
|
|
$vprices[] = array(
|
|
'customerGroupKey' => $kundengruppe,
|
|
'price' => $preisdaten['preis'],
|
|
'pseudoPrice' => $preisdaten['pseudoPrice'],
|
|
'from' => $abmenge,
|
|
'to' => $bismenge-1);
|
|
$bismenge = $abmenge;
|
|
}
|
|
$vprices[(!empty($vprices)?count($vprices):0)-1]['from'] = 1;
|
|
}
|
|
}
|
|
|
|
$varianten['variants'][$key]['prices'] = $vprices;
|
|
}else{
|
|
//Einfacher Preis
|
|
$vprices[] = array(
|
|
'customerGroupKey' => 'EK',
|
|
'price' => $varr[0]['preis'],
|
|
'pseudoPrice' => $pseudoPriceForDefaultGroup);
|
|
$mindestabnahme = 1;
|
|
$varianten['variants'][$key]['prices'] = $vprices;
|
|
}
|
|
|
|
$varianten['variants'][$key]['shippingtime'] = $varr[0]['lieferzeitmanuell'];
|
|
|
|
foreach ($varr[0]['freifelder']['DE'] as $ffkey => $ffvalue) {
|
|
$tmpval = explode('_', $ffkey);
|
|
$prefix = $tmpval[0];
|
|
unset($tmpval[0]);
|
|
$anweisung = implode('_',$tmpval);
|
|
switch ($prefix) {
|
|
case 'mainDetail':
|
|
if (isset($anweisung) && $anweisung !== '') {
|
|
$varianten['variants'][$key][$anweisung] = $ffvalue;
|
|
}
|
|
break;
|
|
case 'configuratorSet':
|
|
case 'property':
|
|
break;
|
|
default:
|
|
if (isset($ffkey) && $ffkey) {
|
|
$varianten['variants'][$key]['attribute'][$ffkey] = $ffvalue;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
$firstismain = 0;
|
|
}
|
|
}
|
|
|
|
//Schritt 5: Filtergruppen abarbeiten
|
|
$eigenschaften = array();
|
|
if(!empty($tmp[$i]['matrix_varianten'])){
|
|
$filtergruppe = 3;
|
|
$eigenschaften = array();
|
|
foreach ($tmp[$i]['matrix_varianten']['gruppen'] as $gruppe => $eigenschaftenarr) {
|
|
foreach ($eigenschaftenarr as $gruppenwert => $unused) {
|
|
$eigenschaften[] = array(
|
|
'option' => array(
|
|
'name' => $gruppe,
|
|
'filterable' => 'true'
|
|
),
|
|
'value' => $gruppenwert
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
//Schritt 6: Artikeldaten zusammensetzen
|
|
$artikeldaten = array(
|
|
'name' => $name_de,
|
|
'lastStock' => $laststock,
|
|
'tax' => $steuersatz, // alternativ 'taxId' => 1,
|
|
'supplier' => $hersteller, // alternativ 'supplierId' => 2,
|
|
'description' => $description,
|
|
'descriptionLong' => $description_long,
|
|
'keywords' => $keywords,
|
|
'metaTitle' => $metatitle,
|
|
'highlight' => $topseller,
|
|
'active' => $aktiv,
|
|
//'filterGroupId' => $filtergruppe,
|
|
'propertyValues' => $eigenschaften,
|
|
'attributeVisionPhysicalStockForSale' => $lageranzahl,
|
|
'mainDetail' => array(
|
|
'active' => $aktiv,
|
|
'shippingtime' => $shippingtime,
|
|
'ean' => $ean,
|
|
'weight' => $gewicht,
|
|
'width' => $breite,
|
|
'len' => $laenge,
|
|
'height' => $hoehe,
|
|
'minPurchase' => $mindestabnahme,
|
|
'supplierNumber' => $herstellernummer,
|
|
'inStock' => $lageranzahl,
|
|
'attributeVisionPhysicalStockForSale' => $lageranzahl,
|
|
'prices' => $prices
|
|
)
|
|
);
|
|
|
|
$pricegroupid = null;
|
|
if(!empty($einstellungen['felder']['priceGroupIdStandard'])){
|
|
$pricegroupid = $einstellungen['felder']['priceGroupIdStandard'];
|
|
}
|
|
$artikeldaten['priceGroupId'] = $pricegroupid;
|
|
|
|
if(!empty($kategorien))
|
|
{
|
|
$artikeldaten['categories'] = $kategorien;
|
|
}
|
|
|
|
if($crosssellingartikeluebertragen)
|
|
{
|
|
$artikeldaten['similar'] = $crosssellingaehnlich;
|
|
$artikeldaten['related'] = $crosssellingzubehoer;
|
|
}else{
|
|
if(isset($artikeldaten['similar']))
|
|
{
|
|
unset($artikeldaten['similar']);
|
|
}
|
|
if(isset($artikeldaten['related']))
|
|
{
|
|
unset($artikeldaten['related']);
|
|
}
|
|
}
|
|
if($this->nurpreise){
|
|
unset($artikeldaten['description'],
|
|
$artikeldaten['descriptionLong'],
|
|
$artikeldaten['keywords'],
|
|
$artikeldaten['metaTitle']);
|
|
}
|
|
|
|
if(!$eigenschaftenuebertragen)
|
|
{
|
|
unset($artikeldaten['filterGroupId']);
|
|
}
|
|
if($varianten)
|
|
{
|
|
foreach($varianten as $k => $v)
|
|
{
|
|
$artikeldaten[$k] = $v;
|
|
}
|
|
}
|
|
|
|
//Schritt 7: Eigenschaften / Freifelder
|
|
if(isset($tmp[$i]['eigenschaften'])){
|
|
foreach ($tmp[$i]['eigenschaften'] as $key => $value) {
|
|
$tmpval = explode('_', $value['name']);
|
|
$prefix = $tmpval[0];
|
|
unset($tmpval[0]);
|
|
$anweisung = implode('_',$tmpval);
|
|
switch ($prefix) {
|
|
case 'mainArticle':
|
|
if(!empty($anweisung)){
|
|
switch ($anweisung) {
|
|
case 'filterGroup':
|
|
$filtergruppe = $this->GetGroup($value['values']);
|
|
$filtergruppenid = $filtergruppe['id'];
|
|
$artikeldaten['filterGroupId'] = $filtergruppenid;
|
|
break;
|
|
case 'customerGroups':
|
|
$customerGroups = explode(',', str_replace(' ', '', $value['values']));
|
|
foreach ($customerGroups as $customerGroup){
|
|
if(array_key_exists($customerGroup, $kundengruppen)){
|
|
if(!is_array($artikeldaten['customerGroups'])){
|
|
$artikeldaten['customerGroups'] = array();
|
|
}
|
|
$artikeldaten['customerGroups'][] = array('id' => $kundengruppen[$customerGroup]['id']);
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
$artikeldaten[$anweisung] = $value['values'];
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case 'mainDetail':
|
|
if(!empty($anweisung)){
|
|
$artikeldaten['mainDetail'][$anweisung] = $value['values'];
|
|
}
|
|
break;
|
|
case 'configuratorSet':
|
|
if(!empty($tmpval[1])){
|
|
$artikeldaten['configuratorSet'][$anweisung] = $value['values'];
|
|
}
|
|
break;
|
|
case 'articleAttribute':
|
|
if(!empty($anweisung)){
|
|
$artikeldaten['attribute'][$anweisung] = $value['values'];
|
|
}
|
|
break;
|
|
default:
|
|
if(!empty($value['name'])){
|
|
$artikeldaten['propertyValues'][] = array('option'=>array('name'=>$value['name']),'value'=>$value['values']);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if(isset($tmp[$i]['freifelder']['DE'])){
|
|
foreach ($tmp[$i]['freifelder']['DE'] as $ffkey => $ffvalue) {
|
|
$tmpval = explode('_', $ffkey);
|
|
$prefix = $tmpval[0];
|
|
unset($tmpval[0]);
|
|
$anweisung = implode('_',$tmpval);
|
|
switch ($prefix) {
|
|
case 'mainArticle':
|
|
if(isset($anweisung) && $anweisung !== ''){
|
|
switch ($anweisung) {
|
|
case 'filterGroup':
|
|
$filtergruppe = $this->GetGroup($ffvalue);
|
|
$filtergruppenid = $filtergruppe['id'];
|
|
$artikeldaten['filterGroupId'] = $filtergruppenid;
|
|
break;
|
|
case 'customerGroups':
|
|
$cgtmp = explode(',', str_replace(' ', '', $ffvalue));
|
|
foreach ($cgtmp as $customerGroup){
|
|
if(array_key_exists($customerGroup, $kundengruppen)){
|
|
if(!is_array($artikeldaten['customerGroups'])){
|
|
$artikeldaten['customerGroups'] = array();
|
|
}
|
|
$artikeldaten['customerGroups'][] = array('id' => $kundengruppen[$customerGroup]['id']);
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
$artikeldaten[$anweisung] = $ffvalue;
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
case 'mainDetail':
|
|
if(isset($anweisung) && $anweisung!==''){
|
|
$artikeldaten['mainDetail'][$anweisung] = $ffvalue;
|
|
}
|
|
break;
|
|
case 'configuratorSet':
|
|
if(isset($anweisung) && $anweisung!==''){
|
|
$artikeldaten['configuratorSet'][$anweisung] = $ffvalue;
|
|
}
|
|
break;
|
|
case 'property':
|
|
if(isset($anweisung) && $anweisung!==''){
|
|
$artikeldaten['propertyValues'][] = array('option'=>array('name'=>$anweisung),'value'=>$ffvalue);
|
|
}
|
|
break;
|
|
default:
|
|
if(isset($ffkey) && $ffkey){
|
|
$artikeldaten['attribute'][$ffkey] = $ffvalue;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
//Schritt 8: Artikel senden
|
|
$variantBatches = [];
|
|
$variantNummer = '';
|
|
if(!empty($artikeldaten['variants'])){
|
|
$variantNummer = $artikeldaten['variants'][count($artikeldaten['variants'])-1]['number'];
|
|
}
|
|
if(count($artikeldaten['variants']) > 1000){
|
|
foreach ($artikeldaten['variants'] as $index => $variante){
|
|
$variantBatches[(int)floor($index/1000)][] = $variante;
|
|
}
|
|
$artikeldaten['variants'] = $variantBatches[0];
|
|
$variantNummer = $artikeldaten['variants'][count($artikeldaten['variants'])-1]['number'];
|
|
unset($variantBatches[0]);
|
|
}
|
|
|
|
$artikelexistiert = null;
|
|
$response = $this->getIdByNumber($tmp[$i]['artikelid'],$nummer,!empty($artikeldaten['variants']),$variantNummer);
|
|
if(!empty($response['id'])){
|
|
$artikelexistiert = $response['id'];
|
|
}
|
|
if(!$artikelexistiert){
|
|
$artikeldaten['mainDetail']['number'] = $nummer;
|
|
}
|
|
|
|
if(!empty($artikeldaten['variants'])){
|
|
foreach ($artikeldaten['variants'] as $variant){
|
|
if($variant['isMain']){
|
|
$artikeldaten['mainDetail']['prices'] = $variant['prices'];
|
|
$artikeldaten['mainDetail']['inStock'] = $variant['inStock'];
|
|
$artikeldaten['mainDetail']['active'] = $variant['active'];
|
|
$artikeldaten['mainDetail']['attributeVisionPhysicalStockForSale'] = $variant['attributeVisionPhysicalStockForSale'];
|
|
$artikeldaten['mainDetail']['ean'] = $variant['ean'];
|
|
$artikeldaten['mainDetail']['height'] = $variant['height'];
|
|
$artikeldaten['mainDetail']['len'] = $variant['len'];
|
|
$artikeldaten['mainDetail']['width'] = $variant['width'];
|
|
$artikeldaten['mainDetail']['weight'] = $variant['weight'];
|
|
$artikeldaten['mainDetail']['supplierNumber'] = $variant['supplierNumber'];
|
|
$artikeldaten['mainDetail']['shippingtime'] = $variant['shippingtime'];
|
|
$artikeldaten['mainDetail']['minPurchase'] = $variant['minPurchase'];
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(empty($tmp[$i]['variante']))
|
|
{
|
|
//Artikel ist keine Variante, wenn nicht vorhanden neu anlegen
|
|
//Schritt 8b: Artikel (neu) anlegen
|
|
//Propertyvalues verhindert den Upload des Artikels wenn keine Filtergruppenid, oder keine Propertygruppe gesetzt ist
|
|
if(isset($artikeldaten['filterGroupId'])){
|
|
if(!$eigenschaftenuebertragen || $artikeldaten['filterGroupId'] < 1)
|
|
{
|
|
unset($artikeldaten['propertyValues']);
|
|
}
|
|
}else{
|
|
unset($artikeldaten['propertyValues']);
|
|
}
|
|
if(!$artikelexistiert)
|
|
{
|
|
$artikeldaten['categories'] = $kategorien; // Beim anlegen immer Kategorien übergeben
|
|
$result = $this->adapter->post('articles', $artikeldaten);
|
|
$response = $this->getIdByNumber($tmp[$i]['artikelid'],$nummer,!empty($artikeldaten['variants']));
|
|
if(!empty($response['id'])){
|
|
$artikelexistiert = $response['id'];
|
|
}
|
|
|
|
$this->ShopwareLog('Artikel neu anlegen: '.$nummer, print_r($result,true));
|
|
} else {
|
|
|
|
if(!$kategorienuebertragen)
|
|
{
|
|
unset($artikeldaten['categories']);
|
|
}
|
|
if($this->ignoreartikelbeschreibung){
|
|
unset($artikeldaten['name'],
|
|
$artikeldaten['metaTitle'],
|
|
$artikeldaten['description'],
|
|
$artikeldaten['descriptionLong'],
|
|
$artikeldaten['keywords']);
|
|
}
|
|
$result = $this->adapter->put('articles/'.$artikelexistiert, $artikeldaten);
|
|
$this->ShopwareLog('Artikel Update: '.$nummer, print_r($result,true));
|
|
}
|
|
if(!empty($artikelexistiert) && !empty($artikeldaten['variants'])){
|
|
if(!empty($variantBatches)){
|
|
foreach ($variantBatches as $variantBatch){
|
|
$artikeldatenKlein['variants'] = $variantBatch;
|
|
|
|
$this->adapter->put('articles/'.$artikelexistiert, $artikeldatenKlein);
|
|
}
|
|
}
|
|
|
|
unset($artikeldaten['variants'],$artikeldaten['mainDetail']['number']);
|
|
$result = $this->adapter->put('articles/'.$artikelexistiert, $artikeldaten);
|
|
}
|
|
|
|
if(!is_array($result)){
|
|
return $result;
|
|
}
|
|
//Schritt 8c: Alle Bilder anlegen und neu verlinken
|
|
$first = 1;
|
|
$posbild = 0;
|
|
if($shopbilderuebertragen){
|
|
foreach ($bilderarray as $key => $value) {
|
|
$cvalue = (!empty($value)?count($value):0);
|
|
for ($k = 0; $k < $cvalue; $k++) {
|
|
|
|
$mediaId = '';
|
|
$extId = $this->app->remote->GetShopexportMappingExt($this->shopid, 'datei', $value[$k]['intid'], $value[$k]['version']);
|
|
if(!empty($extId)){
|
|
$mediaData = $this->adapter->get('media/'.$extId);
|
|
if(!empty($mediaData['success'])){
|
|
$mediaId = $mediaData['data']['id'];
|
|
}
|
|
}
|
|
|
|
if(empty($mediaId)){
|
|
$resultb = $this->adapter->post('media', $value[$k]);
|
|
if(is_array($resultb) && $resultb['success']) {
|
|
$mediaId = $resultb['data']['id'];
|
|
$this->app->remote->ShopexportMappingSet($this->shopid, 'datei', $value[$k]['intid'], $mediaId, $value[$k]['version']);
|
|
}
|
|
}
|
|
|
|
if(empty($mediaId)){
|
|
continue;
|
|
}
|
|
|
|
//Bild verlinken
|
|
$posbild++;
|
|
$bildlinkdaten = array(
|
|
'id' => $key,
|
|
'images' => array(
|
|
array('mediaId' => $mediaId, 'position' => $posbild))
|
|
);
|
|
if($first){
|
|
//Entfernt vorherige Verlinkungen von Artikelvarianten
|
|
$bildlinkdaten['__options_images'] = array('replace' => 1);
|
|
$first = 0;
|
|
}
|
|
if($key == $nummer){
|
|
$this->adapter->put('articles/' . $artikelexistiert, $bildlinkdaten);
|
|
}else{
|
|
$artikelinfo = $this->getVariantProductInfoByNumber($key,$key,true);
|
|
$id = $artikelinfo['id'];
|
|
if($artikelinfo['typ']==='normal'){
|
|
$this->adapter->put('articles/' .$id, $bildlinkdaten);
|
|
}else{
|
|
$this->adapter->put('variants/' .$id, $bildlinkdaten);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
//Artikel ist Variante
|
|
//Falls Bildleichen auftauchen liegt es vermutlich daran dass bei einzelnen Varianten die zugeordneten Bilder nicht gelöscht werden
|
|
$artikeldaten = array(
|
|
'variants' => array(
|
|
array(
|
|
'number' => $nummer,
|
|
'active' => $aktiv,
|
|
'inStock' => $lageranzahl,
|
|
'attributeVisionPhysicalStockForSale' => $lageranzahl)));
|
|
$result = $this->adapter->put('articles/'.$artikelexistiert, $artikeldaten);
|
|
}
|
|
|
|
if(!is_array($result)){
|
|
return $result;
|
|
}
|
|
|
|
$artikelid = $result['data']['id'];
|
|
//Schritt 9:Übersetzung
|
|
if(!$this->nurpreise){
|
|
$storestmp = $this->app->DB->SelectArr("SELECT subshopkennung, aktiv, sprache FROM shopexport_subshop WHERE shop = '$this->shopid' AND aktiv = 1");
|
|
if(is_array($storestmp)){
|
|
$dimensonIds = [];
|
|
$dimensionValuesIds = [];
|
|
if(!empty($artikelexistiert)){
|
|
$articleData = $this->adapter->get('articles/'.$artikelexistiert);
|
|
if(!empty($articleData['data']['configuratorSet']['groups'])){
|
|
foreach ($articleData['data']['configuratorSet']['groups'] as $configuratorGroup){
|
|
$dimensonIds[$configuratorGroup['name']] = $configuratorGroup['id'];
|
|
}
|
|
}
|
|
if(!empty($articleData['data']['details'][0])){
|
|
foreach ($articleData['data']['details'] as $articleDetail){
|
|
foreach ($articleDetail['configuratorOptions'] as $detailOption){
|
|
$dimensionValuesIds[$detailOption['name']] = $detailOption['id'];
|
|
}
|
|
}
|
|
}
|
|
if(!empty($articleData['data']['mainDetail']['configuratorOptions'])){
|
|
foreach ($articleData['data']['mainDetail']['configuratorOptions'] as $detailOption){
|
|
$dimensionValuesIds[$detailOption['name']] = $detailOption['id'];
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ($storestmp as $key => $value){
|
|
if($value['sprache'] !== 'deutsch'){
|
|
$iso = $this->app->DB->Select("SELECT iso FROM sprachen WHERE iso <> '' AND (iso='".$value['sprache']."' OR LOWER(bezeichnung_de)='".$value['sprache']."' OR LOWER(alias)='".$value['sprache']."' ) LIMIT 1");
|
|
if($iso === 'DE' || empty($iso)){
|
|
continue;
|
|
}
|
|
|
|
$uebersetzung = array();
|
|
if($iso === 'EN'){
|
|
if(!empty($name_en)){
|
|
$uebersetzung['name'] = $name_en;
|
|
}
|
|
if(!empty($description_en)){
|
|
$uebersetzung['description'] = $description_en;
|
|
}
|
|
if(!empty($description_long_en)){
|
|
$uebersetzung['descriptionLong'] = $description_long_en;
|
|
}
|
|
if(!empty($keywords_en)){
|
|
$uebersetzung['keywords'] = $keywords_en;
|
|
}
|
|
if(!empty($metatitle_en)){
|
|
$uebersetzung['metaTitle'] = $metatitle_en;
|
|
}
|
|
}
|
|
|
|
if(isset($tmp[$i]['texte'])){
|
|
$ctexte = count($tmp[$i]['texte']);
|
|
for ($t=0; $t < $ctexte; $t++) {
|
|
if($tmp[$i]['texte'][$t]['sprache'] === $iso){
|
|
if(!empty($tmp[$i]['texte'][$t]['name']))
|
|
{
|
|
$uebersetzung['name'] = $tmp[$i]['texte'][$t]['name'];
|
|
}
|
|
if(!empty($tmp[$i]['texte'][$t]['meta_description']))
|
|
{
|
|
$uebersetzung['description'] = $tmp[$i]['texte'][$t]['meta_description'];
|
|
}
|
|
if(!empty($tmp[$i]['texte'][$t]['beschreibung_online']))
|
|
{
|
|
$uebersetzung['descriptionLong'] = $tmp[$i]['texte'][$t]['beschreibung_online'];
|
|
}
|
|
if(!empty($tmp[$i]['texte'][$t]['meta_keywords']))
|
|
{
|
|
$uebersetzung['keywords'] = $tmp[$i]['texte'][$t]['meta_keywords'];
|
|
}
|
|
if(!empty($tmp[$i]['texte'][$t]['meta_title']))
|
|
{
|
|
$uebersetzung['metaTitle'] = $tmp[$i]['texte'][$t]['meta_title'];
|
|
}
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
if($iso !== 'DE' && isset($tmp[$i]['freifelder'][$iso])){
|
|
//Anzupassen wenn veraltet Freifeldübertragung die Anpassung von freifeld_ notwending macht AP 14.11.18
|
|
$cfreifelder = count($tmp[$i]['freifelder'][$iso]);
|
|
for ($f=0; $f < $cfreifelder; $f++) {
|
|
$uebersetzung['__attribute_'.$tmp[$i]['freifelder'][$iso][$f]['mapping']] = $tmp[$i]['freifelder'][$iso][$f]['wert'];
|
|
}
|
|
}
|
|
|
|
if((!empty($uebersetzung)?count($uebersetzung):0) > 0 ){
|
|
$uebersetzungsdaten = array('shopId' => $value['subshopkennung'], 'type' => 'article', 'key' => $artikelid, 'data' => $uebersetzung);
|
|
$tresult = $this->adapter->post('translations', $uebersetzungsdaten);
|
|
}
|
|
|
|
|
|
if(!empty($tmp[0]['matrix_varianten']['texte']['gruppen'][$iso])){
|
|
foreach ($tmp[0]['matrix_varianten']['texte']['gruppen'][$iso] as $dimensionName => $dimensionTranslation){
|
|
if(isset($dimensonIds[$dimensionName])){
|
|
$uebersetzung = ['name' => $dimensionTranslation];
|
|
$uebersetzungsdaten = array('shopId' => $value['subshopkennung'], 'type' => 'configuratorgroup', 'key' => $dimensonIds[$dimensionName], 'data' => $uebersetzung);
|
|
$tresult = $this->adapter->post('translations', $uebersetzungsdaten);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!empty($tmp[0]['matrix_varianten']['texte']['werte'][$iso])){
|
|
foreach ($tmp[0]['matrix_varianten']['texte']['werte'][$iso] as $valueName => $valueTranslation){
|
|
if(isset($dimensionValuesIds[$valueName])){
|
|
$uebersetzung = ['name' => $valueTranslation];
|
|
$uebersetzungsdaten = array('shopId' => $value['subshopkennung'], 'type' => 'configuratoroption', 'key' => $dimensionValuesIds[$valueName], 'data' => $uebersetzung);
|
|
$tresult = $this->adapter->post('translations', $uebersetzungsdaten);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
//Schritt 10: Crossselling gegenseitige zuweisung
|
|
if($crosssellingartikeluebertragen && !empty($gegenseitigzuweisen) && !empty($artikelid)){
|
|
foreach ($gegenseitigzuweisen as $crosssellingartikel){
|
|
$this->crosssellingzuweisen($crosssellingartikel['shopwareid'],$artikelexistiert,$crosssellingartikel['art']);
|
|
}
|
|
}
|
|
|
|
if($result['success'])
|
|
{
|
|
$anzahl++;
|
|
//Erstellt Thumbnailbilder für den Artikel - behauptet die Doku
|
|
$result = $this->adapter->put('generateArticleImages/'.$artikelexistiert);
|
|
}
|
|
}
|
|
|
|
return $anzahl;
|
|
}
|
|
|
|
function GetImagesIdsbyNummer($nummer){
|
|
$params = array(
|
|
'useNumberAsId' => true
|
|
);
|
|
$result = $this->adapter->get('articles/'.$nummer, $params);
|
|
if(is_array($result)){
|
|
return $result["data"]['images'];
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function crosssellingzuweisen($artikelid, $crosssellingartikelid,$art){
|
|
$artikeldaten=[];
|
|
$typ = 'similar';
|
|
if((int)$art===2){
|
|
$typ = 'related';
|
|
}
|
|
$artikelInShopware = $this->adapter->get('articles/'.$artikelid);
|
|
$vorhandeRelation = $artikelInShopware['data'][$typ];
|
|
$vorhandeRelation[] = ['id'=>$crosssellingartikelid];
|
|
$artikeldaten[$typ] = $vorhandeRelation;
|
|
$this->adapter->put('articles/'.$artikelid, $artikeldaten);
|
|
}
|
|
|
|
|
|
// receive all new articles
|
|
public function ImportInhalt()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
$anzahl = 0;
|
|
$this->app->DB->Delete('DELETE FROM inhalt');
|
|
if(!empty($tmp)){
|
|
$ctmp = (!empty($tmp)?count($tmp):0);
|
|
for ($i = 0; $i < $ctmp; $i++) {
|
|
$this->app->DB->Insert("INSERT INTO inhalt (id) VALUES ('')");
|
|
$id = $this->app->DB->GetInsertID();
|
|
|
|
foreach ($tmp[$i] as $key => $value) {
|
|
$this->app->DB->Update("UPDATE inhalt SET $key='$value' WHERE id='$id' LIMIT 1");
|
|
}
|
|
|
|
$anzahl++;
|
|
}
|
|
}
|
|
// anzahl erfolgreicher updates
|
|
return $anzahl;
|
|
}
|
|
|
|
public function ImportDeleteFile()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
|
|
// pruefe ob $tmp[datei] vorhanden wenn nicht lege an sonst update [inhalt] und [checksum]
|
|
if(!empty($tmp['datei']) && is_numeric($tmp['datei'])){
|
|
//$checksum= $tmp['checksum'];
|
|
$datei = $tmp['datei'];
|
|
$this->app->DB->Delete("DELETE FROM datei WHERE datei='$datei' LIMIT 1");
|
|
$this->app->DB->Delete("DELETE FROM datei_stichwoerter WHERE datei='$datei'");
|
|
}
|
|
return 'ok';
|
|
}
|
|
|
|
public function ImportSendFile()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
|
|
// pruefe ob $tmp[datei] vorhanden wenn nicht lege an sonst update [inhalt] und [checksum]
|
|
if(!empty($tmp['datei']) && is_numeric($tmp['datei'])){
|
|
$datei = $tmp['datei'];
|
|
$inhalt = $this->app->DB->real_escape_string($tmp['inhalt']);
|
|
$checksum = $this->app->DB->real_escape_string($tmp['checksum']);
|
|
|
|
$this->app->DB->Delete("DELETE FROM datei WHERE datei='$datei' LIMIT 1");
|
|
$this->app->DB->Delete("INSERT INTO datei (id,datei,inhalt,checksum,logdatei) VALUES ('','$datei','$inhalt','$checksum',NOW())");
|
|
}
|
|
return 'ok';
|
|
}
|
|
|
|
|
|
public function ImportAddFileSubjekt()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
if(!empty($tmp['datei']) && is_numeric($tmp['datei'])
|
|
&& !empty($tmp['artikel']) && is_numeric($tmp['artikel'])){
|
|
$artikel = $tmp['artikel'];
|
|
$subjekt = !empty($tmp['subjekt'])?$this->app->DB->real_escape_string($tmp['subjekt']):'';
|
|
$datei = $tmp['datei'];
|
|
//loesche alle stichwoerter und lege alle neu an /subjekt /artikel
|
|
$this->app->DB->Delete("DELETE FROM datei_stichwoerter WHERE artikel='$artikel' AND subjekt='$subjekt' AND datei='$datei' LIMIT 1");
|
|
$this->app->DB->Delete("INSERT INTO datei_stichwoerter (artikel,subjekt,datei) VALUES ('$artikel','$subjekt','$datei')");
|
|
}
|
|
return 'ok';
|
|
}
|
|
|
|
|
|
// delete an article
|
|
public function ImportDeleteArticle()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
if(is_numeric($tmp) && $tmp > 0){
|
|
$this->app->DB->Select("DELETE FROM artikel WHERE artikel='$tmp' LIMIT 1");
|
|
}
|
|
// anzahl erfolgreicher updates
|
|
return $tmp;
|
|
}
|
|
|
|
// receive all new articles
|
|
public function ImportExportlink()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
$anzahl = 0;
|
|
//$this->app->DB->Delete("DELETE FROM exportlink WHERE datum < DATE_ADD(NOW(), INTERVAL 5 DAYS)");
|
|
|
|
$ctmp = (!empty($tmp)?count($tmp):0);
|
|
for($i=0;$i<$ctmp;$i++)
|
|
{
|
|
$this->app->DB->Insert("INSERT INTO exportlink (id,datum) VALUES ('',NOW())");
|
|
$id = $this->app->DB->GetInsertID();
|
|
|
|
foreach($tmp[$i] as $key=>$value)
|
|
{
|
|
$this->app->DB->Update("UPDATE exportlink SET $key='$value' WHERE id='$id' LIMIT 1");
|
|
}
|
|
|
|
$anzahl++;
|
|
}
|
|
|
|
return $anzahl;
|
|
}
|
|
|
|
// receive all new articles
|
|
public function ImportArtikelgruppen()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
$anzahl = 0;
|
|
$this->app->DB->Delete('DELETE FROM artikelgruppen');
|
|
$ctmp = (!empty($tmp)?count($tmp):0);
|
|
for($i=0;$i<$ctmp;$i++)
|
|
{
|
|
$id = $tmp[$i]['id'];
|
|
|
|
$this->app->DB->Insert("INSERT INTO artikelgruppen (id) VALUES ('$id')");
|
|
|
|
foreach($tmp[$i] as $key=>$value)
|
|
{
|
|
$this->app->DB->Update("UPDATE artikelgruppen SET $key='$value' WHERE id='$id' LIMIT 1");
|
|
}
|
|
|
|
$anzahl++;
|
|
}
|
|
|
|
return $anzahl;
|
|
}
|
|
|
|
// receive all new articles
|
|
public function ImportNavigation()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
$anzahl = 0;
|
|
$this->app->DB->Delete('DELETE FROM shopnavigation');
|
|
$ctmp = (!empty($tmp)?count($tmp):0);
|
|
for($i=0;$i<$ctmp;$i++)
|
|
{
|
|
$id = $tmp[$i]['id'];
|
|
|
|
$this->app->DB->Insert("INSERT INTO shopnavigation (id) VALUES ('$id')");
|
|
|
|
foreach($tmp[$i] as $key=>$value)
|
|
{
|
|
$this->app->DB->Update("UPDATE shopnavigation SET $key='$value' WHERE id='$id' LIMIT 1");
|
|
}
|
|
|
|
$anzahl++;
|
|
}
|
|
|
|
return $anzahl;
|
|
}
|
|
|
|
// receive all new articles
|
|
public function ImportArtikelArtikelGruppe()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
$anzahl = 0;
|
|
$this->app->DB->Delete('DELETE FROM artikel_artikelgruppe');
|
|
$ctmp = (!empty($tmp)?count($tmp):0);
|
|
for($i=0;$i<$ctmp;$i++)
|
|
{
|
|
$id = $tmp[$i]['id'];
|
|
|
|
$this->app->DB->Insert("INSERT INTO artikel_artikelgruppe (id) VALUES ('$id')");
|
|
|
|
foreach($tmp[$i] as $key=>$value)
|
|
{
|
|
$this->app->DB->Update("UPDATE artikel_artikelgruppe SET $key='$value' WHERE id='$id' LIMIT 1");
|
|
}
|
|
|
|
$anzahl++;
|
|
}
|
|
|
|
return $anzahl;
|
|
}
|
|
|
|
//TODO fuer Auftragimport
|
|
//get checksum list from onlineshop
|
|
public function ImportGetAuftraegeAnzahl()
|
|
{
|
|
$einstellungen = $this->app->DB->Select("SELECT einstellungen_json FROM shopexport WHERE id = '$this->shopid' LIMIT 1");
|
|
if($einstellungen){
|
|
$einstellungen = json_decode($einstellungen,true);
|
|
}
|
|
$limitedtosubshop = (int)$einstellungen['felder']['limitedtosubshop'];
|
|
|
|
$__tmp = $this->CatchRemoteCommand('data');
|
|
$nummer = '';
|
|
$bisnummer = '';
|
|
|
|
if(!empty($__tmp['nummer']))
|
|
{
|
|
$nummer = $__tmp['nummer'];
|
|
}
|
|
if(!empty($__tmp['ab_nummer']))
|
|
{
|
|
$nummer = $__tmp['ab_nummer'];
|
|
}
|
|
if(!empty($__tmp['bis_nummer']))
|
|
{
|
|
$bisnummer = $__tmp['bis_nummer'];
|
|
}
|
|
|
|
if($nummer != '')
|
|
{
|
|
if($this->useorderid)
|
|
{
|
|
$iststring = true;
|
|
}else{
|
|
$iststring = false;
|
|
$testbestellungen = $this->adapter->get('orders', array('limit' => '10', 'sort' => array(array('property' => 'number','direction' => 'DESC'))));
|
|
if(!empty($testbestellungen['data'])){
|
|
foreach ($testbestellungen['data'] as $key => $value) {
|
|
if(((string)(int)($value['number']) != $value['number'])){
|
|
$iststring = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$property = "number";
|
|
if($iststring)$property = "id";
|
|
$filterByOrderStatus = array(
|
|
array(
|
|
'property' => $property,
|
|
'expression' => '>=',
|
|
'value' => $nummer
|
|
),
|
|
);
|
|
if($bisnummer != ''){
|
|
$filterByOrderStatus[] = array(
|
|
'property' => $property,
|
|
'expression' => '<=',
|
|
'value' => $bisnummer
|
|
);
|
|
if(!$__tmp['storniete_abholen']){
|
|
$filterByOrderStatus[] = array(
|
|
'property' => 'status',
|
|
'expression' => '<>',
|
|
'value' => '4'
|
|
);
|
|
}
|
|
}
|
|
}else{
|
|
// filter nach orderStatusId
|
|
$filterByOrderStatus = array(
|
|
array(
|
|
'property' => 'status',
|
|
'value' => $this->abzuholenderStatusId
|
|
),
|
|
);
|
|
}
|
|
if($limitedtosubshop){
|
|
$filterByOrderStatus[] =array('property' => 'shopId', 'expression' => '=','value' => $limitedtosubshop);
|
|
}
|
|
$params = array(
|
|
'filter' => $filterByOrderStatus,
|
|
'sort' => [['property' => 'id','direction' => 'ASC']]
|
|
);
|
|
$result = $this->adapter->get('orders', $params);
|
|
if(is_string($result) || empty($result['data'])) {
|
|
return 0;
|
|
}
|
|
//$tmp = $this->app->DB->Select("SELECT COUNT(id) FROM auftraege"); // WHERE noch nicht abgeholt
|
|
return count($result['data']);
|
|
}
|
|
|
|
//TODO fuer AuftragImport
|
|
public function ImportUpdateAuftrag()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
|
|
// pruefe ob $tmp[datei] vorhanden wenn nicht lege an sonst update [inhalt] und [checksum]
|
|
$auftrag = $tmp['auftrag'];
|
|
$zahlungok = $tmp['zahlung'];
|
|
$versandok = $tmp['versand'];
|
|
$tracking = $tmp['tracking'];
|
|
|
|
/*if($zahlungok=='ok' || $zahlungok=='1')
|
|
$status_zahlung=12;
|
|
else
|
|
$status_zahlung=1;
|
|
|
|
if($versandok=='ok' || $versandok=='1')
|
|
$status_versand=7;
|
|
else
|
|
$status_versand=1;*/
|
|
/*
|
|
$date = new DateTime();
|
|
$date->modify('+10 days');
|
|
$date = $date->format(DateTime::ISO8601);
|
|
*/
|
|
$result = $this->adapter->put('orders/'.$auftrag, array(
|
|
// 'paymentStatusId' => $status_zahlung,
|
|
'orderStatusId' => $this->abgeschlossenStatusId,//$status_versand,
|
|
'trackingCode' => $tracking
|
|
//'comment' => 'Neuer Kommentar',
|
|
//'transactionId' => '0',
|
|
// 'clearedDate' => $date,
|
|
));
|
|
$this->ShopwareLog("Abschlussstatusrückmeldung für Auftrag: $auftrag", print_r($result,true));
|
|
//$this->app->DB->Delete("DELETE FROM auftraege WHERE id='$auftrag' LIMIT 1");
|
|
return 'ok';
|
|
}
|
|
|
|
//TODO fuer AuftragImport
|
|
public function ImportDeleteAuftrag()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
|
|
// pruefe ob $tmp[datei] vorhanden wenn nicht lege an sonst update [inhalt] und [checksum]
|
|
$auftrag = $tmp['auftrag'];
|
|
if(!empty($auftrag)){
|
|
$result = $this->adapter->put('orders/' . $auftrag, array(
|
|
'orderStatusId' => $this->abgeholtStatusId,
|
|
));
|
|
}
|
|
$this->ShopwareLog("Abholstatusrückmeldung für Auftrag: $auftrag", print_r($result,true));
|
|
//$this->app->DB->Delete("DELETE FROM auftraege WHERE id='$auftrag' LIMIT 1");
|
|
return 'ok';
|
|
}
|
|
|
|
public function ImportUpdateZahlungsstatus()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
$auftrag = $tmp['auftrag'];
|
|
$status_zahlung = $tmp['zahlungsstatus'];
|
|
switch($status_zahlung)
|
|
{
|
|
case 'bezahlt':
|
|
$status_zahlung = 12;
|
|
break;
|
|
default:
|
|
return 'unbekannt';
|
|
break;
|
|
}
|
|
if(!empty($auftrag)){
|
|
$ret = $this->adapter->put('orders/' . $auftrag, array(
|
|
'paymentStatusId' => $status_zahlung,
|
|
//'orderStatusId' => 7,//$status_versand,
|
|
//'trackingCode' => $tracking
|
|
//'comment' => $kommentar,
|
|
//'transactionId' => '0',
|
|
// 'clearedDate' => $date,
|
|
));
|
|
}
|
|
$this->ShopwareLog("Zahlungsstatusrückmeldung für Auftrag: $auftrag", print_r($ret,true));
|
|
if(isset($ret['success']) && $ret['success'] == 1)
|
|
{
|
|
return 'ok';
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
|
|
protected function getOrdersByParam($params) {
|
|
$resultOrders = $this->adapter->get('orders', $params);
|
|
if(!is_array($resultOrders)) {
|
|
$resultOrders = json_decode(json_encode($resultOrders), true);
|
|
}
|
|
if(!empty($resultOrders['data'][0])) {
|
|
foreach($resultOrders['data'] as $resultKey => $resultOrder) {
|
|
if(empty($resultOrder['id'])) {
|
|
unset($resultOrders['data'][$resultKey]);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $resultOrders;
|
|
}
|
|
|
|
protected function getOrderById($orderId) {
|
|
if(empty($orderId)) {
|
|
return '';
|
|
}
|
|
$result = $this->adapter->get('orders/' . $orderId);
|
|
if(!is_array($result)){
|
|
$result = json_decode(json_encode($result), true);
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
protected function removeOrderFromOrderList($orderId, $orders) {
|
|
foreach($orders['data'] as $resultKey => $resultOrder) {
|
|
if($resultOrder['id'] == $orderId) {
|
|
unset($orders['data'][$resultKey]);
|
|
}
|
|
}
|
|
|
|
return $orders;
|
|
}
|
|
|
|
public function ShopwareLog($nachricht, $dump = '')
|
|
{
|
|
if($this->protokoll){
|
|
$this->app->erp->Logfile($nachricht, print_r($dump, true));
|
|
}
|
|
}
|
|
|
|
//TODO fuer Auftragimport
|
|
// get checksum list from onlineshop
|
|
public function ImportGetAuftrag()
|
|
{
|
|
$einstellungen = $this->app->DB->Select("SELECT einstellungen_json FROM shopexport WHERE id = '$this->shopid' LIMIT 1");
|
|
if($einstellungen)
|
|
{
|
|
$einstellungen = json_decode($einstellungen,true);
|
|
}
|
|
$benutzergruppenuebernehmen = $einstellungen['felder']['benutzergruppenuebernehmen'];
|
|
$benutzergruppenanlegen = $einstellungen['felder']['benutzergruppenanlegen'];
|
|
$gutscheinalslagerartikel = $einstellungen['felder']['gutscheinalslagerartikel'];
|
|
$limitedtosubshop = (int)$einstellungen['felder']['limitedtosubshop'];
|
|
$getunpaidorders = $einstellungen['felder']['getunpaidorders'];
|
|
|
|
$__tmp = $this->CatchRemoteCommand('data');
|
|
$nummer = '';
|
|
$bisnummer = '';
|
|
|
|
if(!empty($__tmp['nummer']))
|
|
{
|
|
$nummer = $__tmp['nummer'];
|
|
}
|
|
if(!empty($__tmp['ab_nummer']))
|
|
{
|
|
$nummer = $__tmp['ab_nummer'];
|
|
}
|
|
if(!empty($__tmp['bis_nummer']))
|
|
{
|
|
$bisnummer = $__tmp['bis_nummer'];
|
|
}
|
|
$useorderid = null;
|
|
if($nummer != '')
|
|
{
|
|
if($this->useorderid)
|
|
{
|
|
$iststring = true;
|
|
}else{
|
|
$testbestellungen = $this->adapter->get('orders', array('limit' => '10', 'sort' => array(array('property' => 'number', 'direction' => 'DESC'))));
|
|
$iststring = false;
|
|
if(!empty($testbestellungen['data'])){
|
|
foreach ($testbestellungen['data'] as $key => $value) {
|
|
if(((string)(int)($value['number']) != $value['number'])){
|
|
$iststring = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$useorderid = $iststring;
|
|
$property = "number";
|
|
if($iststring)
|
|
{
|
|
$property = "id";
|
|
}
|
|
|
|
$filterByOrderStatus = array(
|
|
array(
|
|
'property' => $property,
|
|
'expression' => '>=',
|
|
'value' => $nummer
|
|
),
|
|
);
|
|
if($bisnummer != ''){
|
|
if(!$__tmp['storniete_abholen']){
|
|
$filterByOrderStatus[] = array(
|
|
'property' => 'status',
|
|
'expression' => '<>',
|
|
'value' => '4'
|
|
);
|
|
}
|
|
$filterByOrderStatus[] = array(
|
|
'property' => $property,
|
|
'expression' => '<=',
|
|
'value' => $bisnummer
|
|
);
|
|
}
|
|
}else{
|
|
// filter nach orderStatusId
|
|
$filterByOrderStatus = array(
|
|
array(
|
|
'property' => 'status',
|
|
'value' => $this->abzuholenderStatusId
|
|
),
|
|
);
|
|
}
|
|
|
|
if($limitedtosubshop){
|
|
$filterByOrderStatus[] =array('property' => 'shopId', 'expression' => '=','value' => $limitedtosubshop);
|
|
}
|
|
$params = array(
|
|
'limit' => 1,
|
|
'filter' => $filterByOrderStatus
|
|
);
|
|
// holt immer einen Eintrag ab
|
|
|
|
$resultOrders = $this->getOrdersByParam($params);
|
|
|
|
|
|
$needToCheckMoreOrders = empty($__tmp['nummer']);
|
|
if(empty($resultOrders['data'][0]['id']) && empty($__tmp['nummer'])) {
|
|
$needToCheckMoreOrders = false;
|
|
//if first Order is deleted search for all open Orders
|
|
$countOrders = $this->ImportGetAuftraegeAnzahl();
|
|
if($countOrders > 1) {
|
|
$params['limit'] = $countOrders;
|
|
$resultOrders = $this->getOrdersByParam($params);
|
|
}
|
|
}
|
|
|
|
if(!is_array($resultOrders) || !($resultOrders['success'] == 1) || empty($resultOrders['data']))
|
|
{
|
|
return '';
|
|
}
|
|
|
|
$resultOrder = reset($resultOrders['data']);
|
|
$warenkorb['auftrag'] = $resultOrder['id'];
|
|
$warenkorb['subshop'] = $resultOrder['shopId'];
|
|
$resultOrders = $this->removeOrderFromOrderList($warenkorb['auftrag'], $resultOrders);
|
|
|
|
if(empty($warenkorb['auftrag'])) {
|
|
return '';
|
|
}
|
|
|
|
if($needToCheckMoreOrders) {
|
|
$countOrders = $this->ImportGetAuftraegeAnzahl();
|
|
if($countOrders >= 1) {
|
|
$params['limit'] = $countOrders;
|
|
$resultOrders = $this->getOrdersByParam($params);
|
|
}else{
|
|
return '';
|
|
}
|
|
}
|
|
|
|
while(true) {
|
|
$result = $this->getOrderById($warenkorb['auftrag']);
|
|
if(is_array($result)) {
|
|
break;
|
|
}
|
|
|
|
if(!is_array($result) && !empty($resultOrders['data'])) {
|
|
//check next Order
|
|
$resultOrder = reset($resultOrders['data']);
|
|
$warenkorb['auftrag'] = $resultOrder['id'];
|
|
$warenkorb['subshop'] = $resultOrder['shopId'];
|
|
$resultOrders = $this->removeOrderFromOrderList($warenkorb['auftrag'], $resultOrders);
|
|
continue;
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
if(empty($result['data']['number'])){
|
|
return '';
|
|
}
|
|
|
|
unset($resultOrders);
|
|
$warenkorb['order'] = $result['data'];
|
|
if($benutzergruppenuebernehmen){
|
|
$kundeninfos = $this->adapter->get('customers/'. $result['data']['customerId']);
|
|
$allegruppen = $this->adapter->get('customerGroups/');
|
|
$cgruppen = count($allegruppen['data']);
|
|
for ($i=0; $i < $cgruppen; $i++) {
|
|
if($allegruppen['data'][$i]['key'] == $kundeninfos['data']['groupKey']){
|
|
$warenkorb['benutzergruppe'] = $allegruppen['data'][$i]['name'];
|
|
$warenkorb['benutzergruppekuerzel'] = $kundeninfos['data']['groupKey'];
|
|
$warenkorb['kundengruppe'] = $kundeninfos['data']['groupKey'];
|
|
}
|
|
}
|
|
if($benutzergruppenanlegen){
|
|
$warenkorb['benutzergruppeanlegen'] = true;
|
|
}
|
|
}
|
|
//$warenkorb['result'] = $result;
|
|
$warenkorb['gesamtsumme'] = $result['data']['invoiceAmount'];
|
|
|
|
if(!empty($result['data']['currency']) &&
|
|
($currencyUpper = strtoupper($result['data']['currency'])) !== 'EUR') {
|
|
$warenkorb['waehrung'] = $currencyUpper;
|
|
}
|
|
|
|
$warenkorb['transaktionsnummer'] = $result['data']['transactionId'];
|
|
$warenkorb['onlinebestellnummer'] = $result['data']['number'];
|
|
if(empty($result['data']['invoiceShippingTaxRate'])){
|
|
$warenkorb['versandkostennetto'] = $result['data']['invoiceShippingNet'];
|
|
}else{
|
|
$warenkorb['versandkostenbrutto'] = (float)$result['data']['invoiceShipping'];
|
|
}
|
|
if($useorderid !== null)
|
|
{
|
|
$warenkorb['useorderid'] = $useorderid;
|
|
}
|
|
|
|
$warenkorb['freitext'] = $result['data']['customerComment'];
|
|
|
|
if($result['data']['billing']['company']==''){
|
|
$warenkorb['name'] = $result['data']['billing']['firstName'] . ' ' . $result['data']['billing']['lastName'];
|
|
}
|
|
else {
|
|
$warenkorb['name'] = $result['data']['billing']['company'];
|
|
$warenkorb['ansprechpartner'] = $result['data']['billing']['firstName'].' '.$result['data']['billing']['lastName'];
|
|
}
|
|
|
|
if($result['data']['billing']['salutation']=='mr'){
|
|
$warenkorb['anrede'] = 'herr';
|
|
}
|
|
|
|
if($result['data']['billing']['salutation']=='mrs'){
|
|
$warenkorb['anrede'] = 'frau';
|
|
}
|
|
|
|
if($result['data']['billing']['salutation']=='ms'){
|
|
$warenkorb['anrede'] = 'frau';
|
|
}
|
|
|
|
if($result['data']['billing']['company']!=''){
|
|
$warenkorb['anrede'] = 'firma';
|
|
}
|
|
|
|
$warenkorb['strasse'] = $result['data']['billing']['street'];
|
|
$warenkorb['plz'] = $result['data']['billing']['zipCode'];
|
|
$warenkorb['ort'] = $result['data']['billing']['city'];
|
|
$warenkorb['land'] = $result['data']['billing']['country']['iso'];
|
|
$warenkorb['email'] = $result['data']['customer']['email'];
|
|
$geburtstag = $result['data']['customer']['birthday'];
|
|
$warenkorb['geburtstag'] = substr($geburtstag,0,10);
|
|
|
|
if(!$warenkorb['subshop'])$warenkorb['subshop'] = $result['data']['customer']['shopId'];
|
|
$warenkorb['affiliate_ref'] = $result['data']['customer']['affiliate'];
|
|
$warenkorb['abteilung'] = $result['data']['billing']['department'];
|
|
$warenkorb['steuerfrei'] = $result['data']['taxFree'];
|
|
|
|
$warenkorb['adresszusatz'] = $result['data']['billing']['additionalAddressLine1'];
|
|
$warenkorb['unterabteilung'] = $result['data']['billing']['additionalAddressLine2'];
|
|
|
|
//10 = Komplett in Rechnung gestellt
|
|
//12 = Komplett bezahlt
|
|
//18 = Reserviert ????
|
|
//31 = Der Kredit wurde vorlaeufig akzeptiert.
|
|
//32 = Der Kredit wurde genehmigt.
|
|
//33 = Die Zahlung wurde von der Hanseatic Bank angewiesen.
|
|
if($result['data']['paymentStatus']['id']==12)
|
|
{
|
|
$warenkorb['vorabbezahltmarkieren']=1;
|
|
} else {
|
|
$warenkorb['vorabbezahltmarkieren']=0;
|
|
if($getunpaidorders){
|
|
$warenkorb['auftragsstatus']='unbezahlt';
|
|
}
|
|
}
|
|
|
|
$warenkorb['zahlungsweise'] = $result['data']['payment']['name'];
|
|
$warenkorb['lieferung'] = $result['data']['dispatch']['name'];
|
|
$warenkorb['bestelldatum'] = substr($result['data']['orderTime'],0,10);
|
|
|
|
$warenkorb['ustid'] = $result['data']['billing']['vatId'];
|
|
$warenkorb['telefon'] = $result['data']['billing']['phone'];
|
|
if(isset($result['data']['billing']['fax']))$warenkorb['telefax'] = $result['data']['billing']['fax'];
|
|
$warenkorb['bundesstaat'] = isset($result['data']['billing']['state']) && isset($result['data']['billing']['state']['shortCode'])
|
|
?(String)$result['data']['billing']['state']['shortCode']:'';
|
|
|
|
if($result['data']['shipping']['company']=="")
|
|
$warenkorb2['lieferadresse_name'] = $result['data']['shipping']['firstName'].' '.$result['data']['shipping']['lastName'];
|
|
else {
|
|
$warenkorb2['lieferadresse_name'] = $result['data']['shipping']['company'];
|
|
$warenkorb2['lieferadresse_ansprechpartner'] = $result['data']['shipping']['firstName'].' '.$result['data']['shipping']['lastName'];
|
|
}
|
|
|
|
$warenkorb2['lieferadresse_strasse'] = $result['data']['shipping']['street'];
|
|
$warenkorb2['lieferadresse_plz'] = $result['data']['shipping']['zipCode'];
|
|
$warenkorb2['lieferadresse_ort'] = $result['data']['shipping']['city'];
|
|
$warenkorb2['lieferadresse_land'] = $result['data']['shipping']['country']['iso'];
|
|
$warenkorb2['lieferadresse_abteilung'] = $result['data']['shipping']['department'];
|
|
|
|
$warenkorb2['lieferadresse_unterabteilung'] = $result['data']['shipping']['additionalAddressLine1'];
|
|
$warenkorb2['lieferadresse_adresszusatz'] = $result['data']['shipping']['additionalAddressLine2'];
|
|
$warenkorb2['lieferadresse_bundesstaat'] = isset($result['data']['shipping']['state']) && isset($result['data']['shipping']['state']['shortCode'])
|
|
?(String)$result['data']['shipping']['state']['shortCode']:'';
|
|
if($warenkorb2['lieferadresse_name']!=$warenkorb['name'] ||
|
|
(isset($warenkorb2['lieferadresse_ansprechpartner']) && $warenkorb2['lieferadresse_ansprechpartner']!=$warenkorb['ansprechpartner']) ||
|
|
$warenkorb2['lieferadresse_strasse']!=$warenkorb['strasse'] ||
|
|
$warenkorb2['lieferadresse_plz']!=$warenkorb['plz'] ||
|
|
$warenkorb2['lieferadresse_ort']!=$warenkorb['ort'] ||
|
|
$warenkorb2['lieferadresse_land']!=$warenkorb['land'] ||
|
|
$warenkorb2['lieferadresse_bundesland']!=$warenkorb['bundesstaat'] ||
|
|
$warenkorb2['lieferadresse_abteilung']!=$warenkorb['abteilung'])
|
|
{
|
|
$warenkorb['abweichendelieferadresse']="1";
|
|
$warenkorb['lieferadresse_name'] = $warenkorb2['lieferadresse_name'] ;
|
|
if(isset($warenkorb2['lieferadresse_ansprechpartner']))
|
|
{
|
|
$warenkorb['lieferadresse_ansprechpartner'] = $warenkorb2['lieferadresse_ansprechpartner'];
|
|
}
|
|
$warenkorb['lieferadresse_strasse'] = $warenkorb2['lieferadresse_strasse'];
|
|
$warenkorb['lieferadresse_plz'] = $warenkorb2['lieferadresse_plz'];
|
|
$warenkorb['lieferadresse_ort'] = $warenkorb2['lieferadresse_ort'];
|
|
$warenkorb['lieferadresse_land'] = $warenkorb2['lieferadresse_land'];
|
|
$warenkorb['lieferadresse_abteilung'] = $warenkorb2['lieferadresse_abteilung'];
|
|
$warenkorb['lieferadresse_unterabteilung'] = $warenkorb2['lieferadresse_unterabteilung'];
|
|
$warenkorb['lieferadresse_adresszusatz'] = $warenkorb2['lieferadresse_adresszusatz'];
|
|
$warenkorb['lieferadresse_bundesstaat'] = $warenkorb2['lieferadresse_bundesstaat'];
|
|
}
|
|
|
|
//articlelist
|
|
//articleid
|
|
//quantity
|
|
$portosteuer = '';
|
|
$cdetails = !empty($result['data']['details'])?count($result['data']['details']):0;
|
|
$taxRates = array();
|
|
$rates = null;
|
|
for($i=0; $i < $cdetails; $i++)
|
|
{
|
|
//Vielleicht besser über taxId?
|
|
if($result['data']['details'][$i]['taxRate'] == 0){
|
|
$steuerart = 'befreit';
|
|
if($portosteuer === ''){
|
|
$portosteuer = 'befreit';
|
|
}
|
|
}elseif($result['data']['details'][$i]['taxRate'] < 10){
|
|
$steuerart = 'ermaessigt';
|
|
if($portosteuer !== 'normal'){
|
|
$portosteuer = 'ermaessigt';
|
|
}
|
|
}else{
|
|
$steuerart = 'normal';
|
|
$portosteuer = 'normal';
|
|
}
|
|
if((float)$result['data']['details'][$i]['taxRate'] > 0){
|
|
if(!in_array($result['data']['details'][$i]['taxRate'],$taxRates) && is_numeric($result['data']['details'][$i]['taxRate']))
|
|
{
|
|
$taxRates[] = (float)$result['data']['details'][$i]['taxRate'];
|
|
}
|
|
}
|
|
$articlearray[] = array('articleid'=>$result['data']['details'][$i]['articleNumber'],
|
|
'name'=>$result['data']['details'][$i]['articleName'],
|
|
'price'=>$result['data']['details'][$i]['price'],
|
|
'quantity'=>$result['data']['details'][$i]['quantity'],
|
|
'umsatzsteuer' => $steuerart
|
|
);
|
|
//$result['data']['details'][$i]['mode'] <- kann der Wert mit Gewissheit für Gutscheine verwendet werden? Wäre mitunter besser als stur vom Preis auszugehen
|
|
|
|
$rates[(!empty($articlearray)?count($articlearray):0)-1] = $result['data']['details'][$i]['taxRate'];
|
|
if(!$gutscheinalslagerartikel && $result['data']['details'][$i]['price'] < 0)
|
|
{
|
|
$articlearray[(!empty($articlearray)?count($articlearray):0)-1]['lagerartikel'] = 0;
|
|
}
|
|
}
|
|
//$warenkorb['taxRates'] = $taxRates;
|
|
if((!empty($taxRates)?count($taxRates):0) > 1)
|
|
{
|
|
rsort($taxRates);
|
|
$warenkorb['steuersatz_normal'] = $taxRates[0];
|
|
$warenkorb['steuersatz_ermaessigt'] = $taxRates[(!empty($taxRates)?count($taxRates):0) - 1];
|
|
if($warenkorb['versandkostenbrutto'] > 0 && (float)$result['data']['invoiceShippingNet'] > 0)
|
|
{
|
|
$satz = round(100*(($warenkorb['versandkostenbrutto']/(float)$result['data']['invoiceShippingNet']) - 1));
|
|
if($satz == round($warenkorb['steuersatz_normal']))
|
|
{
|
|
$portosteuer = 'normal';
|
|
}elseif($satz == round($warenkorb['steuersatz_ermaessigt']))
|
|
{
|
|
$portosteuer = 'ermaessigt';
|
|
}
|
|
}
|
|
foreach($rates as $k => $v)
|
|
{
|
|
if($v > 0 && ($v == $warenkorb['steuersatz_ermaessigt']))
|
|
{
|
|
$articlearray[$k]['umsatzsteuer'] = 'ermaessigt';
|
|
}
|
|
}
|
|
}elseif((!empty($taxRates)?count($taxRates):0) > 0)
|
|
{
|
|
$steuersatz_normal = (float)$this->app->erp->Firmendaten('steuersatz_normal');
|
|
$steuersatz_ermaessigt = (float)$this->app->erp->Firmendaten('steuersatz_ermaessigt');
|
|
$_steuersatz_normal = $steuersatz_normal;
|
|
$_steuersatz_ermaessigt = $steuersatz_ermaessigt;
|
|
$this->app->erp->RunHook('shopimport_getorder_taxes', 3,$warenkorb, $_steuersatz_normal, $_steuersatz_ermaessigt);
|
|
if(is_numeric($_steuersatz_ermaessigt) && $_steuersatz_ermaessigt > 0)
|
|
{
|
|
$steuersatz_ermaessigt = $_steuersatz_ermaessigt;
|
|
}
|
|
if(is_numeric($_steuersatz_normal) && $_steuersatz_normal > 0)
|
|
{
|
|
$steuersatz_normal = $_steuersatz_normal;
|
|
}
|
|
$portosteuerchanged = false;
|
|
if($taxRates[0] == $steuersatz_normal)
|
|
{
|
|
$warenkorb['steuersatz_normal'] = $steuersatz_normal;
|
|
if($warenkorb['versandkostenbrutto'] > 0 && (float)$result['data']['invoiceShippingNet'] > 0)
|
|
{
|
|
$satz = round(100*($warenkorb['versandkostenbrutto']/(float)$result['data']['invoiceShippingNet'] -1));
|
|
if($satz == round($warenkorb['steuersatz_normal']))
|
|
{
|
|
$portosteuer = 'normal';
|
|
$portosteuerchanged = true;
|
|
}
|
|
}
|
|
}elseif($taxRates[0] == $steuersatz_ermaessigt)
|
|
{
|
|
$warenkorb['steuersatz_ermaessigt'] = $steuersatz_ermaessigt;
|
|
if($warenkorb['versandkostenbrutto'] > 0 && (float)$result['data']['invoiceShippingNet'] > 0)
|
|
{
|
|
$satz = round(100*(($warenkorb['versandkostenbrutto']/(float)$result['data']['invoiceShippingNet']) - 1));
|
|
if($satz == round($warenkorb['steuersatz_ermaessigt']))
|
|
{
|
|
$portosteuer = 'ermaessigt';
|
|
$portosteuerchanged = true;
|
|
}
|
|
}
|
|
}
|
|
elseif($taxRates[0] > 10)
|
|
{
|
|
$warenkorb['steuersatz_normal'] = $taxRates[0];
|
|
}elseif($taxRates[0] > 0){
|
|
$warenkorb['steuersatz_ermaessigt'] = $taxRates[0];
|
|
}
|
|
if(isset($warenkorb['versandkostenbrutto']) && !$portosteuerchanged && (float)$result['data']['invoiceShippingNet'] > 0)
|
|
{
|
|
//auf ,5 genau runden
|
|
$steuersatz = round(round(2*100*(($warenkorb['versandkostenbrutto']/(float)$result['data']['invoiceShippingNet'])-1))/2,1);
|
|
if(is_numeric($steuersatz) && $steuersatz > 0){
|
|
if(!empty($warenkorb['steuersatz_normal']) && empty($warenkorb['steuersatz_ermaessigt'])){
|
|
if($steuersatz < $warenkorb['steuersatz_normal']){
|
|
$portosteuer = 'ermaessigt';
|
|
$warenkorb['steuersatz_ermaessigt'] = $steuersatz;
|
|
}elseif($steuersatz == $warenkorb['steuersatz_normal']){
|
|
$portosteuer = 'normal';
|
|
}else{
|
|
$warenkorb['steuersatz_ermaessigt'] = $warenkorb['steuersatz_normal'];
|
|
$warenkorb['steuersatz_normal'] = $steuersatz;
|
|
$portosteuer = 'normal';
|
|
}
|
|
}elseif(!empty($warenkorb['steuersatz_ermaessigt']) && empty($warenkorb['steuersatz_normal'])){
|
|
if($steuersatz < $warenkorb['steuersatz_ermaessigt']){
|
|
$portosteuer = 'ermaessigt';
|
|
$warenkorb['steuersatz_normal'] = $warenkorb['steuersatz_ermaessigt'];
|
|
$warenkorb['steuersatz_ermaessigt'] = $steuersatz;
|
|
}elseif($steuersatz == $warenkorb['steuersatz_ermaessigt']){
|
|
$portosteuer = 'ermaessigt';
|
|
}else{
|
|
$warenkorb['steuersatz_normal'] = $steuersatz;
|
|
$portosteuer = 'normal';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!empty($portosteuer)){
|
|
$warenkorb['portosteuersatz'] = $portosteuer;
|
|
}
|
|
|
|
foreach($articlearray as $k => $v)
|
|
{
|
|
if(!empty($warenkorb['steuersatz_ermaessigt']) && !empty($rates[$k]) && $warenkorb['steuersatz_ermaessigt'] == $rates[$k])
|
|
{
|
|
$articlearray[$k]['umsatzsteuer'] = 'ermaessigt';
|
|
}elseif(!empty($warenkorb['steuersatz_normal']) && !empty($rates[$k]) && $warenkorb['steuersatz_normal'] == $rates[$k])
|
|
{
|
|
$articlearray[$k]['umsatzsteuer'] = 'normal';
|
|
}elseif(!empty($rates[$k]))
|
|
{
|
|
$articlearray[$k]['steuersatz'] = $rates[$k];
|
|
}
|
|
|
|
$articlearray[$k]['price'] = number_format($v['price'],2,'.','');
|
|
if((isset($result['data']['net']) && $result['data']['net'] == 1))
|
|
{
|
|
$articlearray[$k]['price_netto'] = number_format($v['price'],2,'.','');
|
|
}
|
|
}
|
|
|
|
if($this->useorderid){
|
|
$warenkorb['onlinebestellnummerueberschreiben'] = $warenkorb['auftrag'];
|
|
}
|
|
|
|
$warenkorb['articlelist']=$articlearray;
|
|
$warenkorb['result']=base64_encode(json_encode($result));
|
|
$warenkorb = $this->processCart($warenkorb,$result);
|
|
//$warenkorb['paymentStatus']=$result['data']['paymentStatus'];
|
|
$tmp[0]['id'] = $warenkorb['auftrag'];
|
|
$tmp[0]['sessionid'] = '';
|
|
$tmp[0]['logdatei'] = '';
|
|
$tmp[0]['warenkorb'] = base64_encode(serialize($warenkorb));
|
|
$tmp[0]['warenkorbjson'] = base64_encode(json_encode($warenkorb));
|
|
|
|
return $tmp;
|
|
}
|
|
|
|
/**
|
|
* Dummy function. Allows for manipulation of the shopping cart without impeding the updateabilty
|
|
*
|
|
* @param $cart
|
|
* @param $order
|
|
*
|
|
* @return mixed
|
|
*/
|
|
protected function processCart($cart,$order){
|
|
return $cart;
|
|
}
|
|
|
|
//TODO fuer Artikelexport
|
|
// get checksum list from onlineshop
|
|
public function ImportGetList()
|
|
{
|
|
$tmp = $this->app->DB->SelectArr("SELECT artikel,checksum FROM artikel");
|
|
return $tmp;
|
|
}
|
|
|
|
|
|
// get checksum list from the files
|
|
public function ImportGetFileList()
|
|
{
|
|
$tmp = $this->app->DB->SelectArr("SELECT datei, checksum FROM datei");
|
|
return $tmp;
|
|
}
|
|
|
|
// get checksum list from the files
|
|
public function ImportGetFileListArticle()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
$artikel = $tmp['artikel'];
|
|
|
|
$tmp = $this->app->DB->SelectArr("SELECT d.datei, d.checksum FROM datei d, datei_stichwoerter ds WHERE articleID=$artikel");
|
|
//$tmp = $this->app->DB->SelectArr("SELECT d.datei, d.checksum FROM datei d, datei_stichwoerter ds WHERE d.datei=ds.datei AND ds.artikel=$artikel");
|
|
return $tmp;
|
|
}
|
|
|
|
public function ImportAuth()
|
|
{
|
|
$tmp = $this->CatchRemoteCommand('data');
|
|
if($tmp)
|
|
{
|
|
$params = array(
|
|
'limit' => 1
|
|
);
|
|
$result = $this->adapter->get('orders',$params);
|
|
if($result['success'] == 1){
|
|
$result['version'] = '1.1';
|
|
$result['erlaubtefunktionen']['auftragnummer'] = 1;
|
|
$result['erlaubtefunktionen']['auftragabnummer'] = 0;
|
|
$result['erlaubtefunktionen']['subshops'] = 1;
|
|
$result['erlaubtefunktionen']['eigenschaften'] = 1;
|
|
$result['erlaubtefunktionen']['freifelder'] = 1;
|
|
$result['erlaubtefunktionen']['varianten'] = 1;
|
|
$result['erlaubtefunktionen']['zeitbereich'] = 0;
|
|
$result['erlaubtefunktionen']['rabattartikel'] = 0;
|
|
$result['erlaubtefunktionen']['artikelbilder'] = 0;
|
|
$result['erlaubtefunktionen']['kategorien'] = 0;
|
|
|
|
|
|
if($tmp === 'info')
|
|
{
|
|
$result = null;
|
|
$erg = $this->adapter->get('shops');
|
|
if(!empty($erg['data']) && is_array($erg['data']))
|
|
{
|
|
foreach($erg['data'] as $store)
|
|
{
|
|
$result['subshops'][] = array('id'=>$store['id'],'name'=>$store['name'],'aktiv'=>$store['active']);
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
return "success";
|
|
}
|
|
if($result){
|
|
return "failed ".$result;
|
|
}
|
|
return "failed Keine Verbindung zur API. Falsche URL?";
|
|
}
|
|
return "success";
|
|
}
|
|
|
|
|
|
/**
|
|
* @param array $shopArr
|
|
* @param array $postData
|
|
*
|
|
* @return array
|
|
*/
|
|
public function updateShopexportArr($shopArr, $postData)
|
|
{
|
|
$shopArr['stornoabgleich'] = 1;
|
|
$shopArr['anzgleichzeitig'] = 1;
|
|
$shopArr['demomodus'] = 0;
|
|
|
|
return $shopArr;
|
|
}
|
|
|
|
/**
|
|
* @param array $postData
|
|
*
|
|
* @return array
|
|
*/
|
|
public function updatePostDataForAssistent($postData)
|
|
{
|
|
if(!empty($this->useDigestAuth)) {
|
|
$postData['useDigestAuth'] = $this->useDigestAuth;
|
|
}
|
|
|
|
return $postData;
|
|
}
|
|
|
|
/**
|
|
* @return JsonResponse|null
|
|
*/
|
|
public function AuthByAssistent()
|
|
{
|
|
$ImportShopwareApiUrl = $this->app->Secure->GetPOST('ImportShopwareApiUrl');
|
|
$ImportShopwareApiUser = $this->app->Secure->GetPOST('ImportShopwareApiUser');
|
|
$ImportShopwareKey = $this->app->Secure->GetPOST('ImportShopwareKey');
|
|
|
|
$step = (int)$this->app->Secure->GetPOST('step');
|
|
|
|
if($step <= 1) {
|
|
if(empty($ImportShopwareApiUrl)){
|
|
return new JsonResponse(['error' => 'Bitte die URL des Shops angeben.'], JsonResponse::HTTP_BAD_REQUEST);
|
|
}
|
|
if(empty($ImportShopwareApiUser)){
|
|
return new JsonResponse(['error' => 'Bitte den Benutzernamen angeben'], JsonResponse::HTTP_BAD_REQUEST);
|
|
}
|
|
if(empty($ImportShopwareKey)){
|
|
return new JsonResponse(['error' => 'Bitte das Passwort angeben'], JsonResponse::HTTP_BAD_REQUEST);
|
|
}
|
|
$useDigestAuth = false;
|
|
$adapter =
|
|
new Shopimporter_Shopware_Adapter(
|
|
$ImportShopwareApiUrl, $ImportShopwareApiUser, $ImportShopwareKey, false
|
|
);
|
|
$params = array(
|
|
'limit' => 1
|
|
);
|
|
$result = $adapter->get('orders',$params);
|
|
if(empty($result['success'])){
|
|
$adapter =
|
|
new Shopimporter_Shopware_Adapter(
|
|
$ImportShopwareApiUrl, $ImportShopwareApiUser, $ImportShopwareKey, true
|
|
);
|
|
$result = $adapter->get('orders',$params);
|
|
$useDigestAuth = true;
|
|
}
|
|
|
|
if(empty($result['success'])){
|
|
if($result){
|
|
return new JsonResponse(['error' => $result], JsonResponse::HTTP_BAD_REQUEST);
|
|
}
|
|
return new JsonResponse(
|
|
['error' => "Keine Verbindung zur API. Falsche URL?"
|
|
], JsonResponse::HTTP_BAD_REQUEST);
|
|
}
|
|
$this->useDigestAuth = $useDigestAuth;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* @return string
|
|
*/
|
|
public function getClickByClickHeadline()
|
|
{
|
|
return 'Bitte im Shopware Backend einen eigenen Benutzer für Xentral anlegen und diese
|
|
Zugangsdaten hier eintragen.';
|
|
}
|
|
|
|
|
|
/**
|
|
* @return array[]
|
|
*/
|
|
public function getCreateForm()
|
|
{
|
|
return [
|
|
[
|
|
'id' => 0,
|
|
'name' => 'urls',
|
|
'inputs' => [
|
|
[
|
|
'label' => 'URL des Shops',
|
|
'type' => 'text',
|
|
'name' => 'ImportShopwareApiUrl',
|
|
'validation' => true,
|
|
],
|
|
],
|
|
],
|
|
[
|
|
'id' => 1,
|
|
'name' => 'username',
|
|
'inputs' => [
|
|
[
|
|
'label' => 'Benutzername aus Shopware',
|
|
'type' => 'text',
|
|
'name' => 'ImportShopwareApiUser',
|
|
'validation' => true,
|
|
],
|
|
],
|
|
],
|
|
[
|
|
'id' => 2,
|
|
'name' => 'password',
|
|
'inputs' => [
|
|
[
|
|
'label' => 'Passwort aus Shopware',
|
|
'type' => 'password',
|
|
'name' => 'ImportShopwareKey',
|
|
'validation' => true,
|
|
],
|
|
],
|
|
],
|
|
];
|
|
}
|
|
|
|
}
|
|
|