app=$app; if($intern) { return; } $this->limit_datensaetze=1; $this->app->ActionHandlerInit($this); $this->app->ActionHandler("create","ImportvorlageCreate"); $this->app->ActionHandler("edit","ImportvorlageEdit"); $this->app->ActionHandler("import","ImportvorlageImport"); $this->app->ActionHandler("list","ImportvorlageList"); $this->app->ActionHandler("delete","ImportvorlageDelete"); $this->app->ActionHandler("uebersicht","ImportvorlageUebersicht"); $this->app->ActionHandler("adressen","ImportvorlageAdressen"); $this->app->ActionHandler("adresseedit","ImportvorlageAdresseEdit"); $this->app->ActionHandler("rueckgaengig","ImportvorlageRueckgaengig"); $this->app->ActionHandler("formate","ImportvorlageFormate"); $this->app->ActionHandler("downloadcsv","ImportvorlageDownloadCsv"); $this->app->ActionHandler("downloadjson","ImportvorlageDownloadJson"); $this->app->ActionHandler("copy","ImportvorlageCopy"); $this->app->ActionHandlerListen($app); $this->app->erp->Headlines('Daten Import'); } /** * @param ApplicationCore $app * @param string $name * @param array $erlaubtevars * * @return array */ public function TableSearch($app, $name, $erlaubtevars) { $isAdmin = $this->app->User->GetType() === 'admin'; $id = (int)$this->app->Secure->GetGET('id'); switch ($name) { case 'importvorlage_list': $allowed = ['importvorlage' => ['import','list']]; $heading = array('','angelegt am','Bearbeiter', 'Template', 'Datei', 'Datensätze','Fortschritt', 'Status', 'Menü'); $width = array('1%','10%', '10%', '10%', '25%', '5%', '5%', '20%', '1%'); $datecols = [1]; $statusMapping = [ 'created' => 'nicht freigeben', 'in_queue' => 'freigegeben', 'cancelled' => 'abgebrochen', 'done' => 'abgeschlossen', 'complete' => 'abgeschlossen', 'error' => 'Fehler', 'in_progress' => 'wird ausgeführt', ]; $statusCol = 'CONCAT('; foreach($statusMapping as $status => $statusMessage) { $statusCol .= sprintf("IF(imd.status = '%s', '%s',", $this->app->DB->real_escape_string($status), $this->app->DB->real_escape_string($statusMessage) ); } $statusCol .= "'')".str_repeat(')', (!empty($statusMapping)?count($statusMapping):0)); $searchsql = [ 'adr.name', "DATE_FORMAT(imd.created_at,'%d.%m.%Y %H:%i:%s')", 'iv.bezeichnung', 'imd.filename', $statusCol, ]; $findcols = [ 'imd.id', 'imd.created_at', 'adr.name', 'iv.bezeichnung', 'imd.filename', 'count_rows', 'imported_rows', $statusCol, 'imd.id' ]; $menu = '
'; $menu .= 'aktivieren'; $menu .= ' '; $menu .= 'löschen'; $menu .= '
'; $menucol = (!empty($heading)?count($heading):0); $filterComplete = $this->app->YUI->TableSearchFilter($name,1 ,'importvorlage-filter-complete',0,0,'checkbox'); $filterCancelled = $this->app->YUI->TableSearchFilter($name,2 ,'importvorlage-filter-cancelled',0,0,'checkbox'); $sql = "SELECT imd.id, CONCAT(''), DATE_FORMAT(imd.created_at,'%d.%m.%Y %H:%i:%s'),adr.name, iv.bezeichnung,imd.filename, imd.count_rows,imd.imported_rows, CONCAT($statusCol,' ', imd.message), imd.id FROM `importmasterdata` AS `imd` INNER JOIN `importvorlage` AS `iv` ON imd.template_id = iv.id INNER JOIN `user` AS `u` ON imd.user_id = u.id LEFT JOIN `adresse` AS `adr` ON u.adresse = adr.id "; $where = ' imd.id > 0 '; if(!$isAdmin) { $where .= sprintf(' AND imd.user_id = %d ', $this->app->User->GetID()); } if($id > 0) { $where .= sprintf(' AND imd.template_id = %d ', $id); } if(!$filterComplete) { $where .= " AND imd.status NOT IN ('complete', 'done') "; } if(!$filterCancelled) { $where .= " AND imd.status <> 'cancelled' "; } if($filterCancelled && $filterCancelled) { $where .= " AND imd.status IN ('complete', 'done', 'cancelled') "; } elseif($filterCancelled) { $where .= " AND imd.status = 'cancelled' "; } elseif($filterComplete) { $where .= " AND imd.status IN ('complete', 'done') "; } $fastcount = "SELECT COUNT(imd.id) FROM `importmasterdata` AS `imd` INNER JOIN `importvorlage` AS `iv` ON imd.template_id = iv.id INNER JOIN `user` AS `u` ON imd.user_id = u.id LEFT JOIN `adresse` AS `adr` ON u.adresse = adr.id "; break; } $erg = []; foreach($erlaubtevars as $k => $v) { if(isset($$v)){ $erg[$v] = $$v; } } return $erg; } public function Install() { $this->app->erp->CheckTable('importmasterdata'); $this->app->erp->CheckColumn('user_id', 'INT(11)', 'importmasterdata', 'DEFAULT 0 NOT NULL'); $this->app->erp->CheckColumn('template_id', 'INT(11)', 'importmasterdata', 'DEFAULT 0 NOT NULL'); $this->app->erp->CheckColumn('count_rows', 'INT(11)', 'importmasterdata', 'DEFAULT 0 NOT NULL'); $this->app->erp->CheckColumn('imported_rows', 'INT(11)', 'importmasterdata', 'DEFAULT 0 NOT NULL'); $this->app->erp->CheckColumn('filename', 'VARCHAR(255)', 'importmasterdata', "DEFAULT '' NOT NULL "); $this->app->erp->CheckColumn('status', 'VARCHAR(255)', 'importmasterdata', "DEFAULT 'created' NOT NULL "); $this->app->erp->CheckColumn('message', 'VARCHAR(255)', 'importmasterdata', "DEFAULT '' NOT NULL "); $this->app->erp->CheckAlterTable( "ALTER TABLE `importmasterdata` CHANGE `message` `message` VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '';" ); $this->app->erp->CheckColumn('created_at', 'TIMESTAMP', 'importmasterdata', 'DEFAULT CURRENT_TIMESTAMP NOT NULL'); $this->app->erp->CheckIndex('importmasterdata', 'status'); $this->app->erp->CheckIndex('importmasterdata', 'user_id'); $this->app->erp->CheckIndex('importmasterdata', 'template_id'); $this->app->erp->CheckProzessstarter('Importvorlage', 'periodisch', '5', '2017-01-01 00:00:00', 'cronjob', 'importvorlage', 1); } public function doCronjob() { $jobs = $this->app->DB->SelectArr( sprintf( "SELECT * FROM `importmasterdata` WHERE `status` = 'in_queue' ORDER BY `created_at` LIMIT 1" ) ); if(empty($jobs)) { return; } foreach($jobs as $job) { $job = $this->app->DB->SelectRow( sprintf( "SELECT * FROM `importmasterdata` WHERE `status` = 'in_queue' AND `id` = %d ", $job['id'] ) ); if(empty($job)) { continue; } if(empty($job['filename'])) { $this->app->DB->Update( sprintf( "UPDATE `importmasterdata` SET `status` = 'error', `message` = 'keine Datei' WHERE `id` = %d ", $job['id'] ) ); continue; } if(!is_file($job['filename'])) { $this->app->DB->Update( sprintf( "UPDATE `importmasterdata` SET `status` = 'error', `message` = 'Datei nicht gefunden' WHERE `id` = %d ", $job['id'] ) ); continue; } $parameter = $this->app->DB->SelectRow( sprintf( 'SELECT * FROM importvorlage WHERE id = %d', $job['template_id'] ) ); if(empty($parameter)) { $this->app->DB->Update( sprintf( "UPDATE `importmasterdata` SET `status` = 'error', `message` = 'Template nicht gefunden' WHERE `id` = %d ", $job['id'] ) ); continue; } $parameter['stueckliste_csv'] = $job['filename']; $parameter['is_cronjob'] = true; $parameter['importmasterdata_id'] = $job['id']; $this->ImportvorlageDo($parameter['charset'], $parameter, true); $this->app->DB->Update( sprintf( "UPDATE `importmasterdata` SET `status` = 'done', `message` = '' WHERE `id` = %d ", $job['id'] ) ); } } public function ImportvorlageCopy() { $id = (int)$this->app->Secure->GetGET('id'); /** @var ImportTemplateJsonService $importService */ $importService = $this->app->Container->get('ImportTemplateJsonService'); try { $importTemplate = $importService->getImportTemplate($id); $label = $importTemplate->getLabel(); $importTemplate->updateLabel($label . ' - Kopie'); $newimportTemplateId = $importService->insertImportTemplate($importTemplate); $msg = $this->app->erp->base64_url_encode('
Kopie erfolgreich erstellt.
'); $this->app->Location->execute('index.php?module=importvorlage&action=edit&id=' . $newimportTemplateId . '&msg=' . $msg); } catch (ImportTemplateNotFoundException $e) { $msg = '{|Keine Kopie angelegt. Die ID existiert in der Datenbank nicht.|}'; } catch (RuntimeException $e) { $msg = '{|Die Kopie konnte nicht angelegt werden.|}'; } if(!empty($msg)){ $msg = $this->app->erp->base64_url_encode('
' . $msg . '
'); $this->app->Location->execute('index.php?module=importvorlage&action=list&msg=' . $msg); } } public function ImportvorlageDownloadJson(){ $id = (int)$this->app->Secure->GetGET('id'); $this->GenerateJsonDownload($id); $this->app->ExitXentral(); } private function GenerateJsonDownload($importvorlageId){ /** @var ImportTemplateJsonService $importService */ $importService = $this->app->Container->get('ImportTemplateJsonService'); $importTemplate = $importService->getImportTemplate($importvorlageId); $config = new JsonConfig(JSON_PRETTY_PRINT); /** @var JsonExporter $jsonExporter */ $jsonExporter = new JsonExporter($config); $fileName = StringUtil::toFilename($importTemplate->getLabel()); $handle = $jsonExporter->exportToResource('php://memory', $importTemplate); rewind($handle); $stat = fstat($handle); header('Cache-Control: must-revalidate'); header('Pragma: must-revalidate'); header('Content-type: text/plain'); header('Content-Disposition: attachment; filename="'.$fileName.'.json'); header('Content-Length: ' . $stat['size']); fpassthru($handle); fclose($handle); $this->app->ExitXentral(); } public function ImportvorlageDownloadCsv(){ $id = (int)$this->app->Secure->GetGET('id'); $this->GenerateCsvDownload($id); $this->app->ExitXentral(); } /** * @param int $patternId */ private function GenerateCsvDownload($patternId){ $sql = "SELECT fields FROM importvorlage WHERE id=%d"; $sql = sprintf($sql,$patternId); $fields = $this->app->DB->Select($sql); if(!empty($fields)){ $this->cleanFields($fields); $colNames = explode(';',$fields); foreach ($colNames as $i => $c){ $colNames[$i] = str_replace(':','',strstr(trim($c),':')); } $config = new CsvConfig(';', '"'); $exporter = new CsvExporter($config); $data = new DataCollection([$colNames]); $handle = $exporter->exportToResource('php://memory', $data); rewind($handle); $stat = fstat($handle); header('Cache-Control: must-revalidate'); header('Pragma: must-revalidate'); header('Content-type: text/csv'); header('Content-Disposition: attachment; filename="tabellenvorlage.csv"'); header('Content-Length: ' . $stat['size']); fpassthru($handle); fclose($handle); $this->app->ExitXentral(); } } /** * @param string $fields * * @return string */ private function cleanFields($fields){ $exploded = preg_split("/[\r\n]+/",$fields); $ret = []; foreach ($exploded as $e){ $e = str_replace(strstr($e,';'),'',$e); $ret[] = $e; } $ret = implode(';'.PHP_EOL,$ret).';'; return $ret; } public function ImportvorlageFormate(){ $this->ImportvorlageMenu(); $this->app->Tpl->Parse('PAGE','importvorlage_formate.tpl'); } public function ImportvorlageAdresseEdit() { $this->app->Tpl->Parse('TAB1','importvorlage_uebersicht.tpl'); $this->app->Tpl->Set('TABTEXT','Import'); $this->app->Tpl->Parse('PAGE','tabview.tpl'); } public function ImportvorlageUebersicht() { $hasRight = $this->app->erp->RechteVorhanden('belegeimport', 'list'); if(!$hasRight){ $this->app->Tpl->Set('BELEGEIMPORTSTART',''); } $this->app->Tpl->Parse('TAB1','importvorlage_uebersicht.tpl'); $this->app->Tpl->Set('TABTEXT','Import'); $this->app->Tpl->Parse('PAGE','tabview.tpl'); } public function ImportvorlageAdressen() { $this->app->YUI->TableSearch('TAB1','adresse_import'); $this->app->erp->MenuEintrag('index.php?module=importvorlage&action=uebersicht','Zurück zur Übersicht'); $this->app->Tpl->Set('TABTEXT','Import'); $this->app->Tpl->Parse('PAGE','tabview.tpl'); } public function ImportvorlageRueckgaengig() { $sid = $this->app->Secure->GetGET('sid'); if($sid <= 0) { return; } $tmp = $this->app->DB->SelectRow( sprintf( "SELECT *,DATE_FORMAT(`zeitstempel`,'%%d.%%m.%%Y %%H:%%i') as zeit FROM `importvorlage_log` WHERE `ersterdatensatz` = 1 AND `user`= %d ORDER BY `zeitstempel` DESC LIMIT 1", $this->app->User->GetID() ) ); if(empty($tmp) || $tmp['id']!=$sid) { return; } $zeitstempel = $this->app->DB->Select( sprintf( 'SELECT `zeitstempel` FROM `importvorlage_log` WHERE `id` = %d LIMIT 1', $sid ) ); $this->app->erp->ImportvorlageLogDelete($zeitstempel); $msg=$this->app->erp->base64_url_encode("
Import rückgängig gemacht.
"); $this->app->Location->execute('index.php?module=importvorlage&action=list&msg='.$msg); } public function ImportvorlageCreate() { $this->ImportvorlageMenu(); parent::ImportvorlageCreate(); } public function ImportvorlageDelete() { $id = $this->app->Secure->GetGET('id'); if(is_numeric($id)) { $this->app->DB->Delete( sprintf( 'DELETE FROM `importvorlage` WHERE `id` = %d', $id ) ); $msg=$this->app->erp->base64_url_encode("
Die Importvorlagen wurde gelöscht!
"); $this->app->Location->execute('index.php?module=importvorlage&action=list&msg='.$msg); } $this->ImportvorlageList(); } /** * @param int $jobId * * @return array */ protected function getJobById($jobId) { $job = $this->app->DB->SelectRow(sprintf('SELECT * FROM `importmasterdata` WHERE `id` = %d', $jobId)); if(empty($job)) { $job = []; } return $job; } /** * @param string $fileName * * @return bool */ public function isValidJobFile($fileName) { if(empty($fileName)) { return false; } $folder = $this->app->erp->GetTMP(); if(stripos($fileName, $folder) !== 0) { return false; } $file = substr($fileName, strlen($folder)); if(strpos($file, '..') !== false) { return false; } return is_file($fileName); } /** * @param int $jobId * * @return array */ public function deleteJob($jobId) { $ret = ['status' => 0]; $job = $this->getJobById($jobId); if(empty($job)) { return $ret; } if($this->isValidJobFile($job['filename'])) { @unlink($job['filename']); } $this->app->DB->Update( sprintf( "UPDATE `importmasterdata` SET `status` = 'cancelled' WHERE `id` = %d AND `status` NOT IN ('done', 'complete')", $jobId ) ); if($this->app->DB->affected_rows() > 0) { $ret['status'] = 1; } return $ret; } /** * @param int $jobId * * @return array */ public function activateJob($jobId) { $ret = ['status' => 0]; $job = $this->getJobById($jobId); if(empty($job)) { return $ret; } if($this->isValidJobFile($job['filename'])) { $this->app->DB->Update( sprintf( "UPDATE `importmasterdata` SET `status` = 'in_queue' WHERE `id` = %d", $jobId ) ); if($this->app->DB->affected_rows() > 0) { $ret['status'] = 1; } } else { $ret['error'] = 'File not found'; } return $ret; } /** * @param string $selection * @param array $jobIds * * @return array */ protected function batch($selection, $jobIds) { $ret = ['status' => 0]; if(empty($jobIds) || !in_array($selection, ['activate', 'delete'])) { return $ret; } $ret['ok'] = 0; $ret['not_ok'] = 0; if($selection === 'activate') { foreach($jobIds as $jobId) { $subRet = $this->activateJob($jobId); if(!empty($subRet['status'])) { $ret['ok']++; $ret['status'] = 1; } else{ $ret['not_ok']++; } } return $ret; } foreach($jobIds as $jobId) { $subRet = $this->deleteJob($jobId); if(!empty($subRet['status'])){ $ret['ok']++; $ret['status'] = 1; } else{ $ret['not_ok']++; } } return $ret; } public function ImportvorlageList() { $cmd = $this->app->Secure->GetGET('cmd'); if($cmd === 'batch') { $selection = $this->app->Secure->GetPOST('selection'); $jobIds = $this->app->Secure->GetPOST('jobIds'); $json = $this->batch($selection, $jobIds); header('Content-Type: application/json'); echo json_encode($json); $this->app->ExitXentral(); } if($cmd === 'deletejob') { $json = $this->deleteJob($this->app->Secure->GetPOST('jobid')); header('Content-Type: application/json'); echo json_encode($json); $this->app->ExitXentral(); } if($cmd === 'activatejob') { $json = $this->activateJob($this->app->Secure->GetPOST('jobid')); header('Content-Type: application/json'); echo json_encode($json); $this->app->ExitXentral(); } $this->ImportvorlageMenu(); if($this->app->DB->Select('SELECT COUNT(id) FROM importvorlage') <=0) { /* Erst ab 17.1 mit Wiedervorlagen und Notizen $this->app->DB->Insert("INSERT INTO `importvorlage` (`id`, `bezeichnung`, `fields`, `internebemerkung`, `ziel`, `letzterimport`, `mitarbeiterletzterimport`, `importtrennzeichen`, `importerstezeilenummer`, `importdatenmaskierung`, `importzeichensatz`) VALUES ('', 'Wiedervorlagen', '1:datum_faellig;\r\n2:uhrzeit_faellig;\r\n3:kundennummer;\r\n4:mitarbeiternummer;\r\n5:betreff;\r\n6:text;\r\n7:abgeschlossen;', '', 'wiedervorlagen', '0000-00-00 00:00:00', '', 'semikolon', 2, 'gaensefuesschen', '');"); $this->app->DB->Insert("INSERT INTO `importvorlage` (`id`, `bezeichnung`, `fields`, `internebemerkung`, `ziel`, `letzterimport`, `mitarbeiterletzterimport`, `importtrennzeichen`, `importerstezeilenummer`, `importdatenmaskierung`, `importzeichensatz`) VALUES ('', 'Notizen', '1:datum;\r\n2:uhrzeit;\r\n3:kundennummer;\r\n4:mitarbeiternummer;\r\n5:betreff;\r\n6:text;', '', 'notizen', '0000-00-00 00:00:00', '', 'semikolon', 2, 'gaensefuesschen', '');"); */ $this->app->DB->Insert("INSERT INTO `importvorlage` (`id`, `bezeichnung`, `fields`, `internebemerkung`, `ziel`, `letzterimport`, `mitarbeiterletzterimport`, `importtrennzeichen`, `importerstezeilenummer`, `importdatenmaskierung`, `importzeichensatz`) VALUES ('', 'Artikel Stücklisten erstellen (nach normalen Artikelimport)', '1:nummer;\r\n2:stuecklistevonartikel;\r\n3:stuecklistemenge;', '', 'artikel', '0000-00-00 00:00:00', '', 'semikolon', 2, 'gaensefuesschen', '');"); $this->app->DB->Insert("INSERT INTO `importvorlage` (`id`, `bezeichnung`, `fields`, `internebemerkung`, `ziel`, `letzterimport`, `mitarbeiterletzterimport`, `importtrennzeichen`, `importerstezeilenummer`, `importdatenmaskierung`, `importzeichensatz`) VALUES ('', 'Artikel-Varianten verknüpfen (nach normalen Artikelimport)', '1:nummer;\r\n2:variante_von;', '', 'artikel', '0000-00-00 00:00:00', '', 'semikolon', 2, 'gaensefuesschen', '');"); $this->app->DB->Insert("INSERT INTO `importvorlage` (`id`, `bezeichnung`, `fields`, `internebemerkung`, `ziel`, `letzterimport`, `mitarbeiterletzterimport`, `importtrennzeichen`, `importerstezeilenummer`, `importdatenmaskierung`, `importzeichensatz`) VALUES ('', 'Artikel', '1:nummer;\r\n2:name_de;\r\n3:artikelbeschreibung_de;\r\n4:kurztext_de;\r\n5:internerkommentar;\r\n6:hersteller;\r\n7:ean;\r\n8:gewicht;\r\n9:lieferantennummer;\r\n10:lieferantbestellnummer;\r\n11:lieferanteinkaufnetto;\r\n12:lieferanteinkaufmenge;\r\n13:verkaufspreis1netto;\r\n14:verkaufspreis1menge;\r\n15:lagerartikel;\r\n16:lager_platz;\r\n17:lager_menge_total;\r\n18:mindestlager;', '', 'artikel', '0000-00-00 00:00:00', '', 'semikolon', 2, 'gaensefuesschen', '');"); $this->app->DB->Insert("INSERT INTO `importvorlage` (`id`, `bezeichnung`, `fields`, `internebemerkung`, `ziel`, `letzterimport`, `mitarbeiterletzterimport`, `importtrennzeichen`, `importerstezeilenummer`, `importdatenmaskierung`, `importzeichensatz`) VALUES ('', 'Ansprechpartner', '1:kundennummer;\r\n2:name;\r\n3:typ;\r\n4:email;\r\n5:telefon;\r\n6:telefax;\r\n7:mobil;\r\n8:strasse;\r\n9:plz;\r\n10:ort;\r\n11:abteilung;\r\n12:anschreiben;', '', 'adresse', '0000-00-00 00:00:00', '', 'semikolon', 2, 'gaensefuesschen', '');"); $this->app->DB->Insert("INSERT INTO `importvorlage` (`id`, `bezeichnung`, `fields`, `internebemerkung`, `ziel`, `letzterimport`, `mitarbeiterletzterimport`, `importtrennzeichen`, `importerstezeilenummer`, `importdatenmaskierung`, `importzeichensatz`) VALUES ('', 'Lieferanten', '1:lieferantennummer;\r\n2:firma;\r\n3:typ;\r\n4:strasse;\r\n5:plz;\r\n6:ort;\r\n7:telefon;\r\n8:mobil;\r\n9:telefax;\r\n10:internetseite;\r\n11:ansprechpartner;\r\n12:anschreiben;\r\n13:email;\r\n14:land;\r\n15:sprache;\r\n16:kundennummerlieferant;\r\n17:zahlungsweiselieferant;\r\n18:zahlungszieltagelieferant;\r\n19:zahlungszieltageskontolieferant;\r\n20:zahlungszielskontolieferant;\r\n21:sonstiges;', '', 'adresse', '0000-00-00 00:00:00', '', 'semikolon', 2, 'gaensefuesschen', '');"); $this->app->DB->Insert("INSERT INTO `importvorlage` (`id`, `bezeichnung`, `fields`, `internebemerkung`, `ziel`, `letzterimport`, `mitarbeiterletzterimport`, `importtrennzeichen`, `importerstezeilenummer`, `importdatenmaskierung`, `importzeichensatz`) VALUES ('', 'Geschäftskunden', '1:kundennummer;\r\n2:firma;\r\n3:typ;\r\n4:strasse;\r\n5:plz;\r\n6:ort;\r\n7:telefon;\r\n8:mobil;\r\n9:telefax;\r\n10:internetseite;\r\n11:ansprechpartner;\r\n12:anschreiben;\r\n13:email;\r\n14:land;\r\n15:sprache;\r\n16:ustid;\r\n17:steuernummer;\r\n18:zahlungsweise;\r\n19:zahlungszieltage;\r\n20:zahlungszieltageskonto;\r\n21:zahlungszielskonto;\r\n22:sonstiges;', '', 'adresse', '0000-00-00 00:00:00', '', 'semikolon', 2, 'gaensefuesschen', '');"); $this->app->DB->Insert("INSERT INTO `importvorlage` (`id`, `bezeichnung`, `fields`, `internebemerkung`, `ziel`, `letzterimport`, `mitarbeiterletzterimport`, `importtrennzeichen`, `importerstezeilenummer`, `importdatenmaskierung`, `importzeichensatz`) VALUES ('', 'Privatkunden', '1:kundennummer;\r\n2:name;\r\n3:typ;\r\n4:strasse;\r\n5:plz;\r\n6:ort;\r\n7:telefon;\r\n8:mobil;\r\n9:telefax;\r\n10:email;\r\n11:anschreiben;\r\n12:land;\r\n13:sprache;\r\n14:sonstiges;', '', 'adresse', '0000-00-00 00:00:00', '', 'semikolon', 2, 'gaensefuesschen', '');"); } /* $tmp = $this->app->DB->SelectArr("SELECT *,DATE_FORMAT(zeitstempel,'%d.%m.%Y %H:%i') as zeit FROM importvorlage_log WHERE ersterdatensatz='1' ORDER by zeitstempel DESC LIMIT 1"); if($tmp[0]['id'] > 0 && $tmp[0]['tabelle']=="adresse") { $name_import = $this->app->DB->Select("SELECT bezeichnung FROM importvorlage WHERE id='".$tmp[0]['importvorlage']."' LIMIT 1"); $user_name = $this->app->DB->Select("SELECT a.name FROM user u LEFT JOIN adresse a ON a.id=u.adresse WHERE u.id='".$tmp[0]['user']."' LIMIT 1"); $this->app->Tpl->Set('MESSAGE',"
Letzter Adressimport: $name_import am ".$tmp[0]['zeit']." Uhr von $user_name (Import rückgängig machen).
"); } */ $jsonupload = $this->app->Secure->GetPost("jsonupload"); if(!empty($jsonupload)){ $msg = $this->installJsonTemplate(); if(!empty($msg)){ $msg=$this->app->erp->base64_url_encode('
'.$msg.'
'); $this->app->Location->execute('index.php?module=importvorlage&action=list&msg='.$msg); } } $this->app->YUI->TableSearch('TAB1', 'importvorlage'); $this->app->YUI->TableSearch('TAB2', 'importvorlage_list', 'show', '', '', basename(__FILE__), __CLASS__); $this->app->erp->checkActiveCronjob('importvorlage'); $this->app->Tpl->Parse('PAGE', 'importvorlage_overview.tpl'); //parent::ImportvorlageList(); } public function installJsonTemplate(){ $msg=''; if(!empty($_FILES['jsonfile']['tmp_name'])){ $jsonfile = $_FILES['jsonfile']; if($jsonfile['type']=='application/json'){ if($jsonfile['size']>0){ $content = file_get_contents($jsonfile['tmp_name']); $templateData = json_decode($content,true); /** @var ImportTemplateJsonService $importService */ $importService = $this->app->Container->get('ImportTemplateJsonService'); try{ $templateId = $importService->insertAndValidateImportTemplate($templateData); if(empty($templateId)){ $msg ='{|Fehler beim Anlegen der Vorlage.|}'; } } catch(InvalidTemplateDataException $e){ $msg = '{|Die Vorlagendatei enthält nicht genügend oder falsche Daten. Bitte Bezeichnung und CSV Felder prüfen.|}'; } } else{ $msg ='{|Die Datei hat keinen Inhalt.|}'; } } else{ $msg = '{|Die hochgeladene Datei hat das falsche Dateiformat.|}'; } } else{ $msg = '{|Keine Datei hochgeladen.|}'; } if(empty($msg)){ $msg = $this->app->erp->base64_url_encode('
Vorlage erfolgreich importiert.
'); $this->app->Location->execute('index.php?module=importvorlage&action=edit&id='.$templateId.'&msg='.$msg); } return $msg; } public function ImportvorlageMenu() { $id = $this->app->Secure->GetGET('id'); $bezeichnung = empty($id)?'':$this->app->DB->Select( sprintf( 'SELECT `bezeichnung` FROM `importvorlage` WHERE `id` = %d LIMIT 1', $id ) ); if($this->app->Secure->GetGET('action')==='list') { $this->app->erp->MenuEintrag('index.php?module=importvorlage&action=list', 'Übersicht'); $this->app->erp->MenuEintrag('index.php?module=importvorlage&action=uebersicht','Zurück zur Übersicht'); } else { $this->app->erp->MenuEintrag('index.php?module=importvorlage&action=edit&id='.$id,'Details'); //if($this->app->Secure->GetGET("action")!="create") $this->app->erp->MenuEintrag('index.php?module=importvorlage&action=import&id='.$id,'Import starten: CSV Datei heraufladen'); $this->app->erp->MenuEintrag('index.php?module=importvorlage&action=formate&id='.$id,'Formate'); $this->app->erp->MenuEintrag('index.php?module=importvorlage&action=list','Zurück zur Übersicht'); } $this->importVorlagePopup(); } public function importVorlagePopup(){ $this->app->ModuleScriptCache->IncludeJavascriptFiles('importTemplate', [ './classes/Modules/ImportTemplate/www/js/importtemplate_json_file_upload.js', ]); } public function ImportvorlageEdit() { $this->ImportvorlageMenu(); $id = (int)$this->app->Secure->GetGET('id'); $this->app->Tpl->Set('CSVDOWNLOADLINK','index.php?module=importvorlage&action=downloadcsv&id='.$id); parent::ImportvorlageEdit(); } /** * @param int $id * * @return array|null */ function ImportvorlageGetFields($id) { $fields = $this->cleanFields( $this->app->DB->Select( sprintf( 'SELECT `fields` FROM `importvorlage` WHERE `id` = %d LIMIT 1', $id ) ) ); $fieldsarray = explode(';',$fields); $cFieldsarray = (!empty($fieldsarray)?count($fieldsarray):0); for($i=0;$i<$cFieldsarray;$i++) { $fieldsarray_items = explode(':',$fieldsarray[$i]); $fieldsarray_items[0] = str_replace('!','',$fieldsarray_items[0]); if($fieldsarray_items[1]!='') { if(strpos($fieldsarray_items[0],'"') === false) { $csv_fields[$fieldsarray_items[0]]= $fieldsarray_items[1]; $csv_fields_keys[] = $fieldsarray_items[0]; } } } return $csv_fields; } /** * @param int $id * @param null|array $parameter * * @return bool */ function ImportvorlageGetFieldsNew($id, $parameter = null) { if(empty($parameter) || empty($parameter['fields'])) { $fields = $this->app->DB->Select( sprintf( 'SELECT `fields` FROM `importvorlage` WHERE `id` = %d LIMIT 1', $id ) ); } else { $fields = $parameter['fields']; } $fields = $this->cleanFields($fields); $fieldsarray = explode(';',$fields); //for($i=0;$i<(!empty($fieldsarray)?count($fieldsarray):0);$i++) foreach($fieldsarray as $key => $fieldsrow) { $fieldsarray_items = explode(':',$fieldsrow,3); $fieldsarray_items1 = trim(str_replace('!','',$fieldsarray_items[1])); if($fieldsarray_items[1]!=""){ if(strpos($fieldsarray_items[0],'"') === false) { $erg[$key]['nr'] = trim($fieldsarray_items[0]); $erg[$key]['field'] = $fieldsarray_items1; if(strpos($fieldsarray_items[1],'!') !== false) { $erg[$key]['inv'] = true; } } else { $erg[$key]['field'] = $fieldsarray_items1; $erg[$key]['vorlage'] = trim(trim($fieldsarray_items[0]),'"'); } if(isset($fieldsarray_items[2]) && trim($fieldsarray_items[2])){ $erg[$key]['bedingung'] = trim($fieldsarray_items[2]); } } } if(isset($erg)) { return $erg; } return false; } /** * @param int $id * * @return array|null */ function ImportvorlageGetFieldsInverse($id) { $fields = $this->cleanFields( $this->app->DB->Select( sprintf( 'SELECT `fields` FROM `importvorlage` WHERE `id` = %d LIMIT 1', $id ) ) ); $fieldsarray = explode(';',$fields); $cFieldsarray = (!empty($fieldsarray)?count($fieldsarray):0); for($i=0;$i<$cFieldsarray;$i++) { $fieldsarray_items = explode(':',$fieldsarray[$i]); if($fieldsarray_items[1]!=''){ if(strpos($fieldsarray_items[0],'"') === false){ if(strpos($fieldsarray_items[1],'!') !== false){ $csv_fields[$fieldsarray_items[0]] = true; } else { $csv_fields[$fieldsarray_items[0]] = false; } } } } return $csv_fields; } /** * @param int $id * * @return bool|array */ function ImportvorlageGetVorlage($id) { $fields = $this->cleanFields( $this->app->DB->Select( sprintf( 'SELECT `fields` FROM `importvorlage` WHERE `id` = %d LIMIT 1', $id ) ) ); $fieldsarray = explode(';',$fields); $cFieldsarray = (!empty($fieldsarray)?count($fieldsarray):0); for($i=0;$i<$cFieldsarray;$i++) { $fieldsarray_items = explode(':',$fieldsarray[$i]); if($fieldsarray_items[1]!=''){ if(strpos($fieldsarray_items[0],'"') !== false) { $vorlage[trim($fieldsarray_items[1])] = trim(trim($fieldsarray_items[0]),'"'); } } } if(isset($vorlage)) { return $vorlage; } return false; } /** * @param null|int $id */ public function ImportvorlageImport($id = null) { $_id = $id; if(!$_id) { $id = (int)$this->app->Secure->GetGET('id'); $this->app->erp->MenuEintrag('index.php?module=importvorlage&action=edit&id='.$id,'Details'); $this->app->erp->MenuEintrag('index.php?module=importvorlage&action=import&id='.$id,'Import starten: CSV Datei heraufladen'); $this->app->erp->MenuEintrag('index.php?module=importvorlage&action=formate&id='.$id,'Formate'); } set_time_limit (0); $upload = $this->app->Secure->GetPOST('upload'); $selcharsets = array('UTF8'=>'UTF-8','ISO-8859-1'=>'ISO-8859-1','CP850'=>'CP850'); $sel = ''; $this->app->Tpl->Set('SELCHARSET',$sel); $this->app->Tpl->Add('JAVASCRIPT',' $(document).ready(function() { $("#selcharset").on("change",function(){ $("#charset").val($("#selcharset").val()); }); }); '); $importVorlageRow = $this->app->DB->SelectRow( sprintf('SELECT * FROM importvorlage WHERE id=%d LIMIT 1', (int)$id) ); $bezeichnung = $importVorlageRow['bezeichnung']; $importtrennzeichen = $importVorlageRow['importtrennzeichen']; $importerstezeilenummer = $importVorlageRow['importerstezeilenummer']; $importdatenmaskierung = $importVorlageRow['importdatenmaskierung']; $importzeichensatz = $importVorlageRow['importzeichensatz']; $fields = $this->cleanFields($importVorlageRow['fields']); $ziel = $importVorlageRow['ziel']; $utf8decode = 0;//$this->app->DB->Select("SELECT utf8decode FROM importvorlage WHERE id='$id' LIMIT 1"); $fieldset = $this->ImportvorlageGetFieldsNew($id); $importtrennzeichen = $this->formatSeprator($importtrennzeichen); if($importdatenmaskierung==='gaensefuesschen') { $importdatenmaskierung='"'; } //$number_of_fields = (!empty($csv_fields)?count($csv_fields):0); $limit_erreicht = false; if($upload!='') { $isCronjobActive = $this->app->DB->Select( "SELECT `id` FROM `prozessstarter` WHERE `aktiv` = 1 AND `parameter` = 'importvorlage' LIMIT 1" ); $stueckliste_csv = $this->app->erp->GetTMP().'importvorlage'.$this->app->User->GetID(); if (!move_uploaded_file($_FILES['userfile']['tmp_name'], $stueckliste_csv)) { //$importfilename = $_FILES['userfile']['name']; $msg = $this->app->erp->base64_url_encode("
Die Datei '".$stueckliste_csv."' konnte nicht geöffnet werden. Eventuell ist die Datei zu groß oder die Schreibrechte stimmen nicht!
"); $this->app->Location->execute("index.php?module=importvorlage&action=import&id=$id&msg=$msg"); } ini_set('auto_detect_line_endings', true); if (($handle = fopen($stueckliste_csv, 'r')) !== FALSE) { $rowcounter = 0; $rowcounter_real = 0; $this->ImportPrepareHeader($ziel, $fieldset); while (($data = fgetcsv($handle, 0, $importtrennzeichen)) !== FALSE) { $rowcounter++; if($rowcounter >= $importerstezeilenummer) { $rowcounter_real++; if($limit_erreicht) { continue; } foreach($data as $key=>$value) { if($charset && strtoupper($charset) !== 'UTF-8' && strtoupper($charset) !== 'UTF8') { $data[$key] = iconv($charset, 'UTF-8', $data[$key]."\0") ; } } foreach($data as $key=>$value) { $data[$key] = trim( $data[$key] ); $data[$key] = str_replace('""', '"', $data[$key]); $data[$key] = preg_replace("/^\"(.*)\"$/sim", "$1", $data[$key]); // $data[$key]= mb_convert_encoding($data[$key], "Windows-1252"); } if($limit_erreicht!=true){ $this->ImportPrepareRow($rowcounter_real, $ziel, $data, $fieldset); } if($rowcounter_real >= 50){//$this->limit_datensaetze) { $limit_erreicht = true; //break; } } } } fclose($handle); //if($rowcounter_real < $this->limit_datensaetze) { //} $jobId = 0; if($isCronjobActive){ $jobId = $this->create($this->app->User->GetID(), $id, $stueckliste_csv, $rowcounter_real); } if($limit_erreicht){ $this->app->Tpl->Add( 'IMPORTBUTTON', '
Vorschau: Es werden aktuell nur 50 von ' . $rowcounter_real . ' Datensätze angezeigt. Importiert werden aber alle ' . $rowcounter_real . ' Datensätze!
' ); } else{ $this->app->Tpl->Add( 'IMPORTBUTTON', '' ); } } $import = $this->app->Secure->GetPOST('import'); if($jobId > 0 && !empty($upload) && empty($import)) { $this->app->Tpl->Add( 'MESSAGE', '
Import wurde an die Warteschlange erfolgreich übergeben. Klicken sie auf "Importieren$quot; um den Import zu starten.
' ); } $jobId = (int)$this->app->Secure->GetPOST('jobid'); if($jobId > 0 && !empty($import)) { $this->app->DB->Update( sprintf( "UPDATE `importmasterdata` SET `status` = 'in_queue' WHERE `id` = %d", $jobId ) ); $this->app->Tpl->Set('MESSAGE', '
Import an Prozessstarter übergeben.
'); } elseif($import!='') { $this->ImportvorlageDo($charset); if(is_file($stueckliste_csv)) { unlink($stueckliste_csv); } $this->app->Tpl->Set('MESSAGE', "
Import durchgeführt.
"); } if(!$_id) { $this->app->Tpl->Set('KURZUEBERSCHRIFT2',$bezeichnung); $this->app->Tpl->Parse('TAB1','importvorlage_import.tpl'); $this->app->Tpl->Set('TABTEXT', 'Import'); $this->app->Tpl->Set('TABTEXT2', 'Warteschlange'); $this->app->YUI->TableSearch('TAB2', 'importvorlage_list', 'show','','',basename(__FILE__), __CLASS__); $this->app->Tpl->Parse('PAGE','tabview2.tpl'); } } /** * @param int $userId * @param int $templateId * @param string $uploadFile * @param int $countRows * * @return int */ public function create($userId, $templateId, $uploadFile, $countRows) { if($userId <= 0 || $templateId <= 0 || empty($uploadFile) || !is_file($uploadFile)) { return 0; } $uploadFileTo = $uploadFile.uniqid('importvorlge', true); if(!rename($uploadFile, $uploadFileTo)) { return 0; } $this->app->DB->Insert( sprintf( "INSERT INTO `importmasterdata` (user_id, template_id, count_rows, imported_rows, filename, status, created_at) VALUES (%d, %d, %d, 0, '%s', 'created',NOW())", $userId, $templateId, $countRows, $this->app->DB->real_escape_string($uploadFileTo) ) ); return (int)$this->app->DB->GetInsertID(); } /** * @param string $seprator * * @return string */ public function formatSeprator($seprator) { if($seprator==='semikolon') { return ';'; } if($seprator==='komma') { return ','; } return $seprator; } /** * @param string $fieldstring * @param int $firstRowToImport * @param string $importtrennzeichen * @param string $csvFile * * @return array */ public function getFields($fieldstring, $firstRowToImport, $importtrennzeichen = ';', $csvFile = '') { $csv_fields_keys = []; $csv_fields_name = []; $vorlage = []; $fieldsarray = explode(';',$fieldstring); foreach($fieldsarray as $field) { //for($i=0;$i<(!empty($fieldsarray)?count($fieldsarray):0);$i++) //{ $fieldsarray_items = explode(':',$field); foreach($fieldsarray_items as $k => $v) { $fieldsarray_items[$k] = trim($v); } if((!empty($fieldsarray_items)?count($fieldsarray_items):0) > 1){ if($fieldsarray_items[1] != ''){ if($fieldsarray_items[0] == (int)$fieldsarray_items[0]){ //$csv_fields[$fieldsarray_items[0]]= $fieldsarray_items[1]; $csv_fields_keys[] = $fieldsarray_items[0]; $csv_fields_name[] = $fieldsarray_items[1]; }else{ $vorlage[$fieldsarray_items[1]] = trim($fieldsarray_items[0], '"'); } } } } if(!empty($fieldsarray) && empty($csv_fields_keys) && empty($csv_fields_name) && empty($vorlage) && $firstRowToImport > 1 && $csvFile != '' && is_file($csvFile)) { if (($handle = fopen($csvFile, 'r')) !== FALSE) { if (($row = fgetcsv($handle, 0, $importtrennzeichen)) !== FALSE) { foreach($row as $key => $value) { $value = trim($value); if($value == '') { continue; } $csv_fields_keys[] = $key + 1; $csv_fields_name[] = $value; } } fclose($handle); } } return [$csv_fields_keys, $csv_fields_name, $vorlage]; } /** * @param string $stueckliste_csv * @param int $id * @param string $charset * @param null $parameter * * @return mixed */ function ImportvorlageGetCSV($stueckliste_csv,$id, $charset = '', $parameter = null) { // einlesen von der CSV Datei if(empty($parameter) || !empty($id)) { $importVorlageRow = $this->app->DB->SelectRow( sprintf( 'SELECT * FROM importvorlage WHERE id= %d LIMIT 1', $id) ); } if(empty($parameter) || empty($parameter['fields'])) { $fieldstmp = $importVorlageRow['fields']; } else{ $fieldstmp = $parameter['fields']; } $fieldstmp = $this->cleanFields($fieldstmp); if(empty($parameter) || empty($parameter['importtrennzeichen'])) { $importtrennzeichen = $importVorlageRow['importtrennzeichen']; } else { $importtrennzeichen = $parameter['importtrennzeichen']; } if(empty($parameter) || empty($parameter['importerstezeilenummer'])) { $importerstezeilenummer = $importVorlageRow['importerstezeilenummer']; } else{ $importerstezeilenummer = $parameter['importerstezeilenummer']; } if(empty($parameter) || empty($parameter['importdatenmaskierung'])) { $importdatenmaskierung = $importVorlageRow['importdatenmaskierung']; } else{ $importdatenmaskierung = $parameter['importdatenmaskierung']; } if(empty($parameter) || empty($parameter['importzeichensatz'])) { $importzeichensatz = $importVorlageRow['importzeichensatz']; } else{ $importzeichensatz = $parameter['importzeichensatz']; } $utf8decode = 0; $importtrennzeichen = $this->formatSeprator($importtrennzeichen); if($importdatenmaskierung==='gaensefuesschen') { $importdatenmaskierung='"'; } list($csv_fields_keys, $csv_fields_name, $vorlage) = $this->getFields( $fieldstmp, $importerstezeilenummer, $importtrennzeichen, $stueckliste_csv ); $number_of_fields = (!empty($csv_fields_keys)?count($csv_fields_keys):0); if (($handle = fopen($stueckliste_csv, 'r')) !== FALSE) { $rowcounter = 0; $rowcounter_real = 0; while (($data = fgetcsv($handle, 0, $importtrennzeichen)) !== FALSE) { $rowcounter++; $num = (!empty($data)?count($data):0); if($rowcounter >= $importerstezeilenummer) { if(empty($data)) { continue; } $isempty = true; foreach($data as $key=>$value) { if(!empty($value)) { $isempty = false; } if($charset && strtoupper($charset) !== 'UTF-8' && strtoupper($charset) !== 'UTF8') { $data[$key] = iconv($charset, 'UTF-8', $value."\0"); } } if($isempty) { continue; } $rowcounter_real++; foreach($data as $key=>$value) { $data[$key] = trim( $data[$key] ); $data[$key] = str_replace('""', '"', $data[$key]); $data[$key] = preg_replace("/^\"(.*)\"$/sim", "$1", $data[$key]); } for($j=0;$j<$number_of_fields;$j++) { $value = trim($data[($csv_fields_keys[$j]-1)]); //$fieldname = $csv_fields[$csv_fields_keys[$j]]; $fieldname = $csv_fields_name[$j]; $tmp[$fieldname][$rowcounter_real] = $value; $tmp['cmd'][$rowcounter_real] = 'create'; $tmp['checked'][$rowcounter_real] = 1; if($fieldname === 'ean' && $value != ''){ if(!isset($tmp['nummer'][$rowcounter_real]) && !$tmp['nummer'][$rowcounter_real]){ $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE ean='$value' AND ean<>'' AND geloescht <> 1 LIMIT 1"); if(!is_array($nummer) && $nummer){ $tmp['nummer'][$rowcounter_real] = $nummer; $tmp['cmd'][$rowcounter_real] = 'update'; } } } } if(isset($vorlage)) { foreach($vorlage as $k => $v) { $tmp[$v][$rowcounter_real] = $k; } } } } $number_of_rows = $rowcounter; fclose($handle); if(empty($parameter['nodelete'])){ unlink($stueckliste_csv); } } return $tmp; } /** * @param string $charset * @param array|null $parameter * @param bool $return * * @return void|array|int */ public function ImportvorlageDo($charset = '', $parameter = null, $return = false) { if(empty($parameter) || !isset($parameter['id'])) { $id = $this->app->Secure->GetGET('id'); } $isCronjob = !empty($parameter['is_cronjob']) && !empty($parameter['importmasterdata_id']); if(empty($parameter['ziel'])) { $ziel = $this->app->DB->Select("SELECT ziel FROM importvorlage WHERE id='$id' LIMIT 1"); } else { $ziel = $parameter['ziel']; } $fieldset = $this->ImportvorlageGetFieldsNew($id, $parameter); if(empty($parameter) || !isset($parameter['row'])){ $tmp = $this->app->Secure->GetPOST('row'); } else { $tmp = $parameter['row']; } $ekpreisaenderungen = 0; $vkpreisaenderungen = 0; if(empty($parameter['stueckliste_csv'])) { //$stueckliste_csv = $this->app->Secure->GetPOST('importdateiname'); $stueckliste_csv = $this->app->erp->GetTMP().'importvorlage'.$this->app->User->GetID(); } else { $stueckliste_csv = $parameter['stueckliste_csv']; } if($stueckliste_csv != '') { $tmp = $this->ImportvorlageGetCSV($stueckliste_csv,$id,$charset, $parameter); } $returnids = false; $ids = []; if(!empty($parameter['returnids'])) { $returnids = true; } $ersterdatensatz = 1; $zeitstempel = time(); $number_of_rows = empty($tmp['cmd'])?0:count($tmp['cmd']); // $number_of_rows = $number_of_rows + 2; // ?!?! if($isCronjob) { $this->app->DB->Update( sprintf( "UPDATE `importmasterdata` SET `status` = 'in_progress' WHERE `id` = %d ", $parameter['importmasterdata_id'] ) ); } for($i=1;$i<=$number_of_rows;$i++) { unset($felder); unset($lieferantid); unset($kundenid); unset($artikelid); unset($adressid); if(isset($tmp['nummer']) && isset($tmp['nummer'][$i])) { $tmp['nummer'][$i] = str_replace(' ','',trim($tmp['nummer'][$i])); } if(isset($tmp['matrixproduktvon']) && isset($tmp['matrixproduktvon'][$i])) { $tmp['matrixproduktvon'][$i] = trim($tmp['matrixproduktvon'][$i]); } if(isset($tmp['kundennummer']) && isset($tmp['kundennummer'][$i])) { $tmp['kundennummer'][$i] = str_replace(' ','',trim($tmp['kundennummer'][$i])); } if(isset($tmp['lieferantennummer']) && isset($tmp['lieferantennummer'][$i])) { $tmp['lieferantennummer'][$i] = str_replace(' ','',trim($tmp['lieferantennummer'][$i])); } if($tmp['lieferantennummer'][$i]!='' && ($tmp['kundennummer'][$i]!=='NEW' || $tmp['kundennummer'][$i]!=='NEU')) { $lieferantid = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$this->app->DB->real_escape_string($tmp['lieferantennummer'][$i])."' AND lieferantennummer!='' LIMIT 1"); } if($tmp['kundennummer'][$i]!='' && ($tmp['kundennummer'][$i]!=='NEW' || $tmp['kundennummer'][$i]!=='NEU')) { $kundenid = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$this->app->DB->real_escape_string($tmp['kundennummer'][$i])."' AND kundennummer!='' LIMIT 1"); } if($kundenid<=0) { $kundenid=0; } if($lieferantid<=0) { $lieferantid=0; } if($lieferantid<=0 && $tmp['lieferantname'][$i]!='') { $lieferantid = $this->app->DB->Select("SELECT id FROM adresse WHERE name='".$this->app->DB->real_escape_string($tmp['lieferantname'][$i])."' LIMIT 1"); } if($ziel!=='adresse') { if(!empty($tmp['nummer'][$i])){ $articleNumber = $this->app->DB->real_escape_string($tmp['nummer'][$i]); $artikelid = $this->app->DB->Select( "SELECT `id` FROM `artikel` WHERE `nummer`= '{$articleNumber}' AND `nummer` != '' AND `nummer` != 'DEL' LIMIT 1" ); } elseif(!empty($tmp['herstellernummer'][$i])) { $supplierArticleNumber = $this->app->DB->real_escape_string($tmp['herstellernummer'][$i]); $artikelid = $this->app->DB->Select( "SELECT `id` FROM `artikel` WHERE `herstellernummer`= '{$supplierArticleNumber}' AND `herstellernummer` != '' AND `nummer` != 'DEL' LIMIT 1" ); } } if($ziel === 'artikel') { foreach($fieldset as $k => $v) { $bedingung = ''; $value = ''; $fieldname = ''; if(isset($fieldset[$k]['bedingung'])) { $bedingung = $fieldset[$k]['bedingung']; } if(trim(strtolower($bedingung)) === 'unique') { if($v['field'] && isset($tmp[$v['field']]) && isset($tmp[$v['field']][$i]) && $tmp[$v['field']][$i]) { if(!isset($artikelid) || !$artikelid){ $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE " . $v['field'] . "='" . $this->app->DB->real_escape_string($tmp[$v['field']][$i]) . "' AND nummer!='' LIMIT 1"); } } } } } if($ziel === 'adresse') { foreach($fieldset as $k => $v) { $bedingung = ''; $value = ''; $fieldname = ''; if(isset($fieldset[$k]['bedingung'])) { $bedingung = $fieldset[$k]['bedingung']; }elseif(isset($v['vorlage'])) { $tmp[$v['field']][$i] = $v['vorlage']; } if(trim(strtolower($bedingung)) === 'unique') { if($v['field'] && isset($tmp[$v['field']]) && isset($tmp[$v['field']][$i]) && $tmp[$v['field']][$i]) { $adressid = $this->app->DB->Select("SELECT id FROM adresse WHERE ".$v['field']."='".$this->app->DB->real_escape_string($tmp[$v['field']][$i])."' LIMIT 1"); if($adressid) { if(isset($tmp['kundennummer'][$i]) && (strtoupper(trim($tmp['kundennummer'][$i])) === 'NEW' || strtoupper(trim($tmp['kundennummer'][$i])) === 'NEU')) { $kundenid = $adressid; $tmp['kundennummer'][$i] = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id = '$adressid' LIMIT 1"); } if(isset($tmp['lieferantennummer'][$i]) && (strtoupper(trim($tmp['lieferantennummer'][$i])) === 'NEW' || strtoupper(trim($tmp['lieferantennummer'][$i])) === 'NEU')) { $lieferantid = $adressid; $tmp['lieferantennummer'][$i] = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id = '$adressid' LIMIT 1"); } } } } } } if($ziel === "einkauf") { foreach($fieldset as $k => $v) { $bedingung = ""; $value = ""; $fieldname = ""; if(isset($fieldset[$k]['bedingung'])) { $bedingung = $fieldset[$k]['bedingung']; } if(trim(strtolower($bedingung)) === 'sonstiges' && $v['field'] === 'lieferantennummer' && $tmp[$v['field']][$i] != '') { $tmp['lieferantennummer'][$i] = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE sonstiges='".$this->app->DB->real_escape_string($tmp[$v['field']][$i])."' LIMIT 1"); $lieferantid = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$this->app->DB->real_escape_string($tmp['lieferantennummer'][$i])."' LIMIT 1"); } } } // HERE START OF PROCESSING OF THE ROWS // INSIDE FOR LOOP // $i -> loop counter row number starting with 1 // $number_of_rows // access data -> $tmp['column_name'][$i] // $tmp['cmd'] -> create or update // $tmp['checked'] -> 0 or 1 switch($ziel) { case "einkauf": case "artikel": // pruefe ob es artikelnummer schon gibt if($artikelid > 0) { $tmp['cmd'][$i]="update"; } // wenn es artikel nicht gibt muss man diesen neu anlegen if($tmp['cmd'][$i]==="create")// && $tmp['checked'][$i]=="1") { if($tmp['name_de'][$i]!='') { foreach($fieldset as $k => $v) { $bedingung = ''; $value = ''; $fieldname = ''; if(isset($v['bedingung'])) { $bedingung = $v['bedingung']; } if(isset($v['nr'])){ $value = trim($tmp[$v['field']][$i]); if(isset($v['inv'])){ if($value != '1'){ $value = 1; } else{ $value = 0; } } } elseif(isset($v['vorlage'])) { $value = $v['vorlage']; } if(isset($v['bedingung'])) { $value = $this->ImportvorlageBedingung($value, $v['bedingung']); } $fieldname = $v['field']; $felder[$fieldname] = $value; $tmp[$fieldname][$i] = $value; } } if(isset($tmp['vkmeldungunterdruecken'][$i])) { if($tmp['vkmeldungunterdruecken'][$i] == 1 || $tmp['vkmeldungunterdruecken'][$i] == 0) { $felder['vkmeldungunterdruecken'] = $tmp['vkmeldungunterdruecken'][$i]; } } if($tmp['projekt'][$i]!='') { $tmp['projekt'][$i] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$this->app->DB->real_escape_string($tmp['projekt'][$i])."' AND abkuerzung!='' LIMIT 1"); $felder['projekt'] = $tmp['projekt'][$i]; } if( strtoupper($tmp['nummer'][$i]) === 'NEW' || strtoupper($tmp['nummer'][$i]) === 'NEU' || $tmp['nummer'][$i] == '') { if(empty($tmp['projekt'][$i]) && !empty($this->projekt)) { $tmp['projekt'][$i] = $this->projekt; } if($tmp['typ'][$i] > 0){ $felder['nummer'] = $this->app->erp->GetNextArtikelnummer($tmp['typ'][$i], 1, empty($tmp['projekt'][$i]) ? '' : $tmp['projekt'][$i]); } else if($tmp['artikelkategorie'][$i] > 0){ $felder['nummer'] = $this->app->erp->GetNextArtikelnummer($tmp['artikelkategorie'][$i], 1, empty($tmp['projekt'][$i]) ? '' : $tmp['projekt'][$i]); } else if ($tmp['artikelkategorie_name'][$i] !='') { $tmp_katname = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung='".$this->app->DB->real_escape_string($tmp['artikelkategorie_name'][$i])."' order by geloescht LIMIT 1"); $felder['nummer']=$this->app->erp->GetNextArtikelnummer($tmp_katname, 1, empty($tmp['projekt'][$i])?'':$tmp['projekt'][$i]); } else{ if(empty($felder['name']) && empty($felder['name_de'])){ break; } $felder['nummer']=$this->app->erp->GetNextArtikelnummer('produkt', 1, empty($tmp['projekt'][$i])?'':$tmp['projekt'][$i]); } } else { $felder['nummer']=str_replace(' ','',trim($tmp['nummer'][$i])); if(empty($felder['name_de']) && empty($felder['name_en'])){ break; } } if($tmp['artikelbeschreibung_de'][$i]!='') { $felder['anabregs_text'] = $tmp['artikelbeschreibung_de'][$i]; } if($tmp['artikelbeschreibung_en'][$i]!='') { $felder['anabregs_text_en'] = $tmp['artikelbeschreibung_en'][$i]; } if($tmp['gewicht'][$i]!='') { $felder['gewicht'] = str_replace(',','.',$tmp['gewicht'][$i]); } if($tmp['hoehe'][$i]!='') { $felder['hoehe'] = str_replace(',','.',$tmp['hoehe'][$i]); } if($tmp['breite'][$i]!='') { $felder['breite'] = str_replace(',','.',$tmp['breite'][$i]); } if($tmp['laenge'][$i]!='') { $felder['laenge'] = str_replace(',','.',$tmp['laenge'][$i]); } // ek preis if($lieferantid <=0 && $tmp['lieferantname'][$i]!="") { $lieferantid = $this->app->erp->CreateAdresse($this->app->DB->real_escape_string($tmp['lieferantname'][$i])); $this->app->erp->AddRolleZuAdresse($lieferantid, "Lieferant", "von","Projekt",$tmp['projekt'][$i]); } if(isset($tmp['artikelkategorie_name'][$i])) { $check = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung like '".$this->app->DB->real_escape_string($tmp['artikelkategorie_name'][$i])."' order by geloescht LIMIT 1"); if(!$check) { $this->app->DB->Insert("INSERT INTO artikelkategorien (bezeichnung) values ('".$this->app->DB->real_escape_string($tmp['artikelkategorie_name'][$i])."')"); $check = $this->app->DB->GetInsertID(); }else { $this->app->DB->Update("UPDATE artikelkategorien set geloescht = 0 WHERE id = '$check' LIMIT 1"); } if($check){ $felder['typ'] = $check.'_kat'; } } if($lieferantid>0){ $felder['adresse'] = $lieferantid; } // mit welcher Artikelgruppe? if($felder['nummer'] != '') { $artikelid = $this->app->erp->ImportCreateArtikel($felder,false); if($returnids && !empty($artikelid) && !in_array($artikelid, $ids)) { $ids[] = $artikelid; } } if(isset($tmp['artikelunterkategorie_name'][$i]) && (!empty($tmp['artikelkategorie_name'][$i]) || !empty($tmp['artikelkategorie'][$i]))) { if(!empty($tmp['artikelkategorie'][$i])) { $check = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '".(int)$tmp['artikelkategorie'][$i]."' LIMIT 1"); }else{ $check = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung like '".$this->app->DB->real_escape_string($tmp['artikelkategorie_name'][$i])."' order by geloescht LIMIT 1"); if(!$check) { $this->app->DB->Insert("INSERT INTO artikelkategorien (bezeichnung) values ('".$this->app->DB->real_escape_string($tmp['artikelkategorie_name'][$i])."')"); $check = $this->app->DB->GetInsertID(); }else { $this->app->DB->Update("UPDATE artikelkategorien set geloescht = 0 WHERE id = '$check' LIMIT 1"); } } if($check) { $felder['typ'] = $check.'_kat'; $this->app->DB->Update("UPDATE artikel SET typ='".$check."_kat' WHERE id='".$artikelid."' LIMIT 1"); $check2 = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung like '".$this->app->DB->real_escape_string($tmp['artikelunterkategorie_name'][$i])."' order by geloescht, parent = '$check' DESC LIMIT 1"); if(!$check2) { $this->app->DB->Insert("INSERT INTO artikelkategorien (bezeichnung,parent) values ('".$this->app->DB->real_escape_string($tmp['artikelunterkategorie_name'][$i])."', '$check')"); $check2 = $this->app->DB->GetInsertID(); }else { $this->app->DB->Update("UPDATE artikelkategorien set geloescht = 0 WHERE id = '$check2' LIMIT 1"); } if($check2) { $check3 = $this->app->DB->Select("SELECT id FROM artikelbaum_artikel WHERE kategorie = '$check2' AND artikel = '$artikelid' LIMIT 1"); if(!$this->app->DB->error() && !$check3) { $this->app->DB->Insert("INSERT INTO artikelbaum_artikel (kategorie, artikel) VALUES ('$check2','$artikelid')"); } } } } if(($tmp['lieferanteinkaufnetto'][$i]!='' || ($tmp['lieferanteinkaufvpepreis'][$i] > 0 && $tmp['lieferanteinkaufvpemenge'][$i])) && $lieferantid > 0 ){ if($tmp['lieferantbestellnummer'][$i]!='') { $nr = $tmp['lieferantbestellnummer'][$i]; } else if($tmp['herstellernummer'][$i]!='') { $nr = $tmp['herstellernummer'][$i]; } else { $nr = ''; }//$tmp['name_de'][$i]; if($tmp['lieferanteinkaufvpemenge'][$i] > 0 && $tmp['lieferanteinkaufvpepreis'][$i] > 0) { $tmp['lieferanteinkaufnetto'][$i] = $tmp['lieferanteinkaufvpepreis'][$i] / $tmp['lieferanteinkaufvpemenge'][$i]*1.00; $tmp['lieferanteinkaufmenge'][$i] = $tmp['lieferanteinkaufvpemenge'][$i]; } if($tmp['lieferanteinkaufmenge'][$i]<=0) $tmp['lieferanteinkaufmenge'][$i] = 1; if($artikelid && $lieferantid) { $aktlieferantid = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$artikelid'"); if(!$aktlieferantid){ $this->app->DB->Update("UPDATE artikel SET adresse = '$lieferantid' WHERE id = '$artikelid' LIMIT 1"); } } $lieferantartikelbezeichnung = ''; if($tmp['lieferantartikelbezeichnung'][$i]) { $lieferantartikelbezeichnung = $this->app->DB->real_escape_string($tmp['lieferantartikelbezeichnung'][$i]); } $ekid = $this->app->erp->AddEinkaufspreis($artikelid,$tmp['lieferanteinkaufmenge'][$i], $lieferantid,$nr,$lieferantartikelbezeichnung, str_replace(',','.',$tmp['lieferanteinkaufnetto'][$i]),$tmp['lieferanteinkaufwaehrung'][$i],$tmp['lieferanteinkaufvpemenge'][$i]); $this->UpdateEinkaufspreiseExtraWerte($ekid,$tmp,''); } if(($tmp['lieferanteinkaufnetto2'][$i]!='' || ($tmp['lieferanteinkaufvpepreis2'][$i] > 0 && $tmp['lieferanteinkaufvpemenge2'][$i])) && $lieferantid > 0 ){ if(!isset($tmp['lieferanteinkaufwaehrung2'][$i]) && isset($tmp['lieferanteinkaufwaehrung'][$i])) { $tmp['lieferanteinkaufwaehrung2'][$i] = $tmp['lieferanteinkaufwaehrung'][$i]; } if($tmp['lieferantbestellnummer2'][$i]!='') { $nr = $tmp['lieferantbestellnummer2'][$i]; } else if($tmp['herstellernummer'][$i]!='') { $nr = $tmp['herstellernummer'][$i]; } else { $nr = ''; }//$tmp['name_de'][$i]; if($tmp['lieferanteinkaufvpemenge2'][$i] > 0 && $tmp['lieferanteinkaufvpepreis2'][$i] > 0) { $tmp['lieferanteinkaufnetto2'][$i] = $tmp['lieferanteinkaufvpepreis2'][$i] / $tmp['lieferanteinkaufvpemenge2'][$i]*1.00; $tmp['lieferanteinkaufmenge2'][$i] = $tmp['lieferanteinkaufvpemenge2'][$i]; } if($tmp['lieferanteinkaufmenge2'][$i]<=0){ $tmp['lieferanteinkaufmenge2'][$i] = 1; } $lieferantartikelbezeichnung = ''; if($tmp['lieferantartikelbezeichnung2'][$i]) { $lieferantartikelbezeichnung = $this->app->DB->real_escape_string($tmp['lieferantartikelbezeichnung2'][$i]); } $ekid = $this->app->erp->AddEinkaufspreis($artikelid,$tmp['lieferanteinkaufmenge2'][$i], $lieferantid,$nr,$lieferantartikelbezeichnung, str_replace(',','.',$tmp['lieferanteinkaufnetto2'][$i]),$tmp['lieferanteinkaufwaehrung2'][$i],$tmp['lieferanteinkaufvpemenge2'][$i]); $this->UpdateEinkaufspreiseExtraWerte($ekid,$tmp,"2"); } if(($tmp['lieferanteinkaufnetto3'][$i]!='' || ($tmp['lieferanteinkaufvpepreis3'][$i] > 0 && $tmp['lieferanteinkaufvpemenge3'][$i])) && $lieferantid > 0 ){ if(!isset($tmp['lieferanteinkaufwaehrung3'][$i]) && isset($tmp['lieferanteinkaufwaehrung'][$i])) { $tmp['lieferanteinkaufwaehrung3'][$i] = $tmp['lieferanteinkaufwaehrung'][$i]; } if($tmp['lieferantbestellnummer3'][$i]!='') { $nr = $tmp['lieferantbestellnummer3'][$i]; } else if($tmp['herstellernummer'][$i]!='') { $nr = $tmp['herstellernummer'][$i]; } else { $nr = ''; }//$tmp['name_de'][$i]; if($tmp['lieferanteinkaufvpemenge3'][$i] > 0 && $tmp['lieferanteinkaufmenge3'][$i]<=0 && $tmp['lieferanteinkaufvpepreis3'][$i] > 0) { $tmp['lieferanteinkaufnetto3'][$i] = $tmp['lieferanteinkaufvpepreis3'][$i] / $tmp['lieferanteinkaufvpemenge3'][$i]*1.00; $tmp['lieferanteinkaufmenge3'][$i] = $tmp['lieferanteinkaufvpemenge3'][$i]; } if($tmp['lieferanteinkaufmenge3'][$i]<=0){ $tmp['lieferanteinkaufmenge3'][$i] = 1; } $lieferantartikelbezeichnung = ''; if($tmp['lieferantartikelbezeichnung3'][$i]) { $lieferantartikelbezeichnung = $this->app->DB->real_escape_string($tmp['lieferantartikelbezeichnung3'][$i]); } $ekid = $this->app->erp->AddEinkaufspreis($artikelid,$tmp['lieferanteinkaufmenge3'][$i], $lieferantid,$nr,$lieferantartikelbezeichnung, str_replace(',','.',$tmp['lieferanteinkaufnetto3'][$i]),$tmp['lieferanteinkaufwaehrung3'][$i],$tmp['lieferanteinkaufvpemenge3'][$i]); $this->UpdateEinkaufspreiseExtraWerte($ekid,$tmp,"3"); } if($tmp['standardlieferant'][$i]!=''){ $standardlieferantid = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer = '".$this->app->DB->real_escape_string($tmp['standardlieferant'][$i])."' LIMIT 1"); if($standardlieferantid != ''){ $this->app->DB->Update("UPDATE artikel SET adresse='$standardlieferantid' WHERE id='".$artikelid."' LIMIT 1"); } } // vk preis for($verkaufspreisanzahl=1;$verkaufspreisanzahl<=10;$verkaufspreisanzahl++) { if(isset($tmp['verkaufspreis'.$verkaufspreisanzahl.'netto'][$i]) && $tmp['verkaufspreis'.$verkaufspreisanzahl.'netto'][$i]!='' ){ $gruppe = ''; if(isset($tmp['verkaufspreis'.$verkaufspreisanzahl.'gruppe'][$i])) { $gruppe = $this->app->DB->Select("SELECT id FROM gruppen where kennziffer = '".$tmp['verkaufspreis'.$verkaufspreisanzahl.'gruppe'][$i]."' LIMIT 1"); } if(!is_numeric($tmp['verkaufspreis'.$verkaufspreisanzahl.'menge'][$i])) { $tmp['verkaufspreis'.$verkaufspreisanzahl.'menge'][$i] = 1; } if((float)str_replace(',','.',$tmp['verkaufspreis'.$verkaufspreisanzahl.'netto'][$i])) { $gueltigab = null; if($tmp['verkaufspreis'.$verkaufspreisanzahl.'gueltigab'][$i] !== ''){ $gueltigab = $this->normalizeDate($tmp['verkaufspreis'.$verkaufspreisanzahl.'gueltigab'][$i]); } $gueltigbis = null; if($tmp['verkaufspreis'.$verkaufspreisanzahl.'gueltigbis'][$i] !== ''){ $gueltigbis = $this->normalizeDate($tmp['verkaufspreis'.$verkaufspreisanzahl.'gueltigbis'][$i]); } $_kundenid = 0; if(isset($tmp['verkaufspreis'.$verkaufspreisanzahl.'kundennummer']) && $tmp['verkaufspreis'.$verkaufspreisanzahl.'kundennummer'][$i]) { $_kundenid = $this->app->DB->Select( "SELECT id FROM adresse WHERE geloescht = 0 AND kundennummer = '". $this->app->DB->real_escape_string($tmp['verkaufspreis'.$verkaufspreisanzahl.'kundennummer'][$i]) ."' and kundennummer != '' LIMIT 1" ); } $verkaufspreis1stueckdivisor = 1; if($tmp['verkaufspreis'.$verkaufspreisanzahl.'preisfuermenge'][$i]!='') { $verkaufspreis1stueckdivisor = $tmp['verkaufspreis'.$verkaufspreisanzahl.'preisfuermenge'][$i]; } if($verkaufspreis1stueckdivisor < 1) { $verkaufspreis1stueckdivisor = 1; } if($gruppe) { $this->app->erp->AddVerkaufspreisGruppe($artikelid,$tmp['verkaufspreis'.$verkaufspreisanzahl.'menge'][$i],$gruppe,str_replace(',','.',$tmp['verkaufspreis'.$verkaufspreisanzahl.'netto'][$i])/$verkaufspreis1stueckdivisor,$tmp['verkaufspreis'.$verkaufspreisanzahl.'waehrung'][$i],isset($tmp['verkaufspreis'.$verkaufspreisanzahl.'artikelnummerbeikunde'])?$tmp['verkaufspreis'.$verkaufspreisanzahl.'artikelnummerbeikunde'][$i]:'', $gueltigab,$tmp['verkaufspreis'.$verkaufspreisanzahl.'internerkommentar'][$i], $gueltigbis); }else{ $this->app->erp->AddVerkaufspreis($artikelid,$tmp['verkaufspreis'.$verkaufspreisanzahl.'menge'][$i], $_kundenid,str_replace(',','.',$tmp['verkaufspreis'.$verkaufspreisanzahl.'netto'][$i])/$verkaufspreis1stueckdivisor,$tmp['verkaufspreis'.$verkaufspreisanzahl.'waehrung'][$i],isset($tmp['verkaufspreis'.$verkaufspreisanzahl.'artikelnummerbeikunde'])?$tmp['verkaufspreis'.$verkaufspreisanzahl.'artikelnummerbeikunde'][$i]:'',$gruppe, $gueltigab,$tmp['verkaufspreis'.$verkaufspreisanzahl.'internerkommentar'][$i], $gueltigbis); } } } } if($tmp['variante_von'][$i]!="") { // schaue ob $tmpartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$tmp['variante_von'][$i]."' AND nummer!='' LIMIT 1"); if($tmpartikelid > 0) { $this->app->DB->Update("UPDATE artikel SET variante_von='".$tmpartikelid."',variante=1 WHERE id='".$artikelid."' AND id!='".$tmpartikelid."' LIMIT 1"); } } if(isset($this->teilprojekt) && isset($this->projekt)) { $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM projekt_artikel WHERE teilprojekt = '".$this->teilprojekt."'"); $menge = 1; if(!empty($tmp['menge'][$i]))$menge = str_replace(',','.',$tmp['menge'][$i]); if($menge < 0)$menge = 1; $this->app->DB->Insert("INSERT INTO projekt_artikel (projekt, teilprojekt,artikel, sort,geplant) VALUES ('".$this->projekt."','".$this->teilprojekt."','$artikelid','$sort','$menge')"); $projektartikel = $this->app->DB->GetInsertID(); $vk = $this->app->erp->GetVerkaufspreis($artikelid, $menge); $ek = $this->app->erp->GetEinkaufspreis($artikelid, $menge, $lieferantenid); if(isset($tmp['vk_geplant']) && isset($tmp['vk_geplant'][$i])) { $vk = (double)str_replace(',','.',$tmp['vk_geplant'][$i]); } if(isset($tmp['ek_geplant']) && isset($tmp['ek_geplant'][$i])) { $ek = (double)str_replace(',','.',$tmp['ek_geplant'][$i]); } if($vk) { $this->app->DB->Update("UPDATE projekt_artikel SET vk_geplant = '$vk' WHERE id = '$projektartikel' LIMIT 1"); } if($ek) { $this->app->DB->Update("UPDATE projekt_artikel SET ek_geplant = '$ek' WHERE id = '$projektartikel' LIMIT 1"); } } if($tmp['einheit'][$i] != '' ) { if($artikelid) { $this->app->DB->Update("UPDATE artikel set einheit = '".$this->app->DB->real_escape_string($tmp['einheit'][$i])."' where id = '$artikelid' LIMIT 1"); } } for($freifeldind = 1; $freifeldind <= 40; $freifeldind++) { if($tmp['freifeld'.$freifeldind][$i] != '' ) { if($artikelid) { $this->app->DB->Update("UPDATE artikel set ".'freifeld'.$freifeldind." = '".$this->app->DB->real_escape_string($tmp['freifeld'.$freifeldind][$i])."' where id = '$artikelid' LIMIT 1"); } } } for($baumind = 1; $baumind <= 20; $baumind++){ if(!empty($tmp['artikelbaum'.$baumind][$i])){ $artikelbaumanweisung = $tmp['artikelbaum'.$baumind][$i]; if($artikelbaumanweisung != ''){ if(strtolower($artikelbaumanweisung) == 'clear'){ $this->app->DB->Delete("DELETE FROM artikelbaum_artikel WHERE artikel = '$artikelid'"); } $artikelbaumteile = explode("|", $artikelbaumanweisung); $artikelbaumzumhinzufuegen = array(); $artikelbaumtmpkategorieid = 0; for ($ii=0; $ii < (!empty($artikelbaumteile)?count($artikelbaumteile):0); $ii++) { $kategorieid = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung = '".$this->app->DB->real_escape_string($artikelbaumteile[$ii])."' AND parent = '$artikelbaumtmpkategorieid' LIMIT 1"); if($kategorieid == ''){ break; }else{ $artikelbaumzumhinzufuegen[] = $kategorieid; $artikelbaumtmpkategorieid = $kategorieid; } } for ($ii=0; $ii < (!empty($artikelbaumzumhinzufuegen)?count($artikelbaumzumhinzufuegen):0); $ii++) { $vorhanden = $this->app->DB->Select("SELECT id FROM artikelbaum_artikel WHERE artikel = '$artikelid' AND kategorie = '".$artikelbaumzumhinzufuegen[$ii]."' LIMIT 1"); if($vorhanden == ''){ $this->app->DB->Insert("INSERT INTO artikelbaum_artikel (artikel, kategorie) VALUES ('$artikelid','".$artikelbaumzumhinzufuegen[$ii]."')"); } } } } } if($tmp['stuecklisteexplodiert'][$i]!="") { if($artikelid) { $this->app->DB->Update("UPDATE artikel set juststueckliste = '".((int)$tmp['stuecklisteexplodiert'][$i])."' where id = '$artikelid' LIMIT 1"); } } if($tmp['stuecklistevonartikel'][$i]!="" && $artikelid) { $tmpartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$this->app->DB->real_escape_string($tmp['stuecklistevonartikel'][$i])."' AND nummer!='' LIMIT 1"); if($tmpartikelid > 0) { $this->app->DB->Update("UPDATE artikel set stueckliste = '1' WHERE id = '$tmpartikelid' LIMIT 1"); $this->app->DB->Update("UPDATE artikel set typ='produktion' WHERE id = '$tmpartikelid' AND typ = '' LIMIT 1"); $stuecklistecheck = $this->app->DB->Select("SELECT id FROM stueckliste where stuecklistevonartikel = '$tmpartikelid' and artikel = '$artikelid' LIMIT 1"); if(!$stuecklistecheck) { $sort = 1 + (int)$this->app->DB->Select("SELECT max(sort) FROM stueckliste where stuecklistevonartikel = '$tmpartikelid' LIMIT 1"); if(!$this->app->erp->IstStuecklistenZirkel($artikelid, $tmpartikelid)) { $this->app->DB->Insert("INSERT INTO stueckliste (artikel, stuecklistevonartikel,menge,layer,place,sort,firma) values ('$artikelid','$tmpartikelid','1','$sort','Top','DP','1')"); } $stuecklistecheck = $this->app->DB->GetInsertID(); } if($stuecklistecheck) { if(isset($tmp['stuecklistemenge'][$i]) && $tmp['stuecklistemenge'][$i] != '') { $menge = round((double)str_replace(',','.',$tmp['stuecklistemenge'][$i]),4); if($menge <= 0) { $menge = 1; } $this->app->DB->Update("UPDATE stueckliste SET menge = '$menge' where stuecklistevonartikel = '$tmpartikelid' and artikel = '$artikelid' LIMIT 1"); } if($tmp['stuecklisteart'][$i] != '') { $art = $this->app->DB->real_escape_string($tmp['stuecklisteart'][$i]); $this->app->DB->Update("UPDATE stueckliste SET art = '$art' where stuecklistevonartikel = '$tmpartikelid' and artikel = '$artikelid' LIMIT 1"); } if($tmp['stuecklistelayer'][$i] != '') { $layer = $this->app->DB->real_escape_string($tmp['stuecklistelayer'][$i]); $this->app->DB->Update("UPDATE stueckliste SET layer = '$layer' where stuecklistevonartikel = '$tmpartikelid' and artikel = '$artikelid' LIMIT 1"); } if($tmp['stuecklisteplace'][$i] != '') { $place = $this->app->DB->real_escape_string($tmp['stuecklisteplace'][$i]); $this->app->DB->Update("UPDATE stueckliste SET place = '$place' where stuecklistevonartikel = '$tmpartikelid' and artikel = '$artikelid' LIMIT 1"); } } } } if($tmp['aktiv'][$i]=='1') { $this->app->DB->Update("UPDATE artikel SET inaktiv=0 WHERE id='".$artikelid."' LIMIT 1"); } if($tmp['aktiv'][$i]=='0') { $this->app->DB->Update("UPDATE artikel SET inaktiv=1 WHERE id='".$artikelid."' LIMIT 1"); } if(isset($tmp['matrixprodukt'])) { if($tmp['matrixprodukt'][$i]=="1") { $this->app->DB->Update("UPDATE artikel SET matrixprodukt=1 WHERE id='".$artikelid."' LIMIT 1"); if(!empty($tmp['matrixgruppe1']) && !empty($tmp['matrixgruppe1'][$i]) && (String)$tmp['matrixgruppe1'][$i] !== '') { $matrixgruppe2 = 0; $matrixgruppe1 = $this->app->DB->Select("SELECT id FROM `matrixprodukt_eigenschaftengruppen` WHERE aktiv = 1 AND name ='". $this->app->DB->real_escape_string($tmp['matrixgruppe1'][$i])."' AND name <> '' LIMIT 1"); if($matrixgruppe1) { $matrixgruppenname1 = $this->app->DB->Select("SELECT name FROM `matrixprodukt_eigenschaftengruppen` WHERE id = '$matrixgruppe1' LIMIT 1"); $optionen1 = $this->app->DB->SelectArr("SELECT * FROM `matrixprodukt_eigenschaftenoptionen` WHERE gruppe = '$matrixgruppe1' AND aktiv = 1 ORDER by sort, id "); $gruppenok = true; if(!$optionen1) { $gruppenok = false; } if(!empty($tmp['matrixgruppe2']) && !empty($tmp['matrixgruppe2'][$i]) && (String)$tmp['matrixgruppe2'][$i] !=='') { $matrixgruppe2 = $this->app->DB->Select("SELECT id FROM `matrixprodukt_eigenschaftengruppen` WHERE aktiv = 1 AND name ='". $this->app->DB->real_escape_string($tmp['matrixgruppe2'][$i])."' LIMIT 1"); if(!$matrixgruppe2) { $gruppenok = false; }else{ $matrixgruppenname2 = $this->app->DB->Select("SELECT name FROM `matrixprodukt_eigenschaftengruppen` WHERE id = '$matrixgruppe2' LIMIT 1"); $optionen2 = $this->app->DB->SelectArr("SELECT * FROM `matrixprodukt_eigenschaftenoptionen` WHERE gruppe = '$matrixgruppe2' AND aktiv = 1 ORDER by sort, id "); if(!$optionen2) { $gruppenok = false; } } } if($gruppenok) { $existgruppen = $this->app->DB->SelectArr("SELECT * FROM matrixprodukt_eigenschaftengruppen_artikel WHERE artikel = '$artikelid'"); if(!$existgruppen) { $this->app->DB->Insert("INSERT INTO matrixprodukt_eigenschaftengruppen_artikel (artikel, aktiv, name,name_ext, sort) SELECT '$artikelid' as artikel, '1' as aktiv, name,name_ext, '0' as sort FROM matrixprodukt_eigenschaftengruppen WHERE id = '$matrixgruppe1' "); if(!empty($tmp['matrixgruppe2']) && !empty($tmp['matrixgruppe2'][$i]) && (String)$tmp['matrixgruppe2'][$i] !=='' && $matrixgruppe2) { $this->app->DB->Insert("INSERT INTO matrixprodukt_eigenschaftengruppen_artikel (artikel, aktiv, name,name_ext, sort) SELECT '$artikelid' as artikel, '1' as aktiv, name,name_ext, '1' as sort FROM matrixprodukt_eigenschaftengruppen WHERE id = '$matrixgruppe2' "); } $existgruppen = $this->app->DB->SelectArr("SELECT * FROM matrixprodukt_eigenschaftengruppen_artikel WHERE artikel = '$artikelid'"); } if($existgruppen) { $gruppe1found = false; $gruppe2found = false; foreach($existgruppen as $kg => $vg) { if(strtolower($vg['name']) == strtolower($tmp['matrixgruppe1'][$i])) { $gruppe1found = $vg['id']; $optionen1ex = $this->app->DB->SelectArr("SELECT * FROM `matrixprodukt_eigenschaftenoptionen_artikel` WHERE artikel = '$artikelid' AND gruppe = '$gruppe1found' AND aktiv = 1 ORDER BY sort"); } if($matrixgruppe2) { if(strtolower($vg['name']) == strtolower($tmp['matrixgruppe2'][$i])) { $gruppe2found = $vg['id']; $optionen2ex = $this->app->DB->SelectArr("SELECT * FROM `matrixprodukt_eigenschaftenoptionen_artikel` WHERE artikel = '$artikelid' AND gruppe = '$gruppe2found' AND aktiv = 1 ORDER BY sort"); } } } if(!$gruppe1found) { $gruppenok = false; } if($matrixgruppe2 && !$gruppe2found) { $gruppenok = false; } } if($gruppenok) { if(!$gruppe1found) { $this->app->DB->Insert("INSERT INTO matrixprodukt_eigenschaftengruppen_artikel (artikel, aktiv, name,name_ext, sort) SELECT '$artikelid' as artikel, '1' as aktiv, name,name_ext, '0' as sort FROM matrixprodukt_eigenschaftengruppen WHERE id = '$matrixgruppe1' "); $gruppe1found = $this->app->DB->GetInsertID(); } if($matrixgruppe2 && !$gruppe2found) { $this->app->DB->Insert("INSERT INTO matrixprodukt_eigenschaftengruppen_artikel (artikel, aktiv, name,name_ext, sort) SELECT '$artikelid' as artikel, '1' as aktiv, name,name_ext, '1' as sort FROM matrixprodukt_eigenschaftengruppen WHERE id = '$matrixgruppe2' "); $gruppe2found = $this->app->DB->GetInsertID(); } foreach($optionen1 as $ko => $vo) { $foundoption1 = false; if(isset($optionen1ex)){ foreach($optionen1ex as $koa => $voa) { if(strtolower($vo['name']) == strtolower($voa['name'])) { $foundoption1 = $voa['id']; $optionen1[$ko]['matrixprodukt_eigenschaftenoptionen_artikel'] = $foundoption1; } } } if(!$foundoption1) { $this->app->DB->Insert("INSERT INTO matrixprodukt_eigenschaftenoptionen_artikel (name,name_ext, artikel, sort, gruppe, aktiv, erstellt, bearbeiter) SELECT name,name_ext, '$artikelid' as artikel, sort, '$gruppe1found' as gruppe, '1' as aktiv, now() as erstellt, '".$this->app->DB->real_escape_string($this->app->User->GetName())."' as bearbeiter FROM matrixprodukt_eigenschaftenoptionen WHERE id = '".$vo['id']."' "); $optionen1[$ko]['matrixprodukt_eigenschaftenoptionen_artikel'] = $this->app->DB->GetInsertID(); } } if($matrixgruppe2) { foreach($optionen2 as $ko => $vo) { $foundoption2 = false; if(isset($optionen2ex)){ foreach($optionen2ex as $koa => $voa) { if(strtolower($vo['name']) == strtolower($voa['name'])) { $foundoption2 = $voa['id']; $optionen2[$ko]['matrixprodukt_eigenschaftenoptionen_artikel'] = $foundoption2; } } } if(!$foundoption2) { $this->app->DB->Insert("INSERT INTO matrixprodukt_eigenschaftenoptionen_artikel (name,name_ext, artikel, sort, gruppe, aktiv, erstellt, bearbeiter) SELECT name,name_ext, '$artikelid' as artikel, sort, '$gruppe2found' as gruppe, '1' as aktiv, now() as erstellt, '".$this->app->DB->real_escape_string($this->app->User->GetName())."' as bearbeiter FROM matrixprodukt_eigenschaftenoptionen WHERE id = '".$vo['id']."' "); $optionen2[$ko]['matrixprodukt_eigenschaftenoptionen_artikel'] = $this->app->DB->GetInsertID(); } } } if($matrixgruppe2) { foreach($optionen1 as $ko => $vo) { foreach($optionen2 as $ko2 => $vo2) { $check = $this->app->DB->Select(" SELECT a.id FROM artikel a INNER JOIN `matrixprodukt_optionen_zu_artikel` moza1 ON a.id = moza1.artikel AND moza1.option_id = '".$vo['matrixprodukt_eigenschaftenoptionen_artikel']."' INNER JOIN `matrixprodukt_optionen_zu_artikel` moza2 ON a.id = moza2.artikel AND moza2.option_id = '".$vo2['matrixprodukt_eigenschaftenoptionen_artikel']."' LIMIT 1 "); if(!$check) { $checkarr = $this->app->DB->SelectArr("SELECT * FROM artikel WHERE id = '$artikelid' LIMIT 1"); if($checkarr) { unset($checkarr[0]['ean']); unset($checkarr[0]['id']); unset($checkarr[0]['zolltarifnummer']); unset($checkarr[0]['xvp']); unset($checkarr[0]['hersteller']); for($fi = 1; $fi <= 40; $fi++)unset($checkarr[0]['freifeld'.$fi]); unset($checkarr[0]['anabregs_text']); unset($checkarr[0]['anabregs_text_en']); unset($checkarr[0]['kurztext_de']); unset($checkarr[0]['kurztext_en']); unset($checkarr[0]['beschreibung_de']); unset($checkarr[0]['beschreibung_en']); unset($checkarr[0]['links_de']); unset($checkarr[0]['links_en']); unset($checkarr[0]['startseite_de']); unset($checkarr[0]['startseite_en']); if(isset($tmp['name_de']) && isset($tmp['name_de'][$i]))$checkarr[0]['name_de'] = $tmp['name_de'][$i]; if(isset($tmp['name_en']) && isset($tmp['name_en'][$i]))$checkarr[0]['name_en'] = $tmp['name_en'][$i]; //if(isset($tmp['anabregs_text']) && isset($tmp['anabregs_text'][$i]))$checkarr[0]['anabregs_text'] = $tmp['anabregs_text'][$i]; //if(isset($tmp['anabregs_text_de']) && isset($tmp['anabregs_text_de'][$i]))$checkarr[0]['anabregs_text'] = $tmp['anabregs_text_de'][$i]; //if(isset($tmp['anabregs_text_en']) && isset($tmp['anabregs_text_en'][$i]))$checkarr[0]['anabregs_text_en'] = $tmp['anabregs_text_en'][$i]; $checkarr[0]['matrixprodukt'] = 0; $checkarr[0]['variante'] = 1; $checkarr[0]['variante_von'] = $artikelid; $matrixartikelnummer = str_replace('|',',',$tmp['matrixartikelnummer'][$i]); if($matrixartikelnummer == 2) { $checkarr[0]['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikelid' LIMIT 1"); $checkarr[0]['nummer'] .= '-'.trim(preg_replace('#[^-_A-Za-z0-9]#', '', str_replace( array('Ü','Ö','Ä','ß','&UUML;','&AUML;','&OUML;','&SZLIG;',' '), array('UE','OE','AE','SS','UE','AE','OE','SS','_'), trim(strtoupper( $this->app->DB->Select("SELECT name FROM `matrixprodukt_eigenschaftenoptionen_artikel` WHERE id = '".$vo['matrixprodukt_eigenschaftenoptionen_artikel']."' ") )) ) )).'-'.trim(preg_replace('#[^-_A-Za-z0-9]#', '', str_replace( array('Ü','Ö','Ä','ß','&UUML;','&AUML;','&OUML;','&SZLIG;',' '), array('UE','OE','AE','SS','UE','AE','OE','SS','_'), trim(strtoupper( $this->app->DB->Select("SELECT name FROM `matrixprodukt_eigenschaftenoptionen_artikel` WHERE id = '".$vo2['matrixprodukt_eigenschaftenoptionen_artikel']."' ") )) ) )); } elseif($matrixartikelnummer && $matrixartikelnummer[0] == '3') { $checkarr[0]['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikelid' LIMIT 1"); $matrixartikelnummera = explode(',',$matrixartikelnummer); $prefixtrennzeichen = '-'; if(isset($matrixartikelnummera[1])) { $prefixtrennzeichen = $matrixartikelnummera[1]; } if(strlen($prefixtrennzeichen) == 0) { $prefixtrennzeichen = '-'; } $prefixstellen = 2; if(isset($matrixartikelnummera[2])) { $prefixstellen = $matrixartikelnummera[2]; } if($prefixstellen < 1) { $prefixstellen = 1; } $prefixnaechstenummer = 1; if(!empty($matrixartikelnummera[3])) { $prefixnaechstenummer = 1; } $zaehler = 0; while($zeahler < 1000) { $zeahler++; $_prefixnaechstenummer = $prefixnaechstenummer; if(strlen($_prefixnaechstenummer) < $prefixstellen) { $prefixnaechstenummer = str_repeat('0', $prefixstellen-strlen($_prefixnaechstenummer)).$_prefixnaechstenummer; }else{ $prefixnaechstenummer = $_prefixnaechstenummer; } $neuenummer = $checkarr[0]['nummer'].trim($prefixtrennzeichen).$prefixnaechstenummer; if(!$this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$this->app->DB->real_escape_string($neuenummer)."' LIMIT 1")) { break; } $prefixnaechstenummer++; } $checkarr[0]['nummer'] = $neuenummer; }else{ $checkarr[0]['nummer'] = $this->app->erp->GetNextArtikelnummer($checkarr[0]['typ'], 1, $checkarr[0]['projekt']); } if(isset($tmp['matrixnamefuerunterartikel']) && $tmp['matrixnamefuerunterartikel'][$i]) { $checkarr[0]['name_de'] = $checkarr[0]['name_de'].' '.$matrixgruppenname1.': '.$vo['name'].' '.$matrixgruppenname2.': '.$vo2['name']; if($checkarr[0]['name_en'])$checkarr[0]['name_en'] = $checkarr[0]['name_en'].' '.$matrixgruppenname1.': '.$vo['name'].' '.$matrixgruppenname2.': '.$vo2['name']; } $check = $this->app->erp->InsertUpdateArtikel($checkarr[0]); if($returnids && !empty($check) && !in_array($check, $ids)) { $ids[] = $check; } if($check) { $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise WHERE artikel = '$artikelid'"); if($vkarr) { foreach($vkarr as $vv) { $vv['artikel'] = $check; unset($vv['id']); $this->app->DB->Insert("INSERT INTO verkaufspreise (id) VALUES ('')"); $newvkid = $this->app->DB->GetInsertID(); $this->app->FormHandler->ArrayUpdateDatabase("verkaufspreise",$newvkid,$vv,true); } } $this->app->DB->Insert("INSERT INTO matrixprodukt_optionen_zu_artikel (artikel, option_id) VALUES ('$check','".$vo['matrixprodukt_eigenschaftenoptionen_artikel']."')"); $this->app->DB->Insert("INSERT INTO matrixprodukt_optionen_zu_artikel (artikel, option_id) VALUES ('$check','".$vo2['matrixprodukt_eigenschaftenoptionen_artikel']."')"); } unset($checkarr[0]); } } } } } else { foreach($optionen1 as $ko => $vo) { $check = $this->app->DB->Select(" SELECT a.id FROM artikel a INNER JOIN `matrixprodukt_optionen_zu_artikel` moza1 ON a.id = moza1.artikel AND moza1.option_id = '".$vo['matrixprodukt_eigenschaftenoptionen_artikel']."' LIMIT 1 "); if(!$check) { $checkarr = $this->app->DB->SelectArr("SELECT * FROM artikel WHERE id = '$artikelid' LIMIT 1"); if($checkarr) { unset($checkarr[0]['ean']); unset($checkarr[0]['id']); $matrixartikelnummer = str_replace('|',',',$tmp['matrixartikelnummer'][$i]); if($matrixartikelnummer == 2) { $checkarr[0]['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikelid' LIMIT 1"); $checkarr[0]['nummer'] .= '-'.trim(preg_replace('#[^-_A-Za-z0-9]#', '', str_replace( array('Ü','Ö','Ä','ß','&UUML;','&AUML;','&OUML;','&SZLIG;',' '), array('UE','OE','AE','SS','UE','AE','OE','SS','_'), trim(strtoupper( $this->app->DB->Select("SELECT name FROM `matrixprodukt_eigenschaftenoptionen_artikel` WHERE id = '".$vo['matrixprodukt_eigenschaftenoptionen_artikel']."' ") )) ) )); }elseif($matrixartikelnummer && $matrixartikelnummer[0] == '3') { $checkarr[0]['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikelid' LIMIT 1"); $matrixartikelnummera = explode(',',$matrixartikelnummer); $prefixtrennzeichen = '-'; if(isset($matrixartikelnummera[1])) { $prefixtrennzeichen = $matrixartikelnummera[1]; } if(strlen($prefixtrennzeichen) == 0)$prefixtrennzeichen = '-'; $prefixstellen = 2; if(isset($matrixartikelnummera[2])) { $prefixstellen = $matrixartikelnummera[2]; } if($prefixstellen < 1) { $prefixstellen = 1; } $prefixnaechstenummer = 1; if(!empty($matrixartikelnummera[3])) { $prefixnaechstenummer = 1; } $zaehler = 0; while($zeahler < 1000) { $zeahler++; $_prefixnaechstenummer = $prefixnaechstenummer; if(strlen($_prefixnaechstenummer) < $prefixstellen) { $prefixnaechstenummer = str_repeat('0', $prefixstellen-strlen($_prefixnaechstenummer)).$_prefixnaechstenummer; }else{ $prefixnaechstenummer = $_prefixnaechstenummer; } $neuenummer = $checkarr[0]['nummer'].trim($prefixtrennzeichen).$prefixnaechstenummer; if(!$this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$this->app->DB->real_escape_string($neuenummer)."' LIMIT 1")) { break; } $prefixnaechstenummer++; } $checkarr[0]['nummer'] = $neuenummer; }else{ $checkarr[0]['nummer'] = $this->app->erp->GetNextArtikelnummer($checkarr[0]['typ'], 1, $checkarr[0]['projekt']); } unset($checkarr[0]['zolltarifnummer']); unset($checkarr[0]['xvp']); unset($checkarr[0]['hersteller']); for($fi = 1; $fi <= 40; $fi++) { unset($checkarr[0]['freifeld'.$fi]); } unset($checkarr[0]['anabregs_text']); unset($checkarr[0]['anabregs_text_en']); unset($checkarr[0]['kurztext_de']); unset($checkarr[0]['kurztext_en']); unset($checkarr[0]['beschreibung_de']); unset($checkarr[0]['beschreibung_en']); unset($checkarr[0]['links_de']); unset($checkarr[0]['links_en']); unset($checkarr[0]['startseite_de']); unset($checkarr[0]['startseite_en']); if(isset($tmp['name_de']) && isset($tmp['name_de'][$i])) { $checkarr[0]['name_de'] = $tmp['name_de'][$i]; } if(isset($tmp['name_en']) && isset($tmp['name_en'][$i])) { $checkarr[0]['name_en'] = $tmp['name_en'][$i]; } //if(isset($tmp['anabregs_text']) && isset($tmp['anabregs_text'][$i]))$checkarr[0]['anabregs_text'] = $tmp['anabregs_text'][$i]; //if(isset($tmp['anabregs_text_de']) && isset($tmp['anabregs_text_de'][$i]))$checkarr[0]['anabregs_text'] = $tmp['anabregs_text_de'][$i]; //if(isset($tmp['anabregs_text_en']) && isset($tmp['anabregs_text_en'][$i]))$checkarr[0]['anabregs_text_en'] = $tmp['anabregs_text_en'][$i]; $checkarr[0]['matrixprodukt'] = 0; $checkarr[0]['variante'] = 1; $checkarr[0]['variante_von'] = $artikelid; if(isset($tmp['matrixnamefuerunterartikel']) && $tmp['matrixnamefuerunterartikel'][$i]) { $checkarr[0]['name_de'] = $checkarr[0]['name_de'].' '.$matrixgruppenname1.': '.$vo['name']; if($checkarr[0]['name_en']) { $checkarr[0]['name_en'] = $checkarr[0]['name_en'].' '.$matrixgruppenname1.': '.$vo['name']; } } $check = $this->app->erp->InsertUpdateArtikel($checkarr[0]); if($returnids && !empty($check) && !in_array($check, $ids)) { $ids[] = $check; } if($check) { $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise WHERE artikel = '$artikelid'"); if($vkarr) { foreach($vkarr as $vv) { $vv['artikel'] = $check; unset($vv['id']); $this->app->DB->Insert("INSERT INTO verkaufspreise (id) VALUES ('')"); $newvkid = $this->app->DB->GetInsertID(); $this->app->FormHandler->ArrayUpdateDatabase("verkaufspreise",$newvkid,$vv,true); } } $this->app->DB->Insert("INSERT INTO matrixprodukt_optionen_zu_artikel (artikel, option_id) VALUES ('$check','".$vo['matrixprodukt_eigenschaftenoptionen_artikel']."')"); } unset($checkarr[0]); } } } } } } } unset($optionen1,$optionen2,$optionen1ex,$optionen2ex); } } if($tmp['matrixprodukt'][$i]=="0") { $this->app->DB->Update("UPDATE artikel SET matrixprodukt=0 WHERE id='".$artikelid."' LIMIT 1"); } } // prozentzeichen entfernen $tmp['umsatzsteuer'][$i] = str_replace('%','',$tmp['umsatzsteuer'][$i]); /* if($tmp[umsatzsteuer][$i]=="" || $tmp[umsatzsteuer][$i]=="19.00" || $this->app->erp->Firmendaten("steuersatz_normal")==$tmp[umsatzsteuer][$i] || $tmp[umsatzsteuer][$i]=="19%" || $tmp[umsatzsteuer][$i]=="19.00%" || $tmp[umsatzsteuer][$i]=="19" || $tmp[umsatzsteuer][$i]=="normal") { } */ // standard standardsteuersatz if($tmp['umsatzsteuer'][$i]==='befreit') { $this->app->DB->Update("UPDATE artikel SET umsatzsteuer='befreit' WHERE id='".$artikelid."' LIMIT 1"); } elseif($tmp['umsatzsteuer'][$i]=='7.00' || $tmp['umsatzsteuer'][$i]==='7%' || $tmp['umsatzsteuer'][$i]==='7.00%' || $tmp['umsatzsteuer'][$i]=="7" || $this->app->erp->Firmendaten("steuersatz_ermaessigt")==$tmp['umsatzsteuer'][$i] || $tmp['umsatzsteuer'][$i]==='ermaessigt') { $this->app->DB->Update("UPDATE artikel SET umsatzsteuer='ermaessigt' WHERE id='".$artikelid."' LIMIT 1"); } else{ $this->app->DB->Update("UPDATE artikel SET umsatzsteuer='normal' WHERE id='" . $artikelid . "' LIMIT 1"); } // Artikelkategorie if($tmp['artikelkategorie'][$i]!='') { $tmp['typ'][$i] = $tmp['artikelkategorie'][$i]; if(is_numeric($tmp['typ'][$i])) { $this->app->DB->Update("UPDATE artikel SET typ='".$tmp['typ'][$i]."_kat' WHERE id='".$artikelid."' LIMIT 1"); } else { $this->app->DB->Update("UPDATE artikel SET typ='".$this->app->DB->real_escape_string($tmp['typ'][$i])."' WHERE id='".$artikelid."' LIMIT 1"); } } $this->app->erp->RunHook('importvorlage_artikel', 3, $artikelid, $tmp, $i); for($lpk = 1; $lpk <= 5; $lpk++) { if($tmp['lager_platz'.($lpk>1?$lpk:'')][$i]!=""){ $lager_id = $this->app->DB->Select("SELECT lager FROM lager_platz WHERE kurzbezeichnung='".$this->app->DB->real_escape_string($tmp['lager_platz'.($lpk>1?$lpk:'')][$i])."' AND kurzbezeichnung!=''"); if($lager_id <=0) { $lager_id = $this->app->DB->Select("SELECT id FROM lager WHERE geloescht!='1' LIMIT 1"); } $felder['lagerartikel']=1; $tmp['lagerartikel'][$i]=1; $this->app->DB->Update("UPDATE artikel SET lagerartikel='1' WHERE id='$artikelid' LIMIT 1"); $regal = $this->app->erp->CreateLagerplatz($lager_id,$tmp['lager_platz'.($lpk>1?$lpk:'')][$i]); if($lpk === 1 && !isset($tmp['lager_menge_total']) && !isset($tmp['lager_menge_addieren'])){ $this->app->DB->Update("UPDATE `artikel` set `lager_platz` = '{$regal}' WHERE `id` = '{$artikelid}'"); } if($tmp['lager_menge_addieren'.($lpk>1?$lpk:'')][$i] > 0) { $vpeid = 0; if(isset($tmp['lager_vpe_menge'.$lpk]) && $tmp['lager_vpe_menge'.$lpk][$i] >= 0) { $vpeid = $this->app->erp->CreateLagerPlatzInhaltVPE($artikelid, $tmp['lager_vpe_menge'.$lpk][$i], $tmp['lager_vpe_gewicht'.$lpk][$i], $tmp['lager_vpe_laenge'.$lpk][$i], $tmp['lager_vpe_breite'.$lpk][$i], $tmp['lager_vpe_hoehe'.$lpk][$i] , $tmp['lager_vpe_menge'.$lpk.'2'][$i], $tmp['lager_vpe_gewicht'.$lpk.'2'][$i], $tmp['lager_vpe_laenge'.$lpk.'2'][$i], $tmp['lager_vpe_breite'.$lpk.'2'][$i], $tmp['lager_vpe_hoehe'.$lpk.'2'][$i]); } $this->app->erp->LagerEinlagernDifferenz($artikelid,$tmp['lager_menge_addieren'.($lpk>1?$lpk:'')][$i],$regal,"","Importzentrale",1, $vpeid); } //chargen importieren if(!empty($tmp['lager_mhd'.($lpk>1?$lpk:'')][$i]) && !empty($tmp['lager_charge'.($lpk>1?$lpk:'')][$i])){ $this->app->erp->AddChargeLagerOhneBewegung( $artikelid, $tmp['lager_menge_addieren' . ($lpk > 1 ? $lpk : '')][$i], $regal, "", $tmp['lager_charge' . ($lpk > 1 ? $lpk : '')][$i] ); $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($artikelid, $tmp['lager_menge_addieren' . ($lpk > 1 ? $lpk : '')][$i], $regal, date('Y-m-d', strtotime($tmp['lager_mhd' . ($lpk > 1 ? $lpk : '')][$i])), $tmp['lager_charge' . ($lpk > 1 ? $lpk : '')][$i]); } else if (!empty($tmp['lager_mhd'.($lpk>1?$lpk:'')][$i])){ $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($artikelid, $tmp['lager_menge_addieren' . ($lpk > 1 ? $lpk : '')][$i], $regal, date('Y-m-d', strtotime($tmp['lager_mhd' . ($lpk > 1 ? $lpk : '')][$i])), ""); } else if(!empty($tmp['lager_charge'.($lpk>1?$lpk:'')][$i])){ $this->app->erp->AddChargeLagerOhneBewegung($artikelid, $tmp['lager_menge_addieren' . ($lpk > 1 ? $lpk : '')][$i], $regal, "", $tmp['lager_charge' . ($lpk > 1 ? $lpk : '')][$i]); } if($tmp['lager_menge_total'.($lpk>1?$lpk:'')][$i] >= 0 && $regal > 0 && $tmp['lager_menge_total'.($lpk>1?$lpk:'')][$i]!="") { $tmp_anzahl_lager = $this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi LEFT JOIN lager_platz lp ON lp.id=lpi.lager_platz WHERE lpi.artikel='$artikelid' AND lp.id='$regal'"); if($tmp_anzahl_lager > 0){ $this->app->erp->LagerAuslagernRegal($artikelid, $regal, $tmp_anzahl_lager, $projekt, "Importzentrale"); } if(isset($tmp['lager_vpe_menge'.$lpk]) && $tmp['lager_vpe_menge'.$lpk][$i] >= 0) { $vpeid = $this->app->erp->CreateLagerPlatzInhaltVPE($artikelid, $tmp['lager_vpe_menge'.$lpk][$i], $tmp['lager_vpe_gewicht'.$lpk][$i], $tmp['lager_vpe_laenge'.$lpk][$i], $tmp['lager_vpe_breite'.$lpk][$i], $tmp['lager_vpe_hoehe'.$lpk][$i], $tmp['lager_vpe_menge'.$lpk.'2'][$i], $tmp['lager_vpe_gewicht'.$lpk.'2'][$i], $tmp['lager_vpe_laenge'.$lpk.'2'][$i], $tmp['lager_vpe_breite'.$lpk.'2'][$i], $tmp['lager_vpe_hoehe'.$lpk.'2'][$i]); }else { $vpeid = 0; } $this->app->erp->LagerEinlagernDifferenz($artikelid,$tmp['lager_menge_total'.($lpk>1?$lpk:'')][$i],$regal,"","Importzentrale",1, $vpeid); } /* lager_vpe_menge */ } } for($pi = 1; $pi <= 2; $pi++) { if(!empty($tmp['provision'.$pi][$i])) { if(strpos($tmp['provision'.$pi][$i],'%') != false) { $tmp['provision'.$pi][$i] = (float)(str_replace(array('%',','),array('','.'),$tmp['provision'.$pi][$i])); } if(!empty($tmp['provisiongruppe'.$pi][$i])) { if(is_numeric($tmp['provisiongruppe'.$pi][$i])) { $gruppenid = (int)$tmp['provisiongruppe'.$pi][$i]; }else{ $gruppenid = $this->app->DB->Select("SELECT id FROM gruppen WHERE name like '".$this->app->DB->real_escape_string($tmp['provisiongruppe'.$pi][$i])."' LIMIT 1"); if(!$gruppenid)$gruppenid = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer like '".$this->app->DB->real_escape_string($tmp['provisiongruppe'.$pi][$i])."' LIMIT 1"); } if($gruppenid) { $checkprovision = $this->app->DB->Select("SELECT id FROM provision_regeln WHERE artikel = '$artikelid' AND gruppe = '$gruppenid' LIMIT 1"); if(!$this->app->DB->error()) { if($checkprovision) { $this->app->DB->Update("UPDATE provision_regeln SET provision = '".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."' WHERE id = '$checkprovision' LIMIT 1"); $this->app->DB->Update("UPDATE provision_regeln SET bis = '0000-00-00' WHERE id = '$checkprovision' LIMIT 1"); }else{ $this->app->DB->Insert("INSERT INTO provision_regeln (artikel, gruppe, provision, typ) VALUES ('$artikelid','$gruppenid','".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."','')"); $checkprovision = $this->app->DB->GetInsertID(); } } if(!empty($tmp['provisiontyp'.$pi][$i])) { $this->app->DB->Update("UPDATE provision_regeln SET typ = '".strtolower(trim($this->app->DB->real_escape_string($tmp['provisiontyp'.$pi][$i])))."' WHERE id = '$checkprovision' LIMIT 1"); } } }elseif(empty($tmp['provisiongruppe'.$pi])){ if(empty($tmp['provisionadresse'.$pi][$i]) && empty($tmp['provisionmitarbeiternummer'.$pi][$i])) { $checkprovision = $this->app->DB->Select("SELECT id FROM provisionenartikel_provision WHERE adresse = 0 AND artikel = '$artikelid' LIMIT 1"); if($checkprovision) { $this->app->DB->Update("UPDATE provisionenartikel_provision SET provision = '".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."' WHERE id = '$checkprovision' LIMIT 1"); $this->app->DB->Update("UPDATE provisionenartikel_provision SET gueltigbis = '0000-00-00' WHERE id = '$checkprovision' LIMIT 1"); }else{ $this->app->DB->Insert("INSERT INTO provisionenartikel_provision (artikel, adresse, provision) VALUES ('$artikelid','0','".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."')"); $checkprovision = $this->app->DB->GetInsertID(); } if(!empty($tmp['provisiontyp'.$pi][$i])) { $this->app->DB->Update("UPDATE provisionenartikel_provision SET provisiontyp = '".strtolower(trim($this->app->DB->real_escape_string($tmp['provisiontyp'.$pi][$i])))."' WHERE id = '$checkprovision' LIMIT 1"); } }elseif(!empty($tmp['provisionadresse'.$pi][$i])){ $checkprovision = $this->app->DB->Select("SELECT id FROM provisionenartikel_provision WHERE adresse = '".(int)$tmp['provisionadresse'.$pi][$i]."' AND artikel = '$artikelid' LIMIT 1"); if($checkprovision) { $this->app->DB->Update("UPDATE provisionenartikel_provision SET provision = '".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."' WHERE id = '$checkprovision' LIMIT 1"); $this->app->DB->Update("UPDATE provisionenartikel_provision SET gueltigbis = '0000-00-00' WHERE id = '$checkprovision' LIMIT 1"); }else{ $this->app->DB->Insert("INSERT INTO provisionenartikel_provision (artikel, adresse, provision) VALUES ('$artikelid','".(int)$tmp['provisionadresse'.$pi][$i]."','".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."')"); $checkprovision = $this->app->DB->GetInsertID(); } if(!empty($tmp['provisiontyp'.$pi][$i])) { $this->app->DB->Update("UPDATE provisionenartikel_provision SET provisiontyp = '".strtolower(trim($this->app->DB->real_escape_string($tmp['provisiontyp'.$pi][$i])))."' WHERE id = '$checkprovision' LIMIT 1"); } }elseif(!empty($tmp['provisionmitarbeiternummer'.$pi][$i])) { $provisionadresse = (int)$this->app->DB->Select("SELECT id FROM adresse WHERE mitarbeiternummer = '".$this->app->DB->real_escape_string($tmp['provisionmitarbeiternummer'.$pi][$i])."' LIMIT 1"); if($provisionadresse) { $checkprovision = $this->app->DB->Select("SELECT id FROM provisionenartikel_provision WHERE adresse = '".$provisionadresse."' AND artikel = '$artikelid' LIMIT 1"); if($checkprovision) { $this->app->DB->Update("UPDATE provisionenartikel_provision SET provision = '".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."' WHERE id = '$checkprovision' LIMIT 1"); $this->app->DB->Update("UPDATE provisionenartikel_provision SET gueltigbis = '0000-00-00' WHERE id = '$checkprovision' LIMIT 1"); }else{ $this->app->DB->Insert("INSERT INTO provisionenartikel_provision (artikel, adresse, provision) VALUES ('$artikelid','".$provisionadresse."','".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."')"); $checkprovision = $this->app->DB->GetInsertID(); } if(!empty($tmp['provisiontyp'.$pi][$i])) { $this->app->DB->Update("UPDATE provisionenartikel_provision SET provisiontyp = '".strtolower(trim($this->app->DB->real_escape_string($tmp['provisiontyp'.$pi][$i])))."' WHERE id = '$checkprovision' LIMIT 1"); } } } } } } } else if ($tmp['cmd'][$i]==='update') { // && $tmp['checked'][$i]=="1") { // wenn er vorhanden ist nur ein Update braucht if($artikelid == '') { $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE ean = '".$tmp['ean'][$i]."' AND geloescht <> 1"); } if($artikelid == '') { $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer = '".$tmp['herstellernummer'][$i]."' AND geloescht <> 1 "); } if(is_array($artikelid)) { $artikelid = 0; } if($artikelid > 0) { //foreach($fields as $key=>$value) foreach($fieldset as $key=>$val) { $valu = $val['field']; $bedingung = ''; $value = ''; if(isset($val['bedingung'])) { $bedingung = $val['bedingung']; } if(isset($val['nr'])) { $value = trim($tmp[$valu][$i]); if(isset($val['inv'])) { if($value != '1') { $value = 1; }else{ $value = 0; } } } elseif(isset($val['vorlage'])) { $value = $val['vorlage']; } if(isset($val['bedingung'])) { $value = $this->ImportvorlageBedingung($value, $val['bedingung']); } $tmp[$valu][$i] = $value; $value = $valu; } $this->app->erp->RunHook('importvorlage_artikel', 3, $artikelid, $tmp, $i); foreach($fieldset as $key=>$val) { $value = $val['field']; switch($value) { case "name_de": case "name_en": case "uebersicht_de": case "uebersicht_en": case "beschreibung_online_de": case "beschreibung_online_en": case "metatitle_de": case "metatitle_en": case "metadescription_de": case "metadescription_en": case "metakeywords_de": case "metakeywords_en": case "kurztext_en": case "kurztext_de": case "anabregs_text": case "anabregs_text_en": case "lagerartikel": case "ean": case "chargenverwaltung": case "herkunftsland": case "zolltarifnummer": case "xvp": case "inaktiv": case "ursprungsregion": case "produktion": case "gewicht": case "laenge": case "breite": case "hoehe": case "mindestlager": case "mindestbestellung": case "hersteller": case "internerkommentar": case "herstellerlink": case "herstellernummer": case "allelieferanten": case "geraet": case "serviceartikel": case "steuer_erloese_inland_normal": case "steuer_erloese_inland_ermaessigt": case "steuer_aufwendung_inland_nichtsteuerbar": case "steuer_erloese_inland_innergemeinschaftlich": case "steuer_erloese_inland_eunormal": case "steuer_erloese_inland_euermaessigt": case "steuer_erloese_inland_export": case "steuer_aufwendung_inland_normal": case "steuer_aufwendung_inland_ermaessigt": case "steuer_aufwendung_inland_innergemeinschaftlich": case "steuer_aufwendung_inland_eunormal": case "steuer_aufwendung_inland_euermaessigt": case "steuer_aufwendung_inland_import": case "mindesthaltbarkeitsdatum": case "seriennummern": case "freifeld1": case "freifeld2": case "freifeld3": case "freifeld4": case "freifeld5": case "freifeld6": case "freifeld7": case "freifeld8": case "freifeld9": case "freifeld10": case "freifeld11": case "freifeld12": case "freifeld13": case "freifeld14": case "freifeld15": case "freifeld16": case "freifeld17": case "freifeld18": case "freifeld19": case "freifeld20": case "freifeld21": case "freifeld22": case "freifeld23": case "freifeld24": case "freifeld25": case "freifeld26": case "freifeld27": case "freifeld28": case "freifeld29": case "freifeld30": case "freifeld31": case "freifeld32": case "freifeld33": case "freifeld34": case "freifeld35": case "freifeld36": case "freifeld37": case "freifeld38": case "freifeld39": case "freifeld40": case "autolagerlampe": case "pseudolager": case "lagerkorrekturwert": case "restmenge": case "pseudopreis": case "intern_gesperrt": case "geloescht": case "juststueckliste": case "stueckliste": case "intern_gesperrtgrund": case "inventurek": case "berechneterek": case "berechneterekwaehrung": case "inventurekaktiv": case "verwendeberechneterek": case 'artikelautokalkulation': case 'artikelabschliessenkalkulation': case 'artikelfifokalkulation': if($value==='laenge' || $value==='breite' || $value==='hoehe' || $value==='gewicht' || $value==='berechneterek' || $value==='pseudopreis' || $value==='berechneterek' || $value==='inventurek'){ $tmp[$value][$i] = str_replace(',', '.', $tmp[$value][$i]); } if($value=="lagerkorrekturwert"){ $tmp[$value][$i] = preg_replace('/-\D/', '', $tmp[$value][$i]); } if($value==='beschreibung_online_en'){ $value='uebersicht_en'; } if($value==='beschreibung_online_de'){ $value='uebersicht_de'; } $this->app->DB->Update("UPDATE artikel SET ".$value."='".$this->app->DB->real_escape_string($tmp[$value][$i])."' WHERE id='".$artikelid."' LIMIT 1"); break; case "matrixproduktvon": case "vkmeldungunterdruecken": if($tmp[$value][$i] == 1 || $tmp[$value][$i] == 0)$this->app->DB->Update("UPDATE artikel SET ".$value."='".$this->app->DB->real_escape_string($tmp[$value][$i])."' WHERE id='".$artikelid."' LIMIT 1"); break; case "beschreibung_de": case "artikelbeschreibung_de": $this->app->DB->Update("UPDATE artikel SET anabregs_text='".$this->app->DB->real_escape_string($tmp[$value][$i])."' WHERE id='".$artikelid."' LIMIT 1"); break; case "beschreibung_en": case "artikelbeschreibung_en": $this->app->DB->Update("UPDATE artikel SET anabregs_text_en='".$this->app->DB->real_escape_string($tmp[$value][$i])."' WHERE id='".$artikelid."' LIMIT 1"); break; case "projekt": if($tmp['projekt'][$i]!="") { $tmp['projekt'][$i] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$this->app->DB->real_escape_string($tmp['projekt'][$i])."' AND abkuerzung!='' LIMIT 1"); } $this->app->DB->Update("UPDATE artikel SET projekt='".$tmp['projekt'][$i]."' WHERE id='".$artikelid."' LIMIT 1"); break; case "artikelkategorie": case "typ": if($tmp['artikelkategorie'][$i]!="") { $tmp['typ'][$i] = $tmp['artikelkategorie'][$i]; } if(is_numeric($tmp['typ'][$i])) { $this->app->DB->Update("UPDATE artikel SET typ='".$tmp['typ'][$i]."_kat' WHERE id='".$artikelid."' LIMIT 1"); } else { $this->app->DB->Update("UPDATE artikel SET typ='".$this->app->DB->real_escape_string($tmp['typ'][$i])."' WHERE id='".$artikelid."' LIMIT 1"); } break; case "artikelkategorie_name": if(!empty($tmp['artikelkategorie_name'][$i])){ $check = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung like '".$this->app->DB->real_escape_string($tmp['artikelkategorie_name'][$i])."' order by geloescht LIMIT 1"); if(!$check) { $this->app->DB->Insert("INSERT INTO artikelkategorien (bezeichnung) values ('".$this->app->DB->real_escape_string($tmp['artikelkategorie_name'][$i])."')"); $check = $this->app->DB->GetInsertID(); }else $this->app->DB->Update("UPDATE artikelkategorien set geloescht = 0 WHERE id = '$check' LIMIT 1"); if($check)$this->app->DB->Update("UPDATE artikel SET typ='".$check."_kat' WHERE id='".$artikelid."' LIMIT 1"); } break; case "artikelbaum1": case "artikelbaum2": case "artikelbaum3": case "artikelbaum4": case "artikelbaum5": case "artikelbaum6": case "artikelbaum7": case "artikelbaum8": case "artikelbaum9": case "artikelbaum10": case "artikelbaum11": case "artikelbaum12": case "artikelbaum13": case "artikelbaum14": case "artikelbaum15": case "artikelbaum16": case "artikelbaum17": case "artikelbaum18": case "artikelbaum19": case "artikelbaum20": $artikelbaumanweisung = $tmp[$value][$i]; if($artikelbaumanweisung != ''){ if(strtolower($artikelbaumanweisung) == 'clear'){ $this->app->DB->Delete("DELETE FROM artikelbaum_artikel WHERE artikel = '$artikelid'"); } $artikelbaumteile = explode("|", $artikelbaumanweisung); $artikelbaumzumhinzufuegen = array(); $artikelbaumtmpkategorieid = 0; for ($ii=0; $ii < (!empty($artikelbaumteile)?count($artikelbaumteile):0); $ii++) { $kategorieid = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE geloescht = 0 AND bezeichnung = '".$this->app->DB->real_escape_string($artikelbaumteile[$ii])."' AND parent = '$artikelbaumtmpkategorieid' LIMIT 1"); if($kategorieid == ''){ break; }else{ $artikelbaumzumhinzufuegen[] = $kategorieid; $artikelbaumtmpkategorieid = $kategorieid; } } for ($ii=0; $ii < (!empty($artikelbaumzumhinzufuegen)?count($artikelbaumzumhinzufuegen):0); $ii++) { $vorhanden = $this->app->DB->Select("SELECT id FROM artikelbaum_artikel WHERE artikel = '$artikelid' AND kategorie = '".$artikelbaumzumhinzufuegen[$ii]."' LIMIT 1"); if($vorhanden == ''){ $this->app->DB->Insert("INSERT INTO artikelbaum_artikel (artikel, kategorie) VALUES ('$artikelid','".$artikelbaumzumhinzufuegen[$ii]."')"); } } } break; /* case "artikelunterkategorie_name": if(!empty($tmp['artikelunterkategorie_name'][$i]) && (!empty($tmp['artikelkategorie_name'][$i]) || !empty($tmp['artikelkategorie'][$i]))){ if(!empty($tmp['artikelkategorie'][$i])) { $check = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '".(int)$tmp['artikelkategorie'][$i]."' order by geloescht LIMIT 1"); }else{ $check = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung like '".$this->app->DB->real_escape_string($tmp['artikelkategorie_name'][$i])."' order by geloescht LIMIT 1"); if(!$check) { $this->app->DB->Insert("INSERT INTO artikelkategorien (bezeichnung) values ('".$this->app->DB->real_escape_string($tmp['artikelkategorie_name'][$i])."')"); $check = $this->app->DB->GetInsertID(); }else $this->app->DB->Update("UPDATE artikelkategorien set geloescht = 0 WHERE id = '$check' LIMIT 1"); } if($check) { $felder['typ'] = $check.'_kat'; $this->app->DB->Update("UPDATE artikel SET typ='".$check."_kat' WHERE id='".$artikelid."' LIMIT 1"); $check2 = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE bezeichnung like '".$this->app->DB->real_escape_string($tmp['artikelunterkategorie_name'][$i])."' order by geloescht, parent = '$check' DESC LIMIT 1"); if(!$check2) { $this->app->DB->Insert("INSERT INTO artikelkategorien (bezeichnung,parent) values ('".$this->app->DB->real_escape_string($tmp['artikelunterkategorie_name'][$i])."', '$check')"); $check2 = $this->app->DB->GetInsertID(); }else $this->app->DB->Update("UPDATE artikelkategorien set geloescht = 0 WHERE id = '$check2' LIMIT 1"); if($check2) { $check3 = $this->app->DB->Select("SELECT id FROM artikelbaum_artikel WHERE kategorie = '$check2' AND artikel = '$artikelid' LIMIT 1"); if(!mysqli_error($this->app->DB->connection) && !$check3) { $this->app->DB->Insert("INSERT INTO artikelbaum_artikel (kategorie, artikel) VALUES ('$check2','$artikelid')"); } } } } break;*/ case "stuecklistevonartikel": if($tmp['stuecklistevonartikel'][$i]!="" && $artikelid) { $tmpartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".$tmp['stuecklistevonartikel'][$i]."' AND nummer!='' LIMIT 1"); if($tmpartikelid > 0) { $this->app->DB->Update("UPDATE artikel set stueckliste = '1' WHERE id = '$tmpartikelid' LIMIT 1"); $this->app->DB->Update("UPDATE artikel typ='produktion' WHERE id = '$tmpartikelid' AND typ = '' LIMIT 1"); $stuecklistecheck = $this->app->DB->Select("SELECT id FROM stueckliste where stuecklistevonartikel = '$tmpartikelid' and artikel = '$artikelid' LIMIT 1"); if(!$stuecklistecheck) { $sort = 1 + (int)$this->app->DB->Select("SELECT max(sort) FROM stueckliste where stuecklistevonartikel = '$tmpartikelid' LIMIT 1"); if(!$this->app->erp->IstStuecklistenZirkel($artikelid, $tmpartikelid))$this->app->DB->Insert("INSERT INTO stueckliste (artikel, stuecklistevonartikel,menge,layer,place,sort,firma) values ('$artikelid','$tmpartikelid','1','Top','DP','$sort','1')"); $stuecklistecheck = $this->app->DB->GetInsertID(); } if($stuecklistecheck) { if(isset($tmp['stuecklistemenge'][$i]) && $tmp['stuecklistemenge'][$i] != "") { $menge = round((double)str_replace(',','.',$tmp['stuecklistemenge'][$i]),4); if($menge <= 0)$menge = 1; $this->app->DB->Update("UPDATE stueckliste set menge = '$menge' where stuecklistevonartikel = '$tmpartikelid' and artikel = '$artikelid' LIMIT 1"); } if($tmp['stuecklisteart'][$i] != "") { $art = $this->app->DB->real_escape_string($tmp['stuecklisteart'][$i]); $this->app->DB->Update("UPDATE stueckliste SET art = '$art' where stuecklistevonartikel = '$tmpartikelid' and artikel = '$artikelid' LIMIT 1"); } if($tmp['stuecklistelayer'][$i] != "") { $layer = $this->app->DB->real_escape_string($tmp['stuecklistelayer'][$i]); $this->app->DB->Update("UPDATE stueckliste SET layer = '$layer' where stuecklistevonartikel = '$tmpartikelid' and artikel = '$artikelid' LIMIT 1"); } if($tmp['stuecklisteplace'][$i] != "") { $place = $this->app->DB->real_escape_string($tmp['stuecklisteplace'][$i]); $this->app->DB->Update("UPDATE stueckliste set place = '$place' where stuecklistevonartikel = '$tmpartikelid' and artikel = '$artikelid' LIMIT 1"); } } } } break; case "einheit": if($tmp['einheit'][$i] != "") { if($artikelid)$this->app->DB->Update("UPDATE artikel SET einheit='".$this->app->DB->real_escape_string($tmp['einheit'][$i])."' WHERE id='".$artikelid."' LIMIT 1"); } break; case "umsatzsteuer": if($tmp[$value][$i]=="" || $tmp[$value][$i]=="19.00" || $tmp[$value][$i]=="normal" || $tmp[$value][$i]=="19%" || $tmp[$value][$i]=="19.00%" || $tmp[$value][$i]=="19") { $this->app->DB->Update("UPDATE artikel SET umsatzsteuer='normal' WHERE id='".$artikelid."' LIMIT 1"); } if($tmp[$value][$i]=="7.00" || $tmp[$value][$i]=="7%" || $tmp[$value][$i]=="7.00%" || $tmp[$value][$i]=="7" || $tmp[$value][$i]=="ermaessigt") { $this->app->DB->Update("UPDATE artikel SET umsatzsteuer='ermaessigt' WHERE id='".$artikelid."' LIMIT 1"); } if($tmp[$value][$i]=="befreit")$this->app->DB->Update("UPDATE artikel SET umsatzsteuer='befreit' WHERE id='".$artikelid."' LIMIT 1"); break; case "matrixprodukt": if($tmp[$value][$i]=="1") { $this->app->DB->Update("UPDATE artikel SET matrixprodukt=1 WHERE id='".$artikelid."' LIMIT 1"); if(!empty($tmp['matrixgruppe1']) && !empty($tmp['matrixgruppe1'][$i]) && (String)$tmp['matrixgruppe1'][$i] !=='') { $matrixgruppe2 = 0; $matrixgruppe1 = $this->app->DB->Select("SELECT id FROM `matrixprodukt_eigenschaftengruppen` WHERE aktiv = 1 AND name ='". $this->app->DB->real_escape_string($tmp['matrixgruppe1'][$i])."' LIMIT 1"); if($matrixgruppe1) { $matrixgruppenname1 = $this->app->DB->Select("SELECT name FROM `matrixprodukt_eigenschaftengruppen` WHERE id = '$matrixgruppe1' LIMIT 1"); $optionen1 = $this->app->DB->SelectArr("SELECT * FROM `matrixprodukt_eigenschaftenoptionen` WHERE gruppe = '$matrixgruppe1' AND aktiv = 1 ORDER by sort, id "); $gruppenok = true; if(!$optionen1)$gruppenok = false; if(!empty($tmp['matrixgruppe2']) && !empty($tmp['matrixgruppe2'][$i]) && (String)$tmp['matrixgruppe2'][$i] !=='') { $matrixgruppe2 = $this->app->DB->Select("SELECT id FROM `matrixprodukt_eigenschaftengruppen` WHERE aktiv = 1 AND name ='". $this->app->DB->real_escape_string($tmp['matrixgruppe2'][$i])."' LIMIT 1"); if(!$matrixgruppe2) { $gruppenok = false; }else{ $matrixgruppenname2 = $this->app->DB->Select("SELECT name FROM `matrixprodukt_eigenschaftengruppen` WHERE id = '$matrixgruppe2' LIMIT 1"); $optionen2 = $this->app->DB->SelectArr("SELECT * FROM `matrixprodukt_eigenschaftenoptionen` WHERE gruppe = '$matrixgruppe2' AND aktiv = 1 ORDER by sort, id "); if(!$optionen2)$gruppenok = false; } } if($gruppenok) { $existgruppen = $this->app->DB->SelectArr("SELECT * FROM matrixprodukt_eigenschaftengruppen_artikel WHERE artikel = '$artikelid'"); if(!$existgruppen) { $this->app->DB->Insert("INSERT INTO matrixprodukt_eigenschaftengruppen_artikel (artikel, aktiv, name, sort) SELECT '$artikelid' as artikel, '1' as aktiv, name, '0' as sort FROM matrixprodukt_eigenschaftengruppen WHERE id = '$matrixgruppe1' "); if(!empty($tmp['matrixgruppe2']) && !empty($tmp['matrixgruppe2'][$i]) && (String)$tmp['matrixgruppe2'][$i] !=='' && $matrixgruppe2) { $this->app->DB->Insert("INSERT INTO matrixprodukt_eigenschaftengruppen_artikel (artikel, aktiv, name, sort) SELECT '$artikelid' as artikel, '1' as aktiv, name, '1' as sort FROM matrixprodukt_eigenschaftengruppen WHERE id = '$matrixgruppe2' "); } $existgruppen = $this->app->DB->SelectArr("SELECT * FROM matrixprodukt_eigenschaftengruppen_artikel WHERE artikel = '$artikelid'"); } if($existgruppen) { $gruppe1found = false; $gruppe2found = false; foreach($existgruppen as $kg => $vg) { if(strtolower($vg['name']) == strtolower($tmp['matrixgruppe1'][$i])) { $gruppe1found = $vg['id']; $optionen1ex = $this->app->DB->SelectArr("SELECT * FROM `matrixprodukt_eigenschaftenoptionen_artikel` WHERE artikel = '$artikelid' AND gruppe = '$gruppe1found' AND aktiv = 1 ORDER BY sort"); } if($matrixgruppe2) { if(strtolower($vg['name']) == strtolower($tmp['matrixgruppe2'][$i])) { $gruppe2found = $vg['id']; $optionen2ex = $this->app->DB->SelectArr("SELECT * FROM `matrixprodukt_eigenschaftenoptionen_artikel` WHERE artikel = '$artikelid' AND gruppe = '$gruppe2found' AND aktiv = 1 ORDER BY sort"); } } } if(!$gruppe1found)$gruppenok = false; if($matrixgruppe2 && !$gruppe2found)$gruppenok = false; } if($gruppenok) { if(!$gruppe1found) { $this->app->DB->Insert("INSERT INTO matrixprodukt_eigenschaftengruppen_artikel (artikel, aktiv, name, sort) SELECT '$artikelid' as artikel, '1' as aktiv, name, '0' as sort FROM matrixprodukt_eigenschaftengruppen WHERE id = '$matrixgruppe1' "); $gruppe1found = $this->app->DB->GetInsertID(); } if($matrixgruppe2 && !$gruppe2found) { $this->app->DB->Insert("INSERT INTO matrixprodukt_eigenschaftengruppen_artikel (artikel, aktiv, name, sort) SELECT '$artikelid' as artikel, '1' as aktiv, name, '1' as sort FROM matrixprodukt_eigenschaftengruppen WHERE id = '$matrixgruppe2' "); $gruppe2found = $this->app->DB->GetInsertID(); } foreach($optionen1 as $ko => $vo) { $foundoption1 = false; if(isset($optionen1ex)){ foreach($optionen1ex as $koa => $voa) { if(strtolower($vo['name']) == strtolower($voa['name'])) { $foundoption1 = $voa['id']; $optionen1[$ko]['matrixprodukt_eigenschaftenoptionen_artikel'] = $foundoption1; } } } if(!$foundoption1) { $this->app->DB->Insert("INSERT INTO matrixprodukt_eigenschaftenoptionen_artikel (name,name_ext, artikel, sort, gruppe, aktiv, erstellt, bearbeiter) SELECT name,name_ext, '$artikelid' as artikel, sort, '$gruppe1found' as gruppe, '1' as aktiv, now() as erstellt, '".$this->app->DB->real_escape_string($this->app->User->GetName())."' as bearbeiter FROM matrixprodukt_eigenschaftenoptionen WHERE id = '".$vo['id']."' "); $optionen1[$ko]['matrixprodukt_eigenschaftenoptionen_artikel'] = $this->app->DB->GetInsertID(); } } if($matrixgruppe2) { foreach($optionen2 as $ko => $vo) { $foundoption2 = false; if(isset($optionen2ex)){ foreach($optionen2ex as $koa => $voa) { if(strtolower($vo['name']) == strtolower($voa['name'])) { $foundoption2 = $voa['id']; $optionen2[$ko]['matrixprodukt_eigenschaftenoptionen_artikel'] = $foundoption2; } } } if(!$foundoption2) { $this->app->DB->Insert("INSERT INTO matrixprodukt_eigenschaftenoptionen_artikel (name,name_ext, artikel, sort, gruppe, aktiv, erstellt, bearbeiter) SELECT name,name_ext, '$artikelid' as artikel, sort, '$gruppe2found' as gruppe, '1' as aktiv, now() as erstellt, '".$this->app->DB->real_escape_string($this->app->User->GetName())."' as bearbeiter FROM matrixprodukt_eigenschaftenoptionen WHERE id = '".$vo['id']."' "); $optionen2[$ko]['matrixprodukt_eigenschaftenoptionen_artikel'] = $this->app->DB->GetInsertID(); } } } if($matrixgruppe2) { foreach($optionen1 as $ko => $vo) { foreach($optionen2 as $ko2 => $vo2) { $check = $this->app->DB->Select(" SELECT a.id FROM artikel a INNER JOIN `matrixprodukt_optionen_zu_artikel` moza1 ON a.id = moza1.artikel AND moza1.option_id = '".$vo['matrixprodukt_eigenschaftenoptionen_artikel']."' INNER JOIN `matrixprodukt_optionen_zu_artikel` moza2 ON a.id = moza2.artikel AND moza2.option_id = '".$vo2['matrixprodukt_eigenschaftenoptionen_artikel']."' LIMIT 1 "); if(!$check) { $checkarr = $this->app->DB->SelectArr("SELECT * FROM artikel WHERE id = '$artikelid' LIMIT 1"); if($checkarr) { unset($checkarr[0]['ean']); unset($checkarr[0]['nummer']); $matrixartikelnummer = str_replace('|',',',$tmp['matrixartikelnummer'][$i]); if($matrixartikelnummer == 2) { $checkarr[0]['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikelid' LIMIT 1"); $checkarr[0]['nummer'] .= '-'.trim(preg_replace('#[^-_A-Za-z0-9]#', '', str_replace( array('Ü','Ö','Ä','ß','&UUML;','&AUML;','&OUML;','&SZLIG;',' '), array('UE','OE','AE','SS','UE','AE','OE','SS','_'), trim(strtoupper( $this->app->DB->Select("SELECT name FROM `matrixprodukt_eigenschaftenoptionen_artikel` WHERE id = '".$vo['matrixprodukt_eigenschaftenoptionen_artikel']."' ") )) ) )).'-'.trim(preg_replace('#[^-_A-Za-z0-9]#', '', str_replace( array('Ü','Ö','Ä','ß','&UUML;','&AUML;','&OUML;','&SZLIG;',' '), array('UE','OE','AE','SS','UE','AE','OE','SS','_'), trim(strtoupper( $this->app->DB->Select("SELECT name FROM `matrixprodukt_eigenschaftenoptionen_artikel` WHERE id = '".$vo2['matrixprodukt_eigenschaftenoptionen_artikel']."' ") )) ) )); }elseif($matrixartikelnummer && $matrixartikelnummer[0] == '3') { $checkarr[0]['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikelid' LIMIT 1"); $matrixartikelnummera = explode(',',$matrixartikelnummer); $prefixtrennzeichen = '-'; if(isset($matrixartikelnummera[1]))$prefixtrennzeichen = $matrixartikelnummera[1]; if(strlen($prefixtrennzeichen) == 0)$prefixtrennzeichen = '-'; $prefixstellen = 2; if(isset($matrixartikelnummera[2]))$prefixstellen = $matrixartikelnummera[2]; if($prefixstellen < 1)$prefixstellen = 1; $prefixnaechstenummer = 1; if(!empty($matrixartikelnummera[3]))$prefixnaechstenummer = 1; $zaehler = 0; while($zeahler < 1000) { $zeahler++; $_prefixnaechstenummer = $prefixnaechstenummer; if(strlen($_prefixnaechstenummer) < $prefixstellen) { $prefixnaechstenummer = str_repeat('0', $prefixstellen-strlen($_prefixnaechstenummer)).$_prefixnaechstenummer; }else{ $prefixnaechstenummer = $_prefixnaechstenummer; } $neuenummer = $checkarr[0]['nummer'].trim($prefixtrennzeichen).$prefixnaechstenummer; if(!$this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$this->app->DB->real_escape_string($neuenummer)."' LIMIT 1")) { break; }else{ $prefixnaechstenummer++; } } $checkarr[0]['nummer'] = $neuenummer; }else{ $checkarr[0]['nummer'] = $this->app->erp->GetNextArtikelnummer($checkarr[0]['typ'], 1, $checkarr[0]['projekt']); } unset($checkarr[0]['id']); unset($checkarr[0]['zolltarifnummer']); unset($checkarr[0]['xvp']); unset($checkarr[0]['hersteller']); for($fi = 1; $fi <= 40; $fi++)unset($checkarr[0]['freifeld'.$fi]); unset($checkarr[0]['anabregs_text']); unset($checkarr[0]['anabregs_text_en']); unset($checkarr[0]['kurztext_de']); unset($checkarr[0]['kurztext_en']); unset($checkarr[0]['beschreibung_de']); unset($checkarr[0]['beschreibung_en']); unset($checkarr[0]['links_de']); unset($checkarr[0]['links_en']); unset($checkarr[0]['startseite_de']); unset($checkarr[0]['startseite_en']); if(isset($tmp['name_de']) && isset($tmp['name_de'][$i]))$checkarr[0]['name_de'] = $tmp['name_de'][$i]; if(isset($tmp['name_en']) && isset($tmp['name_en'][$i]))$checkarr[0]['name_en'] = $tmp['name_en'][$i]; $checkarr[0]['matrixprodukt'] = 0; $checkarr[0]['variante'] = 1; $checkarr[0]['variante_von'] = $artikelid; if(isset($tmp['matrixnamefuerunterartikel']) && $tmp['matrixnamefuerunterartikel'][$i]) { $checkarr[0]['name_de'] = $checkarr[0]['name_de'].' '.$matrixgruppenname1.': '.$vo['name'].' '.$matrixgruppenname2.': '.$vo2['name']; if($checkarr[0]['name_en'])$checkarr[0]['name_en'] = $checkarr[0]['name_en'].' '.$matrixgruppenname1.': '.$vo['name'].' '.$matrixgruppenname2.': '.$vo2['name']; } $check = $this->app->erp->InsertUpdateArtikel($checkarr[0]); if($returnids && !empty($check) && !in_array($check, $ids)) { $ids[] = $check; } if($check) { $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise WHERE artikel = '$artikelid'"); if($vkarr) { foreach($vkarr as $vv) { $vv['artikel'] = $check; unset($vv['id']); $this->app->DB->Insert("INSERT INTO verkaufspreise (id) VALUES ('')"); $newvkid = $this->app->DB->GetInsertID(); $this->app->FormHandler->ArrayUpdateDatabase("verkaufspreise",$newvkid,$vv,true); } } $this->app->DB->Insert("INSERT INTO matrixprodukt_optionen_zu_artikel (artikel, option_id) VALUES ('$check','".$vo['matrixprodukt_eigenschaftenoptionen_artikel']."')"); $this->app->DB->Insert("INSERT INTO matrixprodukt_optionen_zu_artikel (artikel, option_id) VALUES ('$check','".$vo2['matrixprodukt_eigenschaftenoptionen_artikel']."')"); } unset($checkarr[0]); } } } } }else{ foreach($optionen1 as $ko => $vo) { $check = $this->app->DB->Select(" SELECT a.id FROM artikel a INNER JOIN `matrixprodukt_optionen_zu_artikel` moza1 ON a.id = moza1.artikel AND moza1.option_id = '".$vo['matrixprodukt_eigenschaftenoptionen_artikel']."' LIMIT 1 "); if(!$check) { $checkarr = $this->app->DB->SelectArr("SELECT * FROM artikel WHERE id = '$artikelid' LIMIT 1"); if($checkarr) { unset($checkarr[0]['ean']); unset($checkarr[0]['id']); unset($checkarr[0]['zolltarifnummer']); unset($checkarr[0]['xvp']); unset($checkarr[0]['hersteller']); for($fi = 1; $fi <= 40; $fi++)unset($checkarr[0]['freifeld'.$fi]); unset($checkarr[0]['anabregs_text']); unset($checkarr[0]['anabregs_text_en']); unset($checkarr[0]['kurztext_de']); unset($checkarr[0]['kurztext_en']); unset($checkarr[0]['beschreibung_de']); unset($checkarr[0]['beschreibung_en']); unset($checkarr[0]['links_de']); unset($checkarr[0]['links_en']); unset($checkarr[0]['startseite_de']); unset($checkarr[0]['startseite_en']); unset($checkarr[0]['nummer']); if(isset($tmp['name_de']) && isset($tmp['name_de'][$i]))$checkarr[0]['name_de'] = $tmp['name_de'][$i]; if(isset($tmp['name_en']) && isset($tmp['name_en'][$i]))$checkarr[0]['name_en'] = $tmp['name_en'][$i]; $matrixartikelnummer = str_replace('|',',',$tmp['matrixartikelnummer'][$i]); if($matrixartikelnummer == 2) { $checkarr[0]['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikelid' LIMIT 1"); $checkarr[0]['nummer'] .= '-'.trim(preg_replace('#[^-_A-Za-z0-9]#', '', str_replace( array('Ü','Ö','Ä','ß','&UUML;','&AUML;','&OUML;','&SZLIG;',' '), array('UE','OE','AE','SS','UE','AE','OE','SS','_'), trim(strtoupper( $this->app->DB->Select("SELECT name FROM `matrixprodukt_eigenschaftenoptionen_artikel` WHERE id = '".$vo['matrixprodukt_eigenschaftenoptionen_artikel']."' ") )) ) )); }elseif($matrixartikelnummer && $matrixartikelnummer[0] == '3') { $checkarr[0]['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikelid' LIMIT 1"); $matrixartikelnummera = explode(',',$matrixartikelnummer); $prefixtrennzeichen = '-'; if(isset($matrixartikelnummera[1]))$prefixtrennzeichen = $matrixartikelnummera[1]; if(strlen($prefixtrennzeichen) == 0)$prefixtrennzeichen = '-'; $prefixstellen = 2; if(isset($matrixartikelnummera[2]))$prefixstellen = $matrixartikelnummera[2]; if($prefixstellen < 1)$prefixstellen = 1; $prefixnaechstenummer = 1; if(!empty($matrixartikelnummera[3]))$prefixnaechstenummer = 1; $zaehler = 0; while($zeahler < 1000) { $zeahler++; $_prefixnaechstenummer = $prefixnaechstenummer; if(strlen($_prefixnaechstenummer) < $prefixstellen) { $prefixnaechstenummer = str_repeat('0', $prefixstellen-strlen($_prefixnaechstenummer)).$_prefixnaechstenummer; }else{ $prefixnaechstenummer = $_prefixnaechstenummer; } $neuenummer = $checkarr[0]['nummer'].trim($prefixtrennzeichen).$prefixnaechstenummer; if(!$this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$this->app->DB->real_escape_string($neuenummer)."' LIMIT 1")) { break; }else{ $prefixnaechstenummer++; } } $checkarr[0]['nummer'] = $neuenummer; }else{ $checkarr[0]['nummer'] = $this->app->erp->GetNextArtikelnummer($checkarr[0]['typ'], 1, $checkarr[0]['projekt']); } $checkarr[0]['matrixprodukt'] = 0; $checkarr[0]['variante'] = 1; $checkarr[0]['variante_von'] = $artikelid; if(isset($tmp['matrixnamefuerunterartikel']) && $tmp['matrixnamefuerunterartikel'][$i]) { $checkarr[0]['name_de'] = $checkarr[0]['name_de'].' '.$matrixgruppenname1.': '.$vo['name']; if($checkarr[0]['name_en'])$checkarr[0]['name_en'] = $checkarr[0]['name_en'].' '.$matrixgruppenname1.': '.$vo['name']; } $check = $this->app->erp->InsertUpdateArtikel($checkarr[0]); if($returnids && !empty($check) && !in_array($check, $ids)) { $ids[] = $check; } if($check) { $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise WHERE artikel = '$artikelid'"); if($vkarr) { foreach($vkarr as $vv) { $vv['artikel'] = $check; unset($vv['id']); $this->app->DB->Insert("INSERT INTO verkaufspreise (id) VALUES ('')"); $newvkid = $this->app->DB->GetInsertID(); $this->app->FormHandler->ArrayUpdateDatabase("verkaufspreise",$newvkid,$vv,true); } } $this->app->DB->Insert("INSERT INTO matrixprodukt_optionen_zu_artikel (artikel, option_id) VALUES ('$check','".$vo['matrixprodukt_eigenschaftenoptionen_artikel']."')"); } unset($checkarr[0]); } } } } } } } if(isset($optionen1))unset($optionen1); if(isset($optionen2))unset($optionen2); if(isset($optionen1ex))unset($optionen1ex); if(isset($optionen2ex))unset($optionen2ex); } } else $this->app->DB->Update("UPDATE artikel SET matrixprodukt=0 WHERE id='".$artikelid."' LIMIT 1"); break; break; case "aktiv": if($tmp[$value][$i]=="0") $this->app->DB->Update("UPDATE artikel SET inaktiv=1 WHERE id='".$artikelid."' LIMIT 1"); else $this->app->DB->Update("UPDATE artikel SET inaktiv=0 WHERE id='".$artikelid."' LIMIT 1"); break; case "variante_von": if(trim($tmp[$value][$i])!="") { // schaue ob $tmpartikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='".trim($tmp[$value][$i])."' AND nummer!='' LIMIT 1"); if($tmpartikelid > 0) { $this->app->DB->Update("UPDATE artikel SET variante_von='".$tmpartikelid."',variante=1 WHERE id='".$artikelid."' AND id!='".$tmpartikelid."' LIMIT 1"); } } break; case "lieferanteinkaufvpepreis": if($tmp['lieferanteinkaufvpemenge'][$i] > 0 && $tmp['lieferanteinkaufmenge'][$i]<=0 && $tmp['lieferanteinkaufvpepreis'][$i] > 0) { $tmp['lieferanteinkaufnetto'][$i] = $tmp['lieferanteinkaufvpepreis'][$i] / $tmp['lieferanteinkaufvpemenge'][$i]*1.00; if($tmp['lieferanteinkaufmenge'][$i]<=0) $tmp['lieferanteinkaufmenge'][$i] = 1; if($artikelid && $lieferantid) { $aktlieferantid = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$artikelid' LIMIT 1"); if(!$aktlieferantid)$this->app->DB->Update("UPDATE artikel SET adresse = '$lieferantid' WHERE id = '$artikelid' LIMIT 1"); } $lieferantartikelbezeichnung = ""; if($tmp['lieferantartikelbezeichnung'][$i]) { $lieferantartikelbezeichnung = $this->app->DB->real_escape_string($tmp['lieferantartikelbezeichnung'][$i]); } $ekid = $this->app->erp->AddEinkaufspreis($artikelid,$tmp['lieferanteinkaufmenge'][$i], $lieferantid,$nr,$lieferantartikelbezeichnung, str_replace(',','.',$tmp['lieferanteinkaufnetto'][$i]),$tmp['lieferanteinkaufwaehrung'][$i],$tmp['lieferanteinkaufvpemenge'][$i]); $this->UpdateEinkaufspreiseExtraWerte($ekid,$tmp,""); } break; case "lieferanteinkaufvpepreis2": if($tmp['lieferanteinkaufvpemenge2'][$i] > 0 && $tmp['lieferanteinkaufmenge2'][$i]<=0 && $tmp['lieferanteinkaufvpepreis2'][$i] > 0) { $tmp['lieferanteinkaufnetto2'][$i] = $tmp['lieferanteinkaufvpepreis2'][$i] / $tmp['lieferanteinkaufvpemenge2'][$i]*1.00; if($tmp['lieferanteinkaufmenge2'][$i]<=0) $tmp['lieferanteinkaufmenge2'][$i] = 1; if($artikelid && $lieferantid) { $aktlieferantid = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$artikelid' LIMIT 1"); if(!$aktlieferantid)$this->app->DB->Update("UPDATE artikel SET adresse = '$lieferantid' WHERE id = '$artikelid' LIMIT 1"); } $lieferantartikelbezeichnung = ""; if($tmp['lieferantartikelbezeichnung2'][$i]) { $lieferantartikelbezeichnung = $this->app->DB->real_escape_string($tmp['lieferantartikelbezeichnung2'][$i]); } $ekid = $this->app->erp->AddEinkaufspreis($artikelid,$tmp['lieferanteinkaufmenge2'][$i], $lieferantid,$nr,$lieferantartikelbezeichnung, str_replace(',','.',$tmp['lieferanteinkaufnetto2'][$i]),$tmp['lieferanteinkaufwaehrung2'][$i],$tmp['lieferanteinkaufvpemenge2'][$i]); $this->UpdateEinkaufspreiseExtraWerte($ekid,$tmp,"2"); } break; case "lieferanteinkaufvpepreis3": if($tmp['lieferanteinkaufvpemenge3'][$i] > 0 && $tmp['lieferanteinkaufmenge3'][$i]<=0 && $tmp['lieferanteinkaufvpepreis3'][$i] > 0) { $tmp['lieferanteinkaufnetto3'][$i] = $tmp['lieferanteinkaufvpepreis3'][$i] / $tmp['lieferanteinkaufvpemenge3'][$i]*1.00; if($tmp['lieferanteinkaufmenge3'][$i]<=0) $tmp['lieferanteinkaufmenge3'][$i] = 1; if($artikelid && $lieferantid) { $aktlieferantid = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$artikelid' LIMIT 1"); if(!$aktlieferantid)$this->app->DB->Update("UPDATE artikel SET adresse = '$lieferantid' WHERE id = '$artikelid' LIMIT 1"); } $lieferantartikelbezeichnung = ""; if($tmp['lieferantartikelbezeichnung3'][$i]) { $lieferantartikelbezeichnung = $this->app->DB->real_escape_string($tmp['lieferantartikelbezeichnung3'][$i]); } $ekid = $this->app->erp->AddEinkaufspreis($artikelid,$tmp['lieferanteinkaufmenge3'][$i], $lieferantid,$nr,$lieferantartikelbezeichnung, str_replace(',','.',$tmp['lieferanteinkaufnetto3'][$i]),$tmp['lieferanteinkaufwaehrung3'][$i],$tmp['lieferanteinkaufvpemenge3'][$i]); $this->UpdateEinkaufspreiseExtraWerte($ekid,$tmp,"3"); } break; case "lieferanteinkaufnetto": $einkaufsdaten = $this->app->DB->SelectRow("SELECT id,preis,bestellnummer FROM einkaufspreise WHERE ab_menge='".$tmp['lieferanteinkaufmenge'][$i]."' AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW()) AND adresse='".$lieferantid."' AND artikel='".$artikelid."' LIMIT 1"); if($einkaufsdaten){ $alterek = $einkaufsdaten['preis']; $ekid = $einkaufsdaten['id']; $altelieferantbestellnummer = $einkaufsdaten['bestellnummer']; }else{ $alterek = null; $ekid = null; $altelieferantbestellnummer = null; } if($tmp['lieferantbestellnummer'][$i]!='') { $nr = $tmp['lieferantbestellnummer'][$i]; } else if($tmp['herstellernummer'][$i]!='') { $nr = $tmp['herstellernummer'][$i]; } else { $nr = ''; }//$tmp['name_de'][$i]; if($alterek != str_replace(',','.',$tmp['lieferanteinkaufnetto'][$i]) || $altelieferantbestellnummer != $nr) { $ekpreisaenderungen++; $this->app->DB->Update("UPDATE einkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE adresse='".$lieferantid."' AND artikel='".$artikelid."' AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW()) AND ab_menge='".$tmp['lieferanteinkaufmenge'][$i]."' LIMIT 1"); if($tmp['lieferanteinkaufvpemenge'][$i] > 0 && $tmp['lieferanteinkaufmenge'][$i]<=0 && $tmp['lieferanteinkaufvpepreis'][$i] > 0) { $tmp['lieferanteinkaufnetto'][$i] = $tmp['lieferanteinkaufvpepreis'][$i] / $tmp['lieferanteinkaufvpemenge'][$i]*1.00; } if($tmp['lieferanteinkaufmenge'][$i]<=0){ $tmp['lieferanteinkaufmenge'][$i] = 1; } if($artikelid && $lieferantid) { $aktlieferantid = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$artikelid' LIMIT 1"); if(!$aktlieferantid) { $this->app->DB->Update("UPDATE artikel SET adresse = '$lieferantid' WHERE id = '$artikelid' LIMIT 1"); } } $lieferantartikelbezeichnung = ''; if($tmp['lieferantartikelbezeichnung'][$i]) { $lieferantartikelbezeichnung = $this->app->DB->real_escape_string($tmp['lieferantartikelbezeichnung'][$i]); } $ekid = $this->app->erp->AddEinkaufspreis($artikelid,$tmp['lieferanteinkaufmenge'][$i], $lieferantid,$nr,$lieferantartikelbezeichnung, str_replace(',','.',$tmp['lieferanteinkaufnetto'][$i]),$tmp['lieferanteinkaufwaehrung'][$i],$tmp['lieferanteinkaufvpemenge'][$i]); } if($ekid > 0){ foreach ($tmp as $keyx => $valuex){ if(strpos($keyx,'lieferant') !== false){ $tmp[rtrim($keyx,'1')] = $valuex; } } $this->UpdateEinkaufspreiseExtraWerte($ekid, $tmp); } break; case "lieferanteinkaufnetto2": $einkaufsdaten = $this->app->DB->SelectRow("SELECT id,preis,bestellnummer FROM einkaufspreise WHERE ab_menge='".$tmp['lieferanteinkaufmenge2'][$i]."' AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW()) AND adresse='".$lieferantid."' AND artikel='".$artikelid."' LIMIT 1"); if($einkaufsdaten){ $alterek = $einkaufsdaten['preis']; $ekid = $einkaufsdaten['id']; $altelieferantbestellnummer = $einkaufsdaten['bestellnummer']; }else{ $alterek = null; $ekid = null; $altelieferantbestellnummer = null; } if($tmp['lieferantbestellnummer2'][$i]!='') { $nr = $tmp['lieferantbestellnummer2'][$i]; } else if($tmp['herstellernummer'][$i]!='') { $nr = $tmp['herstellernummer'][$i]; } else { $nr = ''; }//$tmp['name_de'][$i]; if($alterek != str_replace(',','.',$tmp['lieferanteinkaufnetto2'][$i]) || $altelieferantbestellnummer != $nr) { $ekpreisaenderungen++; $this->app->DB->Update("UPDATE einkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE adresse='".$lieferantid."' AND artikel='".$artikelid."' AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW()) AND ab_menge='".$tmp['lieferanteinkaufmenge2'][$i]."' LIMIT 1"); if($tmp['lieferanteinkaufvpemenge2'][$i] > 0 && $tmp['lieferanteinkaufmenge2'][$i]<=0 && $tmp['lieferanteinkaufvpepreis2'][$i] > 0) { $tmp['lieferanteinkaufnetto2'][$i] = $tmp['lieferanteinkaufvpepreis2'][$i] / $tmp['lieferanteinkaufvpemenge2'][$i]*1.00; } if($tmp['lieferanteinkaufmenge2'][$i]<=0){ $tmp['lieferanteinkaufmenge2'][$i] = 1; } if($artikelid && $lieferantid) { $aktlieferantid = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$artikelid' LIMIT 1"); if(!$aktlieferantid) { $this->app->DB->Update("UPDATE artikel SET adresse = '$lieferantid' WHERE id = '$artikelid' LIMIT 1"); } } $lieferantartikelbezeichnung = ''; if($tmp['lieferantartikelbezeichnung2'][$i]) { $lieferantartikelbezeichnung = $this->app->DB->real_escape_string($tmp['lieferantartikelbezeichnung2'][$i]); } $ekid = $this->app->erp->AddEinkaufspreis($artikelid,$tmp['lieferanteinkaufmenge2'][$i], $lieferantid,$nr,$lieferantartikelbezeichnung, str_replace(',','.',$tmp['lieferanteinkaufnetto2'][$i]),$tmp['lieferanteinkaufwaehrung2'][$i],$tmp['lieferanteinkaufvpemenge2'][$i]); } if($ekid > 0){ $this->UpdateEinkaufspreiseExtraWerte($ekid, $tmp,'2'); } break; case "lieferanteinkaufnetto3": $einkaufsdaten = $this->app->DB->SelectRow("SELECT id,preis,bestellnummer FROM einkaufspreise WHERE ab_menge='".$tmp['lieferanteinkaufmenge3'][$i]."' AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW()) AND adresse='".$lieferantid."' AND artikel='".$artikelid."' LIMIT 1"); if($einkaufsdaten){ $alterek = $einkaufsdaten['preis']; $edkid = $einkaufsdaten['id']; $altelieferantbestellnummer = $einkaufsdaten['bestellnummer']; }else{ $alterek = null; $ekid = null; $altelieferantbestellnummer = null; } if($tmp['lieferantbestellnummer3'][$i]!='') { $nr = $tmp['lieferantbestellnummer3'][$i]; } else if($tmp['herstellernummer'][$i]!='') { $nr = $tmp['herstellernummer'][$i]; } else { $nr = ''; }//$tmp['name_de'][$i]; if($alterek != str_replace(',','.',$tmp['lieferanteinkaufnetto3'][$i]) || $altelieferantbestellnummer != $nr) { $ekpreisaenderungen++; $this->app->DB->Update("UPDATE einkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE adresse='".$lieferantid."' AND artikel='".$artikelid."' AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW()) AND ab_menge='".$tmp['lieferanteinkaufmenge3'][$i]."' LIMIT 1"); if($tmp['lieferanteinkaufvpemenge3'][$i] > 0 && $tmp['lieferanteinkaufmenge3'][$i]<=0 && $tmp['lieferanteinkaufvpepreis3'][$i] > 0) { $tmp['lieferanteinkaufnetto3'][$i] = $tmp['lieferanteinkaufvpepreis3'][$i] / $tmp['lieferanteinkaufvpemenge3'][$i]*1.00; } if($tmp['lieferanteinkaufmenge3'][$i]<=0){ $tmp['lieferanteinkaufmenge3'][$i] = 1; } if($artikelid && $lieferantid) { $aktlieferantid = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$artikelid' LIMIT 1"); if(!$aktlieferantid)$this->app->DB->Update("UPDATE artikel SET adresse = '$lieferantid' WHERE id = '$artikelid' LIMIT 1"); } $lieferantartikelbezeichnung = ''; if($tmp['lieferantartikelbezeichnung3'][$i]) { $lieferantartikelbezeichnung = $this->app->DB->real_escape_string($tmp['lieferantartikelbezeichnung3'][$i]); } $ekid = $this->app->erp->AddEinkaufspreis($artikelid,$tmp['lieferanteinkaufmenge3'][$i], $lieferantid,$nr,$lieferantartikelbezeichnung, str_replace(',','.',$tmp['lieferanteinkaufnetto3'][$i]),$tmp['lieferanteinkaufwaehrung3'][$i],$tmp['lieferanteinkaufvpemenge3'][$i]); } if($ekid > 0){ $this->UpdateEinkaufspreiseExtraWerte($ekid, $tmp,'3'); } break; case "standardlieferant": $standardlieferantid = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer = '".$this->app->DB->real_escape_string($tmp[$value][$i])."' LIMIT 1"); if($standardlieferantid != ''){ $this->app->DB->Update("UPDATE artikel SET adresse='$standardlieferantid' WHERE id='".$artikelid."' LIMIT 1"); } break; case "verkaufspreis1netto": case "verkaufspreis2netto": case "verkaufspreis3netto": case "verkaufspreis4netto": case "verkaufspreis5netto": case "verkaufspreis6netto": case "verkaufspreis7netto": case "verkaufspreis8netto": case "verkaufspreis9netto": case "verkaufspreis10netto": $verkaufspreisanzahl = str_replace(array('verkaufspreis','netto'),array('',''),$value); $gruppe = ''; $_kundenid = 0; if(isset($tmp['verkaufspreis'.$verkaufspreisanzahl.'kundennummer']) && $tmp['verkaufspreis'.$verkaufspreisanzahl.'kundennummer'][$i]) { $_kundenid = $this->app->DB->Select("SELECT id FROM adresse WHERE geloescht = 0 AND kundennummer = '".$this->app->DB->real_escape_string($tmp['verkaufspreis'.$verkaufspreisanzahl.'kundennummer'][$i])."' and kundennummer != '' LIMIT 1"); } if(isset($tmp['verkaufspreis'.$verkaufspreisanzahl.'gruppe'][$i])){ $gruppe = $this->app->DB->Select("SELECT id FROM gruppen where kennziffer = '".$tmp['verkaufspreis'.$verkaufspreisanzahl.'gruppe'][$i]."' LIMIT 1"); } $altervk = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE artikel='$artikelid' AND ab_menge='".$tmp['verkaufspreis'.$verkaufspreisanzahl.'menge'][$i]."' AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW() ) AND adresse <='$_kundenid' ".($gruppe?" AND gruppe = '".$gruppe."'":" AND ((gruppe IS NULL) or gruppe = '') ")." LIMIT 1"); if($altervk != str_replace(',','.',$tmp['verkaufspreis'.$verkaufspreisanzahl.'netto'][$i]) && str_replace(',','.',$tmp['verkaufspreis'.$verkaufspreisanzahl.'netto'][$i])) { $vkpreisaenderungen++; $gueltigab = null; if($tmp['verkaufspreis'.$verkaufspreisanzahl.'gueltigab'][$i] !== ''){ $gueltigab = $this->normalizeDate($tmp['verkaufspreis'.$verkaufspreisanzahl.'gueltigab'][$i]); } $gueltigbis = null; if($tmp['verkaufspreis'.$verkaufspreisanzahl.'gueltigbis'][$i] !== ''){ $gueltigbis = $this->normalizeDate($tmp['verkaufspreis'.$verkaufspreisanzahl.'gueltigbis'][$i]); } //verkaufspreis3internerkommentar'][$i] $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE artikel='".$artikelid."' AND adresse='$_kundenid' ".($gruppe?" AND gruppe = '".$gruppe."'":" AND ((gruppe IS NULL) or gruppe = '') ")." AND ab_menge='".$tmp['verkaufspreis'.$verkaufspreisanzahl.'menge'][$i]."' LIMIT 1"); $verkaufspreis1stueckdivisor = 1; if($tmp['verkaufspreis'.$verkaufspreisanzahl.'preisfuermenge'][$i]!='') { $verkaufspreis1stueckdivisor = $tmp['verkaufspreis'.$verkaufspreisanzahl.'preisfuermenge'][$i]; } if($verkaufspreis1stueckdivisor < 1) { $verkaufspreis1stueckdivisor = 1; } if($gruppe) { $this->app->erp->AddVerkaufspreisGruppe($artikelid,$tmp['verkaufspreis'.$verkaufspreisanzahl.'menge'][$i],$gruppe,str_replace(',','.',$tmp['verkaufspreis'.$verkaufspreisanzahl.'netto'][$i])/$verkaufspreis1stueckdivisor,$tmp['verkaufspreis'.$verkaufspreisanzahl.'waehrung'][$i],isset($tmp['verkaufspreis'.$verkaufspreisanzahl.'artikelnummerbeikunde'])?$tmp['verkaufspreis'.$verkaufspreisanzahl.'artikelnummerbeikunde'][$i]:'',$gueltigab,$tmp['verkaufspreis'.$verkaufspreisanzahl.'internerkommentar'][$i], $gueltigbis); }else{ $this->app->erp->AddVerkaufspreis($artikelid,$tmp['verkaufspreis'.$verkaufspreisanzahl.'menge'][$i], $_kundenid,str_replace(',','.',$tmp['verkaufspreis'.$verkaufspreisanzahl.'netto'][$i])/$verkaufspreis1stueckdivisor,$tmp['verkaufspreis'.$verkaufspreisanzahl.'waehrung'][$i],isset($tmp['verkaufspreis'.$verkaufspreisanzahl.'artikelnummerbeikunde'])?$tmp['verkaufspreis'.$verkaufspreisanzahl.'artikelnummerbeikunde'][$i]:'',$gruppe, $gueltigab,$tmp['verkaufspreis'.$verkaufspreisanzahl.'internerkommentar'][$i], $gueltigbis); } } break; case "lager_platz": case "lager_platz2": case "lager_platz3": case "lager_platz4": case "lager_platz5": for($lpk = 1; $lpk <= 5; $lpk++) { if($tmp['lager_platz'.($lpk>1?$lpk:'')][$i]!=''){ $lager_id = $this->app->DB->Select("SELECT lager FROM lager_platz WHERE kurzbezeichnung='".$tmp['lager_platz'.($lpk>1?$lpk:'')][$i]."' AND kurzbezeichnung!='' AND geloescht!='1' LIMIT 1"); if($lager_id <=0) { $lager_id = $this->app->DB->Select("SELECT id FROM lager WHERE geloescht!='1' LIMIT 1"); } $felder['lagerartikel']=1; $tmp['lagerartikel'][$i]=1; $this->app->DB->Update("UPDATE artikel SET lagerartikel='1' WHERE id='$artikelid' LIMIT 1"); $regal = $this->app->erp->CreateLagerplatz($lager_id,$tmp['lager_platz'.($lpk>1?$lpk:'')][$i]); if($lpk === 1 && !isset($tmp['lager_menge_total']) && !isset($tmp['lager_menge_addieren'])){ $this->app->DB->Update("UPDATE `artikel` SET `lager_platz` = '{$regal}' WHERE id = '{$artikelid}' LIMIT 1"); } if($tmp['lager_menge_addieren'.($lpk>1?$lpk:'')][$i] > 0){ $vpeid = 0; if(isset($tmp['lager_vpe_menge'.$lpk]) && $tmp['lager_vpe_menge'.$lpk][$i] >= 0) { $vpeid = $this->app->erp->CreateLagerPlatzInhaltVPE($artikelid, $tmp['lager_vpe_menge'.$lpk][$i], $tmp['lager_vpe_gewicht'.$lpk][$i], $tmp['lager_vpe_laenge'.$lpk][$i], $tmp['lager_vpe_breite'.$lpk][$i], $tmp['lager_vpe_hoehe'.$lpk][$i], $tmp['lager_vpe_menge'.$lpk.'2'][$i], $tmp['lager_vpe_gewicht'.$lpk.'2'][$i], $tmp['lager_vpe_laenge'.$lpk.'2'][$i], $tmp['lager_vpe_breite'.$lpk.'2'][$i], $tmp['lager_vpe_hoehe'.$lpk.'2'][$i]); } $this->app->erp->LagerEinlagernDifferenz($artikelid,str_replace(',','.',$tmp['lager_menge_addieren'.($lpk>1?$lpk:'')][$i]),$regal,"","Importzentrale",1, $vpeid); } //chargen importieren if(!empty($tmp['lager_mhd'.($lpk>1?$lpk:'')][$i]) && !empty($tmp['lager_charge'.($lpk>1?$lpk:'')][$i])){ $this->app->erp->AddChargeLagerOhneBewegung( $artikelid, $tmp['lager_menge_addieren' . ($lpk > 1 ? $lpk : '')][$i], $regal, '', $tmp['lager_charge' . ($lpk > 1 ? $lpk : '')][$i] ); $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($artikelid, $tmp['lager_menge_addieren' . ($lpk > 1 ? $lpk : '')][$i], $regal, date('Y-m-d', strtotime($tmp['lager_mhd' . ($lpk > 1 ? $lpk : '')][$i])), $tmp['lager_charge' . ($lpk > 1 ? $lpk : '')][$i]); } else if (!empty($tmp['lager_mhd'.($lpk>1?$lpk:'')][$i])){ $this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($artikelid, $tmp['lager_menge_addieren' . ($lpk > 1 ? $lpk : '')][$i], $regal, date('Y-m-d', strtotime($tmp['lager_mhd' . ($lpk > 1 ? $lpk : '')][$i])), ""); } else if(!empty($tmp['lager_charge'.($lpk>1?$lpk:'')][$i])){ $this->app->erp->AddChargeLagerOhneBewegung($artikelid, $tmp['lager_menge_addieren' . ($lpk > 1 ? $lpk : '')][$i], $regal, '', $tmp['lager_charge' . ($lpk > 1 ? $lpk : '')][$i]); } if($tmp['lager_menge_total'.($lpk>1?$lpk:'')][$i] >= 0 && $regal > 0 && $tmp['lager_menge_total'.($lpk>1?$lpk:'')][$i]!="") { $tmp_anzahl_lager = $this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi LEFT JOIN lager_platz lp ON lp.id=lpi.lager_platz WHERE lpi.artikel='$artikelid' AND lp.id='$regal'"); if($tmp_anzahl_lager > 0) $this->app->erp->LagerAuslagernRegal($artikelid,$regal,$tmp_anzahl_lager,$projekt,"Importzentrale"); // komplett leeren if(isset($tmp['lager_vpe_menge'.$lpk]) && $tmp['lager_vpe_menge'.$lpk][$i] >= 0) { $vpeid = $this->app->erp->CreateLagerPlatzInhaltVPE($artikelid, $tmp['lager_vpe_menge'.$lpk][$i], $tmp['lager_vpe_gewicht'.$lpk][$i], $tmp['lager_vpe_laenge'.$lpk][$i], $tmp['lager_vpe_breite'.$lpk][$i], $tmp['lager_vpe_hoehe'.$lpk][$i], $tmp['lager_vpe_menge'.$lpk.'2'][$i], $tmp['lager_vpe_gewicht'.$lpk.'2'][$i], $tmp['lager_vpe_laenge'.$lpk.'2'][$i], $tmp['lager_vpe_breite'.$lpk.'2'][$i], $tmp['lager_vpe_hoehe'.$lpk.'2'][$i]); }else { $vpeid = 0; } $this->app->erp->LagerEinlagernDifferenz($artikelid,$tmp['lager_menge_total'.($lpk>1?$lpk:'')][$i],$regal,"","Importzentrale",1, $vpeid); } } } break; case "provision1": case "provision2": switch($value) { case "provision1": $pi = 1; break; case "provision2": $pi = 2; break; } if(!empty($tmp['provision'.$pi][$i])) { if(strpos($tmp['provision'.$pi][$i],'%') != false) { $tmp['provision'.$pi][$i] = (float)(str_replace(array('%',','),array('','.'),$tmp['provision'.$pi][$i])); } if(!empty($tmp['provisiongruppe'.$pi][$i])) { if(is_numeric($tmp['provisiongruppe'.$pi][$i])) { $gruppenid = (int)$tmp['provisiongruppe'.$pi][$i]; }else{ $gruppenid = $this->app->DB->Select("SELECT id FROM gruppen WHERE name like '".$this->app->DB->real_escape_string($tmp['provisiongruppe'.$pi][$i])."' LIMIT 1"); if(!$gruppenid) { $gruppenid = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer like '".$this->app->DB->real_escape_string($tmp['provisiongruppe'.$pi][$i])."' LIMIT 1"); } } if($gruppenid) { $checkprovision = $this->app->DB->Select("SELECT id FROM provision_regeln WHERE artikel = '$artikelid' AND gruppe = '$gruppenid' LIMIT 1"); if(!$this->app->DB->error()) { if($checkprovision) { $this->app->DB->Update("UPDATE provision_regeln SET provision = '".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."' WHERE id = '$checkprovision' LIMIT 1"); $this->app->DB->Update("UPDATE provision_regeln SET bis = '0000-00-00' WHERE id = '$checkprovision' LIMIT 1"); }else{ $this->app->DB->Insert("INSERT INTO provision_regeln (artikel, gruppe, provision, typ) VALUES ('$artikelid','$gruppenid','".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."','')"); $checkprovision = $this->app->DB->GetInsertID(); } if(!empty($tmp['provisiontyp'.$pi][$i])) { $this->app->DB->Update("UPDATE provision_regeln SET typ = '".strtolower(trim($this->app->DB->real_escape_string($tmp['provisiontyp'.$pi][$i])))."' WHERE id = '$checkprovision' LIMIT 1"); } } } }elseif(empty($tmp['provisiongruppe'.$pi])){ if(empty($tmp['provisionadresse'.$pi][$i]) && empty($tmp['provisionmitarbeiternummer'.$pi][$i])) { $checkprovision = $this->app->DB->Select("SELECT id FROM provisionenartikel_provision WHERE adresse = 0 AND artikel = '$artikelid' LIMIT 1"); if($checkprovision) { $this->app->DB->Update("UPDATE provisionenartikel_provision SET provision = '".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."' WHERE id = '$checkprovision' LIMIT 1"); $this->app->DB->Update("UPDATE provisionenartikel_provision SET gueltigbis = '0000-00-00' WHERE id = '$checkprovision' LIMIT 1"); }else{ $this->app->DB->Insert("INSERT INTO provisionenartikel_provision (artikel, adresse, provision) VALUES ('$artikelid','0','".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."')"); $checkprovision = $this->app->DB->GetInsertID(); } if(!empty($tmp['provisiontyp'.$pi][$i])) { $this->app->DB->Update("UPDATE provisionenartikel_provision SET provisiontyp = '".strtolower(trim($this->app->DB->real_escape_string($tmp['provisiontyp'.$pi][$i])))."' WHERE id = '$checkprovision' LIMIT 1"); } }elseif(!empty($tmp['provisionadresse'.$pi][$i])){ $checkprovision = $this->app->DB->Select("SELECT id FROM provisionenartikel_provision WHERE adresse = '".(int)$tmp['provisionadresse'.$pi][$i]."' AND artikel = '$artikelid' LIMIT 1"); if($checkprovision) { $this->app->DB->Update("UPDATE provisionenartikel_provision SET provision = '".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."' WHERE id = '$checkprovision' LIMIT 1"); $this->app->DB->Update("UPDATE provisionenartikel_provision SET gueltigbis = '0000-00-00' WHERE id = '$checkprovision' LIMIT 1"); }else{ $this->app->DB->Insert("INSERT INTO provisionenartikel_provision (artikel, adresse, provision) VALUES ('$artikelid','".(int)$tmp['provisionadresse'.$pi][$i]."','".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."')"); $checkprovision = $this->app->DB->GetInsertID(); } if(!empty($tmp['provisiontyp'.$pi][$i])) { $this->app->DB->Update("UPDATE provisionenartikel_provision SET provisiontyp = '".strtolower(trim($this->app->DB->real_escape_string($tmp['provisiontyp'.$pi][$i])))."' WHERE id = '$checkprovision' LIMIT 1"); } }elseif(!empty($tmp['provisionmitarbeiternummer'.$pi][$i])) { $provisionadresse = (int)$this->app->DB->Select("SELECT id FROM adresse WHERE mitarbeiternummer = '".$this->app->DB->real_escape_string($tmp['provisionmitarbeiternummer'.$pi][$i])."' LIMIT 1"); if($provisionadresse) { $checkprovision = $this->app->DB->Select("SELECT id FROM provisionenartikel_provision WHERE adresse = '".$provisionadresse."' AND artikel = '$artikelid' LIMIT 1"); if($checkprovision) { $this->app->DB->Update("UPDATE provisionenartikel_provision SET provision = '".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."' WHERE id = '$checkprovision' LIMIT 1"); $this->app->DB->Update("UPDATE provisionenartikel_provision SET gueltigbis = '0000-00-00' WHERE id = '$checkprovision' LIMIT 1"); }else{ $this->app->DB->Insert("INSERT INTO provisionenartikel_provision (artikel, adresse, provision) VALUES ('$artikelid','".$provisionadresse."','".(float)str_replace(',','.',$tmp['provision'.$pi][$i])."')"); $checkprovision = $this->app->DB->GetInsertID(); } if(!empty($tmp['provisiontyp'.$pi][$i])) { $this->app->DB->Update("UPDATE provisionenartikel_provision SET provisiontyp = '".strtolower(trim($this->app->DB->real_escape_string($tmp['provisiontyp'.$pi][$i])))."' WHERE id = '$checkprovision' LIMIT 1"); } } } } } break; } } if(isset($this->teilprojekt) && isset($this->projekt)) { $sort = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM projekt_artikel WHERE teilprojekt = '".$this->teilprojekt."'"); $menge = 1; if(!empty($felder['menge'])){ $menge = $felder['menge']; } if($menge < 1){ $menge = 1; } $this->app->DB->Insert("INSERT INTO projekt_artikel (projekt, teilprojekt,artikel, sort,geplant) VALUES ('".$this->projekt."','".$this->teilprojekt."','$artikelid','$sort','$menge')"); $projektartikel = $this->app->DB->GetInsertID(); $vk = $this->app->erp->GetVerkaufspreis($artikelid,$menge); $ek = $this->app->erp->GetEinkaufspreis($artikelid, $menge, $this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$artikelid' LIMIT 1")); if(isset($felder['vk_geplant'])){ $vk = (double)str_replace(',','.',$felder['vk_geplant']); } if(isset($felder['ek_geplant'])){ $vk = (double)str_replace(',','.',$felder['ek_geplant']); } if($vk){ $this->app->DB->Update("UPDATE projekt_artikel SET vk_geplant = '$vk' WHERE id = '$projektartikel' LIMIT 1"); } if($ek){ $this->app->DB->Update("UPDATE projekt_artikel SET ek_geplant = '$ek' WHERE id = '$projektartikel' LIMIT 1"); } } } } if($this->app->DB->Select("SELECT id FROM artikel WHERE id ='$artikelid' LIMIT 1")){ //Sprachen $erlaubtefelder= array('name','kurztext','beschreibung','beschreibung_online','meta_title', 'meta_description','meta_keywords','katalog_bezeichnung','katalog_text','katalogartikel','shop','aktiv'); $zuImportierendeSprachen = []; foreach ($tmp as $feldname => $feldwerte) { if(strpos($feldname,'_') !== false){ $feldnametmp = explode('_',$feldname); $sprache = $feldnametmp[(!empty($feldnametmp)?count($feldnametmp):0)-1]; unset($feldnametmp[(!empty($feldnametmp)?count($feldnametmp):0)-1]); $feldnameohnepsrache = implode('_',$feldnametmp); $output_array = []; preg_match('/\d+/', $feldnameohnepsrache, $output_array); $sprachenSet = ''; if(!empty($output_array[0])){ $sprachenSet = $output_array[0]; $feldnameohnepsrache = str_replace($sprachenSet,'',$feldnameohnepsrache); } if(in_array($feldnameohnepsrache, $erlaubtefelder,false) && !in_array($sprachenSet,$zuImportierendeSprachen[$sprache],false)){ $zuImportierendeSprachen[$sprache][] = $sprachenSet; } } } $vorhandeSprachenAusDatenbank = $this->app->DB->SelectArr('SELECT iso FROM sprachen WHERE aktiv = 1'); $vorhandeneSprachen = []; foreach ($vorhandeSprachenAusDatenbank as $spracheintrag){ $vorhandeneSprachen[] = $spracheintrag['iso']; } foreach ($zuImportierendeSprachen as $sprache => $sprachenSets){ foreach ($sprachenSets as $sprachenSet){ if((!empty($sprachenSet) || (strtoupper($sprache)!=='DE' && strtoupper($sprache)!=='EN')) && in_array(strtoupper($sprache),$vorhandeneSprachen,false)){ $upzudatendeFelder = []; foreach ($erlaubtefelder as $erlaubtesFeld){ if(isset($tmp[$erlaubtesFeld.$sprachenSet.'_'.$sprache][$i])){ $upzudatendeFelder[$this->app->DB->real_escape_string($erlaubtesFeld)] = $this->app->DB->real_escape_string($tmp[$erlaubtesFeld.$sprachenSet.'_'.$sprache][$i]); } } $shopId = '0'; if(!empty($upzudatendeFelder['shop'])){ $shopId = $upzudatendeFelder['shop']; } if(empty($shopId)){ $shopId = '0'; } unset($upzudatendeFelder['shop']); if(empty($upzudatendeFelder)){ continue; } $query = sprintf("SELECT id FROM artikel_texte WHERE sprache = '%s' AND artikel=%d AND shop=%d LIMIT 1", $this->app->DB->real_escape_string(strtoupper($sprache)), $artikelid, $this->app->DB->real_escape_string($shopId)); $atid = $this->app->DB->Select($query); if(empty($atid)){ $query = sprintf("INSERT INTO artikel_texte (artikel,sprache, shop, %s) VALUES (%d,'%s',%d,'%s')", implode(',',array_keys($upzudatendeFelder)), $artikelid, $this->app->DB->real_escape_string(strtoupper($sprache)), $shopId, implode("','",$upzudatendeFelder)); $this->app->DB->Insert($query); }else{ $fieldsToSet = []; foreach ($upzudatendeFelder AS $feldname => $feldwert){ $fieldsToSet[] = "$feldname = '$feldwert'"; } $query = sprintf('UPDATE artikel_texte SET %s WHERE id=%d', implode(', ',$fieldsToSet), $atid); $this->app->DB->Update($query); } } } } // Sprachen //freifelduebersetzungen foreach ($tmp as $feldname => $feldwerte) { if(strpos($feldname,'freifeld') !== false && strpos($feldname,'_')>0){ $felddaten = explode('_',$feldname); $feldnummer = (int)substr($felddaten[0],8); $sprache = strtoupper($felddaten[1]); if($feldnummer>=1 && $feldnummer<=40 && $this->app->DB->Select("SELECT id FROM sprachen WHERE iso='$sprache' AND iso<>'' AND aktiv = 1 LIMIT 1")){ $sqla = null; for ($f = 1; $f <= 40; $f++) { $sqla[] = ' SELECT '.$f.' as nummer '; } $sql = "INSERT INTO artikel_freifelder (artikel, sprache, nummer, wert) SELECT '$artikelid', s.iso, n.nummer,'' FROM (SELECT iso FROM sprachen WHERE aktiv = 1 AND iso <> 'DE' AND iso <> '' GROUP BY iso) s INNER JOIN (".implode(' UNION ', $sqla).") n LEFT JOIN artikel_freifelder af ON s.iso = af.sprache AND af.artikel = '$artikelid' AND n.nummer = af.nummer WHERE isnull(af.id) "; $this->app->DB->Insert($sql); $feldid = $this->app->DB->Select("SELECT id FROM artikel_freifelder WHERE artikel='$artikelid' AND sprache='$sprache' AND nummer='$feldnummer'"); $wert = $feldwerte[$i]; if($feldid){ $this->app->DB->Update("UPDATE artikel_freifelder SET wert='$wert' WHERE id='$feldid'"); }else{ $this->app->DB->Insert("INSERT INTO artikel_freifelder (artikel, sprache, nummer, wert) VALUES ('$artikelid', '$sprache','$feldnummer', '$wert')"); } } } } //Shops foreach ($tmp as $feldname => $feldwerte) { $feldtmp = explode('_',$feldname); if($feldtmp['0'] === 'shop' || $feldtmp['0'] === 'aktiv'){ if(isset($feldtmp['1'])){ $shopid = (int)$feldtmp['1']; $wert = (int)$feldwerte[$i]; if($this->app->DB->Select("SELECT id FROM shopexport WHERE id ='$shopid' LIMIT 1")){ $artikelonlineshopsid = $this->app->DB->Select("SELECT id FROM artikel_onlineshops WHERE artikel='$artikelid' AND shop='$shopid'"); if($feldtmp['0'] === 'shop'){ if($artikelonlineshopsid < 1){ if($wert == 1){ $this->app->DB->Insert("INSERT INTO artikel_onlineshops (artikel, shop, aktiv, ausartikel,autolagerlampe) VALUES ('$artikelid','$shopid',1,1,0)"); } }elseif($wert == 0){ $this->app->DB->Select("DELETE FROM artikel_onlineshops WHERE artikel='$artikelid' AND shop='$shopid'"); } }else if($feldtmp['0'] === 'aktiv'){ if($wert > 1){ $wert = 1; } $this->app->DB->Update("UPDATE artikel_onlineshops SET aktiv='$wert' WHERE artikel='$artikelid' AND shop='$shopid'"); } } } } } //Fremdnummern foreach ($tmp as $feldname => $feldwerte) { $feldtmp = explode('_',$feldname); $output_array = []; preg_match('/\d+/', $feldtmp[0], $output_array); $fremdnummerSet = '0'; if(!empty($output_array[0])){ $fremdnummerSet = $output_array[0]; $feldtmp['0'] = str_replace($fremdnummerSet,'',$feldtmp['0']); } if(!empty($fremdnummerSet) && !empty($feldtmp['1']) && $feldtmp['0'] === 'fremdnummer'){ $shopId = (int)$feldtmp['1']; $shopId = $this->app->DB->Select("SELECT id FROM shopexport WHERE id ='$shopId' LIMIT 1"); if(empty($shopId)){ //Shop ID nicht vorhanden, überspringen continue; } $bezeichnung = ''; if(!empty($tmp['fremdnummerbezeichnung'.$fremdnummerSet.'_'.$shopId][$i])){ $bezeichnung = $tmp['fremdnummerbezeichnung'.$fremdnummerSet.'_'.$shopId][$i]; } $fremdnummer = $feldwerte[$i]; $query = sprintf("SELECT id FROM artikelnummer_fremdnummern WHERE artikel='%d' AND shopid='%d' AND bezeichnung='%s' AND nummer='%s' LIMIT 1", $artikelid,$shopId,$bezeichnung,$fremdnummer); $fremdnummerId = $this->app->DB->Select($query); //Alle alten inaktiv machen $query = sprintf("UPDATE artikelnummer_fremdnummern SET aktiv='0' WHERE artikel=%d AND bezeichnung='%s' AND shopid=%d", $artikelid,$bezeichnung,$shopId); $this->app->DB->Update($query); if(empty($fremdnummerId)){ $query = sprintf("INSERT INTO artikelnummer_fremdnummern (artikel, aktiv, nummer, shopid, zeitstempel, bearbeiter, bezeichnung) VALUES ('%d','1','%s','%d',NOW(),'%s','%s')", $artikelid, trim($this->app->DB->real_escape_string($feldwerte[$i])), $shopId, $this->app->DB->real_escape_string($this->app->User->GetName()), $bezeichnung); $this->app->DB->Insert($query); }elseif(!empty($fremdnummer)){ $query = sprintf("UPDATE artikelnummer_fremdnummern SET aktiv='1',nummer='%s' WHERE id=%d", $fremdnummer,$fremdnummerId); $this->app->DB->Update($query); } } } } break; case "zeiterfassung": case "wiedervorlagen": case "notizen": if($tmp['cmd'][$i]==='create') { if($tmp['nummer'][$i]!='') { foreach($fieldset as $k => $v) { $bedingung = ''; $value = ''; $fieldname = ''; if(isset($fieldset[$k]['bedingung'])) { $bedingung = $fieldset[$k]['bedingung']; } if(isset($v['nr'])) { $value = trim($tmp[$v['field']][$i]); if(isset($v['inv'])) { if($value != '1') { $value = 1; }else{ $value = 0; } } } elseif(isset($v['vorlage'])) { $value = $v['vorlage']; } if(isset($v['bedingung'])) { $value = $this->ImportvorlageBedingung($value, $v['bedingung']); } $fieldname = $v['field']; $felder[$fieldname] = $value; } } $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$tmp['kundennummer'][$i]."' LIMIT 1"); $mitarbeiteradresse = $this->app->DB->Select("SELECT id FROM adresse WHERE mitarbeiternummer='".$tmp['mitarbeiternummer'][$i]."' LIMIT 1"); if($ziel==='zeiterfassung') { $datumVon = $this->normalizeDate($tmp['datum_von'][$i]); $datumBis = $this->normalizeDate($tmp['datum_bis'][$i]); $vonZeit = $datumVon.' '.$tmp['zeit_von'][$i].':00'; $bisZeit = $datumBis.' '.$tmp['zeit_bis'][$i].':00'; $ort = ''; $projekt = ''; $art = ''; $kunde = $adresse; if(!$tmp['taetigkeit'][$i]){ $tmp['taetigkeit'][$i]='Zeiterfassung'; } $mitarbeiterid = $this->app->User->GetID(); if(isset($tmp['mitarbeiternummer'][$i]) && $tmp['mitarbeiternummer'][$i]){ $mitarbeiternummer = $tmp['mitarbeiternummer'][$i]; $mitarbeiterid = $this->app->DB->Select("SELECT id FROM adresse where mitarbeiternummer = '$mitarbeiternummer' AND mitarbeiternummer <> '' AND geloescht=0 LIMIT 1"); } if(!$mitarbeiterid){ break; } $this->app->erp->AddArbeitszeit($mitarbeiterid, $vonZeit, $bisZeit, $tmp['taetigkeit'][$i], $tmp['details'][$i],$ort, $projekt, 0,$art,$kunde); } else if ($ziel==='wiedervorlagen') { $betreff = $tmp['betreff'][$i]; $text = $tmp['text'][$i]; $datum_faellig = date('Y-m-d',strtotime($tmp['datum_faellig'][$i])); if($tmp['uhrzeit_faellig'][$i]==''){ $uhrzeit_faellig = '00:00:00'; } else if(strlen($tmp['uhrzeit_faellig'][$i])<=5){ $uhrzeit_faellig = $tmp['uhrzeit_faellig'][$i] . ':00'; } else { $uhrzeit_faellig = $tmp['uhrzeit_faellig'][$i]; } if($tmp['abgeschlossen'][$i]!='1') { $abgeschlossen=0; } else $abgeschlossen=1; if($tmp['prio'][$i]!='1') { $prio=0; } else { $prio=1; } $this->app->DB->Insert("INSERT INTO wiedervorlage (id,adresse,adresse_mitarbeiter,bearbeiter,bezeichnung,beschreibung,datum_erinnerung,zeit_erinnerung,datum_angelegt,abgeschlossen,prio) VALUES ('',$adresse,$mitarbeiteradresse,".$mitarbeiteradresse.",'$betreff','$text','$datum_faellig','$uhrzeit_faellig',NOW(),$abgeschlossen,$prio)"); } else if ($ziel==='notizen') { $betreff = $tmp['betreff'][$i]; $text = $tmp['text'][$i]; $datum = date('Y-m-d',strtotime($tmp['datum'][$i])); if($tmp['uhrzeit'][$i]==''){ $uhrzeit = '00:00:00'; } else if(strlen($tmp['uhrzeit'][$i])<=5){ $uhrzeit = $tmp['uhrzeit'][$i] . ':00'; } else { $uhrzeit = $tmp['uhrzeit'][$i]; } if (is_null($mitarbeiteradresse)) { $mitarbeiteradresse = ''; } if($mitarbeiteradresse>0){ $bearbeiter = $this->app->DB->Select("SELECT CONCAT(mitarbeiternummer,' ',name) FROM adresse WHERE id='$mitarbeiteradresse' LIMIT 1"); } else { $bearbeiter='Import'; } $query = "INSERT INTO dokumente (id,adresse_to,adresse_from,typ,betreff,content,datum,uhrzeit,bearbeiter) VALUES ('','$adresse','$mitarbeiteradresse','notiz','$betreff','$text','$datum','$uhrzeit','$bearbeiter')"; $this->app->DB->Insert($query); } } break; case "adresse": // wenn import per datei if($stueckliste_csv !=''){ $tmp['checked'][$i] = 1; } if($tmp['projekt'][$i]!='') { $tmp['projekt'][$i] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='".$this->app->DB->real_escape_string($tmp['projekt'][$i])."' AND abkuerzung!='' LIMIT 1"); $felder['projekt'] = $tmp['projekt'][$i]; } // automatisch create und update erkennen if($tmp['kundennummer'][$i]=="" && $tmp['lieferantennummer'][$i]=="" && $tmp['name'][$i]=="" && $tmp['firma'][$i]=="") { $tmp['cmd'][$i]="none"; $tmp['checked'][$i]=0; } else if($tmp['kundennummer'][$i]=="" && ($tmp['name'][$i]!="" || $tmp['firma'][$i]!="") && $tmp['lieferantennummer'][$i]=="") { $tmp['cmd'][$i]="create"; } else if($tmp['lieferantennummer'][$i]!="" || $tmp['kundennummer'][$i]!="") { $checkkunde = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$this->app->DB->real_escape_string($tmp['kundennummer'][$i])."' AND kundennummer!='' LIMIT 1"); if($checkkunde <= 0) $tmp['cmd'][$i]="create"; else $tmp['cmd'][$i]="update"; if($checkkunde <= 0) { $checklieferant = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$this->app->DB->real_escape_string($tmp['lieferantennummer'][$i])."' AND lieferantennummer!='' LIMIT 1"); if($checklieferant <= 0){ $tmp['cmd'][$i] = "create"; } else{ $tmp['cmd'][$i] = "update"; } } } // automatisch create und update erkennen if($tmp['cmd'][$i]==='create') { $adresse=0; foreach($fieldset as $k => $v) { $bedingung = ''; $value = ''; $fieldname = ''; if(isset($v['bedingung'])) { $bedingung = $v['bedingung']; } if(isset($v['nr'])) { $value = trim($tmp[$v['field']][$i]); if(isset($v['inv'])) { if($value != "1") { $value = 1; }else{ $value = 0; } } } elseif(isset($v['vorlage'])) { $value = $v['vorlage']; } if(isset($v['bedingung'])) { $value = $this->ImportvorlageBedingung($value, $v['bedingung']); } $fieldname = $v['field']; $felder[$fieldname] = $value; } if(($tmp['kundennummer'][$i]!='' && $tmp['kundennummer'][$i]!=='NEW' && $tmp['kundennummer'][$i]!=='NEU') || ($tmp['lieferantennummer'][$i]!='' && $tmp['lieferantennummer'][$i]!=='NEW' && $tmp['lieferantennummer'][$i]!=='NEU')) { $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$this->app->DB->real_escape_string($tmp['kundennummer'][$i])."' AND kundennummer!='' LIMIT 1"); if($adresse <=0){ $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='" . $this->app->DB->real_escape_string($tmp['lieferantennummer'][$i]) . "' AND lieferantennummer!='' LIMIT 1"); } } $felder['strasse'] = $felder['strasse']." ".$felder['hausnummer']; if($felder['strasse_hausnummer']!="") $felder['strasse'] = $felder['strasse_hausnummer']; $felder['email'] = str_replace(" ","",$felder['email']); $felder['sprache'] = strtolower($felder['sprache']); $felder['typ'] = $this->TypErkennung($felder['typ']); $laenderliste = $this->app->erp->GetSelectLaenderliste(true); if(array_key_exists($felder['land'], $laenderliste)){ $felder['land'] = $laenderliste[$felder['land']]; }else{ if(!in_array($felder['land'], $laenderliste)){ $felder['land'] = 'DE'; } } if($felder['land'] == ''){ $felder['land'] = 'DE'; } $felder['zahlungsweise'] = strtolower($felder['zahlungsweise']); $felder['versandart'] = strtolower($felder['versandart']); $felder['ust_befreit'] = $this->UstBefreitErkennung($felder['ust_befreit']); $felder['umsatzsteuer_lieferant'] = $this->UstErkennungLieferant($felder['umsatzsteuer_lieferant']); if($felder['geburtstag']!="") { if(strpos($felder['geburtstag'],'.')!==false) { $felder['geburtstag'] = $this->app->String->Convert($felder['geburtstag'],"%1.%2.%3","%3-%2-%1"); } } if($felder['lead']!="") { $felder['lead'] = '1'; } if($felder['mandatsreferenzdatum']!="") { if(strpos($felder['mandatsreferenzdatum'],'.')!==false) { $felder['mandatsreferenzdatum'] = $this->app->String->Convert($felder['mandatsreferenzdatum'],"%1.%2.%3","%3-%2-%1"); } } if($felder['liefersperredatum']!="") { if(strpos($felder['liefersperredatum'],'.')!==false) { $felder['liefersperredatum'] = $this->app->String->Convert($felder['liefersperredatum'],"%1.%2.%3","%3-%2-%1"); } } if(isset($felder['liefersperre'])) { if($felder['liefersperre'] === "1" || strtolower($felder['liefersperre']) === 'x'|| substr(strtolower($felder['liefersperre']),0,1) === 'j') { $felder['liefersperre'] = 1; }elseif($felder['liefersperre'] === "0" || strtolower($felder['liefersperre']) === ''|| substr(strtolower($felder['liefersperre']),0,1) === 'n') { $felder['liefersperre'] = 0; } } if($felder['plz_ort']!="") { $felder['plz'] = strstr($felder['plz_ort'], ' ', true); $felder['ort'] = strstr($felder['plz_ort'], ' '); } if($felder['name']!="" || $felder['firma']!="") { if($felder['firma']!="") { if($felder['vorname']!="") $felder['ansprechpartner']=$felder['vorname']." ".$felder['name']; else $felder['ansprechpartner']=$felder['name']; $felder['name']=$felder['firma']; $felder['typ']='firma'; } else { if($felder['vorname']!="" && $felder['nachname']=="") $felder['name']=$felder['vorname']." ".$felder['name']; } $felder['typ'] = $this->TypErkennung($felder['typ']); if($felder['rechnung_firma']!="") { if($felder['rechnung_vorname']!="") $felder['rechnung_ansprechpartner']=$felder['rechnung_vorname']." ".$felder['rechnung_name']; else $felder['rechnung_ansprechpartner']=$felder['rechnung_name']; $felder['rechnung_name']=$felder['rechnung_firma']; $felder['rechnung_typ']='firma'; } else { if($felder['rechnung_vorname']!="" && $felder['rechnung_nachname']=="") $felder['rechnung_name']=$felder['rechnung_vorname']." ".$felder['rechnung_name']; } if($felder['rechnung_typ']!="") $felder['rechnung_typ'] = $this->TypErkennung($felder['rechnung_typ']); $als_ansprechpartner_speichern = false; //pruefe ob datensatz ein ansprechpartner werden soll if($felder['lieferantennummer']!=str_replace("ANSPRECHPARTNER","",$felder['lieferantennummer'])) { // Dieser Datensatz wird als ansprechpartner verwendet $als_ansprechpartner_speichern = true; $ermittle_adresse = str_replace("ANSPRECHPARTNER","",$felder['lieferantennummer']); $ermittle_adresse = rtrim(ltrim($ermittle_adresse," :")); $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$ermittle_adresse' AND lieferantennummer!='' LIMIT 1"); if($tmp['strasse_hausnummer'][$i]!="") $tmp['strasse'][$i] = $felder['strasse_hausnummer']; $tmp['typ'][$i] = $this->TypErkennung($felder['typ']); $tmp['name'][$i] = $felder['name']; $data_fields = array('typ','name','abteilung','unterabteilung','adresszusatz','titel','strasse','ort','plz', 'land','telefon','telefax','email','mobil','anschreiben'); foreach($data_fields as $tmp_key=>$data_field_key) { $data_ansprechpartner[$data_field_key] = $tmp[$data_field_key][$i]; } $this->app->erp->ImportCreateAnsprechpartner($adresse,$data_ansprechpartner); } else if($felder['kundennummer']!=str_replace('ANSPRECHPARTNER','',$felder['kundennummer'])) { // Dieser Datensatz wird als ansprechpartner verwendet $als_ansprechpartner_speichern = true; $ermittle_adresse = str_replace("ANSPRECHPARTNER",'',$felder['kundennummer']); $ermittle_adresse = rtrim(ltrim($ermittle_adresse,' :')); $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$ermittle_adresse' AND kundennummer!='' LIMIT 1"); if($tmp['strasse_hausnummer'][$i]!='') { $tmp['strasse'][$i] = $felder['strasse_hausnummer']; } $tmp['typ'][$i] = $this->TypErkennung($felder['typ']); $tmp['name'][$i] = $felder['name']; $data_fields = array('typ','name','abteilung','unterabteilung','adresszusatz','titel','strasse','ort','plz', 'land','telefon','telefax','email','mobil','anschreiben'); foreach($data_fields as $tmp_key=>$data_field_key) { $data_ansprechpartner[$data_field_key] = $tmp[$data_field_key][$i]; } $this->app->erp->ImportCreateAnsprechpartner($adresse,$data_ansprechpartner); } else { $loeschen_lfr_new=false; if(strtoupper($felder['lieferantennummer'])==='NEW' || strtoupper($felder['lieferantennummer'])==='NEU'){ $loeschen_lfr_new = true; } $loeschen_kd_new=false; if(strtoupper($felder['kundennummer'])==='NEW' || strtoupper($felder['kundennummer'])==='NEU' ){ $loeschen_kd_new = true; } $loeschen_mi_new=false; if(strtoupper($felder['mitarbeiternummer'])==='NEW' || strtoupper($felder['mitarbeiternummer'])==='NEU' ){ $loeschen_mi_new = true; } if($loeschen_lfr_new) { $felder['lieferantennummer']=''; } if($loeschen_kd_new) { $felder['kundennummer']=''; } if($loeschen_mi_new) { $felder['mitarbeiternummer']=''; } foreach($felder as $kk => $vv){ $__felder[$kk] = $this->app->DB->real_escape_string($vv); } $adresse =$this->app->erp->ImportCreateAdresse($__felder, false); unset($__felder); $this->app->erp->ImportvorlageLog($id,$zeitstempel,'adresse',$adresse,$ersterdatensatz); $ersterdatensatz=0; if($felder['lieferantennummer']!='' || $loeschen_lfr_new) { $this->app->erp->AddRolleZuAdresse($adresse, 'Lieferant', 'von','Projekt',$tmp['projekt'][$i]); } if($felder['kundennummer']!='' || $loeschen_kd_new) { $this->app->erp->AddRolleZuAdresse($adresse, 'Kunde', 'von','Projekt',$tmp['projekt'][$i]); } if($felder['mitarbeiternummer']!='' || $loeschen_mi_new) { $this->app->erp->AddRolleZuAdresse($adresse, 'Mitarbeiter', 'von','Projekt',$tmp['projekt'][$i]); } } if($adresse) { for($gk = 1; $gk <= 5; $gk++) { $key = "gruppe".$gk; if(trim($tmp[$key][$i]) != '') { $gr = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer = '".$this->app->DB->real_escape_string(trim($tmp[$key][$i]))."' LIMIT 1"); if(!$gr) { $gr = $this->app->DB->Select("SELECT id FROM gruppen WHERE name = '".$this->app->DB->real_escape_string(trim($tmp[$key][$i]))."' LIMIT 1"); } if($gr) { $check = $this->app->DB->Select("SELECT id FROM adresse_rolle WHERE adresse = '$adresse' AND objekt like 'Gruppe' AND parameter = '$gr' AND (bis = '0000-00-00' OR isnull(bis) OR bis >= curdate()) LIMIT 1"); if(!$check) { $projekt = $tmp['projekt'][$i]; if(!$projekt) { $projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id = '$adresse' LIMIT 1"); } $this->app->DB->Insert("INSERT INTO adresse_rolle (adresse, projekt, subjekt, praedikat, objekt, parameter, von, bis) VALUES ('$adresse','$projekt','Mitglied','von','Gruppe','$gr',curdate(),'0000-00-00')"); } } } } } foreach ($felder as $key => $value) { if($key==="kundennrkontobuchhaltung") { $this->app->DB->Update("UPDATE adresse SET kundennummer_buchhaltung = '".$value."' WHERE id='$adresse' LIMIT 1"); } if($key==="lieferantennrkontobuchhaltung") { $this->app->DB->Update("UPDATE adresse SET lieferantennummer_buchhaltung = '".$value."' WHERE id='$adresse' LIMIT 1"); } } for ($l=1; $l<=3; $l++){ //!$als_ansprechpartner_speichern bezieht sich auf die Hauptadresse aus dem Datensatz // Ansprechpartner werden nur als Ansprechpartner gespeichert wenn die Huaptadresse ihrerseits kein Ansprechpartner ist if(!$als_ansprechpartner_speichern && !empty($felder['ansprechpartner'.$l.'name'])) { unset($data); $data['name']=$felder['ansprechpartner'.$l.'name']; $data['typ']=$this->TypErkennung($felder['ansprechpartner'.$l.'typ']); $data['strasse']=$felder['ansprechpartner'.$l.'strasse']; $data['sprache']=$felder['ansprechpartner'.$l.'sprache']; $data['bereich']=$felder['ansprechpartner'.$l.'bereich']; $data['abteilung']=$felder['ansprechpartner'.$l.'abteilung']; $data['unterabteilung']=$felder['ansprechpartner'.$l.'unterabteilung']; $data['land']=$felder['ansprechpartner'.$l.'land']; $data['ort']=$felder['ansprechpartner'.$l.'ort']; $data['plz']=$felder['ansprechpartner'.$l.'plz']; $data['telefon']=$felder['ansprechpartner'.$l.'telefon']; $data['telefax']=$felder['ansprechpartner'.$l.'telefax']; $data['mobil']=$felder['ansprechpartner'.$l.'mobil']; $data['email']=$felder['ansprechpartner'.$l.'email']; $data['sonstiges']=$felder['ansprechpartner'.$l.'sonstiges']; $data['adresszusatz']=$felder['ansprechpartner'.$l.'adresszusatz']; $data['ansprechpartner_land']=$felder['ansprechpartner'.$l.'ansprechpartner_land']; $data['anschreiben']=$felder['ansprechpartner'.$l.'anschreiben']; $data['titel']=$felder['ansprechpartner'.$l.'titel']; $data['marketingsperre']=$felder['ansprechpartner'.$l.'marketingsperre']; $vorhanden = !empty($this->app->DB->Select("SELECT id FROM ansprechpartner WHERE adresse='$adresse' AND name='".$data['name']."' AND strasse='".$data['strasse']."' AND ort='".$data['ort']."' AND plz='".$data['plz']."' AND email='".$data['email']."' LIMIT 1")); if(!$vorhanden){ $this->app->erp->CreateAnsprechpartner($adresse,$data); } } if(!empty($felder['lieferadresse'.$l.'name'])) { unset($data); $data['name']=$felder['lieferadresse'.$l.'name']; $data['typ']=$this->TypErkennung($felder['lieferadresse'.$l.'typ']); $data['strasse']=$felder['lieferadresse'.$l.'strasse']; $data['abteilung']=$felder['lieferadresse'.$l.'abteilung']; $data['unterabteilung']=$felder['lieferadresse'.$l.'unterabteilung']; $data['land']=$felder['lieferadresse'.$l.'land']; $data['ort']=$felder['lieferadresse'.$l.'ort']; $data['plz']=$felder['lieferadresse'.$l.'plz']; $data['telefon']=$felder['lieferadresse'.$l.'telefon']; $data['telefax']=$felder['lieferadresse'.$l.'telefax']; $data['email']=$felder['lieferadresse'.$l.'email']; $data['sonstiges']=$felder['lieferadresse'.$l.'sonstiges']; $data['adresszusatz']=$felder['lieferadresse'.$l.'adresszusatz']; $data['ansprechpartner']=$felder['lieferadresse'.$l.'ansprechpartner']; $data['standardlieferadresse']=$felder['lieferadresse'.$l.'standardlieferadresse']; $data['gln']=$felder['lieferadresse'.$l.'gln']; $data['ustid']=$felder['lieferadresse'.$l.'ustid']; $ust_befreit = (string)$felder['lieferadresse'.$l.'ust_befreit']; switch (strtolower($ust_befreit)){ case '0': case 'inland': $ust_befreit = 0; break; case '1': case 'eu-lieferung': $ust_befreit = 1; break; case '2': case 'export': $ust_befreit = 2; break; case '3': case 'steuerfrei inland': $ust_befreit = 3; break; } if(!empty($ust_befreit)){ $data['ust_befreit']=$ust_befreit; } $this->app->erp->CreateLieferadresse($adresse,$data); } } //rolle verpassen } } else if($tmp['cmd'][$i]==='update')// && $tmp['checked'][$i]=="1") { $adresse=0; $ansprechpartnerarray = array(); if($tmp['kundennummer'][$i]!="" || $tmp['lieferantennummer'][$i]!="") { $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$tmp['kundennummer'][$i]."' AND kundennummer!='' LIMIT 1"); if($adresse <=0) $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$tmp['lieferantennummer'][$i]."' AND lieferantennummer!='' LIMIT 1"); } if($adresse > 0) { $fields_tmp = ''; foreach($fieldset as $k => $v) { $bedingung = ''; $value = ''; $fieldname = ''; if(isset($fieldset[$k]['bedingung'])) { $bedingung = $fieldset[$k]['bedingung']; } if(isset($fieldset[$k]['nr'])) { $value = trim($data[$fieldset[$k]['nr'] - 1]); if(isset($fieldset[$k]['inv'])) { if($value != "1") { $value = 1; }else{ $value = 0; } } } elseif(isset($fieldset[$k]['vorlage'])) { $value = $fieldset[$k]['vorlage']; } if(isset($fieldset[$k]['bedingung'])) { $value = $this->ImportvorlageBedingung($value, $fieldset[$k]['bedingung']); } $fieldname = $fieldset[$k]['field']; $felder[$fieldname] = $value; $key = $fieldname; $value = $fieldname; $felder[$key]=$tmp[$value][$i]; if($key=="typ" || $key=="zahlungsweise"){ $tmp[$value][$i] = strtolower($tmp[$value][$i]); } if($key=="typ" || $key=="rechnung_typ") { $tmp[$value][$i] = $this->TypErkennung($tmp[$value][$i]); } if($key=="ust_befreit") { $tmp[$value][$i] = $this->UstBefreitErkennung($tmp[$value][$i]); } if($key==='umsatzsteuer_lieferant'){ $tmp[$value][$i] = $this->UstErkennungLieferant($tmp[$value][$i]); } if($key=="land") { $laenderliste = $this->app->erp->GetSelectLaenderliste(true); if(array_key_exists($tmp[$value][$i], $laenderliste)){ $tmp[$value][$i] = $laenderliste[$tmp[$value][$i]]; }else{ if(!in_array($tmp[$value][$i], $laenderliste)){ $tmp[$value][$i] = 'DE'; } } if($tmp[$value][$i] == ''){ $tmp[$value][$i] = 'DE'; } //if($tmp[$value][$i]=="Deutschland" || $tmp[$value][$i]=="Germany" || $tmp[$value][$i]=="") // $tmp[$value][$i] = "DE"; } if($key=="rechnung_vorname") { if($tmp['rechnung_vorname'][$i]!="") $tmp['rechnung_name'][$i] = $tmp['rechnung_vorname'][$i]." ".$tmp['rechnung_name'][$i]; } if($key=="name") { if($tmp['vorname'][$i]!="" && $tmp['firma'][$i]=="") $tmp['name'][$i] = $tmp['vorname'][$i]." ".$tmp['name'][$i]; if($tmp['firma'][$i]!='') { if($tmp['name'][$i]!="") { if($tmp['vorname'][$i]!="") $this->app->DB->Update("UPDATE adresse SET ansprechpartner='".$tmp['vorname'][$i]." ".$tmp['name'][$i]."' WHERE id='$adresse' LIMIT 1"); else $this->app->DB->Update("UPDATE adresse SET ansprechpartner='".$tmp['name'][$i]."' WHERE id='$adresse' LIMIT 1"); } $this->app->DB->Update("UPDATE adresse SET name='".$tmp['firma'][$i]."' WHERE id='$adresse' LIMIT 1"); } } if($key=="firma") { if(!empty($tmp['firma'][$i])){ $this->app->DB->Update("UPDATE adresse SET typ='firma', name='".$tmp['firma'][$i]."',ansprechpartner='".$tmp['name'][$i]."' WHERE id='$adresse' LIMIT 1"); if($tmp['vorname'][$i]!="") { $this->app->DB->Update("UPDATE adresse SET typ='firma', ansprechpartner='".$tmp['vorname'][$i]." ".$tmp['name'][$i]."' WHERE id='$adresse' LIMIT 1"); } } } if($key=="kundennrkontobuchhaltung") { $this->app->DB->Update("UPDATE adresse SET kundennummer_buchhaltung = '".$tmp[$key][$i]."' WHERE id='$adresse' LIMIT 1"); } if($key=="lieferantennrkontobuchhaltung") { $this->app->DB->Update("UPDATE adresse SET lieferantennummer_buchhaltung = '".$tmp[$key][$i]."' WHERE id='$adresse' LIMIT 1"); } switch($key) { case "gruppe1": case "gruppe2": case "gruppe3": case "gruppe4": case "gruppe5": if(trim($tmp[$key][$i]) != '') { $gr = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer = '".$this->app->DB->real_escape_string(trim($tmp[$key][$i]))."' LIMIT 1"); if(!$gr) { $gr = $this->app->DB->Select("SELECT id FROM gruppen WHERE name = '".$this->app->DB->real_escape_string(trim($tmp[$key][$i]))."' LIMIT 1"); } if($gr) { $check = $this->app->DB->Select("SELECT id FROM adresse_rolle WHERE adresse = '$adresse' AND objekt like 'Gruppe' AND parameter = '$gr' AND (bis = '0000-00-00' OR isnull(bis) OR bis >= curdate()) LIMIT 1"); if(!$check) { $projekt = $tmp['projekt'][$i]; if(!$projekt) { $projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id = '$adresse' LIMIT 1"); } $this->app->DB->Insert("INSERT INTO adresse_rolle (adresse, projekt, subjekt, praedikat, objekt, parameter, von, bis) VALUES ('$adresse','$projekt','Mitglied','von','Gruppe','$gr',curdate(),'0000-00-00')"); } } } break; } if($key==="liefersperre") { if(isset($tmp['liefersperre'][$i])) { if($tmp['liefersperre'][$i] === "1" || strtolower($tmp['liefersperre'][$i]) === 'x'|| substr(strtolower($tmp['liefersperre'][$i]),0,1) === 'j') { $tmp['liefersperre'][$i] = 1; $this->app->DB->Update("UPDATE adresse SET liefersperre='1' WHERE id='$adresse' LIMIT 1"); } elseif($tmp['liefersperre'][$i] === "0" || strtolower($tmp['liefersperre'][$i]) === ''|| substr(strtolower($tmp['liefersperre'][$i]),0,1) === 'n') { $tmp['liefersperre'][$i] = 0; $this->app->DB->Update("UPDATE adresse SET liefersperre='0' WHERE id='$adresse' LIMIT 1"); } } } if($key=="plz_ort") { $tmp['plz'][$i] = strstr($felder['plz_ort'], ' ', true); $tmp['ort'][$i] = strstr($felder['plz_ort'], ' '); $this->app->DB->Update("UPDATE adresse SET plz='".$tmp['plz'][$i]."', ort='".$tmp['ort'][$i]."' WHERE id='$adresse' LIMIT 1"); } if($key=="strasse" || $key=="hausnummer") { if($tmp['hausnummer'][$i]!="") $tmp['strasse'][$i] = $tmp['strasse'][$i]." ".$tmp['hausnummer'][$i]; } if($key=="strasse_hausnummer") { $this->app->DB->Update("UPDATE adresse SET strasse='".$this->app->DB->real_escape_string($tmp['strasse_hausnummer'][$i])."' WHERE id='$adresse' LIMIT 1"); } if($key=="geburtstag") { if(strpos($tmp[$value][$i],'.')!==false) { $tmp[$value][$i] = $this->app->String->Convert($tmp[$value][$i],"%1.%2.%3","%3-%2-%1"); } } if($key=="mandatsreferenzdatum") { if(strpos($tmp[$value][$i],'.')!==false) { $tmp[$value][$i] = $this->app->String->Convert($tmp[$value][$i],'%1.%2.%3','%3-%2-%1'); } } if($key==='liefersperredatum') { if(strpos($tmp[$value][$i],'.')!==false) { $tmp[$value][$i] = $this->app->String->Convert($tmp[$value][$i],'%1.%2.%3','%3-%2-%1'); } } $fields_tmp = " ".$v['field']."='".$this->app->DB->real_escape_string($tmp[$value][$i])."' "; $this->app->DB->Update("UPDATE adresse SET $fields_tmp WHERE id='$adresse' LIMIT 1"); if(strpos($key, "ansprechpartner") === 0 && strlen($key) > strlen("ansprechpartner")){ $ansprechpartnerarray[$key] = $felder[$key]; } } for ($nspri=1; $nspri <= 3 ; $nspri++) { unset($data); if(!empty($ansprechpartnerarray['ansprechpartner'.$nspri.'name'])){ $data['name']=$felder['ansprechpartner'.$nspri.'name']; $data['typ']=$this->TypErkennung($felder['ansprechpartner'.$nspri.'typ']); $data['strasse']=$felder['ansprechpartner'.$nspri.'strasse']; $data['sprache']=$felder['ansprechpartner'.$nspri.'sprache']; $data['bereich']=$felder['ansprechpartner'.$nspri.'bereich']; $data['abteilung']=$felder['ansprechpartner'.$nspri.'abteilung']; $data['unterabteilung']=$felder['ansprechpartner'.$nspri.'unterabteilung']; $data['land']=$felder['ansprechpartner'.$nspri.'land']; $data['ort']=$felder['ansprechpartner'.$nspri.'ort']; $data['plz']=$felder['ansprechpartner'.$nspri.'plz']; $data['telefon']=$felder['ansprechpartner'.$nspri.'telefon']; $data['telefax']=$felder['ansprechpartner'.$nspri.'telefax']; $data['mobil']=$felder['ansprechpartner'.$nspri.'mobil']; $data['email']=$felder['ansprechpartner'.$nspri.'email']; $data['sonstiges']=$felder['ansprechpartner'.$nspri.'sonstiges']; $data['adresszusatz']=$felder['ansprechpartner'.$nspri.'adresszusatz']; $data['ansprechpartner_land']=$felder['ansprechpartner'.$nspri.'ansprechpartner_land']; $data['anschreiben']=$felder['ansprechpartner'.$nspri.'anschreiben']; $data['titel']=$felder['ansprechpartner'.$nspri.'titel']; $data['marketingsperre']=$felder['ansprechpartner'.$nspri.'marketingsperre']; $vorhanden = !empty($this->app->DB->Select("SELECT id FROM ansprechpartner WHERE adresse='$adresse' AND name='".$data['name']."' AND strasse='".$data['strasse']."' AND ort='".$data['ort']."' AND plz='".$data['plz']."' AND email='".$data['email']."' LIMIT 1")); if(!$vorhanden){ $this->app->erp->CreateAnsprechpartner($adresse, $data); } } if(!empty($felder['lieferadresse'.$nspri.'name'])) { unset($data); $data['name']=$felder['lieferadresse'.$nspri.'name']; $data['typ']=$this->TypErkennung($felder['lieferadresse'.$nspri.'typ']); $data['strasse']=$felder['lieferadresse'.$nspri.'strasse']; $data['abteilung']=$felder['lieferadresse'.$nspri.'abteilung']; $data['unterabteilung']=$felder['lieferadresse'.$nspri.'unterabteilung']; $data['land']=$felder['lieferadresse'.$nspri.'land']; $data['ort']=$felder['lieferadresse'.$nspri.'ort']; $data['plz']=$felder['lieferadresse'.$nspri.'plz']; $data['telefon']=$felder['lieferadresse'.$nspri.'telefon']; $data['telefax']=$felder['lieferadresse'.$nspri.'telefax']; $data['email']=$felder['lieferadresse'.$nspri.'email']; $data['sonstiges']=$felder['lieferadresse'.$nspri.'sonstiges']; $data['adresszusatz']=$felder['lieferadresse'.$nspri.'adresszusatz']; $data['ansprechpartner']=$felder['lieferadresse'.$nspri.'ansprechpartner']; $data['standardlieferadresse']=$felder['lieferadresse'.$nspri.'standardlieferadresse']; $data['gln']=$felder['lieferadresse'.$nspri.'gln']; $data['ustid']=$felder['lieferadresse'.$nspri.'ustid']; $ust_befreit = (string)$felder['lieferadresse'.$nspri.'ust_befreit']; switch (strtolower($ust_befreit)){ case '0': case 'inland': $ust_befreit = 0; break; case '1': case 'eu-lieferung': $ust_befreit = 1; break; case '2': case 'export': $ust_befreit = 2; break; case '3': case 'steuerfrei inland': $ust_befreit = 3; break; } if(!empty($ust_befreit)){ $data['ust_befreit']=$ust_befreit; } $vorhanden = !empty($this->app->DB->Select("SELECT id FROM lieferadressen WHERE adresse='$adresse' AND name='".$data['name']."' AND ort='".$data['ort']."' AND plz='".$data['plz']."' AND strasse='".$data['strasse']."' AND adresszusatz='".$data['adresszusatz']."' AND email='".$data['email']."'")); if(!$vorhanden){ $this->app->erp->CreateLieferadresse($adresse,$data); } } } } } break; case 'kontorahmen': // Create a row dataset (without checked and cmd) $update_sql = ""; $row = array(); $comma = ""; foreach ($tmp as $key => $value) { if ($key != 'cmd' && $key != 'checked') { $row[$key] = $value[$i]; $comma = ", "; } } if (empty($row['sachkonto'])) { break; } $art_array = array( '1' => 'Aufwendungen', '2' => 'Erlöse', '3' => 'Geldtransit', '9' => 'Saldo' ); $row['art'] = array_search($row['art'], $art_array); $row['projekt'] = $this->app->erp->ReplaceProjekt(true,$row['projekt'],true); // Parameters: Target db?, value, from form? $sql = "SELECT * FROM kontorahmen WHERE sachkonto = '".$row['sachkonto']."'"; $result = $this->app->DB->SelectArr($sql); if (!empty($result)) { $comma = ""; foreach ($row as $key => $value) { $update_sql .= $comma."`".$key."` = '".$value."'"; $comma = ", "; } $sql = "UPDATE kontorahmen SET ".$update_sql." WHERE `sachkonto` = '".$row['sachkonto']."'"; $result = $this->app->DB->Update($sql); } else { $sql = "INSERT INTO kontorahmen (". implode(", ",array_keys($row)). ") VALUES ('". implode("', '",array_values($row)). "')"; $result = $this->app->DB->Update($sql); } break; case 'kontoauszug': $allowed_fields = array('konto','buchung','betrag','betrag2','waehrung','buchungstext','buchungstext2','buchungstext3','buchungstext4'); $error = false; // Create a row dataset (without checked and cmd) $update_sql = ""; $row = array(); $comma = ""; foreach ($tmp as $key => $value) { if ($key != 'cmd' && $key != 'checked') { if (in_array($key,$allowed_fields)) { $row[$key] = $value[$i]; $comma = ", "; } else { $msg .= "Feld nicht korrekt: ".$key.".
"; $error = true; } } } if (!$error) { // Collect texts $buchungstext = ""; $comma = ""; foreach ($row as $key => $value) { if (str_starts_with($key,'buchungstext')) { if (!empty($value)) { $buchungstext .= $comma.$value; $comma = ", "; } unset($row[$key]); } } $row['buchungstext'] = $buchungstext; $row['soll'] = $row['betrag']; unset($row['betrag']); if (empty($row['soll'])) { $row['soll'] = $row['betrag2']; } unset($row['betrag2']); $row['soll'] = $this->app->erp->ReplaceBetrag(true,$row['soll']); $row['buchung'] = $this->app->erp->ReplaceDatum(true,$row['buchung'],false); // Calculate hash $hash_fields = array('buchung','soll','waehrung','buchungstext'); $hash_text = ""; foreach($hash_fields as $hash_field) { $hash_text .= $row[$hash_field]; } $row['pruefsumme'] = md5($hash_text); $sql = "SELECT id FROM konten WHERE kurzbezeichnung ='".$row['konto']."' LIMIT 1"; $kontoid = $this->app->DB->SelectArr($sql); if (!empty($kontoid)) { $row['konto'] = $kontoid[0]['id']; $row['importdatum'] = date("Y-m-d H:i:s"); $sql = "SELECT pruefsumme FROM kontoauszuege WHERE pruefsumme='".$row['pruefsumme']."' AND konto ='".$row['konto']."' AND importfehler IS NULL"; $result = $this->app->DB->SelectArr($sql); if (!empty($result)) { $msg .= "Doppelter Eintrag (nicht importiert): ".$row['buchungstext']."
"; } else { $sql = "INSERT INTO kontoauszuege (". implode(", ",array_keys($row)). ") VALUES ('". implode("', '",array_values($row)). "')"; $result = $this->app->DB->Update($sql); } } else { $msg .= "Konto nicht gefunden: ".$row['konto'].".
"; } } break; case 'stueckliste': $allowed_fields = array('stuecklistevonartikel','artikel','menge','art','referenz','layer','wert','bauform','xpos','ypos','zachse','place'); // Create a row dataset (without checked and cmd) $row = array(); $error_text = ""; $error = $this->create_row_set($tmp, $i, $allowed_fields, $row, $error_text); if ($error !== false) { $sql = "SELECT id FROM artikel WHERE stueckliste = 1 AND nummer = '".$row['stuecklistevonartikel']."'"; $von_id = $this->app->DB->SelectArr($sql); if (empty($von_id)) { $msg .= "Fehlerhafter 'Stueckliste von'-Artikel \"".$row['stuecklistevonartikel']."\"
"; break; } $row['stuecklistevonartikel'] = $von_id[0]['id']; $sql = "SELECT id FROM artikel WHERE nummer = '".$row['artikel']."'"; $artikel_id = $this->app->DB->SelectArr($sql); if (empty($artikel_id)) { $msg .= "Fehlerhafter Artikel \"".$row['artikel']."\"
"; break; } $row['artikel'] = $artikel_id[0]['id']; if(empty($row['menge'])) { $row['menge'] = 1; } if(empty($row['art'])) { $row['art'] = 'et'; } if(empty($row['place']) || $row['place'] == 'DNP') { $row['place'] = 'DNP'; } else { $row['place'] = 'DP'; } $sql = "INSERT INTO stueckliste (". implode(", ",array_keys($row)). ") VALUES ('". implode("', '",array_values($row)). "')"; $result = $this->app->DB->Update($sql); } else if(!$first_checked) { $first_checked = true; $msg .= $error_text; } break; } // HERE END OF PROCESSING THE ROWS switch($ziel); if($isCronjob) { $this->app->DB->Update( sprintf( "UPDATE `prozessstarter` SET `mutexcounter` = 0, `mutex` = 1 WHERE `parameter` = 'importvorlage' AND `aktiv` = 1" ) ); $this->app->DB->Update( sprintf( 'UPDATE `importmasterdata` SET `imported_rows` = %d WHERE `id` = %d AND `count_rows` >= %d', $i, $parameter['importmasterdata_id'], $i ) ); $importMasterData = $this->app->DB->SelectRow( sprintf( 'SELECT `status` FROM `importmasterdata` WHERE `id` = %d', $parameter['importmasterdata_id'] ) ); if(empty($importMasterData) || $importMasterData['status'] === 'cancelled') { break; } } } // Loop if($return) { if($returnids) { return $ids; } return $number_of_rows; } if (empty($msg)) { $msg=$this->app->erp->base64_url_encode("
Import durchgeführt.
"); $this->app->Location->execute("index.php?module=importvorlage&action=import&id=$id&msg=$msg"); } else { $msg=$this->app->erp->base64_url_encode("
".$msg."
"); $this->app->Location->execute("index.php?module=importvorlage&action=import&id=$id&msg=$msg"); } } /** * @param string $name * * @return int|null */ public function getArticlePropertyIdByName(string $name): ?int { $name = $this->app->DB->real_escape_string($name); $propertyId = $this->app->DB->Select( "SELECT `id` FROM `artikeleigenschaften` WHERE `geloescht` <> 1 AND `name` = '{$name}' LIMIT 1" ); if($propertyId > 0) { return (int)$propertyId; } return null; } /** * @param int $articleId * @param int $propertyId * @param string $propertyValue * * @return int|null */ public function getPropertyValueIdByName(int $articleId, int $propertyId, string $propertyValue): ?int { $propertyValue = $this->app->DB->real_escape_string($propertyValue); $propertyValueId = $this->app->DB->Select( "SELECT `id` FROM `artikeleigenschaftenwerte` WHERE `artikel` = {$articleId} AND `artikeleigenschaften` = {$propertyId} AND `wert` = '{$propertyValue}' LIMIT 1" ); if($propertyValueId > 0) { return (int)$propertyValueId; } return null; } /** * @param int $articleId * @param int $propertyId * * @return array|null */ public function getFirstPropertyValueByPropertyId(int $articleId, int $propertyId): ?array { return $this->app->DB->SelectRow( "SELECT * FROM `artikeleigenschaftenwerte` WHERE `artikel` = {$articleId} AND `artikeleigenschaften` = {$propertyId} LIMIT 1" ); } /** * @param string $name * * @return int */ public function createArticleProperty(string $name): int { $name = $this->app->DB->real_escape_string($name); $this->app->DB->Insert("INSERT INTO `artikeleigenschaften` (`name`) VALUES ('{$name}')"); return (int)$this->app->DB->GetInsertID(); } /** * @param int $articleId * @param int $propertyId * @param string $propertyValue * * @return int */ public function createArticlePropertyValue(int $articleId, int $propertyId, string $propertyValue): int { $propertyValue = $this->app->DB->real_escape_string($propertyValue); $this->app->DB->Insert( "INSERT INTO `artikeleigenschaftenwerte` (`artikel`, `artikeleigenschaften`, `wert`) VALUES ({$articleId}, {$propertyId}, '{$propertyValue}')" ); return (int)$this->app->DB->GetInsertID(); } /** * @param int $propertyValueId * @param string $propertyValue */ public function updateArticlePropertyValue(int $propertyValueId, string $propertyValue): void { $propertyValue = $this->app->DB->real_escape_string($propertyValue); $this->app->DB->Update( "UPDATE `artikeleigenschaftenwerte` SET `wert` = '{$propertyValue}' WHERE `id` = {$propertyValueId}" ); } /** * @param int $propertyValueId */ public function deletePropertyValue(int $propertyValueId): void { $this->app->DB->Update( "DELETE FROM `artikeleigenschaftenwerte` WHERE `id` = {$propertyValueId}" ); } /** * @return array */ public function getLanguageCodesForProperties(): array { if($this->languageCodesForProperties !== null) { return $this->languageCodesForProperties; } $this->languageCodesForProperties = array_map('strtolower', $this->app->DB->SelectFirstCols( "SELECT DISTINCT `iso` FROM `sprachen` WHERE `aktiv` = 1") ); return $this->languageCodesForProperties; } /** * @param int $propertyIndex * @param int $rowIndex * @param array $columnsArray * * @return array */ public function getPropertyTranslationCodesByPropertyIndex(int $propertyIndex, int $rowIndex, array $columnsArray): array { $languages = $this->getLanguageCodesForProperties(); $languageCodes = []; foreach ($languages as $language) { if(isset($columnsArray["eigenschaftwert{$propertyIndex}_{$language}"][$rowIndex])) { $propertyValue = (string)$columnsArray["eigenschaftwert{$propertyIndex}_{$language}"][$rowIndex]; $propertyName = !empty($columnsArray["eigenschaftname{$propertyIndex}_{$language}"][$rowIndex]) ? $columnsArray["eigenschaftname{$propertyIndex}_{$language}"][$rowIndex] : null; if($propertyName === null) { $propertyName = !empty($columnsArray['eigenschaftnameeindeutig' . $propertyIndex][$rowIndex]) ? $columnsArray['eigenschaftname' . $propertyIndex][$rowIndex] : null; } if($propertyName === null) { $propertyName = !empty($columnsArray['eigenschaftname' . $propertyIndex][$rowIndex]) ? $columnsArray['eigenschaftname' . $propertyIndex][$rowIndex] : null; } if($propertyName === null) { continue; } $languageCodes[$language] = ['property_name' => $propertyName, 'property_value' => $propertyValue]; } } return $languageCodes; } /** * @param int $articleId * @param string $languageCode * @param string $propertyNameFrom */ public function deletePropertyTranslations( int $articleId, string $languageCode, string $propertyNameFrom ): void { $languageCode = $this->app->DB->real_escape_string(strtoupper($languageCode)); $propertyNameFrom = $this->app->DB->real_escape_string($propertyNameFrom); $this->app->DB->Delete( "DELETE FROM `article_property_translation` WHERE `article_id` = {$articleId} AND `property_from` = '{$propertyNameFrom}' AND `language_to` = '{$languageCode}'" ); } /** * @param int $articleId * @param string $languageCode * @param string $propertyNameFrom * @param string $propertyValue */ public function deletePropertyTranslationByValue( int $articleId, string $languageCode, string $propertyNameFrom, string $propertyValue ): void { $languageCode = $this->app->DB->real_escape_string(strtoupper($languageCode)); $propertyNameFrom = $this->app->DB->real_escape_string($propertyNameFrom); $propertyValue = $this->app->DB->real_escape_string($propertyValue); $this->app->DB->Delete( "DELETE FROM `article_property_translation` WHERE `article_id` = {$articleId} AND `property_from` = '{$propertyNameFrom}' AND `language_to` = '{$languageCode}' AND `property_value_from` = '{$propertyValue}'" ); } /** * @param int $articleId * @param string $languageTo * @param string $propertyNameFrom * @param string $propertyValueFrom * @param string $propertyNameTo * @param string $propertyValueTo * @param string $languageFrom * * @return int */ public function createArticlePropertyTranslation( int $articleId, string $languageTo, string $propertyNameFrom, string $propertyValueFrom, string $propertyNameTo, string $propertyValueTo, string $languageFrom = 'DE' ): int { $languageFrom = $this->app->DB->real_escape_string(strtoupper($languageFrom)); $languageTo = $this->app->DB->real_escape_string(strtoupper($languageTo)); $propertyNameFrom = $this->app->DB->real_escape_string($propertyNameFrom); $propertyValueFrom = $this->app->DB->real_escape_string($propertyValueFrom); $propertyNameTo = $this->app->DB->real_escape_string($propertyNameTo); $propertyValueTo = $this->app->DB->real_escape_string($propertyValueTo); $this->app->DB->Insert( "INSERT INTO `article_property_translation` (`article_id`, `language_from`, `language_to`, `property_from`, `property_value_from`, `property_to`, `property_value_to`) VALUES ({$articleId}, '{$languageFrom}', '{$languageTo}', '{$propertyNameFrom}', '{$propertyValueFrom}', '{$propertyNameTo}', '{$propertyValueTo}' )" ); return (int)$this->app->DB->GetInsertID(); } /** * @param int $propertyTranslationId * @param string $propertyNameTo * @param string $propertyValueTo * @param string|null $propertyNameFrom * @param string|null $propertyValueFrom */ public function updatePropertyTranslation( int $propertyTranslationId, string $propertyNameTo, string $propertyValueTo, ?string $propertyNameFrom = null, ?string $propertyValueFrom = null ): void { $propertyNameTo = $this->app->DB->real_escape_string($propertyNameTo); $propertyValueTo = $this->app->DB->real_escape_string($propertyValueTo); $this->app->DB->Update( "UPDATE `article_property_translation` SET `property_to` = '{$propertyNameTo}', `property_value_to` = '{$propertyValueTo}' WHERE `id` = {$propertyTranslationId}" ); if($propertyNameFrom === null) { return; } $propertyNameFrom = $this->app->DB->real_escape_string($propertyNameFrom); $propertyValueFrom = $this->app->DB->real_escape_string($propertyValueFrom); $this->app->DB->Update( "UPDATE `article_property_translation` SET `property_from` = '{$propertyNameFrom}', `property_value_from` = '{$propertyValueFrom}' WHERE `id` = {$propertyTranslationId}" ); } /** * @param int $articleId * @param string $languageCode * @param string $propertyNameFrom * @param string $propertyValueFrom * * @return array|null */ public function getPropertyTranslation( int $articleId, string $languageCode, string $propertyNameFrom, string $propertyValueFrom ): ?array { $languageCode = $this->app->DB->real_escape_string(strtoupper($languageCode)); $propertyNameFrom = $this->app->DB->real_escape_string($propertyNameFrom); $propertyValueFrom = $this->app->DB->real_escape_string($propertyValueFrom); return $this->app->DB->SelectRow( "SELECT * FROM `article_property_translation` WHERE `article_id` = {$articleId} AND `language_to` = '{$languageCode}' AND `property_from` = '{$propertyNameFrom}' AND `property_value_from` = '{$propertyValueFrom}'" ); } /** * @param int $articleId * @param string $languageCode * @param string $propertyNameFrom * @param string $propertyValueFrom * @param string $propertyNameTo * @param string $propertyValueTo * @param string|null $oldPropertyValue */ public function tryUpdatePropertyTranslation( int $articleId, string $languageCode, string $propertyNameFrom, string $propertyValueFrom, string $propertyNameTo, string $propertyValueTo, ?string $oldPropertyValue = null ): void { $propertyTranslation = $this->getPropertyTranslation( $articleId, $languageCode, $propertyNameFrom, $propertyValueFrom ); if($propertyTranslation === null && $oldPropertyValue !== null) { $propertyTranslation = $this->getPropertyTranslation( $articleId, $languageCode, $propertyNameFrom, $oldPropertyValue ); } if($propertyTranslation === null) { $this->createArticlePropertyTranslation( $articleId, $languageCode, $propertyNameFrom, $propertyValueFrom, $propertyNameTo, $propertyValueTo ); return; } $this->updatePropertyTranslation( (int)$propertyTranslation['id'], $propertyNameTo, $propertyValueTo, $propertyNameFrom, $propertyValueFrom ); } /** * @param int $articleId * @param int $propertyIndex * @param int $rowIndex * @param array $columnsArray * @param string $propertyNameFrom * @param string $propertyValueFrom */ public function createTranslationByPropertyNameAndValue( int $articleId, int $propertyIndex, int $rowIndex, array $columnsArray, string $propertyNameFrom, string $propertyValueFrom ): void { foreach ($this->getPropertyTranslationCodesByPropertyIndex($propertyIndex, $rowIndex, $columnsArray) as $languageCode => $property ) { $propertyNameTo = $property['property_name']; $propertyValueTo = $property['property_value']; $this->createArticlePropertyTranslation( $articleId, $languageCode, $propertyNameFrom, $propertyValueFrom, $propertyNameTo, $propertyValueTo ); } } /** * @param int $articleId * @param int $propertyIndex * @param int $rowIndex * @param array $columnsArray */ public function updateUniquePropertyNameByIndex( int $articleId, int $propertyIndex, int $rowIndex, array $columnsArray ): void { } /** * @param int $articleId * @param $propertyIndex * @param int $rowIndex * @param array $columnsArray */ public function updateArticlePropertyByIndex( int $articleId, int $propertyIndex, int $rowIndex, array $columnsArray ): void { } /** * @param int $articleId * @param int $rowIndex * @param array $columnsArray */ public function updateArticleProperties(int $articleId, int $rowIndex, array $columnsArray): void { } /** * @param int $ekid * @param array $data * @param string $prefix */ function UpdateEinkaufspreiseExtraWerte($ekid,$data,$prefix='') { if($ekid <=0) { return; } $datum_werte = array('rahmenvertrag_von','rahmenvertrag_bis','preis_anfrage_vom','gueltig_bis','datum_lagerlieferant'); $zahlen_werte = array('sicherheitslager','rahmenvertrag_menge','lieferzeit_aktuell','lieferzeit_standard','lager_lieferant'); $text_werte = array('rahmenvertrag','bemerkung','nichtberechnet'); foreach($datum_werte as $key) { $keyi = 'lieferant'.$key.$prefix; if(isset($data[$keyi][1])) { if(strpos($data[$keyi][1],'.')!==false){ $data[$keyi][1] = $this->app->String->Convert($data[$keyi][1], '%1.%2.%3', '%3-%2-%1'); } $updatevalue[] ="$key='".$data[$keyi][1]."'"; } } foreach($zahlen_werte as $key) { $keyi = 'lieferant'.$key.$prefix; if(isset($data[$keyi][1])) { $data[$keyi][1] = str_replace(',','.',$data[$keyi][1]); $updatevalue[] ="$key='".$data[$keyi][1]."'"; } } foreach($text_werte as $key) { $keyi = 'lieferant'.$key.$prefix; if(isset($data[$keyi][1])) { $updatevalue[] ="$key='".$data[$keyi][1]."'"; } } if(is_array($updatevalue)) { $updatesql = implode(',',$updatevalue); $this->app->DB->Update("UPDATE einkaufspreise SET $updatesql WHERE id='$ekid' LIMIT 1"); } } /** * @param string $value * @param string $bedingung * * @return string */ function ImportvorlageBedingung($value, $bedingung) { if(strpos($bedingung,'?') === false || strpos($bedingung,':') === false) { return $value; } $beda = explode('?',$bedingung,2); $beda[1] = trim(trim($beda[1]),'"'); $beda[1] = str_replace('%value%',$value,$beda[1]); $beda2 = explode(':',$beda[1],2); if(isset($beda2[1])) { $beda[1] = $beda2[0]; $beda2[1] = trim(trim($beda2[1]),'"'); $beda2[1] = str_replace('%value%',$value,$beda2[1]); if(strpos($beda[0],'>=') !== false) { $beda3 = explode('>=',$beda[0],2); $beda3[1] = trim(trim($beda3[1]),'"'); if(trim(trim($value),'"') >= trim(trim($beda3[1]),'"')) { return $beda[1]; } return $beda2[1]; } if(strpos($beda[0],'<=') !== false) { $beda3 = explode('<=',$beda[0],2); $beda3[1] = trim(trim($beda3[1]),'"'); if(trim(trim($value),'"') <= trim(trim($beda3[1]),'"')) { return $beda[1]; } return $beda2[1]; } if(strpos($beda[0],'>') !== false) { $beda3 = explode('>',$beda[0],2); $beda3[1] = trim(trim($beda3[1]),'"'); if(trim(trim($value),'"') > trim(trim($beda3[1]),'"')) { return $beda[1]; } return $beda2[1]; } if(strpos($beda[0],'<') !== false) { $beda3 = explode('<',$beda[0],2); $beda3[1] = trim(trim($beda3[1]),'"'); if(trim(trim($value),'"') < trim(trim($beda3[1]),'"')) { return $beda[1]; } return $beda2[1]; } if(strpos($beda[0],'!=') !== false) { $beda3 = explode('!=',$beda[0],2); $beda3[1] = trim(trim($beda3[1]),'"'); if(trim(trim($value),'"') != trim(trim($beda3[1]),'"')) { return $beda[1]; } return $beda2[1]; } if(strpos($beda[0],'==') !== false) { $beda3 = explode('==',$beda[0],2); $beda3[1] = trim(trim($beda3[1]),'"'); if(trim(trim($value),'"') == trim(trim($beda3[1]),'"')) { return $beda[1]; } return $beda2[1]; } if(strpos($beda[0],'=') !== false) { $beda3 = explode('=',$beda[0],2); $beda3[1] = trim(trim($beda3[1]),'"'); if(trim(trim($value),'"') == trim(trim($beda3[1]),'"')) { return $beda[1]; } return $beda2[1]; } } return $value; } /** * @param string $ziel * @param array $fieldset */ function ImportPrepareHeader($ziel,$fieldset) { $number_of_fields =(!empty($fieldset)?count($fieldset):0); switch($ziel) { case "einkauf": case "artikel": $this->app->Tpl->Add('ERGEBNIS','AuswahlAktionArtikel'); break; case "adresse": $this->app->Tpl->Add('ERGEBNIS','AuswahlAktionAdresse'); break; case "zeiterfassung": case "wiedervorlagen": case "notizen": $this->app->Tpl->Add('ERGEBNIS','Auswahl AktionKunde'); break; case "provisionenartikel": $this->app->Tpl->Add('ERGEBNIS', 'Aktion'); break; default: $this->app->Tpl->Add('ERGEBNIS','Auswahl Aktion'); break; } for($j=0;$j<$number_of_fields;$j++) { if(isset($fieldset[$j]) && isset($fieldset[$j]['field'])) { $this->app->Tpl->Add('ERGEBNIS',''.$fieldset[$j]['field'].''); } } $this->app->Tpl->Add('ERGEBNIS',''); } /** * @param int $rowcounter * @param string $ziel * @param array $data * @param array $fieldset */ function ImportPrepareRow($rowcounter,$ziel,$data,$fieldset) { $number_of_fields =(!empty($fieldset)?count($fieldset):0); //Standard $fields['waehrung'] = 'EUR'; $herstellernummermehrfachvergeben = false; $output = ''; for($j=0;$j<$number_of_fields;$j++) { $value = ''; $bedingung = false; if(isset($fieldset[$j]['bedingung'])) { $bedingung = $fieldset[$j]['bedingung']; } if(isset($fieldset[$j]['nr'])) { $value = trim($data[$fieldset[$j]['nr'] - 1]); if(isset($fieldset[$j]['inv'])) { if($value != '1') { $value = 1; } else{ $value = 0; } } } elseif(isset($fieldset[$j]['vorlage'])) { $value = $fieldset[$j]['vorlage']; } if(isset($fieldset[$j]['bedingung'])) { $value = $this->ImportvorlageBedingung($value, $fieldset[$j]['bedingung']); } $fieldname = $fieldset[$j]['field']; switch($fieldname) { case "herstellernummer": $fields['herstellernummer'] = $value; if($value != ''){ $nummervonhersteller = $this->app->DB->Select("SELECT nummer FROM artikel WHERE herstellernummer='".$this->app->DB->real_escape_string($value)."' AND herstellernummer <> '' AND geloescht <> 1"); if(!is_array($nummervonhersteller)){ if($nummervonhersteller > 0){ $fields['nummer'] = $nummervonhersteller; $nummer = $nummervonhersteller; } }else{ $herstellernummermehrfachvergeben = true; } } //if($fields[herstellernummer]<=0) $fields[herstellernummer]=""; break; case "matrixproduktvon": $fields['matrixproduktvon'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE nummer='".$this->app->DB->real_escape_string($value)."' AND geloescht <> 1 LIMIT 1"); break; case "matrixproduktgruppe1": $fields['matrixproduktgruppe1'] = $value; break; case "nummer": $fields['nummer'] = trim($value); $fields['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE nummer='".$this->app->DB->real_escape_string($fields['nummer'])."' LIMIT 1"); $nummer = $fields['nummer']; foreach($fieldset as $k => $v) { $bedingung = ''; if(isset($fieldset[$k]['bedingung'])) { $bedingung = $fieldset[$k]['bedingung']; } if(trim(strtolower($bedingung)) !== 'unique') { continue; } if(empty($v['field']) || empty($fields[$v['field']])) { continue; } $adressid = $this->app->DB->Select( "SELECT id FROM artikel WHERE ".$v['field']."='".$this->app->DB->real_escape_string($fields[$v['field']])."' LIMIT 1" ); if($adressid) { if(isset($fields['nummer']) && (strtoupper($value) === 'NEW' || strtoupper($value) === 'NEU')) { $fields['nummer'] = $this->app->DB->Select( "SELECT nummer FROM artikel WHERE id = '".$adressid."' LIMIT 1" ); } } } break; case "lieferantennummer": $fields['lieferantennummer'] = $value; $fields['lieferantennummer'] = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE lieferantennummer='".$this->app->DB->real_escape_string($fields['lieferantennummer'])."' LIMIT 1"); foreach($fieldset as $k => $v) { $bedingung = ''; if(isset($fieldset[$k]['bedingung'])) { $bedingung = $fieldset[$k]['bedingung']; } if(trim(strtolower($bedingung)) !== 'unique'){ continue; } if(empty($v['field']) || empty($fields[$v['field']])) { continue; } $adressid = $this->app->DB->Select( "SELECT id FROM adresse WHERE ".$v['field']."='".$this->app->DB->real_escape_string($fields[$v['field']])."' LIMIT 1" ); if($adressid) { if(isset($fields['lieferantennummer']) && (strtoupper($value) === 'NEW' || strtoupper($value) === 'NEU')) { $fields['lieferantennummer'] = $this->app->DB->Select( "SELECT lieferantennummer FROM adresse WHERE id = '".$adressid."' LIMIT 1" ); } } } $lieferantid = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$this->app->DB->real_escape_string($fields['lieferantennummer'])."' LIMIT 1"); break; case "kundennummer": $fields['kundennummer'] = $value; $fields['kundennummer'] = $this->app->DB->Select( "SELECT kundennummer FROM adresse WHERE kundennummer='".$this->app->DB->real_escape_string($fields['kundennummer'])."' LIMIT 1" ); foreach($fieldset as $k => $v) { $bedingung = ''; if(isset($fieldset[$k]['bedingung'])) { $bedingung = $fieldset[$k]['bedingung']; } if(trim(strtolower($bedingung)) !== 'unique') { continue; } if(empty($v['field']) || empty($fields[$v['field']])) { continue; } $adressid = $this->app->DB->Select( "SELECT id FROM adresse WHERE ".$v['field']."='".$this->app->DB->real_escape_string($fields[$v['field']])."' LIMIT 1" ); if($adressid) { if(isset($fields['kundennummer']) && (strtoupper($value) === 'NEW' || strtoupper($value) === 'NEU')) { $fields['kundennummer'] = $this->app->DB->Select( "SELECT kundennummer FROM adresse WHERE id = '".$adressid."' LIMIT 1" ); } } } break; case "ab_menge": $fields['ab_menge'] = $value; break; case "ean": $fields['ean'] = $value; if($value != ''){ if(!isset($fields['nummer']) && !$fields['nummer']){ $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE ean='$value' AND ean<>'' AND geloescht <> 1 LIMIT 1"); if(!is_array($nummer) && $nummer) { $fields['nummer'] = $nummer; } } } break; case "waehrung": $fields['waehrung'] = $value; break; case "ekpreis": $value = str_replace('EUR','',$value); $value = str_replace(' ','',$value); if(preg_match('#^(?.*)(?[\.,])(?[0-9]+)$#', $value, $matches)){ /* clean integer and append decimals with your own separator */ $number = ((int) preg_replace('#[^0-9]+#', '', $matches['integer']) . ',' . $matches['decimals']); } else{ $number = (int) preg_replace('#[^0-9]+#', '', $input); } // $formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY); // prüfe von rechts letztes zeichen das keine 0 ist // let's print the international format for the en_US locale $value = $number; $fields['ekpreis'] = $value; break; case "datum_von": $value = $this->app->String->Convert($value,'%1.%2.%3','%3-%2-%1'); $fields['datum_von'] = $value; break; case "datum_bis": $value = $this->app->String->Convert($value,'%1.%2.%3','%3-%2-%1'); $fields['datum_bis'] = $value; break; case "kennung": $fields['kennung'] = $value; break; case "zeit_bis": $fields['zeit_bis'] = $value; break; case "zeit_von": $fields['zeit_von'] = $value; break; default: $fields[$fieldname] = $value; } $output .= ''; } switch($ziel) { case "einkauf": $checked = "checked"; if($fields['lieferantennummer']=="") { $action_anzeige = "Keine (Lieferant fehlt)"; $action="none"; $checked=""; } else if($fields['lieferantennummer']!="" && $fields['nummer']!="") { $nummer = trim($fields['nummer']); $action_anzeige = "Update (Artikelnr. gefunden)"; $action="update"; } else if($fields['lieferantennummer']!="" && $fields['herstellernummer']!="") { $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE herstellernummer='".$this->app->DB->real_escape_string($fields['herstellernummer'])."' AND geloescht <>'1'"); if(!is_array($nummer)){ $action_anzeige = "Update (Herstellernr. gefunden)"; $action="update"; }else{ $action_anzeige = "Keine (Herstellernr. mehrfach vergeben)"; $action="none"; } } else if($fields['lieferantennummer']!="" && $fields['bestellnummer']!="") { $artikelid = $this->app->DB->Select("SELECT artikel FROM einkaufspreise WHERE bestellnummer='".$this->app->DB->real_escape_string($fields['bestellnummer'])."' AND adresse='".$lieferantid."' LIMIT 1"); $nummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='".$artikelid."' LIMIT 1"); $action_anzeige = "Update (Bestellnr. gefunden)"; $action="update"; } else { $action_anzeige = "Keine (Artikel- oder Herstellernr. fehlt)"; $action="none"; $checked=""; } break; case "adresse": if($fields['kundennummer']=="" && $fields['lieferantennummer']=="" && $fields['name']=="" && $fields['firma']=="" ) { $action_anzeige = "Keine (Kd.- und Lieferanten-Nr. name und firma fehlt)"; $action="none"; $checked=""; } else if($fields['kundennummer']=="" && ($fields['name']!="" || $fields['firma']!="") && $fields['lieferantennummer']=="") { $action_anzeige = "Neu (Adresse neu anlegen)"; $action="create"; $checked="checked"; } else if($fields['lieferantennummer']!="" || $fields['kundennummer']!="") { $checkkunde = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='".$this->app->DB->real_escape_string($fields['kundennummer'])."' AND kundennummer!='' LIMIT 1"); if($checkkunde <= 0) { $action_anzeige = "Neu (Adresse neu anlegen)"; $action="create"; $checked="checked"; } else { $action_anzeige = "Update (Kundennummer gefunden)"; $action="update"; $checked="checked"; } if($checkkunde <= 0) { $checklieferant = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='".$this->app->DB->real_escape_string($fields['lieferantennummer'])."' AND lieferantennummer!='' LIMIT 1"); if($checklieferant <= 0) { $action_anzeige = "Neu (Adresse neu anlegen)"; $action="create"; $checked="checked"; } else { $action_anzeige = "Update (Lieferantennummer gefunden)"; $action="update"; $checked="checked"; } } } break; case "artikel": if($herstellernummermehrfachvergeben){ $action_anzeige = "Keine (Herstellernummer mehfach vergeben)"; $action="none"; $checked=""; } elseif((String)$fields['ean']==="" && (String)$fields['nummer']==="" && (String)$fields['name_de']==="" && ((String)$fields['matrixproduktvon'] === "" || (String)$fields['matrixproduktgruppe1'] === "")) { $action_anzeige = "Keine (Artikelnummer, name_de und EAN fehlt)"; $action="none"; $checked=""; } elseif((String)$fields['nummer']==="" && $fields['name_de']!="") { $action_anzeige = "Neu (Artikel neu anlegen)"; $action="create"; $checked="checked"; } elseif($fields['nummer']!="") { $action_anzeige = "Update (Artikel update)"; $action="update"; $checked="checked"; } elseif($fields['matrixproduktvon'] != "" && $fields['matrixproduktgruppe1'] != "") { $action_anzeige = "Neu (Artikel neu anlegen)"; $action="create"; $checked="checked"; } elseif(!$fields['nummer'] && $fields['ean']!="") { $action_anzeige = "Keine (Kein Artikel zu EAN gefunden)"; $action="none"; $checked=""; } break; case "zeiterfassung": case "wiedervorlagen": case "notizen": $checked = "checked"; $nummer=''; if($fields['kundennummer']!=''){ $nummer = $this->app->DB->Select( "SELECT kundennummer FROM adresse WHERE kundennummer='" . $fields['kundennummer'] . "' LIMIT 1" ); } if($nummer==''){ $action_anzeige = "Keine (Kundennummer fehlt)"; $action="none"; $checked=""; } else { $action="create"; } break; case "provisionenartikel": $action_anzeige = "Neu"; $action="create"; $checked = ""; break; } $this->app->Tpl->Add('ERGEBNIS',' '.$action_anzeige.' '.$nummer.''.$output); $this->app->Tpl->Add('ERGEBNIS',''); } /** * @param string $umsatzsteuer_lieferant * * @return string */ function UstErkennungLieferant($umsatzsteuer_lieferant){ $umsatzsteuer_lieferant = strtolower($umsatzsteuer_lieferant); switch ($umsatzsteuer_lieferant){ case 'eulieferung': case 'eu-lieferung': return 'eulieferung'; break; case 'import': return 'import'; break; } return 'inland'; } /** * @param string $ust_befreit * * @return int */ function UstBefreitErkennung($ust_befreit) { $ust_befreit = strtolower($ust_befreit); switch($ust_befreit) { case "inland": return 0; break; case "eu-lieferung": return 1; break; case "export": return 2; break; case "steuerfrei_inland": return 3; break; default: return (int)$ust_befreit; } } /** * @param string $typ * * @return string */ function TypErkennung($typ) { $typ = strtolower($typ); switch($typ) { case "mr": $typ="herr"; break; case "mr.": $typ="herr"; break; case "ms": $typ="frau"; break; case "ms.": $typ="frau"; break; case "mrs": $typ="frau"; break; case "mrs.": $typ="frau"; break; case "company": $typ="firma"; break; } return $typ; } /** * @param string $datetocheck * * @return string|null */ private function normalizeDate($datetocheck){ $normalizedDate = null; if(strpos($datetocheck, '.') > 0){ $datetocheck = $this->app->String->Convert($datetocheck,'%1.%2.%3','%3-%2-%1'); } $datum = DateTime::createFromFormat('Y-m-d', $datetocheck); if($datum && $datum->format('Y-m-d') === $datetocheck){ $normalizedDate = $datetocheck; } return $normalizedDate; } /* * Create a cleaned row set * Return true if ok, else see error_message */ private function create_row_set(array $tmp, $pos, array $allowed_fields, array &$result_row, string &$error_message) : bool { $result_ok = true; $result_row = array(); $error_message = ""; foreach ($tmp as $key => $value) { if ($key != 'cmd' && $key != 'checked') { if (in_array($key,$allowed_fields)) { $result_row[$key] = $value[$pos]; } else { $error_message .= "Feld nicht korrekt: ".$key.".
"; $result_ok = false; } } } return($result_ok); } }