From 7e9503e1b6447c6361d6b0cca0b447d7705e675b Mon Sep 17 00:00:00 2001
From: Xenomporio <>
Date: Wed, 1 Jun 2022 17:15:59 +0200
Subject: [PATCH] Bugfixes importvorlage
---
cronjobs/importvorlage.php | 2 +-
cronjobs/starter2.php | 2 +-
phpwf/class.application_core.php | 1180 +--
phpwf/plugins/class.user.php | 1464 ++--
www/pages/importvorlage.php | 12201 +++++++++++++++--------------
www/pages/prozessstarter.php | 3305 ++++----
6 files changed, 9086 insertions(+), 9068 deletions(-)
diff --git a/cronjobs/importvorlage.php b/cronjobs/importvorlage.php
index 30e67811..a5c22275 100644
--- a/cronjobs/importvorlage.php
+++ b/cronjobs/importvorlage.php
@@ -42,7 +42,7 @@ include_once(dirname(__DIR__) . '/www/lib/class.httpclient.php');
if(!class_exists('AES')){
$aes = '';
$phpversion = phpversion();
- if($phpversion{0} == '7' && (int)$phpversion{2} > 0) $aes = '2';
+ if($phpversion[0] == '7' && (int)$phpversion[2] > 0) $aes = '2';
if($aes == 2 && is_file(dirname(__DIR__) . '/www/lib/class.aes' . $aes . '.php')){
include_once(dirname(__DIR__) . '/www/lib/class.aes' . $aes . '.php');
}else{
diff --git a/cronjobs/starter2.php b/cronjobs/starter2.php
index c0ad254c..a992885c 100644
--- a/cronjobs/starter2.php
+++ b/cronjobs/starter2.php
@@ -21,7 +21,7 @@ if(is_file(dirname(__DIR__).'/www/lib/class.erpapi_custom.php')){
include_once dirname(__DIR__).'/www/lib/class.httpclient.php';
$aes = '';
$phpversion = PHP_VERSION;
-if(strpos($phpversion,'7') === 0 && (int)$phpversion{2} > 0)
+if(strpos($phpversion,'7') === 0 && (int)$phpversion[2] > 0)
{
$aes = '2';
}
diff --git a/phpwf/class.application_core.php b/phpwf/class.application_core.php
index 99f1924a..60aaf41d 100644
--- a/phpwf/class.application_core.php
+++ b/phpwf/class.application_core.php
@@ -1,593 +1,593 @@
-Conf = ConfigLoader::load();
- }else{
- $this->Conf = $config;
- }
-
- $registry = include dirname(__DIR__) . '/classes/bootstrap.php';
- $registry->add('LegacyApplication', $this);
- $this->Container = $registry->get('ServiceContainer');
-
- $this->getter = array(
- 'User'=>array('class'=>'User','app'=>true),
- 'Tpl'=>array('class'=>'TemplateParser','app'=>true),
- 'Conf'=>array('class'=>'Config'),
- 'YUI'=>array('class'=>'YUI','app'=>true),
- 'String'=>array('class'=>'WawiString'),
- 'FormHandler'=>array('class'=>'FormHandler','app'=>true),
- 'Table'=>array('class'=>'Table','app'=>true),
- 'WF'=>array('class'=>'phpWFAPI','app'=>true),
- 'WFM'=>array('class'=>'WFMonitor','app'=>true),
- 'Secure'=>array('class'=>'Secure','app'=>true),
- 'mail'=>array('class'=>'PHPMailer','app'=>true),
- 'help'=>array('class'=>'Help','app'=>true),
- 'stringcleaner'=>array('class'=>'StringCleaner','app'=>true),
- 'acl'=>array('class'=>'Acl','app'=>true),
- 'ModuleScriptCache'=>array('class'=>'ModuleScriptCache'),
- 'ObjAPI'=>array('class'=>'ObjectAPI','app'=>true),
- 'FormSecure'=>array('class'=>'FormSecure','app'=>true),
- 'Location'=>array('class'=>'Location','app'=>true),
- 'DatabaseUpgrade'=>array('class'=>'DatabaseUpgrade','app'=>true),
- 'PageBuilder' => ['class' => 'PageBuilder','app'=>true],
- );
- $this->gettercustom = array(
- 'erp'=>array(
- 'class'=>'erpAPI',
- 'class_custom'=>'erpAPICustom',
- 'file'=>dirname(__DIR__).'/www/lib/class.erpapi.php',
- 'file_custom'=>dirname(__DIR__).'/www/lib/class.erpapi_custom.php'
- ),
- 'remote'=>array(
- 'class'=>'Remote',
- 'class_custom'=>'RemoteCustom',
- 'file'=>dirname(__DIR__).'/www/lib/class.remote.php',
- 'file_custom'=>dirname(__DIR__).'/www/lib/class.remote_custom.php'
- ),
- 'printer'=>array(
- 'class'=>'Printer',
- 'class_custom'=>'PrinterCustom',
- 'file'=>dirname(__DIR__).'/www/lib/class.printer.php',
- 'file_custom'=>dirname(__DIR__).'/www/lib/class.printer_custom.php'
- ),
- );
- }
-
- /**
- * @return array
- */
- public function getDbs()
- {
- return ConfigLoader::loadAllDescriptions();
- }
-
- /**
- * @param int $status
- */
- public function ExitXentral($status = 0)
- {
- if(class_exists('DevTools')){
- DevTools::exitcustom($this, $status);
- }
-
- $dbConnected = !empty($this->DB) && !empty($this->DB->connection);
- $cronjobToClose = defined('CRONJOBUID') && defined('FROMSTARTER2');
- if($dbConnected && $cronjobToClose && method_exists($this->erp,'closeAndLogCronjob')) {
- $this->erp->closeAndLogCronjob(CRONJOBUID, FROMSTARTER2);
- }
-
- if($dbConnected){
- $this->DB->Close();
- }
-
- exit($status);
- }
-
- /**
- * @param string $value
- *
- * @return mixed
- */
- public function __get($value)
- {
- if(isset($this->getter[$value]))
- {
- $class = $this->getter[$value]['class'];
- if($this->getter[$value]['app']){
- $this->$value = new $class($this);
- return $this->$value;
- }
- $this->$value = new $class();
- return $this->$value;
- }
- if(isset($this->gettercustom[$value]))
- {
- if(is_file($this->gettercustom[$value]['file_custom']))
- {
- $class = $this->gettercustom[$value]['class_custom'];
- }else{
- $class = $this->gettercustom[$value]['class'];
- }
- $this->$value = new $class($this);
- return $this->$value;
- }
- if($value === 'DB')
- {
- $this->DB = new DB($this->Conf->WFdbhost,$this->Conf->WFdbname,$this->Conf->WFdbuser,$this->Conf->WFdbpass,$this,$this->Conf->WFdbport);
- return $this->DB;
- }
- }
-
- /**
- * @param string $value
- *
- * @return bool
- */
- public function __isset($value)
- {
- if (isset($this->$value)){
- return true;
- }
-
- if($value === 'DB'){
- return class_exists('DB', true);
- }
-
- if(isset($this->getter[$value])){
- $className = $this->getter[$value]['class'];
- if(class_exists($className, true)){
- return true;
- }
- }
-
- if(isset($this->gettercustom[$value])){
- $className = $this->gettercustom[$value]['class'];
- $classNameCustom = $this->gettercustom[$value]['class_custom'];
- if(class_exists($classNameCustom, true) || class_exists($className, true)){
- return true;
- }
- }
-
- return false;
- }
-
- /**
- * @param string $name
- * @param mixed $value
- */
- public function __set($name, $value)
- {
- $this->$name = $value;
- }
-
- /**
- * @param string $class
- * @param bool $ownInstance
- *
- * @return mixed|null
- */
- public function loadModule($class, $ownInstance = true) {
- $class = ucfirst($class);
- $classcustom = $class.'Custom';
- if(!$ownInstance && !empty($this->loadedModules[$classcustom])) {
- return $this->loadedModules[$classcustom];
- }
- if(!$ownInstance && !empty($this->loadedModules[$class])) {
- return $this->loadedModules[$class];
- }
- $phpname = strtolower($class);
- if(!class_exists($class) && @is_file(dirname(__DIR__) . '/www/pages/' . $phpname . '.php')){
- include_once dirname(__DIR__) . '/www/pages/' . $phpname . '.php';
- }
- if(!class_exists($classcustom) && @is_file(dirname(__DIR__) . '/www/pages/' . $phpname . '_custom.php') && class_exists($class)) {
- include_once dirname(__DIR__) . '/www/pages/' . $phpname . '_custom.php';
- }
-
- if(class_exists($classcustom)) {
- if(method_exists($classcustom, '__construct')) {
- try {
- $r = new ReflectionMethod($classcustom, '__construct');
- $params = $r->getParameters();
- } catch( Exception $e) {
- return null;
- }
- $anzargs = count($params);
- if($anzargs > 1) {
- $obj = new $classcustom($this, true);
- }
- }else{
- $obj = new $classcustom($this, true);
- }
- }
-
- if(!empty($obj)) {
- if($ownInstance) {
- return $obj;
- }
- $this->loadedModules[$classcustom] = $obj;
- return $this->loadedModules[$classcustom];
- }
- if(!class_exists($class)) {
- return null;
- }
-
- if(method_exists($class, '__construct'))
- {
- try {
- $r = new ReflectionMethod($class, '__construct');
- $params = $r->getParameters();
- } catch (Exception $e) {
- return null;
- }
- $anzargs = count($params);
- if($anzargs > 1) {
- $obj = new $class($this, true);
- }
- }else{
- $obj = new $class($this, true);
- }
- if(empty($obj)) {
- return null;
- }
- if($ownInstance) {
- return $obj;
- }
- $this->loadedModules[$class] = $obj;
- return $this->loadedModules[$class];
- }
-
- /**
- * @return array|null
- * @throws ReflectionException
- */
- function getAppList()
- {
- /** @var Appstore $obj */
- $obj = $this->loadModule('appstore');
- if(!empty($obj) && method_exists($obj,'getAppList'))
- {
- return $obj->getAppList();
- }
-
- return null;
- }
-
- public function IsWindows()
- {
- return strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
- }
-
- public function getTmpFolder()
- {
- $userdata = $this->Conf->WFuserdata;
-
- if ($this->IsWindows()) {
- $tmp = $userdata."\\tmp\\";
- } else {
- $tmp = $userdata."/tmp/";
- }
-
- $tmp = str_replace('//','/',$tmp);
-
- if(!is_dir($tmp) && !mkdir($tmp) && !is_dir($tmp)) {
- return $tmp;
- }
-
- return $tmp;
- }
-
- public function GetLandLang($isocode)
- {
- $flipped = array_flip($this->GetLaender());
- if(isset($flipped[$isocode])){
- $land = $flipped[$isocode];
- }
- else
- {
- $land = 'unkown';
- }
- return $land;
- }
- public function GetLaender()
- {
- $laender = array(
- 'Afghanistan' => 'AF',
- 'Ägypten' => 'EG',
- 'Albanien' => 'AL',
- 'Algerien' => 'DZ',
- 'Andorra' => 'AD',
- 'Angola' => 'AO',
- 'Anguilla' => 'AI',
- 'Antarktis' => 'AQ',
- 'Antigua und Barbuda' => 'AG',
- 'Äquatorial Guinea' => 'GQ',
- 'Argentinien' => 'AR',
- 'Armenien' => 'AM',
- 'Aruba' => 'AW',
- 'Aserbaidschan' => 'AZ',
- 'Äthiopien' => 'ET',
- 'Australien' => 'AU',
- 'Bahamas' => 'BS',
- 'Bahrain' => 'BH',
- 'Bangladesh' => 'BD',
- 'Barbados' => 'BB',
- 'Belgien' => 'BE',
- 'Belize' => 'BZ',
- 'Benin' => 'BJ',
- 'Bermudas' => 'BM',
- 'Bhutan' => 'BT',
- 'Birma' => 'MM',
- 'Bolivien' => 'BO',
- 'Bosnien-Herzegowina' => 'BA',
- 'Botswana' => 'BW',
- 'Bouvet Inseln' => 'BV',
- 'Brasilien' => 'BR',
- 'Britisch-Indischer Ozean' => 'IO',
- 'Brunei' => 'BN',
- 'Bulgarien' => 'BG',
- 'Burkina Faso' => 'BF',
- 'Burundi' => 'BI',
- 'Chile' => 'CL',
- 'China' => 'CN',
- 'Christmas Island' => 'CX',
- 'Cook Inseln' => 'CK',
- 'Costa Rica' => 'CR',
- 'Dänemark' => 'DK',
- 'Deutschland' => 'DE',
- 'Djibuti' => 'DJ',
- 'Dominika' => 'DM',
- 'Dominikanische Republik' => 'DO',
- 'Ecuador' => 'EC',
- 'El Salvador' => 'SV',
- 'Elfenbeinküste' => 'CI',
- 'Eritrea' => 'ER',
- 'Estland' => 'EE',
- 'Falkland Inseln' => 'FK',
- 'Färöer Inseln' => 'FO',
- 'Fidschi' => 'FJ',
- 'Finnland' => 'FI',
- 'Frankreich' => 'FR',
- 'Französisch Guyana' => 'GF',
- 'Französisch Polynesien' => 'PF',
- 'Französisches Süd-Territorium' => 'TF',
- 'Gabun' => 'GA',
- 'Gambia' => 'GM',
- 'Georgien' => 'GE',
- 'Ghana' => 'GH',
- 'Gibraltar' => 'GI',
- 'Grenada' => 'GD',
- 'Griechenland' => 'GR',
- 'Grönland' => 'GL',
- 'Großbritannien' => 'UK',
- 'Großbritannien (UK)' => 'GB',
- 'Guadeloupe' => 'GP',
- 'Guam' => 'GU',
- 'Guatemala' => 'GT',
- 'Guinea' => 'GN',
- 'Guinea Bissau' => 'GW',
- 'Guyana' => 'GY',
- 'Haiti' => 'HT',
- 'Heard und McDonald Islands' => 'HM',
- 'Honduras' => 'HN',
- 'Hong Kong' => 'HK',
- 'Indien' => 'IN',
- 'Indonesien' => 'ID',
- 'Irak' => 'IQ',
- 'Iran' => 'IR',
- 'Irland' => 'IE',
- 'Island' => 'IS',
- 'Israel' => 'IL',
- 'Italien' => 'IT',
- 'Jamaika' => 'JM',
- 'Japan' => 'JP',
- 'Jemen' => 'YE',
- 'Jordanien' => 'JO',
- 'Jugoslawien' => 'YU',
- 'Kaiman Inseln' => 'KY',
- 'Kambodscha' => 'KH',
- 'Kamerun' => 'CM',
- 'Kanada' => 'CA',
- 'Kap Verde' => 'CV',
- 'Kasachstan' => 'KZ',
- 'Kenia' => 'KE',
- 'Kirgisistan' => 'KG',
- 'Kiribati' => 'KI',
- 'Kokosinseln' => 'CC',
- 'Kolumbien' => 'CO',
- 'Komoren' => 'KM',
- 'Kongo' => 'CG',
- 'Kongo, Demokratische Republik' => 'CD',
- 'Kosovo' => 'KO',
- 'Kroatien' => 'HR',
- 'Kuba' => 'CU',
- 'Kuwait' => 'KW',
- 'Laos' => 'LA',
- 'Lesotho' => 'LS',
- 'Lettland' => 'LV',
- 'Libanon' => 'LB',
- 'Liberia' => 'LR',
- 'Libyen' => 'LY',
- 'Liechtenstein' => 'LI',
- 'Litauen' => 'LT',
- 'Luxemburg' => 'LU',
- 'Macao' => 'MO',
- 'Madagaskar' => 'MG',
- 'Malawi' => 'MW',
- 'Malaysia' => 'MY',
- 'Malediven' => 'MV',
- 'Mali' => 'ML',
- 'Malta' => 'MT',
- 'Marianen' => 'MP',
- 'Marokko' => 'MA',
- 'Marshall Inseln' => 'MH',
- 'Martinique' => 'MQ',
- 'Mauretanien' => 'MR',
- 'Mauritius' => 'MU',
- 'Mayotte' => 'YT',
- 'Mazedonien' => 'MK',
- 'Mexiko' => 'MX',
- 'Mikronesien' => 'FM',
- 'Mocambique' => 'MZ',
- 'Moldavien' => 'MD',
- 'Monaco' => 'MC',
- 'Mongolei' => 'MN',
- 'Montenegro' => 'ME',
- 'Montserrat' => 'MS',
- 'Namibia' => 'NA',
- 'Nauru' => 'NR',
- 'Nepal' => 'NP',
- 'Neukaledonien' => 'NC',
- 'Neuseeland' => 'NZ',
- 'Nicaragua' => 'NI',
- 'Niederlande' => 'NL',
- 'Niederländische Antillen' => 'AN',
- 'Niger' => 'NE',
- 'Nigeria' => 'NG',
- 'Niue' => 'NU',
- 'Nord Korea' => 'KP',
- 'Norfolk Inseln' => 'NF',
- 'Norwegen' => 'NO',
- 'Oman' => 'OM',
- 'Österreich' => 'AT',
- 'Pakistan' => 'PK',
- 'Palästina' => 'PS',
- 'Palau' => 'PW',
- 'Panama' => 'PA',
- 'Papua Neuguinea' => 'PG',
- 'Paraguay' => 'PY',
- 'Peru' => 'PE',
- 'Philippinen' => 'PH',
- 'Pitcairn' => 'PN',
- 'Polen' => 'PL',
- 'Portugal' => 'PT',
- 'Puerto Rico' => 'PR',
- 'Qatar' => 'QA',
- 'Reunion' => 'RE',
- 'Ruanda' => 'RW',
- 'Rumänien' => 'RO',
- 'Rußland' => 'RU',
- 'Saint Lucia' => 'LC',
- 'Sambia' => 'ZM',
- 'Samoa' => 'AS',
- 'Samoa' => 'WS',
- 'San Marino' => 'SM',
- 'Sao Tome' => 'ST',
- 'Saudi Arabien' => 'SA',
- 'Schweden' => 'SE',
- 'Schweiz' => 'CH',
- 'Senegal' => 'SN',
- 'Serbien' => 'RS',
- 'Seychellen' => 'SC',
- 'Sierra Leone' => 'SL',
- 'Singapur' => 'SG',
- 'Slowakei -slowakische Republik-' => 'SK',
- 'Slowenien' => 'SI',
- 'Solomon Inseln' => 'SB',
- 'Somalia' => 'SO',
- 'South Georgia, South Sandwich Isl.' => 'GS',
- 'Spanien' => 'ES',
- 'Sri Lanka' => 'LK',
- 'St. Helena' => 'SH',
- 'St. Kitts Nevis Anguilla' => 'KN',
- 'St. Pierre und Miquelon' => 'PM',
- 'St. Vincent' => 'VC',
- 'Süd Korea' => 'KR',
- 'Südafrika' => 'ZA',
- 'Sudan' => 'SD',
- 'Surinam' => 'SR',
- 'Svalbard und Jan Mayen Islands' => 'SJ',
- 'Swasiland' => 'SZ',
- 'Syrien' => 'SY',
- 'Tadschikistan' => 'TJ',
- 'Taiwan' => 'TW',
- 'Tansania' => 'TZ',
- 'Thailand' => 'TH',
- 'Timor' => 'TP',
- 'Togo' => 'TG',
- 'Tokelau' => 'TK',
- 'Tonga' => 'TO',
- 'Trinidad Tobago' => 'TT',
- 'Tschad' => 'TD',
- 'Tschechische Republik' => 'CZ',
- 'Tunesien' => 'TN',
- 'Türkei' => 'TR',
- 'Turkmenistan' => 'TM',
- 'Turks und Kaikos Inseln' => 'TC',
- 'Tuvalu' => 'TV',
- 'Uganda' => 'UG',
- 'Ukraine' => 'UA',
- 'Ungarn' => 'HU',
- 'Uruguay' => 'UY',
- 'Usbekistan' => 'UZ',
- 'Vanuatu' => 'VU',
- 'Vatikan' => 'VA',
- 'Venezuela' => 'VE',
- 'Vereinigte Arabische Emirate' => 'AE',
- 'Vereinigte Staaten von Amerika' => 'US',
- 'Vietnam' => 'VN',
- 'Virgin Island (Brit.)' => 'VG',
- 'Virgin Island (USA)' => 'VI',
- 'Wallis et Futuna' => 'WF',
- 'Weißrußland' => 'BY',
- 'Westsahara' => 'EH',
- 'Zentralafrikanische Republik' => 'CF',
- 'Zimbabwe' => 'ZW',
- 'Zypern' => 'CY'
- );
- return $laender;
- }
-}
+Conf = ConfigLoader::load();
+ }else{
+ $this->Conf = $config;
+ }
+
+ $registry = include dirname(__DIR__) . '/classes/bootstrap.php';
+ $registry->add('LegacyApplication', $this);
+ $this->Container = $registry->get('ServiceContainer');
+
+ $this->getter = array(
+ 'User'=>array('class'=>'User','app'=>true),
+ 'Tpl'=>array('class'=>'TemplateParser','app'=>true),
+ 'Conf'=>array('class'=>'Config'),
+ 'YUI'=>array('class'=>'YUI','app'=>true),
+ 'String'=>array('class'=>'WawiString'),
+ 'FormHandler'=>array('class'=>'FormHandler','app'=>true),
+ 'Table'=>array('class'=>'Table','app'=>true),
+ 'WF'=>array('class'=>'phpWFAPI','app'=>true),
+ 'WFM'=>array('class'=>'WFMonitor','app'=>true),
+ 'Secure'=>array('class'=>'Secure','app'=>true),
+ 'mail'=>array('class'=>'PHPMailer','app'=>true),
+ 'help'=>array('class'=>'Help','app'=>true),
+ 'stringcleaner'=>array('class'=>'StringCleaner','app'=>true),
+ 'acl'=>array('class'=>'Acl','app'=>true),
+ 'ModuleScriptCache'=>array('class'=>'ModuleScriptCache'),
+ 'ObjAPI'=>array('class'=>'ObjectAPI','app'=>true),
+ 'FormSecure'=>array('class'=>'FormSecure','app'=>true),
+ 'Location'=>array('class'=>'Location','app'=>true),
+ 'DatabaseUpgrade'=>array('class'=>'DatabaseUpgrade','app'=>true),
+ 'PageBuilder' => ['class' => 'PageBuilder','app'=>true],
+ );
+ $this->gettercustom = array(
+ 'erp'=>array(
+ 'class'=>'erpAPI',
+ 'class_custom'=>'erpAPICustom',
+ 'file'=>dirname(__DIR__).'/www/lib/class.erpapi.php',
+ 'file_custom'=>dirname(__DIR__).'/www/lib/class.erpapi_custom.php'
+ ),
+ 'remote'=>array(
+ 'class'=>'Remote',
+ 'class_custom'=>'RemoteCustom',
+ 'file'=>dirname(__DIR__).'/www/lib/class.remote.php',
+ 'file_custom'=>dirname(__DIR__).'/www/lib/class.remote_custom.php'
+ ),
+ 'printer'=>array(
+ 'class'=>'Printer',
+ 'class_custom'=>'PrinterCustom',
+ 'file'=>dirname(__DIR__).'/www/lib/class.printer.php',
+ 'file_custom'=>dirname(__DIR__).'/www/lib/class.printer_custom.php'
+ ),
+ );
+ }
+
+ /**
+ * @return array
+ */
+ public function getDbs()
+ {
+ return ConfigLoader::loadAllDescriptions();
+ }
+
+ /**
+ * @param int $status
+ */
+ public function ExitXentral($status = 0)
+ {
+ if(class_exists('DevTools')){
+ DevTools::exitcustom($this, $status);
+ }
+
+ $dbConnected = !empty($this->DB) && !empty($this->DB->connection);
+ $cronjobToClose = defined('CRONJOBUID') && defined('FROMSTARTER2');
+ if($dbConnected && $cronjobToClose && method_exists($this->erp,'closeAndLogCronjob')) {
+ $this->erp->closeAndLogCronjob(CRONJOBUID, FROMSTARTER2);
+ }
+
+ if($dbConnected){
+ $this->DB->Close();
+ }
+
+ exit($status);
+ }
+
+ /**
+ * @param string $value
+ *
+ * @return mixed
+ */
+ public function __get($value)
+ {
+ if(isset($this->getter[$value]))
+ {
+ $class = $this->getter[$value]['class'];
+ if($this->getter[$value]['app']){
+ $this->$value = new $class($this);
+ return $this->$value;
+ }
+ $this->$value = new $class();
+ return $this->$value;
+ }
+ if(isset($this->gettercustom[$value]))
+ {
+ if(is_file($this->gettercustom[$value]['file_custom']))
+ {
+ $class = $this->gettercustom[$value]['class_custom'];
+ }else{
+ $class = $this->gettercustom[$value]['class'];
+ }
+ $this->$value = new $class($this);
+ return $this->$value;
+ }
+ if($value === 'DB')
+ {
+ $this->DB = new DB($this->Conf->WFdbhost,$this->Conf->WFdbname,$this->Conf->WFdbuser,$this->Conf->WFdbpass,$this,$this->Conf->WFdbport);
+ return $this->DB;
+ }
+ }
+
+ /**
+ * @param string $value
+ *
+ * @return bool
+ */
+ public function __isset($value)
+ {
+ if (isset($this->$value)){
+ return true;
+ }
+
+ if($value === 'DB'){
+ return class_exists('DB', true);
+ }
+
+ if(isset($this->getter[$value])){
+ $className = $this->getter[$value]['class'];
+ if(class_exists($className, true)){
+ return true;
+ }
+ }
+
+ if(isset($this->gettercustom[$value])){
+ $className = $this->gettercustom[$value]['class'];
+ $classNameCustom = $this->gettercustom[$value]['class_custom'];
+ if(class_exists($classNameCustom, true) || class_exists($className, true)){
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * @param string $name
+ * @param mixed $value
+ */
+ public function __set($name, $value)
+ {
+ $this->$name = $value;
+ }
+
+ /**
+ * @param string $class
+ * @param bool $ownInstance
+ *
+ * @return mixed|null
+ */
+ public function loadModule($class, $ownInstance = true) {
+ $class = ucfirst($class);
+ $classcustom = $class.'Custom';
+ if(!$ownInstance && !empty($this->loadedModules[$classcustom])) {
+ return $this->loadedModules[$classcustom];
+ }
+ if(!$ownInstance && !empty($this->loadedModules[$class])) {
+ return $this->loadedModules[$class];
+ }
+ $phpname = strtolower($class);
+ if(!class_exists($class) && @is_file(dirname(__DIR__) . '/www/pages/' . $phpname . '.php')){
+ include_once dirname(__DIR__) . '/www/pages/' . $phpname . '.php';
+ }
+ if(!class_exists($classcustom) && @is_file(dirname(__DIR__) . '/www/pages/' . $phpname . '_custom.php') && class_exists($class)) {
+ include_once dirname(__DIR__) . '/www/pages/' . $phpname . '_custom.php';
+ }
+
+ if(class_exists($classcustom)) {
+ if(method_exists($classcustom, '__construct')) {
+ try {
+ $r = new ReflectionMethod($classcustom, '__construct');
+ $params = $r->getParameters();
+ } catch( Exception $e) {
+ return null;
+ }
+ $anzargs = count($params);
+ if($anzargs > 1) {
+ $obj = new $classcustom($this, true);
+ }
+ }else{
+ $obj = new $classcustom($this, true);
+ }
+ }
+
+ if(!empty($obj)) {
+ if($ownInstance) {
+ return $obj;
+ }
+ $this->loadedModules[$classcustom] = $obj;
+ return $this->loadedModules[$classcustom];
+ }
+ if(!class_exists($class)) {
+ return null;
+ }
+
+ if(method_exists($class, '__construct'))
+ {
+ try {
+ $r = new ReflectionMethod($class, '__construct');
+ $params = $r->getParameters();
+ } catch (Exception $e) {
+ return null;
+ }
+ $anzargs = count($params);
+ if($anzargs > 1) {
+ $obj = new $class($this, true);
+ }
+ }else{
+ $obj = new $class($this, true);
+ }
+ if(empty($obj)) {
+ return null;
+ }
+ if($ownInstance) {
+ return $obj;
+ }
+ $this->loadedModules[$class] = $obj;
+ return $this->loadedModules[$class];
+ }
+
+ /**
+ * @return array|null
+ * @throws ReflectionException
+ */
+ function getAppList()
+ {
+ /** @var Appstore $obj */
+ $obj = $this->loadModule('appstore');
+ if(!empty($obj) && method_exists($obj,'getAppList'))
+ {
+ return $obj->getAppList();
+ }
+
+ return null;
+ }
+
+ public function IsWindows()
+ {
+ return strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
+ }
+
+ public function getTmpFolder()
+ {
+ $userdata = $this->Conf->WFuserdata;
+
+ if ($this->IsWindows()) {
+ $tmp = $userdata."\\tmp\\";
+ } else {
+ $tmp = $userdata."/tmp/";
+ }
+
+ $tmp = str_replace('//','/',$tmp);
+
+ if(!is_dir($tmp) && !mkdir($tmp) && !is_dir($tmp)) {
+ return $tmp;
+ }
+
+ return $tmp;
+ }
+
+ public function GetLandLang($isocode)
+ {
+ $flipped = array_flip($this->GetLaender());
+ if(isset($flipped[$isocode])){
+ $land = $flipped[$isocode];
+ }
+ else
+ {
+ $land = 'unkown';
+ }
+ return $land;
+ }
+ public function GetLaender()
+ {
+ $laender = array(
+ 'Afghanistan' => 'AF',
+ 'Ägypten' => 'EG',
+ 'Albanien' => 'AL',
+ 'Algerien' => 'DZ',
+ 'Andorra' => 'AD',
+ 'Angola' => 'AO',
+ 'Anguilla' => 'AI',
+ 'Antarktis' => 'AQ',
+ 'Antigua und Barbuda' => 'AG',
+ 'Äquatorial Guinea' => 'GQ',
+ 'Argentinien' => 'AR',
+ 'Armenien' => 'AM',
+ 'Aruba' => 'AW',
+ 'Aserbaidschan' => 'AZ',
+ 'Äthiopien' => 'ET',
+ 'Australien' => 'AU',
+ 'Bahamas' => 'BS',
+ 'Bahrain' => 'BH',
+ 'Bangladesh' => 'BD',
+ 'Barbados' => 'BB',
+ 'Belgien' => 'BE',
+ 'Belize' => 'BZ',
+ 'Benin' => 'BJ',
+ 'Bermudas' => 'BM',
+ 'Bhutan' => 'BT',
+ 'Birma' => 'MM',
+ 'Bolivien' => 'BO',
+ 'Bosnien-Herzegowina' => 'BA',
+ 'Botswana' => 'BW',
+ 'Bouvet Inseln' => 'BV',
+ 'Brasilien' => 'BR',
+ 'Britisch-Indischer Ozean' => 'IO',
+ 'Brunei' => 'BN',
+ 'Bulgarien' => 'BG',
+ 'Burkina Faso' => 'BF',
+ 'Burundi' => 'BI',
+ 'Chile' => 'CL',
+ 'China' => 'CN',
+ 'Christmas Island' => 'CX',
+ 'Cook Inseln' => 'CK',
+ 'Costa Rica' => 'CR',
+ 'Dänemark' => 'DK',
+ 'Deutschland' => 'DE',
+ 'Djibuti' => 'DJ',
+ 'Dominika' => 'DM',
+ 'Dominikanische Republik' => 'DO',
+ 'Ecuador' => 'EC',
+ 'El Salvador' => 'SV',
+ 'Elfenbeinküste' => 'CI',
+ 'Eritrea' => 'ER',
+ 'Estland' => 'EE',
+ 'Falkland Inseln' => 'FK',
+ 'Färöer Inseln' => 'FO',
+ 'Fidschi' => 'FJ',
+ 'Finnland' => 'FI',
+ 'Frankreich' => 'FR',
+ 'Französisch Guyana' => 'GF',
+ 'Französisch Polynesien' => 'PF',
+ 'Französisches Süd-Territorium' => 'TF',
+ 'Gabun' => 'GA',
+ 'Gambia' => 'GM',
+ 'Georgien' => 'GE',
+ 'Ghana' => 'GH',
+ 'Gibraltar' => 'GI',
+ 'Grenada' => 'GD',
+ 'Griechenland' => 'GR',
+ 'Grönland' => 'GL',
+ 'Großbritannien' => 'UK',
+ 'Großbritannien (UK)' => 'GB',
+ 'Guadeloupe' => 'GP',
+ 'Guam' => 'GU',
+ 'Guatemala' => 'GT',
+ 'Guinea' => 'GN',
+ 'Guinea Bissau' => 'GW',
+ 'Guyana' => 'GY',
+ 'Haiti' => 'HT',
+ 'Heard und McDonald Islands' => 'HM',
+ 'Honduras' => 'HN',
+ 'Hong Kong' => 'HK',
+ 'Indien' => 'IN',
+ 'Indonesien' => 'ID',
+ 'Irak' => 'IQ',
+ 'Iran' => 'IR',
+ 'Irland' => 'IE',
+ 'Island' => 'IS',
+ 'Israel' => 'IL',
+ 'Italien' => 'IT',
+ 'Jamaika' => 'JM',
+ 'Japan' => 'JP',
+ 'Jemen' => 'YE',
+ 'Jordanien' => 'JO',
+ 'Jugoslawien' => 'YU',
+ 'Kaiman Inseln' => 'KY',
+ 'Kambodscha' => 'KH',
+ 'Kamerun' => 'CM',
+ 'Kanada' => 'CA',
+ 'Kap Verde' => 'CV',
+ 'Kasachstan' => 'KZ',
+ 'Kenia' => 'KE',
+ 'Kirgisistan' => 'KG',
+ 'Kiribati' => 'KI',
+ 'Kokosinseln' => 'CC',
+ 'Kolumbien' => 'CO',
+ 'Komoren' => 'KM',
+ 'Kongo' => 'CG',
+ 'Kongo, Demokratische Republik' => 'CD',
+ 'Kosovo' => 'KO',
+ 'Kroatien' => 'HR',
+ 'Kuba' => 'CU',
+ 'Kuwait' => 'KW',
+ 'Laos' => 'LA',
+ 'Lesotho' => 'LS',
+ 'Lettland' => 'LV',
+ 'Libanon' => 'LB',
+ 'Liberia' => 'LR',
+ 'Libyen' => 'LY',
+ 'Liechtenstein' => 'LI',
+ 'Litauen' => 'LT',
+ 'Luxemburg' => 'LU',
+ 'Macao' => 'MO',
+ 'Madagaskar' => 'MG',
+ 'Malawi' => 'MW',
+ 'Malaysia' => 'MY',
+ 'Malediven' => 'MV',
+ 'Mali' => 'ML',
+ 'Malta' => 'MT',
+ 'Marianen' => 'MP',
+ 'Marokko' => 'MA',
+ 'Marshall Inseln' => 'MH',
+ 'Martinique' => 'MQ',
+ 'Mauretanien' => 'MR',
+ 'Mauritius' => 'MU',
+ 'Mayotte' => 'YT',
+ 'Mazedonien' => 'MK',
+ 'Mexiko' => 'MX',
+ 'Mikronesien' => 'FM',
+ 'Mocambique' => 'MZ',
+ 'Moldavien' => 'MD',
+ 'Monaco' => 'MC',
+ 'Mongolei' => 'MN',
+ 'Montenegro' => 'ME',
+ 'Montserrat' => 'MS',
+ 'Namibia' => 'NA',
+ 'Nauru' => 'NR',
+ 'Nepal' => 'NP',
+ 'Neukaledonien' => 'NC',
+ 'Neuseeland' => 'NZ',
+ 'Nicaragua' => 'NI',
+ 'Niederlande' => 'NL',
+ 'Niederländische Antillen' => 'AN',
+ 'Niger' => 'NE',
+ 'Nigeria' => 'NG',
+ 'Niue' => 'NU',
+ 'Nord Korea' => 'KP',
+ 'Norfolk Inseln' => 'NF',
+ 'Norwegen' => 'NO',
+ 'Oman' => 'OM',
+ 'Österreich' => 'AT',
+ 'Pakistan' => 'PK',
+ 'Palästina' => 'PS',
+ 'Palau' => 'PW',
+ 'Panama' => 'PA',
+ 'Papua Neuguinea' => 'PG',
+ 'Paraguay' => 'PY',
+ 'Peru' => 'PE',
+ 'Philippinen' => 'PH',
+ 'Pitcairn' => 'PN',
+ 'Polen' => 'PL',
+ 'Portugal' => 'PT',
+ 'Puerto Rico' => 'PR',
+ 'Qatar' => 'QA',
+ 'Reunion' => 'RE',
+ 'Ruanda' => 'RW',
+ 'Rumänien' => 'RO',
+ 'Rußland' => 'RU',
+ 'Saint Lucia' => 'LC',
+ 'Sambia' => 'ZM',
+ 'Samoa' => 'AS',
+ 'Samoa' => 'WS',
+ 'San Marino' => 'SM',
+ 'Sao Tome' => 'ST',
+ 'Saudi Arabien' => 'SA',
+ 'Schweden' => 'SE',
+ 'Schweiz' => 'CH',
+ 'Senegal' => 'SN',
+ 'Serbien' => 'RS',
+ 'Seychellen' => 'SC',
+ 'Sierra Leone' => 'SL',
+ 'Singapur' => 'SG',
+ 'Slowakei -slowakische Republik-' => 'SK',
+ 'Slowenien' => 'SI',
+ 'Solomon Inseln' => 'SB',
+ 'Somalia' => 'SO',
+ 'South Georgia, South Sandwich Isl.' => 'GS',
+ 'Spanien' => 'ES',
+ 'Sri Lanka' => 'LK',
+ 'St. Helena' => 'SH',
+ 'St. Kitts Nevis Anguilla' => 'KN',
+ 'St. Pierre und Miquelon' => 'PM',
+ 'St. Vincent' => 'VC',
+ 'Süd Korea' => 'KR',
+ 'Südafrika' => 'ZA',
+ 'Sudan' => 'SD',
+ 'Surinam' => 'SR',
+ 'Svalbard und Jan Mayen Islands' => 'SJ',
+ 'Swasiland' => 'SZ',
+ 'Syrien' => 'SY',
+ 'Tadschikistan' => 'TJ',
+ 'Taiwan' => 'TW',
+ 'Tansania' => 'TZ',
+ 'Thailand' => 'TH',
+ 'Timor' => 'TP',
+ 'Togo' => 'TG',
+ 'Tokelau' => 'TK',
+ 'Tonga' => 'TO',
+ 'Trinidad Tobago' => 'TT',
+ 'Tschad' => 'TD',
+ 'Tschechische Republik' => 'CZ',
+ 'Tunesien' => 'TN',
+ 'Türkei' => 'TR',
+ 'Turkmenistan' => 'TM',
+ 'Turks und Kaikos Inseln' => 'TC',
+ 'Tuvalu' => 'TV',
+ 'Uganda' => 'UG',
+ 'Ukraine' => 'UA',
+ 'Ungarn' => 'HU',
+ 'Uruguay' => 'UY',
+ 'Usbekistan' => 'UZ',
+ 'Vanuatu' => 'VU',
+ 'Vatikan' => 'VA',
+ 'Venezuela' => 'VE',
+ 'Vereinigte Arabische Emirate' => 'AE',
+ 'Vereinigte Staaten von Amerika' => 'US',
+ 'Vietnam' => 'VN',
+ 'Virgin Island (Brit.)' => 'VG',
+ 'Virgin Island (USA)' => 'VI',
+ 'Wallis et Futuna' => 'WF',
+ 'Weißrußland' => 'BY',
+ 'Westsahara' => 'EH',
+ 'Zentralafrikanische Republik' => 'CF',
+ 'Zimbabwe' => 'ZW',
+ 'Zypern' => 'CY'
+ );
+ return $laender;
+ }
+}
diff --git a/phpwf/plugins/class.user.php b/phpwf/plugins/class.user.php
index 58c6d814..29a4954e 100644
--- a/phpwf/plugins/class.user.php
+++ b/phpwf/plugins/class.user.php
@@ -1,735 +1,735 @@
-app = $app;
- }
-
- /**
- * @return array
- */
- public function getUserProjects()
- {
- return $this->getUserProjectsByParameter($this->GetAdresse(), $this->GetType());
- }
-
- /**
- * @return array
- */
- public function getPublicProjects()
- {
- $cacheKey = $this->getCacheKey();
- if(!empty($this->cache[$cacheKey]['public_projects'])) {
- return $this->cache[$cacheKey]['public_projects'];
- }
- $this->loadProjectsInCacheProperty();
-
- return $this->cache[$cacheKey]['public_projects'];
- }
-
- /**
- * @return array
- */
- public function getAllProjects()
- {
- $cacheKey = $this->getCacheKey();
- if(!empty($this->cache[$cacheKey]['all_projects'])) {
- return $this->cache[$cacheKey]['all_projects'];
- }
- $this->loadProjectsInCacheProperty();
-
- return $this->cache[$cacheKey]['all_projects'];
- }
-
- /**
- * @return array
- */
- public function createCache()
- {
- $allProjects = $this->getAllProjects();
- $file = $this->app->getTmpFolder().'cache_useronline';
- $arr = $this->app->DB->SelectArr(
- "SELECT uo.user_id, uo.sessionid, u.type, u.adresse
- FROM `useronline` AS `uo`
- INNER JOIN `user` AS `u` ON uo.user_id = u.id AND u.activ = 1
- WHERE uo.login = 1"
- );
- $ret = [];
- if(is_file($file)) {
- $ret = file_get_contents($file);
- if(empty(!$ret)) {
- $ret = json_decode($ret, true);
- }
- if(empty($ret)) {
- $ret = [];
- }
- }
- $cacheKey = $this->getCacheKey();
- $ret[$cacheKey] = [];
- if(!empty($arr)) {
- foreach($arr as $row) {
- if($row['type'] === 'admin') {
- $projects = $allProjects;
- } else {
- $projects = $this->getUserProjectsByParameter($row['adresse'], $row['type']);
- }
- $sessionId = $row['sessionid'];
- $sha1SessionId = sha1($sessionId);
- $ret[$cacheKey][$sha1SessionId] = ['type'=>$row['type'],'project'=>$projects];
- }
- }
- file_put_contents($file, json_encode($ret));
-
- return $ret[$cacheKey];
- }
-
- /**
- * @param bool $createIfEmpty
- *
- * @return array|null
- */
- public function getUserByCache($createIfEmpty = true)
- {
- $file = $this->app->getTmpFolder().'cache_useronline';
- if(isset($_COOKIE['CH42SESSION']) && $_COOKIE['CH42SESSION']!='') {
- $tmp = $_COOKIE['CH42SESSION'];
- } else {
- $tmp = session_id();
- }
- $sha1Tmp = sha1($tmp);
- $content = '';
- if(is_file($file)){
- $content = file_get_contents($file);
- }
- $cacheKey = $this->getCacheKey();
- if(!empty($content)) {
- $content = json_decode($content, true);
- if(empty($content[$cacheKey])) {
- $content[$cacheKey] = $this->createCache();
- }
- $content = $content[$cacheKey];
- if(!empty($content[$sha1Tmp])) {
- return $content[$sha1Tmp];
- }
- } else {
- if(!$createIfEmpty) {
- return null;
- }
- }
- if(!empty($tmp)) {
- $content = $this->createCache();
- if(!empty($content[$sha1Tmp])) {
- return $content[$sha1Tmp];
- }
- }
-
- return null;
- }
-
- /**
- * @param int $projektId
- *
- * @return bool
- */
- public function projectOk($projektId): ?bool
- {
- $user = $this->getUserByCache(false);
- if(empty($user)) {
- return null;
- }
- if($projektId <= 0) {
- return true;
- }
- if($user['type'] === 'admin') {
- return true;
- }
- if(empty($user['project'])) {
- return false;
- }
- if(in_array($projektId, $user['project'])) {
- return true;
- }
- //@todo Projekt aus Cache holen
- return false;
- }
-
- /**
- * @return int
- */
- public function GetID(): int
- {
- if(isset($_COOKIE['CH42SESSION']) && $_COOKIE['CH42SESSION']!='') {
- $tmp = $_COOKIE['CH42SESSION'];
- } else {
- $tmp = session_id();
- }
- $cacheKey = $this->getCacheKey();
- if(empty($this->cache[$cacheKey])
- || !isset($this->cache[$cacheKey]['time']) || !isset($this->cache[$cacheKey]['tmp'])
- || $this->cache[$cacheKey]['time'] + 10 < microtime(true) || $this->cache[$cacheKey]['tmp'] != $tmp) {
- $this->cache = null;
- $user_id = (int)$this->app->DB->Select(
- sprintf(
- "SELECT `user_id`
- FROM `useronline`
- WHERE `sessionid` != '' AND `sessionid` = '%s' AND `login` = 1
- LIMIT 1",
- $this->app->DB->real_escape_string($tmp)
- )
- );
- if($user_id > 0) {
- $this->cache[$cacheKey]['user_id'] = $user_id;
- $this->cache[$cacheKey]['tmp'] = $tmp;
- $this->cache[$cacheKey]['time'] = microtime(true);
- }
-
- return $user_id;
- }
-
- return (int)$this->cache[$cacheKey]['user_id'];
- }
-
- /**
- * @return string
- */
- public function GetType(): string
- {
- $userId = (int)$this->GetID();
- if($userId <= 0) {
- return (string)$this->app->Conf->WFconf['defaultgroup'];
- }
- $cacheKey = $this->getCacheKey();
- if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['type'])) {
- return (string)$this->cache[$cacheKey]['type'];
- }
- $this->loadUserRowInCacheProperty($userId);
-
- return (string)$this->cache[$cacheKey]['type'];
- }
-
- /**
- * @param null|string|array $settings
- */
- function SettingsToUserKonfiguration($settings = null)
- {
- $id = (int)$this->GetID();
- if(!$id) {
- return;
- }
- if($settings === null) {
- $settings = $this->app->DB->Select(sprintf('SELECT `settings` FROM `user` WHERE `id` = %d LIMIT 1', $id));
- $cacheKey = $this->getCacheKey();
- $this->cache[$cacheKey]['settings'] = $settings;
- }
- if(empty($settings)) {
- return;
- }
-
- if($settings != '') {
- $settings = @unserialize($settings);
- }
- if(empty($settings) || !is_array($settings)) {
- return;
- }
-
- foreach($settings as $k => $v) {
- $check = $this->app->DB->Select("SELECT `id` FROM `userkonfiguration` WHERE `name` = '".$this->app->DB->real_escape_string($k)."' AND `user` = '$id' LIMIT 1");
- if($check) {
- $this->app->DB->Update("UPDATE `userkonfiguration` set `value` = '".$this->app->DB->real_escape_string($v)."' WHERE `id` = '$check' LIMIT 1");
- }else{
- $this->app->DB->Insert("INSERT INTO `userkonfiguration` (`user`,`name`,`value`) VALUES ('$id','".$this->app->DB->real_escape_string($k)."','".$this->app->DB->real_escape_string($v)."')");
- }
- }
- if(!$this->app->DB->error()) {
- $this->app->DB->Update(sprintf("UPDATE `user` SET `settings` = '' WHERE `id` = %d LIMIT 1", $id));
- $cacheKey = $this->getCacheKey();
- $this->cache[$cacheKey]['settings'] = '';
- }
- }
-
- /**
- * @var int|null $userId
- *
- * @return string|null
- */
- public function GetSettings($userId = null)
- {
- $cacheKey = $this->getCacheKey();
- if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['settings'])) {
- return $this->cache[$cacheKey]['settings'];
- }
- $this->loadUserRowInCacheProperty($userId);
-
- return $this->cache[$cacheKey]['settings'];
- }
-
- /**
- * @param string|array $index
- *
- * @return array|mixed|string|null
- */
- public function GetParameter($index)
- {
- $userId = (int)$this->GetID();
- $settings = $this->GetSettings($userId);
- if(!empty($settings)) {
- $this->SettingsToUserKonfiguration($settings);
- }
-
- if((is_array($index) && count($index) === 0) || (!is_array($index) && (string)$index === '')) {
- return null;
- }
-
- if(is_array($index)) {
- $index = array_map('trim', $index);
- $indexNames = array_map([$this->app->DB, 'real_escape_string'], $index);
- $sql = sprintf(
- "SELECT `name`, MAX(`value`) AS `value`
- FROM `userkonfiguration`
- WHERE `user` = %d AND `name` IN ('%s')
- GROUP BY `name`",
- $userId, implode("', '", $indexNames)
- );
- $arr = $this->app->DB->SelectPairs($sql);
- $ret = null;
- foreach($index as $ind) {
- if(isset($arr[$ind])) {
- $ret[] = [ 'name'=>$ind, 'value'=> $arr[$ind] ];
- }
- else {
- $ret[] = [ 'name'=>$ind, 'value'=> '' ];
- }
- }
-
- return $ret;
- }
-
- return $this->app->DB->Select(
- sprintf(
- "SELECT `value`
- FROM `userkonfiguration`
- WHERE `name` = '%s' AND `user` = %d
- LIMIT 1",
- $this->app->DB->real_escape_string($index), $userId
- )
- );
- }
-
- // value koennen beliebige Datentypen aus php sein (serialisiert)
-
- /**
- * @param string $index
- * @param mixed $value
- */
- public function SetParameter($index, $value)
- {
- if((string)$index === '' || $value === null) {
- return;
- }
- $id = (int)$this->GetID();
-
- $settings = $this->GetSettings($id);
- if(!empty($settings)) {
- $this->SettingsToUserKonfiguration($settings);
- }
-
- $check = $this->app->DB->SelectRow(
- sprintf(
- "SELECT `id`, `value`
- FROM `userkonfiguration` WHERE `name` = '%s' AND `user` = %d
- LIMIT 1",
- $this->app->DB->real_escape_string($index), $id
- )
- );
- if(empty($check)) {
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO `userkonfiguration` (`user`, `name`, `value`) VALUES (%d, '%s', '%s')",
- $id, $this->app->DB->real_escape_string($index), $this->app->DB->real_escape_string($value)
- )
- );
- $this->cache = null;
- return;
- }
-
- if((string)$value === (string)$check['value']) {
- return;
- }
- $this->app->DB->Update(
- sprintf(
- "UPDATE `userkonfiguration`
- SET `value` = '%s'
- WHERE `id` = %d
- LIMIT 1",
- $this->app->DB->real_escape_string($value), $check['id']
- )
- );
- $this->cache = null;
- }
-
- /**
- * @param string $index
- */
- public function deleteParameter($index)
- {
- if(empty($index)) {
- return;
- }
- $id = $this->GetID();
- $this->app->DB->Delete(
- sprintf(
- 'DELETE FROM `userkonfiguration` WHERE `user` = %d AND `name` = \'%s\'',
- $id, $this->app->DB->real_escape_string($index)
- )
- );
- }
-
- /**
- * @param string $prefix
- */
- public function deleteParameterPrefix($prefix)
- {
- if(empty($prefix)) {
- return;
- }
- $id = $this->GetID();
- $this->app->DB->Delete(
- sprintf(
- 'DELETE FROM `userkonfiguration` WHERE `user` = %d AND `name` LIKE \'%s%%\'',
- $id, $this->app->DB->real_escape_string($prefix)
- )
- );
- }
-
- /**
- * @return string|null
- */
- public function GetUsername()
- {
- $cacheKey = $this->getCacheKey();
- if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['username'])) {
- return $this->cache[$cacheKey]['username'];
- }
- $this->loadUserRowInCacheProperty();
-
- return $this->cache[$cacheKey]['username'];
- }
-
- /**
- * @return string|null
- */
- public function GetDescription()
- {
- return $this->GetName();
- }
-
- /**
- * @return string|null
- */
- public function GetMail()
- {
- $cacheKey = $this->getCacheKey();
- if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['email'])) {
- return $this->cache[$cacheKey]['email'];
- }
- $this->loadAddressRowInCacheProperty();
-
- return $this->cache[$cacheKey]['email'];
- }
-
- /**
- * @return string|null
- */
- public function GetName()
- {
- $cacheKey = $this->getCacheKey();
- if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['name'])) {
- return $this->cache[$cacheKey]['name'];
- }
- $this->loadAddressRowInCacheProperty();
-
- return $this->cache[$cacheKey]['name'];
- }
-
- /**
- * @return array
- */
- public function GetSprachen()
- {
- $userId = (int)$this->GetId();
- $cacheKey = $this->getCacheKey();
- if(empty($this->cache[$cacheKey]) || !isset($this->cache[$cacheKey]['sprachebevorzugen'])) {
- $this->loadUserRowInCacheProperty($userId);
- }
- $defaultLanguages = ['german','english'];
- $languages = $this->cache[$cacheKey]['sprachebevorzugen'];
-
- if(empty($languages)) {
- return $defaultLanguages;
- }
- $ret = [];
- $languagesArray = explode(';',str_replace(',',';',$languages));
- foreach($languagesArray as $language) {
- $language = trim($language);
- if($language != '') {
- $ret[] = $language;
- }
- }
- if(empty($ret)) {
- return $ret;
- }
-
- return $defaultLanguages;
- }
-
- /**
- * @return string
- */
- public function GetSprache()
- {
- $sprachen = $this->GetSprachen();
-
- return reset($sprachen);
- }
-
- /**
- * @return int|null
- */
- public function GetAdresse()
- {
- $cacheKey = $this->getCacheKey();
- if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['adresse'])) {
- return $this->cache[$cacheKey]['adresse'];
- }
- $this->loadUserRowInCacheProperty();
-
- return $this->cache[$cacheKey]['adresse'];
- }
-
- /**
- * @return bool
- */
- function GetProjektleiter()
- {
- $result = $this->app->DB->SelectRow(
- "SELECT `parameter`
- FROM `adresse_rolle`
- WHERE `subjekt` = 'Projektleiter' AND (`bis` = '0000-00-00' OR `bis` <= CURDATE())
- AND `adresse` = '".$this->app->User->GetAdresse()."'
- LIMIT 1"
- );
-
- return !empty($result);
- }
-
- /**
- * @return int
- */
- function DefaultProjekt()
- {
- $adresse = $this->GetAdresse();
- $cacheKey = $this->getCacheKey();
- if(empty($this->cache[$cacheKey]) || !isset($this->cache[$cacheKey]['projekt'])) {
- $this->loadAddressRowInCacheProperty($adresse);
- $projekt = $this->cache[$cacheKey]['projekt'];
- }
- else {
- $projekt = $this->cache[$cacheKey]['projekt'];
- }
- if($projekt <=0){
- $projekt = $this->app->DB->Select(
- "SELECT `standardprojekt` FROM `firma` WHERE `id`='" . $this->app->User->GetFirma() . "' LIMIT 1"
- );
- }
-
- return $projekt;
- }
-
- /**
- * @return string|null
- */
- function GetEmail()
- {
- $cacheKey = $this->getCacheKey();
- if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['email'])) {
- return $this->cache[$cacheKey]['email'];
- }
- $this->loadAddressRowInCacheProperty();
-
- return $this->cache[$cacheKey]['email'];
- }
-
- /**
- * @return int
- */
- public function GetFirma(): int
- {
- return 1;
- }
-
- /**
- * @return string
- */
- function GetFirmaName()
- {
- $cacheKey = $this->getCacheKey();
- if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['firmaname'])) {
- return $this->cache[$cacheKey]['firmaname'];
- }
- $name = $this->app->DB->Select(sprintf('SELECT `name` FROM `firma` WHERE `id` = %d', $this->GetFirma()));
- $this->cache[$cacheKey]['firmaname'] = $name;
-
- return $name;
- }
-
- /**
- * @param string $field
- *
- * @return mixed
- */
- public function GetField($field)
- {
- $value = $this->app->DB->Select(
- sprintf(
- 'SELECT `%s` FROM `user` WHERE id = %d ',
- $field, $this->GetID()
- )
- );
- if(in_array($value, ['settings', 'type', 'username', 'adresse', 'sprachebevorzugen'])) {
- $cacheKey = $this->getCacheKey();
- $this->cache[$cacheKey][$field] = $value;
- }
-
- return $value;
- }
-
- /**
- * @param int|null $userId
- */
- protected function loadUserRowInCacheProperty(?int $userId = null): void
- {
- if($userId === null){
- $userId = (int)$this->GetID();
- }
- $cacheKey = $this->getCacheKey();
- $userData = (array)$this->app->DB->SelectRow(
- sprintf(
- 'SELECT `settings`, `type`, `username`, `adresse`, `sprachebevorzugen` FROM `user` WHERE `id` = %d LIMIT 1',
- $userId
- )
- );
- if(!isset($this->cache[$cacheKey])) {
- $this->cache[$cacheKey] = $userData;
- }
- else{
- $this->cache[$cacheKey] = array_merge($this->cache[$cacheKey], $userData);
- }
- }
-
- /**
- * @param int|null $addressId
- */
- protected function loadAddressRowInCacheProperty(?int $addressId = null): void
- {
- if($addressId === null){
- $addressId = (int)$this->GetAdresse();
- }
- $cacheKey = $this->getCacheKey();
- $addressData = (array)$this->app->DB->SelectRow(
- sprintf('SELECT `name`, `email`, `projekt` FROM `adresse` WHERE `id` = %d LIMIT 1', $addressId)
- );
- if(!isset($this->cache[$cacheKey])) {
- $this->cache[$cacheKey] = $addressData;
- }
- else{
- $this->cache[$cacheKey] = array_merge($this->cache[$cacheKey], $addressData);
- }
- }
-
- /**
- * @return string
- */
- protected function getCacheKey(): string
- {
- return (string)$this->app->Conf->WFdbname;
- }
-
-
- protected function loadProjectsInCacheProperty(): void
- {
- $cacheKey = $this->getCacheKey();
- $projects = $this->app->DB->SelectPairs('SELECT `id`, `oeffentlich` FROM `projekt` WHERE `geloescht` <> 1');
- $this->cache[$cacheKey]['all_projects'] = array_keys($projects);
- $this->cache[$cacheKey]['public_projects'] = [];
- foreach($projects as $projectId => $public) {
- if($public) {
- $this->cache[$cacheKey]['public_projects'][] = $projectId;
- }
- }
- }
-
-
- /**
- * @param int $addressId
- * @param string $type
- *
- * @return array
- */
- protected function getUserProjectsByParameter($addressId, $type)
- {
- if($type==='admin' ||
- $this->app->DB->Select(
- "SELECT `id`
- FROM `adresse_rolle`
- WHERE (`bis` IS NULL OR `bis` = '0000-00-00' OR `bis` <= CURDATE()) AND `adresse` = '".$addressId."'
- AND (`parameter` = '' OR `parameter` = '0')"
- )
- ) {
- return $this->getAllProjects();
- }
- $public = $this->getPublicProjects();
- $roles = $this->app->DB->SelectFirstCols(
- sprintf(
- "SELECT DISTINCT `parameter`
- FROM `adresse_rolle`
- WHERE (`bis` IS NULL OR `bis` = '0000-00-00' OR `bis` <= CURDATE()) AND `adresse` = %d
- AND `parameter` >= 0 AND `objekt` LIKE 'Projekt'",
- $addressId
- )
- );
- $projects = $this->app->DB->SelectFirstCols(
- sprintf(
- "SELECT DISTINCT `projekt`
- FROM `adresse_rolle`
- WHERE (`bis` IS NULL OR `bis` = '0000-00-00' OR bis <= CURDATE()) AND `adresse` = %d AND `projekt` > 0",
- $addressId
- )
- );
-
- return array_unique(array_merge($public, $roles, $projects));
- }
-}
+app = $app;
+ }
+
+ /**
+ * @return array
+ */
+ public function getUserProjects()
+ {
+ return $this->getUserProjectsByParameter($this->GetAdresse(), $this->GetType());
+ }
+
+ /**
+ * @return array
+ */
+ public function getPublicProjects()
+ {
+ $cacheKey = $this->getCacheKey();
+ if(!empty($this->cache[$cacheKey]['public_projects'])) {
+ return $this->cache[$cacheKey]['public_projects'];
+ }
+ $this->loadProjectsInCacheProperty();
+
+ return $this->cache[$cacheKey]['public_projects'];
+ }
+
+ /**
+ * @return array
+ */
+ public function getAllProjects()
+ {
+ $cacheKey = $this->getCacheKey();
+ if(!empty($this->cache[$cacheKey]['all_projects'])) {
+ return $this->cache[$cacheKey]['all_projects'];
+ }
+ $this->loadProjectsInCacheProperty();
+
+ return $this->cache[$cacheKey]['all_projects'];
+ }
+
+ /**
+ * @return array
+ */
+ public function createCache()
+ {
+ $allProjects = $this->getAllProjects();
+ $file = $this->app->getTmpFolder().'cache_useronline';
+ $arr = $this->app->DB->SelectArr(
+ "SELECT uo.user_id, uo.sessionid, u.type, u.adresse
+ FROM `useronline` AS `uo`
+ INNER JOIN `user` AS `u` ON uo.user_id = u.id AND u.activ = 1
+ WHERE uo.login = 1"
+ );
+ $ret = [];
+ if(is_file($file)) {
+ $ret = file_get_contents($file);
+ if(empty(!$ret)) {
+ $ret = json_decode($ret, true);
+ }
+ if(empty($ret)) {
+ $ret = [];
+ }
+ }
+ $cacheKey = $this->getCacheKey();
+ $ret[$cacheKey] = [];
+ if(!empty($arr)) {
+ foreach($arr as $row) {
+ if($row['type'] === 'admin') {
+ $projects = $allProjects;
+ } else {
+ $projects = $this->getUserProjectsByParameter($row['adresse'], $row['type']);
+ }
+ $sessionId = $row['sessionid'];
+ $sha1SessionId = sha1($sessionId);
+ $ret[$cacheKey][$sha1SessionId] = ['type'=>$row['type'],'project'=>$projects];
+ }
+ }
+ file_put_contents($file, json_encode($ret));
+
+ return $ret[$cacheKey];
+ }
+
+ /**
+ * @param bool $createIfEmpty
+ *
+ * @return array|null
+ */
+ public function getUserByCache($createIfEmpty = true)
+ {
+ $file = $this->app->getTmpFolder().'cache_useronline';
+ if(isset($_COOKIE['CH42SESSION']) && $_COOKIE['CH42SESSION']!='') {
+ $tmp = $_COOKIE['CH42SESSION'];
+ } else {
+ $tmp = session_id();
+ }
+ $sha1Tmp = sha1($tmp);
+ $content = '';
+ if(is_file($file)){
+ $content = file_get_contents($file);
+ }
+ $cacheKey = $this->getCacheKey();
+ if(!empty($content)) {
+ $content = json_decode($content, true);
+ if(empty($content[$cacheKey])) {
+ $content[$cacheKey] = $this->createCache();
+ }
+ $content = $content[$cacheKey];
+ if(!empty($content[$sha1Tmp])) {
+ return $content[$sha1Tmp];
+ }
+ } else {
+ if(!$createIfEmpty) {
+ return null;
+ }
+ }
+ if(!empty($tmp)) {
+ $content = $this->createCache();
+ if(!empty($content[$sha1Tmp])) {
+ return $content[$sha1Tmp];
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * @param int $projektId
+ *
+ * @return bool
+ */
+ public function projectOk($projektId): ?bool
+ {
+ $user = $this->getUserByCache(false);
+ if(empty($user)) {
+ return null;
+ }
+ if($projektId <= 0) {
+ return true;
+ }
+ if($user['type'] === 'admin') {
+ return true;
+ }
+ if(empty($user['project'])) {
+ return false;
+ }
+ if(in_array($projektId, $user['project'])) {
+ return true;
+ }
+ //@todo Projekt aus Cache holen
+ return false;
+ }
+
+ /**
+ * @return int
+ */
+ public function GetID(): int
+ {
+ if(isset($_COOKIE['CH42SESSION']) && $_COOKIE['CH42SESSION']!='') {
+ $tmp = $_COOKIE['CH42SESSION'];
+ } else {
+ $tmp = session_id();
+ }
+ $cacheKey = $this->getCacheKey();
+ if(empty($this->cache[$cacheKey])
+ || !isset($this->cache[$cacheKey]['time']) || !isset($this->cache[$cacheKey]['tmp'])
+ || $this->cache[$cacheKey]['time'] + 10 < microtime(true) || $this->cache[$cacheKey]['tmp'] != $tmp) {
+ $this->cache = null;
+ $user_id = (int)$this->app->DB->Select(
+ sprintf(
+ "SELECT `user_id`
+ FROM `useronline`
+ WHERE `sessionid` != '' AND `sessionid` = '%s' AND `login` = 1
+ LIMIT 1",
+ $this->app->DB->real_escape_string($tmp)
+ )
+ );
+ if($user_id > 0) {
+ $this->cache[$cacheKey]['user_id'] = $user_id;
+ $this->cache[$cacheKey]['tmp'] = $tmp;
+ $this->cache[$cacheKey]['time'] = microtime(true);
+ }
+
+ return $user_id;
+ }
+
+ return (int)$this->cache[$cacheKey]['user_id'];
+ }
+
+ /**
+ * @return string
+ */
+ public function GetType(): string
+ {
+ $userId = (int)$this->GetID();
+ if($userId <= 0) {
+ return (string)$this->app->Conf->WFconf['defaultgroup'];
+ }
+ $cacheKey = $this->getCacheKey();
+ if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['type'])) {
+ return (string)$this->cache[$cacheKey]['type'];
+ }
+ $this->loadUserRowInCacheProperty($userId);
+
+ return (string)$this->cache[$cacheKey]['type'];
+ }
+
+ /**
+ * @param null|string|array $settings
+ */
+ function SettingsToUserKonfiguration($settings = null)
+ {
+ $id = (int)$this->GetID();
+ if(!$id) {
+ return;
+ }
+ if($settings === null) {
+ $settings = $this->app->DB->Select(sprintf('SELECT `settings` FROM `user` WHERE `id` = %d LIMIT 1', $id));
+ $cacheKey = $this->getCacheKey();
+ $this->cache[$cacheKey]['settings'] = $settings;
+ }
+ if(empty($settings)) {
+ return;
+ }
+
+ if($settings != '') {
+ $settings = @unserialize($settings);
+ }
+ if(empty($settings) || !is_array($settings)) {
+ return;
+ }
+
+ foreach($settings as $k => $v) {
+ $check = $this->app->DB->Select("SELECT `id` FROM `userkonfiguration` WHERE `name` = '".$this->app->DB->real_escape_string($k)."' AND `user` = '$id' LIMIT 1");
+ if($check) {
+ $this->app->DB->Update("UPDATE `userkonfiguration` set `value` = '".$this->app->DB->real_escape_string($v)."' WHERE `id` = '$check' LIMIT 1");
+ }else{
+ $this->app->DB->Insert("INSERT INTO `userkonfiguration` (`user`,`name`,`value`) VALUES ('$id','".$this->app->DB->real_escape_string($k)."','".$this->app->DB->real_escape_string($v)."')");
+ }
+ }
+ if(!$this->app->DB->error()) {
+ $this->app->DB->Update(sprintf("UPDATE `user` SET `settings` = '' WHERE `id` = %d LIMIT 1", $id));
+ $cacheKey = $this->getCacheKey();
+ $this->cache[$cacheKey]['settings'] = '';
+ }
+ }
+
+ /**
+ * @var int|null $userId
+ *
+ * @return string|null
+ */
+ public function GetSettings($userId = null)
+ {
+ $cacheKey = $this->getCacheKey();
+ if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['settings'])) {
+ return $this->cache[$cacheKey]['settings'];
+ }
+ $this->loadUserRowInCacheProperty($userId);
+
+ return $this->cache[$cacheKey]['settings'];
+ }
+
+ /**
+ * @param string|array $index
+ *
+ * @return array|mixed|string|null
+ */
+ public function GetParameter($index)
+ {
+ $userId = (int)$this->GetID();
+ $settings = $this->GetSettings($userId);
+ if(!empty($settings)) {
+ $this->SettingsToUserKonfiguration($settings);
+ }
+
+ if((is_array($index) && count($index) === 0) || (!is_array($index) && (string)$index === '')) {
+ return null;
+ }
+
+ if(is_array($index)) {
+ $index = array_map('trim', $index);
+ $indexNames = array_map([$this->app->DB, 'real_escape_string'], $index);
+ $sql = sprintf(
+ "SELECT `name`, MAX(`value`) AS `value`
+ FROM `userkonfiguration`
+ WHERE `user` = %d AND `name` IN ('%s')
+ GROUP BY `name`",
+ $userId, implode("', '", $indexNames)
+ );
+ $arr = $this->app->DB->SelectPairs($sql);
+ $ret = null;
+ foreach($index as $ind) {
+ if(isset($arr[$ind])) {
+ $ret[] = [ 'name'=>$ind, 'value'=> $arr[$ind] ];
+ }
+ else {
+ $ret[] = [ 'name'=>$ind, 'value'=> '' ];
+ }
+ }
+
+ return $ret;
+ }
+
+ return $this->app->DB->Select(
+ sprintf(
+ "SELECT `value`
+ FROM `userkonfiguration`
+ WHERE `name` = '%s' AND `user` = %d
+ LIMIT 1",
+ $this->app->DB->real_escape_string($index), $userId
+ )
+ );
+ }
+
+ // value koennen beliebige Datentypen aus php sein (serialisiert)
+
+ /**
+ * @param string $index
+ * @param mixed $value
+ */
+ public function SetParameter($index, $value)
+ {
+ if((string)$index === '' || $value === null) {
+ return;
+ }
+ $id = (int)$this->GetID();
+
+ $settings = $this->GetSettings($id);
+ if(!empty($settings)) {
+ $this->SettingsToUserKonfiguration($settings);
+ }
+
+ $check = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT `id`, `value`
+ FROM `userkonfiguration` WHERE `name` = '%s' AND `user` = %d
+ LIMIT 1",
+ $this->app->DB->real_escape_string($index), $id
+ )
+ );
+ if(empty($check)) {
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO `userkonfiguration` (`user`, `name`, `value`) VALUES (%d, '%s', '%s')",
+ $id, $this->app->DB->real_escape_string($index), $this->app->DB->real_escape_string($value)
+ )
+ );
+ $this->cache = null;
+ return;
+ }
+
+ if((string)$value === (string)$check['value']) {
+ return;
+ }
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE `userkonfiguration`
+ SET `value` = '%s'
+ WHERE `id` = %d
+ LIMIT 1",
+ $this->app->DB->real_escape_string($value), $check['id']
+ )
+ );
+ $this->cache = null;
+ }
+
+ /**
+ * @param string $index
+ */
+ public function deleteParameter($index)
+ {
+ if(empty($index)) {
+ return;
+ }
+ $id = $this->GetID();
+ $this->app->DB->Delete(
+ sprintf(
+ 'DELETE FROM `userkonfiguration` WHERE `user` = %d AND `name` = \'%s\'',
+ $id, $this->app->DB->real_escape_string($index)
+ )
+ );
+ }
+
+ /**
+ * @param string $prefix
+ */
+ public function deleteParameterPrefix($prefix)
+ {
+ if(empty($prefix)) {
+ return;
+ }
+ $id = $this->GetID();
+ $this->app->DB->Delete(
+ sprintf(
+ 'DELETE FROM `userkonfiguration` WHERE `user` = %d AND `name` LIKE \'%s%%\'',
+ $id, $this->app->DB->real_escape_string($prefix)
+ )
+ );
+ }
+
+ /**
+ * @return string|null
+ */
+ public function GetUsername()
+ {
+ $cacheKey = $this->getCacheKey();
+ if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['username'])) {
+ return $this->cache[$cacheKey]['username'];
+ }
+ $this->loadUserRowInCacheProperty();
+
+ return $this->cache[$cacheKey]['username'];
+ }
+
+ /**
+ * @return string|null
+ */
+ public function GetDescription()
+ {
+ return $this->GetName();
+ }
+
+ /**
+ * @return string|null
+ */
+ public function GetMail()
+ {
+ $cacheKey = $this->getCacheKey();
+ if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['email'])) {
+ return $this->cache[$cacheKey]['email'];
+ }
+ $this->loadAddressRowInCacheProperty();
+
+ return $this->cache[$cacheKey]['email'];
+ }
+
+ /**
+ * @return string|null
+ */
+ public function GetName()
+ {
+ $cacheKey = $this->getCacheKey();
+ if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['name'])) {
+ return $this->cache[$cacheKey]['name'];
+ }
+ $this->loadAddressRowInCacheProperty();
+
+ return $this->cache[$cacheKey]['name'];
+ }
+
+ /**
+ * @return array
+ */
+ public function GetSprachen()
+ {
+ $userId = (int)$this->GetId();
+ $cacheKey = $this->getCacheKey();
+ if(empty($this->cache[$cacheKey]) || !isset($this->cache[$cacheKey]['sprachebevorzugen'])) {
+ $this->loadUserRowInCacheProperty($userId);
+ }
+ $defaultLanguages = ['german','english'];
+ $languages = $this->cache[$cacheKey]['sprachebevorzugen'];
+
+ if(empty($languages)) {
+ return $defaultLanguages;
+ }
+ $ret = [];
+ $languagesArray = explode(';',str_replace(',',';',$languages));
+ foreach($languagesArray as $language) {
+ $language = trim($language);
+ if($language != '') {
+ $ret[] = $language;
+ }
+ }
+ if(empty($ret)) {
+ return $ret;
+ }
+
+ return $defaultLanguages;
+ }
+
+ /**
+ * @return string
+ */
+ public function GetSprache()
+ {
+ $sprachen = $this->GetSprachen();
+
+ return reset($sprachen);
+ }
+
+ /**
+ * @return int|null
+ */
+ public function GetAdresse()
+ {
+ $cacheKey = $this->getCacheKey();
+ if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['adresse'])) {
+ return $this->cache[$cacheKey]['adresse'];
+ }
+ $this->loadUserRowInCacheProperty();
+
+// return $this->cache[$cacheKey]['adresse'];
+ }
+
+ /**
+ * @return bool
+ */
+ function GetProjektleiter()
+ {
+ $result = $this->app->DB->SelectRow(
+ "SELECT `parameter`
+ FROM `adresse_rolle`
+ WHERE `subjekt` = 'Projektleiter' AND (`bis` = '0000-00-00' OR `bis` <= CURDATE())
+ AND `adresse` = '".$this->app->User->GetAdresse()."'
+ LIMIT 1"
+ );
+
+ return !empty($result);
+ }
+
+ /**
+ * @return int
+ */
+ function DefaultProjekt()
+ {
+ $adresse = $this->GetAdresse();
+ $cacheKey = $this->getCacheKey();
+ if(empty($this->cache[$cacheKey]) || !isset($this->cache[$cacheKey]['projekt'])) {
+ $this->loadAddressRowInCacheProperty($adresse);
+ $projekt = $this->cache[$cacheKey]['projekt'];
+ }
+ else {
+ $projekt = $this->cache[$cacheKey]['projekt'];
+ }
+ if($projekt <=0){
+ $projekt = $this->app->DB->Select(
+ "SELECT `standardprojekt` FROM `firma` WHERE `id`='" . $this->app->User->GetFirma() . "' LIMIT 1"
+ );
+ }
+
+ return $projekt;
+ }
+
+ /**
+ * @return string|null
+ */
+ function GetEmail()
+ {
+ $cacheKey = $this->getCacheKey();
+ if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['email'])) {
+ return $this->cache[$cacheKey]['email'];
+ }
+ $this->loadAddressRowInCacheProperty();
+
+ return $this->cache[$cacheKey]['email'];
+ }
+
+ /**
+ * @return int
+ */
+ public function GetFirma(): int
+ {
+ return 1;
+ }
+
+ /**
+ * @return string
+ */
+ function GetFirmaName()
+ {
+ $cacheKey = $this->getCacheKey();
+ if(!empty($this->cache[$cacheKey]) && isset($this->cache[$cacheKey]['firmaname'])) {
+ return $this->cache[$cacheKey]['firmaname'];
+ }
+ $name = $this->app->DB->Select(sprintf('SELECT `name` FROM `firma` WHERE `id` = %d', $this->GetFirma()));
+ $this->cache[$cacheKey]['firmaname'] = $name;
+
+ return $name;
+ }
+
+ /**
+ * @param string $field
+ *
+ * @return mixed
+ */
+ public function GetField($field)
+ {
+ $value = $this->app->DB->Select(
+ sprintf(
+ 'SELECT `%s` FROM `user` WHERE id = %d ',
+ $field, $this->GetID()
+ )
+ );
+ if(in_array($value, ['settings', 'type', 'username', 'adresse', 'sprachebevorzugen'])) {
+ $cacheKey = $this->getCacheKey();
+ $this->cache[$cacheKey][$field] = $value;
+ }
+
+ return $value;
+ }
+
+ /**
+ * @param int|null $userId
+ */
+ protected function loadUserRowInCacheProperty(?int $userId = null): void
+ {
+ if($userId === null){
+ $userId = (int)$this->GetID();
+ }
+ $cacheKey = $this->getCacheKey();
+ $userData = (array)$this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT `settings`, `type`, `username`, `adresse`, `sprachebevorzugen` FROM `user` WHERE `id` = %d LIMIT 1',
+ $userId
+ )
+ );
+ if(!isset($this->cache[$cacheKey])) {
+ $this->cache[$cacheKey] = $userData;
+ }
+ else{
+ $this->cache[$cacheKey] = array_merge($this->cache[$cacheKey], $userData);
+ }
+ }
+
+ /**
+ * @param int|null $addressId
+ */
+ protected function loadAddressRowInCacheProperty(?int $addressId = null): void
+ {
+ if($addressId === null){
+ $addressId = (int)$this->GetAdresse();
+ }
+ $cacheKey = $this->getCacheKey();
+ $addressData = (array)$this->app->DB->SelectRow(
+ sprintf('SELECT `name`, `email`, `projekt` FROM `adresse` WHERE `id` = %d LIMIT 1', $addressId)
+ );
+ if(!isset($this->cache[$cacheKey])) {
+ $this->cache[$cacheKey] = $addressData;
+ }
+ else{
+ $this->cache[$cacheKey] = array_merge($this->cache[$cacheKey], $addressData);
+ }
+ }
+
+ /**
+ * @return string
+ */
+ protected function getCacheKey(): string
+ {
+ return (string)$this->app->Conf->WFdbname;
+ }
+
+
+ protected function loadProjectsInCacheProperty(): void
+ {
+ $cacheKey = $this->getCacheKey();
+ $projects = $this->app->DB->SelectPairs('SELECT `id`, `oeffentlich` FROM `projekt` WHERE `geloescht` <> 1');
+ $this->cache[$cacheKey]['all_projects'] = array_keys($projects);
+ $this->cache[$cacheKey]['public_projects'] = [];
+ foreach($projects as $projectId => $public) {
+ if($public) {
+ $this->cache[$cacheKey]['public_projects'][] = $projectId;
+ }
+ }
+ }
+
+
+ /**
+ * @param int $addressId
+ * @param string $type
+ *
+ * @return array
+ */
+ protected function getUserProjectsByParameter($addressId, $type)
+ {
+ if($type==='admin' ||
+ $this->app->DB->Select(
+ "SELECT `id`
+ FROM `adresse_rolle`
+ WHERE (`bis` IS NULL OR `bis` = '0000-00-00' OR `bis` <= CURDATE()) AND `adresse` = '".$addressId."'
+ AND (`parameter` = '' OR `parameter` = '0')"
+ )
+ ) {
+ return $this->getAllProjects();
+ }
+ $public = $this->getPublicProjects();
+ $roles = $this->app->DB->SelectFirstCols(
+ sprintf(
+ "SELECT DISTINCT `parameter`
+ FROM `adresse_rolle`
+ WHERE (`bis` IS NULL OR `bis` = '0000-00-00' OR `bis` <= CURDATE()) AND `adresse` = %d
+ AND `parameter` >= 0 AND `objekt` LIKE 'Projekt'",
+ $addressId
+ )
+ );
+ $projects = $this->app->DB->SelectFirstCols(
+ sprintf(
+ "SELECT DISTINCT `projekt`
+ FROM `adresse_rolle`
+ WHERE (`bis` IS NULL OR `bis` = '0000-00-00' OR bis <= CURDATE()) AND `adresse` = %d AND `projekt` > 0",
+ $addressId
+ )
+ );
+
+ return array_unique(array_merge($public, $roles, $projects));
+ }
+}
diff --git a/www/pages/importvorlage.php b/www/pages/importvorlage.php
index 528ad0d1..60ccdb34 100644
--- a/www/pages/importvorlage.php
+++ b/www/pages/importvorlage.php
@@ -1,6100 +1,6107 @@
-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(')', count($statusMapping));
-
- $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 .= ' ';
- $menu .= ' ';
- $menu .= ' ';
- $menu .= '
';
- $menucol = count($heading);
- $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',"");
- }
-*/
-
- $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 = count($fieldsarray);
- 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 $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 = count($fieldsarray);
- 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 = count($fieldsarray);
- 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 = '';
- $charset = $this->app->DB->Select("SELECT charset from importvorlage where id = '$id'");
- if($upload!='') {
- $charset = $this->app->Secure->GetPOST('charset');
- }
- $this->app->Tpl->Set('CHARSET',$charset);
- foreach($selcharsets as $k => $v) {
- $sel .= ''.$v.' ';
- }
- $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 = count($csv_fields);
-
-
- $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 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 $v) {
- $fieldsarray_items[$k] = trim($v);
- }
- if(count($fieldsarray_items) > 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 = count($csv_fields_keys);
- if (($handle = fopen($stueckliste_csv, 'r')) !== FALSE) {
- $rowcounter = 0;
- $rowcounter_real = 0;
- while (($data = fgetcsv($handle, 0, $importtrennzeichen)) !== FALSE) {
- $rowcounter++;
- $num = count($data);
- 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 = 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");
- }
- }
- }
-
-
- 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 < count($artikelbaumteile); $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 < count($artikelbaumzumhinzufuegen); $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 < count($artikelbaumteile); $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 < count($artikelbaumzumhinzufuegen); $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 (is_null(gruppe) 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 (is_null(gruppe) 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
- if($this->app->erp->ModulVorhanden('artikel_texte')){
- $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[count($feldnametmp)-1];
- unset($feldnametmp[count($feldnametmp)-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);
- }
- }
- }
- }
- }
-
- //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($mitarbeiteradresse>0){
- $bearbeiter = $this->app->DB->Select("SELECT CONCAT(mitarbeiternummer,' ',name) FROM adresse WHERE id='$mitarbeiteradresse' LIMIT 1");
- }
- else {
- $bearbeiter='Import';
- }
-
- $this->app->DB->Insert("INSERT INTO dokumente (id,adresse_to,adresse_from,typ,betreff,content,datum,uhrzeit,bearbeiter)
- VALUES ('',$adresse,$mitarbeiteradresse,'notiz','$betreff','$text','$datum','$uhrzeit','$bearbeiter')");
- }
- }
- 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;
- }
- 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;
- }
- }
- }
- if($return) {
- if($returnids) {
- return $ids;
- }
- return $number_of_rows;
- }
- if($ziel==='zeiterfassung' || $ziel==='wiedervorlage' || $ziel==='notizen') {
- $msg=$this->app->erp->base64_url_encode("Import durchgeführt.
");
- $this->app->Location->execute("index.php?module=importvorlage&action=import&id=$id&msg=$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");
- }
-
- /**
- * @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 =count($fieldset);
-
- switch($ziel)
- {
- case "einkauf":
- case "artikel":
- $this->app->Tpl->Add('ERGEBNIS','Auswahl Aktion Artikel ');
- break;
- case "adresse":
- $this->app->Tpl->Add('ERGEBNIS','Auswahl Aktion Adresse ');
- break;
-
- case "zeiterfassung":
- case "wiedervorlagen":
- case "notizen":
- $this->app->Tpl->Add('ERGEBNIS','Auswahl
- Aktion Kunde ');
- 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 =count($fieldset);
- //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;
- }
-}
-
+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(')', count($statusMapping));
+
+ $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 .= ' ';
+ $menu .= ' ';
+ $menu .= ' ';
+ $menu .= '
';
+ $menucol = count($heading);
+ $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',"");
+ }
+*/
+
+ $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 = count($fieldsarray);
+ 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 $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 = count($fieldsarray);
+ 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 = count($fieldsarray);
+ 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 = '';
+ $charset = $this->app->DB->Select("SELECT charset from importvorlage where id = '$id'");
+ if($upload!='') {
+ $charset = $this->app->Secure->GetPOST('charset');
+ }
+ $this->app->Tpl->Set('CHARSET',$charset);
+ foreach($selcharsets as $k => $v) {
+ $sel .= ''.$v.' ';
+ }
+ $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 = count($csv_fields);
+
+
+ $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 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 $v) {
+ $fieldsarray_items[$k] = trim($v);
+ }
+ if(count($fieldsarray_items) > 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 = count($csv_fields_keys);
+ if (($handle = fopen($stueckliste_csv, 'r')) !== FALSE) {
+ $rowcounter = 0;
+ $rowcounter_real = 0;
+ while (($data = fgetcsv($handle, 0, $importtrennzeichen)) !== FALSE) {
+ $rowcounter++;
+ $num = count($data);
+ 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 = 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");
+ }
+ }
+ }
+
+
+ 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 < count($artikelbaumteile); $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 < count($artikelbaumzumhinzufuegen); $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 < count($artikelbaumteile); $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 < count($artikelbaumzumhinzufuegen); $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 (is_null(gruppe) 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 (is_null(gruppe) 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
+ if($this->app->erp->ModulVorhanden('artikel_texte')){
+ $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[count($feldnametmp)-1];
+ unset($feldnametmp[count($feldnametmp)-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);
+ }
+ }
+ }
+ }
+ }
+
+ //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;
+ }
+ 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;
+ }
+ }
+ }
+ if($return) {
+ if($returnids) {
+ return $ids;
+ }
+ return $number_of_rows;
+ }
+ if($ziel==='zeiterfassung' || $ziel==='wiedervorlage' || $ziel==='notizen') {
+ $msg=$this->app->erp->base64_url_encode("Import durchgeführt.
");
+ $this->app->Location->execute("index.php?module=importvorlage&action=import&id=$id&msg=$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");
+ }
+
+ /**
+ * @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 =count($fieldset);
+
+ switch($ziel)
+ {
+ case "einkauf":
+ case "artikel":
+ $this->app->Tpl->Add('ERGEBNIS','Auswahl Aktion Artikel ');
+ break;
+ case "adresse":
+ $this->app->Tpl->Add('ERGEBNIS','Auswahl Aktion Adresse ');
+ break;
+
+ case "zeiterfassung":
+ case "wiedervorlagen":
+ case "notizen":
+ $this->app->Tpl->Add('ERGEBNIS','Auswahl
+ Aktion Kunde ');
+ 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 =count($fieldset);
+ //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;
+ }
+}
+
diff --git a/www/pages/prozessstarter.php b/www/pages/prozessstarter.php
index 9015ae0a..ac360415 100644
--- a/www/pages/prozessstarter.php
+++ b/www/pages/prozessstarter.php
@@ -1,1650 +1,1661 @@
-app->Tpl->Add('JQUERYREADY', "$('#nuraktiv').click( function() { fnFilterColumn1( 0 ); } );");
- for ($r = 1;$r < 2;$r++) {
- $this->app->Tpl->Add('JAVASCRIPT', '
- function fnFilterColumn' . $r . ' ( i )
- {
- if(oMoreData' . $r . $name . '==1)
- oMoreData' . $r . $name . ' = 0;
- else
- oMoreData' . $r . $name . ' = 1;
-
- $(\'#' . $name . '\').dataTable().fnFilter(
- \'\',
- i,
- 0,0
- );
- }
- ');
- }
-
-
- // START EXTRA checkboxen
-
- // ENDE EXTRA checkboxen
-
-
- // headings
-
- $heading = array('','Bezeichnung', 'Art', 'Periode', 'mind. Empfohlen', 'Aktiviert', 'Laeuft', 'Letzte Ausführung', 'Typ', 'Parameter','Status', 'Menü');
- $width = array('1%','15%', '10%', '10%', '10%', '10%','10%', '15%', '5%', '10%','20%', '1%');
- $findcols = array('p.id','p.bezeichnung', 'p.art', 'CAST(p.periode as SIGNED)',"recommended_period",
- "if(p.aktiv,'ja','-')", 'p.mutex', 'p.letzteausfuerhung', 'p.typ', 'p.parameter','p.status', 'p.id');
- $searchsql = array('p.bezeichnung', 'p.art', 'p.periode', 'p.aktiv', 'p.mutex',
- "date_format(p.letzteausfuerhung, '%d.%m.%Y %H:%i:%s')", 'p.typ', 'p.parameter','p.status');
- $defaultorder = 2;
- $defaultorderdesc = 0;
- $menu = '';
- $moreinfo = true;
- $menucol = count($heading) - 1;
-
- // SQL statement
- $sql = "SELECT SQL_CALC_FOUND_ROWS p.id,
- ' app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS open,
- p.bezeichnung, p.art,
- p.periode,
- IF(p.recommended_period >0 AND p.art='periodisch', p.recommended_period,'-'),
- if(p.aktiv,'ja','-') as aktiviert, if(p.mutex,
- CONCAT(
- 'ja',if(p.mutexcounter > 0,concat(' (Anzahl Versuche ',p.mutexcounter,')'),'')
- ),'-')
- as laeuft, date_format(p.letzteausfuerhung, '%d.%m.%Y %H:%i:%s') as 'letzte Ausführung',
- p.typ, p.parameter,concat(p.status_zeit,' ',p.status), p.id
- FROM `prozessstarter` AS `p` ";
- $where = ' p.id > 0 ';
-
- $more_data1 = $this->app->Secure->GetGET('more_data1');
- if ($more_data1 == 1) {
- $subwhere[] = ' p.aktiv=1 ';
- }
- if(!empty($subwhere)){
- $tmp = implode(' AND ', $subwhere);
- }
- if($tmp!=''){
- $where .= " AND ($tmp)";
- }
-
- //$groupby=" GROUP by z.adresse_abrechnung ";
-
- // gesamt anzahl
-
- $count = "SELECT COUNT(id) FROM prozessstarter p WHERE $where";
- break;
- }
-
- $erg = array();
-
- foreach($erlaubtevars as $k => $v)
- {
- if(isset($$v)){
- $erg[$v] = $$v;
- }
- }
- return $erg;
- }
-
- /**
- * Prozessstarter constructor.
- *
- * @param Application $app
- * @param bool $intern
- */
- public function __construct($app, $intern = false) {
- $this->app=$app;
- if($intern) {
- return;
- }
-
- $this->app->ActionHandlerInit($this);
-
- $this->app->ActionHandler("create","ProzessstarterCreate");
- $this->app->ActionHandler("edit","ProzessstarterEdit");
- $this->app->ActionHandler("list","ProzessstarterList");
- $this->app->ActionHandler("delete","ProzessstarterDelete");
- $this->app->ActionHandler("reset","ProzessstarterReset");
- $this->app->ActionHandler("chart","ProzessstarterChart");
- $this->app->ActionHandler("minidetail","ProzessstarterMinidetail");
-
- $this->app->ActionHandlerListen($app);
- }
-
- public function Install() {
- $this->app->erp->CheckTable('cronjob_log');
- $this->app->erp->CheckColumn('parent_id','INT(11)','cronjob_log','DEFAULT 0 NOT NULL');
- $this->app->erp->CheckColumn('cronjob_id','INT(11)','cronjob_log','DEFAULT 0 NOT NULL');
- $this->app->erp->CheckColumn('memory_usage','INT(11)','cronjob_log','DEFAULT 0 NOT NULL');
- $this->app->erp->CheckColumn('memory_peak','INT(11)','cronjob_log','DEFAULT 0 NOT NULL');
- $this->app->erp->CheckColumn('cronjob_name','varchar(255)','cronjob_log','DEFAULT "" NOT NULL');
- $this->app->erp->CheckColumn('change_time','timestamp','cronjob_log','DEFAULT CURRENT_TIMESTAMP NOT NULL');
- $this->app->erp->CheckColumn('status','varchar(32)','cronjob_log','DEFAULT "" NOT NULL');
- $this->app->erp->CheckIndex('cronjob_log', ['cronjob_id','change_time']);
- $this->app->erp->RegisterHook('ajax_filter_hook1','prozessstarter','ProzessstarterAjaxFilter');
- $this->app->erp->RegisterHook('systemhealth_fill_entries','prozessstarter','ProzessstarterSystemhealthFillEntries');
-
- $this->app->erp->CheckTable('cronjob_starter_running');
- $this->app->erp->CheckColumn('uid','VARCHAR(23)','cronjob_starter_running','NOT NULL');
- $this->app->erp->CheckColumn('active','TINYINT(1)','cronjob_starter_running','DEFAULT 0 NOT NULL');
- $this->app->erp->CheckColumn('type','VARCHAR(10)','cronjob_starter_running','NOT NULL');
- $this->app->erp->CheckColumn('task_id','INT(11)','cronjob_starter_running','DEFAULT 0 NOT NULL');
- $this->app->erp->CheckColumn('last_time','TIMESTAMP','cronjob_starter_running','DEFAULT CURRENT_TIMESTAMP NOT NULL');
- $this->app->erp->CheckIndex('cronjob_starter_running',['uid','type']);
- if(!$this->app->erp->GetKonfiguration('prozessstarter_log_repair2')) {
- $cronjobLogs = $this->app->DB->Query('SELECT * FROM cronjob_log WHERE cronjob_id > 0 ORDER BY cronjob_id, change_time, id');
- $cronjobId = 0;
- $parentId = 0;
- while($cronjobLog = $this->app->DB->Fetch_Assoc($cronjobLogs)) {
- if($cronjobId !== $cronjobLog['cronjob_id']) {
- $cronjobId = $cronjobLog['cronjob_id'];
- $parentId = 0;
- }
- if($cronjobLog['status'] === 'start' || $cronjobLog['status'] === 'gestartet') {
- $parentId = $cronjobLog['id'];
- }
- elseif($parentId != $cronjobLog['parent_id']) {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE cronjob_log SET parent_id = %d WHERE id = %d',
- $parentId, $cronjobLog['id']
- )
- );
- }
- }
- $this->app->erp->SetKonfigurationValue('prozessstarter_log_repair2', 1);
- }
- $this->removeKilledCronjobs();
- }
-
- /**
- * @return array
- */
- public function getToFrequentlyCronjobs()
- {
- return $this->app->DB->SelectFirstCols(
- sprintf(
- "SELECT DISTINCT `parameter`
- FROM `prozessstarter`
- WHERE `aktiv` = 1 AND `art` = 'periodisch' AND `periode` < `recommended_period` AND `recommended_period` > 0"
- )
- );
- }
-
- /**
- * @param array $parmeterList
- *
- * @return string
- */
- public function getFrequentlyMessage($parmeterList)
- {
- if(empty($parmeterList)) {
- return '';
- }
- if(count($parmeterList) === 1) {
- return 'Der Prozessstarter '
- .implode(', ', $parmeterList).' läuft häufiger als empfohlen';
- }
-
- return 'Die Prozessstarter '
- .implode(', ', $parmeterList).' laufen häufiger als empfohlen';
- }
-
- /**
- * @param int $id
- *
- * @return bool
- */
- public function resetPeriode($id = 0)
- {
- $this->app->DB->Update(
- sprintf(
- "UPDATE `prozessstarter`
- SET `periode` = `recommended_period`
- WHERE `aktiv` = 1 AND `art` = 'periodisch' AND `periode` < `recommended_period` AND `recommended_period` > 0
- AND (%d = 0 OR `id` = %d)",
- $id, $id
- )
- );
-
- $ret = $this->app->DB->affected_rows() > 0;
- if($ret) {
- $this->ProzessstarterSystemhealthFillEntries();
- }
-
- return $ret;
- }
-
- public function ProzessstarterSystemhealthFillEntries()
- {
- $countToFrequently = $this->getToFrequentlyCronjobs();
- $message = $this->getFrequentlyMessage($countToFrequently);
- if(!empty($message)) {
- $message = ''.$message.' ';
- }
-
- /** @var Systemhealth $systemhealth */
- $systemhealth = $this->app->loadModule('systemhealth');
- $systemhealth->changeStatus('cronjobs', 'frequently', empty($message)?'OK':'warning', $message);
- }
-
- /**
- * @param string $filtername
- * @param array $newarr
- * @param string $term
- * @param string $term2
- * @param string $term3
- */
- public function ProzessstarterAjaxFilter($filtername, &$newarr, $term, $term2, $term3)
- {
- if($filtername === 'prozessstarter_aktiv'){
- $arr = $this->app->DB->SelectArr(
- "SELECT DISTINCT CONCAT(parameter,' ',bezeichnung) as `name`
- FROM prozessstarter
- WHERE parameter LIKE '%$term%' OR bezeichnung = '%$term%'
- ORDER BY parameter"
- );
- if(empty($arr)) {
- return;
- }
-
- foreach($arr as $row) {
- $newarr[] = $row['name'];
- }
- }
- }
-
- /**
- * @param string $date
- * @param int $roundMinutes
- *
- * @return string
- */
- protected function roundDate($date, $roundMinutes = 15) {
- $return = substr($date,0,14);
- $minutes = substr($date,14,2);
- $minutes = floor($minutes / $roundMinutes) * $roundMinutes;
- if(strlen($minutes) === 1) {
- $minutes = '0'.$minutes;
- }
-
- return $return.$minutes.':00';
- }
-
- /**
- * @param array $data
- * @param string $field
- *
- * @return array
- */
- protected function seperateData($data, $field) {
- $ret = [];
- foreach($data as $row) {
- $ret['K'.$row[$field]][] = $row;
- }
-
- return $ret;
- }
-
- /**
- * @param array $data
- * @param string $fieldValue
- * @param string $dateField
- * @param DateInterval $interval
- *
- * @return array
- */
- protected function roundDataDates($data, $fieldValue, $dateField, $interval) {
- $return = [];
- if(empty($data)) {
- return [];
- }
- $seconds = 60 * $interval->i;
- foreach($data as $key => $arr) {
- $cronjobIntervals = [];
- foreach($arr as $rowIndex => $row) {
- if($row[$fieldValue] > 0) {
- if(empty($cronjobIntervals) || empty($cronjobIntervals[count($cronjobIntervals) - 1])) {
- $cronjobIntervals[] = ['start' => $this->roundDate($row[$dateField]), 'startexact'=>$row[$dateField]];
- }
- $cronjobIntervals[count($cronjobIntervals) - 1]['end'] = $this->roundDate($row[$dateField], $interval->i);
- $cronjobIntervals[count($cronjobIntervals) - 1]['endexact'] = $row[$dateField];
- }
- else {
- if(empty($cronjobIntervals)) {
- continue;
- }
- if(!empty($cronjobIntervals[count($cronjobIntervals) - 1])) {
- $cronjobIntervals[count($cronjobIntervals) - 1]['end'] = $this->roundDate($row[$dateField], $interval->i);
- $cronjobIntervals[count($cronjobIntervals) - 1]['endexact'] = $row[$dateField];
- }
- $cronjobIntervals[] = [];
- }
- }
- $return[$key] = [];
- $dateToKeys = [];
- foreach($cronjobIntervals as $cronjobInterval) {
- if(empty($cronjobInterval)) {
- continue;
- }
-
- $start = new DateTime($cronjobInterval['start']);
- $end = new DateTime($cronjobInterval['end']);
-
- $val = 100* (
- (strtotime($cronjobInterval['endexact']) - strtotime($cronjobInterval['startexact'])+0.1) /
- (strtotime($cronjobInterval['start']==$cronjobInterval['end']?$cronjobInterval['start']+$seconds:$cronjobInterval['end'])
- -strtotime($cronjobInterval['start']))
- );
- if($val > 100) {
- $val = 100;
- }
-
- $dateFielValue = $start->format('d.m.Y H:i:s');
- if(isset($dateToKeys[$dateFielValue])) {
- $return[$key][$dateToKeys[$dateFielValue]][$fieldValue] += $val;
- if($return[$key][$dateToKeys[$dateFielValue]][$fieldValue] > 100) {
- $return[$key][$dateToKeys[$dateFielValue]][$fieldValue] = 100;
- }
- }
- else {
- $return[$key][] = [$dateField => $dateFielValue, $fieldValue => $val];
- $dateToKeys[$dateFielValue] = count($return[$key])-1;
- }
- while(strtotime($start->format('Y-m-d H:i:s')) < strtotime($end->format('Y-m-d H:i:s'))) {
- $start->add($interval);
- $dateFielValue = $start->format('d.m.Y H:i:s');
- if(isset($dateToKeys[$dateFielValue])) {
- $return[$key][$dateToKeys[$dateFielValue]][$fieldValue] += $val;
- }
- else {
- $return[$key][] = [$dateField => $dateFielValue, $fieldValue => $val];
- $dateToKeys[$dateFielValue] = count($return[$key])-1;
- }
- }
- }
- }
-
- return $return;
- }
-
- /**
- * @param array $data
- * @param string $field
- * @param string $nameField
- *
- * @return mixed
- */
- protected function formatData($data, $field = 'running',$nameField = 'bezeichnung') {
- if(empty($data)) {
- return $data;
- }
- foreach($data as $key => $arr) {
- if(empty($arr)) {
- continue;
- }
- foreach($arr as $rowIndex => $row) {
- $data[$key][$rowIndex][$row[$nameField]] = $row[$field]?round($row[$field],2):0;//sqrt
- }
- }
-
- return $data;
- }
-
- /**
- * @param string $formelementDate
- * @param string $formelementTime
- * @param bool $from
- *
- * @return array
- */
- public function getDatesFromForm($formelementDate, $formelementTime, $from = false) {
- $last12h = $this->app->Secure->GetPOST('last12h');
- $last6h = $this->app->Secure->GetPOST('last6h');
- if(!empty($last12h) || !empty($last6h)) {
- $diff = 12;
- if(!empty($last6h)) {
- $diff = 6;
- }
- if($from) {
- list($date, $time) = explode(' ', (new DateTime())->add(new DateInterval('PT5M'))->sub(new DateInterval('PT'.$diff.'H'))->format('d.m.Y H:i'),2);
- }
- else {
- list($date, $time) = explode(' ', (new DateTime())->add(new DateInterval('PT5M'))->format('d.m.Y H:i'),2);
- }
- }
- else{
- if(!empty($formelementDate)) {
- $date = $this->app->Secure->GetPOST($formelementDate);
- }
- else{
- $date = '';
- }
- if(!empty($formelementTime)) {
- $time = $this->app->Secure->GetPOST($formelementTime);
- }
- else{
- $time = '';
- }
- }
- if(empty($time)) {
- $time = '00:00:00';
- }
- else {
- $time = substr($time,0,5). ':00';
- }
- if(empty($date)) {
- $date = new DateTime();
- if($from) {
- $date->sub(new DateInterval('P1D'));
- }
- $dateFormated = $date->format('d.m.Y');
- $timeFormated = $date->format('H:i');
- $date = $date->format('Y-m-d H:i:s');
- }
- elseif(strpos($date,'.') !== false) {
- $dateFormated = substr($date,0, 10);
- $date = $this->app->String->Convert($dateFormated,'%1.%2.%3','%3-%2-%1').' '.$time;
- $timeFormated = substr($time,0,5);
- }
- else {
- $dateFormated = $this->app->String->Convert($date,'%3-%2-%1','%1.%2.%3').' '.$time;
- $timeFormated = substr($time,0,5);
- }
-
- $date = $this->roundDate($date);
-
- return [$date, $dateFormated, $timeFormated];
- }
-
-
- /**
- * @param string $dateFrom
- * @param string $dateTo
- * @param int $cronjobId
- * @param int $limit
- *
- * @return string
- */
- protected function getChart($dateFrom, $dateTo, $cronjobId = 0, $limit = 0) {
- $extra = '';
- if($cronjobId > 0) {
- $extra = sprintf(' AND p.id = %d ',$cronjobId);
- }
-
- /*$sql = sprintf(
- '
- SELECT DATE_FORMAT(cl2.change_time, \'%%d.%%m.%%Y %%H:%%i\') as `date`,
- IF(cl2.status <> \'abgeschlossen\' AND SUBSTRING(cl2.status,1,5) != \'mutex\' ,1,0) as `running` ,cl2.status,cl2.cronjob_id,p.bezeichnung
- FROM (
- SELECT change_time, id ,cronjob_id
- FROM cronjob_log
- WHERE status = \'start\'
- ) AS cl1
- INNER JOIN (
- SELECT change_time, id, status, parent_id ,cronjob_id
- FROM cronjob_log
- ) AS cl2 ON (cl1.id = cl2.parent_id OR cl1.id = cl2.id) AND cl1.cronjob_id = cl2.cronjob_id
- INNER JOIN prozessstarter AS p ON cl1.cronjob_id = p.id AND p.aktiv = 1
- WHERE (cl2.change_time >= \'%s\' OR cl1.change_time >= \'%s\')
- AND (cl2.change_time <= \'%s\' OR cl1.change_time <= \'%s\')
- %s
- ORDER BY cl2.cronjob_id,cl2.change_time, cl2.id
- ', $dateFrom, $dateFrom,$dateTo,$dateTo, $extra
- );*/
- $sql = sprintf(
- '
- SELECT DATE_FORMAT(cl.change_time, \'%%d.%%m.%%Y %%H:%%i\') as `date`,
- IF(cl.status <> \'abgeschlossen\' AND SUBSTRING(cl.status,1,5) != \'mutex\' ,1,0) as `running` ,
- cl.status,cl.cronjob_id,p.bezeichnung
- FROM cronjob_log as cl
- INNER JOIN prozessstarter AS p ON cl.cronjob_id = p.id AND p.aktiv = 1
- WHERE cl.change_time >= \'%s\'
- AND cl.change_time <= \'%s\'
- %s
- ORDER BY cl.cronjob_id,cl.change_time, cl.id
- ', (new DateTime($dateFrom))->sub(new DateInterval( 'P1D'))->format('Y-m-d H:i:s') ,
- $dateTo, $extra
- );
- $cronjobArr = $this->app->DB->SelectArr($sql);
- $begin = new DateTime($dateFrom);
- if($dateFrom === $dateTo) {
- $dateTo = new DateTime($dateFrom);
- $dateTo = $dateTo->add(new DateInterval( 'P1D'))->format('Y-m-d H:i:s');
- }
-
- $end = new DateTime($dateTo);
-
- list($months, $days, $hours) = explode(' ',$end->diff($begin)->format('%m %d %h'));
- $days += $months * 30;
- if($days === 0) {
- $interval = new DateInterval('PT1M');
- }
- elseif($days <= 1) {
- $interval = new DateInterval('PT5M');
- }
- else {
- $interval = new DateInterval('PT15M');
- }
- foreach($cronjobArr as $row) {
- $cronjobIdToName['K'.$row['cronjob_id']] = $row['bezeichnung'];
- }
-
- $seperated = $this->seperateData($cronjobArr, 'cronjob_id');
- $seperated = $this->roundDataDates($seperated, 'running','date', $interval);
-
- foreach($seperated as $cronjobIdKey => $rows) {
- foreach($rows as $rowKey => $row) {
- $seperated[$cronjobIdKey][$rowKey]['bezeichnung'] = $cronjobIdToName[$cronjobIdKey];
- }
- }
-
- $seperated = $this->formatData($seperated,'running');
-
- $sorted = [];
- foreach($seperated as $cronjobIdKey => $rows) {
- $maxValue = 0;
- foreach($rows as $element) {
- if($element['running'] > $maxValue) {
- $maxValue = $element['running'];
- }
- }
- $sorted[$cronjobIdKey] = $maxValue;
- }
- array_multisort($sorted,SORT_DESC,$seperated);
- $matchedDatas = [];
- $period = new PeriodMatcher($begin, $end, $interval, 'd.m.Y H:i:s');
- $maxCronjobs = $limit === 0?999999:$limit;
- foreach($seperated as $cronjobIdKey => $cronjobRow) {
- $maxCronjobs--;
- if($maxCronjobs < 0) {
- unset($seperated[$cronjobIdKey]);
- continue;
- }
- $matchedDatas[$cronjobIdKey] = $period->matchData(
- $cronjobRow,
- 'date'
- ,$cronjobIdToName[$cronjobIdKey]
- );
- }
-
- $labels = $period->getDates();
- $options = [];
- $chart = new Chart('line',[],[],$options);
- $chart->addLabels($labels);
- $first = true;
- foreach($seperated as $cronjobIdKey => $matchedData) {
- if($first) {
- $first = false;
- $chart->addDatasetAsYAxis(
- new Dataset($cronjobIdToName[$cronjobIdKey],
- $matchedDatas[$cronjobIdKey]), 'left' );//,'logarithmic'
- }
- else {
- $chart->addDataset(new Dataset($cronjobIdToName[$cronjobIdKey], $matchedDatas[$cronjobIdKey]));
- }
- }
-
- $chartRenderer = new HtmlRenderer($chart, 'Laufzeiten', 400, 150);
-
- return $chartRenderer->render();
- }
-
- public function ProzessstarterChart() {
- $this->ProzessstarterMenu();
-
- list($dateFrom, $dateFromTpl, $dateFromTime) =
- $this->getDatesFromForm('prozessstarter_chart_from','prozessstarter_chart_fromtime',true);
- list($dateTo, $dateToTpl, $dateToTime) =
- $this->getDatesFromForm('prozessstarter_chart_to','prozessstarter_chart_totime',false);
-
- $cronjobFilter = $this->app->Secure->GetPOST('prozessstarter_chart_cronjob');
- $this->app->Tpl->Set('PROZESSSTARTER_CHART_FROM',$dateFromTpl);
- $this->app->Tpl->Set('PROZESSSTARTER_CHART_TO',$dateToTpl);
- $this->app->Tpl->Set('PROZESSSTARTER_CHART_FROMTIME',$dateFromTime);
- $this->app->Tpl->Set('PROZESSSTARTER_CHART_TOTIME',$dateToTime);
- $this->app->Tpl->Set('PROZESSSTARTER_CHART_CRONJOB',$cronjobFilter);
-
- if(!empty($cronjobFilter)) {
- $cronjobFilter = $this->app->DB->Select(
- sprintf(
- 'SELECT id FROM prozessstarter WHERE parameter = \'%s\''
- ,$cronjobFilter
- )
- );
- }
- $limit = $this->app->Secure->GetPOST('prozessstarter_chart_limit')?4:0;
- if($limit > 0) {
- $this->app->Tpl->Set('PROZESSSTARTER_CHART_LIMIT',' checked="checked" ');
- }
-
- $this->app->Tpl->Set('TAB1', $this->getChart($dateFrom, $dateTo, $cronjobFilter, $limit));
-
- $this->app->YUI->DatePicker('prozessstarter_chart_from');
- $this->app->YUI->DatePicker('prozessstarter_chart_to');
- $this->app->YUI->TimePicker('prozessstarter_chart_fromtime');
- $this->app->YUI->TimePicker('prozessstarter_chart_totime');
- $this->app->YUI->AutoComplete('prozessstarter_chart_cronjob','prozessstarter_aktiv',1);
- $this->app->Tpl->Parse('PAGE','prozessstarter_chart.tpl');
- }
-
- public function ProzessstarterMinidetail() {
- $cronjobId = (int)$this->app->Secure->GetGET('id');
- $dateFrom = $this->getDatesFromForm('','',true);
- $dateFrom = reset($dateFrom);
- $dateTo = $this->getDatesFromForm('','',false);
- $dateTo = reset($dateTo);
- echo $this->getChart($dateFrom, $dateTo, $cronjobId);
- echo '';
-
- $lastCronjobLogs = $this->app->DB->SelectFirstCols(
- sprintf(
- 'SELECT `id` FROM `cronjob_log` WHERE `cronjob_id` = %d AND `parent_id` = 0 ORDER BY `id` DESC LIMIT 5',
- $cronjobId
- )
- );
- if(!empty($lastCronjobLogs)) {
- $table = new EasyTable($this->app);
- $sql = sprintf(
- "SELECT DATE_FORMAT(cl2.`change_time`,'%%d.%%m.%%Y %%H:%%i:%%s') AS `Datum`,
- IF(cl.id=cl2.id,CONCAT('',cl2.status,' '), cl2.`status`) AS `Status`
- FROM `cronjob_log` AS `cl`
- INNER JOIN `cronjob_log` AS `cl2` ON (cl.id = cl2.parent_id AND cl2.parent_id IN (%s))
- OR (cl.id = cl2.id AND cl2.id IN (%s))
- WHERE cl.`id` IN (%s)
- ORDER BY cl.`id` DESC, cl2.id",
- implode(',', $lastCronjobLogs),
- implode(',', $lastCronjobLogs),
- implode(',', $lastCronjobLogs)
- );
- $table->Query($sql);
- $table->width_headings = ['20%'];
- echo $table->DisplayNew('return','Status','noAction');
- }
- $this->app->erp->ExitWawi();
- }
-
- /**
- * @param string $status
- * @param null|int $prozessstarter
- */
- public function setCronjobStatus($status, $prozessstarter = null)
- {
- if($prozessstarter !== null) {
- $this->currentCronjobId = $prozessstarter;
- if(emptY($this->currentCronjobId)) {
- $this->parentId = 0;
- $this->currentCronjobName = '';
- }
- }
-
- if(!$this->currentCronjobId){
- return;
- }
- if($status === 'gestartet' || $status === 'start') {
- $this->currentCronjobName = $this->app->DB->Select(
- sprintf(
- 'SELECT `parameter` FROM `prozessstarter` WHERE `id` = %d LIMIT 1',
- $this->currentCronjobId
- )
- );
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO `cronjob_log`
- (`cronjob_id`, `cronjob_name`, `status`,`change_time`,`memory_usage`,`memory_peak`)
- VALUES (%d, '%s', 'start',now(),%d,%d)",
- $this->currentCronjobId, $this->currentCronjobName,
- memory_get_usage()/1024, memory_get_peak_usage()/1024
- )
- );
- $this->parentId = $this->app->DB->GetInsertID();
- }
- else {
- if(empty($this->currentCronjobName)) {
- $this->currentCronjobName = $this->app->DB->Select(
- sprintf(
- 'SELECT `parameter` FROM `prozessstarter` WHERE `id` = %d LIMIT 1',
- $this->currentCronjobId
- )
- );
- }
- if(empty($this->parentId)) {
- $this->parentId = (int)$this->app->DB->Select(
- sprintf(
- 'SELECT `id`
- FROM `cronjob_log`
- WHERE status = \'start\' AND `cronjob_id` = %d
- ORDER BY `change_time` DESC, `id` DESC
- LIMIT 1',
- $this->currentCronjobId
- )
- );
- }
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO `cronjob_log`
- (`parent_id`, `cronjob_id`, `cronjob_name`,`status`,`change_time`,`memory_usage`,`memory_peak`)
- VALUES (%d, %d, '%s', '%s',now(),%d,%d)",
- $this->parentId, $this->currentCronjobId, $this->currentCronjobName, $status,
- memory_get_usage()/1024, memory_get_peak_usage()/1024
- )
- );
- }
- $this->app->DB->Update(
- sprintf(
- "UPDATE `prozessstarter` SET `status` = '%s',
- `status_zeit` = now() WHERE `id` = %d LIMIT 1",
- $this->app->DB->real_escape_string($status), $this->currentCronjobId
- )
- );
- }
-
- public function ProzessstarterReset(){
- $id = (int)$this->app->Secure->GetGET('id');
- if($id > 0){
- $this->app->DB->Update(
- sprintf('UPDATE prozessstarter SET letzteausfuerhung=\'0000-00-00 00:00:00\' WHERE id = %s', $id)
- );
- }
-
- $data = ['success' => true];
- echo json_encode($data);
- $this->app->ExitXentral();
- }
-
- public function ProzessstarterDelete()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- if($id > 0){
- $this->app->DB->Delete(
- sprintf(
- 'DELETE FROM `prozessstarter` WHERE `id` = %d LIMIT 1',
- $id
- )
- );
- $this->app->DB->Update(
- sprintf(
- 'UPDATE cronjob_starter_running SET `active` = -1 WHERE `task_id` = %d AND `active` = 1 ',
- $id
- )
- );
- $this->ProzessstarterSystemhealthFillEntries();
- }
-
- $this->app->Location->execute('index.php?module=prozessstarter&action=list');
- }
-
- public function ProzessstarterCreate()
- {
- $this->ProzessstarterMenu();
- parent::ProzessstarterCreate();
- }
-
- public function ProzessstarterList()
- {
- if($this->app->Secure->GetPOST('resetperiode')) {
- $this->resetPeriode();
- $this->app->Location->execute('index.php?module=prozessstarter&action=list');
- }
- if($this->app->Secure->GetPOST('resetcronjob')) {
- $this->resetCronjobs(60);
- }
- $this->ProzessstarterMenu();
- $letzteraufruf = $this->app->erp->GetKonfiguration('prozessstarter_letzteraufruf');
- $diff = time() - strtotime($letzteraufruf);
- if($diff > 60*5+1) // mit sicherheitsabstand :-)
- {
- $this->app->Tpl->Set('MESSAGE','Es sieht so aus, als ob der Prozessstarter Cronjob nicht regelmäßig ausgeführt wird! Bitte aktivieren Sie diesen (
Link zu Helpdesk )!
');
- }
- if($this->app->DB->Select(
- "SELECT id FROM prozessstarter WHERE aktiv = 1 AND parameter = 'autoversand' LIMIT 1"
- )) {
- if($this->app->DB->Select(
- "SELECT id FROM prozessstarter WHERE aktiv = 1 AND parameter = 'autoversand' AND periode < 30 AND art = 'periodisch' LIMIT 1"
- ))
- {
- $this->app->Tpl->Add(
- 'MESSAGE',
- 'Der Prozess Autoversand ist auf eine Periodendauer von unter 30 Minuten eingestellt. Deshalb wird er nicht ausgeführt. Eine zu niedrige Einstellung verursacht eine zu hohe Serverlast
'
- );
- }
- else {
- $this->app->Tpl->Add(
- 'MESSAGE',
- 'Der Prozess Autoversand kann eine hohe Serverlast verursachen. Es ist ratsam die Art auf Uhrzeit oder die Periode auf eine hohe Zahl zu stellen.
'
- );
- }
- }
-
- $system_cronjob_memory_limit = (string)$this->app->erp->GetKonfiguration('system_cronjob_memory_limit');
- $system_cronjob_max_execution_time = (string)$this->app->erp->GetKonfiguration('system_cronjob_max_execution_time');
- if($system_cronjob_memory_limit !== '') {
- if((int)$system_cronjob_memory_limit > 0 && (int)$system_cronjob_memory_limit < 256 * 1024 * 1024) {
- $this->app->Tpl->Add('MESSAGE','Es steht zu wenig Arbeitsspeicher zur Verfügung ('.(round($system_cronjob_memory_limit / 1024 / 1024)).' MB). Dies kann zu Problemen bei den Prozessstartern führen. Technische Info: Bitte passen Sie für den PHP CLI Prozess den Arbeitsspeicher an (z.B. 256 MB oder 512 MB).
');
- }
- }
- if($system_cronjob_max_execution_time !== '' && (int)$system_cronjob_max_execution_time > 0
- && (int)$system_cronjob_max_execution_time < 300) {
- if($system_cronjob_max_execution_time <= 30) {
- $this->app->Tpl->Add(
- 'MESSAGE',
- 'Die Prozessstarterlaufzeit beträgt nur '.$system_cronjob_max_execution_time.' Sekunden.
'
- );
- }
- else{
- $this->app->Tpl->Add(
- 'MESSAGE',
- 'Die Prozessstarterlaufzeit beträgt nur '.$system_cronjob_max_execution_time.' Sekunden.
'
- );
- }
- }
-
- if($this->app->Secure->GetPOST('deaktivieren')) {
- $this->app->erp->SetCheckCronjob(false);
- }
- elseif($this->app->Secure->GetPOST('aktivieren')) {
- $this->app->erp->SetCheckCronjob(true);
- $this->app->Tpl->Add('MESSAGE','{|Prozessstarter wurden global aktiviert!|}
');
- }
- $maintenance = $this->app->erp->GetKonfiguration('update_maintenance') == '1';
- if($maintenance) {
- $this->app->erp->SetKonfigurationValue('update_maintenance', 0);
- //$this->app->Tpl->Add('MESSAGE','{|Xentral befindet sich im Updatemodus: Prozessstarter sind deaktiviert!|}
');
- }
-
- if(method_exists($this->app->erp, 'CheckCronjob')) {
- try {
- $checkCronjob = $this->app->erp->CheckCronjob(false);
- }
- catch (Exception $e) {
- $checkCronjob = $this->app->erp->CheckCronjob();
- }
-
- if($checkCronjob) {
- $this->app->Tpl->Set('CRONJOBBUTTON',' ');
- }
- else {
- $this->app->Tpl->Add('MESSAGE', '{|Achtung: Prozessstarter sind global deaktiviert!|}
');
- $this->app->Tpl->Set('CRONJOBBUTTON', ' ');
- }
- }
-
- list($runningTime, $runningPeriod) = $this->getRunningCronjobs(60);
- if($runningPeriod + $runningTime > 0){
- $this->app->Tpl->Add(
- 'MESSAGE',
- ''
- );
- }
-
- if(!empty($this->app->Secure->GetGET('id'))){
- $this->app->Tpl->Add(
- 'JAVASCRIPT',
- 'window.onload=function(){ ProzessstarterEdit(' . $this->app->Secure->GetGET('id') . ');};'
- );
- }
-
- $countToFrequently = $this->getToFrequentlyCronjobs();
- $message = $this->getFrequentlyMessage($countToFrequently);
- if(!empty($message)) {
- $this->app->Tpl->Add(
- 'MESSAGE',
- '
-
-
'
- );
- }
-
- $this->app->YUI->TableSearch('TAB1','prozessstarterlist', 'show','','',basename(__FILE__), __CLASS__);
- $this->app->Tpl->Parse('PAGE','prozessstarter_list.tpl');
- }
-
- public function ProzessstarterMenu()
- {
- $this->app->erp->Headlines('Prozessstarter');
- $this->app->erp->MenuEintrag('index.php?module=prozessstarter&action=list','Übersicht');
- $this->app->erp->MenuEintrag('ProzessstarterEdit(0)','Neuer Eintrag');
- if($this->app->Secure->GetGET('action')==='list'){
- $this->app->erp->MenuEintrag('index.php?module=einstellungen&action=list', 'Zurück zur Übersicht');
- }
- else {
- $this->app->erp->MenuEintrag('index.php?module=prozessstarter&action=list', 'Zurück zur Übersicht');
- }
- $this->app->erp->MenuEintrag('index.php?module=prozessstarter&action=chart','Laufzeiten');
- }
-
- public function ProzessstarterEdit()
- {
- $this->ProzessstarterMenu();
- //parent::ProzessstarterEdit();
- if($this->app->Secure->GetGET('cmd')==='get'){
- $id = (int)$this->app->Secure->GetPOST('id');
-
- $data = $this->app->DB->SelectRow(
- "SELECT p.id, p.bezeichnung, p.art, p.art_filter, p.startzeit, p.letzteausfuerhung, p.periode,
- p.typ, p.parameter, p.aktiv
- FROM prozessstarter p
- WHERE p.id = '$id'
- LIMIT 1"
- );
-
- if(empty($data)){
- $data['id'] = 0;
- $data['bezeichnung'] = '';
- $data['art'] = '';
- $data['art_filter'] = '';
- $data['startzeit'] = '';
- $data['letzteausfuerhung'] = '';
- $data['periode'] = '';
- $data['typ'] = '';
- $data['parameter'] = '';
- $data['aktiv'] = 0;
-
- }
- echo json_encode($data);
- $this->app->ExitXentral();
- }
- if($this->app->Secure->GetGET('cmd')==='save'){
- $this->ProzessstarterSave();
- }
-
- $this->app->Tpl->Parse('PAGE', 'prozessstarter_list.tpl');
- }
-
-
- protected function ProzessstarterSave()
- {
- $id = (int)$this->app->Secure->GetPOST('id');
- $bezeichnung = trim($this->app->Secure->GetPOST('bezeichnung'));
- $art = trim($this->app->Secure->GetPOST('art'));
- $art_filter = trim($this->app->Secure->GetPOST('art_filter'));
- $startzeit = trim($this->app->Secure->GetPOST('startzeit'));
- $letzteausfuerhung = trim($this->app->Secure->GetPOST('letzteausfuerhung'));
- $periode = trim($this->app->Secure->GetPOST('periode'));
- $typ = trim($this->app->Secure->GetPOST('typ'));
- $parameter = trim($this->app->Secure->GetPOST('parameter'));
- $aktiv = $this->app->Secure->GetPOST('aktiv');
-
- $error = '';
-
- if($bezeichnung == ''){
- $error .= "Bitte Bezeichnung ausfüllen\n";
- }
-
- if($parameter == ''){
- $error .= "Bitte Parameter ausfüllen"."\n";
- }
-
- if($art === 'uhrzeit'){
- $periode = '';
- }
-
- if(!empty($error)){
- echo json_encode(array('status'=>0,'statusText'=>$error));
- $this->app->ExitXentral();
- }
-
- if($id) {
- if($this->app->DB->Select(sprintf('SELECT id FROM prozessstarter WHERE id = %d AND mutex = 1 LIMIT 1', $id)) || !$aktiv){
- $this->app->DB->Update(
- sprintf(
- 'UPDATE cronjob_starter_running SET `active` = -1 WHERE task_id = %d AND `active` = 1 ',
- $id
- )
- );
- }
-
- $this->app->DB->Update(
- "UPDATE prozessstarter
- SET mutex =0, mutexcounter = 0, bezeichnung = '$bezeichnung', art = '$art', art_filter = '$art_filter',
- startzeit = '$startzeit', letzteausfuerhung = '$letzteausfuerhung', periode = '$periode',
- typ = '$typ', parameter = '$parameter', aktiv = '$aktiv'
- WHERE id = '$id'"
- );
- $this->ProzessstarterSystemhealthFillEntries();
- echo json_encode(array('status'=>1));
- $this->app->ExitXentral();
- }
- $this->app->DB->Insert(
- "INSERT INTO prozessstarter
- (bezeichnung, art, art_filter, startzeit, letzteausfuerhung, periode, typ, parameter, aktiv)
- VALUES
- ('$bezeichnung', '$art', '$art_filter', '$startzeit', '$letzteausfuerhung', '$periode', '$typ', '$parameter', '$aktiv')"
- );
-
- echo json_encode(array('status'=>1));
- $this->app->ExitXentral();
- }
-
- /**
- * @param string $uid
- * @param array $task
- *
- * @return bool
- */
- public function checkCronjobRunning($uid, $task) {
- $this->removeKilledCronjobs();
-
- $this->app->DB->Delete(
- 'DELETE FROM cronjob_starter_running WHERE last_time < DATE_SUB(NOW(), INTERVAL 6 HOUR) AND `active` = 1'
- );
-
- if($task['art'] === 'uhrzeit') {
- return true;
- }
- if(
- $this->app->DB->Select(
- sprintf(
- 'SELECT id FROM cronjob_starter_running WHERE `active` = 1 AND uid = \'%s\' LIMIT 1',
- $this->app->DB->real_escape_string($uid)
- )
- )
- ) {
- return true;
- }
- $crojobLimit = $this->app->erp->Firmendaten('cronjob_limit');
- if($crojobLimit <= 0) {
- $crojobLimit = 3;
- }
-
- list($runningTime, $runningPeriod) = $this->getRunningCronjobs();
- return $runningPeriod + $runningTime < $crojobLimit;
- }
-
- /**
- * @param array $output
- * @param array $task
- */
- public function checkCronjobMemory($output, $task)
- {
- if(empty($output)) {
- return;
- }
-
- foreach($output as $row) {
- if(strpos($row, 'Segmentation fault')) {
- try {
- /** @var Systemhealth $systemhealth */
- $systemhealth = $this->app->erp->LoadModul('systemhealth');
- if(!empty($systemhealth) && method_exists($systemhealth,'createEntryIfError')) {
- $systemhealth->createEntryIfError(
- 'cronjobs','segmentation_fault','Segmentation Fault Fehler','error', $row, true
- );
- $systemhealth->createEvent('cronjobs','segmentation_fault','error','prozessstarter',$task['id']);
- }
- }
- catch(Exception $e) {
-
- }
- break;
- }
- }
-
- foreach($output as $row) {
- if(strpos($row, 'Out of memory') === false) {
- continue;
- }
- try {
- /** @var Systemhealth $systemhealth */
- $systemhealth = $this->app->erp->LoadModul('systemhealth');
- if(empty($systemhealth) || !method_exists($systemhealth, 'changeStatus')) {
- return;
- }
- $systemhealth->changeStatus('cronjobs', 'out_of_memory', 'warning', $task['bezeichnung'] . ': ' . $row);
- $systemhealth->createEvent('cronjobs','out_of_memory','warning','prozessstarter',$task['id']);
- }
- catch(Exception $e) {
-
- }
- return;
- }
- }
-
- /**
- * @param string|int $uid
- * @param array $task
- */
- public function checkIfCronjobRunning($uid, $task)
- {
- $runningTask = $this->getCronjobByUid($uid);
- if(empty($runningTask) || empty($runningTask['task_id']) || $runningTask['active'] != 1
- || $runningTask['task_id'] != $task['id']
- ) {
- return;
- }
- $this->app->erp->LogFile(
- sprintf(
- 'Cronjob %s with pid: %s and taskid: %d cronjob_starter_running_id %d was not closed cleanly by starter-proccess.',
- $task['bezeichnung'], $uid, $task['id'], $runningTask['id']
- )
- );
- $this->setCronjobStatus('error', $task['id']);
- $this->setCronjobRunning($uid, $task['id'], false);
- }
-
- /**
- * @param string|int $uid
- * @param bool $fromStarter2
- */
- public function closeAndLogCronjob($uid, $fromStarter2 = false)
- {
- $cronjob = $this->getCronjobByUid($uid);
- if(empty($cronjob)) {
- return;
- }
-
- if($fromStarter2) {
- $this->app->erp->LogFile('Cronjob '.$cronjob['cronjob_name'].' called exit uid: '.$uid);
- if(!empty($cronjob['task_id'])) {
- $this->setCronjobStatus('error', $cronjob['task_id']);
- $this->setCronjobRunning($uid, $cronjob['task_id'], false);
- }
- return;
- }
- $this->app->erp->LogFile('Cronjob with uid: '.$uid.' was killed by module: '.$cronjob['cronjob_name']);
- if(!empty($cronjob['task_id'])) {
- $this->setCronjobStatus('error', $cronjob['task_id']);
- try {
- /** @var Systemhealth $systemhealth */
- $systemhealth = $this->app->erp->LoadModul('systemhealth');
- if($systemhealth !== null && method_exists($systemhealth, 'createEvent')){
- $systemhealth->createEvent('cronjobs', 'errors', 'warning', 'prozessstarter', $cronjob['task_id']);
- }
- }
- catch (Exception $d) {
-
- }
- }
- $this->setCronjobRunning($uid, null,false);
- }
-
- public function removeKilledCronjobs()
- {
- if(!function_exists('posix_getsid') ||
- !function_exists('getmypid') ||
- empty(posix_getsid(getmypid()))){
- return;
- }
- foreach ($this->getAllRunningCronjobs() as $cronjob) {
- if(!is_numeric($cronjob['uid']) || $cronjob['uid'] <= 0) {
- continue;
- }
- if(!posix_getsid($cronjob['uid'])){
- $this->app->DB->Update(
- sprintf(
- 'UPDATE `cronjob_starter_running` SET `active` = -1 WHERE `id` = %d AND `active` = 1',
- $cronjob['id']
- )
- );
- if($this->app->DB->affected_rows() > 0) {
- $this->app->erp->LogFile(
- $this->app->DB->real_escape_string(
- 'Cronjob '.(
- $this->app->DB->Select(
- sprintf(
- 'SELECT bezeichnung FROM prozessstarter WHERE id = %d LIMIT 1 ',
- $cronjob['task_id']
- )
- )
- ).' with pid: '.
- $cronjob['uid'].' and taskid: '.
- $cronjob['task_id'].' cronjob_starter_running_id '.
- $cronjob['id'].' was not closed cleanly by starter-proccess.'
- )
- );
- }
- }
- elseif($cronjob['task_id'] > 0) {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE prozessstarter
- SET mutexcounter = 1, letzteausfuerhung = NOW()
- WHERE mutexcounter > 1 AND aktiv = 1 AND id = %d AND letzteausfuerhung > DATE_SUB(NOW(), INTERVAL 1 HOUR)',
- $cronjob['task_id']
- )
- );
- $this->app->DB->Update(
- sprintf(
- 'UPDATE prozessstarter
- SET mutexcounter = 1, letzteausfuerhung = NOW()
- WHERE mutexcounter > 4 AND aktiv = 1 AND id = %d AND letzteausfuerhung > DATE_SUB(NOW(), INTERVAL 5 MINUTE)',
- $cronjob['task_id']
- )
- );
- }
- }
- }
-
- /**
- * @param int $minutes
- *
- * @return int
- */
- protected function resetCronjobs($minutes = 0) {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE `cronjob_starter_running`
- SET `active` = -1
- WHERE `active` = 1 AND `last_time` < DATE_SUB(NOW(), INTERVAL %d MINUTE)',
- (int)$minutes
- )
- );
- return (int)$this->app->DB->affected_rows();
- }
-
- /**
- * @return array
- */
- public function getAllRunningCronjobs()
- {
- $runningTasks = $this->app->DB->SelectArr(
- 'SELECT `uid`, `type`, `id`, `task_id`
- FROM `cronjob_starter_running`
- WHERE `active` = 1'
- );
- if(empty($runningTasks)) {
- return [];
- }
-
- return $runningTasks;
- }
-
- /**
- * @param string|int $uid
- *
- * @return array
- */
- public function getCronjobByUid($uid)
- {
- $tasks = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT csr.`uid`, csr.`type`, csr.`id`, csr.`task_id`, csr.`active`, p.bezeichnung AS `cronjob_name`
- FROM `cronjob_starter_running` AS csr
- LEFT JOIN `prozessstarter` AS p ON csr.`task_id` = p.`id`
- WHERE csr.`uid` = \'%s\' AND csr.`uid` <> \'\'',
- $this->app->DB->real_escape_string($uid)
- )
- );
- if(empty($tasks)) {
- return [];
- }
-
- return $tasks;
- }
-
-
- /**
- * @param int $minutes
- *
- * @return array
- */
- public function getRunningCronjobs($minutes = 0) {
- if($minutes <= 0){
- $runningTasks = $this->app->DB->SelectArr(
- 'SELECT COUNT(DISTINCT uid) AS co, type
- FROM cronjob_starter_running
- WHERE `active` = 1
- GROUP BY type'
- );
- }
- else {
- $runningTasks = $this->app->DB->SelectArr(
- sprintf(
- 'SELECT COUNT(DISTINCT uid) AS co, type
- FROM cronjob_starter_running
- WHERE `active` = 1 AND last_time < DATE_SUB(NOW(), INTERVAL %d MINUTE)
- GROUP BY `type`',
- (int)$minutes
- )
- );
- }
- if(empty($runningTasks)) {
- return [0, 0];
- }
- $runningTime = 0;
- $runningPeriod = 0;
- foreach($runningTasks as $runningTask) {
- if($runningTask['type'] === 'uhrzeit') {
- $runningTime = (int)$runningTask['co'];
- }
- elseif($runningTask['type'] === 'periodisch') {
- $runningPeriod = (int)$runningTask['co'];
- }
- }
-
- return [$runningTime, $runningPeriod];
- }
-
- /**
- * @return int|string|null
- */
- public function getNewUid()
- {
- $uid = function_exists('getmypid')?getmypid():null;
- if(!empty($uid) &&
- !$this->app->DB->Select(
- sprintf(
- 'SELECT `id` FROM `cronjob_starter_running` WHERE `active` = 1 AND `uid` = \'%s\'',
- $this->app->DB->real_escape_string($uid)
- )
- )
- ) {
- $this->changeUid($uid);
-
- return $uid;
- }
-
- return uniqid('', false);
- }
-
- /**
- * @param string $uid
- */
- public function changeUid($uid)
- {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE `cronjob_starter_running`
- SET `uid` = \'%s\' WHERE `uid` = \'%s\'',
- $this->app->DB->real_escape_string($uid.uniqid('', false)),$this->app->DB->real_escape_string($uid)
- )
- );
- }
-
- /**
- * @param int|string $uid
- * @param null $task
- * @param bool $active
- */
- public function setCronjobRunning($uid, $task = null, $active = true) {
- if($active === false) {
- if(!empty($task)) {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE cronjob_starter_running SET `task_id` = 0, last_time = NOW() WHERE uid = \'%s\' AND `active` = 1',
- $this->app->DB->real_escape_string($uid)
- )
- );
- return;
- }
- $this->app->DB->Update(
- sprintf(
- 'UPDATE cronjob_starter_running SET `active` = 0, last_time = NOW() WHERE uid = \'%s\'',
- $this->app->DB->real_escape_string($uid)
- )
- );
- if(is_numeric($uid)){
- $this->changeUid($uid);
- }
- return;
- }
- $check = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT * FROM cronjob_starter_running WHERE uid = \'%s\' LIMIT 1',
- $this->app->DB->real_escape_string($uid)
- )
- );
- if(empty($check)) {
- $this->app->DB->Insert(
- sprintf(
- 'INSERT INTO `cronjob_starter_running` (`active`, `last_time`, `type`, `uid`, `task_id`)
- VALUES (1, NOW(), \'%s\', \'%s\', %d)',
- $this->app->DB->real_escape_string($task['art']), $this->app->DB->real_escape_string($uid), (int)$task['id']
- )
- );
- return;
- }
- if(!empty($check['task_id']) && ($uid != $check['uid'] || $check['task_id'] != $task['id'])) {
- $this->app->erp->LogFile(
- $this->app->DB->real_escape_string(
- sprintf(
- 'Cronjob: %s id: %d was not cleanly closed.',
- $this->app->DB->Select(
- sprintf(
- 'SELECT bezeichnung FROM prozessstarter WHERE id = %d LIMIT 1',
- $task['id']
- )
- ) ,
- $task['id']
- )
- )
- );
- }
- $this->app->DB->Update(
- sprintf(
- 'UPDATE `cronjob_starter_running` SET `active` = 1, `last_time` = NOW(), `type` = \'%s\', task_id = %d WHERE id = %d LIMIT 1',
- $this->app->DB->real_escape_string($task['art']), (int)$task['id'],(int)$check['id']
- )
- );
- $this->app->DB->Delete(
- sprintf(
- 'DELETE FROM `cronjob_starter_running` WHERE `id` <> %d AND `uid` = \'%s\'',
- $check['id'], $this->app->DB->real_escape_string($uid)
- )
- );
- }
-
- /**
- * @param string $parameter
- * @param string $target
- * @param bool $withForm
- */
- public function checkActiveCronjob($parameter, $target = 'MESSAGE', $withForm = true)
- {
- if(empty($parameter)) {
- return;
- }
-
- $hasPermission = $this->app->erp->RechteVorhanden('prozessstarter','edit');
-
- $activated = false;
- if($hasPermission === true && $this->app->Secure->GetPOST('activatecronjob')) {
- $cronjobId = (int)$this->app->Secure->GetPOST('cronjobid');
- $this->app->DB->Update(
- sprintf(
- "UPDATE prozessstarter SET aktiv = 1 WHERE id = %d AND parameter = '%s'",
- $cronjobId, $this->app->DB->real_escape_string($parameter)
- )
- );
- if($this->app->DB->affected_rows() > 0) {
- $activated = true;
- }
- }
- $cronjob = $this->app->DB->SelectRow(
- sprintf(
- "SELECT p.id, p.aktiv, p.bezeichnung
- FROM prozessstarter as p
- WHERE p.parameter = '%s'
- ORDER BY aktiv = 1 DESC
- LIMIT 1",
- $this->app->DB->real_escape_string($parameter)
- )
- );
-
- $message = '';
-
- if(empty($cronjob)) {
- $link = '';
- if($hasPermission === true) {
- $link = 'Zu Prozessstartern ';
- }
- $message = sprintf(
- 'Der Prozessstarter %s existiert nicht. %s
',
- $this->app->DB->real_escape_string($parameter),
- $link
- );
- $this->app->Tpl->Add($target, $message);
-
- return;
- }
- if(empty($cronjob['aktiv'])) {
- $button = '';
- if($hasPermission && $withForm) {
- $button = sprintf('
- ', $cronjob['id']);
- }
-
- $this->app->Tpl->Add(
- $target,
- ($withForm?'':'')
- );
-
- return;
- }
-
- if (!$this->isCronjobRunningRegular($cronjob['id'])) {
- $message = sprintf(
- 'Es sieht so aus, als ob der Prozessstarter "%s" nicht regelmäßig
- ausgeführt wird! Bitte aktivieren Sie diesen (
Link zu Helpdesk )!
-
',
- $parameter
- );
- $this->app->Tpl->Add($target, $message);
-
- return;
- }
-
-
- if($activated) {
- $message = sprintf(
- 'Der Prozessstarter %s wurde aktiviert.
',
- $cronjob['bezeichnung']
- );
- $this->app->Tpl->Add($target, $message);
- }
- }
-
- /**
- * @param $id
- *
- * @return bool
- */
- public function isCronjobRunningRegular($id)
- {
- $cronjob = $this->app->DB->SelectRow(
- sprintf(
- "SELECT p.id, p.aktiv, p.art, p.letzteausfuerhung, p.periode, p.art_filter, p.startzeit
- FROM `prozessstarter` as `p`
- WHERE p.id = '%s'
- ORDER BY p.aktiv = 1 DESC
- LIMIT 1",
- $this->app->DB->real_escape_string($id)
- )
- );
-
- if (empty($cronjob)) {
- return false;
- }
- if ($cronjob['letzteausfuerhung'] === '0000-00-00 00:00:00') {
- return true;
- }
-
- $lastTime = DateTime::createFromFormat('Y-m-d H:i:s',$cronjob['letzteausfuerhung']);
- if ($lastTime === false) {
- return false;
- }
- try {
- $now = new DateTime('now');
- $nowDb = new DateTime($this->app->DB->Select('SELECT NOW()'));
- } catch (Exception $e) {
- return false;
- }
-
- $period = 0;
- if ($cronjob['art'] === 'periodisch') {
- $period = (float)$cronjob['periode'];
- $period += 5; //tolerance
- }
- $dayOfWeekNumber = (int)$now->format('w');
- if ($cronjob['art'] === 'uhrzeit') {
- $period = 1;
- if((int)$cronjob['art_filter'] > 0) {
- $period = $dayOfWeekNumber - (int)$cronjob['art_filter'];
- if ($period < 1) {
- $period = 7 + $period;
- }
- }
- $period++; //rolerance
- $period *= 1440;
- }
-
- $diff = ceil(($now->getTimestamp() - $lastTime->getTimestamp()) / 60);
- $diffDb = ceil(($nowDb->getTimestamp() - $lastTime->getTimestamp()) / 60);
-
- return $period > $diff || $period > $diffDb;
- }
-}
+app->Tpl->Add('JQUERYREADY', "$('#nuraktiv').click( function() { fnFilterColumn1( 0 ); } );");
+ for ($r = 1;$r < 2;$r++) {
+ $this->app->Tpl->Add('JAVASCRIPT', '
+ function fnFilterColumn' . $r . ' ( i )
+ {
+ if(oMoreData' . $r . $name . '==1)
+ oMoreData' . $r . $name . ' = 0;
+ else
+ oMoreData' . $r . $name . ' = 1;
+
+ $(\'#' . $name . '\').dataTable().fnFilter(
+ \'\',
+ i,
+ 0,0
+ );
+ }
+ ');
+ }
+
+
+ // START EXTRA checkboxen
+
+ // ENDE EXTRA checkboxen
+
+
+ // headings
+
+ $heading = array('','Bezeichnung', 'Art', 'Periode', 'mind. Empfohlen', 'Aktiviert', 'Laeuft', 'Letzte Ausführung', 'Typ', 'Parameter','Status', 'Menü');
+ $width = array('1%','15%', '10%', '10%', '10%', '10%','10%', '15%', '5%', '10%','20%', '1%');
+ $findcols = array('p.id','p.bezeichnung', 'p.art', 'CAST(p.periode as SIGNED)',"recommended_period",
+ "if(p.aktiv,'ja','-')", 'p.mutex', 'p.letzteausfuerhung', 'p.typ', 'p.parameter','p.status', 'p.id');
+ $searchsql = array('p.bezeichnung', 'p.art', 'p.periode', 'p.aktiv', 'p.mutex',
+ "date_format(p.letzteausfuerhung, '%d.%m.%Y %H:%i:%s')", 'p.typ', 'p.parameter','p.status');
+ $defaultorder = 2;
+ $defaultorderdesc = 0;
+ $menu = '';
+ $moreinfo = true;
+ $menucol = count($heading) - 1;
+
+ // SQL statement
+ $sql = "SELECT SQL_CALC_FOUND_ROWS p.id,
+ ' app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS open,
+ p.bezeichnung, p.art,
+ p.periode,
+ IF(p.recommended_period >0 AND p.art='periodisch', p.recommended_period,'-'),
+ if(p.aktiv,'ja','-') as aktiviert, if(p.mutex,
+ CONCAT(
+ 'ja',if(p.mutexcounter > 0,concat(' (Anzahl Versuche ',p.mutexcounter,')'),'')
+ ),'-')
+ as laeuft, date_format(p.letzteausfuerhung, '%d.%m.%Y %H:%i:%s') as 'letzte Ausführung',
+ p.typ, p.parameter,concat(p.status_zeit,' ',p.status), p.id
+ FROM `prozessstarter` AS `p` ";
+ $where = ' p.id > 0 ';
+
+ $more_data1 = $this->app->Secure->GetGET('more_data1');
+ if ($more_data1 == 1) {
+ $subwhere[] = ' p.aktiv=1 ';
+ }
+ if(!empty($subwhere)){
+ $tmp = implode(' AND ', $subwhere);
+ }
+ if($tmp!=''){
+ $where .= " AND ($tmp)";
+ }
+
+ //$groupby=" GROUP by z.adresse_abrechnung ";
+
+ // gesamt anzahl
+
+ $count = "SELECT COUNT(id) FROM prozessstarter p WHERE $where";
+ break;
+ }
+
+ $erg = array();
+
+ foreach($erlaubtevars as $k => $v)
+ {
+ if(isset($$v)){
+ $erg[$v] = $$v;
+ }
+ }
+ return $erg;
+ }
+
+ /**
+ * Prozessstarter constructor.
+ *
+ * @param Application $app
+ * @param bool $intern
+ */
+ public function __construct($app, $intern = false) {
+ $this->app=$app;
+ if($intern) {
+ return;
+ }
+
+ $this->app->ActionHandlerInit($this);
+
+ $this->app->ActionHandler("create","ProzessstarterCreate");
+ $this->app->ActionHandler("edit","ProzessstarterEdit");
+ $this->app->ActionHandler("list","ProzessstarterList");
+ $this->app->ActionHandler("delete","ProzessstarterDelete");
+ $this->app->ActionHandler("reset","ProzessstarterReset");
+ $this->app->ActionHandler("chart","ProzessstarterChart");
+ $this->app->ActionHandler("minidetail","ProzessstarterMinidetail");
+
+ $this->app->ActionHandlerListen($app);
+ }
+
+ public function Install() {
+ $this->app->erp->CheckTable('cronjob_log');
+ $this->app->erp->CheckColumn('parent_id','INT(11)','cronjob_log','DEFAULT 0 NOT NULL');
+ $this->app->erp->CheckColumn('cronjob_id','INT(11)','cronjob_log','DEFAULT 0 NOT NULL');
+ $this->app->erp->CheckColumn('memory_usage','INT(11)','cronjob_log','DEFAULT 0 NOT NULL');
+ $this->app->erp->CheckColumn('memory_peak','INT(11)','cronjob_log','DEFAULT 0 NOT NULL');
+ $this->app->erp->CheckColumn('cronjob_name','varchar(255)','cronjob_log','DEFAULT "" NOT NULL');
+ $this->app->erp->CheckColumn('change_time','timestamp','cronjob_log','DEFAULT CURRENT_TIMESTAMP NOT NULL');
+ $this->app->erp->CheckColumn('status','varchar(32)','cronjob_log','DEFAULT "" NOT NULL');
+ $this->app->erp->CheckIndex('cronjob_log', ['cronjob_id','change_time']);
+ $this->app->erp->RegisterHook('ajax_filter_hook1','prozessstarter','ProzessstarterAjaxFilter');
+ $this->app->erp->RegisterHook('systemhealth_fill_entries','prozessstarter','ProzessstarterSystemhealthFillEntries');
+
+ $this->app->erp->CheckTable('cronjob_starter_running');
+ $this->app->erp->CheckColumn('uid','VARCHAR(23)','cronjob_starter_running','NOT NULL');
+ $this->app->erp->CheckColumn('active','TINYINT(1)','cronjob_starter_running','DEFAULT 0 NOT NULL');
+ $this->app->erp->CheckColumn('type','VARCHAR(10)','cronjob_starter_running','NOT NULL');
+ $this->app->erp->CheckColumn('task_id','INT(11)','cronjob_starter_running','DEFAULT 0 NOT NULL');
+ $this->app->erp->CheckColumn('last_time','TIMESTAMP','cronjob_starter_running','DEFAULT CURRENT_TIMESTAMP NOT NULL');
+ $this->app->erp->CheckIndex('cronjob_starter_running',['uid','type']);
+ if(!$this->app->erp->GetKonfiguration('prozessstarter_log_repair2')) {
+ $cronjobLogs = $this->app->DB->Query('SELECT * FROM cronjob_log WHERE cronjob_id > 0 ORDER BY cronjob_id, change_time, id');
+ $cronjobId = 0;
+ $parentId = 0;
+ while($cronjobLog = $this->app->DB->Fetch_Assoc($cronjobLogs)) {
+ if($cronjobId !== $cronjobLog['cronjob_id']) {
+ $cronjobId = $cronjobLog['cronjob_id'];
+ $parentId = 0;
+ }
+ if($cronjobLog['status'] === 'start' || $cronjobLog['status'] === 'gestartet') {
+ $parentId = $cronjobLog['id'];
+ }
+ elseif($parentId != $cronjobLog['parent_id']) {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE cronjob_log SET parent_id = %d WHERE id = %d',
+ $parentId, $cronjobLog['id']
+ )
+ );
+ }
+ }
+ $this->app->erp->SetKonfigurationValue('prozessstarter_log_repair2', 1);
+ }
+ $this->removeKilledCronjobs();
+ }
+
+ /**
+ * @return array
+ */
+ public function getToFrequentlyCronjobs()
+ {
+ return $this->app->DB->SelectFirstCols(
+ sprintf(
+ "SELECT DISTINCT `parameter`
+ FROM `prozessstarter`
+ WHERE `aktiv` = 1 AND `art` = 'periodisch' AND `periode` < `recommended_period` AND `recommended_period` > 0"
+ )
+ );
+ }
+
+ /**
+ * @param array $parmeterList
+ *
+ * @return string
+ */
+ public function getFrequentlyMessage($parmeterList)
+ {
+ if(empty($parmeterList)) {
+ return '';
+ }
+ if(count($parmeterList) === 1) {
+ return 'Der Prozessstarter '
+ .implode(', ', $parmeterList).' läuft häufiger als empfohlen';
+ }
+
+ return 'Die Prozessstarter '
+ .implode(', ', $parmeterList).' laufen häufiger als empfohlen';
+ }
+
+ /**
+ * @param int $id
+ *
+ * @return bool
+ */
+ public function resetPeriode($id = 0)
+ {
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE `prozessstarter`
+ SET `periode` = `recommended_period`
+ WHERE `aktiv` = 1 AND `art` = 'periodisch' AND `periode` < `recommended_period` AND `recommended_period` > 0
+ AND (%d = 0 OR `id` = %d)",
+ $id, $id
+ )
+ );
+
+ $ret = $this->app->DB->affected_rows() > 0;
+ if($ret) {
+ $this->ProzessstarterSystemhealthFillEntries();
+ }
+
+ return $ret;
+ }
+
+ public function ProzessstarterSystemhealthFillEntries()
+ {
+ $countToFrequently = $this->getToFrequentlyCronjobs();
+ $message = $this->getFrequentlyMessage($countToFrequently);
+ if(!empty($message)) {
+ $message = ''.$message.' ';
+ }
+
+ /** @var Systemhealth $systemhealth */
+ $systemhealth = $this->app->loadModule('systemhealth');
+ $systemhealth->changeStatus('cronjobs', 'frequently', empty($message)?'OK':'warning', $message);
+ }
+
+ /**
+ * @param string $filtername
+ * @param array $newarr
+ * @param string $term
+ * @param string $term2
+ * @param string $term3
+ */
+ public function ProzessstarterAjaxFilter($filtername, &$newarr, $term, $term2, $term3)
+ {
+ if($filtername === 'prozessstarter_aktiv'){
+ $arr = $this->app->DB->SelectArr(
+ "SELECT DISTINCT CONCAT(parameter,' ',bezeichnung) as `name`
+ FROM prozessstarter
+ WHERE parameter LIKE '%$term%' OR bezeichnung = '%$term%'
+ ORDER BY parameter"
+ );
+ if(empty($arr)) {
+ return;
+ }
+
+ foreach($arr as $row) {
+ $newarr[] = $row['name'];
+ }
+ }
+ }
+
+ /**
+ * @param string $date
+ * @param int $roundMinutes
+ *
+ * @return string
+ */
+ protected function roundDate($date, $roundMinutes = 15) {
+ $return = substr($date,0,14);
+ $minutes = substr($date,14,2);
+ $minutes = floor($minutes / $roundMinutes) * $roundMinutes;
+ if(strlen($minutes) === 1) {
+ $minutes = '0'.$minutes;
+ }
+
+ return $return.$minutes.':00';
+ }
+
+ /**
+ * @param array $data
+ * @param string $field
+ *
+ * @return array
+ */
+ protected function seperateData($data, $field) {
+ $ret = [];
+ foreach($data as $row) {
+ $ret['K'.$row[$field]][] = $row;
+ }
+
+ return $ret;
+ }
+
+ /**
+ * @param array $data
+ * @param string $fieldValue
+ * @param string $dateField
+ * @param DateInterval $interval
+ *
+ * @return array
+ */
+ protected function roundDataDates($data, $fieldValue, $dateField, $interval) {
+ $return = [];
+ if(empty($data)) {
+ return [];
+ }
+ $seconds = 60 * $interval->i;
+ foreach($data as $key => $arr) {
+ $cronjobIntervals = [];
+ foreach($arr as $rowIndex => $row) {
+ if($row[$fieldValue] > 0) {
+ if(empty($cronjobIntervals) || empty($cronjobIntervals[count($cronjobIntervals) - 1])) {
+ $cronjobIntervals[] = ['start' => $this->roundDate($row[$dateField]), 'startexact'=>$row[$dateField]];
+ }
+ $cronjobIntervals[count($cronjobIntervals) - 1]['end'] = $this->roundDate($row[$dateField], $interval->i);
+ $cronjobIntervals[count($cronjobIntervals) - 1]['endexact'] = $row[$dateField];
+ }
+ else {
+ if(empty($cronjobIntervals)) {
+ continue;
+ }
+ if(!empty($cronjobIntervals[count($cronjobIntervals) - 1])) {
+ $cronjobIntervals[count($cronjobIntervals) - 1]['end'] = $this->roundDate($row[$dateField], $interval->i);
+ $cronjobIntervals[count($cronjobIntervals) - 1]['endexact'] = $row[$dateField];
+ }
+ $cronjobIntervals[] = [];
+ }
+ }
+ $return[$key] = [];
+ $dateToKeys = [];
+ foreach($cronjobIntervals as $cronjobInterval) {
+ if(empty($cronjobInterval)) {
+ continue;
+ }
+
+ $start = new DateTime($cronjobInterval['start']);
+ $end = new DateTime($cronjobInterval['end']);
+
+ $val = 100* (
+ (strtotime($cronjobInterval['endexact']) - strtotime($cronjobInterval['startexact'])+0.1) /
+ (strtotime($cronjobInterval['start']==$cronjobInterval['end']?$cronjobInterval['start']+$seconds:$cronjobInterval['end'])
+ -strtotime($cronjobInterval['start']))
+ );
+ if($val > 100) {
+ $val = 100;
+ }
+
+ $dateFielValue = $start->format('d.m.Y H:i:s');
+ if(isset($dateToKeys[$dateFielValue])) {
+ $return[$key][$dateToKeys[$dateFielValue]][$fieldValue] += $val;
+ if($return[$key][$dateToKeys[$dateFielValue]][$fieldValue] > 100) {
+ $return[$key][$dateToKeys[$dateFielValue]][$fieldValue] = 100;
+ }
+ }
+ else {
+ $return[$key][] = [$dateField => $dateFielValue, $fieldValue => $val];
+ $dateToKeys[$dateFielValue] = count($return[$key])-1;
+ }
+ while(strtotime($start->format('Y-m-d H:i:s')) < strtotime($end->format('Y-m-d H:i:s'))) {
+ $start->add($interval);
+ $dateFielValue = $start->format('d.m.Y H:i:s');
+ if(isset($dateToKeys[$dateFielValue])) {
+ $return[$key][$dateToKeys[$dateFielValue]][$fieldValue] += $val;
+ }
+ else {
+ $return[$key][] = [$dateField => $dateFielValue, $fieldValue => $val];
+ $dateToKeys[$dateFielValue] = count($return[$key])-1;
+ }
+ }
+ }
+ }
+
+ return $return;
+ }
+
+ /**
+ * @param array $data
+ * @param string $field
+ * @param string $nameField
+ *
+ * @return mixed
+ */
+ protected function formatData($data, $field = 'running',$nameField = 'bezeichnung') {
+ if(empty($data)) {
+ return $data;
+ }
+ foreach($data as $key => $arr) {
+ if(empty($arr)) {
+ continue;
+ }
+ foreach($arr as $rowIndex => $row) {
+ $data[$key][$rowIndex][$row[$nameField]] = $row[$field]?round($row[$field],2):0;//sqrt
+ }
+ }
+
+ return $data;
+ }
+
+ /**
+ * @param string $formelementDate
+ * @param string $formelementTime
+ * @param bool $from
+ *
+ * @return array
+ */
+ public function getDatesFromForm($formelementDate, $formelementTime, $from = false) {
+ $last12h = $this->app->Secure->GetPOST('last12h');
+ $last6h = $this->app->Secure->GetPOST('last6h');
+ if(!empty($last12h) || !empty($last6h)) {
+ $diff = 12;
+ if(!empty($last6h)) {
+ $diff = 6;
+ }
+ if($from) {
+ list($date, $time) = explode(' ', (new DateTime())->add(new DateInterval('PT5M'))->sub(new DateInterval('PT'.$diff.'H'))->format('d.m.Y H:i'),2);
+ }
+ else {
+ list($date, $time) = explode(' ', (new DateTime())->add(new DateInterval('PT5M'))->format('d.m.Y H:i'),2);
+ }
+ }
+ else{
+ if(!empty($formelementDate)) {
+ $date = $this->app->Secure->GetPOST($formelementDate);
+ }
+ else{
+ $date = '';
+ }
+ if(!empty($formelementTime)) {
+ $time = $this->app->Secure->GetPOST($formelementTime);
+ }
+ else{
+ $time = '';
+ }
+ }
+ if(empty($time)) {
+ $time = '00:00:00';
+ }
+ else {
+ $time = substr($time,0,5). ':00';
+ }
+ if(empty($date)) {
+ $date = new DateTime();
+ if($from) {
+ $date->sub(new DateInterval('P1D'));
+ }
+ $dateFormated = $date->format('d.m.Y');
+ $timeFormated = $date->format('H:i');
+ $date = $date->format('Y-m-d H:i:s');
+ }
+ elseif(strpos($date,'.') !== false) {
+ $dateFormated = substr($date,0, 10);
+ $date = $this->app->String->Convert($dateFormated,'%1.%2.%3','%3-%2-%1').' '.$time;
+ $timeFormated = substr($time,0,5);
+ }
+ else {
+ $dateFormated = $this->app->String->Convert($date,'%3-%2-%1','%1.%2.%3').' '.$time;
+ $timeFormated = substr($time,0,5);
+ }
+
+ $date = $this->roundDate($date);
+
+ return [$date, $dateFormated, $timeFormated];
+ }
+
+
+ /**
+ * @param string $dateFrom
+ * @param string $dateTo
+ * @param int $cronjobId
+ * @param int $limit
+ *
+ * @return string
+ */
+ protected function getChart($dateFrom, $dateTo, $cronjobId = 0, $limit = 0) {
+ $extra = '';
+ if($cronjobId > 0) {
+ $extra = sprintf(' AND p.id = %d ',$cronjobId);
+ }
+
+ /*$sql = sprintf(
+ '
+ SELECT DATE_FORMAT(cl2.change_time, \'%%d.%%m.%%Y %%H:%%i\') as `date`,
+ IF(cl2.status <> \'abgeschlossen\' AND SUBSTRING(cl2.status,1,5) != \'mutex\' ,1,0) as `running` ,cl2.status,cl2.cronjob_id,p.bezeichnung
+ FROM (
+ SELECT change_time, id ,cronjob_id
+ FROM cronjob_log
+ WHERE status = \'start\'
+ ) AS cl1
+ INNER JOIN (
+ SELECT change_time, id, status, parent_id ,cronjob_id
+ FROM cronjob_log
+ ) AS cl2 ON (cl1.id = cl2.parent_id OR cl1.id = cl2.id) AND cl1.cronjob_id = cl2.cronjob_id
+ INNER JOIN prozessstarter AS p ON cl1.cronjob_id = p.id AND p.aktiv = 1
+ WHERE (cl2.change_time >= \'%s\' OR cl1.change_time >= \'%s\')
+ AND (cl2.change_time <= \'%s\' OR cl1.change_time <= \'%s\')
+ %s
+ ORDER BY cl2.cronjob_id,cl2.change_time, cl2.id
+ ', $dateFrom, $dateFrom,$dateTo,$dateTo, $extra
+ );*/
+ $sql = sprintf(
+ '
+ SELECT DATE_FORMAT(cl.change_time, \'%%d.%%m.%%Y %%H:%%i\') as `date`,
+ IF(cl.status <> \'abgeschlossen\' AND SUBSTRING(cl.status,1,5) != \'mutex\' ,1,0) as `running` ,
+ cl.status,cl.cronjob_id,p.bezeichnung
+ FROM cronjob_log as cl
+ INNER JOIN prozessstarter AS p ON cl.cronjob_id = p.id AND p.aktiv = 1
+ WHERE cl.change_time >= \'%s\'
+ AND cl.change_time <= \'%s\'
+ %s
+ ORDER BY cl.cronjob_id,cl.change_time, cl.id
+ ', (new DateTime($dateFrom))->sub(new DateInterval( 'P1D'))->format('Y-m-d H:i:s') ,
+ $dateTo, $extra
+ );
+ $cronjobArr = $this->app->DB->SelectArr($sql);
+ $begin = new DateTime($dateFrom);
+ if($dateFrom === $dateTo) {
+ $dateTo = new DateTime($dateFrom);
+ $dateTo = $dateTo->add(new DateInterval( 'P1D'))->format('Y-m-d H:i:s');
+ }
+
+ $end = new DateTime($dateTo);
+
+ list($months, $days, $hours) = explode(' ',$end->diff($begin)->format('%m %d %h'));
+ $days += $months * 30;
+ if($days === 0) {
+ $interval = new DateInterval('PT1M');
+ }
+ elseif($days <= 1) {
+ $interval = new DateInterval('PT5M');
+ }
+ else {
+ $interval = new DateInterval('PT15M');
+ }
+ foreach($cronjobArr as $row) {
+ $cronjobIdToName['K'.$row['cronjob_id']] = $row['bezeichnung'];
+ }
+
+ $seperated = $this->seperateData($cronjobArr, 'cronjob_id');
+ $seperated = $this->roundDataDates($seperated, 'running','date', $interval);
+
+ foreach($seperated as $cronjobIdKey => $rows) {
+ foreach($rows as $rowKey => $row) {
+ $seperated[$cronjobIdKey][$rowKey]['bezeichnung'] = $cronjobIdToName[$cronjobIdKey];
+ }
+ }
+
+ $seperated = $this->formatData($seperated,'running');
+
+ $sorted = [];
+ foreach($seperated as $cronjobIdKey => $rows) {
+ $maxValue = 0;
+ foreach($rows as $element) {
+ if($element['running'] > $maxValue) {
+ $maxValue = $element['running'];
+ }
+ }
+ $sorted[$cronjobIdKey] = $maxValue;
+ }
+ array_multisort($sorted,SORT_DESC,$seperated);
+ $matchedDatas = [];
+ $period = new PeriodMatcher($begin, $end, $interval, 'd.m.Y H:i:s');
+ $maxCronjobs = $limit === 0?999999:$limit;
+ foreach($seperated as $cronjobIdKey => $cronjobRow) {
+ $maxCronjobs--;
+ if($maxCronjobs < 0) {
+ unset($seperated[$cronjobIdKey]);
+ continue;
+ }
+ $matchedDatas[$cronjobIdKey] = $period->matchData(
+ $cronjobRow,
+ 'date'
+ ,$cronjobIdToName[$cronjobIdKey]
+ );
+ }
+
+ $labels = $period->getDates();
+ $options = [];
+ $chart = new Chart('line',[],[],$options);
+ $chart->addLabels($labels);
+ $first = true;
+ foreach($seperated as $cronjobIdKey => $matchedData) {
+ if($first) {
+ $first = false;
+ $chart->addDatasetAsYAxis(
+ new Dataset($cronjobIdToName[$cronjobIdKey],
+ $matchedDatas[$cronjobIdKey]), 'left' );//,'logarithmic'
+ }
+ else {
+ $chart->addDataset(new Dataset($cronjobIdToName[$cronjobIdKey], $matchedDatas[$cronjobIdKey]));
+ }
+ }
+
+ $chartRenderer = new HtmlRenderer($chart, 'Laufzeiten', 400, 150);
+
+ return $chartRenderer->render();
+ }
+
+ public function ProzessstarterChart() {
+ $this->ProzessstarterMenu();
+
+ list($dateFrom, $dateFromTpl, $dateFromTime) =
+ $this->getDatesFromForm('prozessstarter_chart_from','prozessstarter_chart_fromtime',true);
+ list($dateTo, $dateToTpl, $dateToTime) =
+ $this->getDatesFromForm('prozessstarter_chart_to','prozessstarter_chart_totime',false);
+
+ $cronjobFilter = $this->app->Secure->GetPOST('prozessstarter_chart_cronjob');
+ $this->app->Tpl->Set('PROZESSSTARTER_CHART_FROM',$dateFromTpl);
+ $this->app->Tpl->Set('PROZESSSTARTER_CHART_TO',$dateToTpl);
+ $this->app->Tpl->Set('PROZESSSTARTER_CHART_FROMTIME',$dateFromTime);
+ $this->app->Tpl->Set('PROZESSSTARTER_CHART_TOTIME',$dateToTime);
+ $this->app->Tpl->Set('PROZESSSTARTER_CHART_CRONJOB',$cronjobFilter);
+
+ if(!empty($cronjobFilter)) {
+ $cronjobFilter = $this->app->DB->Select(
+ sprintf(
+ 'SELECT id FROM prozessstarter WHERE parameter = \'%s\''
+ ,$cronjobFilter
+ )
+ );
+ }
+ $limit = $this->app->Secure->GetPOST('prozessstarter_chart_limit')?4:0;
+ if($limit > 0) {
+ $this->app->Tpl->Set('PROZESSSTARTER_CHART_LIMIT',' checked="checked" ');
+ }
+
+ $this->app->Tpl->Set('TAB1', $this->getChart($dateFrom, $dateTo, $cronjobFilter, $limit));
+
+ $this->app->YUI->DatePicker('prozessstarter_chart_from');
+ $this->app->YUI->DatePicker('prozessstarter_chart_to');
+ $this->app->YUI->TimePicker('prozessstarter_chart_fromtime');
+ $this->app->YUI->TimePicker('prozessstarter_chart_totime');
+ $this->app->YUI->AutoComplete('prozessstarter_chart_cronjob','prozessstarter_aktiv',1);
+ $this->app->Tpl->Parse('PAGE','prozessstarter_chart.tpl');
+ }
+
+ public function ProzessstarterMinidetail() {
+ $cronjobId = (int)$this->app->Secure->GetGET('id');
+ $dateFrom = $this->getDatesFromForm('','',true);
+ $dateFrom = reset($dateFrom);
+ $dateTo = $this->getDatesFromForm('','',false);
+ $dateTo = reset($dateTo);
+ echo $this->getChart($dateFrom, $dateTo, $cronjobId);
+ echo '';
+
+ $lastCronjobLogs = $this->app->DB->SelectFirstCols(
+ sprintf(
+ 'SELECT `id` FROM `cronjob_log` WHERE `cronjob_id` = %d AND `parent_id` = 0 ORDER BY `id` DESC LIMIT 5',
+ $cronjobId
+ )
+ );
+ if(!empty($lastCronjobLogs)) {
+ $table = new EasyTable($this->app);
+ $sql = sprintf(
+ "SELECT DATE_FORMAT(cl2.`change_time`,'%%d.%%m.%%Y %%H:%%i:%%s') AS `Datum`,
+ IF(cl.id=cl2.id,CONCAT('',cl2.status,' '), cl2.`status`) AS `Status`
+ FROM `cronjob_log` AS `cl`
+ INNER JOIN `cronjob_log` AS `cl2` ON (cl.id = cl2.parent_id AND cl2.parent_id IN (%s))
+ OR (cl.id = cl2.id AND cl2.id IN (%s))
+ WHERE cl.`id` IN (%s)
+ ORDER BY cl.`id` DESC, cl2.id",
+ implode(',', $lastCronjobLogs),
+ implode(',', $lastCronjobLogs),
+ implode(',', $lastCronjobLogs)
+ );
+ $table->Query($sql);
+ $table->width_headings = ['20%'];
+ echo $table->DisplayNew('return','Status','noAction');
+ }
+ $this->app->erp->ExitWawi();
+ }
+
+ /**
+ * @param string $status
+ * @param null|int $prozessstarter
+ */
+ public function setCronjobStatus($status, $prozessstarter = null)
+ {
+
+ if($prozessstarter !== null) {
+ $this->currentCronjobId = $prozessstarter;
+ if(emptY($this->currentCronjobId)) {
+ $this->parentId = 0;
+ $this->currentCronjobName = '';
+ }
+ }
+
+ if(!$this->currentCronjobId){
+ return;
+ }
+ if($status === 'gestartet' || $status === 'start') {
+ $this->currentCronjobName = $this->app->DB->Select(
+ sprintf(
+ 'SELECT `parameter` FROM `prozessstarter` WHERE `id` = %d LIMIT 1',
+ $this->currentCronjobId
+ )
+ );
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO `cronjob_log`
+ (`cronjob_id`, `cronjob_name`, `status`,`change_time`,`memory_usage`,`memory_peak`)
+ VALUES (%d, '%s', 'start',now(),%d,%d)",
+ $this->currentCronjobId, $this->currentCronjobName,
+ memory_get_usage()/1024, memory_get_peak_usage()/1024
+ )
+ );
+ $this->parentId = $this->app->DB->GetInsertID();
+ }
+ else {
+ if(empty($this->currentCronjobName)) {
+ $this->currentCronjobName = $this->app->DB->Select(
+ sprintf(
+ 'SELECT `parameter` FROM `prozessstarter` WHERE `id` = %d LIMIT 1',
+ $this->currentCronjobId
+ )
+ );
+ }
+ if(empty($this->parentId)) {
+ $this->parentId = (int)$this->app->DB->Select(
+ sprintf(
+ 'SELECT `id`
+ FROM `cronjob_log`
+ WHERE status = \'start\' AND `cronjob_id` = %d
+ ORDER BY `change_time` DESC, `id` DESC
+ LIMIT 1',
+ $this->currentCronjobId
+ )
+ );
+ }
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO `cronjob_log`
+ (`parent_id`, `cronjob_id`, `cronjob_name`,`status`,`change_time`,`memory_usage`,`memory_peak`)
+ VALUES (%d, %d, '%s', '%s',now(),%d,%d)",
+ $this->parentId, $this->currentCronjobId, $this->currentCronjobName, $status,
+ memory_get_usage()/1024, memory_get_peak_usage()/1024
+ )
+ );
+ }
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE `prozessstarter` SET `status` = '%s',
+ `status_zeit` = now() WHERE `id` = %d LIMIT 1",
+ $this->app->DB->real_escape_string($status), $this->currentCronjobId
+ )
+ );
+ }
+
+ public function ProzessstarterReset(){
+ $id = (int)$this->app->Secure->GetGET('id');
+ if($id > 0){
+ $this->app->DB->Update(
+ sprintf('UPDATE prozessstarter SET letzteausfuerhung=\'0000-00-00 00:00:00\' WHERE id = %s', $id)
+ );
+ }
+
+ $data = ['success' => true];
+ echo json_encode($data);
+ $this->app->ExitXentral();
+ }
+
+ public function ProzessstarterDelete()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ if($id > 0){
+ $this->app->DB->Delete(
+ sprintf(
+ 'DELETE FROM `prozessstarter` WHERE `id` = %d LIMIT 1',
+ $id
+ )
+ );
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE cronjob_starter_running SET `active` = -1 WHERE `task_id` = %d AND `active` = 1 ',
+ $id
+ )
+ );
+ $this->ProzessstarterSystemhealthFillEntries();
+ }
+
+ $this->app->Location->execute('index.php?module=prozessstarter&action=list');
+ }
+
+ public function ProzessstarterCreate()
+ {
+ $this->ProzessstarterMenu();
+ parent::ProzessstarterCreate();
+ }
+
+ public function ProzessstarterList()
+ {
+ if($this->app->Secure->GetPOST('resetperiode')) {
+ $this->resetPeriode();
+ $this->app->Location->execute('index.php?module=prozessstarter&action=list');
+ }
+ if($this->app->Secure->GetPOST('resetcronjob')) {
+ $this->resetCronjobs(60);
+ }
+ $this->ProzessstarterMenu();
+ $letzteraufruf = $this->app->erp->GetKonfiguration('prozessstarter_letzteraufruf');
+ $diff = time() - strtotime($letzteraufruf);
+ if($diff > 60*5+1) // mit sicherheitsabstand :-)
+ {
+ $this->app->Tpl->Set('MESSAGE','Es sieht so aus, als ob der Prozessstarter Cronjob nicht regelmäßig ausgeführt wird! Bitte aktivieren Sie diesen (
Link zu Helpdesk )!
');
+ }
+ if($this->app->DB->Select(
+ "SELECT id FROM prozessstarter WHERE aktiv = 1 AND parameter = 'autoversand' LIMIT 1"
+ )) {
+ if($this->app->DB->Select(
+ "SELECT id FROM prozessstarter WHERE aktiv = 1 AND parameter = 'autoversand' AND periode < 30 AND art = 'periodisch' LIMIT 1"
+ ))
+ {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ 'Der Prozess Autoversand ist auf eine Periodendauer von unter 30 Minuten eingestellt. Deshalb wird er nicht ausgeführt. Eine zu niedrige Einstellung verursacht eine zu hohe Serverlast
'
+ );
+ }
+ else {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ 'Der Prozess Autoversand kann eine hohe Serverlast verursachen. Es ist ratsam die Art auf Uhrzeit oder die Periode auf eine hohe Zahl zu stellen.
'
+ );
+ }
+ }
+
+ $system_cronjob_memory_limit = (string)$this->app->erp->GetKonfiguration('system_cronjob_memory_limit');
+ $system_cronjob_max_execution_time = (string)$this->app->erp->GetKonfiguration('system_cronjob_max_execution_time');
+ if($system_cronjob_memory_limit !== '') {
+ if((int)$system_cronjob_memory_limit > 0 && (int)$system_cronjob_memory_limit < 256 * 1024 * 1024) {
+ $this->app->Tpl->Add('MESSAGE','Es steht zu wenig Arbeitsspeicher zur Verfügung ('.(round($system_cronjob_memory_limit / 1024 / 1024)).' MB). Dies kann zu Problemen bei den Prozessstartern führen. Technische Info: Bitte passen Sie für den PHP CLI Prozess den Arbeitsspeicher an (z.B. 256 MB oder 512 MB).
');
+ }
+ }
+ if($system_cronjob_max_execution_time !== '' && (int)$system_cronjob_max_execution_time > 0
+ && (int)$system_cronjob_max_execution_time < 300) {
+ if($system_cronjob_max_execution_time <= 30) {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ 'Die Prozessstarterlaufzeit beträgt nur '.$system_cronjob_max_execution_time.' Sekunden.
'
+ );
+ }
+ else{
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ 'Die Prozessstarterlaufzeit beträgt nur '.$system_cronjob_max_execution_time.' Sekunden.
'
+ );
+ }
+ }
+
+ if($this->app->Secure->GetPOST('deaktivieren')) {
+ $this->app->erp->SetCheckCronjob(false);
+ }
+ elseif($this->app->Secure->GetPOST('aktivieren')) {
+ $this->app->erp->SetCheckCronjob(true);
+ $this->app->Tpl->Add('MESSAGE','{|Prozessstarter wurden global aktiviert!|}
');
+ }
+ $maintenance = $this->app->erp->GetKonfiguration('update_maintenance') == '1';
+ if($maintenance) {
+ $this->app->erp->SetKonfigurationValue('update_maintenance', 0);
+ //$this->app->Tpl->Add('MESSAGE','{|Xentral befindet sich im Updatemodus: Prozessstarter sind deaktiviert!|}
');
+ }
+
+ if(method_exists($this->app->erp, 'CheckCronjob')) {
+ try {
+ $checkCronjob = $this->app->erp->CheckCronjob(false);
+ }
+ catch (Exception $e) {
+ $checkCronjob = $this->app->erp->CheckCronjob();
+ }
+
+ if($checkCronjob) {
+ $this->app->Tpl->Set('CRONJOBBUTTON',' ');
+ }
+ else {
+ $this->app->Tpl->Add('MESSAGE', '{|Achtung: Prozessstarter sind global deaktiviert!|}
');
+ $this->app->Tpl->Set('CRONJOBBUTTON', ' ');
+ }
+ }
+
+ list($runningTime, $runningPeriod) = $this->getRunningCronjobs(60);
+ if($runningPeriod + $runningTime > 0){
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ ''
+ );
+ }
+
+ if(!empty($this->app->Secure->GetGET('id'))){
+ $this->app->Tpl->Add(
+ 'JAVASCRIPT',
+ 'window.onload=function(){ ProzessstarterEdit(' . $this->app->Secure->GetGET('id') . ');};'
+ );
+ }
+
+ $countToFrequently = $this->getToFrequentlyCronjobs();
+ $message = $this->getFrequentlyMessage($countToFrequently);
+ if(!empty($message)) {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ '
+
+
'
+ );
+ }
+
+ $this->app->YUI->TableSearch('TAB1','prozessstarterlist', 'show','','',basename(__FILE__), __CLASS__);
+ $this->app->Tpl->Parse('PAGE','prozessstarter_list.tpl');
+ }
+
+ public function ProzessstarterMenu()
+ {
+ $this->app->erp->Headlines('Prozessstarter');
+ $this->app->erp->MenuEintrag('index.php?module=prozessstarter&action=list','Übersicht');
+ $this->app->erp->MenuEintrag('ProzessstarterEdit(0)','Neuer Eintrag');
+ if($this->app->Secure->GetGET('action')==='list'){
+ $this->app->erp->MenuEintrag('index.php?module=einstellungen&action=list', 'Zurück zur Übersicht');
+ }
+ else {
+ $this->app->erp->MenuEintrag('index.php?module=prozessstarter&action=list', 'Zurück zur Übersicht');
+ }
+ $this->app->erp->MenuEintrag('index.php?module=prozessstarter&action=chart','Laufzeiten');
+ }
+
+ public function ProzessstarterEdit()
+ {
+ $this->ProzessstarterMenu();
+ //parent::ProzessstarterEdit();
+ if($this->app->Secure->GetGET('cmd')==='get'){
+ $id = (int)$this->app->Secure->GetPOST('id');
+
+ $data = $this->app->DB->SelectRow(
+ "SELECT p.id, p.bezeichnung, p.art, p.art_filter, p.startzeit, p.letzteausfuerhung, p.periode,
+ p.typ, p.parameter, p.aktiv
+ FROM prozessstarter p
+ WHERE p.id = '$id'
+ LIMIT 1"
+ );
+
+ if(empty($data)){
+ $data['id'] = 0;
+ $data['bezeichnung'] = '';
+ $data['art'] = '';
+ $data['art_filter'] = '';
+ $data['startzeit'] = '';
+ $data['letzteausfuerhung'] = '';
+ $data['periode'] = '';
+ $data['typ'] = '';
+ $data['parameter'] = '';
+ $data['aktiv'] = 0;
+
+ }
+ echo json_encode($data);
+ $this->app->ExitXentral();
+ }
+ if($this->app->Secure->GetGET('cmd')==='save'){
+ $this->ProzessstarterSave();
+ }
+
+ $this->app->Tpl->Parse('PAGE', 'prozessstarter_list.tpl');
+ }
+
+
+ protected function ProzessstarterSave()
+ {
+ $id = (int)$this->app->Secure->GetPOST('id');
+ $bezeichnung = trim($this->app->Secure->GetPOST('bezeichnung'));
+ $art = trim($this->app->Secure->GetPOST('art'));
+ $art_filter = trim($this->app->Secure->GetPOST('art_filter'));
+ $startzeit = trim($this->app->Secure->GetPOST('startzeit'));
+ $letzteausfuerhung = trim($this->app->Secure->GetPOST('letzteausfuerhung'));
+ $periode = trim($this->app->Secure->GetPOST('periode'));
+ $typ = trim($this->app->Secure->GetPOST('typ'));
+ $parameter = trim($this->app->Secure->GetPOST('parameter'));
+ $aktiv = $this->app->Secure->GetPOST('aktiv');
+
+ $error = '';
+
+ if($bezeichnung == ''){
+ $error .= "Bitte Bezeichnung ausfüllen\n";
+ }
+
+ if($parameter == ''){
+ $error .= "Bitte Parameter ausfüllen"."\n";
+ }
+
+ if($art === 'uhrzeit'){
+ $periode = '';
+ }
+
+ if(!empty($error)){
+ echo json_encode(array('status'=>0,'statusText'=>$error));
+ $this->app->ExitXentral();
+ }
+
+ if($id) {
+ if($this->app->DB->Select(sprintf('SELECT id FROM prozessstarter WHERE id = %d AND mutex = 1 LIMIT 1', $id)) || !$aktiv){
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE cronjob_starter_running SET `active` = -1 WHERE task_id = %d AND `active` = 1 ',
+ $id
+ )
+ );
+ }
+
+ $this->app->DB->Update(
+ "UPDATE prozessstarter
+ SET mutex =0, mutexcounter = 0, bezeichnung = '$bezeichnung', art = '$art', art_filter = '$art_filter',
+ startzeit = '$startzeit', letzteausfuerhung = '$letzteausfuerhung', periode = '$periode',
+ typ = '$typ', parameter = '$parameter', aktiv = '$aktiv'
+ WHERE id = '$id'"
+ );
+ $this->ProzessstarterSystemhealthFillEntries();
+ echo json_encode(array('status'=>1));
+ $this->app->ExitXentral();
+ }
+ $this->app->DB->Insert(
+ "INSERT INTO prozessstarter
+ (bezeichnung, art, art_filter, startzeit, letzteausfuerhung, periode, typ, parameter, aktiv)
+ VALUES
+ ('$bezeichnung', '$art', '$art_filter', '$startzeit', '$letzteausfuerhung', '$periode', '$typ', '$parameter', '$aktiv')"
+ );
+
+ echo json_encode(array('status'=>1));
+ $this->app->ExitXentral();
+ }
+
+ /**
+ * @param string $uid
+ * @param array $task
+ *
+ * @return bool
+ */
+ public function checkCronjobRunning($uid, $task) {
+ $this->removeKilledCronjobs();
+
+ $this->app->DB->Delete(
+ 'DELETE FROM cronjob_starter_running WHERE last_time < DATE_SUB(NOW(), INTERVAL 6 HOUR) AND `active` = 1'
+ );
+
+ if($task['art'] === 'uhrzeit') {
+ return true;
+ }
+ if(
+ $this->app->DB->Select(
+ sprintf(
+ 'SELECT id FROM cronjob_starter_running WHERE `active` = 1 AND uid = \'%s\' LIMIT 1',
+ $this->app->DB->real_escape_string($uid)
+ )
+ )
+ ) {
+ return true;
+ }
+ $crojobLimit = $this->app->erp->Firmendaten('cronjob_limit');
+ if($crojobLimit <= 0) {
+ $crojobLimit = 3;
+ }
+
+ list($runningTime, $runningPeriod) = $this->getRunningCronjobs();
+ return $runningPeriod + $runningTime < $crojobLimit;
+ }
+
+ /**
+ * @param array $output
+ * @param array $task
+ */
+ public function checkCronjobMemory($output, $task)
+ {
+ if(empty($output)) {
+ return;
+ }
+
+ foreach($output as $row) {
+ if(strpos($row, 'Segmentation fault')) {
+ try {
+ /** @var Systemhealth $systemhealth */
+ $systemhealth = $this->app->erp->LoadModul('systemhealth');
+ if(!empty($systemhealth) && method_exists($systemhealth,'createEntryIfError')) {
+ $systemhealth->createEntryIfError(
+ 'cronjobs','segmentation_fault','Segmentation Fault Fehler','error', $row, true
+ );
+ $systemhealth->createEvent('cronjobs','segmentation_fault','error','prozessstarter',$task['id']);
+ }
+ }
+ catch(Exception $e) {
+
+ }
+ break;
+ }
+ }
+
+ foreach($output as $row) {
+ if(strpos($row, 'Out of memory') === false) {
+ continue;
+ }
+ try {
+ /** @var Systemhealth $systemhealth */
+ $systemhealth = $this->app->erp->LoadModul('systemhealth');
+ if(empty($systemhealth) || !method_exists($systemhealth, 'changeStatus')) {
+ return;
+ }
+ $systemhealth->changeStatus('cronjobs', 'out_of_memory', 'warning', $task['bezeichnung'] . ': ' . $row);
+ $systemhealth->createEvent('cronjobs','out_of_memory','warning','prozessstarter',$task['id']);
+ }
+ catch(Exception $e) {
+
+ }
+ return;
+ }
+ }
+
+ /**
+ * @param string|int $uid
+ * @param array $task
+ */
+ public function checkIfCronjobRunning($uid, $task)
+ {
+ $runningTask = $this->getCronjobByUid($uid);
+ if(empty($runningTask) || empty($runningTask['task_id']) || $runningTask['active'] != 1
+ || $runningTask['task_id'] != $task['id']
+ ) {
+ return;
+ }
+ $this->app->erp->LogFile(
+ sprintf(
+ 'Cronjob %s with pid: %s and taskid: %d cronjob_starter_running_id %d was not closed cleanly by starter-proccess.',
+ $task['bezeichnung'], $uid, $task['id'], $runningTask['id']
+ )
+ );
+
+ $this->setCronjobStatus('error', $task['id']);
+ $this->setCronjobRunning($uid, $task['id'], false);
+ }
+
+ /**
+ * @param string|int $uid
+ * @param bool $fromStarter2
+ */
+ public function closeAndLogCronjob($uid, $fromStarter2 = false)
+ {
+
+// REMARK: this never gets called -> Check
+
+ $cronjob = $this->getCronjobByUid($uid);
+ if(empty($cronjob)) {
+ return;
+ }
+
+ if($fromStarter2) {
+ $this->app->erp->LogFile('Cronjob '.$cronjob['cronjob_name'].' called exit uid: '.$uid);
+ if(!empty($cronjob['task_id'])) {
+ $this->setCronjobStatus('error', $cronjob['task_id']);
+ $this->setCronjobRunning($uid, $cronjob['task_id'], false);
+ }
+ return;
+ }
+ $this->app->erp->LogFile('Cronjob with uid: '.$uid.' was killed by module: '.$cronjob['cronjob_name']);
+ if(!empty($cronjob['task_id'])) {
+
+ $this->setCronjobStatus('error', $cronjob['task_id']);
+ try {
+ /** @var Systemhealth $systemhealth */
+ $systemhealth = $this->app->erp->LoadModul('systemhealth');
+ if($systemhealth !== null && method_exists($systemhealth, 'createEvent')){
+ $systemhealth->createEvent('cronjobs', 'errors', 'warning', 'prozessstarter', $cronjob['task_id']);
+ }
+ }
+ catch (Exception $d) {
+
+ }
+ }
+ $this->setCronjobRunning($uid, null,false);
+ }
+
+ public function removeKilledCronjobs()
+ {
+ if(!function_exists('posix_getsid') ||
+ !function_exists('getmypid') ||
+ empty(posix_getsid(getmypid()))){
+ return;
+ }
+ foreach ($this->getAllRunningCronjobs() as $cronjob) {
+ if(!is_numeric($cronjob['uid']) || $cronjob['uid'] <= 0) {
+ continue;
+ }
+ if(!posix_getsid($cronjob['uid'])){
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE `cronjob_starter_running` SET `active` = -1 WHERE `id` = %d AND `active` = 1',
+ $cronjob['id']
+ )
+ );
+ if($this->app->DB->affected_rows() > 0) {
+ $this->app->erp->LogFile(
+ $this->app->DB->real_escape_string(
+ 'Cronjob '.(
+ $this->app->DB->Select(
+ sprintf(
+ 'SELECT bezeichnung FROM prozessstarter WHERE id = %d LIMIT 1 ',
+ $cronjob['task_id']
+ )
+ )
+ ).' with pid: '.
+ $cronjob['uid'].' and taskid: '.
+ $cronjob['task_id'].' cronjob_starter_running_id '.
+ $cronjob['id'].' was not closed cleanly by starter-proccess.'
+ )
+ );
+ }
+ }
+ elseif($cronjob['task_id'] > 0) {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE prozessstarter
+ SET mutexcounter = 1, letzteausfuerhung = NOW()
+ WHERE mutexcounter > 1 AND aktiv = 1 AND id = %d AND letzteausfuerhung > DATE_SUB(NOW(), INTERVAL 1 HOUR)',
+ $cronjob['task_id']
+ )
+ );
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE prozessstarter
+ SET mutexcounter = 1, letzteausfuerhung = NOW()
+ WHERE mutexcounter > 4 AND aktiv = 1 AND id = %d AND letzteausfuerhung > DATE_SUB(NOW(), INTERVAL 5 MINUTE)',
+ $cronjob['task_id']
+ )
+ );
+ }
+ }
+ }
+
+ /**
+ * @param int $minutes
+ *
+ * @return int
+ */
+ protected function resetCronjobs($minutes = 0) {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE `cronjob_starter_running`
+ SET `active` = -1
+ WHERE `active` = 1 AND `last_time` < DATE_SUB(NOW(), INTERVAL %d MINUTE)',
+ (int)$minutes
+ )
+ );
+ return (int)$this->app->DB->affected_rows();
+ }
+
+ /**
+ * @return array
+ */
+ public function getAllRunningCronjobs()
+ {
+ $runningTasks = $this->app->DB->SelectArr(
+ 'SELECT `uid`, `type`, `id`, `task_id`
+ FROM `cronjob_starter_running`
+ WHERE `active` = 1'
+ );
+ if(empty($runningTasks)) {
+ return [];
+ }
+
+ return $runningTasks;
+ }
+
+ /**
+ * @param string|int $uid
+ *
+ * @return array
+ */
+ public function getCronjobByUid($uid)
+ {
+ $tasks = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT csr.`uid`, csr.`type`, csr.`id`, csr.`task_id`, csr.`active`, p.bezeichnung AS `cronjob_name`
+ FROM `cronjob_starter_running` AS csr
+ LEFT JOIN `prozessstarter` AS p ON csr.`task_id` = p.`id`
+ WHERE csr.`uid` = \'%s\' AND csr.`uid` <> \'\'',
+ $this->app->DB->real_escape_string($uid)
+ )
+ );
+ if(empty($tasks)) {
+ return [];
+ }
+
+ return $tasks;
+ }
+
+
+ /**
+ * @param int $minutes
+ *
+ * @return array
+ */
+ public function getRunningCronjobs($minutes = 0) {
+ if($minutes <= 0){
+ $runningTasks = $this->app->DB->SelectArr(
+ 'SELECT COUNT(DISTINCT uid) AS co, type
+ FROM cronjob_starter_running
+ WHERE `active` = 1
+ GROUP BY type'
+ );
+ }
+ else {
+ $runningTasks = $this->app->DB->SelectArr(
+ sprintf(
+ 'SELECT COUNT(DISTINCT uid) AS co, type
+ FROM cronjob_starter_running
+ WHERE `active` = 1 AND last_time < DATE_SUB(NOW(), INTERVAL %d MINUTE)
+ GROUP BY `type`',
+ (int)$minutes
+ )
+ );
+ }
+ if(empty($runningTasks)) {
+ return [0, 0];
+ }
+ $runningTime = 0;
+ $runningPeriod = 0;
+ foreach($runningTasks as $runningTask) {
+ if($runningTask['type'] === 'uhrzeit') {
+ $runningTime = (int)$runningTask['co'];
+ }
+ elseif($runningTask['type'] === 'periodisch') {
+ $runningPeriod = (int)$runningTask['co'];
+ }
+ }
+
+ return [$runningTime, $runningPeriod];
+ }
+
+ /**
+ * @return int|string|null
+ */
+ public function getNewUid()
+ {
+ $uid = function_exists('getmypid')?getmypid():null;
+ if(!empty($uid) &&
+ !$this->app->DB->Select(
+ sprintf(
+ 'SELECT `id` FROM `cronjob_starter_running` WHERE `active` = 1 AND `uid` = \'%s\'',
+ $this->app->DB->real_escape_string($uid)
+ )
+ )
+ ) {
+ $this->changeUid($uid);
+
+ return $uid;
+ }
+
+ return uniqid('', false);
+ }
+
+ /**
+ * @param string $uid
+ */
+ public function changeUid($uid)
+ {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE `cronjob_starter_running`
+ SET `uid` = \'%s\' WHERE `uid` = \'%s\'',
+ $this->app->DB->real_escape_string($uid.uniqid('', false)),$this->app->DB->real_escape_string($uid)
+ )
+ );
+ }
+
+ /**
+ * @param int|string $uid
+ * @param null $task
+ * @param bool $active
+ */
+ public function setCronjobRunning($uid, $task = null, $active = true) {
+
+ if($active === false) {
+ if(!empty($task)) {
+ $this->app->DB->Update(
+ sprintf(
+// 'UPDATE cronjob_starter_running SET `task_id` = 0, last_time = NOW() WHERE uid = \'%s\' AND `active` = 1',
+ 'UPDATE cronjob_starter_running SET `active` = 0, last_time = NOW() WHERE uid = \'%s\' AND `active` = 1',
+ $this->app->DB->real_escape_string($uid)
+ )
+ );
+ return;
+ }
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE cronjob_starter_running SET `active` = 0, last_time = NOW() WHERE uid = \'%s\'',
+ $this->app->DB->real_escape_string($uid)
+ )
+ );
+
+ if(is_numeric($uid)){
+ $this->changeUid($uid);
+ }
+ return;
+ }
+
+ $check = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT * FROM cronjob_starter_running WHERE uid = \'%s\' LIMIT 1',
+ $this->app->DB->real_escape_string($uid)
+ )
+ );
+ if(empty($check)) {
+ $this->app->DB->Insert(
+ sprintf(
+ 'INSERT INTO `cronjob_starter_running` (`active`, `last_time`, `type`, `uid`, `task_id`)
+ VALUES (1, NOW(), \'%s\', \'%s\', %d)',
+ $this->app->DB->real_escape_string($task['art']), $this->app->DB->real_escape_string($uid), (int)$task['id']
+ )
+ );
+ return;
+ }
+
+ if(!empty($check['task_id']) && ($uid != $check['uid'] || $check['task_id'] != $task['id'])) {
+ $this->app->erp->LogFile(
+ $this->app->DB->real_escape_string(
+ sprintf(
+ 'Cronjob: %s id: %d was not cleanly closed.',
+ $this->app->DB->Select(
+ sprintf(
+ 'SELECT bezeichnung FROM prozessstarter WHERE id = %d LIMIT 1',
+ $task['id']
+ )
+ ) ,
+ $task['id']
+ )
+ )
+ );
+ }
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE `cronjob_starter_running` SET `active` = 1, `last_time` = NOW(), `type` = \'%s\', task_id = %d WHERE id = %d LIMIT 1',
+ $this->app->DB->real_escape_string($task['art']), (int)$task['id'],(int)$check['id']
+ )
+ );
+ $this->app->DB->Delete(
+ sprintf(
+ 'DELETE FROM `cronjob_starter_running` WHERE `id` <> %d AND `uid` = \'%s\'',
+ $check['id'], $this->app->DB->real_escape_string($uid)
+ )
+ );
+ }
+
+ /**
+ * @param string $parameter
+ * @param string $target
+ * @param bool $withForm
+ */
+ public function checkActiveCronjob($parameter, $target = 'MESSAGE', $withForm = true)
+ {
+ if(empty($parameter)) {
+ return;
+ }
+
+ $hasPermission = $this->app->erp->RechteVorhanden('prozessstarter','edit');
+
+ $activated = false;
+ if($hasPermission === true && $this->app->Secure->GetPOST('activatecronjob')) {
+ $cronjobId = (int)$this->app->Secure->GetPOST('cronjobid');
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE prozessstarter SET aktiv = 1 WHERE id = %d AND parameter = '%s'",
+ $cronjobId, $this->app->DB->real_escape_string($parameter)
+ )
+ );
+ if($this->app->DB->affected_rows() > 0) {
+ $activated = true;
+ }
+ }
+ $cronjob = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT p.id, p.aktiv, p.bezeichnung
+ FROM prozessstarter as p
+ WHERE p.parameter = '%s'
+ ORDER BY aktiv = 1 DESC
+ LIMIT 1",
+ $this->app->DB->real_escape_string($parameter)
+ )
+ );
+
+ $message = '';
+
+ if(empty($cronjob)) {
+ $link = '';
+ if($hasPermission === true) {
+ $link = 'Zu Prozessstartern ';
+ }
+ $message = sprintf(
+ 'Der Prozessstarter %s existiert nicht. %s
',
+ $this->app->DB->real_escape_string($parameter),
+ $link
+ );
+ $this->app->Tpl->Add($target, $message);
+
+ return;
+ }
+ if(empty($cronjob['aktiv'])) {
+ $button = '';
+ if($hasPermission && $withForm) {
+ $button = sprintf('
+ ', $cronjob['id']);
+ }
+
+ $this->app->Tpl->Add(
+ $target,
+ ($withForm?'':'')
+ );
+
+ return;
+ }
+
+ if (!$this->isCronjobRunningRegular($cronjob['id'])) {
+ $message = sprintf(
+ 'Es sieht so aus, als ob der Prozessstarter "%s" nicht regelmäßig
+ ausgeführt wird! Bitte aktivieren Sie diesen (
Link zu Helpdesk )!
+
',
+ $parameter
+ );
+ $this->app->Tpl->Add($target, $message);
+
+ return;
+ }
+
+
+ if($activated) {
+ $message = sprintf(
+ 'Der Prozessstarter %s wurde aktiviert.
',
+ $cronjob['bezeichnung']
+ );
+ $this->app->Tpl->Add($target, $message);
+ }
+ }
+
+ /**
+ * @param $id
+ *
+ * @return bool
+ */
+ public function isCronjobRunningRegular($id)
+ {
+ $cronjob = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT p.id, p.aktiv, p.art, p.letzteausfuerhung, p.periode, p.art_filter, p.startzeit
+ FROM `prozessstarter` as `p`
+ WHERE p.id = '%s'
+ ORDER BY p.aktiv = 1 DESC
+ LIMIT 1",
+ $this->app->DB->real_escape_string($id)
+ )
+ );
+
+ if (empty($cronjob)) {
+ return false;
+ }
+ if ($cronjob['letzteausfuerhung'] === '0000-00-00 00:00:00') {
+ return true;
+ }
+
+ $lastTime = DateTime::createFromFormat('Y-m-d H:i:s',$cronjob['letzteausfuerhung']);
+ if ($lastTime === false) {
+ return false;
+ }
+ try {
+ $now = new DateTime('now');
+ $nowDb = new DateTime($this->app->DB->Select('SELECT NOW()'));
+ } catch (Exception $e) {
+ return false;
+ }
+
+ $period = 0;
+ if ($cronjob['art'] === 'periodisch') {
+ $period = (float)$cronjob['periode'];
+ $period += 5; //tolerance
+ }
+ $dayOfWeekNumber = (int)$now->format('w');
+ if ($cronjob['art'] === 'uhrzeit') {
+ $period = 1;
+ if((int)$cronjob['art_filter'] > 0) {
+ $period = $dayOfWeekNumber - (int)$cronjob['art_filter'];
+ if ($period < 1) {
+ $period = 7 + $period;
+ }
+ }
+ $period++; //rolerance
+ $period *= 1440;
+ }
+
+ $diff = ceil(($now->getTimestamp() - $lastTime->getTimestamp()) / 60);
+ $diffDb = ceil(($nowDb->getTimestamp() - $lastTime->getTimestamp()) / 60);
+
+ return $period > $diff || $period > $diffDb;
+ }
+}