app = $app; $this->id = $id; $this->getSettings(); } /** * @param array $settings */ public function setSettings($settings) { $this->settings = $settings; } /** * @return array */ public function capability() { return [ 'functions' => [ 'file_transfer' => true, 'send_documents' => true, 'send_articles' => true, 'send_storage' => true, 'send_tracking' => true, 'send_sales_report' => true, 'receive_documents' => true, 'receive_articles' => true, 'receive_storage' => true, 'receive_tracking' => true, 'receive_sales_report' => true, ], ]; } /** * @param null|Uebertragungen $transferModul * * @return Uebertragungen|null */ public function getTransferModul($transferModul = null) { if($transferModul !== null && $transferModul instanceof Uebertragungen) { $this->transferModule = $transferModul; return $this->transferModule; } if($this->transferModule === null) { $this->transferModule = $this->app->erp->LoadModul('uebertragungen'); } return $this->transferModule; } /** * @param int $requestId * @param string $status * @param string $message * @param string $doctype * @param int $doctypeId * @param int $fileId * @param int $monitorId * * @return int */ public function setRequestItemStatus( $requestId, $status, $message = '', $doctype = '', $doctypeId = 0, $fileId = 0, $monitorId = 0 ) { $requestItem = $this->app->DB->SelectRow( sprintf( 'SELECT * FROM api_request WHERE id = %d', $requestId ) ); if(empty($requestItem)) { return 0; } $requestStatus = stripos($status, 'error')!==false?'error':$status; $this->app->DB->Update( sprintf( "UPDATE api_request SET status = '%s' WHERE id = %d", $this->app->DB->real_escape_string($requestStatus), $requestId ) ); $transferModule = $this->getTransferModul(); if($transferModule === null) { return 0; } return $transferModule->AddUbertragungMonitorLog( $this->id, $fileId, $requestId, $status, $message, '', '', '', $doctype, $doctypeId, $monitorId ); } /** * @param string $name * @param mixed $value * * @return mixed|null */ public function setSetting($name, $value) { $this->getSettings(); $this->settings[$name] = $value; $oldSettingsString = $this->app->DB->Select( sprintf( 'SELECT `einstellungen_json` FROM `uebertragungen_account` WHERE `id` = %d LIMIT 1', $this->id ) ); $isOldSettingValid = false; if(!empty($oldSettingsString)) { $oldSettings = json_decode($oldSettingsString, true); if(is_array($oldSettings)) { $isOldSettingValid = true; } } $this->app->erp->StartChangeLog('uebertragungen_account', $this->id); $this->app->DB->Update( sprintf( "UPDATE `uebertragungen_account` SET `einstellungen_json` = '%s' WHERE `id` = %d LIMIT 1", $this->app->DB->real_escape_string(json_encode($this->settings)), $this->id ) ); $this->app->erp->WriteChangeLog(); if(!$isOldSettingValid) { return $this->getSettings(); } $newSettings = $this->app->DB->Select( sprintf( 'SELECT `einstellungen_json` FROM `uebertragungen_account` WHERE `id` = %d LIMIT 1', $this->id ) ); if(!empty($newSettings)) { $newSettings = json_decode($newSettings, true); if(is_array($newSettings)) { return $this->getSettings(); } } $this->app->erp->StartChangeLog('uebertragungen_account', $this->id); $this->app->DB->Update( sprintf( "UPDATE `uebertragungen_account` SET `einstellungen_json` = '%s' WHERE `id` = %d LIMIT 1", $this->app->DB->real_escape_string($oldSettingsString), $this->id ) ); $this->app->erp->WriteChangeLog(); return $this->getSettings(); } /** * @return mixed|null */ public function getSettings() { if($this->id <= 0) { return null; } $this->transferdata = $this->app->DB->SelectRow( 'SELECT a.*, o.uebertragungen_account_id, o.client_id, o.client_secret, o.expiration_date, o.url, o.access_token FROM `uebertragungen_account` AS `a` LEFT JOIN `uebertragungen_account_oauth` AS `o` ON o.uebertragungen_account_id = a.id WHERE a.id = ' . $this->id ); if(!empty($this->app->DB->error())) { $this->transferdata = $this->app->DB->SelectRow( 'SELECT a.* FROM `uebertragungen_account` AS `a` WHERE a.id = ' . $this->id ); } if(!empty($this->transferdata['einstellungen_json'])) { $this->settings = @json_decode($this->transferdata['einstellungen_json'], true); }elseif(!empty($this->stucture)){ foreach($this->stucture as $name => $val) { if(isset($val['default'])) { $this->settings[$name] = $val['default']; } } } if(empty($this->settings)) { $this->settings = null; } return $this->settings; } /** * @return array */ public function getTransferData() { if(empty($this->transferdata)) { $this->getSettings(); } return $this->transferdata; } /** * @return null */ public function SettingsStructure() { return null; } /** * @return array|null */ public function getStructure() { $this->stucture = $this->SettingsStructure(); if($this->app->erp->ModulVorhanden('TransferSmarty')) { $this->stucture = array_merge($this->stucture, [ 'useincommingconverter' => [ 'typ' => 'checkbox', 'bezeichnung' => 'Eingangskonverter verwenden', ], 'incommingtemplate' => [ 'typ' => 'textarea', 'size'=> 40, 'rows'=> 6, 'bezeichnung'=>'Eingang Template:', 'tag' => 'disabled="disabled" style="background-color:#ccc; " ', 'info' => '', ], 'incommingdata' => [ 'typ' => 'hidden', ], ]); } return $this->stucture; } /** * @param string $file * @param Uebertragungen $transferModul * * @return string */ public function convertIncomming($file, $transferModul) { if(!empty($this->settings['useincommingconverter']) && !empty($this->settings['incommingtemplate'])) { $obj = $this->app->loadModule('TranferSmarty'); if(empty($obj) || !method_exists($obj, 'convertIncomingFile')) { return $file; } $obj->setSettings($this->settings); try { $file = $this->convertIncomingFile($file); } catch(Exception $e) { $fileId = $transferModul->GetFileId($this->id, $file, false); $transferModul->AddUbertragungMonitorLog($this->id, $fileId,0,'xml_parseerror', ''); } } return $file; } /** * @param string $target * @param null|array $struktur * * @return string|null */ public function Settings($target = 'return', $struktur = null) { if(!$this->id) { return null; } if($struktur === null){ $struktur = $this->getStructure(); } else { $this->stucture = $struktur; } $this->getSettings(); if($this->app->Secure->GetPOST('speichern')) { $uebertragungen_account = $this->transferdata; $json = $this->settings; $modul = $uebertragungen_account['xml_pdf']; if(!empty($struktur)){ foreach ($struktur as $name => $val) { if($modul === $this->app->Secure->GetPOST('xml_pdf')){ $json[$name] = $this->app->Secure->GetPOST($name, '', '', 1); } if(isset($val['replace'])){ switch ($val['replace']) { case 'lieferantennummer': $json[$name] = $this->app->erp->ReplaceLieferantennummer(1, $json[$name], 1); break; case 'shop': $json[$name] = explode(' ', $json[$name]); $json[$name] = reset($json[$name]); break; case 'lagerplatz': $json[$name] = $this->app->erp->ReplaceLagerPlatz(1, $json[$name], 1); break; case 'Layoutvorlage': $json[$name] = explode(' ', $json[$name]); $json[$name] = (int)reset($json[$name]); break; case 'artikelnummer': $tmp = trim($json[$name]); $rest = explode(' ',$tmp); $rest = $rest[0]; $json[$name] = $this->app->DB->Select( sprintf( "SELECT id FROM artikel WHERE nummer='%s' AND nummer!='' AND geloescht=0 ORDER BY projekt = %d DESC LIMIT 1", $rest, $this->transferdata['projekt'] ) ); break; } } } } $json_str = $this->app->DB->real_escape_string(json_encode($json)); $this->app->erp->StartChangeLog('uebertragungen_account', $this->id); $this->app->DB->Update("UPDATE `uebertragungen_account` SET `einstellungen_json` = '$json_str' WHERE `id` = '".$this->id."' LIMIT 1"); $this->app->erp->WriteChangeLog(); } $id = $this->id; $json = $this->app->DB->Select("SELECT einstellungen_json FROM uebertragungen_account WHERE id = '$id' LIMIT 1"); if(!empty($json)) { $json = json_decode($json, true); }else{ $json = null; } foreach($struktur as $name => $val) { $changed = false; if(isset($val['default']) && !isset($json[$name])) { $changed = true; $json[$name] = $val['default']; } } if(!empty($changed)) { $json_str = $this->app->DB->real_escape_string(json_encode($json)); $this->app->erp->StartChangeLog('uebertragungen_account', $this->id); $this->app->DB->Update("UPDATE `uebertragungen_account` SET `einstellungen_json` = '$json_str' WHERE `id` = '".$this->id."' LIMIT 1"); $this->app->erp->WriteChangeLog(); } if(!empty($struktur)) { $html = '
{|Übertragungenspezifische Einstellungen|} '; foreach($struktur as $name => $val) { if(empty($val['typ']) || $val['typ'] !== 'hidden') { continue; } $html .= ''; } $html .= ''; } if($oneCol) { $html .= ''; } $tag = !empty($val['tag'])?$val['tag']:''; $placeholder = !empty($val['placeholder'])?$val['placeholder']:''; $size = !empty($val['size'])?$val['size']:''; $rows = !empty($val['rows'])?$val['rows']:''; if(isset($val['replace'])) { switch($val['replace']) { case 'lieferantennummer': $json[$name] = $this->app->erp->ReplaceLieferantennummer(0,$json[$name],0); if($target !== 'return') { $this->app->YUI->AutoComplete($name, 'lieferant', 1); } break; case 'lagerplatz': $json[$name] = $this->app->erp->ReplaceLagerPlatz(0, $json[$name], 0); if($target !== 'return') { $this->app->YUI->AutoComplete($name, 'lagerplatz', 0); } break; case 'artikelnummer': $json[$name] = $this->app->erp->ReplaceArtikel(0,$json[$name],0); if($target !== 'return') { $this->app->YUI->AutoComplete($name, 'artikelnummer', 1); } break; case 'shop': $json[$name] .= ($json[$name]?' '.$this->app->DB->Select("SELECT bezeichnung FROM shopexport WHERE id = '".(int)$json[$name]."'"):''); if($target !== 'return') { $this->app->YUI->AutoComplete($name, 'shopnameid'); } break; case 'Layoutvorlage': $json[$name] = (int)$json[$name]; if($json[$name] <= 0) { $json[$name] = ''; } else { $json[$name] = (string)$this->app->DB->Select( sprintf( "SELECT CONCAT(`id`,' ', `name`) FROM `layoutvorlagen` WHERE `id` = %d ", $json[$name] ) ); } if($target !== 'return') { $this->app->YUI->AutoComplete($name, 'layoutvorlage'); } break; case 'etiketten': if($target !== 'return') { $this->app->YUI->AutoComplete($name, 'etiketten'); } break; } } switch($typ) { case 'textarea': $html .= ''; break; case 'checkbox': $html .= ''; break; case 'select': $html .= ''; break; case 'submit': if(isset($val['text'])) { $html .= '
'; } break; case 'custom': if(isset($val['function'])) { $tmpfunction = $val['function']; if(method_exists($this, $tmpfunction)) { $html .= $this->$tmpfunction(); } } break; default: if($typ === 'time' || $typ === 'zeit') { $this->app->YUI->TimePicker($name); }elseif($typ === 'date' || $typ === 'datum') { $this->app->YUI->DatePicker($name); } $html .= ''; break; } if(isset($val['info']) && $val['info']) { $html .= ' '.$val['info'].''; } $html .= '
'; $first = false; } if($target !== 'return'){ $this->app->Tpl->Add($target, $html); } return $html; } }
'; } else{ $html = ''; } $first = true; foreach($struktur as $name => $val) { $tdtag = !empty($val['tdtag'])?$val['tdtag']:''; $oneCol = !empty($val['onecol']); $typ = 'text'; if(!empty($val['typ'])) { $typ = $val['typ']; if($typ === 'hidden') { continue; } } if(isset($val['heading'])) { $html .= '
'.html_entity_decode($val['heading']).'
' . ($first ? '' : '') . (empty($val['bezeichnung']) ? $name : $val['bezeichnung']) . '
'; } else{ $html .= '
' . ($first ? '' : '') . (empty($val['bezeichnung']) ? $name : $val['bezeichnung']) . '