app = $app; if ($intern) { return; } $this->app->ActionHandlerInit($this); $this->app->ActionHandler("login", "ShopimportLogin"); $this->app->ActionHandler("main", "ShopimportMain"); $this->app->ActionHandler("list", "ShopimportList"); $this->app->ActionHandler("alle", "ShopimportAlle"); $this->app->ActionHandler("import", "ShopimportImport"); $this->app->ActionHandler("view", "ShopimportView"); $this->app->ActionHandler("einzelimport", "ShopimportEinzelimport"); $this->app->ActionHandler("navigation", "ShopimportNavigation"); $this->app->ActionHandler("logout", "ShopimportLogout"); $this->app->ActionHandler("archiv", "ShopimportArchiv"); $this->app->DefaultActionHandler("list"); $this->app->Tpl->Set('UEBERSCHRIFT', 'Shop Import'); $this->app->ActionHandlerListen($app); } /** * @param int $shopId * @param array $data * * @return int * * @throws Exception */ public function Refund($shopId, $data) { if (empty($shopId)) { throw new Exception('no Shop given'); } if (empty($data)) { throw new Exception('no Data given'); } $shop = $this->app->DB->SelectRow( sprintf( 'SELECT `aktiv`, `id`, `artikelrabatt` FROM `shopexport` WHERE `id` = %d', $shopId ) ); if (empty($shop)) { throw new Exception('Shop not found'); } if (empty($shop['aktiv'])) { throw new Exception('Shop is not active'); } if (!empty($data->extid)) { $order = $this->app->DB->SelectRow( sprintf( "SELECT * FROM `auftrag` WHERE `shop` = %d AND `shopextid` = '%s' AND `shopextid` <> '' AND `status` <> 'storniert' LIMIT 1", $shopId, $this->app->DB->real_escape_string((string) $data->extid) ) ); } elseif (!empty($data->internet)) { $order = $this->app->DB->SelectRow( sprintf( "SELECT * FROM `auftrag` WHERE `shop` = %d AND `internet` = '%s' AND `internet` <> '' AND `status` <> 'storniert' LIMIT 1", $shopId, $this->app->DB->real_escape_string((string) $data->extid) ) ); } else { throw new Exception('No order given'); } if (empty($order)) { throw new Exception('order not found'); } $invoice = $this->app->DB->SelectRow( sprintf( "SELECT * FROM `rechnung` WHERE `auftragid` = %d ORDER BY `status` = 'storniert' LIMIT 1", $order['id'] ) ); if (empty($invoice)) { if (empty($data->createinvoice)) { throw new Exception('order has no invoice'); } $invoiceId = $this->app->erp->WeiterfuehrenAuftragZuRechnung($order['id']); $this->app->erp->AuftragProtokoll($order['id'], 'Rechnung erstellt durch Shop-Trigger'); $this->app->erp->RechnungProtokoll($invoiceId, 'Rechnung erstellt durch Shop-Trigger'); $this->app->erp->BelegFreigabe('rechnung', $invoiceId); $this->app->erp->RechnungNeuberechnen($invoiceId); $invoice = $this->app->DB->SelectRow( sprintf( "SELECT * FROM `rechnung` WHERE `auftragid` = %d ORDER BY `status` = 'storniert' LIMIT 1", $order['id'] ) ); } if ($invoice['status'] === 'storniert') { throw new Exception('order invoice is already cancelled'); } if (!empty($data->positions)) { $positions = $this->app->DB->SelectArr( sprintf( "SELECT `op`.webid, ip.artikel, ip.menge,ip.preis, ip.rabatt, ip.auftrag_position_id FROM `rechnung_position` AS `ip` INNER JOIN `auftrag_position` AS `op` ON ip.auftrag_position_id = op.id WHERE `ip`.rechnung = %d", $invoice['id'] ) ); if (empty($positions)) { throw new Exception('invoice has no positions'); } $webIds = []; $foundWebIds = []; foreach ($positions as $position) { if (!empty($position['webid'])) { $webIds[] = $position['webid']; } } $webIdToPosition = []; foreach ($data->positions as $position) { if (!empty($position->webid)) { if (!in_array((string) $position->webid, $webIds)) { throw new Exception(sprintf('position %s not found', (string) $position->webid)); } $foundWebIds[] = (string) $position->webid; $webIdToPosition[$position->webid] = $position; } else { throw new Exception('no webId given'); } } if (empty($foundWebIds)) { throw new Exception('positions empty'); } $toDeleteInvoicePositionIds = [0]; foreach ($positions as $position) { if (empty($position['webid']) || !in_array($position['webid'], $foundWebIds)) { $toDeleteInvoicePositionIds[] = (int) $position['auftrag_position_id']; } } $creditNoteId = $this->app->erp->WeiterfuehrenRechnungZuGutschrift($invoice['id']); $this->app->erp->RechnungProtokoll($invoice['id'], 'Rechnung durch Shop-Trigger storniert'); $this->app->erp->GutschriftProtokoll($creditNoteId, 'Gutschrift durch Shop-Trigger angelegt'); $this->app->erp->BelegFreigabe('gutschrift', $creditNoteId); $this->app->DB->Delete( sprintf( "DELETE FROM `gutschrift_position` WHERE `gutschrift` = %d AND `auftrag_position_id` IN (%s)", $creditNoteId, implode(',', $toDeleteInvoicePositionIds) ) ); $hasCreditNoteTax = !empty($this->app->erp->GutschriftMitUmsatzeuer($creditNoteId)); $this->app->erp->GutschriftNeuberechnen($creditNoteId); $creditNote = $this->app->DB->SelectRow( sprintf( 'SELECT * FROM `gutschrift` WHERE `id` = %d', $creditNoteId ) ); $creditNotePositions = $this->app->DB->SelectArr( sprintf( "SELECT op.webid, cnp.id, cnp.menge, cnp.preis, cnp.rabatt, cnp.umsatzsteuer, cnp.steuersatz FROM `gutschrift_position` AS `cnp` INNER JOIN `auftrag_position` AS `op` ON cnp.auftrag_position_id = op.id WHERE cnp.gutschrift = %d", $creditNoteId ) ); foreach ($creditNotePositions as $creditNotePosition) { if (isset($webIdToPosition[$creditNotePosition['webid']])) { $position = $webIdToPosition[$creditNotePosition['webid']]; if (!empty($position->quantity)) { $this->app->DB->Update( sprintf( "UPDATE `gutschrift_position` SET `menge` = %f WHERE `id` = %d", (float) $position->quantity, $creditNotePosition['id'] ) ); } elseif (!empty($position->menge)) { $this->app->DB->Update( sprintf( "UPDATE `gutschrift_position` SET `menge` = %f WHERE `id` = %d", (float) $position->menge, $creditNotePosition['id'] ) ); } $preis = null; if (isset($position->price)) { $preis = (float) $position->price; } elseif (isset($position->preis)) { $preis = (float) $position->preis; } elseif (isset($position->amount)) { $preis = (float) $position->amount; } if ($preis !== null) { if ($hasCreditNoteTax) { if ($creditNotePosition['steuersatz'] !== null && $creditNotePosition['steuersatz'] >= 0) { $preis /= 1 + $creditNotePosition['steuersatz'] / 100; } elseif ($creditNotePosition['umsatzsteuer'] === 'ermaessigt') { $preis /= 1 + $creditNote['steuersatz_ermaessigt'] / 100; } elseif ($creditNotePosition['umsatzsteuer'] !== 'befreit') { $preis /= 1 + $creditNote['steuersatz_normal'] / 100; } } $this->app->DB->Update( sprintf( 'UPDATE `gutschrift_position` SET `preis` = %f, `rabatt` = 0 WHERE `id` = %d', $preis, $creditNotePosition['id'] ) ); } } } $this->app->erp->GutschriftNeuberechnen($creditNoteId); if (!empty($data->amount)) { $soll = $this->app->DB->Select(sprintf('SELECT `soll` FROM `gutschrift` WHERE `id` = %d', $creditNoteId)); $diff = round($soll, 2) - round((float) $data->amount, 2); if ($diff == 0) { return $creditNoteId; } $this->app->erp->AddPositionManuellPreis( 'gutschrift', $creditNoteId, $shop['artikelrabatt'], 1, 'Differenz', -$diff, 'befreit', $invoice['waehrung'] ); } return (int) $creditNoteId; } $creditNoteId = $this->app->erp->WeiterfuehrenRechnungZuGutschrift($invoice['id']); $this->app->erp->RechnungProtokoll($invoice['id'], 'Rechnung durch Shop-Trigger storniert'); $this->app->erp->GutschriftProtokoll($creditNoteId, 'Gutschrift durch Shop-Trigger angelegt'); $this->app->erp->BelegFreigabe('gutschrift', $creditNoteId); $this->app->erp->GutschriftNeuberechnen($creditNoteId); if (!empty($data->amount)) { $soll = $this->app->DB->Select(sprintf('SELECT `soll` FROM `gutschrift` WHERE `id` = %d', $creditNoteId)); $diff = round($soll, 2) - round((float) $data->amount, 2); if ($diff == 0) { return $creditNoteId; } $this->app->erp->AddPositionManuellPreis( 'gutschrift', $creditNoteId, $shop['artikelrabatt'], 1, 'Differenz', -$diff, 'befreit', $invoice['waehrung'] ); } return (int) $creditNoteId; } public function ShopimportList() { $msg = $this->app->Secure->GetGET('msg'); if (!empty($msg)) { $msg = $this->app->erp->base64_url_decode($msg); $this->app->Tpl->Set('MESSAGE', $msg); } $this->app->erp->MenuEintrag('index.php?module=importvorlage&action=uebersicht', 'Zurück zur Übersicht'); //$this->app->Tpl->Add(TABS,"
  • Shopimport

  • "); $this->app->erp->Headlines('Shopimport'); //$this->app->erp->MenuEintrag("index.php?module=shopimport&action=alle","Alle importieren"); $this->app->erp->MenuEintrag('index.php?module=shopimport&action=list', 'Übersicht'); if ($this->app->erp->RechteVorhanden('shopimport', 'alle')) { $this->app->Tpl->Add('INHALT', "


    "); } //$this->app->Tpl->Set('SUBHEADING',"Imports"); //Jeder der in Nachbesserung war egal ob auto oder manuell wandert anschliessend in Manuelle-Freigabe"); $runningcronjob = $this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport' AND aktiv=1 AND mutex = 1 AND UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(letzteausfuerhung) < 300 LIMIT 1"); if ($runningcronjob) { $this->app->Tpl->Set('TAB1', '
    Es läuft gerade ein Cronjob der Aufträge abholt. Die manuelle Auftragsabholung ist in dieser Zeit gesperrt. Bitte warten Sie ein paar Minuten und versuchen Sie es erneut.
    '); } else { $table = new EasyTable($this->app); $table->Query("SELECT ae.bezeichnung,p.abkuerzung as Projekt, ae.id FROM shopexport ae LEFT JOIN projekt p ON p.id=ae.projekt WHERE ae.aktiv='1'"); $table->DisplayNew('INHALT', "   "); $this->app->Tpl->Parse('TAB1', 'rahmen.tpl'); } $this->app->Tpl->Set('INHALT', ''); // Archiv GESTERN $table = new EasyTable($this->app); $table->Query("SELECT a.datum, a.internet, a.transaktionsnummer,a.name, a.land, a.gesamtsumme as betrag, (SELECT SUM(r.soll) FROM rechnung r WHERE r.adresse=a.adresse AND r.status='offen') as mahnwesen, a.zahlungsweise, a.partnerid as Partner, a.id FROM auftrag a WHERE (datum=DATE_FORMAT( DATE_SUB( NOW() , INTERVAL 1 DAY ) , '%Y-%m-%d' ) OR (datum=DATE_FORMAT( NOW(), '%Y-%m-%d' ))) AND a.internet>0 ORDER by a.id DESC"); $table->DisplayNew('INHALT', "app->Conf->WFconf['defaulttheme'] . "/images/edit.svg\"> app->Conf->WFconf['defaulttheme'] . "/images/pdf.svg\">"); $this->app->Tpl->Parse('TAB2', 'rahmen.tpl'); $this->app->Tpl->Set('INHALT', ''); $summe_heute = $this->app->DB->Select("SELECT SUM(a.gesamtsumme) FROM auftrag a WHERE a.datum=DATE_FORMAT( NOW(), '%Y-%m-%d' ) AND a.internet>0 "); $summe_gestern = $this->app->DB->Select("SELECT SUM(a.gesamtsumme) FROM auftrag a WHERE a.datum=DATE_FORMAT( DATE_SUB( NOW() , INTERVAL 1 DAY ) , '%Y-%m-%d' ) AND a.internet>0 "); $this->app->Tpl->Add('TAB2', "
    Heute: $summe_heute EUR (inkl. Steuer und Versand) Umsatz aus den Online-Shop
    "); $this->app->Tpl->Add('TAB2', "
    Gestern: $summe_gestern EUR (inkl. Steuer und Versand) Umsatz aus den Online-Shop
    "); $this->app->Tpl->Set('SUBHEADING', ''); $this->app->Tpl->Parse('PAGE', 'shopimport_list.tpl'); } public function ShopimportArchiv() { $id = $this->app->Secure->GetGET('id'); $more = $this->app->Secure->GetGET('more'); $datum = $this->app->Secure->GetGET('datum'); $this->app->Tpl->Set('TABTEXT', 'Shopimport - Archiv'); //$this->app->YUI->TableSearch('TAB1',"shopimportarchiv"); //$this->app->Tpl->Set('TAB1',"Shopimport - Archiv"); if ($datum == '') { $datum = date('Y-m-d'); } $result = $this->app->DB->SelectArr("SELECT * FROM shopimport_auftraege WHERE DATE_FORMAT(logdatei,'%Y-%m-%d') = '$datum'"); $table = ''; if (is_array($result)) { foreach ($result as $key => $row) { //$table = $row['imported']; if (isset($row['jsonencoded']) && $row['jsonencoded']) { $warenkorb = json_decode(base64_decode($row['warenkorb']), true); } else { $warenkorb = unserialize(base64_decode($row['warenkorb'])); } $this->app->stringcleaner->XMLArray_clean($warenkorb); $table .= ""; } } $table .= '
    " . $warenkorb["onlinebestellnummer"] . "/" . $warenkorb["transaktionsnummer"] . "" . $warenkorb["name"] . "" . $warenkorb["email"] . "" . $warenkorb["gesamtsumme"] . " mehr Informationen
    '; if ($more > 0) { $result = $this->app->DB->Select("SELECT warenkorb FROM shopimport_auftraege WHERE id='$more' LIMIT 1"); if ($this->app->DB->Select("SELECT id FROM shopimport_auftraege WHERE id='$more' AND jsonencoded = 1 LIMIT 1")) { $warenkorb = json_decode(base64_decode($result), true); } else { $warenkorb = unserialize(base64_decode($result)); } ob_start(); var_dump($warenkorb); $var_dump_result = ob_get_clean(); $table .= '
    ' . $var_dump_result . '
    '; } $this->app->Tpl->Set('TAB1', $table); $this->app->Tpl->Parse('PAGE', 'tabview.tpl'); } public function ShopimportAlle() { $runningcronjob = $this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport' AND aktiv=1 AND mutex = 1 AND UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(letzteausfuerhung) < 300 LIMIT 1"); if (!empty($runningcronjob)) { $this->app->Location->execute('index.php?module=shopimport&action=list'); } $lastshop = false; $shops = $this->app->DB->SelectArr("SELECT ae.id as id FROM shopexport ae LEFT JOIN projekt p ON p.id=ae.projekt WHERE ae.aktiv='1' and ae.demomodus <> '1'"); if (!empty($shops)) { $anz = 0; $fp = $this->app->erp->ProzessLock('shopimport_alle'); $cshops = (!empty($shops) ? count($shops) : 0); for ($i = 0; $i < $cshops - 1; $i++) { $anz += $this->ShopimportImport($shops[$i]['id'], $anz, true); } $lastshop = $shops[(!empty($shops) ? count($shops) : 0) - 1]['id']; $this->app->erp->ProzessUnlock($fp); } if ($lastshop && is_numeric($lastshop)) { $this->app->Location->execute('index.php?module=shopimport&action=import&id=' . $lastshop); } else { $this->app->Location->execute('index.php?module=shopimport&action=list'); } } /** * @param int $shopId * @param string $shopOrderNumber * @param bool $changeShopOrderStatus * @param int $projectId * @param bool $allStati * * @return array */ public function importSingleOrder($shopId, $shopOrderNumber, $changeShopOrderStatus, $projectId, $allStati = false) { $pageContents = $this->app->remote->RemoteConnection($shopId); if ($pageContents === 'success') { $orderCount = $this->app->remote->RemoteGetAuftraegeAnzahlNummer($shopId, $shopOrderNumber); if ($orderCount > 0) { if ($allStati) { $result = $this->app->remote->RemoteCommand($shopId, 'getauftrag', ['nummer' => $shopOrderNumber]); } else { $result = $this->app->remote->RemoteGetAuftragNummer($shopId, $shopOrderNumber); } if (is_array($result)) { $result = reset($result); $shopExtId = $result['id']; $sessionid = $result['sessionid']; $jsonEncoded = 0; if (empty(!$result['warenkorbjson'])) { $jsonEncoded = 1; $warenkorb = $result['warenkorbjson']; } else { $warenkorb = $result['warenkorb']; } $logdatei = $result['logdatei']; $username = !empty($this->app->User) ? $this->app->User->GetName() : 'Cronjob'; $this->app->DB->Insert( sprintf( "INSERT INTO shopimport_auftraege (extid,sessionid,warenkorb,imported,projekt,bearbeiter,logdatei, jsonencoded, shopid) VALUES('%s','%s','%s',0,%d, '%s','%s', %d, %d)", $this->app->DB->real_escape_string($shopExtId), $this->app->DB->real_escape_string($sessionid), $this->app->DB->real_escape_string($warenkorb), (int) $projectId, $this->app->DB->real_escape_string($username), $this->app->DB->real_escape_string($logdatei), $jsonEncoded, (int) $shopId ) ); $insid = $this->app->DB->GetInsertID(); if ($changeShopOrderStatus && (String) $shopExtId !== '') { $this->app->remote->RemoteDeleteAuftrag($shopId, $shopExtId); } return ['status' => 1, 'id' => $insid, 'info' => 'Auftrag wurde abgeholt.']; } } return ['status' => 0, 'error' => 'Auftrag wurde nicht gefunden!']; } return ['status' => 0, 'error' => 'Verbindung fehlgeschlagen!']; } public function ShopimportEinzelimport() { $runningcronjob = $this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport' AND aktiv=1 AND mutex = 1 AND UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(letzteausfuerhung) < 300 LIMIT 1"); if (!empty($runningcronjob)) { $this->app->Location->execute('index.php?module=shopimport&action=list'); } $id = (int) $this->app->Secure->GetGET('id'); $nummer = (String) $this->app->Secure->GetGET('nummer'); if ($nummer === '') { $nummer = (String) $this->app->Secure->GetPOST('nummer'); } $deleteauftrag = (int) $this->app->Secure->GetPOST('deleteauftrag'); if (!empty($id) && !empty($nummer)) { $shoparr = $this->app->DB->SelectRow("SELECT projekt,holealle FROM shopexport WHERE id = '$id' LIMIT 1"); $projekt = $shoparr['projekt']; //$this->app->DB->Select("SELECT projekt FROM shopexport WHERE id = '$id' LIMIT 1"); $holealle = $shoparr['holealle']; //$this->app->DB->Select("SELECT holealle FROM shopexport WHERE id = '$id' LIMIT 1"); if ($holealle) { $res = $this->importSingleOrder($id, $nummer, $deleteauftrag, $projekt); if ($res['status'] == 1) { $this->app->Tpl->Add('MESSAGE', '
    ' . $res['info'] . '
    '); } else { $this->app->Tpl->Add('MESSAGE', '
    ' . $res['error'] . '
    '); } } else { $this->app->Tpl->Add('MESSAGE', '
    Shop nicht auf alle Aufträge eingstellt!
    '); } } elseif ($id <= 0) { $msg = $this->app->erp->base64_url_encode('
    Kein Shop gewählt!
    '); $this->app->Location->execute('index.php?module=shopimport&action=list&msg=' . $msg); } else { $this->app->Tpl->Add('MESSAGE', '
    Keine Nummer angegeben!
    '); } $this->app->erp->MenuEintrag('index.php?module=shopimport&action=einzelimport&id=' . $id, 'Einzelimport'); $this->app->erp->MenuEintrag('index.php?module=shopimport&action=import', 'Shopauftrag-Liste'); $this->app->Tpl->Parse('PAGE', 'shopimport_einzelimport.tpl'); } public function KundeAnlegenUpdate($shopimportid, $shopextid, $warenkorb, $kundennummer = 0, $import_kundennummer, &$unbekanntezahlungsweisen) { if (empty($warenkorb)) { return 0; } if (!empty($this->app->stringcleaner)) { $this->app->stringcleaner->XMLArray_clean($warenkorb); } $i = 0; $success_import = 0; $shopid = $this->app->DB->Select("SELECT shopid FROM shopimport_auftraege WHERE id='$shopimportid' LIMIT 1"); $shopexportArr = $this->app->DB->SelectRow(sprintf('SELECT * FROM shopexport WHERE id=%d', $shopid)); $projekt = $shopexportArr['projekt']; //$this->app->DB->Select("SELECT projekt FROM shopexport WHERE id='$shopid'"); if (!empty($warenkorb['projekt']) && $this->app->DB->Select("SELECT id FROM projekt WHERE id = '" . (int) $warenkorb['projekt'] . "' LIMIT 1")) { $projekt = (int) $warenkorb['projekt']; } $adresseprojekt = ''; $kundenurvonprojekt = $shopexportArr['kundenurvonprojekt']; //$this->app->DB->Select("SELECT kundenurvonprojekt FROM shopexport WHERE id = '".$shopid."' LIMIT 1"); if ($kundenurvonprojekt) { $adresseprojekt = $projekt; } if (isset($warenkorb['subshop']) && $warenkorb['subshop']) { $subshopprojekt = $this->app->DB->SelectArr("SELECT * FROM shopexport_subshop WHERE shop = '" . $shopid . "' AND aktiv = 1 AND subshopkennung = '" . $this->app->DB->real_escape_string($warenkorb['subshop']) . "' LIMIT 1"); if ($subshopprojekt) { if ($subshopprojekt[0]['projekt']) { $adresseprojekt = $subshopprojekt[0]['projekt']; $projekt = $subshopprojekt[0]['projekt']; $arr[$i]['abkuerzung'] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$adresseprojekt' LIMIT 1"); } if ($subshopprojekt[0]['sprache']) { $defaultsprache = $this->app->DB->Select("SELECT sprache FROM shopexport_sprachen WHERE shop = '$shopid' AND (projekt = '$projekt' OR projekt = 0) AND land = '' ORDER BY projekt = '$projekt' DESC, land = '" . $warenkorb['land'] . "' DESC LIMIT 1"); $checksprache = $this->app->DB->Select("SELECT sprache FROM shopexport_sprachen WHERE shop = '$shopid' AND (projekt = '$projekt' OR projekt = 0) AND land = '" . (isset($warenkorb['land']) ? $warenkorb['land'] : $this->app->erp->Firmendaten('land')) . "' ORDER BY projekt = '$projekt' DESC, land = '" . $warenkorb['land'] . "' DESC LIMIT 1"); if ($checksprache != '') { if (empty($warenkorb['kunde_sprache'])) { $warenkorb['kunde_sprache'] = $checksprache; } } else { if (empty($warenkorb['kunde_sprache'])) { $warenkorb['kunde_sprache'] = $defaultsprache; } } if (empty($warenkorb['kunde_sprache'])) { $warenkorb['kunde_sprache'] = $subshopprojekt[0]['sprache']; } } } else { if (!$this->app->DB->Select("SELECT id FROM shopexport_subshop WHERE shop = '" . $shopid . "' AND subshopkennung = '" . $this->app->DB->real_escape_string($warenkorb['subshop']) . "' LIMIT 1")) { $this->app->DB->Insert("INSERT INTO shopexport_subshop (shop, subshopkennung, aktiv, projekt) VALUES ('" . $shopid . "','" . $this->app->DB->real_escape_string($warenkorb['subshop']) . "','0','$projekt')"); } } } $kundenurvonprojekt = $this->app->DB->Select("SELECT kundenurvonprojekt FROM shopexport WHERE id = '$shopid' LIMIT 1"); if ($kundenurvonprojekt) { $adresseprojekt = " AND projekt = '" . $adresseprojekt . "' "; } else { $adresseprojekt = ''; } if (empty($warenkorb['name'])) { $warenkorb['name'] = $warenkorb['ansprechpartner']; $warenkorb['ansprechpartner'] = ''; } if (empty($warenkorb['name']) && !empty($warenkorb['lieferadresse_name'])) { $warenkorb['name'] = $warenkorb['lieferadresse_name']; } if (empty($warenkorb['lieferadresse_name'])) { $warenkorb['lieferadresse_name'] = $warenkorb['lieferadresse_ansprechpartner']; $warenkorb['lieferadresse_ansprechpartner'] = ''; } $warenkorb['email'] = trim($warenkorb['email'], " \t\n\r\0\x0B\xc2\xa0"); if (empty($warenkorb['name'])) { return 0; } //$projekt = $arr[0][projekt]; if ($kundennummer == '1') { $warenkorb['kundennummer'] = $import_kundennummer; if (strlen($warenkorb['kundennummer']) != '') { $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='{$warenkorb['kundennummer']}' AND geloescht!=1 $adresseprojekt LIMIT 1"); } if ($adresse <= 0) { $adresse = $this->app->erp->KundeAnlegen($warenkorb['anrede'], $warenkorb['name'], $warenkorb['abteilung'], $warenkorb['unterabteilung'], $warenkorb['ansprechpartner'], $warenkorb['adresszusatz'], $warenkorb['strasse'], $warenkorb['land'], $warenkorb['plz'], $warenkorb['ort'], $warenkorb['email'], $warenkorb['telefon'], $warenkorb['telefax'], $warenkorb['ustid'], $warenkorb['affiliate_ref'], $projekt); $warenkorb['customer_created'] = true; if (isset($warenkorb['kunde_sprache'])) { if ($warenkorb['kunde_sprache'] == 'englisch' || $warenkorb['kunde_sprache'] == 'english') { $this->app->DB->Update("UPDATE adresse SET sprache = 'englisch' WHERE id = '$adresse' LIMIT 1"); } elseif ($warenkorb['kunde_sprache'] == 'deutsch' || $warenkorb['kunde_sprache'] == 'german') { $this->app->DB->Update("UPDATE adresse SET sprache = 'deutsch' WHERE id = '$adresse' LIMIT 1"); } elseif (method_exists($this->app->erp, 'GetSprachenSelect')) { $sprachen = $this->app->erp->GetSprachenSelect; if (isset($sprachen[strtolower($warenkorb['kunde_sprache'])])) { $this->app->DB->Update("UPDATE adresse SET sprache = '" . strtolower($warenkorb['kunde_sprache']) . "' WHERE id = '$adresse' LIMIT 1"); } } } if ($warenkorb['titel'] != '') { $this->app->DB->Update("UPDATE adresse SET titel = '" . $this->app->DB->real_escape_string($warenkorb['titel']) . "' WHERE id = '$adresse' LIMIT 1"); } if (isset($warenkorb['ust_befreit'])) { $this->app->DB->Update("UPDATE adresse SET ust_befreit = '" . (int) $warenkorb['ust_befreit'] . "' WHERE id = '$adresse' LIMIT 1"); } $kundenGruppen = $this->app->DB->SelectArr("SELECT gruppeid,type FROM shopexport_kundengruppen WHERE shopid=$shopid AND aktiv=1 AND apply_to_new_customers=1 AND type<>'Artikel' AND (projekt=0 OR projekt='$projekt')"); if (!empty($kundenGruppen)) { foreach ($kundenGruppen as $gruppe) { $this->app->erp->AddRolleZuAdresse($adresse, $gruppe['type'], 'von', 'Gruppe', $gruppe['gruppeid']); } } if (isset($warenkorb['kundengruppe'])) { $this->shopimportAdresseGruppenMapping($warenkorb['kundengruppe'], $adresse, $shopid, $projekt); } if ($shopexportArr['vertrieb']) { $this->app->DB->Update( sprintf( 'UPDATE adresse SET vertrieb = %d WHERE id = %d', $shopexportArr['vertrieb'], $adresse ) ); } $this->app->DB->Update( sprintf( 'UPDATE adresse SET fromshop = %d WHERE fromshop = 0 AND id = %d', $shopexportArr['id'], $adresse ) ); } else { if (!empty($warenkorb['anrede'])) { $typ = $warenkorb['anrede']; } else { $typ = $this->app->DB->Select("SELECT typ FROM adresse WHERE id = '$adresse' LIMIT 1"); } $name = $warenkorb['name']; if (!empty($warenkorb['abteilung'])) { $abteilung = $warenkorb['abteilung']; } else { $abteilung = $this->app->DB->Select("SELECT abteilung FROM adresse WHERE id = '$adresse' LIMIT 1"); } if (!empty($warenkorb['unterabteilung'])) { $unterabteilung = $warenkorb['unterabteilung']; } else { $unterabteilung = $this->app->DB->Select("SELECT unterabteilung FROM adresse WHERE id = '$adresse' LIMIT 1"); } $ansprechpartner = $warenkorb['ansprechpartner']; $adresszusatz = $warenkorb['adresszusatz']; $strasse = $warenkorb['strasse']; $land = $warenkorb['land']; $plz = $warenkorb['plz']; $ort = $warenkorb['ort']; if (!empty($warenkorb['email'])) { $email = $warenkorb['email']; } else { $email = $this->app->DB->Select("SELECT email FROM adresse WHERE id = '$adresse' LIMIT 1"); } if (!empty($warenkorb['telefon'])) { $telefon = $warenkorb['telefon']; } else { $telefon = $this->app->DB->Select("SELECT telefon FROM adresse WHERE id = '$adresse' LIMIT 1"); } if (!empty($warenkorb['telefax'])) { $telefax = $warenkorb['telefax']; } else { $telefax = $this->app->DB->Select("SELECT telefax FROM adresse WHERE id = '$adresse' LIMIT 1"); } if (!empty($warenkorb['ustid'])) { $ustid = $warenkorb['ustid']; } else { $ustid = $this->app->DB->Select("SELECT ustid FROM adresse WHERE id = '$adresse' LIMIT 1"); } if (!empty($warenkorb['affiliate_ref'])) { $partner = $warenkorb['affiliate_ref']; } else { $partner = $this->app->DB->Select("SELECT partner FROM adresse WHERE id = '$adresse' LIMIT 1"); } // Update + protokoll if (!$this->app->DB->Select("SELECT adressennichtueberschreiben FROM shopexport WHERE id = '$shopid' LIMIT 1")) { if ($warenkorb['mobil'] != '') { $this->app->DB->Update("UPDATE adresse SET mobil = '" . $this->app->DB->real_escape_string($warenkorb['mobil']) . "' WHERE id = '$adresse' LIMIT 1"); } if ($warenkorb['titel'] != '') { $this->app->DB->Update("UPDATE adresse SET titel = '" . $this->app->DB->real_escape_string($warenkorb['titel']) . "' WHERE id = '$adresse' LIMIT 1"); } if ($warenkorb['geburtstag'] != '') { $this->app->DB->Update("UPDATE adresse SET geburtstag = '" . $this->app->DB->real_escape_string($warenkorb['geburtstag']) . "' WHERE id = '$adresse' AND ISNULL(geburtstag) LIMIT 1"); } if (isset($warenkorb['ust_befreit'])) { $query = sprintf('UPDATE `adresse` SET `ust_befreit` = %d WHERE `id` = %d LIMIT 1', $warenkorb['ust_befreit'], $adresse); $this->app->DB->Update($query); } $this->app->erp->KundeUpdate($adresse, $typ, $name, $abteilung, $unterabteilung, $ansprechpartner, $adresszusatz, $strasse, $land, $plz, $ort, $email, $telefon, $telefax, $ustid, $partner, $projekt); if (!empty($warenkorb['bundesland'])) { $this->app->DB->Update("UPDATE adresse SET bundesland = '" . $this->app->DB->real_escape_string($warenkorb['bundesland']) . "' WHERE id = '$adresse' LIMIT 1"); } } } } else { //echo "import als Neu-Kunde $shopimportid
    "; $typ = $warenkorb['anrede']; $name = $warenkorb['name']; $abteilung = $warenkorb['abteilung']; $unterabteilung = $warenkorb['unterabteilung']; $ansprechpartner = $warenkorb['ansprechpartner']; $adresszusatz = $warenkorb['adresszusatz']; $strasse = $warenkorb['strasse']; $land = $warenkorb['land']; $plz = $warenkorb['plz']; $ort = $warenkorb['ort']; $email = $warenkorb['email']; $telefon = $warenkorb['telefon']; $telefax = $warenkorb['telefax']; $ustid = $warenkorb['ustid']; $partner = $warenkorb['affiliate_ref']; // denn fall das es kunde 1:1 schon gibt = alte Kundennummer verwenden kommt vor allem vor, wenn ein Kunde an einem Tag oefters bestellt hat // $adresse = $this->app->erp->KundeAnlegen($typ,$name,$abteilung, // $unterabteilung,$ansprechpartner,$adresszusatz,$strasse,$land,$plz,$ort,$email,$telefon,$telefax,$ustid,$partner,$projekt); if (!empty($warenkorb['kundennummer'])) { $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='{$warenkorb['kundennummer']}' $adresseprojekt AND geloescht!=1 LIMIT 1"); } if (empty($adresse)) { $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE email='{$warenkorb['email']}' and email <> '' $adresseprojekt AND geloescht!=1 LIMIT 1"); } if ($adresse <= 0) { $adresse = $this->app->erp->KundeAnlegen($typ, $name, $abteilung, $unterabteilung, $ansprechpartner, $adresszusatz, $strasse, $land, $plz, $ort, $email, $telefon, $telefax, $ustid, $partner, $projekt); $warenkorb['customer_created'] = true; if (!empty($warenkorb['bundesland'])) { $this->app->DB->Update("UPDATE adresse SET bundesland = '" . $this->app->DB->real_escape_string($warenkorb['bundesland']) . "' WHERE id = '$adresse' LIMIT 1"); } if (isset($warenkorb['kunde_sprache'])) { if ($warenkorb['kunde_sprache'] === 'englisch' || $warenkorb['kunde_sprache'] === 'english') { $this->app->DB->Update("UPDATE adresse SET sprache = 'englisch' WHERE id = '$adresse' LIMIT 1"); } elseif ($warenkorb['kunde_sprache'] === 'deutsch' || $warenkorb['kunde_sprache'] === 'german') { $this->app->DB->Update("UPDATE adresse SET sprache = 'deutsch' WHERE id = '$adresse' LIMIT 1"); } elseif (method_exists($this->app->erp, 'GetAdressSprachen')) { $sprachen = $this->app->erp->GetAdressSprachen(); if (isset($sprachen[strtolower($warenkorb['kunde_sprache'])])) { $this->app->DB->Update("UPDATE adresse SET sprache = '" . strtolower($warenkorb['kunde_sprache']) . "' WHERE id = '$adresse' LIMIT 1"); } } } if ($warenkorb['titel'] != '') { $this->app->DB->Update("UPDATE adresse SET titel = '" . $this->app->DB->real_escape_string($warenkorb['titel']) . "' WHERE id = '$adresse' LIMIT 1"); } if (isset($warenkorb['ust_befreit'])) { $this->app->DB->Update("UPDATE adresse SET ust_befreit = '" . (int) $warenkorb['ust_befreit'] . "' WHERE id = '$adresse' LIMIT 1"); } if ($warenkorb['mobil'] != '') { $this->app->DB->Update("UPDATE adresse SET mobil = '" . $this->app->DB->real_escape_string($warenkorb['mobil']) . "' WHERE id = '$adresse' LIMIT 1"); } if (!empty($warenkorb['geburtstag'])) { $query = sprintf("UPDATE `adresse` SET `geburtstag` = '%s' WHERE `id` = %d", $this->app->DB->real_escape_string($warenkorb['geburtstag']), $adresse); $this->app->DB->Update($query); } $kundenGruppen = $this->app->DB->SelectArr("SELECT gruppeid,type FROM shopexport_kundengruppen WHERE shopid=$shopid AND aktiv=1 AND apply_to_new_customers=1 AND (projekt=0 OR projekt='$projekt')"); if (!empty($kundenGruppen)) { foreach ($kundenGruppen as $gruppe) { $this->app->erp->AddRolleZuAdresse($adresse, $gruppe['type'], 'von', 'Gruppe', $gruppe['gruppeid']); } } if (isset($warenkorb['kundengruppe'])) { $this->shopimportAdresseGruppenMapping($warenkorb['kundengruppe'], $adresse, $shopid, $projekt); } if ($shopexportArr['vertrieb']) { $this->app->DB->Update( sprintf( 'UPDATE adresse SET vertrieb = %d WHERE id = %d AND geloescht <> 1 AND vertrieb = 0', $shopexportArr['vertrieb'], $adresse ) ); } $this->app->DB->Update( sprintf( 'UPDATE adresse SET fromshop = %d WHERE fromshop = 0 AND id = %d', $shopexportArr['id'], $adresse ) ); } else { // Update + protokoll if (!$this->app->DB->Select("SELECT adressennichtueberschreiben FROM shopexport WHERE id = '$shopid' LIMIT 1")) { $this->app->erp->KundeUpdate($adresse, $typ, $name, $abteilung, $unterabteilung, $ansprechpartner, $adresszusatz, $strasse, $land, $plz, $ort, $email, $telefon, $telefax, $ustid, $partner, $projekt); if (!empty($warenkorb['bundesland'])) { $this->app->DB->Update("UPDATE adresse SET bundesland = '" . $this->app->DB->real_escape_string($warenkorb['bundesland']) . "' WHERE id = '$adresse' LIMIT 1"); } } } // abweichende lieferadresse gleich angelegen? if (strlen($warenkorb['lieferadresse_ansprechpartner']) > 3) { $this->app->DB->Insert("INSERT INTO lieferadressen (typ,name,abteilung,unterabteilung,land,strasse,ort,plz,adresszusatz,adresse) VALUES ('','{$warenkorb['lieferadresse_ansprechpartner']}', '{$warenkorb['lieferadresse_abteilung']}','{$warenkorb['lieferadresse_unterabteilung']}','{$warenkorb['lieferadresse_land']}', '{$warenkorb['lieferadresse_strasse']}','{$warenkorb['lieferadresse_ort']}','{$warenkorb['lieferadresse_plz']}','{$warenkorb['lieferadresse_adresszusatz']}','$adresse')"); } if (strlen($warenkorb['lieferadresse_name']) > 3 && $warenkorb['lieferadresse_ansprechpartner'] == '') { $this->app->DB->Insert("INSERT INTO lieferadressen (typ,name,abteilung,unterabteilung,land,strasse,ort,plz,adresszusatz,adresse) VALUES ('','{$warenkorb['lieferadresse_name']}', '{$warenkorb['lieferadresse_abteilung']}','{$warenkorb['lieferadresse_unterabteilung']}','{$warenkorb['lieferadresse_land']}', '{$warenkorb['lieferadresse_strasse']}','{$warenkorb['lieferadresse_ort']}','{$warenkorb['lieferadresse_plz']}','{$warenkorb['lieferadresse_adresszusatz']}','$adresse')"); } } //print_r($warenkorb); //echo "

    Ende"; //exit; //imort auf kunde //$bekanntezahlungsweisen = array('rechnung','vorkasse','nachnahme','kreditkarte','einzugsermaechtigung','bar','paypal','amazon','amazon_bestellung','sofortueberweisung','amazoncba','secupay','lastschrift'); $bekanntezahlungsweisen = $this->app->erp->GetZahlungsweise(); $import_result = $this->app->erp->ImportAuftrag($adresse, $warenkorb, $projekt, $shopid); if ($import_result['status']) { $tmpauftragid = $import_result['auftragid']; $success_import = true; $doctype = 'auftrag'; if ($this->app->DB->Select("SELECT angeboteanlegen FROM shopexport WHERE id = '$shopid' LIMIT 1")) { $doctype = 'angebot'; } if (isset($warenkorb['doctype']) && $warenkorb['doctype'] === 'angebot') { $doctype = 'angebot'; } $warenkorb['zahlungsweise'] = $this->app->DB->Select("SELECT zahlungsweise FROM $doctype WHERE id = '$tmpauftragid' LIMIT 1"); if ($warenkorb['zahlungsweise'] != '') { if (!isset($bekanntezahlungsweisen[$warenkorb['zahlungsweise']])) { if (!$unbekanntezahlungsweisen || !isset($unbekanntezahlungsweisen[strtolower($warenkorb['zahlungsweise'])])) { $unbekanntezahlungsweisen[strtolower($warenkorb['zahlungsweise'])] = false; } $tmp = array(); $tmp['bestellnummer'] = $warenkorb['onlinebestellnummer']; $unbekanntezahlungsweisen[strtolower($warenkorb['zahlungsweise'])][] = $tmp; } } if ($shopimportid && $tmpauftragid) { $this->app->DB->Update("UPDATE shopimport_auftraege SET imported='1' WHERE id='$shopimportid' LIMIT 1"); } if ($shopimportid) { $shopextid = $this->app->DB->real_escape_string($this->app->DB->Select("SELECT extid FROM shopimport_auftraege WHERE id='$shopimportid' LIMIT 1")); } if ($shopextid) { $this->app->DB->Select("UPDATE $doctype SET shopextid='$shopextid' WHERE id='$tmpauftragid' LIMIT 1"); } $this->app->erp->RunHook('Shopimportwarenkorb', 4, $doctype, $tmpauftragid, $shopid, $warenkorb); $this->app->erp->RunHook('Shopimport', 3, $doctype, $tmpauftragid, $shopid); $adresse = ''; } else { // Error... } return $success_import; } /** * @param String $gruppenBezeichnung im Shop * @param int $adresseId * @param int $shopId * @param int $projektId * * @return string */ private function shopimportAdresseGruppenMapping($gruppenBezeichnung, $adresseId, $shopId, $projektId) { $kundenGruppen = $this->getShopimportKundenGruppenZuordnungen($gruppenBezeichnung, $shopId, $projektId); if (empty($kundenGruppen)) { return ''; } foreach ($kundenGruppen as $gruppe => $rolle) { $this->app->erp->AddRolleZuAdresse($adresseId, $rolle, 'von', 'Gruppe', $gruppe); } return ''; } /** * @param String $gruppenBezeichnung im Shop * @param int $shopId * @param int $projektId * * @return array */ private function getShopimportKundenGruppenZuordnungen($gruppenBezeichnung, $shopId, $projektId) { $gefundeneGruppen = $this->app->DB->SelectArr("SELECT gruppeid, type FROM shopexport_kundengruppen WHERE shopid='$shopId' AND extgruppename='$gruppenBezeichnung' AND projekt='$projektId'"); if (empty($gefundeneGruppen)) { //Fallback, falls kein projektspezifisches Mapping gefunden $gefundeneGruppen = $this->app->DB->SelectArr("SELECT gruppeid, type FROM shopexport_kundengruppen WHERE shopid='$shopId' AND extgruppename='$gruppenBezeichnung' AND projekt='0'"); } if (empty($gefundeneGruppen)) { return []; } $kundenGruppen = []; foreach ($gefundeneGruppen as $gruppe) { $kundenGruppen[$gruppe['gruppeid']] = $gruppe['type']; } return $kundenGruppen; } /** * @param $shopImportedOrderId * * @return bool */ public function setShopImportedOrderTrash($shopImportedOrderId) { $this->app->DB->Update( sprintf( 'UPDATE shopimport_auftraege SET trash=1 WHERE id= %d LIMIT 1', (int) $shopImportedOrderId ) ); return $this->app->DB->affected_rows() > 0; } public function importShopOrder($shopImportedOrderId, $utf8coding, $customerNumber, $custumerNumberImported, &$unknownPaymentTypes) { $shopImportedOrder = $this->app->DB->SelectRow( sprintf( 'SELECT * FROM shopimport_auftraege WHERE imported=0 AND trash=0 AND id=%d LIMIT 1', $shopImportedOrderId ) ); if (empty($shopImportedOrder)) { return ['success' => 0]; } if (isset($shopImportedOrder['jsonencoded']) && $shopImportedOrder['jsonencoded']) { $shopOrder = json_decode(base64_decode($shopImportedOrder['warenkorb']), true); } else { $shopOrder = unserialize(base64_decode($shopImportedOrder['warenkorb'])); } //alle leerzeichen am amfang und ende entfernen + umbrueche komplett entfernen if ($utf8coding == '1') { $shopOrderCleaned = $this->app->erp->CleanDataBeforImportUTF8($shopOrder, false); } else { $shopOrderCleaned = $this->app->erp->CleanDataBeforImport($shopOrder, false); } if ($shopOrderCleaned['name'] === '') { $shopOrderCleaned['name'] = $shopOrderCleaned['ansprechpartner']; $shopOrderCleaned['ansprechpartner'] = ''; } if ($shopOrderCleaned['lieferadresse_name'] === '') { $shopOrderCleaned['lieferadresse_name'] = $shopOrderCleaned['lieferadresse_ansprechpartner']; $shopOrderCleaned['lieferadresse_ansprechpartner'] = ''; } if ($shopOrderCleaned['name'] === '' && !empty($shopOrderCleaned['lieferadresse_name'])) { $shopOrderCleaned['name'] = $shopOrderCleaned['lieferadresse_name']; } foreach ($shopOrderCleaned as $k => $v) { if (!is_array($v)) { $shopOrderCleaned[$k] = $this->app->erp->fixeUmlaute($v); } } $umlautefehler = false; if ((String) $shopOrder['name'] !== '' && (String) $shopOrderCleaned['name'] === '') { $umlautefehler = true; $this->app->erp->LogFile('Kodierungsfehler in shopimport_auftraege ' . $shopImportedOrderId); } $succes = $this->KundeAnlegenUpdate($shopImportedOrderId, '', $shopOrderCleaned, $customerNumber, $custumerNumberImported, $unknownPaymentTypes); return ['codingerror' => $umlautefehler, 'success' => $succes]; } public function ShopimportView() { $this->ShopimportImport(showonly: true); } public function ShopimportImport($id = '', $count = 0, $returncount = false, $showonly = false) { $deletedRows = 0; if (!is_numeric($id) && $this->app->Secure->GetPOST('deletedouble')) { $showonly = true; $id = (int) $this->app->Secure->GetGET('id'); $this->app->DB->Update( sprintf( 'UPDATE shopimport_auftraege AS sa INNER JOIN auftrag a ON sa.bestellnummer = a.internet AND sa.shopid = a.shop SET sa.trash = 1 WHERE IFNULL(a.internet,\'\') <> \'\' AND sa.trash = 0 AND sa.imported = 0 AND (sa.shopid = %d OR %d = 0)', $id, $id ) ); $deletedRows = (int) $this->app->DB->affected_rows(); $this->app->Tpl->Add('IMPORT', '
    Es wurden ' . $deletedRows . ' bereits importierte Datensätze entfernt.
    '); } $runningcronjob = $this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'shopimport' AND aktiv=1 AND mutex = 1 AND UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(letzteausfuerhung) < 300 LIMIT 1"); if ($runningcronjob && !$showonly) { $this->app->Location->execute('index.php?module=shopimport&action=list'); } if (!is_numeric($id)) { $id = $this->app->Secure->GetGET('id'); } $shopexportarr = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id='$id'"); $projekt = $shopexportarr['projekt']; //$this->app->DB->Select("SELECT projekt FROM shopexport WHERE id='$id'"); $demomodus = $shopexportarr['demomodus']; //$this->app->DB->Select("SELECT demomodus FROM shopexport WHERE id='$id'"); $einzelsync = $shopexportarr['einzelsync']; //$this->app->DB->Select("SELECT einzelsync FROM shopexport WHERE id='$id'"); $utf8codierung = $shopexportarr['utf8codierung']; //$this->app->DB->Select("SELECT utf8codierung FROM shopexport WHERE id='$id'"); if (!$returncount) { $this->app->erp->Headlines('Shopimport'); $this->app->erp->MenuEintrag('index.php?module=shopimport&action=list', 'Zurück zur Übersicht'); } //name, strasse, ort, plz und kundenummer, emailadresse oder bestellung kam von login account ==> Kunde aus DB verwenden //ACHTUNG Lieferadresse immer aus Auftrag!!! aber Lieferadresse extra bei Kunden anlegen if ($this->app->Secure->GetPOST('submit') != '') { $auftraege = $this->app->Secure->GetPOST('auftrag'); $kundennummer = $this->app->Secure->GetPOST('kundennummer'); $import = $this->app->Secure->GetPOST('import'); $import_kundennummer = $this->app->Secure->GetPOST('import_kundennummer'); $success_import = 0; $insgs_import = 0; $unbekanntezahlungsweisen = null; $cauftraege = $auftraege ? count($auftraege) : 0; for ($i = 0; $i < $cauftraege; $i++) { $adresse = ''; $shopimportid = $auftraege[$i]; $shopid = $this->app->DB->Select("SELECT shopid FROM shopimport_auftraege WHERE id='$shopimportid' LIMIT 1"); if ($shopid) { $demomodus = $this->app->DB->Select("SELECT demomodus FROM shopexport WHERE id='$shopid'"); $einzelsync = $this->app->DB->Select("SELECT einzelsync FROM shopexport WHERE id='$shopid'"); $utf8codierung = $this->app->DB->Select("SELECT utf8codierung FROM shopexport WHERE id='$shopid'"); } $projekt = $this->app->DB->Select("SELECT projekt FROM shopimport_auftraege WHERE id='$shopimportid' LIMIT 1"); if ($import[$shopimportid] === 'warten') { } else if ($import[$shopimportid] === 'muell') { $this->setShopImportedOrderTrash($shopimportid); } else if ($import[$shopimportid] === 'import') { $res = $this->importShopOrder($shopimportid, $utf8codierung, $kundennummer[$shopimportid], $import_kundennummer[$shopimportid], $unbekanntezahlungsweisen); if ($res['codingerror']) { $umlautefehler = true; } if ($res['success']) { $success_import += $res['success']; } $insgs_import++; } } // ende for if ($unbekanntezahlungsweisen) { $meldung = ''; foreach ($unbekanntezahlungsweisen as $k => $v) { $meldung .= 'Unbekannte Zahlungsart: ' . $k . ' in Bestellung(en): '; $first = true; foreach ($v as $k2 => $v2) { if (!$first) { $meldung .= ', '; } $first = false; $meldung .= $v2['bestellnummer']; } $meldung .= "
    \r\n"; } if (isset($this->app->User) && method_exists($this->app->User, 'GetID') && $this->app->User->GetID()) { $this->app->erp->EventMitSystemLog($this->app->User->GetID(), $meldung, -1, '', 'warning', 1); } } if (!empty($umlautefehler)) { $msg = $this->app->erp->base64_url_encode("
    $success_import" . ($success_import != $insgs_import ? " von $insgs_import " : '') . " Aufträge importiert. Aufträge mit Kodierungsprobleme. Bitte prüfen Sie sie UTF8-Einstellung in der Shopschnittstelle!
    "); } else { $msg = $this->app->erp->base64_url_encode("
    $success_import" . ($success_import != $insgs_import ? " von $insgs_import " : '') . " Aufträge importiert!
    "); } $this->app->Location->execute('index.php?module=shopimport&action=list&msg=' . $msg); } if (!$showonly && $id) { try { $pageContents = $this->app->remote->RemoteConnection($id); } catch (Exception $e) { $pageContents = $e->getMessage(); } if ($pageContents === 'success') { $shopexportarr = $this->app->DB->SelectRow("SELECT * FROM shopexport WHERE id = '$id' LIMIT 1"); $holealle = $shopexportarr['holealle']; //$this->app->DB->Select("SELECT holealle FROM shopexport WHERE id = '$id' LIMIT 1"); $statusaendern = $shopexportarr['nummersyncstatusaendern']; //$this->app->DB->Select("SELECT nummersyncstatusaendern FROM shopexport WHERE id = '$id' LIMIT 1"); $auftragabgleich = $shopexportarr['auftragabgleich']; //$this->app->DB->Select("SELECT auftragabgleich FROM shopexport WHERE id = '$id' LIMIT 1"); $zeitraum = array('datumvon' => $shopexportarr['datumvon'], 'datumbis' => $shopexportarr['datumbis'], 'tmpdatumvon' => $shopexportarr['tmpdatumvon'], 'tmpdatumbis' => $shopexportarr['tmpdatumbis'], 'anzgleichzeitig' => $shopexportarr['anzgleichzeitig']); //$this->app->DB->SelectArr("SELECT datumvon, datumbis,tmpdatumvon, tmpdatumbis, anzgleichzeitig FROM shopexport WHERE id = '$id' LIMIT 1"); /* if(!empty($zeitraum)) { $zeitraum = reset($zeitraum); } */ $anzgleichzeitig = 1; if (isset($zeitraum['anzgleichzeitig'])) { $anzgleichzeitig = (int) $zeitraum['anzgleichzeitig']; } if ($anzgleichzeitig > 1) { $result = $this->app->remote->RemoteGetAuftrag($id); if (!empty($result) && is_array($result) && isset($result[0])) { $maxtime = false; $mintime = false; $gesamtanzahl = (!empty($result) ? count($result) : 0); for ($i = 0; $i < $gesamtanzahl; $i++) { $projekt = $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id = '$id' LIMIT 1"); $auftrag = $result[$i]['id']; if (isset($result[$i]['warenkorbjson'])) { $isjson = true; $tmpwarenkorb = json_decode(base64_decode($result[$i]['warenkorbjson']), true); } else { $isjson = false; $tmpwarenkorb = unserialize(base64_decode($result[$i]['warenkorb'])); } if (!empty($tmpwarenkorb['projekt']) && $this->app->DB->Select("SELECT id FROM projekt WHERE id = '" . (int) $tmpwarenkorb['projekt'] . "' LIMIT 1")) { $projekt = (int) $tmpwarenkorb['projekt']; } if (!empty($tmpwarenkorb['zeitstempel'])) { $time = strtotime($tmpwarenkorb['zeitstempel']); if ($time < 0) { $time = 0; } if ($maxtime === false) { $maxtime = $time; } if ($mintime === false) { $mintime = $time; } if ($time > $maxtime) { $maxtime = $time; } if ($time < $mintime) { $mintime = $time; } } $onlinebestellnummer = $tmpwarenkorb['onlinebestellnummer']; if (!empty($tmpwarenkorb['useorderid']) || (!is_numeric($onlinebestellnummer) && trim((String) $onlinebestellnummer) !== '')) { $onlinebestellnummer = $tmpwarenkorb['auftrag']; } if ($holealle && $onlinebestellnummer) { $neue_nummer = (int) $onlinebestellnummer + 1; $this->app->DB->Update("UPDATE shopexport SET ab_nummer = '$neue_nummer' WHERE id = '$id'"); } $sessionid = isset($result[$i]['sessionid']) ? $result[$i]['sessionid'] : ''; if ($isjson) { $warenkorb = $result[$i]['warenkorbjson']; } else { $warenkorb = $result[$i]['warenkorb']; } $logdatei = isset($result[$i]['logdatei']) ? $result[$i]['logdatei'] : null; if (empty($logdatei)) { $logdatei = date('Y-m-d H:i:s'); } if (isset($tmpwarenkorb['subshop']) && $tmpwarenkorb['subshop']) { $subshopprojekt = $this->app->DB->Select("SELECT projekt FROM shopexport_subshop WHERE shop = '$id' AND aktiv = 1 AND subshopkennung = '" . $this->app->DB->real_escape_string($tmpwarenkorb['subshop']) . "' LIMIT 1"); if ($subshopprojekt) { $projekt = $subshopprojekt; } } $letzteonlinebestellnummer = $tmpwarenkorb['onlinebestellnummer']; unset($tmpwarenkorb); //globalerauftragsnummernkreis $standardcheck = true; $modulename = $this->app->DB->Select( sprintf( "SELECT modulename FROM shopexport WHERE id = %d AND modulename <> '' AND (shoptyp = 'intern')", $id ) ); $shopIds = [$id]; $otherModules = empty($modulename) ? null : $this->app->DB->SelectFirstCols( sprintf( "SELECT id FROM shopexport WHERE modulename = '%s' AND id <> %d", $this->app->DB->real_escape_string($modulename), $id ) ); if (!empty($otherModules) && $this->app->erp->ModulVorhanden($modulename)) { $obj = $this->app->erp->LoadModul($modulename); if (!empty($obj) && method_exists($obj, 'EinstellungenStruktur')) { $konfiguration = $obj->EinstellungenStruktur(); if ($konfiguration && isset($konfiguration['globalerauftragsnummernkreis']) && $konfiguration['globalerauftragsnummernkreis']) { $shopIds = array_merge([$id], $otherModules); $standardcheck = false; /* $checkdoppeltimported = $this->app->DB->Select("SELECT id FROM shopimport_auftraege WHERE extid = '".$this->app->DB->real_escape_string($auftrag)."' and ((modulename = '".$this->app->DB->real_escape_string($modulename)."' AND shoptyp = 'intern') OR shopid = '$id') and warenkorb = '".$this->app->DB->real_escape_string($warenkorb)."' AND trash = 0 AND (imported = 0 OR (imported = 1 AND DATE_SUB(NOW(),INTERVAL 10 MINUTE)>logdatei )) LIMIT 1"); */ /* $checkdoppeltimported = $this->app->DB->Select("SELECT id FROM shopimport_auftraege WHERE extid = '".$this->app->DB->real_escape_string($auftrag)."' and ((modulename = '".$this->app->DB->real_escape_string($modulename)."' AND shoptyp = 'intern') OR shopid = '$id') AND trash = 0 AND (imported = 0 OR (imported = 1 AND DATE_SUB(NOW(),INTERVAL 10 MINUTE)>logdatei )) LIMIT 1"); */ } } } $checkdoppeltimported = $this->app->DB->Select( sprintf( "SELECT id FROM shopimport_auftraege WHERE extid = '%s' and shopid IN (%s) AND trash = 0 AND (imported = 0 OR (imported = 1 AND DATE_SUB(NOW(),INTERVAL 10 MINUTE)>logdatei )) LIMIT 1", $this->app->DB->real_escape_string($auftrag), implode(',', $shopIds) ) ); /* if($standardcheck) { */ /* $checkdoppeltimported = $this->app->DB->Select("SELECT id FROM shopimport_auftraege WHERE extid = '".$this->app->DB->real_escape_string($auftrag)."' and shopid = '$id' and warenkorb = '".$this->app->DB->real_escape_string($warenkorb)."' AND trash = 0 AND (imported = 0 OR (imported = 1 AND DATE_SUB(NOW(),INTERVAL 10 MINUTE)>logdatei )) LIMIT 1"); */ /* $checkdoppeltimported = $this->app->DB->Select("SELECT id FROM shopimport_auftraege WHERE extid = '".$this->app->DB->real_escape_string($auftrag)."' and shopid = '$id' AND trash = 0 AND (imported = 0 OR (imported = 1 AND DATE_SUB(NOW(),INTERVAL 10 MINUTE)>logdatei )) LIMIT 1"); } */ $insid = null; if (empty($checkdoppeltimported)) { $this->app->DB->Insert("INSERT INTO shopimport_auftraege (id,extid,sessionid,warenkorb,imported,projekt,bearbeiter,logdatei) VALUES('','" . $this->app->DB->real_escape_string($auftrag) . "','" . $this->app->DB->real_escape_string($sessionid) . "','" . $this->app->DB->real_escape_string($warenkorb) . "','0','$projekt','" . $this->app->DB->real_escape_string($this->app->User->GetName()) . "','" . $this->app->DB->real_escape_string($logdatei) . "')"); $insid = $this->app->DB->GetInsertID(); if ($insid) { if ($isjson) { $this->app->DB->Update("UPDATE shopimport_auftraege set jsonencoded = 1 where id = '$insid'"); } $this->app->DB->Update("UPDATE shopimport_auftraege set shopid = '$id' where id = '$insid'"); $this->app->DB->Update("UPDATE shopimport_auftraege set bestellnummer = '" . $this->app->DB->real_escape_string($letzteonlinebestellnummer) . "' where id = '$insid'"); } } if ($demomodus != '1') { $this->app->remote->RemoteDeleteAuftrag($id, $auftrag, $letzteonlinebestellnummer); } elseif ($demomodus == '1') { break; } unset($letzteonlinebestellnummer); } if (!$demomodus) { if (empty($maxtime)) { $maxtime = strtotime(date('Y-m-d H:i:s')); } $datumvon = strtotime($zeitraum['datumvon']); $datumbis = strtotime($zeitraum['datumbis']); $tmpdatumvon = strtotime($zeitraum['tmpdatumvon']); $tmpdatumbis = strtotime($zeitraum['tmpdatumbis']); if ($datumvon < 0) { $datumvon = 0; } if ($datumbis < 0) { $datumbis = 0; } if ($tmpdatumvon < 0) { $tmpdatumvon = 0; } if ($tmpdatumbis < 0) { $tmpdatumbis = 0; } $this->app->DB->Update("UPDATE shopexport SET datumvon = '" . date('Y-m-d H:i:s', $maxtime) . "', tmpdatumbis = '0000-00-00' WHERE id = '$id' LIMIT 1"); } } else { if (!$demomodus) { if (is_array($result) && !empty($result['zeitstempel'])) { $this->app->DB->Update("UPDATE shopexport SET datumvon = '" . date('Y-m-d H:i:s', strtotime($result['zeitstempel'])) . "', tmpdatumbis = '0000-00-00' WHERE id = '$id' AND datumvon < '" . date('Y-m-d H:i:s', strtotime($result['zeitstempel'])) . "' LIMIT 1"); } if (empty($maxtime)) { $maxtime = strtotime(date('Y-m-d H:i:s')); } $datumvon = strtotime($zeitraum['datumvon']); $datumbis = strtotime($zeitraum['datumbis']); $tmpdatumvon = strtotime($zeitraum['tmpdatumvon']); $tmpdatumbis = strtotime($zeitraum['tmpdatumbis']); if ($datumvon < 0) { $datumvon = 0; } if ($datumbis < 0) { $datumbis = 0; } if ($tmpdatumvon < 0) { $tmpdatumvon = 0; } if ($tmpdatumbis < 0) { $tmpdatumbis = 0; } if ($tmpdatumbis) { $this->app->DB->Update("UPDATE shopexport SET tmpdatumbis = '0000-00-00' WHERE id = '$id' LIMIT 1"); } } } } else { $gesamtanzahl = $this->app->remote->RemoteGetAuftraegeAnzahl($id); $maxmanuell = (int) $this->app->DB->Select("SELECT maxmanuell FROM shopexport WHERE id = '$id' LIMIT 1"); if ($maxmanuell <= 0) { $maxmanuell = 100; } if ($gesamtanzahl > $maxmanuell) { $gesamtanzahl = $maxmanuell; } if ($einzelsync == '1' && $gesamtanzahl > 1 && $maxmanuell <= 1) { $gesamtanzahl = 1; } if ($gesamtanzahl > 0) { for ($i = 0; $i < $gesamtanzahl; $i++) { //import au $result = $this->app->remote->RemoteGetAuftrag($id); if (is_array($result)) { $auftrag = $result[0]['id']; if (isset($result[0]['warenkorbjson'])) { $isjson = true; $tmpwarenkorb = json_decode(base64_decode($result[0]['warenkorbjson']), true); } else { $isjson = false; $tmpwarenkorb = unserialize(base64_decode($result[0]['warenkorb'])); } $onlinebestellnummer = $tmpwarenkorb['onlinebestellnummer']; if (!empty($tmpwarenkorb['useorderid']) || (!is_numeric($onlinebestellnummer) && trim((String) $onlinebestellnummer) !== '')) { $onlinebestellnummer = $tmpwarenkorb['auftrag']; } if ($holealle && $onlinebestellnummer) { $neue_nummer = (int) $onlinebestellnummer + 1; $this->app->DB->Update("UPDATE shopexport SET ab_nummer = '$neue_nummer' WHERE id = '$id'"); } $sessionid = $result[0]['sessionid']; if ($isjson) { $warenkorb = $result[0]['warenkorbjson']; } else { $warenkorb = $result[0]['warenkorb']; } $logdatei = $result[0]['logdatei']; if (empty($logdatei)) { $logdatei = date('Y-m-d H:i:s'); } $projekt = $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id = '$id' LIMIT 1"); if (!empty($tmpwarenkorb['projekt']) && $this->app->DB->Select("SELECT id FROM projekt WHERE id = '" . (int) $tmpwarenkorb['projekt'] . "' LIMIT 1")) { $projekt = (int) $tmpwarenkorb['projekt']; } if (isset($tmpwarenkorb['subshop']) && $tmpwarenkorb['subshop']) { $subshopprojekt = $this->app->DB->Select("SELECT projekt FROM shopexport_subshop WHERE shop = '$id' AND aktiv = 1 AND subshopkennung = '" . $this->app->DB->real_escape_string($tmpwarenkorb['subshop']) . "' LIMIT 1"); if ($subshopprojekt) { $projekt = $subshopprojekt; } } unset($tmpwarenkorb); $standardcheck = true; $modulename = $this->app->DB->Select( sprintf( "SELECT modulename FROM shopexport WHERE id = %d AND modulename <> '' AND (shoptyp = 'intern')", $id ) ); $shopIds = [$id]; $otherModules = empty($modulename) ? null : $this->app->DB->SelectFirstCols( sprintf( "SELECT id FROM shopexport WHERE modulename = '%s' AND id <> %d", $this->app->DB->real_escape_string($modulename), $id ) ); if (!empty($otherModules) && $this->app->erp->ModulVorhanden($modulename)) { $obj = $this->app->erp->LoadModul($modulename); if (!empty($obj) && method_exists($obj, 'EinstellungenStruktur')) { $konfiguration = $obj->EinstellungenStruktur(); if ($konfiguration && isset($konfiguration['globalerauftragsnummernkreis']) && $konfiguration['globalerauftragsnummernkreis']) { $shopIds = array_merge([$id], $otherModules); $standardcheck = false; /* $checkdoppeltimported = $this->app->DB->Select("SELECT id FROM shopimport_auftraege WHERE extid = '".$this->app->DB->real_escape_string($auftrag)."' and ((modulename = '".$this->app->DB->real_escape_string($modulename)."' AND shoptyp = 'intern') OR shopid = '$id') and warenkorb = '".$this->app->DB->real_escape_string($warenkorb)."' AND trash = 0 AND (imported = 0 OR (imported = 1 AND DATE_SUB(NOW(),INTERVAL 10 MINUTE)>logdatei )) LIMIT 1"); */ /* $checkdoppeltimported = $this->app->DB->Select("SELECT id FROM shopimport_auftraege WHERE extid = '".$this->app->DB->real_escape_string($auftrag)."' and ((modulename = '".$this->app->DB->real_escape_string($modulename)."' AND shoptyp = 'intern') OR shopid = '$id') AND trash = 0 AND (imported = 0 OR (imported = 1 AND DATE_SUB(NOW(),INTERVAL 10 MINUTE)>logdatei )) LIMIT 1"); */ } } } $checkdoppeltimported = $this->app->DB->Select( sprintf( "SELECT id FROM shopimport_auftraege WHERE extid = '%s' and shopid IN (%s) AND trash = 0 AND (imported = 0 OR (imported = 1 AND DATE_SUB(NOW(),INTERVAL 10 MINUTE)>logdatei )) LIMIT 1", $this->app->DB->real_escape_string($auftrag), implode(',', $shopIds) ) ); /* if($standardcheck){ */ /* $checkdoppeltimported = $this->app->DB->Select("SELECT id FROM shopimport_auftraege WHERE extid = '" . $this->app->DB->real_escape_string($auftrag) . "' and shopid = '$id' and warenkorb = '" . $this->app->DB->real_escape_string($warenkorb) . "' AND trash = 0 AND (imported = 0 OR (imported = 1 AND DATE_SUB(NOW(),INTERVAL 10 MINUTE)>logdatei )) LIMIT 1"); */ /* $checkdoppeltimported = $this->app->DB->Select("SELECT id FROM shopimport_auftraege WHERE extid = '" . $this->app->DB->real_escape_string($auftrag) . "' and shopid = '$id' AND trash = 0 AND (imported = 0 OR (imported = 1 AND DATE_SUB(NOW(),INTERVAL 10 MINUTE)>logdatei )) LIMIT 1"); } */ $insid = null; if ($demomodus == '1') { $checkdoppeltimported = null; } if (!$checkdoppeltimported) { $this->app->DB->Insert("INSERT INTO shopimport_auftraege (id,extid,sessionid,warenkorb,imported,projekt,bearbeiter,logdatei) VALUES('','$auftrag','$sessionid','$warenkorb','0','$projekt','" . $this->app->User->GetName() . "','$logdatei')"); $insid = $this->app->DB->GetInsertID(); if ($insid) { $this->app->DB->Update("UPDATE shopimport_auftraege set shopid = '$id' where id = '$insid'"); $this->app->DB->Update("UPDATE shopimport_auftraege set logdatei = now() where id = '$insid' AND logdatei = '0000-00-00' OR logdatei > now()"); if ($isjson) { $this->app->DB->Update("UPDATE shopimport_auftraege set jsonencoded = 1 where id = '$insid'"); } } } if ($demomodus != '1') { $this->app->remote->RemoteDeleteAuftrag($id, $auftrag); } elseif ($demomodus == '1') { $i = $gesamtanzahl; } } } } } } else { if (!$returncount) { $this->app->Tpl->Set('IMPORT', "
    Verbindungsprobleme! Bitte Administrator kontaktieren! ($pageContents)
    "); } else { $this->error = "
    Verbindungsprobleme! Bitte Administrator kontaktieren! ($pageContents)
    "; } } } if (!$returncount) { $this->drawShopOrderTable($deletedRows); } else { return $count + (is_numeric($gesamtanzahl) ? $gesamtanzahl : 0); } } /** * @param array $arr * * @return array */ public function getCustomerNumberFromShopCart($arr) { $validkundennummer = ''; if (!empty($arr['jsonencoded'])) { $warenkorb = json_decode(base64_decode($arr['warenkorb']), true); } else { $warenkorb = unserialize(base64_decode($arr['warenkorb'])); } foreach ($warenkorb as $key => $value) { if (is_string($warenkorb[$key])) { $warenkorb[$key] = trim($warenkorb[$key]); } } foreach ($warenkorb as $k => $v) { $warenkorb[$k] = $this->app->erp->fixeUmlaute($v); } $kundenurvonprojekt = $this->app->DB->Select("SELECT kundenurvonprojekt FROM shopexport WHERE id = '" . $arr['shopid'] . "' LIMIT 1"); $adresseprojekt = ''; if ($kundenurvonprojekt) { $adresseprojekt = $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id = '" . $arr['shopid'] . "' LIMIT 1"); } if (!empty($warenkorb['kundennummer'])) { $validkundennummer = $this->app->DB->Select( "SELECT kundennummer FROM adresse WHERE kundennummer='" . $warenkorb['kundennummer'] . "' and email <> '' $adresseprojekt AND geloescht!=1 AND kundennummer <> '' LIMIT 1" ); } if (isset($warenkorb['subshop']) && $warenkorb['subshop']) { $subshopprojekt = $this->app->DB->Select("SELECT projekt FROM shopexport_subshop WHERE shop = '" . $arr['shopid'] . "' AND aktiv = 1 AND subshopkennung = '" . $this->app->DB->real_escape_string($warenkorb['subshop']) . "' LIMIT 1"); if ($subshopprojekt) { if (!$kundenurvonprojekt) { $adresseprojekt = $subshopprojekt; } $arr['abkuerzung'] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$adresseprojekt' LIMIT 1"); } } if ($kundenurvonprojekt) { $adresseprojekt = " AND projekt = '" . $adresseprojekt . "' "; } else { $adresseprojekt = ''; } $checkid = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE `name`='" . $this->app->DB->real_escape_string($warenkorb['name']) . "' AND abteilung='" . $this->app->DB->real_escape_string($warenkorb['abteilung']) . "' AND strasse='" . $this->app->DB->real_escape_string($warenkorb['strasse']) . "' AND plz='" . $this->app->DB->real_escape_string($warenkorb['plz']) . "' AND ort='" . $this->app->DB->real_escape_string($warenkorb['ort']) . "' AND kundennummer <> '' AND geloescht!=1 $adresseprojekt ORDER BY email='" . $this->app->DB->real_escape_string($warenkorb['email']) . "' DESC LIMIT 1"); if ($warenkorb['email'] != '') { if ($warenkorb['email'] !== 'amazon_import_bounce@nfxmedia.de') { $checkidemail = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE email='" . $warenkorb['email'] . "' and email <> '' $adresseprojekt AND geloescht!=1 AND kundennummer <> '' LIMIT 1"); } if ((String) $checkidemail === '') { $checkidemail = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE name LIKE '" . $warenkorb['name'] . "' AND ort LIKE '" . $warenkorb['ort'] . "' AND geloescht!=1 $adresseprojekt AND kundennummer <> '' LIMIT 1"); } } else { $checkidemail = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE name='" . $this->app->DB->real_escape_string($warenkorb['name']) . "' AND strasse='" . $this->app->DB->real_escape_string($warenkorb['strasse']) . "' AND plz='" . $this->app->DB->real_escape_string($warenkorb['plz']) . "' AND ort='" . $this->app->DB->real_escape_string($warenkorb['ort']) . "' $adresseprojekt AND geloescht!=1 AND kundennummer <> '' LIMIT 1"); } if ($warenkorb['kundennummer'] != '' && !empty($validkundennummer) && $validkundennummer == $warenkorb['kundennummer']) { $kdrnummer = $warenkorb['kundennummer']; } elseif ($checkid != '') { $kdrnummer = $checkid; } elseif ($checkidemail != '') { $kdrnummer = $checkidemail; } else { $kdrnummer = ''; $checkidemail = ''; } return [$checkidemail, $kdrnummer]; } public function drawShopOrderTable($deletedRows) { $checkglobal = null; $htmltable = new HTMLTable(0, '100%', '', 3, 1, 'font-size:85%'); $htmltable->AddRowAsHeading(array('Import', 'Müll', 'Später', 'Projekt', 'Internet', 'Name', 'Bemerkung', 'Strasse', 'PLZ', 'Ort', 'Kd.Nr.', 'vorhanden', 'Land', 'Betrag', 'Offen', 'Zahlung', 'Partner')); $htmltable->ChangingRowColors('#e0e0e0', '#fff'); $shopid = $this->app->Secure->GetGET('shopid'); $where = ''; if (!empty($shopid)) { $where = 'AND sa.shopid=' . (int) $shopid; } $bestellnummer = $this->app->Secure->GetGET('bestellnummer'); if (!empty($bestellnummer)) { $bestellnummer = preg_replace('/[^\w-]/', '', $bestellnummer); $where .= " AND sa.bestellnummer='$bestellnummer'"; } $arr = $this->app->DB->SelectArr("SELECT sa.*, p.abkuerzung FROM shopimport_auftraege sa left join projekt p on sa.projekt = p.id WHERE sa.imported='0' AND sa.trash='0' $where ORDER BY sa.logdatei LIMIT 100"); if (is_array($arr) && (!empty($arr) ? count($arr) : 0) > 0) { //Alte Auftraege prüfen $alteauftraegeohnebestellnummer = $this->app->DB->Query("SELECT sa.* FROM shopimport_auftraege sa WHERE isnull(bestellnummer) AND sa.trash='0' LIMIT 100"); while ($row = $this->app->DB->Fetch_Assoc($alteauftraegeohnebestellnummer)) { if ($row['warenkorb'] != '') { if (!empty($row['jsonencoded'])) { $warenkorb = json_decode(base64_decode($row['warenkorb']), true); } else { $warenkorb = unserialize(base64_decode($row['warenkorb'])); } $this->app->DB->Update("UPDATE shopimport_auftraege set bestellnummer = '" . (isset($warenkorb['onlinebestellnummer']) ? $warenkorb['onlinebestellnummer'] : '') . "' where id = '" . $row['id'] . "'"); } else { $this->app->DB->Update("UPDATE shopimport_auftraege set bestellnummer = '' where id = '" . $row['id'] . "'"); } } $this->app->DB->free($alteauftraegeohnebestellnummer); $unbekanntezahlungsweisen = null; $enthaeltdoppeltenummern = false; $carr = $arr ? count($arr) : 0; for ($i = 0; $i < $carr; $i++) { if (empty($checkglobal) || !isset($checkglobal[$arr[$i]['shopid']])) { $checkglobal[$arr[$i]['shopid']] = null; if (($modulename = $this->app->DB->Select("SELECT modulename FROM shopexport WHERE id = '" . $arr[$i]['shopid'] . "' AND modulename <> '' AND shoptyp = 'intern'")) && $this->app->DB->Select("SELECT id FROM shopexport WHERE modulename = '" . $this->app->DB->real_escape_string($modulename) . "' AND id <> '" . $arr[$i]['shopid'] . "' LIMIT 1") ) { $shopsintern = $this->app->DB->SelectArr("SELECT id FROM shopexport WHERE id = '" . $arr[$i]['shopid'] . "' OR (modulename = '" . $this->app->DB->real_escape_string($modulename) . "' AND shoptyp = 'intern')"); if ($shopsintern) { foreach ($shopsintern as $vs) { $checkglobal[$arr[$i]['shopid']][] = " shopid = '" . $vs['id'] . "' "; } if ($this->app->erp->ModulVorhanden($modulename)) { /** @var ShopimporterBase $obj */ $obj = $this->app->erp->LoadModul($modulename); if ($obj && method_exists($obj, 'EinstellungenStruktur')) { $konfiguration = $obj->EinstellungenStruktur(); if ($konfiguration && isset($konfiguration['globalerauftragsnummernkreis']) && $konfiguration['globalerauftragsnummernkreis']) { } else { $checkglobal[$arr[$i]['shopid']] = null; } } else { $checkglobal[$arr[$i]['shopid']] = null; } } else { $checkglobal[$arr[$i]['shopid']] = null; } } } } } $carr = $arr ? count($arr) : 0; for ($i = 0; $i < $carr; $i++) { $projekt = $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id = '" . $arr[$i]['shopid'] . "' LIMIT 1"); $auftraegeaufspaeter = $this->app->DB->Select("SELECT auftraegeaufspaeter FROM shopexport WHERE id='" . $arr[$i]['shopid'] . "'"); if (!empty($arr[$i]['jsonencoded'])) { $warenkorb = json_decode(base64_decode($arr[$i]['warenkorb']), true); } else { $warenkorb = unserialize(base64_decode($arr[$i]['warenkorb'])); } foreach ($warenkorb as $key => $value) { if (is_string($warenkorb[$key])) { $warenkorb[$key] = trim($warenkorb[$key]); } } foreach ($warenkorb as $k => $v) { $warenkorb[$k] = $this->app->erp->fixeUmlaute($v); } $kundenurvonprojekt = $this->app->DB->Select("SELECT kundenurvonprojekt FROM shopexport WHERE id = '" . $arr[$i]['shopid'] . "' LIMIT 1"); $adresseprojekt = ''; if ($kundenurvonprojekt) { $adresseprojekt = $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id = '" . $arr[$i]['shopid'] . "' LIMIT 1"); } if (isset($warenkorb['subshop']) && $warenkorb['subshop']) { $subshopprojekt = $this->app->DB->Select("SELECT projekt FROM shopexport_subshop WHERE shop = '" . $arr[$i]['shopid'] . "' AND aktiv = 1 AND subshopkennung = '" . $this->app->DB->real_escape_string($warenkorb['subshop']) . "' LIMIT 1"); if ($subshopprojekt) { if (!$kundenurvonprojekt) { $adresseprojekt = $subshopprojekt; } $arr[$i]['abkuerzung'] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$adresseprojekt' LIMIT 1"); } } if ($kundenurvonprojekt) { $adresseprojekt = " AND projekt = '" . $adresseprojekt . "' "; } else { $adresseprojekt = ''; } $checkid = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE `name`='" . $this->app->DB->real_escape_string($warenkorb['name']) . "' AND abteilung='" . $this->app->DB->real_escape_string($warenkorb['abteilung']) . "' AND strasse='" . $this->app->DB->real_escape_string($warenkorb['strasse']) . "' AND plz='" . $this->app->DB->real_escape_string($warenkorb['plz']) . "' AND ort='" . $this->app->DB->real_escape_string($warenkorb['ort']) . "' AND kundennummer <> '' AND geloescht!=1 $adresseprojekt ORDER BY email='" . $this->app->DB->real_escape_string($warenkorb['email']) . "' DESC LIMIT 1"); if ($warenkorb['email'] != '') { if ($warenkorb['email'] !== 'amazon_import_bounce@nfxmedia.de') { $checkidemail = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE email='" . $warenkorb['email'] . "' and email <> '' $adresseprojekt AND geloescht!=1 AND kundennummer <> '' LIMIT 1"); } if ((String) $checkidemail === '') { $checkidemail = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE name LIKE '" . $warenkorb['name'] . "' AND ort LIKE '" . $warenkorb['ort'] . "' AND geloescht!=1 $adresseprojekt AND kundennummer <> '' LIMIT 1"); } } else { $checkidemail = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE name='" . $this->app->DB->real_escape_string($warenkorb['name']) . "' AND strasse='" . $this->app->DB->real_escape_string($warenkorb['strasse']) . "' AND plz='" . $this->app->DB->real_escape_string($warenkorb['plz']) . "' AND ort='" . $this->app->DB->real_escape_string($warenkorb['ort']) . "' $adresseprojekt AND geloescht!=1 AND kundennummer <> '' LIMIT 1"); } if ($warenkorb['kundennummer'] != '' && !empty($validkundennummer) && $validkundennummer == $warenkorb['kundennummer']) { $kdrnummer = $warenkorb['kundennummer']; $kdr_name = $this->app->DB->Select("SELECT name FROM adresse WHERE kundennummer='$kdrnummer' $adresseprojekt AND geloescht!=1 LIMIT 1"); $email = $this->app->DB->Select("SELECT email FROM adresse WHERE kundennummer='$kdrnummer' $adresseprojekt AND geloescht!=1 LIMIT 1"); $parts = explode("\n", wordwrap($kdr_name, 20, "\n")); $kdr_name = $parts[0]; $kdr_name = '
    ' . $kdr_name . ''; $email = '
    ' . $email . ''; $kdr_strasse = $this->app->DB->Select("SELECT strasse FROM adresse WHERE kundennummer='$kdrnummer' AND geloescht!=1 $adresseprojekt LIMIT 1"); $parts = explode("\n", wordwrap($kdr_strasse, 20, "\n")); $kdr_strasse = $parts[0]; $kdr_strasse = '
    ' . $kdr_strasse . ''; $kdr_plz = '
    ' . $this->app->DB->Select("SELECT plz FROM adresse WHERE kundennummer='$kdrnummer' AND geloescht!=1 $adresseprojekt LIMIT 1") . ''; $kdr_ort = '
    ' . $this->app->DB->Select("SELECT ort FROM adresse WHERE kundennummer='$kdrnummer' AND geloescht!=1 $adresseprojekt LIMIT 1") . ''; $checked = ''; } elseif ($checkid != '') { $checked = 'checked'; $kdrnummer = $checkid; //$kdr_name = "
    ".$this->app->DB->Select("SELECT name FROM adresse WHERE kundennummer='$kdrnummer' AND firma='".$this->app->User->GetFirma()."' LIMIT 1").""; $kdrArr = $this->app->DB->SelectRow("SELECT name, email, strasse, ort, plz FROM adresse WHERE kundennummer='$kdrnummer' AND geloescht!=1 $adresseprojekt LIMIT 1"); $kdr_name = $kdrArr['name']; $email = $kdrArr['email']; $parts = explode("\n", wordwrap($kdr_name, 20, "\n")); $kdr_name = $parts[0]; $kdr_name = '
    ' . $kdr_name . ''; $email = '
    ' . $email . ''; $kdr_strasse = $kdrArr['strasse']; $parts = explode("\n", wordwrap($kdr_strasse, 20, "\n")); $kdr_strasse = $parts[0]; $kdr_strasse = '
    ' . $kdr_strasse . ''; $kdr_plz = '
    ' . $kdrArr['plz'] . ''; $kdr_ort = '
    ' . $kdrArr['or'] . ''; } elseif ($checkidemail != '') { $checked = 'checked'; $kdrnummer = $checkidemail; $warenkorb['kundennummer'] = $kdrnummer; //$kdr_name = "
    ".$this->app->DB->Select("SELECT name FROM adresse WHERE kundennummer='$kdrnummer' AND firma='".$this->app->User->GetFirma()."' LIMIT 1").""; $kdrArr = $this->app->DB->SelectRow("SELECT name, email, strasse, ort, plz FROM adresse WHERE kundennummer='$kdrnummer' AND geloescht!=1 $adresseprojekt LIMIT 1"); $kdr_name = $kdrArr['name']; $email = $kdrArr['email']; $parts = explode("\n", wordwrap($kdr_name, 20, "\n")); $kdr_name = $parts[0]; $kdr_name = '
    ' . $kdr_name . ''; $email = '
    ' . $email . ''; $kdr_strasse = $kdrArr['strasse']; $parts = explode("\n", wordwrap($kdr_strasse, 40, "\n")); $kdr_strasse = $parts[0]; $kdr_strasse = '
    ' . $kdr_strasse . ''; $kdr_plz = '
    ' . $kdrArr['plz'] . ''; $kdr_ort = '
    ' . $kdrArr['ort'] . ''; } else { $checked = ''; $checkid = ''; $kdrnummer = ''; $checkidemail = ''; $kdr_name = ''; $kdr_strasse = ''; $kdr_plz = ''; $kdr_ort = ''; $email = ''; } if ($kdrnummer != '') { $kdr_addresse_id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$kdrnummer' AND geloescht!=1 $adresseprojekt LIMIT 1"); } else { $kdr_addresse_id = ''; } $warenkorb['name'] = $this->app->erp->LimitWord($warenkorb['name'], 20); $warenkorb['strasse'] = $this->app->erp->LimitWord($warenkorb['strasse'], 20); $htmltable->NewRow(); $doppelteonlinebestellnummer = false; if (!empty($warenkorb['onlinebestellnummer'])) { $check = $this->app->DB->Select("SELECT id from shopimport_auftraege where id <> '" . $arr[$i]['id'] . "' and shopid = '" . $arr[$i]['shopid'] . "' and bestellnummer = '" . $warenkorb['onlinebestellnummer'] . "' and trash = '0' LIMIT 1"); if ($check) { $doppelteonlinebestellnummer = true; $enthaeltdoppeltenummern = true; } elseif (!empty($checkglobal) && isset($checkglobal[$arr[$i]['shopid']]) && $checkglobal[$arr[$i]['shopid']]) { $check = $this->app->DB->Select("SELECT id from shopimport_auftraege where id <> '" . $arr[$i]['id'] . "' and (shopid = '" . $arr[$i]['shopid'] . "' OR " . (implode(" OR ", $checkglobal[$arr[$i]['shopid']])) . ") and bestellnummer = '" . $warenkorb['onlinebestellnummer'] . "' and trash = '0' LIMIT 1"); if ($check) { $doppelteonlinebestellnummer = true; $enthaeltdoppeltenummern = true; } } } $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol($arr[$i]['abkuerzung']); $htmltable->AddCol(($doppelteonlinebestellnummer ? '' : '') . $warenkorb['onlinebestellnummer'] . ($doppelteonlinebestellnummer ? '' : '')); $htmltable->AddCol($warenkorb['name'] . $kdr_name . '
    ' . $warenkorb['email'] . $email); $htmltable->AddCol($warenkorb['internebezeichnung']); $htmltable->AddCol($warenkorb['strasse'] . $kdr_strasse); $htmltable->AddCol($warenkorb['plz'] . $kdr_plz); $htmltable->AddCol($warenkorb['ort'] . $kdr_ort); if ($checkid != '') { $htmltable->AddCol(''); } else { $htmltable->AddCol(''); } $htmltable->AddCol(''); //$htmltable->AddCol(' '); $htmltable->AddCol($warenkorb['land']); $htmltable->AddCol(number_format($warenkorb['gesamtsumme'], 2, ',', '.')); $saldo_kunde = round($this->app->erp->SaldoAdresse($kdr_addresse_id), 2); if ($saldo_kunde > 0) { $saldo_kunde = '' . number_format($saldo_kunde, 2, ',', '.') . ''; } else { $saldo_kunde = '-'; } $htmltable->AddCol($saldo_kunde); $htmltable->AddCol($warenkorb['zahlungsweise']); $htmltable->AddCol($warenkorb['affiliate_ref']); //$htmltable->AddCol('Einzelimport verwerfen'); //$warenkorb[gesamtsumme] = str_replace(".","",$warenkorb[gesamtsumme]); $gesamtsumme = (isset($gesamtsumme) ? $gesamtsumme : 0) + $warenkorb['gesamtsumme']; $checkid = ''; $checkidemail = ''; $validkundennummer = ''; //$this->app->Tpl->Add('INHALT',"{$warenkorb[onlinebestellnummer]}{$warenkorb[name]}{$warenkorb[land]}{$warenkorb[gesamtsumme]}"); } } else { if ($deletedRows > 0) { $msg = $this->app->erp->base64_url_encode('
    Es wurden ' . $deletedRows . ' bereits importierte Datensätze entfernt.
    '); } else { $msg = $this->app->erp->base64_url_encode('
    Aktuell sind keine Aufträge in den Online-Shops vorhanden!
    '); } $this->app->Location->execute('Location: index.php?module=shopimport&action=list&msg=' . $msg); } $htmltable->NewRow(); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(''); $htmltable->AddCol(number_format($gesamtsumme, 2, ',', '.')); $htmltable->AddCol(''); $htmltable->AddCol(''); if ($enthaeltdoppeltenummern) { $this->app->Tpl->Add('INHALT', '
    Es wurde ein Auftrag aus einem Shop geholt, der bereits importiert wurde!
    '); } $this->app->Tpl->Add('INHALT', $htmltable->Get()); $this->app->Tpl->Add('INHALT', "

    Bedeutung: "); $this->app->Tpl->Set('EXTEND', ''); $this->app->Tpl->Parse('IMPORT', 'rahmen70.tpl'); $this->app->Tpl->Parse('PAGE', 'shopimport_import.tpl'); } public function ShopimportNavigation() { $id = $this->app->Secure->GetGET('id'); $tmp = new Navigation($this->app, $id); $this->app->Tpl->Set('ID', $id); $this->app->Tpl->Set('PAGE', $tmp->Get()); $this->app->BuildNavigation = false; } }