From 2107e986f6a10dd3bf3018d6a4d38ebaee2d8de7 Mon Sep 17 00:00:00 2001 From: Xenomporio <> Date: Mon, 16 May 2022 14:14:29 +0200 Subject: [PATCH] Removed comment lines starting with # --- www/lib/class.erpapi.php | 92934 ++++++++++++++++++------------------- 1 file changed, 46467 insertions(+), 46467 deletions(-) diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php index d4c9fca2..f951d145 100644 --- a/www/lib/class.erpapi.php +++ b/www/lib/class.erpapi.php @@ -1,46470 +1,46470 @@ -app=$app; - if(empty($this->app->erp)){ - $this->app->erp = $this; - } - $this->firstlogtime = microtime(true); - $this->logtime = microtime(true); - - if(defined('SCRIPT_START_TIME')) - { - $this->firstlogtime = SCRIPT_START_TIME; - } - $this->cache = null; - $this->menuquery = null; - $this->BriefpapierHintergrunddisable = false; - } - - /** - * @param string $category - * @param string $name - * @param string $status - * @param string $message - */ - public function setSystemHealth($category, $name, $status, $message = '') { - /** @var Systemhealth $obj */ - $obj = $this->LoadModul('systemhealth'); - if(empty($obj)) { - return; - } - $obj->changeStatus($category, $name, $status, $message); - } - - public function loadCronjobObj() - { - $dbName = $this->app->Conf->WFdbname; - /** @var Prozessstarter cronjobObj */ - if(empty($this->cronjobObj) || empty($this->cronjobObjDb) || $this->cronjobObjDb !== $dbName) { - $this->cronjobObj = $this->app->loadModule('prozessstarter', true); - $this->cronjobObjDb = $this->app->Conf->WFdbname; - } - } - - /** - * @param string $status - * @param null|int $prozessstarter - */ - public function ProzessstarterStatus($status, $prozessstarter = null) - { - $this->loadCronjobObj(); - if(empty($this->cronjobObj)) { - return; - } - if(method_exists($this->cronjobObj,'setCronjobStatus')) { - $this->cronjobObj->setCronjobStatus($status, $prozessstarter); - } - } - - /** - * @param array $output - * @param array $task - */ - public function checkCronjobMemory($output, $task) - { - $this->loadCronjobObj(); - if(method_exists($this->cronjobObj,'checkCronjobMemory')) { - $this->cronjobObj->checkCronjobMemory($output, $task); - } - } - - public function checkIfCronjobRunning($uid, $task) - { - $this->loadCronjobObj(); - if(method_exists($this->cronjobObj,'checkIfCronjobRunning')) { - $this->cronjobObj->checkIfCronjobRunning($uid, $task); - } - } - - public function checkCronjobRunning($uid, $task) { - $this->loadCronjobObj(); - if(empty($this->cronjobObj)) { - return; - } - if(method_exists($this->cronjobObj,'checkCronjobRunning')) { - return $this->cronjobObj->checkCronjobRunning($uid, $task); - } - return true; - } - - public function closeAndLogCronjob($uid, $fromStarter2 = false) - { - $this->loadCronjobObj(); - if(method_exists($this->cronjobObj,'closeAndLogCronjob')) { - $this->cronjobObj->closeAndLogCronjob($uid, $fromStarter2); - } - } - - public function setCronjobRunning($uid, $task = null, $active = true) { - $this->loadCronjobObj(); - if(empty($this->cronjobObj)) { - return; - } - if(method_exists($this->cronjobObj,'setCronjobRunning')) { - $this->cronjobObj->setCronjobRunning($uid, $task, $active); - } - } - - // @bruno - public function TrackingCSV($datei, $versand, $append = false, $uebertragung = 0) - { - if((int)$versand <= 0 || $datei == ''){ - return false; - } - $arr = $this->app->DB->SelectRow("SELECT ".($uebertragung?" am.id_ext as auftragextid, ":"")." v.tracking, l.belegnr, if(ifnull(l.sprache,'') = '',ifnull(a.sprache,''),l.sprache) as tracking_sprache, l.name, v.versandart FROM versand v INNER JOIN lieferschein l ON v.lieferschein = l.id AND v.id = '$versand' - LEFT JOIN auftrag a ON l.auftragid = a.id - ".($uebertragung?" - LEFT JOIN api_mapping am ON am.tabelle = 'auftrag' AND am.uebertragung_account = '$uebertragung' AND id_int = a.id - ":"")." - LIMIT 1"); - if($arr) - { - $file_ex = @is_file($datei); - $handle = @fopen($datei, $append?'a':'w'); - if($handle) - { - if(!$append || !$file_ex) - { - $output = ""; - foreach($arr as $k => $v)$output .= $k.';'; - $output .= "\r\n"; - fputs($handle, $output); - } - $output = ""; - foreach($arr as $k2 => $v2) - { - $output .= '"'.$v2.'"'.';'; - } - $output .= "\r\n"; - fputs($handle, $output); - fclose($handle); - return true; - } - } - return false; - } - -/** - * @bruno Prüfen ob es weg kann - * - * @deprecated - * - * @param $beleg - * - * @return void - */ -public function checkPDFClass($beleg) -{ - if(empty($beleg)) - { - return; - } - $classcustom = ucfirst($beleg).'PDFCustom'; - $class = ucfirst($beleg).'PDF'; - if(class_exists($classcustom) || class_exists($class) || !file_exists(__DIR__.'/dokumente/class.'.$beleg.'.php')){ - return; - } - if(!defined('FPDF_FONTPATH')){ - define('FPDF_FONTPATH',__DIR__.'/pdf/font/'); - } - if(!class_exists('FPDFWAWISION')) - { - if(file_exists(dirname(dirname(__DIR__)).'/conf/user_defined.php')){ - include_once dirname(dirname(__DIR__)).'/conf/user_defined.php'; - } - if(defined('USEFPDF3') && USEFPDF3 && file_exists(__DIR__ .'/pdf/fpdf_3.php')) - { - require_once __DIR__ .'/pdf/fpdf_3.php'; - } - else if(defined('USEFPDF2') && USEFPDF2 && file_exists(__DIR__ .'/pdf/fpdf_2.php')) - { - require_once __DIR__ .'/pdf/fpdf_2.php'; - } else { - require_once __DIR__ .'/pdf/fpdf.php'; - } - } - if(!class_exists('PDF_EPS')){ - include_once __DIR__.'/pdf/fpdf_final.php'; - } - if(!class_exists('SuperFPDF')){ - require_once __DIR__.'/dokumente/class.superfpdf.php'; - } - - if(!class_exists('Briefpapier')) - { - if(file_exists(__DIR__.'/dokumente/class.briefpapier_custom.php')) - { - require_once __DIR__.'/dokumente/class.briefpapier_custom.php'; - }else{ - require_once __DIR__.'/dokumente/class.briefpapier.php'; - } - } - - if(file_exists(__DIR__.'/dokumente/class.'.$beleg.'_custom.php')) - { - include_once __DIR__.'/dokumente/class.'.$beleg.'_custom.php'; - }elseif(file_exists(__DIR__.'/dokumente/class.'.$beleg.'.php')) - { - include_once __DIR__.'/dokumente/class.'.$beleg.'.php'; - } - if(!class_exists('image')){ - require __DIR__ . '/class.image.php'; - } -} - - function ArtikelUebertragen($datei, $artikelarr, $uebertragung = 0) - { - /** @var Uebertragungen $obj */ - $obj = $this->app->erp->LoadModul('uebertragungen'); - if(!empty($obj) && method_exists($obj, 'ArtikelUebertragen')) { - return $obj->ArtikelUebertragen($datei, $artikelarr, $uebertragung); - } - return false; - } - - /** @deprecated */ - function LagerzahlenCSV($datei, $artikel, $lager = 0, $lager_platz = 0, $append = false) - { - if((int)$artikel <= 0 || $datei == '')return false; - if($lager || $lager_platz) - { - $artikelarr = $this->app->DB->SelectRow("SELECT art.nummer, art.herstellernummer, art.ean, ifnull(lag.menge,0) as lager_menge_total, lag.lager_platz - FROM artikel art - LEFT JOIN ( - SELECT lpi.artikel,lp.kurzbezeichnung as lager_platz, trim(ifnull(sum(lpi.menge),0))+0 as menge FROM lager_platz_inhalt lpi - INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id AND lp.geloescht = 0 ".($lager_platz?" AND lp.id = '$lager_platz' ":"")." - ".($lager?" AND lp.lager = '$lager' ":"")." - WHERE lpi.artikel = '$artikel' GROUP BY lp.id - ) lag ON art.id = lag.artikel WHERE art.id = '$artikel' LIMIT 1"); - }else{ - $artikelarr = $this->app->DB->SelectRow("SELECT art.nummer, art.herstellernummer, art.ean FROM artikel art - WHERE art.id = '$artikel' LIMIT 1"); - if($artikelarr)$artikelarr['lager_menge_total'] = floor($this->ArtikelAnzahlVerkaufbar($artikel)); - } - if($artikelarr){ - $file_ex = @is_file($datei); - $handle = @fopen($datei, $append?'a':'w'); - if($handle) - { - if(!$append || !$file_ex) - { - $output = ""; - foreach($artikelarr as $k => $v)$output .= $k.';'; - $output .= "\r\n"; - fputs($handle, $output); - } - $output = ""; - foreach($artikelarr as $k2 => $v2) - { - $output .= '"'.$v2.'"'.';'; - } - $output .= "\r\n"; - fputs($handle, $output); - fclose($handle); - return true; - } - } - return false; - } - -// @todo -function Belegeexport($datei, $doctype, $doctypeid, $append = false, $optionen = null) -{ - if($doctype == '' || (int)$doctypeid <= 0 || $datei == '') { - return false; - } - - $arr = [ - 'adresse','artikel','art','status','beleg_status','beleg_datum','beleg_lieferdatum','beleg_tatsaechlicheslieferdatum','beleg_versandart','beleg_zahlungsweise','beleg_belegnr','beleg_hauptbelegnr','beleg_kundennummer','beleg_name','beleg_abteilung', - 'beleg_unterabteilung','beleg_adresszusatz','beleg_ansprechpartner','beleg_telefon','beleg_email','beleg_land','beleg_strasse','beleg_plz','beleg_ort','beleg_projekt','beleg_aktion', - 'beleg_internebemerkung','beleg_internebezeichnung','beleg_freitext','beleg_ihrebestellnummer','beleg_lieferbedingung','beleg_art','artikel_nummer','artikel_bezeichnung','artikel_beschreibung', - 'artikel_menge','artikel_preis','artikel_rabatt','artikel_waehrung','artikel_lieferdatum','artikel_sort','artikel_umsatzsteuer','artikel_einheit','artikel_zolltarifnummer', - 'artikel_herkunftsland','artikel_artikelnummerkunde', - 'artikel_freifeld1','artikel_freifeld2','artikel_freifeld3','artikel_freifeld4','artikel_freifeld5','artikel_freifeld6','artikel_freifeld7','artikel_freifeld8','artikel_freifeld9','artikel_freifeld10', - 'artikel_freifeld11','artikel_freifeld12','artikel_freifeld13','artikel_freifeld14','artikel_freifeld15','artikel_freifeld16','artikel_freifeld17','artikel_freifeld18','artikel_freifeld19','artikel_freifeld20','artikel_freifeld21','artikel_freifeld22','artikel_freifeld23','artikel_freifeld24','artikel_freifeld25','artikel_freifeld26','artikel_freifeld27','artikel_freifeld28','artikel_freifeld29','artikel_freifeld30','artikel_freifeld31','artikel_freifeld32','artikel_freifeld33','artikel_freifeld34','artikel_freifeld35','artikel_freifeld36','artikel_freifeld37','artikel_freifeld38','artikel_freifeld39','artikel_freifeld40', - 'beleg_unterlistenexplodieren' - ]; - - if($doctype === 'bestellung') { - $arr[] = 'beleg_lieferantennummer'; - } - - $colsa[] = 't.adresse'; - if($doctype !== 'verbindlichkeit'){ - $colsa[] = 'p.artikel'; - } - $colsa[] = 'pr.abkuerzung as beleg_projekt'; - if(isset($optionen['art']) && $optionen['art'] != '') { - $colsa[] = "'".$optionen['art']."' as art"; - } - else{ - $colsa[] = "'$doctype' as art"; - } - - $checkfields = $this->app->DB->SelectRow("SELECT * FROM $doctype LIMIT 1"); - $checkfieldsposition = $doctype === 'verbindlichkeit' - ?null: $this->app->DB->SelectRow("SELECT * FROM ".$doctype."_position LIMIT 1"); - foreach($arr as $v) { - if(strpos($v,'beleg_') === 0) { - $k = substr($v, 6); - if($k !== 'projekt' && $k !== 'hauptbelegnr') { - if(($k !== 'tatsaechlicheslieferdatum' && $k !== 'aktion' && $k !== 'art' && $k !== 'ihrebestellnummer') || $doctype === 'auftrag') { - if(($doctype !== 'auftrag' && $doctype !== 'lieferschein') || $k !== 'lieferdatum') { - if(array_key_exists($k,$checkfields)) { - $colsa[] = 't.'.$k.' as '.$v; - } - } - } - } - } - elseif(strpos($v,'artikel_') === 0) { - $k = substr($v, 8); - if($k !== 'preisfuermenge' || $doctype === 'auftrag') { - if(($k !== 'rabatt' - || ($doctype !== 'bestellung' && $doctype !== 'lieferschein' && $doctype !== 'retoure' && $doctype!=='produktion')) - && (($k !== 'preis' && $k !== 'waehrung' && $k !== 'umsatzsteuer') || - ($doctype !== 'lieferschein' && $doctype!=='produktion' && $doctype !== 'retoure'))) { - if($doctype === 'bestellung' && $k === 'nummer') { - $k = 'bestellnummer'; - } - if($doctype === 'bestellung' && $k === 'bezeichnung') { - $k = 'bezeichnunglieferant'; - } - if($doctype === 'verbindlichkeit') { - $colsa[] = " '' as " . $v; - continue; - } - if(array_key_exists($k,$checkfieldsposition) && $k !== 'projekt') { - if($k=='preis') - { - $colsa[] = $this->app->erp->FormatPreis('p.'.$k).' as '.$v; - } - else if($k=='menge') - { - $colsa[] = $this->app->erp->FormatMenge('p.'.$k).' as '.$v; - } - else { - $colsa[] = 'p.' . $k . ' as ' . $v; - } - } - } - } - } - } - if($doctype === 'auftrag') { - $colsa[] = 't2.belegnr as beleg_hauptbelegnr'; - } - if($doctype !== 'verbindlichkeit') { - $colsa[] = " art.ean as artikel_ean "; - } - - $colsa[] = "'1' as artikel_preisfuermenge "; - $cols = implode(',', $colsa); - switch($doctype) { - case 'verbindlichkeit': - $arr = $this->app->DB->SelectArr( - sprintf( - "SELECT %s - FROM `verbindlichkeit` AS `t` - LEFT JOIN `projekt` AS `pr` ON t.projekt = pr.id - WHERE t.id = %d", - $cols, $doctypeid - ) - ); - break; - case 'auftrag': - $arr = $this->app->DB->SelectArr( - sprintf( - "SELECT %s - FROM `auftrag` AS `t` - INNER JOIN `auftrag_position` AS `p` ON t.id = p.auftrag - INNER JOIN `artikel` AS `art` ON p.artikel = art.id - LEFT JOIN `projekt` AS `pr` ON t.projekt = pr.id - LEFT JOIN `auftrag` AS `t2` ON t.teillieferungvon = t2.id - WHERE t.id = %d", - $cols, $doctypeid - ) - ); - break; - default: - $arr = $this->app->DB->SelectArr( - sprintf( - "SELECT %s - FROM `%s` AS `t` - INNER JOIN `%s` AS `p` ON t.id = p.%s - INNER JOIN `artikel` AS `art` ON p.artikel = art.id - LEFT JOIN `projekt` AS `pr` ON t.projekt = pr.id - WHERE t.id = %d", - $cols, $doctype, $doctype.'_position',$doctype, $doctypeid - ) - ); - break; - } - - if($arr) { - $file_ex = @is_file($datei); - $handle = @fopen($datei, $append?'a':'w'); - if($handle) { - if(!$append || !$file_ex) { - $output = ''; - foreach($arr[0] as $k => $v) { - $output .= $k.';'; - } - $output .= "\r\n"; - fwrite($handle, $output); - } - $output = ''; - foreach($arr as $k => $v) { - foreach($v as $k2 => $v2) { - if(($k2 === 'belegnr' || $k2 === 'beleg_belegnr')) { - if($k > 0) { - if((isset($optionen['new']) && $optionen['new'] ) || $v2 == '' || !(isset($optionen['noparent']) && $optionen['noparent'])){ - $v2 = 'PARENT'; - } - } - else { - if(isset($optionen['new']) && $optionen['new']) { - $v2 = 'NEW'; - } - } - } - $v3 = str_replace(array('ü','ö','ä','Ü','Ö','Ä','ß','"'),array('ü','ö','ä','Ü','Ö','Ä','ß','"'.'"'),$v2); - if(isset($optionen['nowrap'])) { - $v3 = str_replace(array("\r","\n"),'', $v3); - } - $output .= '"'.$v3.'"'.';'; - } - $output .= "\r\n"; - } - fwrite($handle, $output); - fclose($handle); - return true; - } - } - return false; -} - - // $app->Module()->Warehouse()->Gateway()->isConsumptionWarehouseAvailable() - // $app->Warehouse()-> - function Verbrauchslagervorhanden() - { - if(is_null($this->verbrauchslagervorhanden)) - { - $this->verbrauchslagervorhanden = $this->app->DB->Select("SELECT id FROM lager_platz WHERE verbrauchslager = 1 LIMIT 1")?true:false; - } - return $this->verbrauchslagervorhanden; - } - - public function ExitWawi($status = 0) - { - if(method_exists($this->app, 'ExitXentral')) { - $this->app->ExitXentral($status); - } - exit($status); - } - - // @refactor Module OrderPicking - public function GetNextKommissionierung($bezeichnung = '') - { - $this->app->DB->Insert("INSERT INTO kommissionierung (bearbeiter, bezeichnung) values ('".$this->app->DB->real_escape_string($this->app->User->GetName())."','".$bezeichnung."')"); - return $this->app->DB->GetInsertID(); - } - - // @refactor in DevTools - function LogWithTime($message, $json = false) - { - if(defined('SCRIPT_START_TIME')) - { - $akttime = microtime(true); - $aktmemory = number_format(memory_get_usage()/1024.0/1024.0,2); - $peakmemory = number_format(memory_get_peak_usage()/1024.0/1024.0,2); - $runtime = number_format($akttime - $this->logtime,3); - $runtimeall = number_format($akttime - $this->firstlogtime,3); - $this->LogFile('Time all '.$runtimeall."s last: ".$runtime."s Memakt:".$aktmemory."MB peak:".$peakmemory."MB ".$this->app->DB->real_escape_string( $json?json_encode($message):$message)); - $this->logtime = $akttime; - } - } - - /** - * @deprecated Secure-Klasse verwenden - * - * @param $data - * - * @return mixed|null|string|string[] - */ - function xss_clean($data) - { - // Fix &entity\n; - $data = str_replace(array('&','<','>'), array('&amp;','&lt;','&gt;'), $data); - $data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data); - $data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data); - $data = html_entity_decode($data, ENT_COMPAT, 'UTF-8'); - - // Remove any attribute starting with "on" or xmlns - $data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data); - - // Remove javascript: and vbscript: protocols - $data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data); - $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data); - $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data); - - // Only works in IE: - $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data); - $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data); - $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data); - - // Remove namespaced elements (we do not need them) - $data = preg_replace('#]*+>#i', '', $data); - - do - { - // Remove really unwanted tags - $old_data = $data; - $data = preg_replace('#]*+>#i', '', $data); - } - while ($old_data !== $data); - - return $data; - } - - // @refactor in Benutzer Modul - - /** - * @return array - */ - public function getEncModullist() - { - if(file_exists(__DIR__.'/modulliste.php')) { - $erg = []; - include __DIR__.'/modulliste.php'; - return $erg; - } - return []; - } - - /** - * @deprecated - * - * @return bool - */ - function checkLicense() - { - return true; - } - - // @refactor LicenceManager Komponente - final public function isIoncube() - { - if(empty(erpAPI::$license)) - { - erpAPI::Ioncube_Property(''); - } - return !empty(erpAPI::$license); - } - - // @refactor LicenceManager Komponente - static function Ioncube_Property($key = '') - { - if(!class_exists('License')) - { - if(is_file(dirname(dirname(__DIR__)).'/phpwf/plugins/class.license.php')) - { - include(dirname(dirname(__DIR__)).'/phpwf/plugins/class.license.php'); - } - } - if(class_exists('License')) - { - if(!erpAPI::$license) { - erpAPI::$license = new License(); - } - } - if(erpAPI::$license) { - return erpAPI::$license->getProperty($key); - } - if(function_exists('ioncube_license_properties')) - { - if(!self::$ioncubeproperties) { - self::$ioncubeproperties = ioncube_license_properties(); - } - $data = self::$ioncubeproperties; - if($data && is_array($data) && isset($data[$key]) && is_array($data[$key]) && isset($data[$key]['value'])) { - $value = $data[$key]['value']; - return $value; - } - } - return false; - } - - // @refactor LicenceManager Komponente - static function Ioncube_getMaxUser() - { - return erpAPI::Ioncube_Property('maxuser'); - } - - // @refactor LicenceManager Komponente - static function Ioncube_getMaxLightusers() - { - return erpAPI::Ioncube_Property('maxlightuser'); - } - - // @refactor LicenceManager Komponente - static function Ioncube_getMaxLightusersRights() - { - $rechte = (int)erpAPI::Ioncube_Property('maxlightuserrights'); - if($rechte < 5) { - $rechte = 30; - } - return $rechte; - } - - // @refactor LicenceManager Komponente - static function Ioncube_BenutzervorlageAnzahlLightuser(&$app, $vorlage) - { - if(!isset($app->DB)) { - return; - } - return $app->DB->Select("SELECT count(id) FROM `user` WHERE activ = 1 AND type = 'lightuser' AND vorlage = '$vorlage'"); - } - - // @refactor LicenceManager Komponente - static function Ioncube_LightuserRechteanzahl($app, $id, $type = 'user') - { - if(!isset($app->DB)) { - return false; - } - if($type === 'vorlage') { - $id = $app->DB->Select("SELECT id FROM `uservorlage` WHERE bezeichnung <> '' AND bezeichnung = '".$app->DB->real_escape_string($id)."' LIMIT 1"); - } - $id = (int)$id; - if($id <= 0) { - return false; - } - if($type === 'vorlage') - { - if(!$app->DB->Select("SELECT id FROM `uservorlage` WHERE id = '$id' LIMIT 1")) { - return false; - } - return $app->DB->Select("SELECT count(DISTINCT module, action) FROM `uservorlagerights` WHERE vorlage = '$id' AND permission = 1"); - } - if(!$app->DB->Select("SELECT id FROM `user` WHERE id = '$id' LIMIT 1")) { - return false; - } - return $app->DB->Select("SELECT count(DISTINCT module, action) FROM `userrights` WHERE `user` = '$id' AND permission = 1"); - } - - // @refactor LicenceManager Komponente - static function Ioncube_HasExpired() - { - return erpAPI::Ioncube_Property('expdate') && (int)erpAPI::Ioncube_Property('expdate') < time(); - } - - // @refactor LicenceManager Komponente - static function Ioncube_ExpireInDays() - { - if(function_exists('ioncube_file_info')) - { - if(erpAPI::Ioncube_Property('expdate')) { - return round(((int)erpAPI::Ioncube_Property('expdate')-time())/86400); - } - } - return false; - } - - // @refactor LicenceManager Komponente - static function Ioncube_BeforeExpire() - { - if(false === erpAPI::Ioncube_ExpireInDays()) { - return false; - } - return erpAPI::Ioncube_ExpireInDays() < 42; - } - - // @refactor LicenceManager Komponente - static function Ioncube_ExpireDate($format = 'd.m.Y') - { - if(function_exists('ioncube_file_info')) - { - $dat = erpAPI::Ioncube_Property('expdate'); - if(!$dat) { - return false; - } - return date($format,(int)$dat); - } - return false; - } - - // @refactor LicenceManager Komponente - final function GetIoncubeServerList() - { - $ret = null; - $i = 1; - while($check = $this->IoncubeProperty('servername'.$i)) - { - $ret[] = $check; - $i++; - } - return $ret; - } - - // @refactor LicenceManager Komponente - - /** - * @return bool - */ - final function ServerOK() - { - $servername = (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] != '')?$_SERVER['SERVER_NAME']:(isset($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:''); - $serverlist = $this->GetIoncubeServerList(); - if(!$serverlist) { - return true; - } - foreach($serverlist as $check) { - if($servername == $check) { - return true; - } - } - - return false; - } - - // @refactor LicenceManager Komponente - final function IoncubeProperty($key) - { - if(!class_exists('License')) - { - if(is_file(dirname(dirname(__DIR__)).'/phpwf/plugins/class.license.php')) - { - include(dirname(dirname(__DIR__)).'/phpwf/plugins/class.license.php'); - } - } - if(class_exists('License')) - { - if(!erpAPI::$license)erpAPI::$license = new License(); - } - if(erpAPI::$license)return erpAPI::$license->getProperty($key); - if(method_exists('erpAPI','Ioncube_Property'))return erpAPI::Ioncube_Property($key); - if(function_exists('ioncube_license_properties')) - { - $data = ioncube_license_properties(); - if($data && isset($data[$key]) && isset($data[$key]['value']))return $data[$key]['value']; - } - return false; - } - - // @refactor LicenceManager Komponente - final function IoncubegetMaxUser() - { - return $this->IoncubeProperty('maxuser'); - } - - // @refactor LicenceManager Komponente - final function IoncubeHasExpired() - { - if($this->IoncubeProperty('expdate')) - { - if((int)$this->IoncubeProperty('expdate') < time())return true; - } - return false; - if(function_exists('ioncube_license_has_expired'))return ioncube_license_has_expired(); - return false; - } - - // @refactor LicenceManager Komponente - final function IoncubeServerOK() - { - if(function_exists('ioncube_license_matches_server'))return ioncube_license_matches_server(); - return true; - } - - // @refactor LicenceManager Komponente - final function IoncubeExpireInDays() - { - if(function_exists('ioncube_file_info')) - { - if($this->IoncubeProperty('expdate'))return round(((int)$this->IoncubeProperty('expdate')-time())/86400); - } - return false; - } - - // @refactor LicenceManager Komponente - final function IoncubeBeforeExpire() - { - if(false === $this->IoncubeExpireInDays())return false; - return $this->IoncubeExpireInDays() < 42; - } - - // @refactor LicenceManager Komponente - final function IoncubeExpireDate($format = 'd.m.Y') - { - if(function_exists('ioncube_file_info')) - { - $dat = $this->IoncubeProperty('expdate'); - if(!$dat) { - return false; - } - return date($format,(int)$dat); - } - return false; - } - - /** - * @return array|null - */ - public function getAppList() - { - if(!isset($this->appList[$this->app->Conf->WFdbname])) { - $this->appList[$this->app->Conf->WFdbname] = $this->app->getAppList(); - } - - return $this->appList[$this->app->Conf->WFdbname]; - } - -// @refactor LicenceManager Komponente -function ModuleBenutzeranzahlLizenzFehler($add = '', $typ = 'module', $vorlage = 0) -{ - if(!method_exists($this->app->erp, 'IoncubeProperty')) { - return null; - } - if($typ === 'module') - { - if(strpos($add, 'shopimporter_') === 0) { - return null; - } - if($add === 'welcome' || $add === 'api' || $add === 'ajax') { - return null; - } - $anz = (int)$this->IoncubeProperty('moduleanzX'.str_replace('_','X',$add)); - if($anz > 1) { - $anzadmin = (int)$this->app->DB->Select("SELECT count(id) FROM `user` WHERE activ = 1 AND type = 'admin'"); - $rechte = (int)$this->app->DB->Select("SELECT count(u.i) FROM `user` u - INNER JOIN (SELECT DISTINCT `user` FROM `userrights` WHERE module = '$add' AND permission = 1) ur ON u.id = ur.`user` - WHERE activ = 1 AND type <> 'admin' - "); - if($anzadmin + $rechte + 1 > $anz) { - return array('Error'=> 'Es '.($anz > 1?'sind':'ist').' nur '.$anz.' User für das Modul '.ucfirst($add).' lizenziert, es werden aber '.($anzadmin + $rechte + 1).' benötigt'); - } - } - return null; - } - if($typ === 'vorlage' && $vorlage) - { - if(strpos($add, 'shopimporter_') === 0) { - return null; - } - if($add === 'welcome' || $add === 'api' || $add === 'ajax') { - return null; - } - $anz = (int)$this->IoncubeProperty('moduleanzX'.str_replace('_','X',$add)); - if($anz > 1) - { - $anzadmin = (int)$this->app->DB->Select("SELECT count(id) FROM `user` WHERE activ = 1 AND type = 'admin'"); - $bezeichnung = $this->app->DB->Select("SELECT bezeichnung FROM uservorlage WHERE id = '$vorlage' LIMIT 1"); - if($bezeichnung == '') { - return null; - } - $rechte = (int)$this->app->DB->Select("SELECT count(u.i) FROM `user` u - INNER JOIN (SELECT DISTINCT `user` FROM `userrights` WHERE module = '$add' AND permission = 1) ur ON u.id = ur.`user` - WHERE activ = 1 AND type <> 'admin' AND vorlage != '".$this->app->DB->real_escape_string($bezeichnung)."' - "); - $neueuser = (int)$this->app->DB->Select("SELECT count(u.id) FROM `user` u - WHERE activ = 1 AND type <> 'admin' AND vorlage = '".$this->app->DB->real_escape_string($bezeichnung)."' - "); - if($anzadmin + $rechte + $neueuser > $anz) { - return array('Error'=> 'Es '.($anz > 1?'sind':'ist').' nur '.$anz.' User für das Modul '.ucfirst($add).' lizenziert, es werden aber '.($anzadmin + $rechte + $neueuser).' benötigt'); - } - } - } - - return null; -} - -// @refactor LicenceManager Komponente -function OnlineshopsLizenzFehler($add = '') -{ - if(!method_exists($this->app->erp, 'IoncubeProperty')) { - return false; - } - $shops = $this->app->DB->SelectArr("SELECT shoptyp,modulename FROM shopexport WHERE aktiv = 1 AND (shoptyp = 'intern' OR shoptyp = 'custom') AND modulename <> '' ORDER BY modulename"); - if(!$shops) { - return false; - } - $counts = null; - foreach($shops as $shop) - { - if($shop['shoptyp'] === 'intern') - { - $modulename = $shop['modulename']; - }else{ - if(preg_match_all('/(.*)\_(\d+).php/i',$shop['modulename'],$erg)) - { - $modulename = $erg[1][0]; - }else $modulename = ''; - } - if($modulename != '') - { - if(!isset($counts[$modulename]))$counts[$modulename] = 0; - $counts[$modulename]++; - } - } - if($add != '') - { - if(substr($add,-4) === '.php') - { - if(preg_match_all('/(.*)\_(\d+).php/i',$add,$erg)) - { - $add = $erg[1][0]; - }else { - $add = ''; - } - } - } - - if($add != '') - { - if(!isset($counts[$add])) { - $counts[$add] = 0; - } - $counts[$add]++; - } - if($counts) { - foreach($counts as $k => $v) { - if($v <= 1) { - continue; - } - $anz = (int)$this->IoncubeProperty('moduleanzX'.str_replace('_','X',$k)); - if($anz > 0 && $anz < $v) { - return array('Error'=> 'Es '.($anz > 1?'sind':'ist').' nur '.$anz.' Importer des Typs '.ucfirst(str_replace('shopimporter_','',$k)).' lizenziert'); - } - } - } - return false; -} - - function getApps() - { - /** @var Appstore $obj */ - $obj = $this->LoadModul('appstore'); - if(!empty($obj) && method_exists($obj,'getAppsList')) - { - return $obj->getAppsList(); - } - - return null; - } - - function StartseiteMenu() - { - /** @var Welcome $obj */ - $obj = $this->LoadModul('welcome'); - if(!empty($obj) && method_exists($obj,'StartseiteMenu')) - { - $obj->StartseiteMenu(); - } - } - - function EventAPIAdd($eventname,$parameter,$module,$action,$kommentar="", $api = 0) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'EventAPIAdd')) - { - return $obj->EventAPIAdd($eventname,$parameter,$module,$action,$kommentar, $api); - } - } - - function EventCall($id) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'EventCall')) - { - return $obj->EventCall($id); - } - } - - function EventSendRequest($methodname,$xml,$hash,$parameter="",&$result_body="", $api = 0) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'EventSendRequest')) - { - return $obj->EventSendRequest($methodname,$xml,$hash,$parameter,$result_body, $api); - } - } - -// @refactor Hook Komponente -function RemoveNavigationHook($module, $action = null) -{ - if(empty($module)) { - return; - } - if($action) - { - $this->app->DB->Delete("DELETE FROM `hook_navigation` WHERE `module` = '".$this->app->DB->real_escape_string($module)."' AND `action` = '".$this->app->DB->real_escape_string($action)."'"); - }else{ - $this->app->DB->Delete("DELETE FROM `hook_navigation` WHERE `module` = '".$this->app->DB->real_escape_string($module)."'"); - } -} - - /** - * @param string $table - * @param string $uniqeCol - */ -public function repairNullIds($table, $uniqeCol = 'name') -{ - $doppelteids = $this->app->DB->SelectArr( - sprintf( - 'SELECT `id`, count(*) as `co` FROM `%s` GROUP BY `id` HAVING COUNT(*) > 1', - $table - ) - ); - if(empty($doppelteids)) { - $this->CheckAlterTable(sprintf("ALTER TABLE `%s` ADD PRIMARY KEY(`id`);", $table)); - $maxid = 1+(int)$this->app->DB->Select(sprintf("SELECT max(id) FROM `%s`", $table)); - $this->CheckAlterTable( - sprintf( - "ALTER TABLE `%s` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=%d", - $table, - $maxid - ) - ); - return; - } - - foreach($doppelteids as $val) { - $maxid = 1+(int)$this->app->DB->Select( - sprintf("SELECT max(id) FROM `%s`", $table) - ); - if(empty($uniqeCol)) { - for($i = 1; $i <= $val['co']; $i++) { - $this->app->DB->Update( - sprintf( - 'UPDATE `%s` - SET `id` = %d WHERE `id` = %d - LIMIT 1', - $table, $maxid, $val['id'] - ) - ); - } - continue; - } - $doppelte = $this->app->DB->SelectArr( - sprintf('SELECT * FROM `%s` WHERE id = %d', $table, $val['id']) - ); - foreach($doppelte as $row) { - $this->app->DB->Update( - sprintf( - "UPDATE `%s` - SET id = %d WHERE id = %d AND `%s` = '%s' - LIMIT 1", - $table, $maxid, $val['id'], $uniqeCol, $val[$uniqeCol] - ) - ); - $maxid++; - } - } - $this->CheckAlterTable(sprintf("ALTER TABLE `%s` ADD PRIMARY KEY(`id`);", $table)); - $maxid = 1+(int)$this->app->DB->Select(sprintf("SELECT max(id) FROM `%s`", $table)); - $this->CheckAlterTable( - sprintf( - "ALTER TABLE `%s` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=%d", - $table, - $maxid - ) - ); -} - -// @refactor Hook Komponente -function RegisterNavigationHook($module, $action, $first, $sec, $aftersec = '', $position = 0) -{ - if(empty($module) || empty($action) || (String)$first === '') { - return; - } - - $check = $this->app->DB->SelectRow( - "SELECT hn.id - FROM `hook_navigation` AS `hn` - WHERE hn.module = '".$this->app->DB->real_escape_string($module)."' AND hn.action = '".$this->app->DB->real_escape_string($action)."' - ORDER by hn.aktiv DESC - LIMIT 1" - ); - if(!empty($check) && $check['id'] == 0) { - $this->repairNullIds('hook_navigation'); - $check = $this->app->DB->SelectRow( - "SELECT hn.id - FROM `hook_navigation` AS `hn` - WHERE hn.module = '".$this->app->DB->real_escape_string($module)."' AND hn.action = '".$this->app->DB->real_escape_string($action)."' - ORDER by hn.aktiv DESC - LIMIT 1" - ); - } - if($check) { - $this->app->DB->Update("UPDATE `hook_navigation` SET `aktiv` = 1, `first` = '".$this->app->DB->real_escape_string($first)."', `sec` = '".$this->app->DB->real_escape_string($sec)."', `aftersec` = '".$this->app->DB->real_escape_string($aftersec)."', `position` = '".$this->app->DB->real_escape_string($position)."' WHERE `id` = ".(int)$check['id'].' LIMIT 1'); - } - else { - $this->app->DB->Insert("INSERT INTO `hook_navigation` (`module`, `action`, `first`, `sec`, `aftersec`, `position`, `aktiv`) - VALUES ('".$this->app->DB->real_escape_string($module)."','".$this->app->DB->real_escape_string($action)."', - '".$this->app->DB->real_escape_string($first)."','".$this->app->DB->real_escape_string($sec)."','".$this->app->DB->real_escape_string($aftersec)."','".$this->app->DB->real_escape_string($position)."','1') - "); - } -} - -// @refactor Hook Komponente - - /** - * @param array $menu - */ -public function NavigationHooks(&$menu) -{ - $hook_navigation = $this->app->DB->SelectArr( - "SELECT hn.* - FROM `hook_navigation` AS `hn` - WHERE hn.aktiv = 1 AND hn.first != '' AND hn.module != '' AND hn.action != '' - ORDER BY hn.first, hn.aftersec DESC, hn.position, hn.sec" - ); - - if(!$hook_navigation) { - return; - } - if($hook_navigation[0]['id'] === 0) { - $this->repairNullIds('hook_navigation'); - $hook_navigation = $this->app->DB->SelectArr( - "SELECT hn.* - FROM `hook_navigation` AS `hn` - WHERE hn.aktiv = 1 AND hn.first != '' AND hn.module != '' AND hn.action != '' - ORDER BY hn.first, hn.aftersec DESC, hn.position, hn.sec" - ); - } - - foreach($menu as $k => $v) { - if(isset($v['first'])) { - $first[$v['first'][0]] = $k; - } - } - - foreach($hook_navigation as $k => $v) { - if($k > 0 && $v['id'] > 0 && !empty($hook_navigation[$k-1]) && $hook_navigation[$k-1]['id'] > 0) { - if( - $v['module'] === $hook_navigation[$k-1]['module'] - && $v['action'] === $hook_navigation[$k-1]['action'] - && $v['sec'] === $hook_navigation[$k-1]['sec'] - && $v['first'] === $hook_navigation[$k-1]['first'] - && $v['aftersec'] === $hook_navigation[$k-1]['aftersec'] - ) { - $this->app->DB->Delete(sprintf('DELETE FROM `hook_navigation` WHERE `id` = %d LIMIT 1', $v['id'])); - unset($hook_navigation[$k]); - continue; - } - } - if(!$this->RechteVorhanden($v['module'], $v['action'])) { - continue; - } - if($v['sec'] !== '' || !isset($first[$v['first']])) { - if($v['sec'] == '') { - $menu[] = array('first'=>array($v['first'], $v['module'],$v['action'])); - $first[$v['first']] = count($menu)-1; - } - elseif($v['sec'] != '' && !isset($first[$v['first']])){ - $menu[] = array('first'=>array($v['first'], '',''),'sec'=>array(array($v['sec'],$v['module'],$v['action']))); - $first[$v['first']] = count($menu)-1; - } - else{ - if(isset($menu[$first[$v['first']]])) { - if($v['aftersec']) { - if(empty($menu[$first[$v['first']]]['sec'])) { - $ind = 0; - $menu[$first[$v['first']]]['sec'][$ind] = array($v['sec'],$v['module'],$v['action']); - } - else{ - $found = false; - foreach($menu[$first[$v['first']]]['sec'] as $k2 => $v2) { - if($v2[0] == $v['aftersec']) { - $c = count($menu[$first[$v['first']]]['sec']); - for($k3 = $c; $k3 > $k2; $k3--) { - $menu[$first[$v['first']]]['sec'][$k3] = $menu[$first[$v['first']]]['sec'][$k3-1]; - } - $ind = $k2 + 1; - $menu[$first[$v['first']]]['sec'][$ind] = array($v['sec'],$v['module'],$v['action']); - $found = true; - break; - } - } - if(!$found) { - $ind = empty($menu[$first[$v['first']]]['sec'])?0:count($menu[$first[$v['first']]]['sec']); - $menu[$first[$v['first']]]['sec'][$ind] = array($v['sec'],$v['module'],$v['action']); - } - } - } - else{ - $ind = empty($menu[$first[$v['first']]]['sec'])?0:count($menu[$first[$v['first']]]['sec']); - $menu[$first[$v['first']]]['sec'][$ind] = array($v['sec'],$v['module'],$v['action']); - } - } - } - } - } -} - -// @refactor ModuleRenderer Komponente - - /** - * @param string $headline - * @param string $headline1 - * @param string|array $headline2 - */ - public function Headlines($headline = '', $headline1 = '', $headline2 = '') -{ - if($headline) { - $this->kurzueberschrift = $headline; - $this->app->Tpl->Set('KURZUEBERSCHRIFT', $headline); - } - if($headline1) { - $this->kurzueberschrift1 = htmlspecialchars($headline1); - $this->app->Tpl->Set('KURZUEBERSCHRIFT1', ' '.$headline1); - } - if($this->kurzueberschrift && $this->backlink && $this->kurzueberschrift1) { - $this->app->Tpl->Set('KURZUEBERSCHRIFT', ''.$this->kurzueberschrift.''); - } - if($headline2) { - if(is_string($headline2)) { - $this->kurzueberschrift2 = ' '.(stripos($headline2,'')?$headline2:htmlspecialchars($headline2)).''; - $this->app->Tpl->Set('KURZUEBERSCHRIFT2', $this->kurzueberschrift2); - } - elseif(is_array($headline2)) { - $this->kurzueberschrift2 = ' '; - $first = true; - foreach($headline2 as $k => $v) { - if((String)$v !== '') { - if(!$first) { - $this->kurzueberschrift2 .= ' '; - } - $first = false; - if(!is_numeric($k)) { - $this->kurzueberschrift2 .= $k.' '; - } - $this->kurzueberschrift2 .= ''.htmlspecialchars($v).''; - } - } - $this->app->Tpl->Add('KURZUEBERSCHRIFT2', $this->kurzueberschrift2); - } - } - if(empty($headline) && !empty($this->kurzueberschrift)) { - $headline = $this->kurzueberschrift; - } - if(empty($headline1) && !empty($this->kurzueberschrift1)) { - $headline1 = $this->kurzueberschrift1; - } - - $this->RunHook('HeadLines', 3, $headline, $headline1, $headline2); -} - - function generateHash($id = 0) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'generateHashFromApi')) - { - return $obj->generateHashFromApi($id); - } - return ''; - } - - function XMLGruppe($id, $cdata = false) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'XMLGruppe')) - { - return $obj->XMLGruppe($id, $cdata); - } - return ''; - } - - function XMLAdresseKontakt($id, $cdata = false) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'XMLAdresseKontakt')) - { - return $obj->XMLAdresseKontakt($id, $cdata); - } - return ''; - } - - function XMLAdresse($id, $cdata = false) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'XMLAdresse')) - { - return $obj->XMLAdresse($id, $cdata); - } - } - - function XMLAuftrag($id, $doctype = 'auftrag', $cdata = false) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'XMLAuftrag')) - { - return $obj->XMLAuftrag($id,$doctype, $cdata); - } - return ''; - } - - function XMLBenutzer($id, $cdata = false) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'XMLBenutzer')) - { - return $obj->XMLBenutzer($id, $cdata); - } - } - - function XMLAdresseAccounts($filter=array(), $cdata = false) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'XMLAdresseAccounts')) - { - return $obj->XMLAdresseAccounts($filter, $cdata); - } - } - - function XMLBerichte($id, $cdata = false){ - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'XMLBerichte')) - { - return $obj->XMLBerichte($id, $cdata); - } - } - - - function XMLArtikelkontingente($filter=array(), $cdata = false) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'XMLArtikelkontingente')) - { - return $obj->XMLArtikelkontingente($filter, $cdata); - } - } - - // @refactor PhysicalDimension Komponente - function GetGewichtbezeichnung() - { - $gewichtbezeichnung = $this->Firmendaten('gewichtbezeichnung'); - if((String)$gewichtbezeichnung !== '')return $gewichtbezeichnung; - return 'kg'; - } - - // @refactor PhysicalDimension Komponente - function GewichtzuKgFaktor() - { - $faktor = (float)str_replace(',',',',$this->Firmendaten('gewichtzukgfaktor')); - if($faktor > 0)return $faktor; - return 1; - } - - // @refactor DbHelper Komponente - function FormatGewicht($spalte) - { - return 'concat('.$spalte.",' ".$this->GetGewichtbezeichnung()."')"; - } - - // @refactor DbHelper Komponente - function FormatPreis($spalte, $stellen = null, $punkt = false) - { - if(is_null($stellen))return "if(trim(round( $spalte *100))+0 <> trim($spalte*100)+0, format($spalte, length( trim($spalte)+0)-length(round($spalte))-1 ".($punkt?"":" ,'de_DE'")."),format($spalte,2".($punkt?"":" ,'de_DE'")."))"; - return "format($spalte,$stellen".($punkt?"":" ,'de_DE'").")"; - } - - /** - * @deprecated - * - * @param $value - * - * @return mixed - */ - function FromFormatZahlToDB($value) - { - $poskomma = strrpos($value, ','); - $pospunkt = strrpos($value, '.'); - if($poskomma === false) { - return $value; - } - if($pospunkt === false) { - return str_replace(',','.', $value); - } - - if($poskomma > $pospunkt) { - return str_replace(['.', ','], ['', '.'], $value); - } - - return str_replace(',','', $value); - } - - // @refactor Formater Komponente - function number_format_variable($value, $stellen = null) - { - if(is_null($stellen)) { - $ret = rtrim(number_format($value,8,',','.'),'0'); - if(substr($ret,-1) === ',') { - $ret .= '0'; - } - - return $ret; - } - - return number_format($value, $stellen,',','.'); - } - - // @refactor DbHelper Komponente - function BelegnummerSortierung($prefix = '') - { - $belegnummersortierungint = $this->Firmendaten('belegnummersortierungint'); - if($belegnummersortierungint) { - if($prefix == '') { - return 'cast(belegnr as UNSIGNED)'; - } - return 'cast('.$prefix.'.belegnr as UNSIGNED)'; - } - if($prefix == '') { - return 'belegnr'; - } - return $prefix.'.'.'belegnr'; - } - - // @refactor DbHelper Komponente - function FormatMenge($spalte) - { - return "replace(trim($spalte)+0,'.',',')"; - } - - public function XMLExportVorlage($id,$filter=array(), $cdata = false) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'XMLExportVorlage')) - { - return $obj->XMLExportVorlage($id, $filter, $cdata); - } - } - - /** - * Es werden Werte nur hinzugefuegt falls der Wert noch nicht existiert bzw. leer ist - * - * @refactor in ShopImporter Module - * - * @param int $shop Shopid - * @param int $artikel Artikelid - * @param array $arr Array zum Einfuegen / Updaten - * @param bool $escape Werte werden fuer DB escaped - * - * @return bool wenn Daten OK true sonst falsch - */ - public function AddShopArtikelIfEmpty($shop, $artikel, $arr, $escape = true) - { - if(empty($artikel) || empty($shop) || empty($arr)){ - return false; - } - $bearbeiter = $this->GetBearbeiter(true); - $oldarr = array(); - $old = $this->app->DB->SelectArr("SELECT min(id) as id, name,wert FROM shopexport_artikel - WHERE shopid = '$shop' AND artikel = '$artikel' GROUP BY name,wert"); - if(!empty($old)) - { - foreach($old as $v) - { - $oldarr[$v['name']] = array('id'=>$v['id'],'wert'=>$v['wert']); - } - } - - foreach($arr as $k => $v) - { - if($k) - { - $check = !empty($oldarr[$k])?$oldarr[$k]['id']:0; - if(!$check) - { - $this->app->DB->Insert("INSERT INTO shopexport_artikel (shopid, artikel, name) VALUES ('$shop','$artikel','".$this->app->DB->real_escape_string($k)."')"); - $new = $this->app->DB->GetInsertID(); - $check = $new; - }else{ - $new = null; - } - if(!empty($new) || ($oldarr[$k]['wert'] != $v && empty($oldarr[$k]['wert']))){ - if($escape){ - $this->app->DB->Update("UPDATE shopexport_artikel SET bearbeiter = '$bearbeiter', wert = '" . $this->app->DB->real_escape_string($v) . "' WHERE id = '$check' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE shopexport_artikel SET bearbeiter = '$bearbeiter', wert = '$v' WHERE id = '$check' LIMIT 1"); - } - } - } - } - return true; - } - - /** - * @deprecated - * @refactor in User Klasse - * - * @param bool $escaped wenn true real_escaped zurueck - * - * @return string gibt Username oder Cronjob zurueck - */ - public function GetBearbeiter($escaped = false) - { - $bearbeiter = 'Cronjob'; - if(!empty($this->app->User) && method_exists($this->app->User,'GetName')) - { - $bearbeiter = $this->app->User->GetName(); - if($escaped) - { - $bearbeiter = $this->app->DB->real_escape_string($bearbeiter); - } - } - return $bearbeiter; - } - - /** - * @refactor in ShopImport Module - * - * @param int $shop Shopid - * @param int $artikel Artikelid - * @param array $arr Array das Geaendert / Eingefuegt werden soll - * @param bool $escape Escapen fuer DB - * - * @return bool - */ - public function SaveShopArtikel($shop, $artikel, $arr, $escape = true) - { - if(empty($artikel) || empty($shop) || empty($arr)){ - return false; - } - $bearbeiter = $this->GetBearbeiter(true); - $oldarr = array(); - $old = $this->app->DB->SelectArr( - sprintf( - "SELECT MIN(id) as id, MAX(id) AS `maxid`, `name`, `wert` - FROM `shopexport_artikel` - WHERE `shopid` = %d AND `artikel` = %d - GROUP BY `name`, `wert`", - $shop, $artikel - ) - ); - if(!empty($old)) { - foreach($old as $v) { - $oldarr[ - $this->app->DB->real_escape_string($v['name']) - ] = array('id'=>$v['id'],'wert'=>$v['wert'],'maxid' => $v['maxid']); - } - } - - foreach($arr as $k => $v) { - if(empty($k)) { - continue; - } - - $nameForDb = $k; - $valueForDb = $v; - if($escape){ - $nameForDb = $this->app->DB->real_escape_string($k); - $valueForDb = $this->app->DB->real_escape_string($v); - } - $check = !empty($oldarr[$k])?$oldarr[$k]['id']:0; - $new = null; - if(!$check) { - $this->app->DB->Insert( - sprintf( - "INSERT INTO `shopexport_artikel` (shopid, artikel, `name`,wert) - VALUES (%d,%d,'%s','%s')", - $shop, $artikel, $nameForDb, $valueForDb - ) - ); - - $new = $this->app->DB->GetInsertID(); - } - - if($check && (!empty($new) || $oldarr[$k]['wert'] != $v)) { - $this->app->DB->Delete( - sprintf( - "DELETE FROM `shopexport_artikel` - WHERE `artikel` = %d AND `shopid` = %d AND `name` = '%s' AND `id` <> %d", - $artikel, $shop, $nameForDb, $check - ) - ); - - $this->app->DB->Update( - "UPDATE shopexport_artikel SET bearbeiter = '$bearbeiter', wert = '$valueForDb' WHERE id = '$check' LIMIT 1" - ); - } - elseif($check && $oldarr[$k]['id'] != $oldarr[$k]['maxid']) { - $this->app->DB->Delete( - sprintf( - "DELETE FROM `shopexport_artikel` - WHERE `artikel` = %d AND `shopid` = %d AND `name` = '%s' AND `id` <> %d", - $artikel, $shop, $nameForDb, $check - ) - ); - } - - } - - return true; - } - - // @refactor in Placetel Module - function GetPhoneLink($adresse=0,$ansprechpartner=0,$telefon="") - { - $username = $this->app->User->GetUsername(); - $accounts = $this->app->erp->GetKonfiguration("placetel_list_accounts"); - - $tmp = explode(PHP_EOL,trim($accounts)); - $sipuid = false; - if($this->app->erp->RechteVorhanden('placetel','call')) - { - $this->app->Tpl->Set('JSPLACETEL',' - function call(id, dummy) - { - $.ajax({ - url: \'index.php?module=placetel&action=call&id=\'+id, - type: \'POST\', - dataType: \'json\', - data: {}, - success: function(data) { - if(data) - { - - } - } - }); - - } - '); - - $ctmp = !empty($tmp)?count($tmp):0; - for($i=0;$i<$ctmp;$i++) - { - $subtmp = explode(':',trim($tmp[$i])); - - if(count($subtmp)>0) - { - $subtmp[0] = trim($subtmp[0]); - $subtmp[1] = !empty($subtmp[1])?trim($subtmp[1]):''; - - if($subtmp[0]==$username) - { - $sipuid = $subtmp[1]; - break; - } - } - } - } - - if($ansprechpartner <=0) - { - $typ = $this->app->DB->Select("SELECT if(telefon='$telefon' AND telefon!='','1',if(mobil='$telefon' AND mobil!='','2','')) FROM adresse WHERE id='$adresse' LIMIT 1"); - if($typ==1 OR $typ==2){ - $typid = $adresse; - } - } else { - $typ = $this->app->DB->Select("SELECT if(telefon='$telefon' AND telefon!='','3',if(mobil='$telefon' AND mobil!='','4','')) FROM ansprechpartner WHERE id='$ansprechpartner' LIMIT 1"); - if($typ==3 OR $typ==4){ - $typid = $ansprechpartner; - } - } - // 1 = telefon adresse, 2 = mobil adresse, 3 telefon ansprechpartner, 4 mobil ansprechpartner - - if($telefon!='') { - $telefon = str_replace('/','',$telefon); - $telefon = str_replace(' ','',$telefon); - if($sipuid) { - return "app->Conf->WFconf['defaulttheme']."/images/phone.png\" class=\"iconininput\" alt=\"anrufen\" />"; - } - return "app->Conf->WFconf['defaulttheme']."/images/phone.png\" class=\"iconininput\" alt=\"anrufen\" />"; - } - } - - public function GetArtikelunterbaumids($id, &$arr, $lvl = 0) - { - /** @var Artikelbaum $obj */ - $obj = $this->LoadModul('artikelbaum'); - if(!empty($obj) && method_exists($obj, 'getArticleSubtreeIds')) { - $obj->getArticleSubtreeIds($id, $arr, $lvl); - } - } - - // @refactor in Shopimport Module - public function GetShopArtikel($shop, $artikel, $name = '') - { - $ret = null; - if((int)$artikel <= 0 || (int)$shop <= 0){ - return $ret; - } - $arr = $this->app->DB->SelectArr('SELECT `name`, `wert` FROM shopexport_artikel WHERE shopid = '.(int)$shop.' AND artikel = '.(int)$artikel." AND name <> ''".(!empty($name)?" AND name = '".$this->app->DB->real_escape_string($name)."' ":'')); - if(!empty($arr)) - { - foreach($arr as $v){ - $ret[$v['name']] = $v['wert']; - } - } - if(!empty($name)) - { - return !empty($ret[$name])?$ret[$name]:''; - } - return $ret; - } - - public function XMLArtikel($id, $api = 0) - { - /** @var Api $obj */ - $obj = $this->LoadModul('api'); - if(!empty($obj) && method_exists($obj,'XMLArtikel')) - { - return $obj->XMLArtikel($id, $api); - } - } - - // @refactor in Uservorlage Modul - function AbgleichBenutzerVorlagen($userid=0, $vorlage = 0, $module = '', $action = '') - { - $bezeichnung = ''; - if($vorlage != 0) - { - $bezeichnung = $this->app->DB->Select("SELECT bezeichnung FROM uservorlage WHERE id = '$vorlage' LIMIT 1"); - } - - if($userid == 0 && $vorlag > 0 && $module != '' && $action != '') - { - $permission = $this->app->DB->Select("SELECT permission FROM uservorlagerights WHERE vorlage = '".$id_vorlage."' AND module = '$module' AND action = '$action' LIMIT 1"); - } - - - // alle vorlagen ind ei Leute kopieren - if($userid<=0){ - $user = $this->app->DB->SelectArr("SELECT * FROM user" . ($bezeichnung != '' ? " WHERE vorlage like '$bezeichnung' " : '')); - } - else{ - $user = $this->app->DB->SelectArr("SELECT * FROM user WHERE id='$userid'"); - } - $startzeit = microtime(true); - $cuser = !empty($user)?count($user):0; - - $grantingUserId = $this->app->User->GetID(); - $grantingUserName = $this->app->DB->Select("SELECT username FROM user WHERE id=$grantingUserId"); - $userPermission = $this->app->Container->get('UserPermissionService'); - - for($i=0;$i<$cuser;$i++) - { - $user[$i]['vorlage'] = strtolower($user[$i]['vorlage']); - if($vorlage) - { - $id_vorlage = $vorlage; - }else{ - $id_vorlage = $this->app->DB->Select("SELECT id FROM uservorlage WHERE bezeichnung LIKE '".$user[$i]['vorlage']."' LIMIT 1"); - } - if($id_vorlage == $vorlage || $vorlage == 0) - { - $receivingUserId = $user[$i]['id']; - $receivingUserName = $this->app->DB->Select("SELECT username FROM user WHERE id=$receivingUserId"); - - // neue eintraege - if($userid == 0 && $vorlag > 0 && $module != '' && $action != '') - { - $this->app->DB->Delete("DELETE FROM userrights WHERE user = '".$user[$i]['id']."' AND module='$module' AND action = '$action'"); - try { - $userPermission->log($grantingUserId,$grantingUserName,$receivingUserId,$receivingUserName,$module,$action,false); - }catch (Exception $ex){ - $this->app->erp->LogFile('Fehler bei Zuweisung Rechtehistore',$ex->getMessage()); - } - $this->app->DB->Insert("INSERT INTO userrights (user, module, action, permission) VALUES ('".$user[$i]['id']."','$module','$action','$permission')"); - try { - $userPermission->log($grantingUserId,$grantingUserName,$receivingUserId,$receivingUserName,$module,$action,true); - }catch (Exception $ex){ - $this->app->erp->LogFile('Fehler bei Zuweisung Rechtehistore',$ex->getMessage()); - } - }else{ - $permissions = $this->app->DB->SelectArr("SELECT module, action,permission - FROM uservorlagerights WHERE vorlage = '".$id_vorlage."' ".($module != ''?" AND module = '$module' ":"").($action != ''?" AND action = '$action'":'')); - foreach($permissions as $permission){ - try { - $userPermission->log($grantingUserId,$grantingUserName,$receivingUserId,$receivingUserName,$permission['module'],$permission['action'],$permission['permission']); - }catch (Exception $ex){ - $this->app->erp->LogFile('Fehler bei Zuweisung Rechtehistore',$ex->getMessage()); - } - } - $this->app->DB->Update("REPLACE INTO userrights (user, module,action,permission) (SELECT '".$user[$i]['id']."',module, action,permission - FROM uservorlagerights WHERE vorlage = '".$id_vorlage."' ".($module != ''?" AND module = '$module' ":"").($action != ''?" AND action = '$action'":'').") "); - $neuesquery = $this->app->DB->Query("Select * from userrights where user = ".$user[$i]['id']." ".($module != ''?" AND module = '$module' ":"").($action != ''?" AND action = '$action'":'')." order by module, action, id desc"); - if($neuesquery) - { - $aktmodule = false; - $aktaction = false; - while($v = $this->app->DB->Fetch_Array($neuesquery)) - { - if($aktaction != $v['action'] || $aktmodule != $v['module']) - { - $aktaction = $v['action']; - $aktmodule = $v['module']; - } else { - $this->app->DB->Delete("DELETE FROM userrights where id = ".$v['id']); - - } - } - $this->app->DB->free($neuesquery); - } - } - } - } - } - - // @refactor in Poll Komponente (oder Welcome Modul) - // @refactor replace stringcleaner? also validate options_json - function UserEvent($invisible = false) - { - /** @var \Xentral\Modules\SystemNotification\Service\NotificationInterface $notifyService */ - $notifyService= $this->app->Container->get('NotificationService'); - - /** @var \Xentral\Modules\SystemNotification\Gateway\NotificationGateway $notifyGateway */ - $notifyGateway = $this->app->Container->get('NotificationGateway'); - $messages = $notifyGateway->findByUserId($this->app->User->GetID(), 0, 5); - - $result = array(); - if(count($messages) > 0) { - - $cleaner = new Stringcleaner($this->app); - - foreach ($messages as $message) { - // xss prevention - $message['title'] = $cleaner->CleanString($message['title'], 'nojs'); - $message['message'] = $cleaner->CleanString($message['message'], 'nojs'); - $message['options'] = []; - $messageOptions = !empty($message['options_json']) ? json_decode($message['options_json'], true) : null; - if (!empty($messageOptions['id'])) { - $message['options']['id'] = strip_tags($messageOptions['id']); - } - if (!empty($messageOptions['buttons'])) { - $message['options']['buttons'] = []; - foreach ($messageOptions['buttons'] as $messageButton) { - $messageButtonAttrs = []; - foreach ($messageButton as $buttonAttrName => $buttonAttrValue) { - if ($buttonAttrName === 'link') { - $messageButtonAttrs[htmlspecialchars($buttonAttrName)] = $cleaner->CleanString($buttonAttrValue, 'nojs'); - } else{ - $messageButtonAttrs[htmlspecialchars($buttonAttrName)] = htmlspecialchars($buttonAttrValue); - } - } - $message['options']['buttons'][] = $messageButtonAttrs; - } - } - // END xss prevention - - $result[] = [ - 'event' => 'notification', - 'type' => $message['type'], - 'title' => $message['title'], - 'message' => $message['message'], - 'options' => !empty($message['options']) ? $message['options'] : null, - 'priority' => (int)$message['priority'] === 1, - ]; - // Delete processed messages - $notifyService->delete($message['id']); - } - } - - if($this->app->erp->RechteVorhanden('chat','list')) { - $userId = $this->app->User->GetID(); - $registrierDatum = $this->app->DB->Select("SELECT u.logdatei FROM `user` AS u WHERE u.id='".$userId."'"); - - $ungelesenOeffentlich = (int)$this->app->DB->Select( - "SELECT COUNT(c.id) - FROM chat AS c - LEFT JOIN chat_gelesen AS g ON c.id = g.message AND (g.user = '".$userId."' OR g.user = 0) - WHERE c.user_to='0' AND c.zeitstempel > '".$registrierDatum."' - AND g.id IS NULL" - ); - $ungelesenPrivat = (int)$this->app->DB->Select( - "SELECT COUNT(c.id) - FROM chat AS c - INNER JOIN `user` AS u ON c.user_from = u.id - LEFT JOIN chat_gelesen AS g ON c.id = g.message - WHERE u.activ = 1 AND c.user_to='".$userId."' - AND g.id IS NULL" - ); - $anzchat = $ungelesenOeffentlich + $ungelesenPrivat; - - if($anzchat>0) { - $result[] = array('event'=>'chatbox','sound'=>0, 'message'=>$anzchat); - } - } - - if(count($result)>0){ - return $result; - } - return false; - } - - /** - * @deprecated - * - * @param bool $delete - * - * @return array|void - */ - function UserEventNachrichten($delete = false) - { - $user = (int)$this->app->User->GetID(); - if(!$user)return; - $adresse = (int)$this->app->DB->Select("SELECT adresse FROM user WHERE id = '".$user."' LIMIT 1"); - if($adresse) - { - $_gruppen = $this->app->DB->SelectArr("SELECT distinct parameter as gruppe FROM adresse_rolle WHERE adresse = '$adresse' AND subjekt = 'Mitglied' AND (bis = '0000-00-00' OR bis >= date(now())) AND parameter > 0"); - if($_gruppen) - { - foreach($_gruppen as $gruppe) - { - $gruppen[] = " b.gruppe = '".(int)$gruppe['gruppe']."' "; - } - } - } - if(!empty($gruppen)) - { - $subwhere = implode(' OR ',$gruppen); - $nachrichten = $this->app->DB->SelectArr("SELECT b.* FROM boxnachrichten b WHERE (b.user = '$user' OR ($subwhere)) AND (ablaufzeit = 0 OR - TIME_TO_SEC( - TIMEDIFF( - now(), - zeitstempel - ) <= ablaufzeit - ) - ) ORDER BY ablaufzeit > 0 DESC, prio DESC, zeitstempel"); - - }else{ - $nachrichten = $this->app->DB->SelectArr("SELECT b.* FROM boxnachrichten b WHERE user = '$user' AND (ablaufzeit = 0 OR - TIME_TO_SEC( - TIMEDIFF( - now(), - zeitstempel - ) <= ablaufzeit - ) - ) ORDER BY ablaufzeit > 0 DESC, prio DESC, zeitstempel"); - } - if($nachrichten) - { - if($delete)$this->app->DB->Delete("DELETE from boxnachrichten WHERE id = '".$nachrichten[0]['id']."' LIMIT 1"); - return array('anzahl'=>count($nachrichten),'nachricht'=>reset($nachrichten)); - } - return array('anzahl'=>0); - } - - /** - * @deprecated - * - * @param $user - * @param $gruppe - * @param $bezeichnung - * @param string $nachricht - * @param int $prio - * @param int $ablaufzeit - * @param int $beep - * @param string $objekt - * @param int $parameter - * @param bool $delete - * - * @return void - */ - function AddUserGruppenNachricht($user, $gruppe, $bezeichnung, $nachricht = '', $prio = 0,$ablaufzeit = 0, $beep = 0, $objekt = '', $parameter = 0, $delete = false) - { - $parameter = (int)$parameter; - $beep = (int)$beep; - $objekt = $this->app->DB->real_escape_string($objekt); - if($delete == true) - { - if(!empty($objekt) && !empty($parameter))$this->app->DB->Delete("DELETE FROM boxnachrichten WHERE objekt like '".$objekt."' AND parameter = '$parameter' "); - return; - } - if($delete && is_numeric($delete)) - { - $delete = (int)$delete; - $this->app->DB->Delete("DELETE FROM boxnachrichten WHERE id = '$delete' LIMIT 1"); - return; - } - $user = (int)$user; - $gruppe = (int)$gruppe; - $prio = (int)$prio; - $ablaufzeit = (int)$ablaufzeit; - $bezeichnung = $this->app->DB->real_escape_string($bezeichnung); - $nachricht = $this->app->DB->real_escape_string($nachricht); - $this->app->DB->Insert("INSERT INTO boxnachrichten (user, gruppe, bezeichnung, nachricht, prio, ablaufzeit, objekt, parameter, beep) VALUES ( - '$user','$gruppe','$bezeichnung','$nachricht','$prio','$ablaufzeit','$objekt','$parameter','$beep' - )"); - return $this->app->DB->GetInsertID(); - } - - // @refactor FileLock Komponente - function ProzessLock($name) - { - $fp = @fopen($this->GetTMP()."lock_". $name . '.lock', 'w+'); - - if($fp) - { - if (flock($fp, LOCK_EX)) { - ftruncate($fp, 0); - fwrite($fp, "Write something here\n"); - return $fp; - } - @fclose($fp); - } - return false; - } - - // @refactor FileLock Komponente - function ProzessUnlock($fp) - { - if(!$fp)return; - fflush($fp); // leere Ausgabepuffer bevor die Sperre frei gegeben wird - flock($fp, LOCK_UN); // Gib Sperre frei - fclose($fp); - } - - // @refactor Formater Komponente - function ConvertToBytes($tmp) - { - $tmp = trim($tmp); - $last = strtolower($tmp[strlen($tmp)-1]); - switch($last) - { - case 'g': - $tmp *= 1024; - case 'm': - $tmp *= 1024; - case 'k': - $tmp *= 1024; - } - return $tmp; - } - - // @refactor SystemInformation Komponente - function MaxUploadFileSize() - { - //select maximum upload size - $max_upload = $this->ConvertToBytes(ini_get('upload_max_filesize')); - $max_post = $this->ConvertToBytes(ini_get('post_max_size')); - $memory_limit = $this->ConvertToBytes(ini_get('memory_limit')); - return min($max_upload, $max_post, $memory_limit); - } - - // @refactor Document Komponente - public function GetSpracheBeleg($type, $id) - { - if(!empty($this->sprachen) && !empty($this->sprachen[$type]) && !empty($this->sprachen[$type][$id])) - { - return $this->sprachen[$type][$id]; - } - $docArr = $this->app->DB->SelectRow(sprintf('SELECT sprache, adresse FROM `%s` WHERE id = %d', $type, $id)); - $sprache = !empty($docArr)?$docArr['sprache']:$this->app->DB->Select("SELECT sprache FROM $type WHERE id='$id' LIMIT 1"); - if($sprache=='') { - $adresse = !empty($docArr)?$docArr['adresse']:$this->app->DB->Select("SELECT adresse FROM $type WHERE id='$id' LIMIT 1"); - $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - } - if($sprache=='') { - $sprache="de"; - } - $this->sprachen[$type][$id] = $sprache; - return $sprache; - } - - public function GetSpracheBelegISO($type, $id) - { - $language = $this->GetSpracheBeleg($type, $id); - if(strlen($language) > 2) - { - $language = $this->app->DB->Select("SELECT iso FROM sprachen WHERE alias='$language' ORDER by aktiv=1 LIMIT 1"); - } - return $language; - } - - - - // @refactor Document Komponente - function BelegVersand($typ,$id,$versandart,$drucker="") - { - if($typ!="rechnung" && $typ!="angebot" && $typ!="auftrag" && $typ!="gutschrift" && $typ!="lieferschein" && $typ!="reisekosten") - return; - - if($versandart!="email" && $versandart!="brief") - return; - - $projekt = $this->app->DB->Select("SELECT projekt FROM $typ WHERE id='$id' LIMIT 1"); - $name = $this->app->DB->Select("SELECT name FROM $typ WHERE id='$id' LIMIT 1"); - $email = $this->app->DB->Select("SELECT email FROM $typ WHERE id='$id' LIMIT 1"); - $adresse = $this->app->DB->Select("SELECT adresse FROM $typ WHERE id='$id' LIMIT 1"); - - // pruefe ob immer per per Papier oder immer per mail - $rechnung_papier = $this->app->DB->Select("SELECT rechnung_papier FROM adresse WHERE id='$adresse' LIMIT 1"); - $rechnung_permail = $this->app->DB->Select("SELECT rechnung_permail FROM adresse WHERE id='$adresse' LIMIT 1"); - $rechnung_anzahlpapier = $this->app->DB->Select("SELECT rechnung_anzahlpapier FROM adresse WHERE id='$adresse' LIMIT 1"); - - if($rechnung_papier=="1" && $typ=="rechnung") $versandart="brief"; - if($rechnung_permail=="1" && $typ=="rechnung") $versandart="email"; - - - $sprache = $this->app->DB->Select("SELECT sprache FROM $typ WHERE id='$id' LIMIT 1"); - if($sprache=="") - $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - - if($sprache=='') { - $sprache='deutsch'; - } - - $emailtext = $this->Geschaeftsbriefvorlage($sprache,$typ,$projekt,$name,$id); - $idvorlage = $this->GetGeschaeftsBriefID($typ,$sprache,$projekt); - - $footer = $this->Grussformel($projekt,$sprache); - if($footer!="") $emailtext['text'] = $emailtext['text']."\r\n".$footer; - - $this->BriefpapierHintergrundDisable($drucker); - - switch($typ) - { - case "rechnung": - $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?true:!$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projekt); - }else{ - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?false:!$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projekt); - }else{ - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - break; - case "angebot": - $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?true:!$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('AngebotPDFCustom')) - { - $Brief = new AngebotPDFCustom($this->app,$projekt); - }else{ - $Brief = new AngebotPDF($this->app,$projekt); - } - $Brief->GetAngebot($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?false:!$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('AngebotPDFCustom')) - { - $Brief = new AngebotPDFCustom($this->app,$projekt); - }else{ - $Brief = new AngebotPDF($this->app,$projekt); - } - $Brief->GetAngebot($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - break; - case "auftrag": - $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?true:!$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('AuftragPDFCustom')) - { - $Brief = new AuftragPDFCustom($this->app,$projekt); - }else{ - $Brief = new AuftragPDF($this->app,$projekt); - } - $Brief->GetAuftrag($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?false:!$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('AuftragPDFCustom')) - { - $Brief = new AuftragPDFCustom($this->app,$projekt); - }else{ - $Brief = new AuftragPDF($this->app,$projekt); - } - $Brief->GetAuftrag($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - break; - case "bestellung": - $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?true:!$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('BestellungPDFCustom')) - { - $Brief = new BestellungPDFCustom($this->app,$projekt); - }else{ - $Brief = new BestellungPDF($this->app,$projekt); - } - $Brief->GetBestellung($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?false:!$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('BestellungPDFCustom')) - { - $Brief = new BestellungPDFCustom($this->app,$projekt); - }else{ - $Brief = new BestellungPDF($this->app,$projekt); - } - $Brief->GetBestellung($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - break; - case "preisanfrage": - $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?true:!$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('PreisanfragePDFCustom')) - { - $Brief = new PreisanfragePDFCustom($this->app,$projekt); - }else{ - $Brief = new PreisanfragePDF($this->app,$projekt); - } - $Brief->GetPreisanfrage($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?false:!$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('PreisanfragePDFCustom')) - { - $Brief = new PreisanfragePDFCustom($this->app,$projekt); - }else{ - $Brief = new PreisanfragePDF($this->app,$projekt); - } - $Brief->GetPreisanfrage($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - break; - case "produktion": - $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?true:!$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('ProduktionPDFCustom')) - { - $Brief = new ProduktionPDFCustom($this->app,$projekt); - }else{ - $Brief = new ProduktionPDF($this->app,$projekt); - } - $Brief->GetProduktion($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?false:!$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('ProduktionPDFCustom')) - { - $Brief = new ProduktionPDFCustom($this->app,$projekt); - }else{ - $Brief = new ProduktionPDF($this->app,$projekt); - } - $Brief->GetProduktion($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - break; - - } - - if($rechnung_anzahlpapier > 1 && $typ==='rechnung' && $versandart==='brief') - { - for($ra_i=0;$ra_i<$rechnung_anzahlpapier;$ra_i++) - { - $sendtmp[]=$tmpfile; - } - } else { - $sendtmp = array($tmpfile); - } - - //$this->LogFile("BelegeVersand T $typ I $id V $versandart Email $email Name $name betreff ".$emailtext['betreff']); - - if($drucker<0) - $drucker = $this->app->DB->Select("SELECT standarddrucker FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - else - $drucker = $this->app->DB->Select("SELECT id FROM drucker WHERE id='".$drucker."' LIMIT 1"); - - if($drucker <=0) - $drucker = $this->Firmendaten('standardversanddrucker'); - - if($versandart==='email') { - if(!$this->isHTML($emailtext['text'])){ - $emailtext['text'] = nl2br($emailtext['text']);//str_replace("\r\n", "
", $emailtext['text']); - } - if( - in_array( - $typ, - ['auftrag', 'rechnung','gutschrift','angebot','bestellung','retoure','proformarechnung','lieferschein'] - ) - ) { - $dateien = [$tmpfile]; - - if($typ === 'auftrag'){ - $stichwoerter = $this->app->DB->SelectArr("SELECT * FROM datei_stichwoerter WHERE objekt='geschaeftsbrief_vorlagen' AND parameter='$idvorlage' AND parameter > 0"); - if($stichwoerter){ - foreach ($stichwoerter as $v) { - $dateiname = str_replace(' ', '_', $this->app->erp->GetDateiName($v['datei'])); - if($dateiname){ - $dateiinhalt = $this->app->erp->GetDatei($v['datei']); - - if($handle = fopen(rtrim($this->app->erp->GetTMP(), '/') . "/" . $dateiname, "wb")){ - fwrite($handle, $dateiinhalt); - fclose($handle); - $dateien[] = rtrim($this->app->erp->GetTMP(), '/') . "/" . $dateiname; - $dateienIds[] = $v['datei']; - } - } - } - } - } - - $stichwoerterAnhaenge = $this->app->DB->SelectArr("SELECT * FROM datei_stichwoerter WHERE subjekt = 'Anhang' AND objekt = '$typ' AND parameter = '$id' AND parameter > 0"); - if($stichwoerterAnhaenge) - { - foreach($stichwoerterAnhaenge as $v) - { - $dateiname = str_replace(' ','_',$this->app->erp->GetDateiName($v['datei'])); - - if($dateiname && !in_array($v['datei'], $dateienIds)) - { - $dateiinhalt = $this->app->erp->GetDatei($v['datei']); - - if($handle = fopen (rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname, "wb")) - { - fwrite($handle, $dateiinhalt); - fclose($handle); - $dateien[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname; - } - } - } - } - - $this->DokumentSend($adresse,$typ, $id, $versandart,$emailtext['betreff'],$emailtext['text'],$dateien,"","",$projekt,$email, $name); - if($dateien && count($dateien) > 1) - { - for($i = 1; $i < count($dateien); $i++) - { - if(@is_file($dateien[$i])){ - @unlink($dateien[$i]); - } - } - } - }else{ - $this->DokumentSend($adresse,$typ, $id, $versandart,$emailtext['betreff'],$emailtext['text'],array($tmpfile),"","",$projekt,$email, $name); - } - } - else{ - $this->DokumentSend($adresse, $typ, $id, $versandart, $emailtext['betreff'], $emailtext['text'], $sendtmp, $drucker, "", $projekt, $email, $name); - } - - - if($this->Firmendaten("belegeinanhang")=="1") { - $fileid = $this->CreateDateiWithStichwort($tmpfile, $module,'','',$tmpfile, $this->app->User->GetName() ,$typ,$typ, $id, "",false); - } - /* - $fileid = $this->CreateDatei($tmpfile,$module,"","",$tmpfile,$this->app->User->GetName()); - $this->AddDateiStichwort($fileid,$typ,$typ,$id,false); - */ - - $ansprechpartner = $name." <".$email.">"; - - $this->app->DB->Insert("INSERT INTO dokumente_send - (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet,dateiid) - VALUES ('','$typ',NOW(),'".$this->app->User->GetName()."', - '$adresse','$id','$versandart','".$emailtext['betreff']."','".$emailtext['text']."','$projekt','$ansprechpartner',1,'$fileid')"); - - unlink($tmpfile); - - if($typ==='rechnung' || $typ==='angebot' || $typ==='gutschrift') - { - if($typ === 'rechnung') - { - $this->closeInvoice($id,'freigegeben'); - } - $this->app->DB->Update("UPDATE $typ SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - } - - $this->app->DB->Update("UPDATE $typ SET versendet=1, versendet_am=NOW(), - versendet_per='$versandart',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); - - - - $this->BriefpapierHintergrundEnable(); - - - switch($typ) - { - case "angebot": $this->AngebotProtokoll($id,"Angebot versendet"); break; - case "auftrag": $this->AuftragProtokoll($id,"Auftrag versendet"); break; - case "rechnung": $this->RechnungProtokoll($id,"Rechnung versendet"); break; - case "lieferschein": $this->LieferscheinProtokoll($id,"Lieferschein versendet"); break; - case "gutschrift": $this->GutschriftProtokoll($id,"Gutschrift versendet"); break; - case "reisekosten": $this->ReisekostenProtokoll($id,"Reisekosten versendet"); break; - case "proformarechnung": $this->ProformarechnungProtokoll($id,"Proformarechnung versendet"); break; - } - } - - // @refactor DocumentPdf Komponente - public function PDFArchivieren($type,$id, $force = false) - { - $id = (int)$id; - if($id <= 0){ - return false; - } - $types = array("auftrag","angebot","rechnung","lieferschein","gutschrift","bestellung","reisekosten","anfrage","preisanfrage","proformarechnung","arbeitsnachweis"); - if(!in_array($type, $types)){ - return false; - } - $class = ucfirst($type).'PDFCustom'; - if(!class_exists($class)){ - $class = ucfirst($type).'PDF'; - } - if(class_exists($class)) { - $projekt = $this->app->DB->Select("SELECT projekt FROM $type WHERE id = '$id' LIMIT 1"); - $Brief = new $class($this->app,$projekt); - $get = 'Get'.ucfirst($type); - if(method_exists($Brief, $get)) { - $tmpfile = ''; - try { - $Brief->$get($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument($force, $force); - unlink($tmpfile); - $tmpfile = ''; - } - catch(Exception $e) { - if($tmpfile !== '' && is_file($tmpfile)) { - unlink($tmpfile); - $tmpfile = ''; - } - $this->LogFile($this->app->DB->real_escape_string($e->getMessage())); - return false; - } - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - try { - $Brief = new $class($this->app, $projekt); - $Brief->$get($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument($force, $force); - unlink($tmpfile); - $tmpfile = ''; - } - catch(Exception $e) { - if($tmpfile !== '' && is_file($tmpfile)) { - unlink($tmpfile); - } - $this->LogFile($this->app->DB->real_escape_string($e->getMessage())); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - return false; - } - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if($force) { - $this->app->DB->Update("UPDATE `{$type}` SET `zuarchivieren` = 0 WHERE `id` = {$id}"); - } - return true; - } - } - return false; - } - - // @refactor in Location Klasse - function UrlOrigin($s, $use_forwarded_host=false) - { - $ssl = (!empty($s['HTTPS']) && $s['HTTPS'] == 'on') ? true:false; - $sp = strtolower($s['SERVER_PROTOCOL']); - $protocol = substr($sp, 0, strpos($sp, '/')) . (($ssl) ? 's' : ''); - $port = $s['SERVER_PORT']; - $port = ((!$ssl && $port=='80') || ($ssl && $port=='443')) ? '' : ':'.$port; - $host = ($use_forwarded_host && isset($s['HTTP_X_FORWARDED_HOST'])) ? $s['HTTP_X_FORWARDED_HOST'] : (isset($s['HTTP_HOST']) ? $s['HTTP_HOST'] : null); - $host = isset($host) ? $host : $s['SERVER_NAME'] . $port; - - $path = str_replace('/index.php','',$s['SCRIPT_NAME']); - - return $protocol . '://' . $host.$path; - } - - // @refactor Formater Komponente - function ZeitInStundenMinuten($number, $format = "%h:%i") { - - $number = str_replace(",",'.',$number); - $h = floor($number); - $i = round(($number - $h) * 60); - - $h = str_pad($h, 2, "0", STR_PAD_LEFT); - $i = str_pad($i, 2, "0", STR_PAD_LEFT); - $format = preg_replace("/%h/", $h, $format); - $format = preg_replace("/%i/", $i, $format); - return $format; - } - - // @refactor Formater Komponente - - /** - * @param string $text - * - * @return string - */ - public function UmlauteEntfernen($text) - { - $text = $this->ReadyForPDF($text); - $text = str_replace ("ä", "ae", $text); - $text = str_replace ("Ä", "Ae", $text); - $text = str_replace ("ö", "oe", $text); - $text = str_replace ("Ö", "Oe", $text); - $text = str_replace ("ü", "ue", $text); - $text = str_replace ("Ü", "Ue", $text); - $text = str_replace ("ß", "ss", $text); - $text = str_replace( - array('ü','Ü','ä','Ä','ö','Ö','ß'), - array('ue','Ue','ae','Ae','oe','Oe','ss'), - $text - ); - $text = str_replace ("&", "u", $text); - $text = str_replace ("`", "", $text); - $text = str_replace ("'", "", $text); - - return $text; - } - - // @refactor DbHelper Komponente - function Stroke($fieldstroke, $field) { - return "if(" . $fieldstroke . ",CONCAT(''," . $field . ",'')," . $field . ")"; - } - - // @refactor Formater Komponente - function Dateinamen($text) { - $text = $this->UmlauteEntfernen($text); - $text = str_replace(' ', '_', $text); - $text = preg_replace('#[^-_.A-Za-z0-9]#', '', $text); - return $text; - } - - // @refactor in Dateien Modul - function AnzahlDateien($objekt,$id) - { - return $this->app->DB->Select("SELECT COUNT(id) FROM datei_stichwoerter WHERE objekt='$objekt' AND parameter='$id'"); - } - - - // @refactor in Service Modul - function AnzahlOffeneSupport() - { - return 0; - } - - - // @refactor in Aufgaben Modul - function AnzahlOffeneAufgaben() - { - return (int)$this->app->DB->Select("SELECT COUNT(a.id) FROM aufgabe a WHERE (a.adresse='" . $this->app->User->GetAdresse() . "') AND a.startdatum='0000-00-00' AND a.status!='abgeschlossen' AND ( abgabe_bis='0000-00-00' OR abgabe_bis<=NOW())"); - } - - - public function AnzahlOffeneTickets($eigene=true) - { - return 0; - } - - - // @refactor UiHelper Komponente - function UserDevice() - { - return 'desktop'; - } - - // @refactor in Acl oder Login Modul - function Startseite($weiterleitung = "") - { - if($this->app->User->GetID()!="") - { - if($this->UserDevice()=="desktop") - { - $startseite = (string)$weiterleitung !== ''?'':$this->app->DB->Select("SELECT startseite FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - $startseite = $this->ReadyForPDF($startseite); - if(strpos($startseite,'action=logout') !== false && strpos($startseite,'module=welcome') !== false) { - $startseite= ''; - } - // wenn die GPS Stechuhr da ist - if((string)$weiterleitung !== '') - { - header("Location: $weiterleitung"); - } - elseif($startseite!=''){ - $this->app->Location->execute((String)$startseite); - } - else{ - header("Location: index.php?module=welcome&action=start"); - } - exit; - } else - { - header("Location: index.php?module=welcome&action=start"); - exit; - } - } - header("Location: index.php?module=welcome&action=login"); - exit; - } - - // @refactor in Kalender Modul @prüfen - function getFirstDayOfWeek($year, $weeknr) - { - $offset = date('w', mktime(0,0,0,1,1,$year)); - $offset = ($offset < 5) ? 1-$offset : 8-$offset; - $monday = mktime(0,0,0,1,1+$offset,$year); - - return date('Y-m-d',strtotime('+' . ($weeknr - 1) . ' weeks', $monday)); - } - - // @refactor in SystemInformation Modul - function IsWindows() - { - return strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'; - } - - /** - * Returns the absolute path to installation directory; without trailing slash - * - * @return string - */ - public function GetRootPath() - { - return dirname(dirname(__DIR__)); - } - - // @refactor in SystemInformation Modul - function GetTMP() - { - $userdata = $this->app->Conf->WFuserdata; - $dbname = $this->app->Conf->WFdbname; - - if ($this->IsWindows()) { - $tmp = $userdata."\\tmp\\".$dbname."\\"; - } else { - $tmp = $userdata."/tmp/".$dbname."/"; - } - - $tmp = str_replace('//','/',$tmp); - - if(!is_dir($tmp)){ - mkdir($tmp, 0777, true); - } - - return $tmp; - } - - // @refactor in SystemInformation Modul - function GetUSERDATA() - { - return $this->app->Conf->WFuserdata; - } - - - - /** @deprecated */ - function RetoureSeriennummernberechnen($id) - { - - } - -function LieferscheinSeriennummernberechnen($id) -{ - /** @var Seriennummern $obj */ - $obj = $this->LoadModul('seriennummern'); - if(!empty($obj) && method_exists($obj, 'LieferscheinSeriennummernberechnen')) { - $obj->LieferscheinSeriennummernberechnen($id); - } -} - -// @refactor in Lager Modul -function ArtikelAnzahlLagerPlatzMitSperre($artikel,$lager_platz) -{ - $result = $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='$artikel' AND lpi.lager_platz='$lager_platz'"); - if($result <=0) $result=0; - return $result; -} - - -// @refactor LagerBeleg Modul -function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = null) -{ - if(!$id)return; - $belegnr = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id = '$id' LIMIT 1"); - $bearbeiter = ''; - if(isset($this->app->User) && $this->app->User && method_exists($this->app->User,'GetName'))$bearbeiter = $this->app->User->GetName(); - $objekt_lager_platz = $this->app->DB->SelectArr("SELECT olp.id, olp.menge, olp.lager_platz, olp.artikel, olp.parameter, lp.id as lpid FROM - lieferschein_position lp INNER JOIN objekt_lager_platz olp ON lp.id = olp.parameter AND olp.objekt = 'lieferschein' AND lp.lieferschein = '$id'"); - if($objekt_lager_platz) - { - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id = '$id' LIMIT 1"); - foreach($objekt_lager_platz as $olp) - { - $lpiid = null; - if(isset($lpiids[$olp['lpid']]))$lpiid = $lpiids[$olp['lpid']]; - - $this->app->erp->LagerEinlagern($olp['artikel'],$olp['menge'],$olp['lager_platz'],$projekt, - "Stornierung Lieferschein $belegnr",$bearbeiter,"",'lieferschein', $id, $lpiid); - $beleg_chargesnmhd = $this->app->DB->SelectArr("SELECT * FROM `beleg_chargesnmhd` WEHRE doctype = 'lieferschein' AND doctypeid = '$id' AND pos = '".$olp['parameter']."'"); - $seriennummern = $this->app->DB->SelectArr("SELECT * FROM seriennummern WHERE lieferschein = '$id' AND lieferscheinpos = '".$olp['parameter']."'"); - if($seriennummern) - { - foreach($seriennummern as $sn) - { - $belegesnarr['sn'][] = array('menge'=>1, 'value'=>$sn['seriennummer'],'table'=>'seriennummern','id'=>$sn['id']); - } - } - if($beleg_chargesnmhd) - { - $belegesnarr = null; - foreach($beleg_chargesnmhd as $bc) - { - $belegesnarr[$bc['typ']][] = array('menge'=>$bc['menge'], 'value'=>$bc['wert'],'table'=>'beleg_chargesnmhd','id'=>$bc['id']); - } - } - if(isset($belegesnarr['sn'])) - { - foreach($belegesnarr['sn'] as $v) - { - if(isset($belegesnarr['charge']) && isset($belegesnarr['mhd'])) - { - $charge = ''; - $mhd = ''; - foreach($belegesnarr['charge'] as $k2 => $v2) - { - if($v2['menge'] > 1) - { - $charge = $v2['value']; - $belegesnarr['charge'][$k2]['menge'] -= 1; - break; - }elseif($v2['menge'] == 1) - { - $charge = $v2['value']; - unset($belegesnarr['charge'][$k2]); - break; - } - } - foreach($belegesnarr['mhd'] as $k2 => $v2) - { - if($v2['menge'] > 1) - { - $mhd = $v2['value']; - $belegesnarr['mhd'][$k2]['menge'] -= 1; - break; - }elseif($v2['menge'] == 1) - { - $mhd = $v2['value']; - unset($belegesnarr['mhd'][$k2]); - break; - } - } - if(isset($v['table']) && $v['table'] == 'seriennummern' && !empty($v['id'])) - { - $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1"); - }elseif(isset($v['table']) && $v['table'] == 'beleg_chargesnmhd' && !empty($v['id'])){ - $this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1"); - } - if(method_exists($this->app->erp,'AddSeriennummerLager'))$this->app->erp->AddSeriennummerLager($olp['artikel'], $olp['lager_platz'], $v['value'],"Stornierung Lieferschein $belegnr", "", $mhd, $charge,'lieferschein', $id); - if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung'))$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], 1,$olp['lager_platz'], $mhd, $charge); - if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung'))$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],1, $olp['lager_platz'],$mhd,$charge,$grund); - }elseif(isset($belegesnarr['charge'])) - { - $charge = ''; - $mhd = ''; - foreach($belegesnarr['charge'] as $k2 => $v2) - { - if($v2['menge'] > 1) - { - $charge = $v2['value']; - $belegesnarr['charge'][$k2]['menge'] -= 1; - break; - }elseif($v2['menge'] == 1) - { - $charge = $v2['value']; - unset($belegesnarr['charge'][$k2]); - break; - } - } - if(isset($v['table']) && $v['table'] == 'seriennummern' && !empty($v['id'])) - { - $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1"); - }elseif(isset($v['table']) && $v['table'] == 'beleg_chargesnmhd' && !empty($v['id'])){ - $this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1"); - } - if(method_exists($this->app->erp,'AddSeriennummerLager'))$this->app->erp->AddSeriennummerLager($olp['artikel'],1, $olp['lager_platz'], $v['value'],$grund, "", $mhd, $charge,'lieferschein', $id); - if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung'))$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'], 1,$olp['lager_platz'],$mhd,$charge,"", 'lieferschein', $id,$grund); - }elseif(isset($belegesnarr['mhd'])) - { - $charge = ''; - $mhd = ''; - foreach($belegesnarr['mhd'] as $k2 => $v2) - { - if($v2['menge'] > 1) - { - $mhd = $v2['value']; - $belegesnarr['mhd'][$k2]['menge'] -= 1; - break; - }elseif($v2['menge'] == 1) - { - $mhd = $v2['value']; - unset($belegesnarr['mhd'][$k2]); - break; - } - } - if(isset($v['table']) && $v['table'] == 'seriennummern' && !empty($v['id'])) - { - $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1"); - }elseif(isset($v['table']) && $v['table'] == 'beleg_chargesnmhd' && !empty($v['id'])){ - $this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1"); - } - if(method_exists($this->app->erp,'AddSeriennummerLager'))$this->app->erp->AddSeriennummerLager($olp['artikel'], $olp['lager_platz'], $v['value'],$grund, "", $mhd, $charge); - if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung'))$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'],1, $olp['lager_platz'], $mhd, $charge, "", "lieferschein", $id, $grund); - }else{ - if(isset($v['table']) && $v['table'] == 'seriennummern' && !empty($v['id'])) - { - $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1"); - }elseif(isset($v['table']) && $v['table'] == 'beleg_chargesnmhd' && !empty($v['id'])){ - $this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1"); - } - if(method_exists($this->app->erp,'AddSeriennummerLager'))$this->app->erp->AddSeriennummerLager($olp['artikel'], $olp['lager_platz'], $v['value'],$grund, "", $mhd, $charge); - } - } - }else{ - if(isset($belegesnarr['charge']) && isset($belegesnarr['mhd'])) - { - foreach($belegesnarr['charge'] as $v2) - { - $nochmenge = $v2['value']; - foreach($belegesnarr['mhd'] as $k3 => $v3) - { - if($nochmenge <= 0)break; - if($nochmenge == $v3['menge']) - { - $mhd = $v3['value']; - $charge = $v2['value']; - if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung'))$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], $nochmenge,$olp['lager_platz'], $mhd, $charge, "", "lieferschein", $id, $grund); - if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung'))$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],$nochmenge, $olp['lager_platz'],$mhd,$charge,"", 'lieferschein', $id,$grund); - unset($belegesnarr['mhd'][$k3]); - break; - }elseif($nochmenge > $v3['menge']) - { - $mhd = $v3['value']; - $charge = $v2['value']; - if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung'))$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], $v3['menge'],$olp['lager_platz'], $mhd, $charge, "", "lieferschein", $id, $grund); - if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung'))$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],$v3['menge'], $olp['lager_platz'],$mhd,$charge,"", 'lieferschein', $id,$grund); - unset($belegesnarr['mhd'][$k3]); - $nochmenge -= $v3['menge']; - }elseif($nochmenge < $v3['menge']) - { - $mhd = $v3['value']; - $charge = $v2['value']; - if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung'))$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], $nochmenge,$olp['lager_platz'], $mhd, $charge, "", "lieferschein", $id, $grund); - if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung'))$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],$nochmenge, $olp['lager_platz'],$mhd,$charge,"", 'lieferschein', $id,$grund); - $belegesnarr['mhd'][$k3]['menge'] -= $nochmenge; - break; - } - } - } - }elseif($belegesnarr['charge']) - { - foreach($belegesnarr['charge'] as $v2) - { - if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung'))$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],$v2['menge'], $olp['lager_platz'],'',$v2['value'],"", 'lieferschein', $id,$grund); - } - }elseif($belegesnarr['mhd']) - { - if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung'))$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'],$v2['menge'], $olp['lager_platz'], $v2['value'], "", "lieferschein", $id, $grund); - } - } - $this->app->DB->Delete("DELETE FROM objekt_lager_platz WHERE id = '".$olp['id']."' LIMIT 1"); - } - } -} - - // @refactor LagerBeleg Modul - function LieferscheinAuslagern($lieferschein,$anzeige_lagerplaetze_in_lieferschein=false, $standardlager = 0, $belegtyp = 'lieferschein', $chargenmhdnachprojekt = 0, $forceseriennummerngeliefertsetzen = false,$nurrestmenge = false, $lager_platz_vpe = 0, $lpiid = 0) - { - if($lieferschein <= 0) { - return; - } - if(!$anzeige_lagerplaetze_in_lieferschein) { - $anzeige_lagerplaetze_in_lieferschein = true; - } - $artikelarr = $this->app->DB->SelectArr( - sprintf( - "SELECT * FROM `%s` WHERE `%s` = %d ORDER BY sort", - $belegtyp.'_position', $belegtyp, (int)$lieferschein - ) - ); - - $belegarr = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM `%s` WHERE id=%d LIMIT 1', - $belegtyp, (int)$lieferschein - ) - ); - $kommissionskonsignationslager = 0; - if($belegtyp === 'lieferschein'){ - $kommissionskonsignationslager = $belegarr['kommissionskonsignationslager']; - } - $chargenerfassen = 0; - $mhderfassen = 0; - $seriennummernerfassen = 0; - $kommissionierverfahren = ''; - $projekt = 0; - $belegnr = ''; - if(!empty($belegarr)) { - $projekt = (int)$belegarr['projekt']; - $projektarr = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM projekt WHERE id = %d LIMIT 1', - $projekt - ) - ); - if(!empty($projektarr)) { - $chargenerfassen = $projektarr['chargenerfassen']; - $mhderfassen = $projektarr['mhderfassen']; - $seriennummernerfassen = $projektarr['seriennummernerfassen']; - if(!empty($projektarr['multiorderpicking']) && $this->ModulVorhanden('multiorderpicking')) { - $chargenerfassen = 1; - $mhderfassen = 1; - $seriennummernerfassen = 1; - } - $kommissionierverfahren = $projektarr['kommissionierverfahren']; - } - $belegnr = $belegarr['belegnr']; - } - - $chargenauslagern = 1; - $mhdauslagern = 1; - $seriennummernauslagern = 1; - if($chargenmhdnachprojekt && $chargenerfassen){ - $chargenauslagern = 0; - } - if($chargenmhdnachprojekt && $mhderfassen){ - $mhdauslagern = 0; - } - if($chargenmhdnachprojekt && $seriennummernerfassen && $kommissionierverfahren !== 'kommissionierverfahren'){ - $seriennummernauslagern = 0; - } - $sortreihenfolge = 'ASC'; - if($belegtyp === 'produktion') { - $sortreihenfolge = 'DESC'; - } - - if($belegtyp === 'produktion') { - if($standardlager > 0 && !$this->app->DB->Select( - sprintf( - "SELECT id FROM lager WHERE id = %d AND bezeichnung <> '' AND IFNULL(geloescht,0) = 0 LIMIT 1", - (int)$standardlager) - ) - ) { - $standardlager = (int)$this->app->DB->Select( - sprintf( - "SELECT l.id - FROM projekt AS p - INNER JOIN lager AS l ON p.standardlagerproduktion = l.id - WHERE p.id = %d AND l.bezeichnung <> '' AND IFNULL(l.geloescht,0) = 0 - LIMIT 1", - (int)$projekt - ) - ); - } - } - else{ - if($standardlager > 0 && !$this->app->DB->Select( - sprintf( - "SELECT id FROM lager WHERE id = %d AND bezeichnung <> '' AND IFNULL(geloescht,0) = 0 LIMIT 1", - (int)$standardlager) - )){ - $standardlager = (int)$this->app->DB->Select( - sprintf( - "SELECT l.id - FROM projekt AS p - INNER JOIN lager AS l ON p.standardlager = l.id - WHERE p.id = %d AND l.bezeichnung <> '' AND IFNULL(l.geloescht,0) = 0 - LIMIT 1", - $projekt - ) - ); - } - } - if($standardlager == 0) { - if($projekt > 0){ - $projektlager = $this->app->DB->Select("SELECT projektlager FROM projekt WHERE id='$projekt'"); - } - } - $storageLocations = []; - $cartikel = $artikelarr?count($artikelarr):0; - for($i= ($belegtyp==='produktion'?1:0) ;$i<$cartikel;$i++) { - $beschreibung = $artikelarr[$i]['beschreibung']; - $artikel = $artikelarr[$i]['artikel']; - $menge = $artikelarr[$i]['menge']; - if($nurrestmenge && $belegtyp=='produktion') - { - $menge = $artikelarr[$i]['menge'] - $artikelarr[$i]['geliefert_menge']; - } - $subid = $artikelarr[$i]['id']; - $lager_string = ''; - - $arcticleRow = $this->app->DB->SelectRow( - sprintf( - "SELECT lagerartikel, mindesthaltbarkeitsdatum, chargenverwaltung, seriennummern - FROM artikel WHERE id=%d LIMIT 1", - (int)$artikel - ) - ); - $lagerartikel = $arcticleRow['lagerartikel']; - $seriennummern = $arcticleRow['seriennummern'] === 'keine'?'':$arcticleRow['seriennummern']; - $regal = 0; - - $sperrlagerWhere = ' lp.sperrlager <> 1 '; - if($belegtyp=='produktion') { - $sperrlagerWhere = ' (lp.sperrlager <> 1 OR lp.allowproduction = 1) '; - } - - if($lagerartikel > 0) - { - $this->LagerArtikelZusammenfassen($artikel); - // lager platz suchen eins abziehen und namen in lieferschein - // kleinster lager leer machen - $regal = 0; - $timeout=0; - $restmenge = $menge; - $lager_string = ''; - $mindesthaltbarkeitsdatum = $arcticleRow['mindesthaltbarkeitsdatum']; - $chargenverwaltung = $arcticleRow['chargenverwaltung']; - while($restmenge > 0) - { - $timeout++; - if($restmenge <= 0){ - break; - } - //if($timeout > 1000) break; - - $extraorder = ''; - $maxAuslagern = $restmenge; - if(!empty($seriennummern) && $belegtyp !== 'produktion') { - $snDeliveryNoteStorage = $this->app->DB->SelectArr( - sprintf( - 'SELECT bc.lagerplatz AS storage_location_id, COUNT(bc.id) - IFNULL(olp.menge, 0) AS amount - FROM `beleg_chargesnmhd` AS bc - LEFT JOIN ( - SELECT SUM(menge) AS menge, lager_platz - FROM `objekt_lager_platz` - WHERE objekt = \'lieferschein\' AND parameter = %d - GROUP BY lager_platz - ) AS olp ON bc.lagerplatz = olp.lager_platz - WHERE bc.type = \'sn\' AND bc.doctype = \'lieferschein\' AND bc.doctypeid = %d AND bc.pos = %d AND bc.wert <> \'\' - GROUP BY bc.lagerplatz - HAVING amount > 0 - ORDER BY COUNT(bc.id) - IFNULL(olp.menge, 0) = %f DESC, COUNT(bc.id) - IFNULL(olp.menge, 0) - ', - (int)$subid, (int)$lieferschein, (int)$subid, (float)$restmenge - ) - ); - if(!empty($snDeliveryNoteStorage)) { - $extraorder = sprintf(' lpi.lager_platz = %d DESC, ', $snDeliveryNoteStorage[0]['storage_location_id']); - if($snDeliveryNoteStorage[0]['amount'] < $restmenge && $snDeliveryNoteStorage[0]['amount'] > 0 && count($snDeliveryNoteStorage) > 1) { - $maxAuslagern = $snDeliveryNoteStorage[0]['amount']; - } - } - } - - $this->app->erp->RunHook('lieferscheinauslagern', 6, $belegtyp, $subid, $artikel, $mindesthaltbarkeitsdatum, $chargenverwaltung, $extraorder); - - if($mindesthaltbarkeitsdatum) { - if($standardlager > 0) { - $lager_max = $this->app->DB->SelectArr( - sprintf( - "SELECT lpi.lager_platz, if(lpi.menge > lm.menge, lm.menge,lpi.menge) as menge, lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> %d - INNER JOIN lager AS `lag` ON `lag`.id=lp.lager - INNER JOIN ( - SELECT lager_platz, sum(menge) as menge,min(mhddatum) as mhddatum - FROM lager_mindesthaltbarkeitsdatum - WHERE artikel = %d - GROUP BY lager_platz - ) AS lm ON lp.id = lm.lager_platz - WHERE lpi.artikel=%d AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.id='$standardlager' - ORDER by ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." `lag`.id='$standardlager' DESC, $extraorder lm.mhddatum ASC, lpi.menge $sortreihenfolge - LIMIT 1", - (int)$kommissionskonsignationslager,(int)$artikel, (int)$artikel - ) - ); - if(!$lager_max) { - $lager_max = $this->app->DB->SelectArr( - sprintf( - "SELECT lpi.lager_platz, lpi.menge, lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id - INNER JOIN lager AS `lag` ON `lag`.id=lp.lager - LEFT JOIN lager_mindesthaltbarkeitsdatum lm ON lm.artikel=lpi.artikel AND lp.id = lm.lager_platz - WHERE lpi.artikel=%d AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.id='$standardlager' - ORDER by ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." lag.id='$standardlager' DESC, $extraorder lm.mhddatum ASC, lpi.menge $sortreihenfolge - LIMIT 1", - (int)$artikel - ) - ); - } - } - elseif($projektlager > 0) { - // Hole nach und nach bis alles da ist - $lager_max = $this->app->DB->SelectArr( - "SELECT lpi.lager_platz, if(lpi.menge > lm.menge, lm.menge,lpi.menge) as menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' - INNER JOIN lager AS `lag` ON `lag`.id=lp.lager - INNER JOIN ( - SELECT lager_platz, sum(menge) as menge,min(mhddatum) as mhddatum - FROM lager_mindesthaltbarkeitsdatum - WHERE artikel = '$artikel' AND menge > 0 - GROUP BY lager_platz - ) AS lm ON lp.id = lm.lager_platz - WHERE lpi.artikel='$artikel' AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.projekt='$projekt' - ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lm.mhddatum ASC, lpi.menge $sortreihenfolge - LIMIT 1" - ); - if(!$lager_max) { - $lager_max = $this->app->DB->SelectArr( - "SELECT lpi.lager_platz, lpi.menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id - INNER JOIN lager AS `lag` ON `lag`.id=lp.lager - LEFT JOIN lager_mindesthaltbarkeitsdatum AS lm ON lm.artikel=lpi.artikel AND lp.id = lm.lager_platz - WHERE lpi.artikel='$artikel' AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.projekt='$projekt' - ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lm.mhddatum ASC, lpi.menge $sortreihenfolge - LIMIT 1"); - } - } - else { - // Hole nach und nach bis alles da ist - $lager_max = $this->app->DB->SelectArr( - sprintf( - "SELECT lpi.lager_platz, if(lpi.menge > lm.menge, lm.menge,lpi.menge) as menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' - INNER JOIN ( - SELECT lager_platz, sum(menge) as menge,min(mhddatum) as mhddatum - FROM lager_mindesthaltbarkeitsdatum - WHERE artikel = %d AND menge > 0 - GROUP BY lager_platz - ) AS lm ON lp.id = lm.lager_platz - WHERE lpi.artikel=%d AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." - ORDER by ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lm.mhddatum ASC, lpi.menge $sortreihenfolge - LIMIT 1", - (int)$artikel, (int)$artikel - ) - ); - if(!$lager_max) { - $lager_max = $this->app->DB->SelectArr("SELECT lpi.lager_platz, lpi.menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id - INNER JOIN lager_mindesthaltbarkeitsdatum AS lm ON lm.artikel=lpi.artikel AND lp.id = lm.lager_platz - WHERE lpi.artikel='$artikel' AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." - ORDER by ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lm.mhddatum ASC, lpi.menge $sortreihenfolge - LIMIT 1" - ); - } - } - } - else { - if($chargenverwaltung) { - if($standardlager > 0) { - $lager_max = $this->app->DB->SelectArr( - "SELECT lpi.lager_platz, if(lpi.menge > lm.menge, lm.menge,lpi.menge) as menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id - INNER JOIN lager AS `lag` ON `lag`.id=lp.lager - INNER JOIN ( - SELECT lager_platz, sum(menge) as menge - FROM lager_charge - WHERE artikel = '$artikel' AND menge > 0 - GROUP BY lager_platz - ) AS lm ON lp.id = lm.lager_platz - WHERE lpi.artikel='$artikel' AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.id='$standardlager' - ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." `lag`.id='$standardlager' DESC, $extraorder lpi.menge $sortreihenfolge - LIMIT 1" - ); - if(!$lager_max) - { - $lager_max = $this->app->DB->SelectArr( - "SELECT lpi.lager_platz, lpi.menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id - INNER JOIN lager AS `lag` ON `lag`.id=lp.lager - WHERE lpi.artikel='$artikel' AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.id='$standardlager' - ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." `lag`.id='$standardlager' DESC, $extraorder lpi.menge $sortreihenfolge - LIMIT 1" - ); - } - } - elseif($projektlager > 0){ - - $lager_max = $this->app->DB->SelectArr( - "SELECT lpi.lager_platz, if(lpi.menge > lm.menge, lm.menge,lpi.menge) as menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' - INNER JOIN lager AS `lag` ON `lag`.id=lp.lager - INNER JOIN ( - SELECT lager_platz, sum(menge) as menge - FROM lager_charge - WHERE artikel = '$artikel' AND menge > 0 - GROUP BY lager_platz - ) AS lm ON lp.id = lm.lager_platz - WHERE lpi.artikel='$artikel' AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.projekt='$projekt' - ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lpi.menge $sortreihenfolge - LIMIT 1" - ); - if(!$lager_max) { - $lager_max = $this->app->DB->SelectArr( - "SELECT lpi.lager_platz, lpi.menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' - INNER JOIN lager AS `lag` ON `lag`.id=lp.lager - WHERE lpi.artikel='$artikel' AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.projekt='$projekt' - ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lpi.menge $sortreihenfolge - LIMIT 1" - ); - } - } - else { - $lager_max = $this->app->DB->SelectArr( - "SELECT lpi.lager_platz, if(lpi.menge > lm.menge, lm.menge,lpi.menge) as menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' - INNER JOIN ( - SELECT lager_platz, sum(menge) as menge - FROM lager_charge - WHERE artikel = '$artikel' AND menge > 0 - GROUP BY lager_platz - ) AS lm ON lp.id = lm.lager_platz - WHERE lpi.artikel='$artikel' AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." - ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lpi.menge $sortreihenfolge - LIMIT 1" - ); - if(!$lager_max) { - $lager_max = $this->app->DB->SelectArr( - "SELECT lpi.lager_platz, lpi.menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' - WHERE lpi.artikel='$artikel' AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." - ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lpi.menge $sortreihenfolge - LIMIT 1" - ); - } - } - } - else{ - if($standardlager > 0) { - $lager_max = $this->app->DB->SelectArr( - "SELECT lpi.lager_platz, lpi.menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' - INNER JOIN lager AS `lag` ON `lag`.id=lp.lager - WHERE lpi.artikel='$artikel' AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.id='$standardlager' - ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." `lag`.id='$standardlager' DESC, $extraorder lpi.menge $sortreihenfolge - LIMIT 1" - ); - } - elseif($projektlager > 0) { - $lager_max = $this->app->DB->SelectArr( - "SELECT lpi.lager_platz, lpi.menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' - INNER JOIN lager AS `lag` ON `lag`.id=lp.lager - WHERE lpi.artikel='$artikel' AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.projekt='$projekt' - ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lpi.menge $sortreihenfolge - LIMIT 1" - ); - } - else { - $lager_max = $this->app->DB->SelectArr( - "SELECT lpi.lager_platz, lpi.menge,lpi.id - FROM lager_platz_inhalt AS lpi - INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' - WHERE lpi.artikel='$artikel' AND lpi.menge > 0 - ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." - ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lpi.menge $sortreihenfolge - LIMIT 1" - ); - } - } - } - if(!$lager_max){ - break; - } - if((round($maxAuslagern,8) > round($lager_max[0]['menge'],8)) && ($lager_max[0]['menge'] > 0)) { - // es werden mehr gebraucht als im lager sind - $this->LagerAuslagernRegal($artikel,$lager_max[0]['lager_platz'],$lager_max[0]['menge'],$projekt,ucfirst($belegtyp)." $belegnr","",$belegtyp,$lieferschein, $lager_max[0]['lager_platz_vpe'], $lager_max[0]['id']); - if($anzeige_lagerplaetze_in_lieferschein){ - $this->LagerAuslagernText($artikel, $subid, $lager_max[0]['lager_platz'], $lager_max[0]['menge'], $belegtyp); - }else{ - $this->LagerAuslagernObjektLagerPlatz($artikel, $subid, $lager_max[0]['lager_platz'], $lager_max[0]['menge'], $belegtyp); - } - $storageLocations[] = $lager_max[0]['lager_platz']; - $regal_name = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='".$lager_max[0]['lager_platz']."' LIMIT 1"); - $lager_string .= $regal_name."(".$lager_max[0]['menge'].") "; - $restmenge = round($restmenge - $lager_max[0]['menge'],8); - if(!$nurrestmenge){ - $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_max[0]['lager_platz'],$lager_max[0]['menge'],$projekt,ucfirst($belegtyp)." $belegnr","",$belegtyp,$lieferschein,$subid, $chargenauslagern, $mhdauslagern, $seriennummernauslagern); - } - } - else if( ($lager_max[0]['menge'] >= $maxAuslagern) && ($maxAuslagern > 0) ) { - // es sind genuegend lager - $this->LagerAuslagernRegal($artikel,$lager_max[0]['lager_platz'],$maxAuslagern,$projekt,ucfirst($belegtyp)." $belegnr","",$belegtyp,$lieferschein, $lager_max[0]['lager_platz_vpe'], $lager_max[0]['id']); - $storageLocations[] = $lager_max[0]['lager_platz']; - if($anzeige_lagerplaetze_in_lieferschein){ - $this->LagerAuslagernText($artikel, $subid, $lager_max[0]['lager_platz'], $maxAuslagern, $belegtyp); - }else{ - $this->LagerAuslagernObjektLagerPlatz($artikel, $subid, $lager_max[0]['lager_platz'], $maxAuslagern, $belegtyp); - } - $regal_name = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='".$lager_max[0]['lager_platz']."' LIMIT 1"); - $lager_string .= $regal_name."(".(float)$maxAuslagern.") "; - - if(!$nurrestmenge){ - $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_max[0]['lager_platz'],$maxAuslagern,$projekt,ucfirst($belegtyp)." $belegnr","",$belegtyp,$lieferschein,$subid, $chargenauslagern, $mhdauslagern, $seriennummernauslagern); - } - $restmenge = round($restmenge - $maxAuslagern, 8); - } - else { - break; - } - } - -/* -// neue datenstruktue - if($lager_string=='') { - $beschreibung .="\r\nLager: manuell"; - } - else { - $beschreibung .="\r\nLager: $lager_string"; - } -*/ - } - - $geliefert = $menge; - if($nurrestmenge && $belegtyp=='produktion') { - $geliefert = $menge + $artikelarr[$i]['geliefert_menge']; - } - $artikelhatseriennummer = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id='".$artikel."' LIMIT 1"); - if($belegtyp == 'produktion') - { - $this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert_menge='$geliefert', geliefert = 1 WHERE id='$subid' LIMIT 1"); - }else{ - - if($belegtyp=="lieferschein") - { - $auftragposid=$this->app->DB->Select("SELECT auftrag_position_id FROM lieferschein_position WHERE id='$subid'"); - if($auftragposid>0) - { - $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$geliefert' WHERE id='$auftragposid' LIMIT 1"); - } - } - - if($seriennummernerfassen=='1' && ($artikelhatseriennummer=='vomprodukteinlagern' || $artikelhatseriennummer=='vomprodukt' || $artikelhatseriennummer=='eigene')) - { - // wenn Seriennummer erfasst werden soll - //if($anzeige_lagerplaetze_in_lieferschein) - //{ - //$this->app->DB->Update("UPDATE ".$belegtyp."_position SET beschreibung='$beschreibung' WHERE id='$subid' LIMIT 1"); - //neue datenstruktur - //} - if($forceseriennummerngeliefertsetzen)$this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert='$geliefert' WHERE id='$subid' LIMIT 1"); - } else { - //wenn nicht - //if($anzeige_lagerplaetze_in_lieferschein) - // $this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert='$geliefert',beschreibung='$beschreibung' WHERE id='$subid' LIMIT 1"); - //else - $this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert='$geliefert' WHERE id='$subid' LIMIT 1"); - } - } - } - if(!empty($storageLocations)) { - $this->addStorageCountry($belegtyp, $lieferschein, $storageLocations); - } - $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt = '$belegtyp' AND parameter = '$lieferschein'"); - - $auftragid = $this->app->DB->Select("SELECT auftragid FROM $belegtyp WHERE id='$lieferschein'"); - if($auftragid){ - $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt = 'auftrag' AND parameter = '$auftragid'"); - } - - if($belegtyp == '' || $belegtyp === 'lieferschein') - { - $this->RunHook('erpapi_lieferschein_auslagern', 1, $lieferschein); - $this->LieferscheinProtokoll($lieferschein,"Lieferschein ausgelagert"); - } - } - - /** - * @param string $doctype - * @param int $doctypeId - * @param array $storageLocations - */ - public function addStorageCountry($doctype, $doctypeId, $storageLocations) - { - if($doctype === 'lieferschein') { - $order = $this->app->DB->SelectRow( - sprintf( - "SELECT o.id, o.schreibschutz - FROM lieferschein AS dn - INNER JOIN auftrag AS o ON dn.auftragid = o.id AND o.belegnr <> '' - WHERE dn.id = %d AND o.`storage_country` = '' AND o.shop = 0 - ORDER BY o.status <> 'storniert' DESC", - $doctypeId - ) - ); - if(!empty($order)) { - $country = $this->app->DB->Select( - sprintf( - "SELECT adr.land - FROM lager_platz AS lp - INNER JOIN lager AS l ON lp.lager = l.id - INNER JOIN adresse adr ON IF(l.adresse > 0, l.adresse, lp.adresse) = adr.id - AND adr.land <> '' AND adr.land <> '%s' - WHERE lp.id IN (%s) - LIMIT 1", - $this->app->DB->real_escape_string($this->app->erp->Firmendaten('land')), - implode(',', array_unique($storageLocations)) - ) - ); - if(!empty($country)) { - $this->app->DB->Update( - sprintf( - "UPDATE auftrag - SET storage_country = '%s', zuarchivieren = 0, schreibschutz = 0 - WHERE id = %d AND storage_country = ''", - $this->app->DB->real_escape_string($country), $order['id'] - ) - ); - if($this->app->DB->affected_rows() > 0) { - $this->app->erp->ANABREGSNeuberechnen($order['id'], 'auftrag'); - if($order['schreibschutz']) { - $this->app->erp->PDFArchivieren('auftrag', $order['id'], true); - } - - $invoice = $this->app->DB->SelectRow( - sprintf( - "SELECT id,storage_country, schreibschutz - FROM rechnung - WHERE auftragid = %d AND status <> 'storniert' - ORDER BY id DESC - LIMIT 1", - $order['id'] - ) - ); - if(!empty($invoice) && empty($invoice['storage_country'])) { - $this->app->DB->Update( - sprintf( - "UPDATE rechnung - SET storage_country = '%s', zuarchivieren = 0, schreibschutz = 0 - WHERE id = %d AND storage_country = ''", - $this->app->DB->real_escape_string($country), $invoice['id'] - ) - ); - $this->app->erp->ANABREGSNeuberechnen($invoice['id'], 'rechnung'); - if($invoice['schreibschutz']) { - $this->app->erp->PDFArchivieren('rechunng', $invoice['id'], true); - } - } - } - } - } - } - } - - // @refactor in Artikel Modul - function artikelnummerscan($artikel) - { - $hauptprojekt = (int)$this->app->erp->Firmendaten('projekt'); - $haupteanherstellerscanerlauben = $this->app->DB->Select("SELECT eanherstellerscanerlauben FROM projekt WHERE id = '$hauptprojekt' LIMIT 1"); - $subwhere = ""; - if($haupteanherstellerscanerlauben)$subwhere = 'or isnull(p.id)'; - $artikelnummer = $this->app->erp->FirstTillSpace($artikel); - $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikelnummer' AND geloescht!=1 LIMIT 1"); - if(!$artikelid)$artikelid = $this->app->DB->Select("SELECT art.id FROM artikel art - LEFT JOIN projekt p ON art.projekt = p.id - WHERE (p.eanherstellerscanerlauben = 1 $subwhere) AND art.ean='$artikelnummer' AND art.ean != '' AND art.geloescht!=1 LIMIT 1"); - if(!$artikelid)$artikelid = $this->app->DB->Select("SELECT art.id FROM artikel art - LEFT JOIN projekt p ON art.projekt = p.id - WHERE (p.eanherstellerscanerlauben = 1 $subwhere) AND art.herstellernummer='$artikelnummer' AND art.herstellernummer != '' AND art.geloescht!=1 LIMIT 1"); - $this->RunHook('artikelnummerscan',2, $artikel, $artikelid); - return $artikelid; - } - - // @refactor in TemplateMessge Komponente - function AddTplMsg($message) - { - if(!isset($this->app->User))return; - if(!method_exists($this->app->User,'GetID'))return; - $user = (int)$this->app->User->GetID(); - $this->app->DB->Insert("INSERT INTO `templatemessage` (`message`, `user`, `zeitstempel`) VALUES ('".$this->app->DB->real_escape_string($message)."','$user',now())"); - return $this->app->DB->GetInsertID(); - } - - // @refactor in TemplateMessge Komponente - function GetTmpMessageOut() - { - if(isset($this->app->Secure) && $this->app->Secure && method_exists($this->app->Secure, 'GetGET')) - { - $msgid = (int)$this->app->Secure->GetGET('msgid'); - if($msgid)return $this->base64_url_decode($this->GetTplMessage($msgid)); - return $this->base64_url_decode($this->app->Secure->GetGET('msg')); - } - return ''; - } - - // @refactor in TemplateMessge Komponente - function GetTplMessage($id) - { - if(!isset($this->app->User))return; - if(!method_exists($this->app->User,'GetID'))return; - $user = (int)$this->app->User->GetID(); - return $this->app->DB->Select("SELECT `message` FROM `templatemessage` WHERE `user` = '$user' AND id = '$id' LIMIT 1"); - } - - // @refactor in TemplateMessge Komponente - function base64_url_encode($input) { - return strtr(base64_encode($input), '+/=', '-_,'); - } - - // @refactor in TemplateMessge Komponente - function base64_url_decode($input) { - return base64_decode(strtr($input, '-_,', '+/=')); - } - - // @refactor in Session Klasse - function ClearCookies() - { - if(count($_COOKIE) > 0) - { - foreach($_COOKIE as $key=>$value) - { - if($key!=str_replace("SpryMedia","",$key)) - setcookie ($key, time() - 3600); - } - } - } - - /** @deprecated */ - function ManuelEcho($text) - { - echo $this->ClearDataBeforeOutput($text); - exit; - } - - // @refactor Formater Komponente - function ClearDataBeforeOutput($text, $replaceEmptyFormAction = true) - { - if ((bool)$replaceEmptyFormAction === true) { - $text = str_replace('form action=""','form action="#"',$text); - } - $text = str_replace('NONBLOCKINGZERO','',$text); - $text = str_replace("'","'",$text); - return $text; - } - - function AdresseAnschriftString($id,$ansprechpartner=false) - { - /** @var Adresse $obj */ - $obj = $this->LoadModul('adresse'); - if(!empty($obj) && method_exists($obj, 'AdresseAnschriftString')) { - return $obj->AdresseAnschriftString($id,$ansprechpartner); - } - return ''; - } - - - // @refactor BelegPositionen Widget - function EinkaufspreiseTabelle($artikel, $divid = '') - { - if($this->RechteVorhanden('artikel','einkauf')) - { - $table = new EasyTable($this->app); - $table->Query("SELECT if(CHAR_LENGTH(adr.name) > 20, CONCAT(SUBSTRING(adr.name,1,20),'...'), adr.name) as adrname, if(CHAR_LENGTH(e.bestellnummer) > 20, CONCAT(SUBSTRING(e.bestellnummer,1,20),'...'), e.bestellnummer) as bestellnummer, trim(e.ab_menge)+0 as ab, ". $this->FormatPreis("e.preis")." as preis, e.waehrung FROM einkaufspreise e LEFT JOIN adresse adr ON e.adresse = adr.id - WHERE e.artikel = '$artikel' AND (e.gueltig_bis = '0000-00-00' OR isnull(e.gueltig_bis) OR gueltig_bis >= now() ) ORDER BY adrname, ab_menge"); - return ' -

Einkaufspreise

'. - $table->DisplayNew('return','Währung','noAction').' - '; - } - return ''; - } - - /** @deprecated */ - function DokumentAbschickenPopup() - { - $module = $this->app->Secure->GetGET("module"); - return "var horizontalPadding = 30; - var verticalPadding = 30; $(''); - /*$this->app->Tpl->Add('INLINEHELP',' - -
'.$heading.'
');*/ - } - if(isset($inline[$module][$action]['weitereyoutube'])) { - if(isset($inline[$module][$action]['weitereyoutube'][0])) - { - $weitereyoutube = $inline[$module][$action]['weitereyoutube']; - }else{ - $weitereyoutube[0] = $inline[$module][$action]['weitereyoutube']; - } - $this->app->Tpl->Add( - 'INLINEHELP', - '
' - .(count($weitereyoutube) > 2?'':'') - .'
' - ); - foreach($weitereyoutube as $k => $v) { - $objiframes['youtubeifr'.$k] = 'https://www.youtube.com/embed/'.$v['youtube'].'?rel=0'; - $this->app->Tpl->Add( - 'INLINEHELP', - '
- - -
'.$v['titel'].'
- -
' - ); - - } - $this->app->Tpl->Add( - 'INLINEHELP', - '
' - .(count($weitereyoutube) > 2?'
':'') - .'
' - ); - } - - if(isset($inline[$module][$action]['description'])) - { - $this->app->Tpl->Add('INLINEHELP','
'.$inline[$module][$action]['description'].'
'); - } - if(!empty($inline[$module][$action]['extradescription'])) { - preg_match_all( - '//', - $inline[$module][$action]['extradescription'], - $pregerg - ); - if(!empty($pregerg) && !empty($pregerg[0])) { - foreach($pregerg[0] as $pregKey => $pregVal) { - $inline[$module][$action]['extradescription'] = str_replace( - $pregVal, - '', - $inline[$module][$action]['extradescription'] - ); - } - } - $this->app->Tpl->Add('INLINEHELP','
'.$inline[$module][$action]['extradescription'].'
'); - } - - if(!empty($inline[$module][$action]['site2'])) { - $this->app->Tpl->Add( - 'INLINEHEL2',$inline[$module][$action]['site2'] - ); - } - - if(isset($inline[$module][$action]['link']) - || !empty($inline[$module][$action]['extralinks']) - || !empty($inline[$module][$action]['extralinks3'])) { - $inlinehelplink = true; - $this->app->Tpl->Add( - 'INLINEHELPLINK','
' - ); - if(isset($inline[$module][$action]['link'])) { - $this->app->Tpl->Add( - 'INLINEHELPLINK', - '' - ); - } - if(!empty($inline[$module][$action]['extralinks'])) { - foreach($inline[$module][$action]['extralinks'] as $eLink => $eValue) { - if(is_numeric($eLink)) { - $this->app->Tpl->Add( - 'INLINEHELPLINK', - '' - ); - } - else { - $this->app->Tpl->Add( - 'INLINEHELPLINK', - '' - ); - } - } - } - if(!empty($inline[$module][$action]['extralinks3'])) { - foreach($inline[$module][$action]['extralinks3'] as $eLink => $eValue) { - if(is_numeric($eLink)) { - $this->app->Tpl->Add( - 'INLINEHELP3', - '' - ); - } - else { - $this->app->Tpl->Add( - 'INLINEHELP3', - '' - ); - } - } - } - $this->app->Tpl->Add( - 'INLINEHELPLINK','
' - ); - } - - $this->app->Tpl->Add('INLINEHELP',''); - $include = true; - - if(is_string($inline[$module][$action])) { - $this->app->Tpl->Set('INLINEHELP',$inline[$module][$action]); - } - } - if(!$inlinehelplink) { - //$this->app->Tpl->Add('INLINEHELPLINK','
'); - $this->app->Tpl->Add('TABSPRINT', - ' - ' - ); - }else { - $this->app->Tpl->Add('TABSPRINT', - ' - ' - ); - } - - $this->app->Tpl->Add('SCRIPTJAVASCRIPT',' - - '); - if($this->app->User->GetParameter('tooltipinline_autoopen')) { - $this->app->Tpl->Add('INLINEHELPOPEN', ' class="inlineautoopen" '); - } - $phone = str_replace(['-',' '],'', erpAPI::Ioncube_Property('phone_smb')); - if(empty($phone)) { - $this->app->Tpl->Set('BEFORESUPPORTPHONE', ''); - } - else { - $this->app->Tpl->Set('SUPPORTPHONENUMBER', $phone); - $sipuid = $this->app->erp->ModulVorhanden('sipgate') && $this->app->erp->GetPlacetelSipuid(); - if(!empty($sipuid)) { - $this->app->Tpl->Set('SIPGATEACTIVE', 1); - $this->app->Tpl->Set('SUPPORTPHONENUMBERLINK', '#'); - } - else{ - $this->app->Tpl->Set('SUPPORTPHONENUMBERLINK', 'tel://'.$phone); - } - } - $this->app->Tpl->Parse('PAGE','tooltipinline.tpl'); - } - - /** - * @param array $faqs - * @param string $target - */ - public function showInlineFaq($faqs, $target = 'INLINEHELP2') - { - $html = '
'; - if(!empty($faqs)) { - foreach($faqs as $faq) { - $html .= '

'.$faq['question'].'

'.$faq['answer'].'
'; - } - } - $html .= '
'; - $this->app->Tpl->Add($target, $html); - } - - /**@deprected**/ - function HelpIcon() - { - $module = $this->app->Secure->GetGET("module"); - $action = $this->app->Secure->GetGET("action"); - } - - /**@deprected**/ - function PrinterIcon() - { - // $this->app->Tpl->Add('TABSPRINT'," "); - } - - // @refactor Auftrag Modul - function SaldoAdresseAuftrag($adresse) - { - return $this->app->DB->Select("SELECT SUM(gesamtsumme) FROM auftrag WHERE adresse='$adresse' AND status='freigegeben' LIMIT 1"); - } - - // @refactor Adresse Modul - function UmsatzAdresseAuftragJahr($adresse) - { - return $this->app->DB->Select("SELECT - SUM(ap.preis*ap.menge*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1))) - FROM auftrag_position ap LEFT JOIN auftrag a ON ap.auftrag=a.id WHERE (a.status='freigegeben' OR a.status='abgeschlossen') - AND DATE_FORMAT(a.datum,'%Y')=DATE_FORMAT(NOW(),'%Y') AND a.adresse='$adresse'"); - //"SELECT SUM(gesamtsumme) FROM auftrag WHERE adresse='$adresse' AND status='freigegeben' - // AND DATE_FORMAT(datum,'%Y')=DATE_FORMAT(NOW(),'%Y') LIMIT 1"); - } - - // @refactor Adresse Modul - function UmsatzAdresseRechnungJahr($adresse) - { - return $this->app->DB->Select("SELECT - SUM(ap.preis*ap.menge*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1))) - FROM rechnung_position ap LEFT JOIN rechnung a ON ap.rechnung=a.id WHERE (a.status='freigegeben' OR a.status='abgeschlossen' OR a.status='versendet') - AND DATE_FORMAT(a.datum,'%Y')=DATE_FORMAT(NOW(),'%Y') AND a.adresse='$adresse'"); - } - - - // @refactor Adresse Modul - function SaldoAdresse($adresse) - { - return $this->KundenSaldo($adresse); - } - - // @refactor Adresse Modul - public function KundenSaldo($adresse){ - if(!is_numeric($adresse) || $adresse <= 0){ - return 0; - } - - $rechnungs = $this->app->DB->Select("SELECT IFNULL(SUM(soll-ist),0) FROM rechnung WHERE status != 'angelegt' AND zahlungsstatus != 'bezahlt' AND adresse = '$adresse'"); - $gutschrifts = $this->app->DB->Select("SELECT IFNULL(SUM(soll-ist),0) FROM gutschrift WHERE status != 'angelegt' AND (manuell_vorabbezahlt = '0000-00-00' OR manuell_vorabbezahlt IS NULL) AND zahlungsstatus != 'bezahlt' AND adresse = '$adresse'"); - - $kundensaldo = $rechnungs - $gutschrifts; - $kundensaldo = round($kundensaldo, 2); - - return $kundensaldo; - } - - - // @refactor Produktion Modul - function genLvl($id, $typ = '') - { - if($typ !== 'produktion') { - return; - } - } - - - // @refactor Auftrag Modul - function AuftragExplodieren($auftrag,$typ="", $listeexplodieren = null) - { - if($typ==='produktion') { - } - else { - $auftraege = $this->app->DB->SelectRow("SELECT * FROM auftrag WHERE (status='freigegeben' OR status='angelegt') AND id='$auftrag'"); - $projektlager = 0; - } - - $adresse = $auftraege['adresse']; - $projekt = $auftraege['projekt']; - $status= $auftraege['status']; - - /** - * Die nächsten vier Zeilen zur projektabhängigen Stücklistenanpassung - */ - if($projekt > 0) { - if (!$listeexplodieren - && ($this->app->DB->Select("SELECT autostuecklistenanpassung FROM projekt WHERE id='$projekt' LIMIT 1")) == 0) { - return; - } - if($typ !== 'produktion') { - $projektlager = $this->app->DB->Select("SELECT id FROM projekt WHERE id = $projekt AND projektlager = 1 LIMIT 1"); - } - } - - if($status!=='freigegeben' && $status!=='angelegt'){ - return; - } - - if($typ==='produktion') { - } - else { - if($listeexplodieren) { - $swhere = null; - foreach($listeexplodieren as $v) { - $swhere[] = " ap.id = '$v' "; - } - $swhere = ' ('.implode(' OR ', $swhere).') '; - $artikelarr= $this->app->DB->SelectArr( - "SELECT ap.* ,art.lagerartikel, art.keineeinzelartikelanzeigen,art.juststueckliste,art.stueckliste - FROM auftrag_position AS ap - LEFT JOIN artikel AS art ON ap.artikel = art.id - WHERE ap.auftrag='$auftrag' AND (ap.geliefert_menge < ap.menge AND ap.geliefert=0) AND $swhere"); - } - else { - $artikelarr= $this->app->DB->SelectArr( - "SELECT ap.* ,art.lagerartikel, art.keineeinzelartikelanzeigen,art.juststueckliste,art.stueckliste - FROM auftrag_position AS ap - LEFT JOIN artikel AS art ON ap.artikel = art.id - WHERE ap.auftrag='$auftrag' AND (ap.geliefert_menge < ap.menge AND ap.geliefert=0)" - ); - } - } - - $treffer=0; - // Lager Check - $positionen_vorhanden = 0; - $artikelzaehlen=0; - - $changed = false; - if($artikelarr) { - for($k=0;$kapp->DB->SelectRow(sprintf('SELECT explodiert,menge,sort FROM auftrag_position WHERE id=%d LIMIT 1', (int)$artikel_position_id)); - $explodiert = $positionRow['explodiert']; - $menge = $positionRow['menge']; - $sort = $positionRow['sort']; - } - if($listeexplodieren && in_array($artikel_position_id, $listeexplodieren)) { - $just_stueckliste = 1; - } - $waehrung = $this->app->DB->real_escape_string($artikelarr[$k]['waehrung']);// $this->app->DB->real_escape_string($this->app->DB->Select("SELECT waehrung FROM auftrag_position WHERE id = '$artikel_position_id' LIMIT 1")); - if($just_stueckliste && !$explodiert && ($preproducedpartlist = $this->getPreproducedPartlistFromArticle($artikel)) && - (($partlistsellable = $this->ArtikelAnzahlVerkaufbar($preproducedpartlist, $projektlager)) > 0) && round($partlistsellable,7) >= round($menge,7)) - { - $preproducednummer = $this->app->DB->real_escape_string($this->app->DB->Select("SELECT nummer FROM artikel WHERE id = $preproducedpartlist")); - $changed = true; - if(round($partlistsellable,7) >= round($menge,7)){ - $just_stueckliste = 0; - $lagerartikel = 1; - $this->app->DB->Update("UPDATE auftrag_position SET artikel = $preproducedpartlist,nummer = '$preproducednummer' WHERE id = " . $artikel_position_id); - $this->app->DB->Update( - sprintf( - 'UPDATE `artikel` SET `laststorage_changed` = NOW() WHERE `id` = %d', - $preproducedpartlist - ) - ); - $order_obj = $this->app->erp->LoadModul('auftrag'); - if(!empty($order_obj) && method_exists($order_obj,'removeExplodedArticles')){ - $order_obj->removeExplodedArticles($auftrag, $artikel_position_id); - } - }else{ - $preproducedart = $artikelarr[$k]; - $preproducedart['sort'] = $sort; - $preproducedart['menge'] = $partlistsellable; - $preproducedart['artikel'] = $preproducedpartlist; - $preproducedart['nummer'] = $preproducednummer; - if(is_null($preproducedart['steuersatz'])) - { - $preproducedart['steuersatz'] = -1; - } - unset($preproducedart['id']); - $preproducedart['id'] = $this->app->DB->InsertArr('auftrag_position','id',$preproducedart,true); - $sort++; - $this->app->DB->Update("UPDATE auftrag_position SET menge = menge - $partlistsellable,sort = $sort WHERE id = " . $artikel_position_id); - $this->app->DB->Update( - sprintf( - 'UPDATE `artikel` SET `laststorage_changed` = NOW() WHERE `id` = %d', - $preproducedpartlist - ) - ); - } - $this->app->DB->Update( - sprintf( - 'UPDATE `artikel` SET `laststorage_changed` = NOW() WHERE `id` = %d', - $artikel - ) - ); - } - } - //$artikel_von_stueckliste = $this->app->DB->SelectArr("SELECT * FROM stueckliste WHERE stuecklistevonartikel='$artikel' AND art!='it' AND art!='bt'"); - - - // mengen anpassung -/* - // Dieses Feature stammt aus uralten Zeiten von WaWision - habs heute enternt 30.12.2018 BS da wenn man an der Stückliste was anpasst das auch dann so bleiben soll - if($just_stueckliste=="1" && $explodiert=="1")// && $max=="9898989") - { - foreach($artikel_von_stueckliste as $key=>$value) - { - $menge_st =$value['menge']*$menge; - if($typ=="produktion") - { - } - else - { - $this->app->DB->Update("UPDATE auftrag_position SET menge='{$menge_st}' WHERE explodiert_parent='$artikel_position_id' AND artikel='{$value['artikel']}'"); - } - } - } -*/ - // darunter war ein else if - if($just_stueckliste=="1" && $explodiert=="0") - { - $checklieferkette = 0; - if($typ === 'auftrag'){ - $checklieferkette = $this->app->DB->Select("SELECT id FROM lieferkette_bestellung WHERE belegtyp='auftrag' AND belegid='$auftrag' LIMIT 1"); - } - - if($checklieferkette > 0){ - $artikel_von_stueckliste = $this->app->DB->SelectArr( - "SELECT s.*, art.nummer AS artnummer,art.projekt AS artprojekt - FROM stueckliste AS s - INNER JOIN artikel AS art ON s.artikel = art.id - WHERE s.stuecklistevonartikel='$artikel' AND s.art!='it' AND s.art!='bt'" - ); - } - else{ - $artikel_von_stueckliste = $this->app->DB->SelectArr( - "SELECT s.*, art.nummer AS artnummer,art.projekt AS artprojekt - FROM stueckliste AS s - INNER JOIN artikel AS art ON s.artikel = art.id - WHERE s.stuecklistevonartikel='$artikel'" - ); - } - - $treffer++; - $changed = true; - //hole artikel von stueckliste - - // schiebe alle artikel nach hinten - $erhoehe_sort = !empty($artikel_von_stueckliste)?count($artikel_von_stueckliste):0; - if($typ==='produktion') - { - } - else - { - $this->app->DB->Update("UPDATE auftrag_position SET sort=sort+$erhoehe_sort WHERE auftrag='$auftrag' AND sort > $sort"); - } - - if(!empty($artikel_von_stueckliste)){ - foreach ($artikel_von_stueckliste as $key => $value) { - $sort++; - $nummer = $value['artnummer']; - $projekt_artikel = $value['artprojekt']; - if($projekt_artikel > 0) $projekt = $projekt_artikel; - if($typ === 'produktion'){ - }else{ - $explodiert_id = $this->AddAuftragPositionNummer($auftrag, $nummer, $value['menge'] * $menge, $projekt, 1, false, "", array('forceartikelid' => $value['artikel'])); - $this->app->DB->Update( - sprintf( - 'UPDATE `artikel` SET `laststorage_changed` = NOW() WHERE `id` = %d', - $artikel - ) - ); - if($waehrung != '') $this->app->DB->Update("UPDATE auftrag_position SET waehrung='" . $waehrung . "' WHERE id='$explodiert_id' LIMIT 1"); - $this->app->DB->Update("UPDATE auftrag_position SET einkaufspreis='0',einkaufspreisurspruenglich=0 WHERE id='$explodiert_id' AND preis=0"); - $this->app->DB->Update("UPDATE auftrag_position SET ausblenden_im_pdf='" . ($keineeinzelartikelanzeigen == 1 ? 1 : 0) . "' WHERE id='$explodiert_id' "); - $this->app->DB->Update("UPDATE auftrag_position SET explodiert_parent='$artikel_position_id',sort='$sort',ohnepreis=1 WHERE id='$explodiert_id' LIMIT 1"); - if($this->app->DB->Select("SELECT id FROM artikel WHERE id = '" . $value['artikel'] . "' AND (juststueckliste = 1 " . ($listeexplodieren ? " OR stueckliste = 1 " : '') . ") LIMIT 1")) $this->app->DB->Update("UPDATE auftrag_position SET explodiert = 1 WHERE id='$explodiert_id' LIMIT 1"); - if($this->Firmendaten('auftragexplodieren_unterstuecklisten')) $this->app->DB->Update("UPDATE auftrag_position SET explodiert = 0 WHERE id = '$explodiert_id' LIMIT 1"); - $this->app->DB->Update("UPDATE `beleg_zwischenpositionen` SET pos = pos + 1 WHERE doctype = 'auftrag' AND doctypeid = '$auftrag' AND pos >= '" . ($sort - 1) . "' "); - } - } - } - - // MLM wenn mlm und der artikel explodiert ist alle punkte platt machen - if($typ==='auftrag' && $this->Firmendaten('modul_mlm')=='1') - { - $this->app->DB->Update("UPDATE auftrag_position SET mlmdirektpraemie=0, bonuspunkte=0,punkte=0 WHERE explodiert_parent='$artikel_position_id'"); - } - - if($typ==='produktion') - { - } - else - { - $this->app->DB->Update("UPDATE auftrag_position SET explodiert='1' WHERE id='$artikel_position_id' LIMIT 1"); - } - } - } - } - } - - if($typ==='produktion'){ - $this->ANABREGSNeuberechnen($auftrag, 'produktion'); - } - if($typ==='auftrag'){ - $this->ANABREGSNeuberechnen($auftrag, 'auftrag'); - } - } - - - // @refactor Auftrag Modul - public function AuftragEinzelnBerechnen($auftrag,$festreservieren=false) - { - if($auftrag <=0) - { - return; - } - $this->AuftragExplodieren($auftrag); - - //$this->BerechneDeckungsbeitrag($auftrag,"auftrag"); - $auftragarr = $this->app->DB->SelectRow("SELECT projekt,internet FROM auftrag WHERE id = '$auftrag' LIMIT 1"); - if(empty($auftragarr)) - { - return; - } - /* - $internet = $auftragarr['internet'];//$this->app->DB->Select("SELECT internet FROM auftrag WHERE id = '$auftrag' LIMIT 1"); - if(empty($internet)){ - $this->LoadSteuersaetzeWaehrung($auftrag,'auftrag'); - }*/ - - // reservieren nur wenn es manuell gemacht wurde oder im auftrag fest steht - $projekt = $auftragarr['projekt']; - $reservierung = $this->Projektdaten($auftragarr['projekt'], 'reservierung');// $this->app->DB->Select("SELECT reservierung FROM projekt WHERE id='$projekt' LIMIT 1"); - if($reservierung=="1" || $festreservieren){ - $this->AuftragReservieren($auftrag); - } - - $this->AuftragAutoversandBerechnen($auftrag); - } - - // @refactor Auftrag Modul - function AuftragAutoversandBerechnen($auftrag) - { - $toleranz = (float)str_replace(',','.', $this->app->erp->GetKonfiguration('zahlungseingang_toleranz')); - if($toleranz < 0)$toleranz = 0; - $auftraege = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id='$auftrag'"); - $adresse = $auftraege[0]['adresse']; - $artikelarr= $this->app->DB->SelectArr("SELECT ap.id, ap.artikel, ap.menge, ap.geliefert_menge, art.lagerartikel as artlagerartikel FROM auftrag_position ap LEFT JOIN artikel art ON ap.artikel = art.id WHERE ap.auftrag='$auftrag' AND ap.geliefert_menge < ap.menge AND ap.geliefert=0"); - - //pruefe ob es mindestens eine reservierung gibt - $reservierte = $this->app->DB->Select("SELECT COUNT(id) FROM lager_reserviert WHERE adresse='$adresse' AND datum>=NOW() AND objekt!='lieferschein'"); - if($reservierte >0 && $auftraege[0]['reserviert_ok'] != 1) { - $this->app->DB->Update("UPDATE auftrag SET reserviert_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - elseif($reservierte <= 0 && $auftraege[0]['reserviert_ok'] != 0) { - $this->app->DB->Update("UPDATE auftrag SET reserviert_ok='0' WHERE id='$auftrag' LIMIT 1"); - } - - // liefertermin - $liefertermincheck = $this->app->DB->Select("SELECT id FROM auftrag WHERE (tatsaechlicheslieferdatum<=NOW() OR tatsaechlicheslieferdatum IS NULL OR tatsaechlicheslieferdatum='0000-00-00') AND id='$auftrag'"); - if($liefertermincheck >0 && $auftraege[0]['liefertermin_ok'] != 1) { - $this->app->DB->Update("UPDATE auftrag SET liefertermin_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - elseif($liefertermincheck <= 0 && $auftraege[0]['liefertermin_ok'] != 0) { - $this->app->DB->Update("UPDATE auftrag SET liefertermin_ok='0' WHERE id='$auftrag' LIMIT 1"); - } - //liefersperre - $liefersperre = $this->app->DB->Select("SELECT liefersperre FROM adresse WHERE id='$adresse'"); - if($liefersperre >0 && $auftraege[0]['liefersperre_ok'] != 0) { - $this->app->DB->Update("UPDATE auftrag SET liefersperre_ok='0' WHERE id='$auftrag' LIMIT 1"); - } - elseif($liefersperre <= 0 && $auftraege[0]['liefersperre_ok'] != 1){ - $this->app->DB->Update("UPDATE auftrag SET liefersperre_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - - //kreditlimit - $kreditlimit_freigabe = $auftraege[0]['kreditlimit_freigabe'] ;// $this->app->DB->Select("SELECT kreditlimit_freigabe FROM auftrag WHERE id='$auftrag' LIMIT 1"); - $setKreditLimitOk = $kreditlimit_freigabe=='1' - || $this->KundeHatZR($adresse) - || $this->KreditlimitCheck($adresse)==true; - if($setKreditLimitOk && $auftraege[0]['kreditlimit_ok'] != 1) { - $this->app->DB->Update("UPDATE auftrag SET kreditlimit_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - elseif(!$setKreditLimitOk && $auftraege[0]['kreditlimit_ok'] != 0) { - $this->app->DB->Update("UPDATE auftrag SET kreditlimit_ok='0' WHERE id='$auftrag' LIMIT 1"); - } - - if($auftraege[0]['ust_ok'] != 1 && ($auftraege[0]['ust_befreit']==0 || ($auftraege[0]['ust_befreit']==1 && $auftraege[0]['ustid']==''))) { - $this->app->DB->Update("UPDATE auftrag SET ust_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - - // Lager Check - $positionen_vorhanden = 0; - $artikelzaehlen=0; - $cartikelarr = $artikelarr?count($artikelarr):0; - for($k=0;$k<$cartikelarr; $k++) { - $menge = $artikelarr[$k]['menge'] - $artikelarr[$k]['geliefert_menge']; - $artikel = $artikelarr[$k]['artikel']; - $artikel_position_id = $artikelarr[$k]['id']; - $lagerartikel = $artikelarr[$k]['artlagerartikel']; - if($lagerartikel==1) { - // wenn artikel oefters im Auftrag nehme gesamte summe her - - $gesamte_menge_im_auftrag= $this->app->DB->Select("SELECT SUM(menge-geliefert_menge) FROM auftrag_position WHERE auftrag='$auftrag' AND artikel='$artikel'"); - if($gesamte_menge_im_auftrag > $menge) { - $menge = $gesamte_menge_im_auftrag; - } - $artikelzaehlen++; - if($this->LagerCheck($adresse,$artikel,$menge,"auftrag",$auftrag)>0) { - $positionen_vorhanden++; - } - elseif($positionen_vorhanden > 0) { - break; - } - //else { if($auftrag==314) {echo "Artikel $artikel Menge $menge";exit;} } - - } - } - $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$auftrag' LIMIT 1"); - - $this->app->DB->Update("UPDATE auftrag SET teillieferung_moeglich='0' WHERE id='$auftrag' LIMIT 1"); - //echo "$positionen_vorhanden $artikelzaehlen
"; - if($positionen_vorhanden==$artikelzaehlen){ - $this->app->DB->Update("UPDATE auftrag SET lager_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - else { - $kommissionierverfahren = $this->app->DB->Select("SELECT kommissionierverfahren FROM projekt WHERE id = '$projekt' LIMIT 1"); - if($kommissionierverfahren == 'rechnungsmail') - { - $this->app->DB->Update("UPDATE auftrag SET lager_ok='1' WHERE id='$auftrag' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE auftrag SET lager_ok='0' WHERE id='$auftrag' LIMIT 1"); - } - if($positionen_vorhanden > 0 && $artikelzaehlen > 0) - { - $this->app->DB->Update("UPDATE auftrag SET teillieferung_moeglich='1' WHERE id='$auftrag' LIMIT 1"); - } - - } - - - // projekt check start - $projektcheck = 0; - $projektcheckname = 0; - $projektportocheck = 0; - $projektnachnahmecheck = 0; - $projektarr = empty($projekt)?null:$this->app->DB->SelectRow("SELECT * FROM projekt WHERE id='$projekt' LIMIT 1"); - - if(!empty($projektarr)){ - $projektcheck = $projektarr['checkok']; - $projektcheckname = $projektarr['checkname']; - $projektportocheck = $projektarr['portocheck']; - $projektnachnahmecheck = $projektarr['nachnahmecheck']; - } - $altercheck = $this->app->DB->Select("SELECT check_ok FROM auftrag WHERE id='$auftrag' LIMIT 1"); - - if($projektcheck=='1' && @is_file(dirname(__FILE__)."/../plugins/class.".$projektcheckname.".php")) - { - //echo "projekt check $projektcheckname notwendig"; - if(file_exists(dirname(__DIR__).'/plugins/class.'.$projektcheckname.'.php') && !class_exists('unishop')) - { - include_once dirname(__DIR__).'/plugins/class.'.$projektcheckname.'.php'; - } - - if(class_exists('unishop')){ - $tmp = new unishop($this->app); - if($tmp->CheckOK($auftrag)) { - $this->app->DB->Update("UPDATE auftrag SET check_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - else{ - $this->app->DB->Update("UPDATE auftrag SET check_ok='0' WHERE id='$auftrag' LIMIT 1"); - } - }else{ - $this->app->DB->Update("UPDATE auftrag SET check_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - } - else{ - $this->app->DB->Update("UPDATE auftrag SET check_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - $this->RunHook('auftragcheck', 2, $auftrag, $altercheck); - - // autopruefung anstubsen - //$this->AutoUSTPruefung($adresse); - - // UST Check - // pruefe adresse 23 ust innerhalb 3 tagen vorhanden? wenn nicht schaue ob selber ordern kann wenn ja ordern und auf gruen - - $ustprf = $this->app->DB->Select("SELECT id FROM ustprf WHERE DATE_FORMAT(datum_online,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') AND adresse='$adresse' AND status='erfolgreich' LIMIT 1"); - $ustid = ''; - $ust_befreit = ''; - $land = ''; - $auftragarr = $this->app->DB->SelectRow("SELECT * FROM auftrag WHERE id='$auftrag' LIMIT 1"); - if(!empty($auftragarr)){ - $ustid = $auftragarr['ustid']; - $ust_befreit = $auftragarr['ust_befreit']; - $land = $auftragarr['land']; - } - - if($auftragarr['ust_ok'] != 1 && ($ust_befreit==0 || ($ust_befreit==1 && $ustid==''))) { - $this->app->DB->Update("UPDATE auftrag SET ust_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - - // Porto Check - // sind versandkosten im auftrag - $porto = $this->app->DB->Select("SELECT ap.id FROM auftrag_position ap, artikel a WHERE ap.auftrag='$auftrag' AND ap.artikel=a.id AND a.porto=1 AND ap.preis >= 0 - AND a.id=ap.artikel LIMIT 1"); - $keinporto = 0; - $selbstabholer = ''; - $projekt = 0; - $checkkeinportocheck = 0; - if(!empty($auftragarr)) { - $keinporto = $auftragarr['keinporto']; - $selbstabholer = $auftragarr['versandart']; - $projekt = $auftragarr['projekt']; - - // portocheck bei projekt - $checkkeinportocheck = $this->app->DB->Select("SELECT keinportocheck FROM versandarten WHERE type = '".$this->app->DB->real_escape_string($auftragarr['versandart'])."' AND - (projekt = '$projekt' OR projekt = 0) ORDER BY projekt = '$projekt' DESC LIMIT 1"); - - - } - - if($selbstabholer=='selbstabholer' || $selbstabholer=='keinversand' || $checkkeinportocheck=="1") { - $keinporto=1; - } - - if($projektportocheck==1) - { - if($porto > 0){ - $this->app->DB->Update("UPDATE auftrag SET porto_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - else{ - $portoFreeLimit = (double) $this->app->DB->Select("SELECT portofreiab FROM adresse WHERE id={$adresse} LIMIT 1"); - $parcelValue = (double) $auftragarr['gesamtsumme']; - - if(!empty($portoFreeLimit) && !empty($parcelValue) && $parcelValue > $portoFreeLimit){ - $this->app->DB->Update("UPDATE auftrag SET porto_ok='1' WHERE id='$auftrag' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE auftrag SET porto_ok='0' WHERE id='$auftrag' LIMIT 1"); - } - } - } else { - //projekt hat kein portocheck porto ist immer ok - $this->app->DB->Update("UPDATE auftrag SET porto_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - - - - if($keinporto==1 || $selbstabholer=='selbstabholer') - { - $this->app->DB->Update("UPDATE auftrag SET porto_ok='1' WHERE id='$auftrag' LIMIT 1"); - //$this->app->DB->Update("UPDATE auftrag_position ap, artikel a SET ap.preis='0' WHERE ap.auftrag='$auftrag' AND a.id=ap.artikel AND a.porto='1'"); - } - - - //Vorkasse Check - //ist genug geld da? zusammenzaehlen der kontoauszuege_zahlungseingang - $summe_eingang = 0; - $auftrag_gesamtsumme = 0; - $zahlungsweise = ''; - $vorabbezahltmarkieren = 0; - if(!empty($auftragarr)) { - $auftrag_gesamtsumme = $auftragarr['gesamtsumme'];// $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftrag' LIMIT 1"); - $zahlungsweise = $auftragarr['zahlungsweise'];// $this->app->DB->Select("SELECT zahlungsweise FROM auftrag WHERE id='$auftrag' LIMIT 1"); - $vorabbezahltmarkieren = $auftragarr['vorabbezahltmarkieren'];// $this->app->DB->Select("SELECT vorabbezahltmarkieren FROM auftrag WHERE id='$auftrag' LIMIT 1"); - } - //TODO zahlungsweisemodul - $zahlungsweise = strtolower($zahlungsweise); - - if($zahlungsweisenmodule = $this->app->DB->SelectArr("SELECT id, modul, verhalten FROM zahlungsweisen WHERE type = '".$this->app->DB->real_escape_string($zahlungsweise)."' AND - (projekt = '$projekt' OR projekt = 0) ORDER BY projekt = '$projekt' DESC LIMIT 1 - ")) - { - if( ( $zahlungsweisenmodule[0]['verhalten'] == 'vorkasse' && (($summe_eingang + $toleranz>=$auftrag_gesamtsumme) || $vorabbezahltmarkieren)) || ($zahlungsweisenmodule[0]['verhalten'] == 'lastschrift') || ($zahlungsweisenmodule[0]['verhalten'] == '') || ($zahlungsweisenmodule[0]['verhalten'] == 'rechnung') ) - { - $this->app->DB->Update("UPDATE auftrag SET vorkasse_ok='1' WHERE id='$auftrag' LIMIT 1"); - }elseif($summe_eingang > 0) - { - $this->app->DB->Update("UPDATE auftrag SET vorkasse_ok='2' WHERE id='$auftrag' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE auftrag SET vorkasse_ok='0' WHERE id='$auftrag' LIMIT 1"); - } - }else{ - if($summe_eingang+$toleranz>=$auftrag_gesamtsumme || ($zahlungsweise=="rechnung" || $zahlungsweise=="amazon" || $zahlungsweise=="amazon_bestellung" || $zahlungsweise=="secupay" - || $zahlungsweise=="nachnahme" || $zahlungsweise=="einzugsermaechtigung" || $zahlungsweise=="lastschrift" || $zahlungsweise=="bar") || $auftrag_gesamtsumme==0 || $vorabbezahltmarkieren=="1") - { - //TODO ok bei amazon und amazon_bestellung nur wenn transaktionsnummer vorhanden? - $this->app->DB->Update("UPDATE auftrag SET vorkasse_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - else if ($summe_eingang > 0) { - $this->app->DB->Update("UPDATE auftrag SET vorkasse_ok='2' WHERE id='$auftrag' LIMIT 1"); - } - else { - $this->app->DB->Update("UPDATE auftrag SET vorkasse_ok='0' WHERE id='$auftrag' LIMIT 1"); - } - } - //nachnahme gebuehr check!!!! - //$nachnahme = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag='$auftrag' AND nummer='200001' LIMIT 1"); - $nachnahme = $this->app->DB->Select("SELECT COUNT(ap.id) FROM auftrag_position ap, artikel a WHERE ap.auftrag='$auftrag' AND ap.artikel=a.id AND a.porto=1 AND ap.preis >= 0 - AND a.id=ap.artikel"); - - if($zahlungsweise=="nachnahme" && $nachnahme <2 && $projektnachnahmecheck==1){ - $this->app->DB->Update("UPDATE auftrag SET nachnahme_ok='0' WHERE id='$auftrag' LIMIT 1"); - } - else{ - $this->app->DB->Update("UPDATE auftrag SET nachnahme_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - - $lieferungtrotzsperre = $this->app->DB->Select("SELECT lieferungtrotzsperre FROM auftrag WHERE id='$auftrag' LIMIT 1"); - if($lieferungtrotzsperre==1){ - $this->app->DB->Update("UPDATE auftrag SET liefersperre_ok='1' WHERE id='$auftrag' LIMIT 1"); - } - } - - // @refactor Lieferschein Modul - public function LieferscheinCheck($lieferschein) - { - $obj = $this->LoadModul('lieferschein'); - if(!empty($obj) && method_exists($obj, 'LieferscheinCheck')){ - return $obj->LieferscheinCheck($lieferschein); - } - } - - - // @refactor Formater Komponente - public function EUR($betrag) - { - return number_format($betrag,2,',','.'); - } - - // @refactor Adresse Modul - public function KreditlimitCheck($adresse) - { - if($adresse <= 0) - { - return true; - } - $kreditlimit = $this->app->DB->Select("SELECT kreditlimit FROM adresse WHERE id='$adresse' LIMIT 1"); - if($kreditlimit <=0) { - return true; - } - // offene Rechnungen - $rechnungen = $this->SaldoAdresse($adresse); - - $auftraege = $this->SaldoAdresseAuftrag($adresse); - - return $kreditlimit >= ($rechnungen+$auftraege); - } - - // @refactor FormHelper Komponente - public function ReplaceBetrag($db,$value,$fromform = null) - { - // wenn ziel datenbank - if($db) - { - // wenn . und , vorhanden dann entferne punkt - $pos_punkt = strrpos($value, '.'); - $pos_komma = strrpos($value, ','); - if(($pos_punkt !== false) && ($pos_komma !== false)){ - if($pos_punkt < $pos_komma){ - $value = str_replace('.', '', $value); - }else{ - $value = str_replace(',', '', $value); - } - } - return str_replace(',','.',$value); - } - // wenn ziel formular - - //return $abkuerzung; - if($value == round($value, 2)) { - return number_format((float)$value,2,',',''); - } - - return rtrim(str_replace('.',',',$value),'0'); - } - - // @refactor FormHelper Komponente - function ReplaceAdresse($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(id,' ',name) FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - - $tmp = trim($value); - $rest = explode(" ",$tmp); - $rest = $rest[0]; - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE id='$rest' AND geloescht=0 LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - - return $abkuerzung; - } - - // @refactor FormHelper Komponente - function ReplaceMitarbeiter($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(mitarbeiternummer,' ',name) FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - - $tmp = trim($value); - $rest = explode(" ",$tmp); - $rest = $rest[0]; - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE mitarbeiternummer='$rest' AND mitarbeiternummer!='' AND geloescht=0 LIMIT 1"); - if($id <=0) $id=0; - - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - return $abkuerzung; - } - - // @refactor FormHelper Komponente - function ReplaceGruppenKategorien($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(id,' ',bezeichnung) as name FROM gruppen_kategorien WHERE id='$id' LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - // wenn nummer keine DB id ist! - $tmp = trim($value); - $rest = explode(" ",$tmp); - $rest = (int)$rest[0]; - $id = $this->app->DB->Select("SELECT id FROM gruppen_kategorien WHERE id='$rest' LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - return $abkuerzung; - } - - public function ReplacePreisgruppe($db,$value,$fromform) - { - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(g.kennziffer,' ',g.name) as name FROM gruppen g WHERE id='$id' LIMIT 1"); - }else{ - $abkuerzung =''; - } - if($id==0 || $id=='') { - $abkuerzung =''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - // wenn nummer keine DB id ist! - $tmp = trim($value); - $rest = explode(" ",$tmp); - $rest = $rest[0]; - $id = $this->app->DB->Select("SELECT id - FROM gruppen AS g - WHERE (CONCAT(g.kennziffer,' ',g.name)='$value' OR g.kennziffer = '$rest') AND - (g.name!='' OR g.kennziffer != '') AND g.art = 'preisgruppe' AND g.aktiv=1 - LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - return $abkuerzung; - } - - // @refactor FormHelper Komponente - function ReplaceArtikel($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) as name FROM artikel WHERE id='$id' AND geloescht=0 LIMIT 1"); - }else{ - $abkuerzung =''; - } - if($id==0 || $id=="") $abkuerzung =""; - } else { - $dbformat = 0; - $abkuerzung = $value; - // wenn nummer keine DB id ist! - $tmp = trim($value); - $rest = explode(" ",$tmp); - $rest = $rest[0]; - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$rest' AND nummer!='' AND geloescht=0 LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - return $abkuerzung; - } - - // @refactor Formater Komponente - function FormatMengeBetrag($value) - { - if(strpos($value,'.') !== false) - { - $pos = strpos($value,'.'); - $value = rtrim($value,'0'); - if(strlen($value) <= $pos + 2) { - $value .= '0'; - } - if(strlen($value) <= $pos + 2) { - $value .= '0'; - } - }else { - $value .= '.00'; - } - if($value[0] === '.') { - $value = '0'.$value; - } - return $value; - } - - // @refactor FormHelper Komponente - function ReplaceMengeBetrag($db,$value,$fromform) - { - $dbformat = 0; - if(strpos($value,'.') > 0) { - $dbformat = 1; - } - - // wenn ziel datenbank - if($db) - { - if($dbformat) { - return $value; - } - if($value!=''){ - return str_replace(',', '.', $value); - } - return ''; - } - // wenn ziel formular - - $value = str_replace('.',',',$this->FormatMengeBetrag($value)); - if($dbformat) { - if($value!='') { - return $value; - } - return ''; - } - return $value; - } - - // @refactor FormHelper Komponente - function ReplaceMenge($db,$value,$fromform) - { - $tcheck = str_replace(',','.',$value); - if($tcheck < 0) { - return 1; - } - - - $dbformat = 0; - if(strpos($value,'.') > 0) { - $dbformat = 1; - } - - // wenn ziel datenbank - if($db) - { - if($dbformat) { - return $value; - } - - if($value!=''){ - return str_replace(',', '.', $value); - } - - return ''; - } - // wenn ziel formular - if(strpos($value,'.') !== false) - { - $value = rtrim(rtrim($value,'0'),'.'); - if($value[0] === '.') { - $value = '0'.$value; - } - } - if($dbformat) { - if($value!='') { - return str_replace('.',',',$value); - } - return ''; - } - - return $value; - } - - // @refactor FormHelper Komponente - function ReplaceDecimal($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(strpos($value,'.') > 0) { - $dbformat = 1; - } - - // wenn ziel datenbank - if($db) - { - if($dbformat) { - return $value; - } - - if($value!=''){ - return str_replace(',', '.', $value); - } - return ''; - } - // wenn ziel formular - - if($dbformat) { - if($value!='') { - return $value; - } - return ''; - } - - return $value; - } - - - // @refactor FormHelper Komponente - function ReplaceZeit($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(strlen($value) > 5) $dbformat = 1; - - // wenn ziel datenbank - if($db) - { - if($dbformat) return $value; - else return $this->app->String->Convert($value,"%1:%2","%1:%2:00"); - } - // wenn ziel formular - else - { - if($dbformat) return $this->app->String->Convert($value,"%1:%2:%3","%1:%2"); - else return $value; - } - } - - // @refactor FormHelper Komponente - function ReplaceDatum($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(strpos($value,'-') > 0) $dbformat = 1; - - // wenn ziel datenbank - if($db) - { - if($dbformat) { - return $value; - } - - if($value!=''){ - return $this->app->String->Convert($value, "%1.%2.%3", "%3-%2-%1"); - } - return ''; - } - // wenn ziel formular - - if($dbformat) { - if($value!='') { - return $this->app->String->Convert($value,'%1-%2-%3','%3.%2.%1'); - } - return ''; - } - - return $value; - } - - - // @refactor FormHelper Komponente - function ReplacePreisanfrage($db,$value,$fromform) - { - return $this->ReplaceANABRELSGSBE("preisanfrage",$db,$value,$fromform); - } - - // @refactor FormHelper Komponente - function ReplaceAngebot($db,$value,$fromform) - { - return $this->ReplaceANABRELSGSBE("angebot",$db,$value,$fromform); - } - - // @refactor FormHelper Komponente - function ReplaceLieferschein($db,$value,$fromform) - { - return $this->ReplaceANABRELSGSBE("lieferschein",$db,$value,$fromform); - } - - // @refactor FormHelper Komponente - function ReplaceAuftrag($db,$value,$fromform) - { - return $this->ReplaceANABRELSGSBE("auftrag",$db,$value,$fromform); - } - - // @refactor FormHelper Komponente - function ReplaceRechnung($db,$value,$fromform) - { - return $this->ReplaceANABRELSGSBE("rechnung",$db,$value,$fromform); - } - - function ReplaceRetoure($db,$value,$fromform) - { - return $this->ReplaceANABRELSGSBE('retoure',$db,$value,$fromform); - } - - // @refactor FormHelper Komponente - function ReplaceBestellung($db,$value,$fromform) - { - return $this->ReplaceANABRELSGSBE("bestellung",$db,$value,$fromform); - } - - // @refactor FormHelper Komponente - function ReplaceANABRELSGSBE($table,$db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT belegnr as name FROM $table WHERE id='$id' LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - $tmp = explode(' ', trim($value)); - $tmp = reset($tmp); - //$id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$rest' AND geloescht=0 LIMIT 1"); - $id = $this->app->DB->Select("SELECT id FROM $table WHERE belegnr='$tmp' AND belegnr!='' LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - - } - - // @refactor FormHelper Komponente - function ReplaceLagerPlatz($db, $value, $fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id ='$id' LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - $id = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung LIKE '$value' AND kurzbezeichnung!='' LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - - return $abkuerzung; - } - - // @refactor FormHelper Komponente - function ReplaceLager($db, $value, $fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id ='$id' LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - $id = $this->app->DB->Select("SELECT id FROM lager WHERE bezeichnung LIKE '$value' AND bezeichnung!='' LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - // @refactor FormHelper Komponente - function ReplaceKasse($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT bezeichnung FROM konten WHERE id ='$id' LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - $id = $this->app->DB->Select("SELECT id FROM konten WHERE bezeichnung LIKE '$value' AND bezeichnung!='' LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - // @refactor FormHelper Komponente - function ReplaceKostenstelle($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(nummer,' ',beschreibung) FROM kostenstelle WHERE nummer='$id' LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - $id = $this->app->DB->Select("SELECT nummer FROM kostenstelle WHERE CONCAT(nummer,' ',beschreibung)='$value' AND CONCAT(nummer,' ',beschreibung)!='' LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - // @refactor FormHelper Komponente - function ReplaceGruppe($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(name,' ',kennziffer) as name FROM gruppen WHERE id='$id' LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - $id = $this->app->DB->Select("SELECT id FROM gruppen WHERE CONCAT(name,' ',kennziffer)='$value' OR (kennziffer='$value' AND kennziffer!='') LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - // @refactor FormHelper Komponente - function ReplaceWiedervorlageStages($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(id,' ',kurzbezeichnung,' (',name,')') FROM wiedervorlage_stages WHERE id='$id' LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $tmp = trim($value); - $rest = explode(" ",$tmp); - $rest = $rest[0]; - - $id = $this->app->DB->Select("SELECT id FROM wiedervorlage_stages WHERE id='$rest' LIMIT 1"); - if($value=='') $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - // @refactor FormHelper Komponente - function ReplaceArbeitspaket($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(a.id,' ',p.abkuerzung,' ',a.aufgabe) FROM arbeitspaket a LEFT JOIN projekt p ON a.projekt=p.id WHERE a.id='$id' LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $tmp = trim($value); - $rest = explode(" ",$tmp); - $rest = $rest[0]; - - $id = $this->app->DB->Select("SELECT id FROM arbeitspaket WHERE id='$rest' LIMIT 1"); - if($value=='') $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - // @refactor FormHelper Komponente - function ReplaceProjektNameDyn($db, $value, $fromform) - { - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(abkuerzung,' ',name) FROM projekt WHERE id='$id' LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - $id = $this->app->DB->Select("SELECT id FROM projekt WHERE CONCAT(abkuerzung,' ',name)='$value' AND abkuerzung!='' LIMIT 1"); - if($id != '') - { - $value = explode(' ', $value); - $value = reset($value); - $id = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$value' AND abkuerzung!='' LIMIT 1"); - } - if($value=='') $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - - return $abkuerzung; - } - - // @refactor FormHelper Komponente - function ReplaceProjektName($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(abkuerzung,' ',name) FROM projekt WHERE id='$id' LIMIT 1"); - }else{ - $abkuerzung=''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - $id = $this->app->DB->Select("SELECT id FROM projekt WHERE CONCAT(abkuerzung,' ',name)='$value' AND abkuerzung!='' LIMIT 1"); - if($value=='') $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - // @refactor FormHelper Komponente - function ReplaceProjekt($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$id' LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $abkuerzung = $value; - $id = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$value' AND abkuerzung!='' LIMIT 1"); - if($value=='') $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - // @refactor FormHelper Komponente - function ReplaceLieferantennummer($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { // wenn es eine id ist! - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT lieferantennummer as name FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); - }else{ - $abkuerzung = ''; - } - if($id==0 || $id=="") $abkuerzung =""; - } else { - $rmodule = $this->app->Secure->GetGET("module"); - $raction = $this->app->Secure->GetGET("action"); - $rid = (int)$this->app->Secure->GetGET("id"); - $pruefemodule = array('artikel','auftrag','angebot','rechnung','lieferschein','gutschrift','bestellung'); - $filter_projekt = false; - if($raction == 'edit' && $rid && in_array($rmodule, $pruefemodule)) - { - $projekt = $this->app->DB->Select("SELECT projekt FROM $rmodule WHERE id = '$rid' LIMIT 1"); - if($projekt) - { - $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id = '$projekt' LIMIT 1"); - //if($eigenernummernkreis) - $filter_projekt = $projekt; - } - } - $abkuerzung = $value; - $tmp = trim($value); - $rest = explode(" ",$tmp); - $rest = $rest[0]; - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$rest' AND lieferantennummer!='' AND geloescht=0 ORDER BY ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - // @refactor Formater Komponente - function FirstTillSpace($string) - { - $tmp = trim($string); - $rest = explode(" ",$tmp); - return $rest[0]; - } - - // @refactor FormHelper Komponente - function ReplaceKundennummer($db,$value,$fromform) - { - - - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { // wenn es eine id ist! - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT kundennummer as name FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $rmodule = $this->app->Secure->GetGET("module"); - $raction = $this->app->Secure->GetGET("action"); - $rid = (int)$this->app->Secure->GetGET("id"); - $pruefemodule = array('artikel','auftrag','angebot','rechnung','lieferschein','gutschrift','bestellung','produktion'); - $filter_projekt = 0; - if($raction == 'edit' && $rid && in_array($rmodule, $pruefemodule)) - { - $projekt = $this->app->DB->Select("SELECT projekt FROM $rmodule WHERE id = '$rid' LIMIT 1"); - if($projekt) - { - $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id = '$projekt' LIMIT 1"); - //if($eigenernummernkreis) - $filter_projekt = $projekt; - } - } - $abkuerzung = $value; - $tmp = trim($value); - //$rest = substr($tmp, 0, 5); - $rest = explode(" ",$tmp); - $rest = $rest[0]; - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$rest' AND kundennummer!='' AND geloescht=0 ORDER BY ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - // @refactor FormHelper Komponente - function ReplaceKunde($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(kundennummer,' ',name) as name FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $rmodule = $this->app->Secure->GetGET("module"); - $raction = $this->app->Secure->GetGET("action"); - $rid = (int)$this->app->Secure->GetGET("id"); - $pruefemodule = array('artikel','auftrag','angebot','rechnung','lieferschein','gutschrift','bestellung'); - $filter_projekt = false; - if($raction == 'edit' && $rid && in_array($rmodule, $pruefemodule)) - { - $projekt = $this->app->DB->Select("SELECT projekt FROM $rmodule WHERE id = '$rid' LIMIT 1"); - if($projekt) - { - $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id = '$projekt' LIMIT 1"); - //if($eigenernummernkreis) - $filter_projekt = $projekt; - } - } - $dbformat = 0; - $abkuerzung = $value; - $tmp = trim($value); - $rest = explode(" ",$tmp); - $rest = $rest[0]; - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$rest' AND kundennummer!='' AND geloescht=0 ORDER BY ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - // @refactor FormHelper Komponente - function ReplaceSteuersatz($db,$value,$fromform) - { - if($db) - { - if($value === "" || $value === null)return -1; - return str_replace(',','.', $value); - }else{ - if($value < 0)return ""; - return str_replace('.',',', $value);; - } - } - - // @refactor FormHelper Komponente - function ReplaceSteuergruppe($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT bezeichnung FROM steuerregelngruppe WHERE id='$id' LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $dbformat = 0; - $value = $this->app->DB->real_escape_string($value); - $id = $this->app->DB->Select("SELECT id FROM steuerregelngruppe WHERE bezeichnung = '$value' ORDER BY aktiv = 1 DESC LIMIT 1"); - if($id <=0) $id=0; - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - // @refactor FormHelper Komponente - function ReplaceLieferant($db,$value,$fromform) - { - //value muss hier vom format ueberprueft werden - $dbformat = 0; - if(!$fromform) { - $dbformat = 1; - $id = $value; - if($id > 0){ - $abkuerzung = $this->app->DB->Select("SELECT CONCAT(lieferantennummer,' ',name) as name FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); - }else{ - $abkuerzung = ''; - } - } else { - $rmodule = $this->app->Secure->GetGET("module"); - $raction = $this->app->Secure->GetGET("action"); - $rid = (int)$this->app->Secure->GetGET("id"); - $pruefemodule = array('artikel','auftrag','angebot','rechnung','lieferschein','gutschrift','bestellung'); - $filter_projekt = false; - if($raction == 'edit' && $rid && in_array($rmodule, $pruefemodule)) - { - $projekt = $this->app->DB->Select("SELECT projekt FROM $rmodule WHERE id = '$rid' LIMIT 1"); - if($projekt) - { - $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id = '$projekt' LIMIT 1"); - //if($eigenernummernkreis) - $filter_projekt = $projekt; - } - } - $dbformat = 0; - $abkuerzung = $value; - $tmp = trim($value); - $rest = explode(" ",$tmp); - $rest = $rest[0]; - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$rest' AND lieferantennummer!='' AND geloescht=0 ORDER BY ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1"); - if($id <=0) $id=0; - - } - - // wenn ziel datenbank - if($db) - { - return $id; - } - // wenn ziel formular - else - { - return $abkuerzung; - } - } - - /**@depreacated */ - function CheckSamePage() - { - $id = $this->app->Secure->GetGET("id"); - $check_id = strstr($_SERVER['HTTP_REFERER'], 'id='); - if($check_id!="id=".$id) - return true; - else - return false; - } - - /** - * @depreacated - * @refactor Artikel Modul - */ - function SeitenSperrAuswahl($ueberschrift,$meldung) - { - /* $this->app->Tpl->Set(SPERRMELDUNG, '$("a#inline").fancybox({ - \'modal\': true, - \'autoDimensions\': false, - \'width\': 500, - \'height\': 300 - }); - $(\'#inline\').click();'); - - $this->app->Tpl->Set(SPERRMELDUNGNACHRICHT,' -

'.$ueberschrift.'


von Benedikt Sauter

'.$meldung.'
-

Jetzt Zurück zum letzten Schritt |  - Bitte Fenster dennoch freigeben
'); - */ - - $this->app->Tpl->Set('SPERRMELDUNG', ' - // a workaround for a flaw in the demo system (http://dev.jqueryui.com/ticket/4375), ignore! - $( "#dialog:ui-dialog" ).dialog( "destroy" ); - - $( "#dialog-message" ).dialog({ -modal: true, -buttons: { -Ok: function() { -$( this ).dialog( "close" ); -} -} -}); - '); - - - $this->app->Tpl->Set('SPERRMELDUNGNACHRICHT',' -
-

- '.$meldung.' -

-
- '); - } - -/**@depreacated */ -function SeitenSperrInfo($meldung) -{ - $this->app->Tpl->Set('SPERRMELDUNG', '$("a#inline").fancybox({ - \'hideOnContentClick\': true, - \'autoDimensions\': false, - \'width\': 500, - \'height\': 300 - }); - $(\'#inline\').click();'); - - $this->app->Tpl->Set('SPERRMELDUNGNACHRICHT',' -

Infomeldung




'.$meldung.'
'); - -} - -// @refactor Artikel Modul -function AddArtikel($felder) -{ - $this->app->DB->Insert("INSERT INTO artikel (id) VALUES ('')"); - $id = $this->app->DB->GetInsertID(); - if($felder['firma']<=0) - $felder['firma'] = $this->app->DB->Select("SELECT MAX(f.id) FROM firma f INNER JOIN firmendaten fd ON f.id = fd.firma LIMIT 1"); - if($felder['firma']<=0) - $felder['firma'] = $this->app->DB->Select("SELECT MAX(firma) FROM firmendaten LIMIT 1"); - - if($felder['projekt']<=0) - $felder['projekt'] = $this->app->DB->Select("SELECT standardprojekt FROM firma WHERE id='".$felder['firma']."' LIMIT 1"); - - if($felder['firma']<=0) $felder['firma']=1; - if($felder['projekt']<=0) $felder['projekt']=1; - - // so starten, dass alle uebertragen werden - if($felder['cache_lagerplatzinhaltmenge']<=0) $felder['cache_lagerplatzinhaltmenge']=-999; - - if(!empty($felder['anhang'])) - { - if(!is_array($felder['anhang'])){ - $data = $felder['anhang']; - $felder['anhang'] = []; - $felder['anhang'][] = ['datei' => $data, 'endung' => '', 'name' =>'']; - } - - foreach ($felder['anhang'] as $anhang){ - $dateiname = trim($anhang['name']); - if(empty($dateiname)){ - $dateiname = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id ='$id'"); - } - $fileid = $this->addBase64Bild($anhang['datei'],$dateiname,$anhang['endung']); - if(!empty($fileid)){ - $this->AddDateiStichwort($fileid, 'Bild', 'artikel', $id); - } - - } - unset($felder['anhang']); - } - - - $this->app->DB->UpdateArr("artikel",$id,"id",$felder); - - - return $id; -} - -public function addBase64Bild($base64datei,$name = '',$endung = '',$titel='Anhang'){ - $decodedData = @base64_decode($base64datei); - $tmpdatei = $this->app->erp->GetTMP().'anhangtmp'.microtime(true); - file_put_contents($tmpdatei ,$decodedData); - - if(empty($endung)){ - $mimetype = explode('/',mime_content_type($tmpdatei)); - switch ($mimetype[0]){ - case 'image': - if(strpos($mimetype[1],'jpg') !== false || strpos($mimetype[1],'jpeg') !== false){ - $endung = 'jpg'; - } - if(strpos($mimetype[1],'png') !== false){ - $endung = 'png'; - } - if(strpos($mimetype[1],'bmp') !== false){ - $endung = 'bmp'; - } - break; - case 'text': - if(strpos($mimetype[1],'plain') !== false){ - $endung = 'txt'; - } - if(strpos($mimetype[1],'php') !== false){ - $endung = 'php'; - } - break; - default: - $endung = 'pdf'; - break; - } - } - - - $datei = $this->app->Conf->WFuserdata.'/'.md5($name.'.'.$endung.microtime(true)); - move_uploaded_file($tmpdatei,$datei); - - $fileid = 0; - if(file_put_contents($datei,$decodedData)) - { - if(@is_file($datei) && @filesize($datei)) - { - $fileid = $this->CreateDatei($name.'.'.$endung, $titel, '', '', $datei, $this->app->User->GetName()); - unlink($datei); - } - } - - return $fileid; -} - -// @refactor API Modul -function SetzteSperreAPIArtikelPreise($artikel) -{ - $this->app->DB->Update("UPDATE verkaufspreise SET apichange=0 WHERE artikel=$artikel"); - //$this->app->DB->Update("UPDATE einkaufspreise SET apichange=0 WHERE artikel=$artikel"); -} - -// @refactor API Modul -function EntferneSperreAPIArtikelPreise($artikel) -{ - $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE apichange!=1 AND artikel=$artikel"); - //$this->app->DB->Update("UPDATE einkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE apichange!=1 AND artikel=$artikel"); -} - -// @refactor Artikel Modul -function AddVerkaufspreisGruppe($artikel,$abmenge,$gruppe,$preis,$waehrung="EUR",$kundenartikelnummer="", $gueltig_ab = null, $interner_kommentar = null, $gueltig_bis = null) -{ - if($abmenge<=0)$abmenge=1; - - $gruppe = $this->app->DB->Select("SELECT id FROM gruppen WHERE id='$gruppe' LIMIT 1"); - if($gruppe <=0) - return; - $gueltigabwhere = 'curdate()'; - if($gueltig_ab)$gueltigabwhere = "'$gueltig_ab'"; - if($gruppe > 0) - $check = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE ab_menge='".$abmenge."' AND gruppe='".$gruppe."' AND artikel='$artikel' AND art='Gruppe' - AND (gueltig_bis='0000-00-00' OR gueltig_bis >= $gueltigabwhere) AND geloescht!='1' AND adresse <= 0 LIMIT 1"); - else - $check = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE ab_menge='".$abmenge."' AND (gruppe='' OR gruppe='0') AND artikel='$artikel' AND art='Gruppe' - AND (gueltig_bis='0000-00-00' OR gueltig_bis >= $gueltigabwhere) AND geloescht!='1' AND adresse <= 0 LIMIT 1"); - - // soll man preis als ungueltig markieren? - if($check > 0) - { - // noch nie dagewesen jetzt anlegen - // ist der preis anders? - $preis_alt = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$check' LIMIT 1"); - if($preis!=$preis_alt) - { - $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis=DATE_SUB($gueltigabwhere,INTERVAL 1 DAY),apichange=1 WHERE id='$check' LIMIT 1"); - $this->app->DB->Insert("INSERT INTO verkaufspreise (id,gruppe,artikel,angelegt_am, - ab_menge,waehrung,preis,firma,kundenartikelnummer,adresse,art,apichange,logdatei) - VALUES ('','$gruppe','$artikel',NOW(),'$abmenge','$waehrung','$preis','".$this->app->User->GetFirma()."','".$kundenartikelnummer."',0,'Gruppe',1,now())"); - $insid = $this->app->DB->GetInsertID(); - if($waehrung !== 'EUR' && $waehrung !== ''){ - $kurs = $this->app->erp->GetWaehrungUmrechnungskurs('EUR', $waehrung, true); - }else{ - $kurs = -1; - $kursdatum = 'NULL'; - } - if($kurs !== false){ - if($kurs !== -1){ - $kursdatum = "'" . date('Y-m-d') . "'"; - } - $this->app->DB->Update("UPDATE verkaufspreise SET kurs = $kurs, kursdatum = $kursdatum WHERE id = $insid LIMIT 1"); - } - if($gueltig_ab)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_ab = '$gueltig_ab' WHERE id = '$insid' LIMIT 1"); - if($interner_kommentar)$this->app->DB->Update("UPDATE verkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$insid' LIMIT 1"); - } else { - // nur attribute update - if($kundenartikelnummer!="") - { - $this->app->DB->Update("UPDATE verkaufspreise SET kundenartikelnummer='$kundenartikelnummer', apichange=1 WHERE id='$check' LIMIT 1"); - } else { - $this->app->DB->Update("UPDATE verkaufspreise SET apichange=1 WHERE id='$check' LIMIT 1"); - } - if($interner_kommentar)$this->app->DB->Update("UPDATE verkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$check' LIMIT 1"); - } -} else { - $this->app->DB->Insert("INSERT INTO verkaufspreise (id,gruppe,artikel,angelegt_am, - ab_menge,waehrung,preis,firma,kundenartikelnummer,adresse,art,apichange) - VALUES ('','$gruppe','$artikel',NOW(),'$abmenge','$waehrung','$preis','".$this->app->User->GetFirma()."','".$kundenartikelnummer."',0,'Gruppe',1)"); - $insid = $this->app->DB->GetInsertID(); - if($waehrung !== 'EUR' && $waehrung !== ''){ - $kurs = $this->app->erp->GetWaehrungUmrechnungskurs('EUR', $waehrung, true); - }else{ - $kurs = false; - } - if($kurs !== false){ - if($kurs !== -1){ - $kursdatum = "'" . date('Y-m-d') . "'"; - } - $this->app->DB->Update("UPDATE verkaufspreise SET kurs = $kurs, kursdatum = $kursdatum WHERE id = $insid LIMIT 1"); - } - if($gueltig_ab)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_ab = '".$this->app->DB->real_escape_string($gueltig_ab)."' WHERE id = '$insid' LIMIT 1"); - if($gueltig_bis)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis = '".$this->app->DB->real_escape_string($gueltig_bis)."' WHERE id = '$insid' LIMIT 1"); - if($interner_kommentar)$this->app->DB->Update("UPDATE verkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$insid' LIMIT 1"); - } -} - -// @refactor Artikel Modul -function AddVerkaufspreis($artikel,$abmenge,$adresse,$preis,$waehrung="EUR",$kundenartikelnummer="", $gruppe = null, $gueltig_ab = null, $interner_kommentar = null, $gueltig_bis = null) -{ - if($adresse==="") - return false; - - if($abmenge<=0)$abmenge=1; - - if($adresse > 0) - { - $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE id='$adresse' LIMIT 1"); - if($adresse <=0) - return false; - } - - if($waehrung == "EUR") - { - $where = " AND (waehrung = '' OR waehrung = 'EUR') "; - }else{ - $where = " AND waehrung = '".$waehrung."' "; - } - - $gueltigabwhere = 'curdate()'; - if($gueltig_ab)$gueltigabwhere = "'$gueltig_ab'"; - - $preis = round($preis,8); - - if($adresse > 0) - $check = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE ab_menge=".$abmenge." ".$where." AND adresse=".$adresse." AND artikel=$artikel AND art='Kunde' - AND (gueltig_bis='0000-00-00' OR gueltig_bis >= $gueltigabwhere) AND (gueltig_ab='0000-00-00' OR gueltig_ab <= $gueltigabwhere) AND geloescht!='1' ".($gruppe?" AND gruppe = '$gruppe' ":'')." LIMIT 1"); - else - $check = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE ab_menge=".$abmenge." ".$where." AND (adresse='' OR adresse=0) AND artikel=$artikel AND art='Kunde' - AND (gueltig_bis='0000-00-00' OR gueltig_bis >= $gueltigabwhere) AND (gueltig_ab='0000-00-00' OR gueltig_ab <= $gueltigabwhere) AND geloescht!=1 ".($gruppe?" AND gruppe = '$gruppe' ":'')." LIMIT 1"); - -// soll man preis als ungueltig markieren? -if($check > 0) -{ - // noch nie dagewesen jetzt anlegen - // ist der preis anders? - $preis_alt = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$check' LIMIT 1"); - if($preis!=$preis_alt) - { - $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis=DATE_SUB($gueltigabwhere,INTERVAL 1 DAY),apichange=1 WHERE id='$check' LIMIT 1"); - $this->app->DB->Insert("INSERT INTO verkaufspreise (id,adresse,artikel,angelegt_am, - ab_menge,waehrung,preis,firma,kundenartikelnummer,art,apichange,logdatei) - VALUES ('','$adresse','$artikel',NOW(),'$abmenge','$waehrung','$preis','1','".$kundenartikelnummer."','Kunde',1,now())"); - - $insid = $this->app->DB->GetInsertID(); - if($waehrung !== 'EUR' && $waehrung !== ''){ - $kurs = $this->app->erp->GetWaehrungUmrechnungskurs('EUR', $waehrung, true); - }else{ - $kurs = -1; - $kursdatum = 'NULL'; - } - if($kurs !== false){ - if($kurs !== -1){ - $kursdatum = "'" . date('Y-m-d') . "'"; - } - $this->app->DB->Update("UPDATE verkaufspreise SET kurs = $kurs, kursdatum = $kursdatum WHERE id = $insid LIMIT 1"); - } - - if($gueltig_ab)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_ab = '$gueltig_ab' WHERE id = '$insid' LIMIT 1"); - $this->ObjektProtokoll('verkaufspreise',$insid,'AddVerkaufspreis',"Verkaufspreis von $preis_alt nach $preis ge&auuml;ndert"); - if($gruppe) - { - $this->app->DB->Update("UPDATE verkaufspreise set gruppe = '".$gruppe."' where id = '".$insid."'"); - } - if($gueltig_bis)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis = '".$this->app->DB->real_escape_string($gueltig_bis)."' WHERE id = '$insid' LIMIT 1"); - if($interner_kommentar)$this->app->DB->Update("UPDATE verkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$insid' LIMIT 1"); - return $insid; - } else { - // nur attribute update - if($kundenartikelnummer!="") - { - $this->app->DB->Update("UPDATE verkaufspreise SET kundenartikelnummer='$kundenartikelnummer',apichange=1 WHERE id='$check' LIMIT 1"); - $this->ObjektProtokoll('verkaufspreise',$check,'AddVerkaufspreis',"Kundenartikelnummer ge&auuml;ndert"); - } else { - $this->app->DB->Update("UPDATE verkaufspreise SET apichange=1 WHERE id='$check' LIMIT 1"); - } - if($interner_kommentar)$this->app->DB->Update("UPDATE verkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$check' LIMIT 1"); - } - return $check; -} else { - $this->app->DB->Insert("INSERT INTO verkaufspreise (id,adresse,artikel,angelegt_am, - ab_menge,waehrung,preis,firma,kundenartikelnummer,art,apichange,logdatei) - VALUES ('','$adresse','$artikel',NOW(),'$abmenge','$waehrung','$preis','1','".$kundenartikelnummer."','Kunde',1,now())"); - $insid = $this->app->DB->GetInsertID(); - if($waehrung !== 'EUR' && $waehrung !== ''){ - $kurs = $this->app->erp->GetWaehrungUmrechnungskurs('EUR', $waehrung, true); - }else{ - $kurs = false; - } - if($kurs !== false){ - $kursdatum = "'" . date('Y-m-d') . "'"; - $this->app->DB->Update("UPDATE verkaufspreise SET kurs = $kurs, kursdatum = $kursdatum WHERE id = $insid LIMIT 1"); - } - if($gueltig_ab)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_ab = '".$this->app->DB->real_escape_string($gueltig_ab)."' WHERE id = '$insid' LIMIT 1"); - if($gueltig_bis)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis = '".$this->app->DB->real_escape_string($gueltig_bis)."' WHERE id = '$insid' LIMIT 1"); - if($gruppe) - { - $this->app->DB->Update("UPDATE verkaufspreise set gruppe = '".$gruppe."' where id = '".$insid."'"); - } - if($interner_kommentar)$this->app->DB->Update("UPDATE verkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$insid' LIMIT 1"); - $this->ObjektProtokoll('verkaufspreise',$insid,'AddVerkaufspreis',"Verkaufspreis angelegt"); - return $insid; - } -} - -// @refactor Artikel Modul -function AddEinkaufspreis($artikel,$abmenge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung="",$vpe="", $testebestellnummer = false, $interner_kommentar = null) -{ - if($abmenge<=0) $abmenge=1; - - if($waehrung=="") $waehrung="EUR"; - if($waehrung == "EUR") - { - $where = " AND (waehrung = '' OR waehrung = 'EUR') "; - }else{ - $where = " AND waehrung = '".$waehrung."' "; - } - - if($testebestellnummer && $bestellnummer)$where = " AND bestellnummer = '".addslashes($bestellnummer)."' "; - $check = $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE ab_menge='".$abmenge."' AND adresse='".$adresse."' AND artikel='$artikel' - AND (gueltig_bis='0000-00-00' OR gueltig_bis >= NOW()) AND geloescht!='1' ".$where." LIMIT 1"); - // soll man preis als ungueltig markieren? - if($check > 0) - { - // noch nie dagewesen jetzt anlegen - // ist der preis anders? - $preis_alt = $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE id='$check' LIMIT 1"); - if($preis!=$preis_alt) - { - $this->app->DB->Update("UPDATE einkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY),apichange=1 WHERE id='$check' LIMIT 1"); - //$this->AddEinkaufspreis($artikel,$abmenge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); - $this->app->DB->Insert("INSERT INTO einkaufspreise (id,adresse,artikel,bestellnummer,bezeichnunglieferant, preis_anfrage_vom, - ab_menge,waehrung,preis,firma,vpe,apichange,logdatei) VALUES - ('','$adresse','$artikel','$bestellnummer','$bezeichnunglieferant',NOW(),'$abmenge','$waehrung','$preis','".$this->app->User->GetFirma()."','$vpe',1, now())"); - if($interner_kommentar)$this->app->DB->Update("UPDATE einkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$insid' LIMIT 1"); - $insid = $this->app->DB->GetInsertID(); - $this->ObjektProtokoll('einkaufspreise',$insid,'AddEinkaufspreis',"Einkaufspreis von $preis_alt nach $preis ge&auuml;ndert"); - return $insid; - } else { - $this->app->DB->Update("UPDATE einkaufspreise SET bestellnummer='$bestellnummer', bezeichnunglieferant='$bezeichnunglieferant',apichange=1, logdatei = now() - WHERE id='$check' LIMIT 1"); - $this->ObjektProtokoll('einkaufspreise',$check,'AddEinkaufspreis',"Einkaufspreis ge&auuml;ndert"); - if($interner_kommentar)$this->app->DB->Update("UPDATE einkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$check' LIMIT 1"); - return $check; - } - } else { - //$this->AddEinkaufspreis($artikel,$abmenge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); - $this->app->DB->Insert("INSERT INTO einkaufspreise (id,adresse,artikel,bestellnummer,bezeichnunglieferant, preis_anfrage_vom, - ab_menge,waehrung,preis,firma,vpe,apichange, logdatei) VALUES - ('','$adresse','$artikel','$bestellnummer','$bezeichnunglieferant',NOW(),'$abmenge','$waehrung','$preis','".$this->app->User->GetFirma()."','$vpe',1,now())"); - $insid = $this->app->DB->GetInsertID(); - if($interner_kommentar)$this->app->DB->Update("UPDATE einkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$insid' LIMIT 1"); - $this->ObjektProtokoll('einkaufspreise',$insid,'AddEinkaufspreis',"Einkaufspreis angelegt"); - return $insid; - - } - -} - -// @refactor Artikel Modul -function EinkaufspreisBetrag($artikel,$menge,$lieferant,$projekt='') -{ - if(!$menge) { - $menge = 1; - } - $id = $artikel; - $adresse = $lieferant; - - $ek = $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND ab_menge <= $menge order by ab_menge desc LIMIT 1"); - if($ek) { - return $ek; - } - - return $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') order by ab_menge ASC LIMIT 1"); -} - -// @refactor Artikel Modul -function Einkaufspreis($artikel,$menge,$lieferant,$projekt="") -{ - $id = $artikel; - $adresse = $lieferant; - - $ek = $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND ab_menge <= $menge order by ab_menge desc LIMIT 1"); - if($ek) { - return $ek; - } - return $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') order by ab_menge LIMIT 1"); -} - - -// @refactor Bestellung Modul -function ArtikelBestellung($artikel, $format = false, $ohnebestellauftrag = false) -{ - $summe_in_bestellung = $this->app->DB->Select("SELECT ".($format?"trim(SUM(bp.menge-bp.geliefert))+0":"SUM(bp.menge-bp.geliefert)")." - FROM bestellung_position bp - LEFT JOIN bestellung b ON b.id=bp.bestellung - WHERE bp.artikel='$artikel' ".($ohnebestellauftrag?" AND bp.auftrag_position_id = 0 ":"")." AND bp.geliefert < bp.menge AND (bp.abgeschlossen IS NULL OR bp.abgeschlossen!=1) AND b.status!='abgeschlossen' AND b.status!='freigegeben' AND b.status!='angelegt' AND b.status!='storniert'"); - - if($summe_in_bestellung <= 0) - return 0; - - return $summe_in_bestellung; -} - -// @refactor Bestellung Modul -function ArtikelBestellungNichtVersendet($artikel, $format = false, $ohnebestellauftrag = false) -{ - //$summe_in_bestellung = $this->app->DB->Select("SELECT SUM(bp.menge-bp.geliefert) FROM bestellung_position bp WHERE bp.artikel='$artikel' AND bp.geliefert < bp.menge AND bp.abgeschlossen!='1'"); - - $summe_in_bestellung = $this->app->DB->Select("SELECT ".($format?"trim(SUM(bp.menge-bp.geliefert))+0":"SUM(bp.menge-bp.geliefert)")." - FROM bestellung_position bp - LEFT JOIN bestellung b ON b.id=bp.bestellung - WHERE bp.artikel='$artikel' ".($ohnebestellauftrag?" AND bp.auftrag_position_id = 0 ":"")." AND bp.geliefert < bp.menge AND (bp.abgeschlossen IS NULL OR bp.abgeschlossen!=1) AND (b.status='freigegeben' OR b.status='angelegt')"); - - - if($summe_in_bestellung <= 0) - return 0; - - return $summe_in_bestellung; -} - - -// @refactor Bestellung Modul -function ArtikelVerkaufGesamt($artikel, $format = false) -{ - if($format) - { - $summe_im_auftrag = $this->app->DB->Select("SELECT trim(SUM(menge))+0 FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$artikel' AND a.status='abgeschlossen'"); - if($summe_im_auftrag<=0) $summe_im_auftrag=0; - return $summe_im_auftrag; - } - $summe_im_auftrag = $this->app->DB->Select("SELECT SUM(menge) FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$artikel' AND a.status='abgeschlossen'"); - if($summe_im_auftrag<=0) $summe_im_auftrag=0; - return $summe_im_auftrag; -} - -// @refactor Bestellung Modul -function ReserviertAuftrag($artikel, $von = null, $bis = null, $ohnebestellung = false) -{ - return $this->app->DB->Select("SELECT trim(SUM(ifnull(r.menge,0)))+0 - FROM lager_reserviert r INNER JOIN - (SELECT ap.auftrag, ap.artikel, sum(ap.menge) as menge - FROM auftrag_position ap - ".($ohnebestellung?" LEFT JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id ":"")." - INNER JOIN auftrag a ON a.id=ap.auftrag - WHERE ap.artikel='$artikel' ".($ohnebestellung?" AND isnull(bp.id) ":"")." AND a.status='freigegeben' ".($auftrag?" AND ap.auftrag = '$auftrag' ":"")."" - .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") - .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' - ":"")." GROUP BY ap.auftrag, ap.artikel) ab ON r.parameter = ab.auftrag AND r.artikel = '$artikel' AND r.objekt = 'auftrag'" - ); -} - -// @refactor Bestellung Modul -function ReserviertLieferschein($artikel, $von = null, $bis = null) -{ - return $this->app->DB->Select("SELECT trim(SUM(ifnull(r.menge,0)))+0 - FROM `lager_reserviert` AS `r` INNER JOIN - (SELECT lp.lieferschein, lp.artikel, sum(lp.menge) as `menge` - FROM `lieferschein_position` AS `lp` - INNER JOIN `lieferschein` AS `l` ON l.id = lp.lieferschein - WHERE lp.artikel = '$artikel' AND l.status = 'freigegeben'" - .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") - .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' - ":"")." GROUP BY lp.lieferschein, lp.artikel) AS `lb` ON r.parameter = lb.lieferschein AND r.artikel = '$artikel' AND r.objekt = 'lieferschein'" - ); -} - -// @refactor Bestellung Modul -function ReserviertAuftragLiefertermin($artikel, $von = null, $bis = null, $ohnebestellung = false) -{ - return $this->app->DB->Select("SELECT trim(SUM(ifnull(r.menge,0)))+0 - FROM lager_reserviert r INNER JOIN - (SELECT ap.auftrag, ap.artikel, sum(ap.menge) as menge - FROM auftrag_position ap - ".($ohnebestellung?" LEFT JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id ":"")." - INNER JOIN auftrag a ON a.id=ap.auftrag - WHERE ap.artikel='$artikel' ".($ohnebestellung?" AND isnull(bp.id) ":"")." AND a.status='freigegeben' ".($auftrag?" AND ap.auftrag = '$auftrag' ":"")."" - .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") - .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' - AND (ifnull(ap.lieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(ap.lieferdatum,'0000-00-00') <= '$bis') - AND (ifnull(a.tatsaechlicheslieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(a.tatsaechlicheslieferdatum,'0000-00-00') <= '$bis') - AND (ifnull(a.lieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(a.lieferdatum,'0000-00-00') <= '$bis') - - ":"")." GROUP BY ap.auftrag, ap.artikel) ab ON r.parameter = ab.auftrag AND r.artikel = '$artikel' AND r.objekt = 'auftrag'" - ); -} - -// @refactor Bestellung Modul -function ArtikelImAuftragLiefertermin($artikel, $format = false, $von = null, $bis = null, $auftrag = 0, $ohnebestellung = false) -{ - return $this->app->DB->Select("SELECT ".($format?"trim(SUM(menge))+0":"sum(menge)")." - FROM auftrag_position ap - LEFT JOIN auftrag a ON a.id=ap.auftrag - ".($ohnebestellung?" LEFT JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id ":"")." - WHERE ap.artikel='$artikel' ".($ohnebestellung?" AND isnull(bp.id) ":"")." AND a.status='freigegeben' ".($auftrag?" AND ap.auftrag = '$auftrag' ":"")."" - .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") - .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' - AND (ifnull(ap.lieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(ap.lieferdatum,'0000-00-00') <= '$bis') - AND (ifnull(a.tatsaechlicheslieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(a.tatsaechlicheslieferdatum,'0000-00-00') <= '$bis') - AND (ifnull(a.lieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(a.lieferdatum,'0000-00-00') <= '$bis') - - ":"") - ); - - return $summe_im_auftrag; -} - -// @refactor Bestellung Modul -function ArtikelImAuftrag($artikel, $format = false, $von = null, $bis = null, $auftrag = 0, $ohnebestellung = false) -{ - return $this->app->DB->Select("SELECT ".($format?"trim(SUM(ap.menge))+0":"SUM(ap.menge)")." - FROM auftrag_position ap - ".($ohnebestellung?" LEFT JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id ":"")." - LEFT JOIN auftrag a ON a.id=ap.auftrag - WHERE ap.artikel='$artikel' ".($ohnebestellung?" AND isnull(bp.id) ":"")." AND a.status='freigegeben' ".($auftrag?" AND ap.auftrag = '$auftrag' ":"")." " - .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") - .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' ":"") - ); -} - -// @refactor Bestellung Modul -function ArtikelImAuftragStuecklisteLiefertermin($artikel, $format = false, $von = null, $bis = null, $auftrag = 0, $ohnebestellung = false) -{ - - return $this->app->DB->Select("SELECT ".($format?"trim(SUM(ap.menge * s.menge))+0":"SUM(ap.menge * s.menge)")." - FROM auftrag_position ap - ".($ohnebestellung?" LEFT JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id ":"")." - INNER JOIN auftrag a ON a.id=ap.auftrag - INNER JOIN stueckliste s ON ap.artikel = s.stuecklistevonartikel - INNER JOIN artikel a2 ON a2.id = s.stuecklistevonartikel - WHERE s.artikel='$artikel' ".($ohnebestellung?" AND isnull(bp.id) ":"")." AND a.status='freigegeben' AND a2.produktion = 1 ".($auftrag?" AND ap.auftrag = '$auftrag' ":"")." " - .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") - .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' - AND (ifnull(ap.lieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(ap.lieferdatum,'0000-00-00') <= '$bis') - AND (ifnull(a.tatsaechlicheslieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(a.tatsaechlicheslieferdatum,'0000-00-00') <= '$bis') - AND (ifnull(a.lieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(a.lieferdatum,'0000-00-00') <= '$bis') - ":"") - ); - - return $summe_im_auftrag; -} - -// @refactor Bestellung Modul -function ArtikelImAuftragStueckliste($artikel, $format = false, $von = null, $bis = null, $auftrag = 0, $ohnebestellung = false) -{ - return $this->app->DB->Select("SELECT ".($format?" trim(SUM(ap.menge * s.menge))+0 ":" SUM(ap.menge * s.menge) ")." - FROM auftrag_position ap - ".($ohnebestellung?" LEFT JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id ":"")." - INNER JOIN auftrag a ON a.id=ap.auftrag - INNER JOIN stueckliste s ON ap.artikel = s.stuecklistevonartikel INNER JOIN artikel a2 ON a2.id = s.stuecklistevonartikel - WHERE s.artikel='$artikel' ".($ohnebestellung?" AND isnull(bp.id) ":"")." AND a.status='freigegeben' AND a2.produktion = 1 ".($auftrag?" AND ap.auftrag = '$auftrag' ":"")."" - .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") - .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' ":"") - ); -} - -// @refactor Lager Modul -function ArtikelImLagerPlatz($artikel,$lager_platz, $format = false) -{ - if(!$lager_platz)return 0; - if($format)return $this->app->DB->Select("SELECT trim(SUM(menge))+0 FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz='$lager_platz'"); - $summe_im_lager = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz='$lager_platz'"); - return $summe_im_lager; -} - -// @refactor Lager Modul -public function ArtikelImLager($artikel, $format = false) -{ - if($format){ - return $this->app->DB->Select("SELECT trim(SUM(menge))+0 FROM lager_platz_inhalt WHERE artikel='$artikel'"); - } - $summe_im_lager = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel'"); - return $summe_im_lager; -} - -// @refactor Lager Modul -public function ArtikelImLagerOhneSperrlager($artikel, $format = false) -{ - - if($format){ - return $this->app->DB->Select("SELECT trim(ifnull(SUM(lpi.menge),0))+0 FROM lager_platz_inhalt lpi - INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id AND (ifnull(lp.sperrlager,0) = 0 OR lp.allowproduction) - WHERE lpi.artikel='$artikel'"); - } - $summe_im_lager = $this->app->DB->Select("SELECT ifnull(SUM(lpi.menge),0) FROM lager_platz_inhalt lpi - INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id AND ifnull(lp.sperrlager,0) = 0 - WHERE lpi.artikel='$artikel'"); - return $summe_im_lager; -} - -function VerbindlichkeitErweiterteBestellung($id) -{ - /** @var Verbindlichkeit $obj */ - $obj = $this->app->erp->LoadModul('verbindlichkeit'); - if(!empty($obj) && method_exists($obj, 'VerbindlichkeitErweiterteBestellung')) { - return $obj->VerbindlichkeitErweiterteBestellung($id); - } - return []; -} - -/** - * @deprecated - * @refactor Verbindlichkeit Modul - */ -function BestellungErweiterteVerbindlichkeiten($id) -{ - for($i=1;$i<=15;$i++) - { - $alleids[] = $this->app->DB->SelectArr("SELECT id, bestellung{$i}betrag as betrag FROM verbindlichkeit WHERE bestellung$i='$id'"); - } - - for($i=0;$iapp->erp->LoadModul('verbindlichkeit'); - if(!empty($obj) && method_exists($obj, 'BestellungErweiterteVerbindlichkeitenNeu')) { - return $obj->BestellungErweiterteVerbindlichkeitenNeu($id); - } - return []; -} - - -function get_emails ($str) -{ - $emails = array(); - $pattern="/([\s]*)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*([ ]+|)@([ ]+|)([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))([\s]*)/i"; - //preg_match_all("/\b\w+\@w+[\-\.\w+]+\b/", $str, $output); - preg_match_all($pattern, $str, $output); - foreach($output[0] as $email) array_push ($emails, trim(strtolower($email))); - if (count ($emails) >= 1) return $emails; - else return false; -} - - -// @refactor Mahnwesen Modul -function MahnwesenBody($id,$als,$_datum=null,$sprache='') -{ - if($id > 0) - { - $rechnungarr = $this->app->DB->SelectRow("SELECT r.*,DATE_FORMAT(datum,'%d.%m.%Y') as datum_de,DATE_FORMAT(mahnwesen_datum,'%d.%m.%Y') as mahnwesen_datum_de,r.mahnwesen_datum - FROM rechnung AS r WHERE r.id=$id LIMIT 1"); - } - if(empty($rechnungarr)) - { - return ''; - } - - $adresse = $rechnungarr['adresse']; - if($sprache==''){ - $sprache = $rechnungarr['sprache']; - } - if($sprache==''){ - $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1"); - } - // OfferNo, customerId, OfferDate - - $kundennummer = $rechnungarr['kundennummer']; - $projekt = $rechnungarr['projekt']; - $auftrag= $rechnungarr['auftrag']; - $buchhaltung= $rechnungarr['buchhaltung']; - $lieferschein = $rechnungarr['lieferschein']; - $lieferscheinid = $lieferschein; - if($lieferscheinid){ - $lieferschein = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); - }else{ - $lieferschein = ''; - } - $bestellbestaetigung = $rechnungarr['kundennummer']; - $datum = $rechnungarr['datum_de']; - $datum_sql = $rechnungarr['datum']; - $belegnr = $rechnungarr['belegnr']; - $doppel = $rechnungarr['doppel']; - $freitext = $rechnungarr['freitext']; - $ustid = $rechnungarr['ustid']; - $soll = $rechnungarr['soll']; - $ist = $rechnungarr['ist']; - $land = $rechnungarr['land']; - $mahnwesen_datum = $rechnungarr['mahnwesen_datum']; - $mahnwesen_datum_deutsch = $rechnungarr['mahnwesen_datum_de']; - $zahlungsweise = $rechnungarr['zahlungsweise']; - $zahlungsstatus = $rechnungarr['zahlungsstatus']; - $zahlungszieltage = $rechnungarr['zahlungszieltage']; - $zahlungszieltageskonto = $rechnungarr['zahlungszieltageskonto']; - $zahlungszielskonto = $rechnungarr['zahlungszielskonto']; - $waehrung = $rechnungarr['waehrung']; - - $zahlungdatum = $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD(datum, INTERVAL $zahlungszieltage DAY),'%d.%m.%Y') FROM rechnung WHERE id='$id' LIMIT 1"); - - if($_datum!=null) - { - $mahnwesen_datum = $this->app->String->Convert($_datum,'%1.%2.%3','%3-%2-%1'); - $mahnwesen_datum_deutsch = $_datum; - } - - $zahlungsweise = strtolower($zahlungsweise); - - if($als=='zahlungserinnerung') - { - $body = $this->GetGeschaeftsBriefText("MahnwesenZahlungserinnerung",$sprache,$projekt,"rechnung",$id); - $tage = $this->GetKonfiguration('mahnwesen_m1_tage'); - } - else if($als=='mahnung1') - { - $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung1",$sprache,$projekt,"rechnung",$id); - $mahngebuehr = $this->GetKonfiguration('mahnwesen_m1_gebuehr'); - $tage = $this->GetKonfiguration('mahnwesen_m2_tage'); - } - else if($als=='mahnung2') - { - $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung2",$sprache,$projekt,"rechnung",$id); - $tage = $this->GetKonfiguration('mahnwesen_m3_tage'); - $mahngebuehr = $this->GetKonfiguration('mahnwesen_m2_gebuehr'); - } - else if($als=='mahnung3') - { - $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung3",$sprache,$projekt,"rechnung",$id); - $tage = $this->GetKonfiguration('mahnwesen_ik_tage'); - $mahngebuehr = $this->GetKonfiguration('mahnwesen_m3_gebuehr'); - } - else if($als=='inkasso') - { - $body = $this->GetGeschaeftsBriefText("MahnwesenInkasso",$sprache,$projekt,"rechnung",$id); - //$tage = $this->GetKonfiguration("mahnwesen_ik_tage"); - $tage = 3; //eigentlich vorbei - $mahngebuehr = $this->GetKonfiguration('mahnwesen_ik_gebuehr'); - } - else - { - $body = $this->app->erp->Beschriftung("dokument_anschreiben"); - } - - if($tage <=0) $tage = 0; - - $datummahnung= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$mahnwesen_datum', INTERVAL $tage DAY),'%d.%m.%Y')"); - $datumrechnungzahlungsziel= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datum_sql', INTERVAL $zahlungszieltage DAY),'%d.%m.%Y')"); - - $tage_ze = $zahlungszieltage + $this->GetKonfiguration('mahnwesen_m1_tage'); - $datumzahlungserinnerung= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datum_sql', INTERVAL $tage_ze DAY),'%d.%m.%Y')"); - - // checkstamp $this->CheckStamp("jhdskKUHsiusakiakuhsd"); // errechnet aus laufzeit und kundenid // wenn es nicht drinnen ist darf es nicht gehen - - if($mahngebuehr=='' || !is_numeric($mahngebuehr)) - $mahngebuehr = 0; - - //$offen= '11,23'; - $body = str_replace('{RECHNUNG}',$belegnr,$body); - $body = str_replace('{BELEGNR}',$belegnr,$body); - $body = str_replace('{DATUMRECHNUNG}',$datum,$body); - $body = str_replace('{TAGE}',$tage,$body); - $body = str_replace('{OFFEN}',$this->formatMoney($soll - $ist,$waehrung),$body); - $body = str_replace('{SOLL}',$this->formatMoney($soll,$waehrung),$body); - $body = str_replace('{SUMME}',$this->formatMoney($soll - $ist + $mahngebuehr,$waehrung),$body); - $body = str_replace('{IST}',$this->formatMoney($ist,$waehrung),$body); - $body = str_replace('{DATUM}',$datummahnung,$body); - $body = str_replace('{MAHNGEBUEHR}',$this->formatMoney($mahngebuehr,$waehrung),$body); - $body = str_replace('{OFFENMITMAHNGEBUEHR}',$this->formatMoney($mahngebuehr + $soll - $ist,$waehrung),$body); - $body = str_replace('{MAHNDATUM}',$mahnwesen_datum_deutsch,$body); - - - // Im Protokoll suchen Datum von Zahlungserinnerung, Mahnung 1, Mahnung 2, Mahnung 3 - - $mahnung1 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$id' - AND grund LIKE 'Mahnung1 versendet%' ORDER by Zeit DESC LIMIT 1"); - - $mahnung2 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$id' - AND grund LIKE 'Mahnung2 versendet%' ORDER by Zeit DESC LIMIT 1"); - - $mahnung3 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$id' - AND grund LIKE 'Mahnung3 versendet%' ORDER by Zeit DESC LIMIT 1"); - - $body = str_replace('{DATUMMAHNUNG1}',$mahnung1,$body); - $body = str_replace('{DATUMMAHNUNG2}',$mahnung2,$body); - $body = str_replace('{DATUMMAHNUNG3}',$mahnung3,$body); - - $body = str_replace('{DATUMZAHLUNGSERINNERUNGFAELLIG}',$datumzahlungserinnerung,$body); - $body = str_replace('{DATUMZAHLUNGSERINNERUNG}',$datumzahlungserinnerung,$body); - $body = str_replace('{DATUMRECHNUNGZAHLUNGSZIEL}',$datumrechnungzahlungsziel,$body); - - $body = $this->ParseUserVars('rechnung',$id,$body); - - return $body; -} - -/**@deprecated */ -function AufragZuDTA($auftrag,$rechnung="1") -{ - $arr = $this->app->DB->Select("SELECT belegnr, bank_inhaber, bank_konto, bank_blz, gesamtsumme, adresse, name FROM auftrag WHERE id='$auftrag'"); - - - if($rechnung=="1") - { - $arr[0]['vz1'] = "RE ".$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE auftrag='{$arr[0]['belegnr']}' LIMIT 1"); - } else - $arr[0]['vz1'] = ""; - - $this->app->DB->Insert("INSERT INTO dta (id,adresse,datum,name,konto,blz,betrag,vz1,firma) - VALUES('','{$arr[0]['adresse']}',NOW(),'{$arr[0]['name']}','{$arr[0]['konto']}','{$arr[0]['blz']}','{$arr[0]['betrag']}','{$arr[0]['vz1']}','".$this->app->User->GetFirma()."')"); - -} - -//@refactor versanddiestleister Modul -function TrackingNummerAnpassen($projekt,$tracking) -{ - - if($this->Projektdaten($projekt,"tracking_substr_length") > 0) - $tracking = substr($tracking,$this->Projektdaten($projekt,"tracking_substr_start"),$this->Projektdaten($projekt,"tracking_substr_length")); - else - $tracking = substr($tracking,$this->Projektdaten($projekt,"tracking_substr_start")); - - //TODO anpassung, damit die Nummer an schluss entfernt wird - $kundennummerdpd = $this->app->DB->Select("SELECT dpdkundennr FROM projekt WHERE id='$projekt' LIMIT 1"); - - if($this->Projektdaten($projekt,"tracking_remove_kundennummer") =="1") - $tracking = str_replace($kundennummerdpd,"",$tracking); - - return $tracking; -} - -/**@deprecated */ -function PaketmarkeGo($parsetarget,$sid="",$zusatz="") -{ - $id = $this->app->Secure->GetGET("id"); - // entscheiden ob Intraship oder Easylog anhang Projekt einstellung - // wenn sid==versand dann steht die id in der vesandtabelle - if($sid=="versand") - { - $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); - } else { - // ansonsten ist es die id vom lieferschein - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); - } - - $this->Paketmarke($parsetarget,$sid,$zusatz,"Go"); -} - -/**@deprecated */ -function PaketmarkeUPSEmbedded($parsetarget,$sid="",$zusatz="") -{ - $id = $this->app->Secure->GetGET("id"); - // entscheiden ob Intraship oder Easylog anhang Projekt einstellung - // wenn sid==versand dann steht die id in der vesandtabelle - if($sid=="versand") - { - $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); - } else { - // ansonsten ist es die id vom lieferschein - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); - } - - //TODO pruefe ob i oder easylog -// $intraship_enabled = $this->app->DB->Select("SELECT intraship_enabled FROM projekt WHERE id='$projekt' LIMIT 1"); -// if($intraship_enabled=="1") -// $this->Paketmarke($parsetarget,$sid,$zusatz,"Intraship"); -// else - $this->Paketmarke($parsetarget,$sid,$zusatz,"UPS"); - -} - -/**@deprecated */ -function PaketmarkeDPDEmbedded($parsetarget,$sid="",$zusatz="") -{ - if($sid=="") - $sid= $this->app->Secure->GetGET("sid"); - - if($zusatz=="express") - $this->app->Tpl->Set('ZUSATZ',"Express"); - - if($zusatz=="export") - $this->app->Tpl->Set('ZUSATZ',"Export"); - - $id = $this->app->Secure->GetGET("id"); - $drucken = $this->app->Secure->GetPOST("drucken"); - $anders = $this->app->Secure->GetPOST("anders"); - $land = $this->app->Secure->GetGET("land"); - $tracking_again = $this->app->Secure->GetGET("tracking_again"); - - - $versandmit= $this->app->Secure->GetPOST("versandmit"); - $trackingsubmit= $this->app->Secure->GetPOST("trackingsubmit"); - $versandmitbutton = $this->app->Secure->GetPOST("versandmitbutton"); - $tracking= $this->app->Secure->GetPOST("tracking"); - $trackingsubmitcancel= $this->app->Secure->GetPOST("trackingsubmitcancel"); - - $versand = "dpd"; - - // mit trackingnummer - if($trackingsubmit!="" || $trackingsubmitcancel!="") - { - - if($sid=="versand") - { - // falche tracingnummer bei DPD da wir in der Funktion PaketmarkeDPDEmbedded sind - //if(strlen($tracking) < 14 || strlen($tracking) > 30) - if((strlen($tracking) < 5 || strlen($tracking) > 30) && $trackingsubmitcancel=="") - { - header("Location: index.php?module=versanderzeugen&action=frankieren&id=$id&land=$land&tracking_again=1"); - exit; - } - else - { - $tmplieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$tmplieferschein' LIMIT 1"); - $tracking = $this->TrackingNummerAnpassen($projekt,$tracking); - $this->app->DB->Update("UPDATE versand SET versandunternehmen='$versand', tracking='$tracking',versendet_am=NOW(), - versendet_am_zeitstempel=NOW(), abgeschlossen='1',logdatei=NOW() WHERE id='$id' LIMIT 1"); - - - $this->VersandAbschluss($id); - $this->RunHook('versanderzeugen_frankieren_hook1', 1, $id); - //versand mail an kunden - $this->Versandmail($id); - - $weiterespaket=$this->app->Secure->GetPOST("weiterespaket"); - $lieferscheinkopie=$this->app->Secure->GetPOST("lieferscheinkopie"); - - if($weiterespaket=="1") - { - if($lieferscheinkopie=="1") $lieferscheinkopie=0; else $lieferscheinkopie=1; - //$this->app->erp->LogFile("Lieferscheinkopie $lieferscheinkopie"); - $all = $this->app->DB->SelectArr("SELECT * FROM versand WHERE id='$id' LIMIT 1"); - $this->app->DB->Insert("INSERT INTO versand (id,adresse,rechnung,lieferschein,versandart,projekt,bearbeiter,versender,versandunternehmen,firma, - keinetrackingmail,gelesen,paketmarkegedruckt,papieregedruckt,weitererlieferschein) - VALUES ('','{$all[0]['adresse']}','{$all[0]['rechnung']}','{$all[0]['lieferschein']}','{$all[0]['versandart']}','{$all[0]['projekt']}', - '{$all[0]['bearbeiter']}','{$all[0]['versender']}','{$all[0]['versandunternehmen']}', - '{$all[0]['firma']}','{$all[0]['keinetrackingmail']}','{$all[0]['gelesen']}',0,$lieferscheinkopie,1)"); - - $newid = $this->app->DB->GetInsertID(); - header("Location: index.php?module=versanderzeugen&action=einzel&id=$newid"); - } else { - - $obj = $this->app->erp->LoadModul('versanderzeugen'); - if(!empty($obj) && method_exists($obj,'CheckKommissionierungByLieferschein')) - { - $obj->CheckKommissionierungByLieferschein($this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id'")); - } - - header("Location: index.php?module=versanderzeugen&action=offene"); - } - } - exit; - } else { - //direkt aus dem Lieferschein - if($id > 0) - { - - $adresse = $this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id='$id' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); - $kg = $this->app->Secure->GetPOST("kg1"); - if($kg=="") { - $kg = $this->VersandartMindestgewicht($id); - } - - $tracking = $this->TrackingNummerAnpassen($projekt,$tracking); - - $this->app->DB->Update("INSERT INTO versand (id,versandunternehmen, tracking, - versendet_am,abgeschlossen,lieferschein, - freigegeben,firma,adresse,projekt,gewicht,paketmarkegedruckt,anzahlpakete) - VALUES ('','$versand','$tracking',NOW(),1,'$id',1,'".$this->app->User->GetFirma()."','$adresse','$projekt','$kg','1','1') "); - $auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id = '$id'"); - $shop = $this->app->DB->Select("SELECT shop FROM auftrag WHERE id = '$auftrag' LIMIT 1"); - $auftragabgleich=$this->app->DB->Select("SELECT auftragabgleich FROM shopexport WHERE id='$shop' LIMIT 1"); - - if($shop > 0 && $auftragabgleich=="1") - { - //$this->LogFile("Tracking gescannt"); - $this->app->remote->RemoteUpdateAuftrag($shop,$auftrag); - } - - header("Location: index.php?module=lieferschein&action=paketmarke&id=$id"); - exit; - } - } - } - - if($versandmitbutton!="") - { - - if($sid=="versand") - { - - $this->app->DB->Update("UPDATE versand SET versandunternehmen='$versandmit', - versendet_am=NOW(),versendet_am_zeitstempel=NOW(),abgeschlossen='1' WHERE id='$id' LIMIT 1"); - - $this->VersandAbschluss($id); - //versand mail an kunden - $this->Versandmail($id); - - $obj = $this->app->erp->LoadModul('versanderzeugen'); - if(!empty($obj) && method_exists($obj,'CheckKommissionierungByLieferschein')) - { - $obj->CheckKommissionierungByLieferschein($this->app->DB->Select("SELECT lieferschein FROM versand WHERE id=$id")); - } - - header("Location: index.php?module=versanderzeugen&action=offene"); - exit; - } - } - - if($sid=="versand") - { - // wenn paketmarke bereits gedruckt nur tracking scannen - $paketmarkegedruckt = $this->app->DB->Select("SELECT paketmarkegedruckt FROM versand WHERE id='$id' LIMIT 1"); - - if($paketmarkegedruckt>=1) - $tracking_again=1; - } - - - if($anders!="") - { - //header("Location: index.php?module=paketmarke&action=tracking"); - $this->app->Tpl->Add('TAB1', - "

- -
-

-

Methode:



-
Versandart:  
-

-
-

- "); - - - } - else if($drucken!="" || $tracking_again=="1") - { - if($tracking_again!="1") - { - $nachnahme = $this->app->Secure->GetPOST("nachnahme"); - $betrag= $this->app->Secure->GetPOST("betrag"); - $versichert = $this->app->Secure->GetPOST("versichert"); - $extraversichert = $this->app->Secure->GetPOST("extraversichert"); - $name= $this->app->Secure->GetPOST("name"); - $name2= $this->app->Secure->GetPOST("name2"); - $name3= $this->app->Secure->GetPOST("name3"); - $land= $this->app->Secure->GetPOST("land"); - $plz= $this->app->Secure->GetPOST("plz"); - $ort= $this->app->Secure->GetPOST("ort"); - $strasse = $this->app->Secure->GetPOST("strasse"); - $hausnummer= $this->app->Secure->GetPOST("hausnummer"); - - $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); - $rechnungsnummer = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1"); - $rechnungsnummer = "RE ".$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$rechnungsnummer' LIMIT 1"); - $kg = $this->app->Secure->GetPOST("kg1"); - $anzahl = $this->app->Secure->GetPOST("anzahl"); - if($kg=="") $kg=$this->VersandartMindestgewicht($lieferschein); - // speichern - $this->app->DB->Update("UPDATE versand SET gewicht='$kg',anzahlpakete='$anzahl',paketmarkegedruckt=1 WHERE id='$id' LIMIT 1"); - - if($nachnahme=="" && $versichert=="" && $extraversichert=="") - { - if($zusatz=="express") - $this->DPDPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,1,101,"express"); - else if($zusatz=="export") - $this->DPDPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,1,101,"export"); - else - $this->DPDPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); - - } else if ($nachnahme=="1" && $versichert=="" && $extraversichert=="") - { - $this->DPDPaketmarkeNachnahme($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer); - } - } - //insert into versand oder update - - - //insert into versand oder update - if($anzahl > 1) - { - if($zusatz=="express" || $zusatz=="export") { - $produkt_zusatz_nr=101; - $produkt_zusatz_id=1; - } - else { - $produkt_zusatz_nr=""; - $produkt_zusatz_id=""; - } - for($anzahli=2;$anzahli<=$anzahl; $anzahli++) - { - - $kg = $this->app->Secure->GetPOST("kg".$anzahli); - if($kg <=0) $kg = 2; - $this->DPDPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$produkt_zusatz_id,$produkt_zusatz_nr,$zusatz); //TODO 2kg - $this->app->DB->Insert("INSERT INTO versandpakete (id,versand,gewicht,nr,versender) VALUES ('','$id','$kg','$anzahli','".$this->app->User->GetName()."')"); - } - } - - if($tracking_again=="1") - { - $error_message_tracking = "
Fehlerhafte Trackingnummer!
"; - } - - if($sid=="versand") - { - $paketmarkedrucken = "";//""; - } - else $paketmarkedrucken=""; - - //header("Location: index.php?module=paketmarke&action=tracking"); - $this->app->Tpl->Add('TAB1', - "
$error_message_tracking
- -
-

-

Tracking-Nummer Scannen:



-
Tracking-Nummer:   -

-
- - - -
 Weitere Paketmarke für diese Lieferung erstellen.
 Zusätzlichen Lieferschein drucken.
-
-
-
-
- $paketmarkedrucken - -
-
-
-

- "); - - } else { - - if($sid=="rechnung") - $rechnung = $id; - else $rechnung =""; - - if($sid=="versand") - { - $tid = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); - $rechnung = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1"); - $sid = "lieferschein"; - } else { - $tid = $id; - } - - - if($sid=="rechnung" || $sid=="lieferschein" || $sid=="adresse") - { - $name = $this->app->DB->Select("SELECT name FROM $sid WHERE id='$tid' LIMIT 1"); - $name2 = $this->app->DB->Select("SELECT adresszusatz FROM $sid WHERE id='$tid' LIMIT 1"); - if($name2=="") - { - $name2 = $this->app->DB->Select("SELECT abteilung FROM $sid WHERE id='$tid' LIMIT 1"); - $abt=1; - } - $name3 = $this->app->DB->Select("SELECT ansprechpartner FROM $sid WHERE id='$tid' LIMIT 1"); - if($name3=="" && $abt!=1) - $name3 = $this->app->DB->Select("SELECT abteilung FROM $sid WHERE id='$tid' LIMIT 1"); - - //unterabteilung versuchen einzublenden - if($name2=="") { - $name2 = trim($this->app->DB->Select("SELECT unterabteilung FROM $sid WHERE id='$tid' LIMIT 1")); - } else if ($name3=="") { - $name3 = trim($this->app->DB->Select("SELECT unterabteilung FROM $sid WHERE id='$tid' LIMIT 1")); - } - - - - $ort = $this->app->DB->Select("SELECT ort FROM $sid WHERE id='$tid' LIMIT 1"); - $plz = $this->app->DB->Select("SELECT plz FROM $sid WHERE id='$tid' LIMIT 1"); - $land = $this->app->DB->Select("SELECT land FROM $sid WHERE id='$tid' LIMIT 1"); - $strasse = $this->app->DB->Select("SELECT strasse FROM $sid WHERE id='$tid' LIMIT 1"); - $hausnummer = $this->ExtractStreetnumber($strasse); - - $strasse = str_replace($hausnummer,"",$strasse); - $strasse = str_replace('.',"",$strasse); - - if($strasse=="") - { - $strasse = $hausnummer; - $hausnummer = ""; - } - - } - - // wenn rechnung im spiel entweder durch versand oder direkt rechnung - if($rechnung >0) - { - - $zahlungsweise = $this->app->DB->Select("SELECT zahlungsweise FROM rechnung WHERE id='$rechnung' LIMIT 1"); - $soll = $this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$rechnung' LIMIT 1"); - $this->app->Tpl->Set('BETRAG',$soll); - - if($zahlungsweise=="nachnahme") - $this->app->Tpl->Set('NACHNAHME',"checked"); - - if($soll >= 500 && $soll <= 2500) - $this->app->Tpl->Set('VERSICHERT',"checked"); - - if($soll > 2500) - $this->app->Tpl->Set('EXTRAVERSICHERT',"checked"); - - } - $this->app->Tpl->Set('NAME',$name); - $this->app->Tpl->Set('NAME2',$name2); - $this->app->Tpl->Set('NAME3',$name3); - $this->app->Tpl->Set('ORT',$ort); - $this->app->Tpl->Set('PLZ',$plz); - $this->app->Tpl->Set('STRASSE',$strasse); - $this->app->Tpl->Set('HAUSNUMMER',$hausnummer); - $this->app->Tpl->Set('LAND',$land); - - $abholdatum_user = $this->app->User->GetParameter("paketmarke_abholdatum"); - $abholdatum_user = date('Y-m-d', strtotime($abholdatum_user)); - - $check_date = $this->app->DB->Select("SELECT date_format(now(),'%Y-%m-%d')"); - if($abholdatum_user >= $check_date) - $this->app->Tpl->Set('ABHOLDATUM',date('d.m.Y', strtotime($abholdatum_user))); - else - $this->app->Tpl->Set('ABHOLDATUM',date('d.m.Y', strtotime($check_date))); - -// $this->app->Tpl->Set('ABHOLDATUM',$this->app->DB->Select("SELECT date_format(now(),'%d.%m.%Y')")); - - - $anzahl = $this->app->Secure->GetGET("anzahl"); - - if($anzahl <= 0) $anzahl=1; - - $this->app->Tpl->Set('ANZAHL',$anzahl); - - $standardkg=$this->VersandartMindestgewicht($lieferschein); - $this->PaketmarkeGewichtForm($anzahl, $standardkg, $this->VersandartMindestgewicht()); - /* - if($anzahl==1) - { - $i=1; - $this->app->Tpl->Add('GEWICHT','Gewicht Paket: in kg'); - } - else { - for($i=1;$i<=$anzahl;$i++) - $this->app->Tpl->Add('GEWICHT','Gewicht Paket '.$i.': in kg'); - }*/ - - - if($tracking_again!="1") - $this->app->Tpl->Parse($parsetarget,"paketmarke_dpd.tpl"); - } -} - -//@refactor versanddiestleister Modul -function PaketmarkeGewichtForm($anzahl, $standardkg, $mindestgewicht = 0) -{ - $mitwaage = false; - $mindestgewicht = (float)$mindestgewicht; - if($this->app->erp->Firmendaten('paketmarke_mit_waage')) - { - $mitwaage = $this->app->DB->Select("SELECT seriennummer FROM adapterbox WHERE verwendenals = 'waage' AND seriennummer <> '' LIMIT 1"); - } - if($anzahl==1) - { - $i=1; - $this->app->Tpl->Add('GEWICHT','Gewicht: in kg'); - if($mitwaage) - { - $this->app->Tpl->Add('GEWICHT',' '); - $this->app->Tpl->Set('SERIENNUMMER', $mitwaage); - $this->app->Tpl->Set('MINDESTGEWICHT', $mindestgewicht); - $this->app->Tpl->Parse('GEWICHT', 'paketmarke_waage.tpl'); - } - $this->app->Tpl->Add('GEWICHT',''); - - } - else { - for($i=1;$i<=$anzahl;$i++) - { - $this->app->Tpl->Add('GEWICHT','Gewicht: in kg'); - if($mitwaage) - { - $this->app->Tpl->Add('GEWICHT',' '); - $this->app->Tpl->Set('SERIENNUMMER', $mitwaage); - $this->app->Tpl->Set('MINDESTGEWICHT', $mindestgewicht); - if($i == 1)$this->app->Tpl->Parse('GEWICHT', 'paketmarke_waage.tpl'); - } - $this->app->Tpl->Add('GEWICHT',''); - } - } -} - -/**@deprecated */ -function PaketmarkeDHLEmbedded($parsetarget,$sid="",$zusatz="") -{ - $id = $this->app->Secure->GetGET("id"); - // entscheiden ob Intraship oder Easylog anhang Projekt einstellung - // wenn sid==versand dann steht die id in der vesandtabelle - if($sid=="versand") - { - $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); - } else { - // ansonsten ist es die id vom lieferschein - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); - } - - //TODO pruefe ob i oder easylog - $intraship_enabled = $this->app->DB->Select("SELECT intraship_enabled FROM projekt WHERE id='$projekt' LIMIT 1"); - if($intraship_enabled=="1") - $this->Paketmarke($parsetarget,$sid,$zusatz,"Intraship"); - else - $this->Paketmarke($parsetarget,$sid,$zusatz,"DHL"); - -} -//@refactor versanddiestleister Modul -function VersandartMindestgewicht($id=0) -{ - $gewicht = $this->LieferscheinNettoGewicht($id); - $versandart =""; $projekt=0; $intraship_weightinkg=0; - $gewicht /= $this->GewichtzuKgFaktor(); - -if($id > 0) -{ - $versandart = $this->app->DB->Select("SELECT versandart FROM lieferschein WHERE id='$id' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); - $intraship_weightinkg = $this->app->DB->Select("SELECT intraship_weightinkg FROM projekt WHERE id='$projekt' LIMIT 1"); - $versandart = strtolower($versandart); - - $modul = $this->app->DB->SelectArr("SELECT id, modul FROM `versandarten` WHERE aktiv = 1 AND ausprojekt = 0 AND modul <> '' AND type = '".$this->app->DB->real_escape_string($versandart)."' AND geloescht = 0 AND (projekt = 0 OR projekt = '$projekt') ORDER by projekt = '$projekt' DESC LIMIT 1"); - if($modul && @is_file(dirname(__FILE__).'/versandarten/'.$modul[0]['modul'].'.php')) - { - $obj = $this->LoadVersandModul($modul[0]['modul'], $modul[0]['id']); - if($obj){ - if(method_exists($obj, 'VersandartMindestgewicht')) - $mindestgewicht = $obj->VersandartMindestgewicht(); - return $mindestgewicht > $gewicht ? $mindestgewicht : $gewicht; - } - } -} - - if(($versandart=="dhl" || $versandart=="versandunternehmen") && $intraship_weightinkg > 0 && $gewicht <=0) return $intraship_weightinkg; - else if ($gewicht > 0) return $gewicht; - else return 2; -} - -//@refactor ApplicationCore -function LoadVersandModul($modul, $id) -{ - if(empty($modul) || - strpos($modul,'..') !== false || - !@is_file(__DIR__.'/versandarten/'.$modul.'.php') - ) - { - return; - } - $class_name = 'Versandart_'.$modul; - $class_name_custom = 'Versandart_'.$modul.'Custom'; - if(!class_exists($class_name)) - { - if(@is_file(__DIR__.'/versandarten/'.$modul.'_custom.php')) - { - include_once(__DIR__.'/versandarten/'.$modul.'_custom.php'); - }else{ - include_once(__DIR__.'/versandarten/'.$modul.'.php'); - } - } - if(class_exists($class_name_custom)) - { - return new $class_name_custom($this->app, $id); - }elseif(class_exists($class_name)) - { - return new $class_name($this->app, $id); - } -} - -//@refactor versanddiestleister Modul -function Paketmarke($parsetarget,$sid="",$zusatz="",$typ="DHL") -{ - if($sid=="") - $sid= $this->app->Secure->GetGET("sid"); - - if($zusatz=="express") - $this->app->Tpl->Set('ZUSATZ',"Express"); - - if($zusatz=="export") - $this->app->Tpl->Set('ZUSATZ',"Export"); - - $id = $this->app->Secure->GetGET("id"); - $drucken = $this->app->Secure->GetPOST("drucken"); - $anders = $this->app->Secure->GetPOST("anders"); - $land = $this->app->Secure->GetGET("land"); - $tracking_again = $this->app->Secure->GetGET("tracking_again"); - - $tablesid=$sid; - if($drucken && !$tracking_again) { - $this->app->User->SetParameter('versand_lasttracking', ''); - $this->app->User->SetParameter('versand_lasttracking_versand', ''); - $this->app->User->SetParameter('versand_lasttracking_lieferschein', ''); - } - - $versandmit= $this->app->Secure->GetPOST("versandmit"); - $trackingsubmit= $this->app->Secure->GetPOST("trackingsubmit"); - $versandmitbutton = $this->app->Secure->GetPOST("versandmitbutton"); - $tracking= trim($this->app->Secure->GetPOST("tracking")); - $trackingBefore = $tracking; - $trackingLink = $this->app->Secure->GetPOST("tracking_link"); - $trackingsubmitcancel= $this->app->Secure->GetPOST("trackingsubmitcancel"); - $retourenlabel = $this->app->Secure->GetPOST("retourenlabel"); - if($typ=="DHL" || $typ=="dhl") - $versand = "dhl"; - else if($typ=="Intraship") - $versand = "intraship"; - else $versand = $typ; - - //pruefe ob dpd im namen vorkommt - $tracking = str_replace(' ','',$tracking); - $tracking = str_replace('%','',$tracking); - - if($sid == "versand") - { - $this->app->Tpl->Set("TRACKINGMANUELL",'  '); - $projekt = $this->app->DB->Select("SELECT projekt FROM versand WHERE id='$id' LIMIT 1"); - }elseif($sid == "retoure") - { - $projekt = $this->app->DB->Select("SELECT projekt FROM retoure WHERE id='$id' LIMIT 1"); - }else{ - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); - } - $intraship_weightinkg = $this->app->DB->Select("SELECT intraship_weightinkg FROM projekt WHERE id='$projekt' LIMIT 1"); - - - if($trackingsubmit!="" || $trackingsubmitcancel!="") - { - //TrackingReplace - $versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul,bezeichnung, einstellungen_json FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND type = '".$this->app->DB->real_escape_string($typ)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); - - if($versandartenmodul && @is_file(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) - { - $obj = $this->LoadVersandModul($versandartenmodul[0]['modul'], $versandartenmodul[0]['id']); - if(!empty($obj) && method_exists($obj, 'TrackingReplace')) - { - $tracking = $obj->TrackingReplace($tracking); - } - } - - if($sid=="versand") - { - // falche tracingnummer bei DHL da wir in der Funktion PaketmarkeDHLEmbedded sind - if((strlen($tracking) < 12 || strlen($tracking) > 21) && $trackingsubmitcancel=="" && ($typ=="DHL" || $typ=="Intraship")) - { - header("Location: index.php?module=versanderzeugen&action=frankieren&id=$id&land=$land&tracking_again=1"); - exit; - } - else - { -/* $versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul,bezeichnung FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND type = '".$this->app->DB->real_escape_string($typ)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); - if($versandartenmodul && @is_file(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) - { - $obj = $this->LoadVersandModul($versandartenmodul[0]['modul'], $versandartenmodul[0]['id']); - if(!empty($obj) && method_exists($obj, 'TrackingReplace')) - { - $tracking = $obj->TrackingReplace($tracking); - } - } -*/ - - $trackingUser = !empty($this->app->User) && method_exists($this->app->User,'GetParameter')? - $this->app->User->GetParameter('versand_lasttracking'):''; - - if(!empty($trackingUser) && in_array($trackingUser,[$trackingBefore,$tracking])) { - $this->app->User->SetParameter('versand_lasttracking',''); - $this->app->User->SetParameter('versand_lasttracking_link',''); - $this->app->User->SetParameter('versand_lasttracking_versand', ''); - $this->app->User->SetParameter('versand_lasttracking_lieferschein', ''); - } - - $this->app->DB->Update("UPDATE versand SET versandunternehmen='$versand', tracking='$tracking', - versendet_am=NOW(),versendet_am_zeitstempel=NOW(), abgeschlossen='1',logdatei=NOW() WHERE id='$id' LIMIT 1"); - if($lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id = '$id' LIMIT 1")) { - $this->app->erp->LieferscheinProtokoll($lieferschein,'Verarbeitung im Versandzentrum'); - } - $rechnung = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id = '$id' LIMIT 1"); - if($lieferschein && ($auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id = '$lieferschein'"))) { - $this->app->erp->AuftragProtokoll($auftrag,'Verarbeitung im Versandzentrum'); - - if(empty($rechnung)) { - $rechnung = $this->app->DB->Select( - sprintf( - "SELECT id FROM rechnung WHERE auftragid = %d AND status <> 'storniert' AND belegnr <> '' LIMIT 1", - $auftrag - ) - ); - if($rechnung) { - $this->app->DB->Update( - sprintf( - 'UPDATE versand SET rechnung = %d WHERE id = %d AND rechnung = 0', - $rechnung, $id - ) - ); - } - } - } - - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id = '$lieferschein' LIMIT 1"); - if($lieferschein) { - - $this->PDFArchivieren('lieferschein', $lieferschein, true); - } - $proformaPrinted = false; - $druckennachtracking = $this->app->erp->Projektdaten($projekt,'druckennachtracking'); - if($druckennachtracking - && !($proformarechnung = $this->app->DB->Select( - sprintf( - 'SELECT id FROM proformarechnung WHERE lieferschein = %d LIMIT 1', - $lieferschein - ) - ) - ) - ) { - /** @var Versanderzeugen $versandObj */ - $versandObj = $this->LoadModul('versanderzeugen'); - if($versandObj !== null && method_exists($versandObj, 'checkPrintCreateProformaInvoice')) { - $druckercode = $this->app->DB->Select("SELECT druckerlogistikstufe2 FROM projekt WHERE id='$projekt' LIMIT 1"); - - if($druckercode <=0) { - $druckercode = $this->app->erp->Firmendaten('standardversanddrucker'); // standard = 3 // 2 buchhaltung // 1 empfang - } - $userversanddrucker = $this->app->DB->Select("SELECT standardversanddrucker FROM user WHERE id='".$this->app->User->GetID()."'"); - if($userversanddrucker>0) { - $druckercode = $userversanddrucker; - } - $deliveryArr = $this->app->DB->SelectRow( - sprintf('SELECT land FROM lieferschein WHERE id = %d', $lieferschein) - ); - $country = $deliveryArr['land']; - $versandObj->checkPrintCreateProformaInvoice($lieferschein,$country,$projekt,$druckercode,true); - $proformaPrinted = $druckercode > 0; - } - } - if($rechnung) { - $this->PDFArchivieren('rechnung', $rechnung, true); - } - elseif($auftrag && $druckennachtracking - && $this->app->DB->Select( - sprintf( - "SELECT id FROM auftrag WHERE id = %d AND art <> 'lieferung'", - $auftrag - ) - ) - ) { - $rechnung = $this->WeiterfuehrenAuftragZuRechnung($auftrag); - $this->BelegFreigabe('rechnung', $rechnung); - $this->app->DB->Update( - sprintf( - 'UPDATE versand SET rechnung = %d WHERE id = %d LIMIT 1', - $rechnung, $id - ) - ); - $this->app->DB->Update( - sprintf( - "UPDATE rechnung SET schreibschutz = 1, status = 'versendet' WHERE id = %d", - $rechnung - ) - ); - $this->PDFArchivieren('rechnung', $rechnung, true); - } - - if($rechnung > 0 && $druckennachtracking - && $this->app->DB->Select("SELECT count(id) FROM versand WHERE lieferschein = '$lieferschein'") <= 1) { - $druckercode = $this->app->DB->Select("SELECT druckerlogistikstufe2 FROM projekt WHERE id='$projekt' LIMIT 1"); - - if($druckercode <=0) - $druckercode = $this->app->erp->Firmendaten("standardversanddrucker"); // standard = 3 // 2 buchhaltung // 1 empfang - - $userversanddrucker = $this->app->DB->Select("SELECT standardversanddrucker FROM user WHERE id='".$this->app->User->GetID()."'"); - if($userversanddrucker>0) - $druckercode = $userversanddrucker; - - $this->app->erp->BriefpapierHintergrundDisable($druckercode); - - $addressId = $this->app->DB->Select("SELECT `adresse` FROM `rechnung` WHERE `id` = '{$rechnung}' LIMIT 1"); - $printInvoice = $this->app->DB->Select("SELECT `rechnung_papier` FROM `adresse` WHERE `id` = '{$addressId}' LIMIT 1"); - $amountPrintedInvoices = $this->app->DB->Select("SELECT `rechnung_anzahlpapier` FROM `adresse` WHERE `id` = '{$addressId}' LIMIT 1"); - if($printInvoice === '1' && $amountPrintedInvoices > 0){ - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projekt); - }else{ - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($rechnung); - $tmpfile = $Brief->displayTMP(); - - for($i = 1; $i <= $amountPrintedInvoices; $i++) { - $this->app->printer->Drucken($druckercode,$tmpfile); - } - } else { - $autodruckrechnungmenge = $this->app->erp->Projektdaten($projekt,"autodruckrechnungmenge"); - $autodruckrechnung= $this->app->erp->Projektdaten($projekt,"autodruckrechnung"); - - if($autodruckrechnungmenge < 0)$autodruckrechnungmenge = 1; - - if($autodruckrechnung > 0) - { - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projekt); - }else{ - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($rechnung); - $tmpfile = $Brief->displayTMP(); - - for($i = 1; $i <= $autodruckrechnungmenge; $i++) { - $this->app->printer->Drucken($druckercode,$tmpfile); - } - } - } - - - // Print additional invoices for export - $exportdruckrechnung = $this->app->erp->Projektdaten($projekt,"exportdruckrechnung"); - if($exportdruckrechnung) - { - $exportland = $this->app->DB->Select("SELECT land FROM rechnung WHERE id = '$rechnung' LIMIT 1"); - $exportdruckrechnung = $this->app->erp->Export($exportland); - if($exportdruckrechnung) - { - $mengedruck = $this->app->erp->Projektdaten($projekt,"exportdruckrechnungmenge"); - for($mengedruck;$mengedruck > 0;$mengedruck--) - { - $this->app->printer->Drucken($druckercode,$tmpfile); - } - } - } - - unlink($tmpfile); - if($this->app->erp->Projektdaten($projekt,"automailrechnung")=="1") - { - // aber nur das erste mal also wenn es einen eintrag in der versand tabelle gibt - $rechnungbereitsversendet = $this->app->DB->Select("SELECT versendet FROM rechnung WHERE id = '$rechnung' LIMIT 1"); - if($rechnungbereitsversendet!="1") - { - $this->app->erp->Rechnungsmail($rechnung); - } - } - $this->BriefpapierHintergrundEnable(); - } - - if($druckennachtracking && $lieferschein && $this->Export($land) - && $this->Projektdaten($projekt, 'proformainvoice_amount') && $proformaRechnungId = $this->app->DB->Select( - sprintf( - "SELECT id FROM proformarechnung WHERE lieferschein = %d AND status <> 'storniert' LIMIT 1", - $lieferschein - )) - ) { - /** @var Versanderzeugen $objProforma */ - $objVersand = $this->LoadModul('versanderzeugen'); - if($objVersand && method_exists($objVersand,'checkPrintCreateProformaInvoice')){ - if(empty($druckercode)) { - $druckercode = $this->app->DB->Select("SELECT druckerlogistikstufe2 FROM projekt WHERE id='$projekt' LIMIT 1"); - - if($druckercode <= 0) { - $druckercode = $this->app->erp->Firmendaten('standardversanddrucker'); // standard = 3 // 2 buchhaltung // 1 empfang - } - $userversanddrucker = $this->app->DB->Select("SELECT standardversanddrucker FROM user WHERE id='" . $this->app->User->GetID() . "'"); - if($userversanddrucker > 0) { - $druckercode = $userversanddrucker; - } - } - $objVersand->checkPrintCreateProformaInvoice($lieferschein, $land, $projekt, $druckercode, empty($proformaPrinted)); - } - } - - if(!$this->app->erp->Firmendaten('versandmail_zwischenspeichern') || !$this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'versandmailsundrueckmeldung' AND aktiv = 1")) - { - $this->VersandAbschluss($id); - $this->RunHook('versanderzeugen_frankieren_hook1', 1, $id); - //versand mail an kunden - $this->Versandmail($id); - }else{ - $this->app->DB->Update("UPDATE versand SET cronjob = 1 WHERE id = '$id' LIMIT 1"); - } - $weiterespaket=$this->app->Secure->GetPOST("weiterespaket"); - $lieferscheinkopie=$this->app->Secure->GetPOST("lieferscheinkopie"); - if($weiterespaket=="1") - { - if($lieferscheinkopie=="1") $lieferscheinkopie=0; else $lieferscheinkopie=1; - //$this->app->erp->LogFile("Lieferscheinkopie $lieferscheinkopie"); - $all = $this->app->DB->SelectArr("SELECT * FROM versand WHERE id='$id' LIMIT 1"); - $this->app->DB->Insert("INSERT INTO versand (id,adresse,rechnung,lieferschein,versandart,projekt,bearbeiter,versender,versandunternehmen,firma, - keinetrackingmail,gelesen,paketmarkegedruckt,papieregedruckt,weitererlieferschein) - VALUES ('','{$all[0]['adresse']}','{$all[0]['rechnung']}','{$all[0]['lieferschein']}','{$all[0]['versandart']}','{$all[0]['projekt']}', - '{$all[0]['bearbeiter']}','{$all[0]['versender']}','{$all[0]['versandunternehmen']}', - '{$all[0]['firma']}','{$all[0]['keinetrackingmail']}','{$all[0]['gelesen']}',0,$lieferscheinkopie,1)"); - - $newid = $this->app->DB->GetInsertID(); - - $obj = $this->app->erp->LoadModul('versanderzeugen'); - if(!empty($obj) && method_exists($obj,'CheckKommissionierungByLieferschein')) - { - $obj->CheckKommissionierungByLieferschein($all[0]['lieferschein']); - } - - header("Location: index.php?module=versanderzeugen&action=einzel&weiterespaket=1&id=$newid"); - } else { - $this->RunHook('paketmarke_abschluss', 1, $lieferschein); - - $obj = $this->app->erp->LoadModul('versanderzeugen'); - if(!empty($obj) && method_exists($obj,'CheckKommissionierungByLieferschein')) - { - $obj->CheckKommissionierungByLieferschein($lieferschein); - } - $url = 'index.php?module=versanderzeugen&action=offene'; - $this->RunHook('paketmarke_abschluss_url', 2, $lieferschein, $url); - header('Location: '.$url); - } - } - exit; - } elseif($sid == 'retoure') { - if($id > 0) - { - $adresse = $this->app->DB->Select("SELECT adresse FROM retoure WHERE id='$id' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM retoure WHERE id='$id' LIMIT 1"); - $kg = $this->app->Secure->GetPOST("kg1"); - if($kg=="") { - $kg = $this->VersandartMindestgewicht($id); - } - - $this->app->DB->Insert("INSERT INTO versand (id,versandunternehmen, tracking, - versendet_am,abgeschlossen,retoure, - freigegeben,firma,adresse,projekt,gewicht,paketmarkegedruckt,anzahlpakete) - VALUES ('','$versand','$tracking',NOW(),1,'$id',1,'".$this->app->User->GetFirma()."','$adresse','$projekt','$kg','1','1') "); - - $versandid = $this->app->DB->GetInsertID(); - if($this->app->DB->Select("SELECT automailversandbestaetigung FROM projekt WHERE id = '$projekt' LIMIT 1"))$this->Versandmail($versandid); - $this->RunHook('versanderzeugen_frankieren_hook1', 1, $versandid); - $lieferschein = $this->app->DB->Select("SELECT lieferscheinid FROM retoure WHERE id = '$id' LIMIT 1"); - $auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id = '$lieferschein'"); - $shop = $this->app->DB->Select("SELECT shop FROM auftrag WHERE id = '$auftrag' LIMIT 1"); - $auftragabgleich=$this->app->DB->Select("SELECT auftragabgleich FROM shopexport WHERE id='$shop' LIMIT 1"); - $this->app->erp->RetoureProtokoll($id,'Verarbeitung im Versandzentrum'); - if($auftrag)$this->app->erp->AuftragProtokoll($auftrag,'Verarbeitung im Versandzentrum'); - if($shop > 0 && $auftragabgleich=="1") - { - //$this->LogFile("Tracking gescannt"); - $this->app->remote->RemoteUpdateAuftrag($shop,$auftrag); - } - header("Location: index.php?module=retoure&action=paketmarke&id=$id"); - exit; - } - } else { - //direkt aus dem Lieferschein - if($id > 0) - { - $adresse = $this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id='$id' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); - $kg = $this->app->Secure->GetPOST("kg1"); - if($kg=="") { - $kg = $this->VersandartMindestgewicht($id); - } -/* - //Brauchen wir nicht - $versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul,bezeichnung FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND type = '".$this->app->DB->real_escape_string($versand)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); - if($versandartenmodul && @is_file(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) - { - $class_name = 'Versandart_'.$versandartenmodul[0]['modul']; - if(!class_exists($class_name))include_once(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php'); - if(class_exists($class_name)) - { - $obj = new $class_name($this->app, $versandartenmodul[0]['id']); - if(method_exists($obj, 'TrackingReplace')){ - $tracking = $obj->TrackingReplace($tracking); - } - } - } -*/ - - $trackingUser = !empty($this->app->User) && method_exists($this->app->User,'GetParameter')? - $this->app->User->GetParameter('versand_lasttracking'):''; - - if(!empty($trackingUser) && in_array($trackingUser,[$trackingBefore,$tracking])) { - $this->app->User->SetParameter('versand_lasttracking',''); - $this->app->User->SetParameter('versand_lasttracking_link',''); - $this->app->User->SetParameter('versand_lasttracking_versand', ''); - $this->app->User->SetParameter('versand_lasttracking_lieferschein', ''); - } - - $this->app->DB->Insert("INSERT INTO versand (id,versandunternehmen, tracking, tracking_link, - versendet_am,abgeschlossen,lieferschein, - freigegeben,firma,adresse,projekt,gewicht,paketmarkegedruckt,anzahlpakete) - VALUES ('','$versand','$tracking', '{$trackingLink}',NOW(),1,'$id',1,'".$this->app->User->GetFirma()."','$adresse','$projekt','$kg','1','1') "); - - $versandid = $this->app->DB->GetInsertID(); - if($this->app->DB->Select("SELECT automailversandbestaetigung FROM projekt WHERE id = '$projekt' LIMIT 1"))$this->Versandmail($versandid); - $this->RunHook('versanderzeugen_frankieren_hook1', 1, $versandid); - $auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id = '$id'"); - $rechnung = $this->app->DB->Select( - sprintf('SELECT id FROM rechnung where auftragid = %d LIMIT 1', $auftrag) - ); - if($rechnung) { - $rechnung_projekt = $this->app->DB->Select( - sprintf( - 'SELECT projekt FROM rechnung WHERE id = %d', $rechnung - ) - ); - $rechnung_zahlweise = $this->app->DB->Select( - sprintf( - 'SELECT zahlweise FROM rechnung WHERE id = %d', $rechnung - ) - ); - } - else{ - $rechnung_projekt = $this->app->DB->Select( - sprintf( - 'SELECT projekt FROM auftrag WHERE id = %d', $auftrag - ) - ); - $rechnung_zahlweise = $this->app->DB->Select( - sprintf( - 'SELECT zahlweise FROM auftrag WHERE id = %d', $auftrag - ) - ); - } - $shop = $this->app->DB->Select("SELECT shop FROM auftrag WHERE id = '$auftrag' LIMIT 1"); - $auftragabgleich=$this->app->DB->Select("SELECT auftragabgleich FROM shopexport WHERE id='$shop' LIMIT 1"); - $this->app->erp->LieferscheinProtokoll($id,'Verarbeitung im Versandzentrum'); - if($auftrag)$this->app->erp->AuftragProtokoll($auftrag,'Verarbeitung im Versandzentrum'); - if($shop > 0 && $auftragabgleich=="1") - { - //$this->LogFile("Tracking gescannt"); - try { - $this->app->remote->RemoteUpdateAuftrag($shop, $auftrag); - }catch(Exception $e) - { - $this->AuftragProtokoll($auftag, 'Shoprückmeldung fehlgeschlagen'); - } - } - try { - $this->sendPaymentStatus($versandid, $rechnung_zahlweise, $auftrag, $projekt, $rechnung_projekt); - } - catch (Exception $e) { - - } - if($lieferschein) { - $this->PDFArchivieren('lieferschein', $lieferschein, true); - } - if($rechnung) { - $this->PDFArchivieren('rechnung', $rechnung, true); - } - header("Location: index.php?module=lieferschein&action=paketmarke&id=$id"); - exit; - } - } - } - - if($versandmitbutton!="") - { - - if($sid=="versand") - { - $this->app->DB->Update("UPDATE versand SET versandunternehmen='$versandmit', - versendet_am=NOW(),versendet_am_zeitstempel=NOW(),abgeschlossen='1' WHERE id='$id' LIMIT 1"); - - $this->VersandAbschluss($id); - //versand mail an kunden - $this->Versandmail($id); - $obj = $this->app->erp->LoadModul('versanderzeugen'); - if(!empty($obj) && method_exists($obj,'CheckKommissionierungByLieferschein')) - { - $obj->CheckKommissionierungByLieferschein($this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id'")); - } - - - header("Location: index.php?module=versanderzeugen&action=offene"); - exit; - } - } - - if($sid=="versand") - { - // wenn paketmarke bereits gedruckt nur tracking scannen - $paketmarkegedruckt = $this->app->DB->Select("SELECT paketmarkegedruckt FROM versand WHERE id='$id' LIMIT 1"); - - if($paketmarkegedruckt>=1) - $tracking_again=1; - } - - // wenn anders ausgewaehlt - if($anders!="") - { - - //header("Location: index.php?module=paketmarke&action=tracking"); - $this->app->Tpl->Add('TAB1', - "

- -
-

-

Methode:



-
Versandart:   -

-
-
- -
-
- -

-
-

- "); - - - } - else if($drucken!="" || $tracking_again=="1") - { - - - - if($tracking_again!="1") - { - $nachnahme = trim($this->app->Secure->GetPOST("nachnahme")); - $betrag= $this->app->Secure->GetPOST("betrag"); - $versichert = $this->app->Secure->GetPOST("versichert"); - $extraversichert = $this->app->Secure->GetPOST("extraversichert"); - $name= trim($this->app->Secure->GetPOST("name")); - $name2= trim($this->app->Secure->GetPOST("name2")); - $name3= trim($this->app->Secure->GetPOST("name3")); - $land= $this->app->Secure->GetPOST("land"); - $plz= trim($this->app->Secure->GetPOST("plz")); - $ort= trim($this->app->Secure->GetPOST("ort")); - $telefon= trim($this->app->Secure->GetPOST("telefon")); - $email= trim($this->app->Secure->GetPOST("email")); - $strasse = trim($this->app->Secure->GetPOST("strasse")); - $hausnummer= trim($this->app->Secure->GetPOST("hausnummer")); - $altersfreigabe = $this->app->Secure->GetPOST("altersfreigabe"); - - $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); - $rechnungsnummer = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1"); - $rechnungid = $rechnungsnummer; - $rechnungsnummer = "RE ".$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$rechnungsnummer' LIMIT 1"); - - $kg = $this->app->Secure->GetPOST("kg1"); - $anzahl = $this->app->Secure->GetPOST("anzahl"); - - if($kg=="") $kg=$this->VersandartMindestgewicht($lieferschein); - - //$versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul FROM versanddienstleister WHERE aktiv = 1 AND modul = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); - $versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul,bezeichnung, einstellungen_json FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND type = '".$this->app->DB->real_escape_string($typ)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); - if($versandartenmodul && @is_file(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) - { - $obj = $this->LoadVersandModul($versandartenmodul[0]['modul'], $versandartenmodul[0]['id']); - $this->app->Tpl->Set("ZUSATZ",$versandartenmodul[0]['bezeichnung']); - - if(!empty($obj) && method_exists($obj, 'Paketmarke')) - { - $error = $obj->Paketmarke($sid!=''?$sid:'lieferschein',$id); - }else $error[] = 'Versandmodul '.$typ.' fehlerhaft!'; - }else{ - switch($typ) - { - case "DHL": - if($nachnahme=="" && $versichert=="" && $extraversichert=="") - { - $this->EasylogPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); - } else if ($nachnahme=="1" && $versichert=="" && $extraversichert=="") - { - $this->EasylogPaketmarkeNachnahme($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer); - } else if ($versichert=="1" && $extraversichert=="" && $nachnahme=="") - { - $this->EasylogPaketmarke2500($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); - } else if ($versichert=="1" && $extraversichert=="" && $nachnahme=="1") - { - $this->EasylogPaketmarkeNachnahme2500($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer); - } else if ($versichert=="" && $extraversichert=="1" && $nachnahme=="1") - { - $this->EasylogPaketmarkeNachnahme25000($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer); - } else if ($extraversichert=="1" && $versichert=="" && $nachnahme=="") - { - $this->EasylogPaketmarke25000($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); - } - break; - case "Intraship": - $kg = (float)str_replace(',','.',$kg); - - $abholdatum = $this->app->Secure->GetPOST("abholdatum"); - $retourenlabel= $this->app->Secure->GetPOST("retourenlabel"); - if($retourenlabel) - { - $this->app->Tpl->Set('RETOURENLABEL', ' checked="checked" '); - $zusaetzlich['retourenlabel'] = 1; - } - if($abholdatum){ - $this->app->Tpl->Set('ABHOLDATUM',$abholdatum); - $zusaetzlich['abholdatum'] = date('Y-m-d', strtotime($abholdatum)); - $this->app->User->SetParameter("paketmarke_abholdatum",$zusaetzlich['abholdatum']); - } - if($altersfreigabe)$zusaetzlich['altersfreigabe'] = 1; - if($nachnahme=="1") - $error = $this->IntrashipPaketmarkeNachnahme($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer,$zusaetzlich); - else - $error = $this->IntrashipPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,"",$rechnungsnummer,$zusaetzlich); - break; - case "UPS": - $error = $this->UPSPaketmarke($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer); - break; - case "FEDEX": - $error = $this->FEDEXPaketmarke($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer); - break; - case 'Go': - if($name && $strasse && $plz && $ort && (($hausnummer && (!$land || $land == 'DE') || ($land && $land != 'DE')))) - { - $kg = $this->app->Secure->GetPOST("kg"); - if($kg=="") $kg=$this->VersandartMindestgewicht($lieferschein); - $kg = str_replace(',','.',$kg); - $frei = $this->app->Secure->GetPOST("frei")==1?1:0; - $auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein where id = ".(int)$lieferschein." limit 1"); - - if($frei){ - $this->app->Tpl->Set('FREI',' checked="checked" '); - $zusaetzlich['frei'] = 1; - } - $selbstabholung = $this->app->Secure->GetPOST("selbstabholung"); - if($selbstabholung){ - $this->app->Tpl->Set('SELBSTABHOLUNG',' checked="checked" '); - $zusaetzlich['selbstabholung'] = 1; - } - $landesvorwahl = $this->app->Secure->GetPOST("landesvorwahl"); - if($landesvorwahl){ - $this->app->Tpl->Set('LANDESVORWAHL',$landesvorwahl); - $zusaetzlich['landesvorwahl'] = $landesvorwahl; - } - $ortsvorwahl = $this->app->Secure->GetPOST("ortsvorwahl"); - if($ortsvorwahl){ - $this->app->Tpl->Set('ORTSVORWAHL',$ortsvorwahl); - $zusaetzlich['ortsvorwahl'] = $ortsvorwahl; - } - if($telefon) - { - $this->app->Tpl->Set('TELEFON',$telefon); - $zusaetzlich['telefon'] = $telefon; - } - if($email) - { - $this->app->Tpl->Set('EMAIL',trim($email)); - $zusaetzlich['email'] = trim($email); - } - - - $selbstanlieferung = $this->app->Secure->GetPOST("selbstanlieferung"); - if($selbstanlieferung){ - $this->app->Tpl->Set('SELBSTANLIEFERUNG',' checked="checked" '); - $zusaetzlich['selbstanlieferung'] = 1; - } - $abholdatum = $this->app->Secure->GetPOST("abholdatum"); - if($abholdatum){ - $this->app->Tpl->Set('ABHOLDATUM',$abholdatum); - $zusaetzlich['abholdatum'] = $abholdatum; - $this->app->User->SetParameter("paketmarke_abholdatum",$zusaetzlich['abholdatum']); - } - $zustelldatum = $this->app->Secure->GetPOST("zustelldatum"); - if(!$zustelldatum) - { - //$zustelldatum = $this->app->DB->Select("SELECT lieferdatum FROM rechnung where id = ".(int)$rechnungid." and lieferdatum > now() limit 1"); - $zustelldatum = $this->app->DB->Select("SELECT lieferdatum FROM auftrag where id = ".(int)$auftragid." limit 1"); - } - if($zustelldatum){ - $this->app->Tpl->Set('ZUSTELLDATUM',$zustelldatum); - $zusaetzlich['zustelldatum'] = $zustelldatum; - } - - if(!$abholdatum) - { - //$abholdatum = $this->app->DB->Select("SELECT tatsaechlicheslieferdatum FROM rechnung where id = ".(int)$rechnungid." and tatsaechlicheslieferdatum > now() limit 1"); - $abholdatum = $this->app->DB->Select("SELECT date_format(now(),'%d.%m.%Y')"); - /*if(!$abholdatum) - { - $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$auftragid' LIMIT 1"); - $differenztage = $this->Projektdaten($projekt,"differenz_auslieferung_tage"); - if($differenztage<0) $differenztage=2; - $abholdatum = $this->app->DB->Select("SELECT DATE_SUB(lieferdatum, INTERVAL $differenztage DAY) from auftrag WHERE id='$auftragid' and DATE_SUB(lieferdatum, INTERVAL $differenztage DAY) > now() LIMIT 1"); - }*/ - if($abholdatum) - { - $this->app->Tpl->Set('ABHOLDATUM',$abholdatum); - $zusaetzlich['abholdatum'] = $abholdatum; - $this->app->User->SetParameter("paketmarke_abholdatum",$zusaetzlich['abholdatum']); - } - } - - - $Zustellhinweise = $this->app->Secure->GetPOST("Zustellhinweise"); - if($Zustellhinweise){ - $this->app->Tpl->Set('ZUSTELLHINWEISE',$Zustellhinweise); - $zusaetzlich['Zustellhinweise'] = $Zustellhinweise; - } - $Abholhinweise = $this->app->Secure->GetPOST("Abholhinweise"); - if($Abholhinweise){ - $this->app->Tpl->Set('ABHOLHINWEISE',$Abholhinweise); - $zusaetzlich['Abholhinweise'] = $Abholhinweise; - } - - - if($anzahl)$zusaetzlich['menge'] = $anzahl; - $inhalt = $this->app->Secure->GetPOST("inhalt"); - if($inhalt){ - $this->app->Tpl->Set('INHALT',$inhalt); - $zusaetzlich['inhalt'] = $inhalt; - } - if(isset($nachnahme))$zusaetzlich['nachnahme'] = $nachnahme; - $this->GoPaketmarke($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer, $zusaetzlich); - } else header("Location: index.php?module=lieferschein&action=paketmarke&id=$id"); - break; - - } - } - - if(!isset($error) || !$error)$this->app->DB->Update("UPDATE versand SET gewicht='$kg',paketmarkegedruckt=1,anzahlpakete='$anzahl' WHERE id='$id' LIMIT 1"); - } - if(!$error) - { - //insert into versand oder update - if($anzahl > 1) - { - for($anzahli=2;$anzahli<=$anzahl; $anzahli++) - { - - $kg = $this->app->Secure->GetPOST("kg".$anzahli); - - if($kg <=0) $kg = $this->VersandartMindestgewicht($lieferschein); - - //$this->DPDPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$produkt_zusatz_id,$produkt_zusatz_nr,$zusatz); //TODO 2kg - switch($typ) - { - case "DHL": - $this->EasylogPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); //TODO 1 - break; - case "Intraship": - $kg = (float)str_replace(',','.',$kg); - $this->IntrashipPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); //TODO 1 - break; - case "UPS": - $this->UPSPaketmarke($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); //TODO 1 - break; - case "FEDEX": - $this->FEDEXPaketmarke($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); - break; - - } - $this->app->DB->Insert("INSERT INTO versandpakete (id,versand,gewicht,nr,versender) VALUES ('','$id','$kg','$anzahli','".$this->app->User->GetName()."')"); - } - - } - - if($tracking_again=="1") - { - //$error_message_tracking = "
Bitte korrekte Trackingnummer erfassen!
"; - } - - if($sid==='versand') { - $paketmarkedrucken = '';//""; - } - else { - $paketmarkedrucken=''; - } - - $lastTrackingVersand = $this->app->User->GetParameter('versand_lasttracking_versand'); - $lastTrackingLieferschein = $this->app->User->GetParameter('versand_lasttracking_lieferschein'); - $tracking = $this->app->User->GetParameter('versand_lasttracking'); - $trackingLink = $this->app->User->GetParameter('versand_lasttracking_link'); - if(empty($tracking) && $sid === 'versand') { - $trackingRow = $this->app->DB->SelectRow( - sprintf( - 'SELECT tracking, tracking_link FROM versand WHERE id = %d', - $id - ) - ); - if(!empty($trackingRow)) { - $tracking = $trackingRow['tracking']; - $trackingLink = $trackingRow['tracking_link']; - } - } - if((!empty($lastTrackingVersand) && $sid === 'versand' && $id != $lastTrackingVersand) || - (!empty($lastTrackingLieferschein) && $sid !== 'versand' && $id != $lastTrackingLieferschein)) { - $this->app->User->SetParameter('versand_lasttracking', ''); - $this->app->User->SetParameter('versand_lasttracking_versand', ''); - $this->app->User->SetParameter('versand_lasttracking_lieferschein', ''); - } - $printagain = ''; - $versandRow = $this->app->DB->SelectRow(sprintf('SELECT * FROM versand WHERE id = %d', $id)); - - if($sid === 'versand' && $this->app->erp->RechteVorhanden('versanderzeugen','reprintlabel') - && !empty($versandRow['lastprinter']) && !empty($versandRow['lastspooler_id']) - ) { - $printable = $this->app->DB->Select( - sprintf( - 'SELECT id FROM drucker_spooler WHERE id = %d AND content <> \'\' LIMIT 1', - $versandRow['lastspooler_id'] - ) - ); - - $printagain = '  -
- * Die Paketmarke wird maximal 10 Tage vorgehalten.'; - } - $this->app->erp->RunHook("versanderzeugen_scan_dialog", 2, $lastTrackingLieferschein, $versandartenmodul[0]); - - //header("Location: index.php?module=paketmarke&action=tracking"); - $this->app->Tpl->Add('TAB1', - "
$error_message_tracking
- -
-

-

Tracking-Nummer Scannen:



-
Tracking-Nummer:    -

-
- - - -
 Weitere Paketmarke für diese Lieferung erstellen.
 Zusätzlichen Lieferschein drucken.
-
-
-
-
- $paketmarkedrucken -
$printagain
-
-
-

-
-

- "); - - } - } - if(!($drucken!="" || $tracking_again=="1") || $error) - { - if($error) - { - $this->app->Tpl->Add('ERROR','
'); - foreach($error as $er)$this->app->Tpl->Add('ERROR',$er.'
'); - $this->app->Tpl->Add('ERROR','
'); - - } - - if($sid=="rechnung") - $rechnung = $id; - else $rechnung =""; - - if($sid=="versand") - { - $tid = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); - $rechnung = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1"); - $tablesid = "lieferschein"; - } elseif($sid == "retoure") - { - $lieferschein = $this->app->DB->Select("SELECT lieferscheinid FROM retoure WHERE id = '$id' LIMIT 1"); - $tid = $id; - if($lieferschein)$rechnung = $this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein = '$lieferschein' LIMIT 1"); - if($rechnung<=0) $rechnung = $this->app->DB->Select("SELECT rechnungid FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); - } else { - $tid = $id; - if($sid == 'lieferschein')$rechnung = $this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein = '$tid' LIMIT 1"); - if($rechnung<=0) $rechnung = $this->app->DB->Select("SELECT rechnungid FROM lieferschein WHERE id='$tid' LIMIT 1"); - } - - if($rechnung){ - $artikel_positionen = $this->app->DB->SelectArr("SELECT * FROM rechnung_position WHERE rechnung='$rechnung'"); - } else { - //if($sid =="versand" && $tid > 0) - //{ - // $artikel_positionen = $this->app->DB->SelectArr("SELECT * FROM lieferschein_position WHERE lieferschein='$tid'"); - //} - //else { - $artikel_positionen = $this->app->DB->SelectArr("SELECT * FROM ".$tablesid."_position WHERE $tablesid='$tid'"); - //} - - } - $altersfreigabe = 0; - for($i=0;$iapp->DB->Select("SELECT altersfreigabe FROM artikel WHERE id = '".$artikel_positionen[$i]['artikel']."' LIMIT 1"); - if($artikelaltersfreigabe > $altersfreigabe)$altersfreigabe = $artikelaltersfreigabe; - } - - if($altersfreigabe) - { - if($sid == 'adresse') - { - $adresse = $tid; - }else{ - $adresse = $this->app->DB->Select("SELECT adresse FROM $tablesid WHERE id = '$tid' LIMIT 1"); - } - if(!$this->app->DB->Select("SELECT keinealtersabfrage FROM adresse WHERE id = '$adresse' LIMIT 1")) - $this->app->Tpl->Set('ALTERSFREIGABE',' checked '); - }else{ - $this->app->Tpl->Set('VORALTERSFREIGABE', ''); - } - - - if($tablesid=="rechnung" || $tablesid=="lieferschein" || $tablesid=="adresse" || $tablesid == "retoure") - { - $name = trim($this->app->DB->Select("SELECT name FROM $tablesid WHERE id='$tid' LIMIT 1")); - $name2 = trim($this->app->DB->Select("SELECT adresszusatz FROM $tablesid WHERE id='$tid' LIMIT 1")); - if($name2=="") - { - $name2 = trim($this->app->DB->Select("SELECT abteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); - $abt=1; - } - $name3 = trim($this->app->DB->Select("SELECT ansprechpartner FROM $tablesid WHERE id='$tid' LIMIT 1")); - if($name3=="" && $abt!=1) - $name3 = trim($this->app->DB->Select("SELECT abteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); - - //unterabteilung versuchen einzublenden - if($name2=="") { - $name2 = trim($this->app->DB->Select("SELECT unterabteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); - } else if ($name3=="") { - $name3 = trim($this->app->DB->Select("SELECT unterabteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); - } - - if($name3!="" && $name2=="") { $name2=$name3; $name3=""; } - - $ort = trim($this->app->DB->Select("SELECT ort FROM $tablesid WHERE id='$tid' LIMIT 1")); - $plz = trim($this->app->DB->Select("SELECT plz FROM $tablesid WHERE id='$tid' LIMIT 1")); - $land = trim($this->app->DB->Select("SELECT land FROM $tablesid WHERE id='$tid' LIMIT 1")); - $strasse = trim($this->app->DB->Select("SELECT strasse FROM $tablesid WHERE id='$tid' LIMIT 1")); - $strassekomplett = $strasse; - $hausnummer = trim($this->ExtractStreetnumber($strasse)); - - $strasse = trim(str_replace($hausnummer,"",$strasse)); - $strasse = str_replace('.',"",$strasse); - - if($strasse=="") - { - $strasse = trim($hausnummer); - $hausnummer = ""; - } - $telefon = trim($this->app->DB->Select("SELECT telefon FROM $tablesid WHERE id='$tid' LIMIT 1")); - $email = trim($this->app->DB->Select("SELECT email FROM $tablesid WHERE id='$tid' LIMIT 1")); - - if($sid == "retoure") - { - if($this->app->DB->Select("SELECT abweichendelieferadresse FROM retoure WHERE id = '$id' LIMIT 1")) - { - - $name = trim($this->app->DB->Select("SELECT liefername FROM $tablesid WHERE id='$tid' LIMIT 1")); - $name2 = trim($this->app->DB->Select("SELECT lieferadresszusatz FROM $tablesid WHERE id='$tid' LIMIT 1")); - if($name2=="") - { - $name2 = trim($this->app->DB->Select("SELECT lieferabteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); - $abt=1; - } - $name3 = trim($this->app->DB->Select("SELECT lieferansprechpartner FROM $tablesid WHERE id='$tid' LIMIT 1")); - if($name3=="" && $abt!=1) - $name3 = trim($this->app->DB->Select("SELECT lieferabteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); - - //unterabteilung versuchen einzublenden - if($name2=="") { - $name2 = trim($this->app->DB->Select("SELECT lieferunterabteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); - } else if ($name3=="") { - $name3 = trim($this->app->DB->Select("SELECT lieferunterabteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); - } - - if($name3!="" && $name2=="") { $name2=$name3; $name3=""; } - - $ort = trim($this->app->DB->Select("SELECT lieferort FROM $tablesid WHERE id='$tid' LIMIT 1")); - $plz = trim($this->app->DB->Select("SELECT lieferplz FROM $tablesid WHERE id='$tid' LIMIT 1")); - $land = trim($this->app->DB->Select("SELECT lieferland FROM $tablesid WHERE id='$tid' LIMIT 1")); - $strasse = trim($this->app->DB->Select("SELECT lieferstrasse FROM $tablesid WHERE id='$tid' LIMIT 1")); - $strassekomplett = $strasse; - $hausnummer = trim($this->ExtractStreetnumber($strasse)); - - $strasse = trim(str_replace($hausnummer,"",$strasse)); - $strasse = str_replace('.',"",$strasse); - - if($strasse=="") - { - $strasse = trim($hausnummer); - $hausnummer = ""; - } - - } - } - - } - - if($rechnung > 0) - { - $zahlungsweise = $this->app->DB->Select("SELECT zahlungsweise FROM rechnung WHERE id='$rechnung' LIMIT 1"); - $soll = $this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$rechnung' LIMIT 1"); - } else { - $auftragtmp = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$tid'"); - $zahlungsweise = $this->app->DB->Select("SELECT zahlungsweise FROM auftrag WHERE id='$auftragtmp' LIMIT 1"); - $soll = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftragtmp' LIMIT 1"); - } - - - // wenn rechnung im spiel entweder durch versand oder direkt rechnung - if($soll>0) - { - $this->app->Tpl->Set('BETRAG',$soll); - - if($zahlungsweise=="nachnahme") - $this->app->Tpl->Set('NACHNAHME',"checked"); - - if($soll >= 500 && $soll <= 2500) - $this->app->Tpl->Set('VERSICHERT',"checked"); - - if($soll > 2500) - $this->app->Tpl->Set('EXTRAVERSICHERT',"checked"); - } - - $felder = array('name','name2','name3','ort','plz','strasse','hausnummer','land','telefon','email'); - foreach($felder as $feld) - { - $varname = $feld; - if($this->app->Secure->GetPOST($feld)!="") - { - $$varname = $this->app->Secure->GetPOST($feld); - } - } - - $this->app->Tpl->Set('NAME',str_replace('"','',$name)); - $this->app->Tpl->Set('NAME2',str_replace('"','',$name2)); - $this->app->Tpl->Set('NAME3',str_replace('"','',$name3)); - $this->app->Tpl->Set('ORT',str_replace('"','',$ort)); - $this->app->Tpl->Set('PLZ',str_replace('"','',$plz)); - $this->app->Tpl->Set('STRASSE',str_replace('"','',$strasse)); - $this->app->Tpl->Set('STRASSEKOMPLETT',$strassekomplett); - $this->app->Tpl->Set('HAUSNUMMER',$hausnummer); - $this->app->Tpl->Set('LAND',$land); - - //DSGVO - - if($this->Firmendaten("dsgvoversandunternehmen")!="1") - { - $this->app->Tpl->Set('TELEFON',$telefon); - $this->app->Tpl->Set('EMAIL',trim($email," \t\n\r\0\x0B\xc2\xa0")); - } - - $abholdatum_user = $this->app->User->GetParameter("paketmarke_abholdatum"); - $abholdatum_user = date('Y-m-d', strtotime($abholdatum_user)); - - - $check_date = $this->app->DB->Select("SELECT date_format(now(),'%Y-%m-%d')"); - if($abholdatum_user >= $check_date) - $this->app->Tpl->Set('ABHOLDATUM',date('d.m.Y', strtotime($abholdatum_user))); - else - $this->app->Tpl->Set('ABHOLDATUM',date('d.m.Y', strtotime($check_date))); - - $anzahl = $this->app->Secure->GetGET("anzahl"); - - if($anzahl <= 0) $anzahl=1; - - $this->app->Tpl->Set('ANZAHL',$anzahl); - - if($tablesid=="lieferschein") - $standardkg=$this->VersandartMindestgewicht($tid); - else - $standardkg=$this->VersandartMindestgewicht(); - - $this->PaketmarkeGewichtForm($anzahl, $standardkg, $this->VersandartMindestgewicht()); - /* - if($anzahl==1) - { - $i=1; - $this->app->Tpl->Add('GEWICHT','Gewicht Paket: in kg'); - } - else { - for($i=1;$i<=$anzahl;$i++) - $this->app->Tpl->Add('GEWICHT','Gewicht Paket '.$i.': in kg'); - }*/ - - if($tracking_again!="1") - { - - //$versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul FROM versanddienstleister WHERE aktiv = 1 AND modul = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); - $versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul,bezeichnung FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND modul != '' AND type = '".$this->app->DB->real_escape_string($typ)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); - - if(!( - $this->app->DB->Select("SELECT id FROM versandarten WHERE aktiv = 1 AND ausprojekt = 1 AND type = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1") - && ($typ == 'DHL' || $typ == 'dhl' || $typ == 'intraship' || $typ == 'Intraship' || $typ == 'UPS' || $typ == 'FEDEX' || $typ == 'Go'))) - { - if($versandartenmodul[0]['modul']=="") { - - if(!(($typ == 'DHL' || $typ == 'dhl' || $typ == 'intraship' || $typ == 'Intraship') && $this->app->DB->Select("SELECT id FROM versandarten WHERE aktiv = 1 AND ausprojekt = 1 AND (type like 'dhl' OR type like 'intraship') AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"))) - { - $versandartenmodul[0]['modul'] ="sonstiges"; - $versandartenmodul[0]['bezeichnung'] ="Sonstiges
   Bitte weiter klicken und im Feld Trackingnummer Information für Versand eingeben z.B. Brief oder Spedition   

"; - } - } - } - if($versandartenmodul && @is_file(__DIR__.'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) - { - $obj = $this->LoadVersandModul($versandartenmodul[0]['modul'], $versandartenmodul[0]['id']); - $this->app->Tpl->Set("ZUSATZ",$versandartenmodul[0]['bezeichnung']); - if(!empty($obj) && method_exists($obj, 'Paketmarke')) - { - $error = $obj->Paketmarke($sid!=''?$sid:'lieferschein',($sid=='versand'?$id:$tid), $parsetarget, $error); - }else $error[] = 'Versandmodul '.$typ.' fehlerhaft!'; - }else{ - if($typ == 'dhl' || $typ == 'DHL') - { - if($this->app->DB->Select("SELECT intraship_enabled FROM projekt WHERE id='$projekt' LIMIT 1"))$typ = 'intraship'; - } - switch($typ) - { - case "DHL": - case "dhl": - $this->app->Tpl->Parse($parsetarget,"paketmarke_dhl.tpl"); - break; - case "Intraship": - case "intraship": - if(!$this->app->DB->Select("SELECT intraship_retourenaccount FROM projekt WHERE id = '$projekt' LIMIT 1")) - { - $this->app->Tpl->Add('VORRETOURENLABEL', ''); - } - if($this->app->DB->Select("SELECT intraship_retourenlabel FROM projekt WHERE id = '$projekt' LIMIT 1"))$this->app->Tpl->Add('RETOURENLABEL',' checked="checked" '); - $this->app->Tpl->Parse($parsetarget,"paketmarke_intraship.tpl"); - break; - case "UPS": - $this->app->Tpl->Parse($parsetarget,"paketmarke_ups.tpl"); - break; - case "FEDEX": - $this->app->Tpl->Parse($parsetarget,"paketmarke_fedex.tpl"); - break; - case "Go": - $this->app->Tpl->Parse($parsetarget,"paketmarke_go.tpl"); - break; - } - } - } - } - if($this->app->Secure->GetGET('module') === 'versanderzeugen'){ - $obj = $this->app->erp->LoadModul('versanderzeugen'); - if(!empty($this->app->User) && method_exists($this->app->User,'GetParameter')){ - $defaultklaergrund = $this->app->User->GetParameter('versand_klaergrund'); - }else{ - $defaultklaergrund = ''; - } - //$fields = array('klaergrund' => array('bezeichnung' => '&nbps;','size'=>40,'autocomplete'=>'versand_klaergrund','defaultonempty'=>$defaultklaergrund)); - $vorlagen = $this->app->DB->SelectArr("SELECT DISTINCT problemcase FROM - delivery_problemcase WHERE problemcase != '' ORDER BY sort, problemcase"); - $klaeroptions = []; - if(!empty($vorlagen)){ - //$fields['vorlagen'] = array('type'=>'legend','bezeichnung'=>'Vorlagen'); - foreach($vorlagen as $k => $v) - { - $klaeroptions[] = $v['problemcase']; - //$fields['vorlage_'.$k] = array('type'=>'link','nodoublepoint'=>1,'bezeichnung' => '•','link'=>''.$v['problemcase'].''); - } - $fields = array('klaergrund' => array('type'=>'radiobutton','optionen'=>$klaeroptions)); - if(!empty($klaeroptions)){ - $this->app->YUI->AddSimpleForm('versand', $fields, - array('editbutton' => $this->app->Secure->GetGET('id'), 'nocreate' => true, 'edittext' => 'Klärfall anlegen', 'legend' => 'Grund', 'title' => 'Einstellungen', 'functionaftersave' => 'VersanderzeugenKlaerfallfunctionaftersave' - , 'addbuttonafter' => '$(\'input[name="drucken"]\').parent().find(\'input\').last()', 'onsave' => 'window.location.href=\'index.php?module=versanderzeugen&action=offene\''), $obj); - } - } - } -} - -//@refactor versanddiestleister Modul -function ExtractStreetnumber($street) -{ - $address = trim($street); - $number = preg_replace('/^.*?(\d+).*$/i', '$1', $address); - // suche erstes vorkommen - $pos = strpos($address,$number); - if($pos === 0) - { - $result = substr($address, 0, strpos($address ,' ')); - }else{ - $result = substr ( $address, $pos); - } - return $result; -} -//@refactor versanddiestleister Modul -function RetoureNettoGewicht($id) -{ - return $this->LieferscheinNettoGewicht($id, 'retoure'); -} -//@refactor versanddiestleister Modul - /** - * @param int $id - * @param string $doctype - * - * @return float|int - */ - public function LieferscheinNettoGewicht($id=0, $doctype = 'lieferschein') - { - if($id <= 0) { - return 0; - } - - if($this->Firmendaten('stuecklistegewichtnurartikel')!='1') { - $nettogewicht = $this->app->DB->Select( - "SELECT SUM(REPLACE(a.gewicht,',','.')*ap.menge) - FROM ".$doctype."_position ap - INNER JOIN artikel a ON ap.artikel=a.id WHERE ap.".$doctype."='$id'"); - } - else { - $nettogewicht = $this->app->DB->Select( - "SELECT SUM(REPLACE(if(a2.gewicht > 0,0,a.gewicht),',','.')*ap.menge) - FROM ".$doctype."_position ap - INNER JOIN artikel a ON ap.artikel=a.id - LEFT JOIN ".$doctype."_position ap2 ON ap2.id=ap.explodiert_parent - LEFT JOIN artikel a2 ON a2.id=ap2.artikel - WHERE ap.".$doctype."='$id'" - ); - } - - if($nettogewicht > 0){ - return round($nettogewicht, 2); - } - return 0; - } -//@refactor versanddiestleister Modul - - /** - * @param int $id - * - * @return float|int - */ - public function AuftragNettoGewicht($id=0) - { - if($id <= 0) { - return 0; - } - - if($this->Firmendaten('stuecklistegewichtnurartikel')!='1') { - $nettogewicht = $this->app->DB->Select( - "SELECT SUM(REPLACE(a.gewicht,',','.')*ap.menge) - FROM auftrag_position ap - INNER JOIN artikel a ON ap.artikel=a.id - WHERE ap.auftrag='$id'" - ); - } - else { - $nettogewicht = $this->app->DB->Select( - "SELECT SUM(REPLACE(if(a2.gewicht > 0,0,a.gewicht),',','.')*ap.menge) - FROM auftrag_position ap - INNER JOIN artikel a ON ap.artikel=a.id - LEFT JOIN auftrag_position ap2 ON ap2.id=ap.explodiert_parent - LEFT JOIN artikel a2 ON a2.id=ap2.artikel - WHERE ap.auftrag='$id'" - ); - } - - if($nettogewicht > 0){ - return round($nettogewicht, 2); - } - - return 0; - } - -function BestellungNettoGewicht($id=0){ - if($id <= 0) { - return 0; - } - - if($this->Firmendaten('stuecklistegewichtnurartikel')!='1') { - $nettogewicht = $this->app->DB->Select( - "SELECT SUM(REPLACE(a.gewicht,',','.')*bp.menge) - FROM bestellung_position bp - INNER JOIN artikel a ON bp.artikel=a.id WHERE bp.bestellung='$id'"); - } - else { - $nettogewicht = $this->app->DB->Select( - "SELECT SUM(REPLACE(if(a2.gewicht > 0,0,a.gewicht),',','.')*bp.menge) - FROM bestellung_position bp - INNER JOIN artikel a ON bp.artikel=a.id - LEFT JOIN bestellung_position bp2 ON bp2.id=bp.explodiert_parent - LEFT JOIN artikel a2 ON a2.id=bp2.artikel - WHERE bp.bestellung='$id'" - ); - } - - if($nettogewicht > 0){ - return round($nettogewicht, 2); - } - - return 0; -} - -function AngebotNettoGewicht($id=0){ - if($id <= 0) { - return 0; - } - if($this->Firmendaten('stuecklistegewichtnurartikel')!='1') - { - $nettogewicht = $this->app->DB->Select( - "SELECT SUM(REPLACE(a.gewicht,',','.')*ap.menge) - FROM angebot_position ap - INNER JOIN artikel a ON ap.artikel=a.id - WHERE ap.angebot='$id'" - ); - } else { - $nettogewicht = $this->app->DB->Select( - "SELECT SUM(REPLACE(if(a2.gewicht > 0,0,a.gewicht),',','.')*ap.menge) - FROM angebot_position ap - INNER JOIN artikel a ON ap.artikel=a.id - LEFT JOIN angebot_position ap2 ON ap2.id=ap.explodiert_parent - LEFT JOIN artikel a2 ON a2.id=ap2.artikel - WHERE ap.angebot='$id'" - ); - } - - if($nettogewicht > 0){ - return round($nettogewicht, 2); - } - - return 0; -} - - //@refactor versanddiestleister Modul - public function ProformarechnungNettoGewicht($id=0,$round=true) - { - if($id <= 0) { - return 0; - } - if($this->Firmendaten('stuecklistegewichtnurartikel')!='1') - { - $nettogewicht = $this->app->DB->Select( - "SELECT SUM(REPLACE(a.gewicht,',','.')*prp.menge) - FROM proformarechnung_position prp - INNER JOIN artikel a ON prp.artikel=a.id - WHERE prp.proformarechnung='$id'" - ); - } - else { - $nettogewicht = $this->app->DB->Select( - "SELECT SUM(REPLACE(if(a2.gewicht > 0,0,a.gewicht),',','.')*ap.menge) - FROM proformarechnung_position ap - INNER JOIN artikel a ON ap.artikel=a.id - LEFT JOIN proformarechnung_position ap2 ON ap2.id=ap.explodiert_parent_artikel - LEFT JOIN artikel a2 ON a2.id=ap2.artikel - WHERE ap.proformarechnung='$id'" - ); - } - - if($nettogewicht > 0) { - if($round){ - return round($nettogewicht,2); - } - return $nettogewicht; - } - - return 0; - } - - - - -//@refactor Exportvorlage Modul -function Gegenkonto($ust_befreit,$ustid='', $doctype = '', $doctypeId = 0) -{ - /** @var Buchhaltungexport $buchhaltungexport */ - $buchhaltungexport = $this->app->loadModule('buchhaltungexport', false); - if($buchhaltungexport !== null && method_exists($buchhaltungexport, 'Gegenkonto')) { - return $buchhaltungexport->Gegenkonto($ust_befreit, $ustid, $doctype, $doctypeId); - } - switch($ust_befreit) - { - case 0: $tmp['gegenkonto']=$this->Firmendaten("steuer_erloese_inland_normal"); break; - case 1: - if($ustid=="") - { - $tmp['gegenkonto']=$this->Firmendaten("steuer_erloese_inland_eunormal"); - } else { - $tmp['gegenkonto']=$this->Firmendaten("steuer_erloese_inland_innergemeinschaftlich"); - } - break; - case 2: $tmp['gegenkonto']=$this->Firmendaten("steuer_erloese_inland_export"); break; - case 3: $tmp['gegenkonto']=$this->Firmendaten("steuer_erloese_inland_nichtsteuerbar"); break; - default: - //TODO - echo "FEHLER!"; - exit; - } - - if($tmp['gegenkonto']=="") { - $tmp['gegenkonto']=$this->Firmendaten("steuer_standardkonto"); - } - - return $tmp['gegenkonto']; -} - - - - /** - * @deprecated Use the setValue() function in SystemConfigModule instead
- * Retrieve data with the getValue() and tryGetValue() functions
- * Mind the additional namespace parameter - * - * @param string $name - * @param mixed $value - */ - public function SetKonfigurationValue($name,$value) - { - $this->app->DB->Delete( - sprintf( - "DELETE FROM konfiguration WHERE name='%s'", - $name - ) - ); - $this->app->DB->Insert( - sprintf( - "INSERT INTO konfiguration (name,wert,firma,adresse) - VALUES ('%s','%s',%d,%d)", - $name, $value, - isset($this->app->User) && method_exists($this->app->User, 'GetFirma')?$this->app->User->GetFirma():1, - isset($this->app->User) && method_exists($this->app->User, 'GetAdresse')?$this->app->User->GetAdresse():0 - ) - ); - } - - /** - * @deprecated Use the NOT COMPATIBLE setValue() function in SystemConfigModule instead
- * Retrieve data with the getValue() and tryGetValue() functions
- * Mind the additional namespace parameter - * - * @param string $name - * @param bool $dezimal - */ - function SetKonfiguration($name,$dezimal=false) - { - - $this->app->DB->Delete("DELETE FROM konfiguration WHERE name='$name' LIMIT 1"); - - if($dezimal) - $value = str_replace(',','.',$this->app->Secure->GetPOST($name)); - else - $value = $this->app->Secure->GetPOST($name); - - $this->app->DB->Insert("INSERT INTO konfiguration (name,wert,firma,adresse) VALUES ('$name','$value','".$this->app->User->GetFirma()."','".$this->app->User->GetAdresse()."')"); - - } - - /** - * @deprecated Use the tryGetLegacyValue() function in SystemConfigModule instead - * - * @param string $name - * - * @return string|bool - */ - function GetKonfiguration($name) - { - - return $this->app->DB->Select("SELECT wert FROM konfiguration WHERE name='$name' LIMIT 1");// AND firma='".$this->app->User->GetFirma()."' LIMIT 1"); - } - - /** - * @param bool $active - * @param string $type - */ - public function setMaintainance($active = true, $type = 'backup') { - $tags = json_encode('update'); - if(!$active) { - if($this->GetKonfiguration('update_maintenance') == '0') { - return; - } - $this->SetKonfigurationValue('update_maintenance', 0); - $this->SetKonfigurationValue('update_maintenance_mode', ''); - //$this->app->DB->Delete("DELETE FROM notification_message WHERE tags = '$tags'"); - return; - } - - if($type !== 'backup') { - return; //@todo - } - $this->SetKonfigurationValue('update_maintenance_mode', $type); - if($this->GetKonfiguration('update_maintenance') == '1') { - $this->SetKonfigurationValue('update_maintenance_time', time()); - return; - } - - /* - $this->app->DB->Insert( - "INSERT INTO notification_message - (user_id, type, title, message, tags, options_json, priority, created_at) - SELECT u.id, 'warning', - 'laufender Backup-Prozess', - 'Bitte schließen Sie Ihre Aufgaben','$tags','',1,NOW() - FROM `user` AS `u` - INNER JOIN `useronline` AS `uo` on u.id = uo.user_id AND uo.login = 1" - );*/ - - $this->SetKonfigurationValue('update_maintenance_time', time()); - $this->SetKonfigurationValue('update_maintenance', 1); - } - - //@refactor Folgebestaetigung Modul - function Folgebestaetigung($adresse) - { - - $sperre = $this->app->DB->Select("SELECT folgebestaetigungsperre FROM adresse WHERE id='$adresse' LIMIT 1"); - if($sperre=="1") return 1; - - // hole alle freigebeben auftraege - $auftragarr = $this->app->DB->SelectArr("SELECT id,belegnr,ihrebestellnummer,DATE_FORMAT(datum,'%d.%m.%Y') as datum2, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum2, - liefertermin_ok - FROM auftrag WHERE adresse='$adresse' AND status='freigegeben' AND (lager_ok!=1 OR liefertermin_ok!=1) ORDER by lieferdatum"); - - $to = $this->app->DB->Select("SELECT email FROM adresse WHERE id='$adresse' LIMIT 1"); - $to_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' LIMIT 1"); - - for($iauftrag=0;$iauftragapp->DB->Select("SELECT projekt FROM auftrag WHERE id='$auftrag' LIMIT 1"); - $folgebestaetigung = $this->app->DB->Select("SELECT folgebestaetigung FROM projekt WHERE id='$projekt' LIMIT 1"); - if($folgebestaetigung!=1) - continue; - - if($auftragarr[$iauftrag]['lieferdatum2']=="00.00.0000") $auftragarr[$iauftrag]['lieferdatum2'] = $this->app->erp->Beschriftung("dokument_lieferdatum_sofort"); - if($auftragarr[$iauftrag]['liefertermin_ok']!="1") - { - $artikeltabelleliefertermin .= "
-Auftrag ".$auftragarr[$iauftrag]['belegnr']." vom ".$auftragarr[$iauftrag]['datum2']." Bestellung/Kommission: ".$auftragarr[$iauftrag]['ihrebestellnummer']." (geplanter Liefertermin: ".$auftragarr[$iauftrag]['lieferdatum2'].")
"; - } - else { - $artikeltabelle .= "
-Auftrag ".$auftragarr[$iauftrag]['belegnr']." vom ".$auftragarr[$iauftrag]['datum2']." Bestellung/Kommission: ".$auftragarr[$iauftrag]['ihrebestellnummer']." (geplanter Liefertermin: ".$auftragarr[$iauftrag]['lieferdatum2'].")
"; - } - //$to = $this->app->DB->Select("SELECT email FROM auftrag WHERE id='$auftrag' LIMIT 1"); - //$to_name = $this->app->DB->Select("SELECT name FROM auftrag WHERE id='$auftrag' LIMIT 1"); - - $arr = $this->app->DB->SelectArr("SELECT ap.nummer, ap.bezeichnung, ap.menge, (SELECT SUM(lp.menge) FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) as lager, - (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') as reserviert, - if(((SELECT SUM(lp.menge) FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) - (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') - ap.menge)>=0,'', - ((SELECT SUM(lp.menge) FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) - (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') - ap.menge) - ) as fehlend - FROM auftrag_position ap LEFT JOIN artikel a ON a.id=ap.artikel WHERE ap.auftrag='$auftrag' AND a.lagerartikel=1"); - - foreach($arr as $value) - { - $artikel = $value['bezeichnung']; - $nummer = $value['nummer']; - $menge = $value['menge']; - $lager = $value['lager']; - $reserviert= $value['reserviert']; - - if(($lager-$reserviert < $menge) && $auftragarr[$iauftrag]['liefertermin_ok']=="1") - { - $artikeltabelle .= "--Artikel: ".$artikel." (Nummer: $nummer) Menge: ".$menge."
"; - } - else - { - $artikeltabelleliefertermin .= "--Artikel: ".$artikel." (Nummer: $nummer) Menge: ".$menge."
"; - } - } - } - - if($artikeltabelle!="") $artikeltabelle ="Rückstand:

".$artikeltabelle."

"; - if($artikeltabelleliefertermin!="") $artikeltabelle .="Offene Aufträge:

".$artikeltabelleliefertermin; - - $artikeltabelle = $this->ReadyForPDF($artikeltabelle); - - if($artikeltabelle!="") - { - - $text = $this->GetGeschaeftsBriefText('Folgebestaetigung',$sprache, $projekt,"",$auftrag); - $betreff = $this->GetGeschaeftsBriefBetreff('Folgebestaetigung', $sprache,$projekt,"auftrag",$auftrag); - - if($text == "") - { - $text = 'Lieber Kunde, - - anbei übersenden wir Ihnen eine Liste mit den aktuell offenen Aufträgen (Rückstand und Aufträge mit Liefertermin): - - '.$artikeltabelle.' - - Bei Fragen zu Lieferungen wenden Sie sich gerne an unser Kundensupport-Center.'; - - $betreff = "Folgebestätigung für offene Aufträge"; - } else { - $text = str_replace('{ARTIKELTABELLE}',$artikeltabelle,$text); - } - - if($to!="" && $to_name!="") - $this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$to,$to_name,$betreff,$text,"",$projekt); - //echo $text; - } - - } - - - - // prueft datei anhang aus geschaeftsbriefvorlagen, wenn diese fehlen werden die ergänzt - //@refactor Geschaeftsbrief_vorlagen Modul - function GeschaeftsBriefAnhang($subjekt,$sprache="",$projekt="",$dokument="",$dokumentid="") - { - if($dokument!="") - { - $abweichend = $this->app->DB->Select("SELECT abweichendebezeichnung FROM $dokument WHERE id='$dokumentid' LIMIT 1"); - if($abweichend>0 && !preg_match('/_Abweichend/',$subjekt)) - { - $idvorlage = $this->GetGeschaeftsBriefID($subjekt."_Abweichend",$sprache,$projekt); - } - } - - - if($idvorlage <=0) - $idvorlage = $this->GetGeschaeftsBriefID($subjekt,$sprache,$projekt); - - $stichwoerter = $this->app->DB->SelectArr("SELECT * FROM datei_stichwoerter WHERE objekt='geschaeftsbrief_vorlagen' AND parameter='$idvorlage' AND parameter > 0"); - $cstichwoerter = !empty($stichwoerter)?count($stichwoerter):0; - $tmpresult = array(); - for($i=0;$i<$cstichwoerter;$i++) - { - $check = $this->app->DB->Select("SELECT id FROM datei_stichwoerter WHERE datei='".$stichwoerter[$i]['datei']."' AND objekt LIKE '$subjekt' AND parameter='$dokumentid' LIMIT 1"); - if($check<=0) - { - if($dokument!="") - { - $this->app->DB->Insert("INSERT INTO datei_stichwoerter (id,datei,subjekt,objekt,parameter) VALUES ('','".$stichwoerter[$i]['datei']."','".$stichwoerter[$i]['subjekt']."','$subjekt',$dokumentid)"); - } else { - $tmpresult[] = $stichwoerter[$i]['datei']; - } - } - } - return $tmpresult; - } - - - //@refactor Geschaeftsbrief_vorlagen Modul - function GetGeschaeftsBriefText($subjekt,$sprache='',$projekt='',$dokument='',$dokumentid=0) - { - $abweichend = $this->app->DB->Select("SELECT abweichendebezeichnung FROM $dokument WHERE id='$dokumentid' LIMIT 1"); - if($abweichend>0 && !preg_match('/_Abweichend/',$subjekt)) - { - $text = $this->GetGeschaeftsBriefText($subjekt."_Abweichend",$sprache,$projekt,$dokument,$dokumentid); - }else{ - $text = ''; - } - - - - if($text=='') - { - if($sprache==''){ - $sprache = 'deutsch'; - } - - if($projekt > 0){ - $text = $this->app->DB->Select("SELECT text FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' AND projekt='$projekt' LIMIT 1"); - } - - if($text == ''){ - $text = $this->app->DB->Select("SELECT text FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' AND (projekt='0' OR projekt='') LIMIT 1"); - } - - if($text == ''){ - $text = $this->app->DB->Select("SELECT text FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' LIMIT 1"); - } - - if($text == ''){ - $text = $this->app->DB->Select("SELECT text FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' LIMIT 1"); - } - } - - $text = str_replace('{FIRMA}',$this->Firmendaten("name"),$text); - - return $text; - } - - //@refactor Geschaeftsbrief_vorlagen Modul - function GetGeschaeftsBriefBetreff($subjekt,$sprache="",$projekt="",$dokument="",$dokumentid=0) - { - - $abweichend = $this->app->DB->Select("SELECT abweichendebezeichnung FROM $dokument WHERE id='$dokumentid' LIMIT 1"); - if($abweichend>0 && !preg_match('/_Abweichend/',$subjekt)) - { - $text = $this->GetGeschaeftsBriefBetreff($subjekt."_Abweichend",$sprache,$projekt,$dokument,$dokumentid); - } - - if($text=="") - { - if($sprache=="") - $sprache = "deutsch"; - - if($projekt > 0) - $text = $this->app->DB->Select("SELECT betreff FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' AND projekt='$projekt' LIMIT 1"); - - if($text == "") - $text = $this->app->DB->Select("SELECT betreff FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' AND (projekt='0' OR projekt='') LIMIT 1"); - - if($text == "") - $text = $this->app->DB->Select("SELECT betreff FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' LIMIT 1"); - - if($text == "") - $text = $this->app->DB->Select("SELECT betreff FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' LIMIT 1"); - } - - $text = str_replace('{FIRMA}',$this->Firmendaten("name"),$text); - return $text; - } - - //@refactor Geschaeftsbrief_vorlagen Modul - function GetGeschaeftsBriefID($subjekt,$sprache="",$projekt="") - { - - if($sprache=="") - $sprache = "deutsch"; - - if($projekt > 0) - $id = $this->app->DB->Select("SELECT id FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' AND projekt='$projekt' LIMIT 1"); - - if($id == "") - $id = $this->app->DB->Select("SELECT id FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' AND (projekt='0' OR projekt='') LIMIT 1"); - - if($id == "") - $id = $this->app->DB->Select("SELECT id FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' LIMIT 1"); - - if($id == "") - $text = $this->app->DB->Select("SELECT id FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' LIMIT 1"); - - return $id; - } - - - - public function Stornomail($auftrag) - { - if($auftrag > 0){ - $auftragarr = $this->app->DB->SelectRow("SELECT adresse,projekt,email,name,belegnr,keinestornomail,sprache FROM auftrag WHERE id='$auftrag' LIMIT 1"); - } - if(empty($auftragarr)) - { - return; - } - $adresse = $auftragarr['adresse']; - $projekt = $auftragarr['projekt']; - $stornomail = $this->app->DB->Select("SELECT stornomail FROM projekt WHERE id='$projekt' LIMIT 1"); - - // KEINE STORNOMAIL - if($stornomail!=1){ - return; - } - - $to = $auftragarr['email']; - $to_name = $auftragarr['name']; - - $parameter = $auftrag; - - $belegnr = $auftragarr['belegnr']; - $keinestornomail = $auftragarr['keinestornomail']; - - if($belegnr !='' && $keinestornomail==0) - { - $sprache = $auftragarr['sprache']; - if($sprache == '') - { - //$adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$auftrag' LIMIT 1"); - if($adresse > 0){ - $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id = '$adresse' LIMIT 1"); - } - if($sprache == ''){ - $sprache = 'deutsch'; - } - } - - $text = $this->GetGeschaeftsBriefText('Stornierung',$sprache, $projekt,"",$auftrag); - $betreff = $this->GetGeschaeftsBriefBetreff('Stornierung', $sprache,$projekt,"auftrag",$auftrag); - - if($sprache != 'deutsch' && ($text == '' || $betreff == '')) - { - $text = $this->GetGeschaeftsBriefText('Stornierung','deutsch',$projekt,"auftrag",$auftrag); - $betreff = $this->GetGeschaeftsBriefBetreff('Stornierung','deutsch',$projekt,"auftrag",$auftrag); - } - - $text = $this->ParseUserVars('auftrag',$auftrag,$text); - $betreff = $this->ParseUserVars('auftrag',$auftrag,$betreff); - - if($to!='' && $to_name!=''){ - $this->MailSend($this->GetFirmaMail(), $this->GetFirmaAbsender(), $to, $to_name, $betreff, $text, "", $projekt); - } - } - } - - public function ExportlinkZahlungsmail() - { - $exports = $this->app->DB->SelectArr("SELECT * FROM exportlink_sent WHERE mail='0'"); - $cexports = !empty($exports)?count($exports):0; - for($i=0;$i<$cexports;$i++) - //for($i=0;$i<5;$i++) - { - // mail - $adresse = $exports[$i]['adresse']; - $reg= $exports[$i]['reg']; - $artikelid = $exports[$i]['objekt']; - - $to = $this->app->DB->Select("SELECT email FROM adresse WHERE id='$adresse' LIMIT 1"); - $to_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' LIMIT 1"); - $artikel = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikelid' LIMIT 1"); - $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id = '$adresse' LIMIT 1"); - if($sprache == '')$sprache = 'deutsch'; - $projekt=1; - - $text = $this->GetGeschaeftsBriefText('AlternativArtikel',$sprache, $projekt); - $betreff = $this->GetGeschaeftsBriefBetreff('AlternativArtikel', $sprache,$projekt); - - if($sprache != 'deutsch' && ($text == '' || $betreff == '')) - { - $text = $this->GetGeschaeftsBriefText('AlternativArtikel','deutsch',$projekt); - $betreff = $this->GetGeschaeftsBriefBetreff('AlternativArtikel','deutsch',$projekt); - } - - $betreff = str_replace('[ARTIKEL]',$artikel,$betreff); - $text= str_replace('[ARTIKEL]',$artikel,$text); - $text = str_replace('[AUFTRAG]',$auftrag,$text); - - $text = str_replace('[REG]',$reg,$text); - - - $this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$to,$to_name,$betreff,$text,"",$projekt); - echo $to_name." <".$to.">\r\n"; - - $this->app->DB->Update("UPDATE exportlink_sent SET mail=1 WHERE reg='$reg' LIMIT 1"); - - } - } - - - public function AuftragZahlungsmail($id='',$force=0) - { - if(!is_numeric($id)){ - $id = $this->app->Secure->GetGET('id'); - } - else { - $intern=1; - } - if($id > 0) - { - $auftragarr = $this->app->DB->SelectRow("SELECT belegnr,adresse,gesamtsumme,projekt FROM auftrag WHERE id='$id' LIMIT 1"); - } - if(!empty($auftragarr)){ - - $belegnr = $auftragarr['belegnr']; - $adresse = $auftragarr['adresse']; - - $summeimauftrag = 0; - $auftragssumme = $auftragarr['gesamtsumme']; - $projekt = $auftragarr['projekt']; - if($projekt > 0 && $auftragssumme > 0){ - $projektarr = $this->app->DB->SelectRow("SELECT zahlungserinnerung,zahlungsmailbedinungen FROM projekt WHERE id='$projekt' LIMIT 1"); - } - if(!empty($projektarr)) - { - $zahlungsmail = $projektarr['zahlungserinnerung']; - if($zahlungsmail){ - $zahlungsmailbedinungen = $projektarr['zahlungsmailbedinungen']; - - // sind vorbedingungen erfuellt? - $vorbedinungen = 0; - - - if(preg_match('/lager_ok/', $zahlungsmailbedinungen)){ - $lager_ok = $this->app->DB->Select("SELECT lager_ok FROM auftrag WHERE id='$id' LIMIT 1"); - if($lager_ok == 0) - $vorbedinungen++; - } - - // Kundencheck - if(preg_match('/check_ok/', $zahlungsmailbedinungen)){ - $check_ok = $this->app->DB->Select("SELECT check_ok FROM auftrag WHERE id='$id' LIMIT 1"); - if($check_ok == 0) - $vorbedinungen++; - } - - //echo "zahlungsmail $zahlungsmail $vorbedinungen $auftragssumme $belegnr\r\n "; - if(($zahlungsmail > 0) && ($vorbedinungen == 0) && ($auftragssumme > 0) && ($id > 0)){ - //echo "verschickt"; - $this->Zahlungsmail($adresse, $auftragssumme - $summeimauftrag, $id, $force); - } - } - } - } - - if($intern!=1) - { - header("Location: index.php?module=auftrag&action=edit&id=$id"); - exit; - } - } - - - function KalenderMail($event,$betreff="",$text="",$emailcc="") - { - /** @var Kalender $obj */ - $obj = $this->LoadModul('kalender'); - if(!empty($obj) && method_exists($obj,'KalenderMail')) - { - return $obj->KalenderMail($event,$betreff,$text,$emailcc); - } - } - - - function AufgabenMail($aufgabe,$vorabankuendigung=false) - { - /** @var Aufgaben $obj */ - $obj = $this->LoadModul('aufgaben'); - if(!empty($obj) && method_exists($obj,'sendAufgabenMail')) - { - return $obj->sendAufgabenMail($aufgabe,$vorabankuendigung); - } - } - - - function Zahlungsmail($adresse,$rest="",$auftragid="",$force=0) - { - if(!is_numeric($auftragid)) - return; - - $to = $this->app->DB->Select("SELECT email FROM auftrag WHERE id='$auftragid' LIMIT 1"); - $to_name = $this->app->DB->Select("SELECT name FROM auftrag WHERE id='$auftragid' LIMIT 1"); - - //$to = ""; //DEBUG - $belegnr = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$auftragid' LIMIT 1"); - $internetnummer = $this->app->DB->Select("SELECT internet FROM auftrag WHERE id='$auftragid' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$auftragid' LIMIT 1"); - $zahlungsmail = $this->app->DB->Select("SELECT zahlungserinnerung FROM projekt WHERE id='$projekt' LIMIT 1"); - $zahlungsmailcounter = (int)$this->app->DB->Select("SELECT zahlungsmailcounter FROM auftrag WHERE id='$auftragid' LIMIT 1"); - $check_adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$auftragid' LIMIT 1"); - - $sprache = $this->app->DB->Select("SELECT sprache FROM auftrag WHERE id = '$auftragid' LIMIT 1"); - if($sprache == '') - { - $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$auftragid' LIMIT 1"); - $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id = '$adresse' LIMIT 1"); - if($sprache == '')$sprache = 'deutsch'; - } - // wenn der auftrag dem Kunden nicht gehört - //if($adresse!=$check_adresse) return; - - $gesamt = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftragid' LIMIT 1"); - $zahlungok = false; - if($rest!="") - { - - //Falls projekt mail vorhanden sonst globalen firmen standard - if($gesamt-$rest==0) - { - $text = $this->GetGeschaeftsBriefText('ZahlungMiss',$sprache,$projekt,"auftrag",$auftragid); - $betreff = $this->GetGeschaeftsBriefBetreff('ZahlungMiss',$sprache,$projekt,"auftrag",$auftragid); - if($sprache != 'deutsch' && ($text == '' || $betreff == '')) - { - $text = $this->GetGeschaeftsBriefText('ZahlungMiss','deutsch',$projekt,"auftrag",$auftragid); - $betreff = $this->GetGeschaeftsBriefBetreff('ZahlungMiss','deutsch',$projekt,"auftrag",$auftragid); - } - } else { - $text = $this->GetGeschaeftsBriefText('ZahlungDiff',$sprache,$projekt,"auftrag",$auftragid); - $betreff = $this->GetGeschaeftsBriefBetreff('ZahlungDiff',$sprache,$projekt,"auftrag",$auftragid); - if($sprache != 'deutsch' && ($text == '' || $betreff == '')) - { - $text = $this->GetGeschaeftsBriefText('ZahlungDiff','deutsch',$projekt,"auftrag",$auftragid); - $betreff = $this->GetGeschaeftsBriefBetreff('ZahlungDiff','deutsch',$projekt,"auftrag",$auftragid); - } - } - - $rest = number_format($rest, 2, ',', '.'); - - $text= str_replace('{REST}',$rest,$text); - $betreff = str_replace('{FIRMA}',$this->Firmendaten("name"),$betreff); - $text = str_replace('{FIRMA}',$this->Firmendaten("name"),$text); - - - - if($internetnummer>0) - $text= str_replace('{AUFTRAG}',$internetnummer,$text); - else - $text= str_replace('{AUFTRAG}',$belegnr,$text); - - $text= str_replace('{INTERNET}',$internetnummer,$text); - - $text= str_replace('{GESAMT}',$this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftragid' LIMIT 1"),$text); - $gesamtsummecheck = $rest; - $text= str_replace('{DATUM}',$this->app->DB->Select("SELECT DATE_FORMAT(datum,'%d.%m.%Y') FROM auftrag WHERE id='$auftragid' LIMIT 1"),$text); - - } else - { - //TODO nette mail wenn kunde keine vorkasse macht, warum er das nicht macht etc. - $zahlungok = true; - $text = $this->GetGeschaeftsBriefText('ZahlungOK',$sprache,$projekt,"auftrag",$auftragid); - $betreff = $this->GetGeschaeftsBriefBetreff('ZahlungOK',$sprache,$projekt); - if($sprache != 'deutsch' && ($text == '' || $betreff == '')) - { - $text = $this->GetGeschaeftsBriefText('ZahlungOK','deutsch',$projekt,"auftrag",$auftragid); - $betreff = $this->GetGeschaeftsBriefBetreff('ZahlungOK','deutsch',$projekt,"auftrag",$auftragid); - } - - $gesamtsumme = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftragid' LIMIT 1"); - - $text= str_replace('{AUFTRAG}',$belegnr,$text); - $betreff= str_replace('{AUFTRAG}',$belegnr,$betreff); - $text= str_replace('{GESAMT}',$gesamtsumme,$text); - $betreff= str_replace('{GESAMT}',$gesamtsumme,$betreff); - $gesamtsummecheck = $gesamtsumme; - $text= str_replace('{DATUM}',$this->app->DB->Select("SELECT DATE_FORMAT(datum,'%d.%m.%Y') FROM kontoauszuege_zahlungseingang WHERE objekt='auftrag' AND parameter='$auftragid' LIMIT 1"),$text); - $betreff= str_replace('{DATUM}',$this->app->DB->Select("SELECT DATE_FORMAT(datum,'%d.%m.%Y') FROM kontoauszuege_zahlungseingang WHERE objekt='auftrag' AND parameter='$auftragid' LIMIT 1"),$betreff); - $zahlungok = true; - } - - $text = $this->ParseUserVars("auftrag",$auftragid,$text); - $betreff = $this->ParseUserVars("auftrag",$auftragid,$betreff); - - $mahnwesen_erinnerungsmail = (String)$this->app->erp->GetKonfiguration("mahnwesen_erinnerungsmail"); - if($mahnwesen_erinnerungsmail === '') - { - $mahnwesen_erinnerungsmail = 1; - } - $mahnwesen_klaerungsmail = (String)$this->app->erp->GetKonfiguration("mahnwesen_klaerungsmail"); - if($mahnwesen_klaerungsmail === '') - { - $mahnwesen_klaerungsmail = 1; - } - $mahnwesen_skontomail = (String)$this->app->erp->GetKonfiguration("mahnwesen_skontomail"); - if($mahnwesen_skontomail === '') - { - $mahnwesen_skontomail = 1; - } - - $mahnwesen_zahlungserinnerungtage = (String)$this->app->erp->GetKonfiguration("mahnwesen_zahlungserinnerungtage"); - if($mahnwesen_zahlungserinnerungtage === '') - { - $mahnwesen_zahlungserinnerungtage = 6; - } - $mahnwesen_klaerungsmailtage = (String)$this->app->erp->GetKonfiguration("mahnwesen_klaerungsmailtage"); - if($mahnwesen_klaerungsmailtage === '') - { - $mahnwesen_klaerungsmailtage = 11; - } - - $zahlungsmailauftrag = $this->app->DB->Select("SELECT zahlungsmail FROM auftrag WHERE id='$auftragid' LIMIT 1"); - - if($zahlungsmailauftrag=="") $zahlungsmailauftrag = "0000-00-00"; - - if($zahlungsmailauftrag == "0000-00-00") { - $tmpzahlungsmailauftrag = $this->app->DB->Select("SELECT datum FROM auftrag WHERE id='$auftragid' LIMIT 1"); - } else { - $tmpzahlungsmailauftrag = $zahlungsmailauftrag; - } - - //$tage = ceil((mktime($zahlungsmailauftrag) - time())/60/60/24); - $tage = $this->app->DB->Select("SELECT DATEDIFF(NOW(),'$tmpzahlungsmailauftrag')"); - $schwelle = (String)$this->app->erp->GetKonfiguration("mahnwesen_schwelle"); - if($schwelle === '') - { - $schwelle = 1; - } - $schwelle = (float)str_replace(',','.',$schwelle); - if($schwelle < 0)$schwelle = 0; - - if( - $to!="" && - $to_name!="" && - $zahlungsmail=="1" && - ( - $tage > $mahnwesen_klaerungsmailtage || - $tage > $mahnwesen_zahlungserinnerungtage || - $tmpzahlungsmailauftrag=="0000-00-00" || - ($zahlungok && $zahlungsmailauftrag != '00000-00-00') || - $force==1 - ) - ) - { - $zahlungsmailcounter++; - $this->app->DB->Update("UPDATE auftrag SET zahlungsmail=NOW(),zahlungsmailcounter='$zahlungsmailcounter' WHERE id='$auftragid' LIMIT 1"); - // wenn differenz groesser als ein EUR - if($gesamtsummecheck>=$schwelle)// && $zahlungsmailcounter > 1) - { - if($zahlungok && $zahlungsmailauftrag != '00000-00-00')$zahlungsmailcounter--; - if($zahlungsmailcounter<2) - { - if($mahnwesen_erinnerungsmail){ - $this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$to,$to_name,$betreff,$text,"",$projekt); - $this->DokumentCreateQuick($adresse,$betreff,$text,$projekt); - } - } - // automatisch Reservierungen entfernen - elseif(!$zahlungok) { - if($tage > $mahnwesen_klaerungsmailtage) { - if($mahnwesen_klaerungsmail){ - $this->MailSend($this->GetFirmaMail(), $this->GetFirmaAbsender(), - $this->GetFirmaMail(), "Buchhaltung", "Meldung fuer Buchhaltung: Offenen Auftrag $belegnr klären oder stornieren", $text, "", $projekt); - } - $this->app->DB->Update("UPDATE auftrag SET zahlungsmail=NOW(),zahlungsmailcounter='3' WHERE id='$auftragid' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE auftrag SET zahlungsmail=NOW(),zahlungsmailcounter='1' WHERE id='$auftragid' LIMIT 1"); - } - } - } - else { - if($mahnwesen_skontomail)$this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$this->GetFirmaMail(),"Buchhaltung","Meldung fuer Buchhaltung: Bitte Skonto geben",$text,"",$projekt); - } - } - - } - - - public function Rechnungsmail($id, $fromautoversand = true) - { - if(!$id){ - return; - } - - $rechnungarr = $this->app->DB->SelectRow( - "SELECT adresse, email, name,belegnr,projekt,sprache,schreibschutz,zuarchivieren - FROM rechnung WHERE id='$id' LIMIT 1" - ); - if(empty($rechnungarr)) { - return; - } - if(!empty($rechnungarr['schreibschutz']) && !empty($rechnungarr['zuarchivieren'])) { - $this->app->erp->PDFArchivieren('rechnung', $id, true); - } - $adresse = $rechnungarr['adresse']; - $to = $rechnungarr['email']; - $to_name = $rechnungarr['name']; - $belegnr = $rechnungarr['belegnr']; - $projekt = $rechnungarr['projekt']; - - $sprache = $rechnungarr['sprache']; - if($sprache=='' && $adresse > 0) { - $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1"); - } - - if($sprache==''){ - $sprache='deutsch'; - } - - $text = $this->GetGeschaeftsBriefText('Rechnung',$sprache,$projekt,"rechnung",$id); - $betreff = $this->GetGeschaeftsBriefBetreff('Rechnung',$sprache,$projekt,"rechnung",$id); - $this->GeschaeftsBriefAnhang('Rechnung',$sprache,$projekt,"rechnung",$id); - if((String)$text === '' && $sprache !== 'deutsch') - { - $sprache = 'deutsch'; - $text = $this->GetGeschaeftsBriefText('Rechnung',$sprache,$projekt,"rechnung",$id); - $betreff = $this->GetGeschaeftsBriefBetreff('Rechnung',$sprache,$projekt,"rechnung",$id); - } - - $text = $this->ParseUserVars('rechnung',$id,$text); // heute mal wieder rein 21.12.2017 BS - $betreff = $this->ParseUserVars('rechnung',$id,$betreff); // 19.01.2018 eingefuegt BW - if($id > 0) - { - $this->app->erp->BriefpapierHintergrunddisable = false; - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projekt); - }else{ - $Brief = new RechnungPDF($this->app,$projekt); - } - $Brief->GetRechnung($id); - $arrtmpfile[] = $Brief->displayTMP(); - - if(!$Brief->DocumentArchiviert()) { - $Brief->ArchiviereDocument(true, true); - } - - $md5arr[] = @md5_file($arrtmpfile[count($arrtmpfile)-1]); - // anhaenge automatisch mitversenden - $resultdateien = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE objekt LIKE 'Rechnung' AND parameter='$id'"); - $cResultdateien = !empty($resultdateien)?count($resultdateien):0; - for($ri=0;$ri<$cResultdateien;$ri++) - { - $dateiname = str_replace(' ','_',$this->app->erp->GetDateiName($resultdateien[$ri]['datei'])); - if($dateiname) - { - $dateiinhalt = $this->app->erp->GetDatei($resultdateien[$ri]['datei']); - if($handle = fopen (rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname, "wb")) - { - fwrite($handle, $dateiinhalt); - fclose($handle); - if(!in_array(rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname, $arrtmpfile)) - { - $md5tmp = @md5_file(rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname); - if(!in_array($md5tmp, $md5arr)) - { - $md5arr[] = $md5tmp; - $arrtmpfile[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname; - } - } - } - } - } - - //$this->DokumentSendShow(TAB1,"rechnung",$rechnung,$adresse); - // temp datei wieder loeschen - - if($to != '') - { - $result = $this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$to,$to_name,$betreff,$text,$arrtmpfile,$projekt); - $this->DokumentCreateQuick($adresse,$betreff,$text,$projekt); - }else{ - $result = false; - } - //$tmpfilearray = array($arrtmpfile); - $this->RunHook('rechnungsmail',5, $id,$betreff,$text,$arrtmpfile, $fromautoversand); - $rechnung_cc = $this->app->DB->Select("SELECT rechnung_cc FROM adresse WHERE id = '$adresse' LIMIT 1"); - if($rechnung_cc != '') - { - $this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$rechnung_cc,$to_name,$betreff,$text,$arrtmpfile,$projekt); - } - - foreach($arrtmpfile as $key=>$_tmpfile) { - unlink($_tmpfile); - } - - $betreff = $this->app->DB->real_escape_string($betreff); - $text = $this->app->DB->real_escape_string($text); - $to_name = $this->app->DB->real_escape_string($to_name); - // als versendet markieren - $this->closeInvoice($id); - //$this->app->DB->Update("UPDATE rechnung SET status='versendet', versendet='1',schreibschutz='1' WHERE id='$id' LIMIT 1"); - if($result) - { - $this->RechnungProtokoll($id,'Rechnung versendet'); - - $betreff = $this->app->DB->real_escape_string($betreff); - $text = $this->app->DB->real_escape_string($text); - $to_name = $this->app->DB->real_escape_string($to_name); - // als versendet markieren - $this->app->DB->Update("UPDATE rechnung SET versendet='1',schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE rechnung SET status='versendet' WHERE status!='storniert' AND id='$id' LIMIT 1"); - - $this->app->DB->Insert("INSERT INTO dokumente_send - (dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet,dateiid) VALUES ('rechnung',NOW(),'".$this->app->User->GetName()."', - '$adresse','$id','email','$betreff','$text','$projekt','$to_name',1,'0')"); - } - } - } - - public function closeInvoice($invoiceId, $status = '') - { - $invoiceArr = $this->app->DB->SelectRow(sprintf('SELECT status FROM rechnung WHERE id = %d', $invoiceId)); - if(empty($invoiceArr) || (!empty($status) && $status !== $invoiceArr['status'])) - { - return; - } - if($invoiceArr['status'] !== 'versendet') - { - $this->RunHook('closeInvoice',1, $invoiceId); - } - $this->app->DB->Update(sprintf("UPDATE rechnung SET versendet=1,schreibschutz=1 WHERE id=%d LIMIT 1",$invoiceId)); - $this->app->DB->Update(sprintf("UPDATE rechnung SET status='versendet' WHERE status!='storniert' AND id=%d LIMIT 1",$invoiceId)); - } - - function DokumentAbschicken() - { - $id = $this->app->Secure->GetGET('id'); - $cmd = $this->app->Secure->GetGET("cmd"); - $sid = $this->app->Secure->GetGET("sid"); - - $type = $this->app->Secure->GetGET("type"); - if($cmd=="getvorlage") - { - $doc = $this->app->DB->SelectRow("SELECT sprache, projekt, abweichendebezeichnung FROM $type WHERE id='$sid' LIMIT 1"); - $data = $this->app->erp->Geschaeftsbriefvorlage($doc['sprache'],$type,$doc['projekt'],"Angebot".($doc['abweichendebezeichnung']=="1"?'_Abweichend':''),$sid); - - $footer = $this->Grussformel($doc['projekt'],$doc['sprache']); - if($footer!="") $data['text'] = $data['text']."\r\n".$footer; - - - if(!empty($data)) - { - echo json_encode(array('subject'=>$data['betreff'],'body'=>$data['text'],'status'=>1)); - } else { - echo json_encode(array('status'=>0)); - } - $this->app->ExitXentral(); - } - - $frame = $this->app->Secure->GetGET('frame'); - - $typ = $this->app->Secure->GetGET('module'); - if($frame!='') - { - echo ""; - $this->app->ExitXentral(); - } - - $this->app->BuildNavigation=false; - $this->app->Tpl->Set('TABTEXT',"Abschicken"); - $docRow = $this->app->DB->SelectRow( - sprintf( - 'SELECT status, adresse, projekt FROM `%s` WHERE id=%d LIMIT 1', - $typ, (int)$id - ) - ); - $status = $docRow['status']; - $adresse = $docRow['adresse']; - $projekt = $docRow['projekt']; - - if($projekt=='' || $projekt==0){ - $projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$adresse' LIMIT 1"); - } - - if($status !=='angelegt') - { - $this->DokumentMask('TAB1',$typ,$id,$adresse,$projekt); - } else - { - switch($typ) - { - case "rechnung": $this->app->Tpl->Set('TAB1',"
Die Rechnung wurde noch nicht freigegeben!
"); break; - case "angebot": $this->app->Tpl->Set('TAB1',"
Das Angebot wurde noch nicht freigegeben!
"); break; - case "auftrag": $this->app->Tpl->Set('TAB1',"
Der Auftrag wurde noch nicht freigegeben!
"); break; - case "lieferschein": $this->app->Tpl->Set('TAB1',"
Der Lieferschein wurde noch nicht freigegeben!
"); break; - case "retoure": $this->app->Tpl->Set('TAB1',"
Die Retoure wurde noch nicht freigegeben!
"); break; - case "bestellung": $this->app->Tpl->Set('TAB1',"
Die Bestellung wurde noch nicht freigegeben!
"); break; - case "gutschrift": $this->app->Tpl->Set('TAB1',"
Die Gutschrift wurde noch nicht freigegeben!
"); break; - case "arbeitsnachweis": $this->app->Tpl->Set('TAB1',"
Der Arbeitsnachweis wurde noch nicht freigegeben!
"); break; - case "preisanfrage": $this->app->Tpl->Set('TAB1',"
Die Preisanfrage wurde noch nicht freigegeben!
"); break; - case "proformarechnung": $this->app->Tpl->Set('TAB1',"
Die Proformarechnung wurde noch nicht freigegeben!
"); break; - case "produktion": $this->app->Tpl->Set('TAB1',"
Die Produktion wurde noch nicht freigegeben!
"); break; - } - $target = 'TAB1'; - $this->RunHook('DokumentAbschickenMeldungAngelegt', 3, $typ, $id, $target); - } - $this->app->Tpl->Set('ID',$id); - $this->app->Tpl->Parse('PAGE','emptytab.tpl'); - } - - /** - * @param int $id - * - * @return string - * - */ - public function GetTrackingRawLink($id) - { - return $this->GetTrackinglink($id, true); - } - - /** - * @param int $id - * @param bool $returnRaw - * - * @return string - */ - public function GetTrackinglink($id, $returnRaw = false) - { - if($id > 0) - { - $versandarr = $this->app->DB->SelectRow("SELECT * FROM versand WHERE id='$id' LIMIT 1"); - } - if(empty($versandarr)) - { - return ''; - } - $adresse = $versandarr['adresse']; - $lieferscheinid = $versandarr['lieferschein']; - if($lieferscheinid > 0){ - $lieferscheinarr = $this->app->DB->SelectRow("SELECT auftragid,projekt FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1"); - } - if(!empty($lieferscheinarr)) - { - $auftrag = $lieferscheinarr['auftragid']; - $projekt = $lieferscheinarr['projekt']; - }else{ - $auftrag = 0; - $projekt = 0; - } - $auftragarr = $this->app->DB->SelectRow("SELECT belegnr,internet,ihrebestellnummer,DATE_FORMAT(datum,'%d.%m.%Y') as datum_de FROM auftrag WHERE id='$auftrag' LIMIT 1"); - if(!empty($auftragarr)){ - $auftragbelegnr = $auftragarr['belegnr']; - $auftraginternet = $auftragarr['internet']; - $ihrebestellnummer = $auftragarr['ihrebestellnummer']; - $auftragdatum = $auftragarr['datum_de']; - }else{ - $auftragbelegnr = ''; - $auftraginternet = ''; - $ihrebestellnummer = ''; - $auftragdatum = ''; - } - - $tracking = $versandarr['tracking']; - $versandunternehmen = $versandarr['versandunternehmen']; - - // FIX fuer selbstabholer Mail - $versandart = $versandarr['versandart']; - if($versandart=='selbstabholer') { - $versandunternehmen='selbstabholer'; - } - - if($versandunternehmen=='dhl' || $versandunternehmen=="dhlpremium" || $versandunternehmen=="intraship"){ - $versandmodul = false; - } - - $typ = $versandunternehmen; - if($typ === ''){ - $typ = $versandart; - } - //$versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul FROM versanddienstleister WHERE aktiv = 1 AND modul = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); - $versandartenmodul = $this->app->DB->SelectArr("SELECT * FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND modul != '' AND type = '".$this->app->DB->real_escape_string($typ)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); - $standard = true; - if($versandartenmodul && @is_file(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) - { - $obj = $this->LoadVersandModul($versandartenmodul[0]['modul'], $versandartenmodul[0]['id']); - if(!empty($obj) && method_exists($obj, 'Trackinglink')) - { - if($obj->Trackinglink($tracking, $notsend, $link, $rawlink)) - { - if($returnRaw) { - return $rawlink; - } - return $link; - } - } - }elseif($versandartenmodul2 = $this->app->DB->SelectArr("SELECT * FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND type = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1")) - { - $obj = $this->LoadVersandModul($versandartenmodul2[0]['modul'], $versandartenmodul2[0]['id']); - if(!empty($obj) && method_exists($obj, 'Trackinglink')) - { - if($obj->Trackinglink($tracking, $notsend, $link, $rawlink)) - { - if($returnRaw) { - return $rawlink; - } - return $link; - } - } - } - if(!$versandmodul && $standard) - { - if($versandunternehmen=="dhl" || $versandunternehmen=="dhlpremium" || $versandunternehmen=="intraship") - { - return 'http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc='.$tracking; - } - else if ($versandunternehmen=="logoix") - { - return 'http://www.logoix.com/cgi-bin/tnt.pl?q='.$tracking; - } - else if ($versandunternehmen=="dpd") - { - return 'https://tracking.dpd.de/parcelstatus/?locale=de_DE&query='.$tracking; - } - else if ($versandunternehmen=="gls") - { - return 'https://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DE03/DE/5004.htm?txtRefNo='.$tracking; - } - } - } - - /** - * @param int $id - */ - public function VersandAbschluss($id) - { - if($id > 0) { - $versandarr = $this->app->DB->SelectRow("SELECT * FROM versand WHERE id='$id' LIMIT 1"); - } - if(empty($versandarr)) { - return; - } - $adresse = $versandarr['adresse']; - $lieferscheinid = $versandarr['lieferschein']; - $rechnung = $versandarr['rechnung']; - - $rechnungarr = $rechnung <=0?null: $this->app->DB->SelectRow( - "SELECT zahlungsweise,projekt FROM rechnung WHERE id='$rechnung' LIMIT 1" - ); - - $rechnung_zahlweise = empty($rechnungarr)?'':$rechnungarr['zahlungsweise']; - $rechnung_projekt = empty($rechnungarr)?0:$rechnungarr['projekt']; - - $lieferscheinarr = $lieferscheinid <= 0?null: $this->app->DB->SelectRow( - "SELECT auftragid,projekt FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1" - ); - - $auftrag = empty($lieferscheinarr)?0: $this->app->DB->Select( - "SELECT auftragid FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1" - ); - - $auftragarr = $auftrag <= 0?null:$this->app->DB->SelectRow( - "SELECT * FROM auftrag WHERE id='$auftrag' LIMIT 1" - ); - - if(!$rechnung && $auftrag) { - //Fallback Zahlungsweise auf Auftrag - $rechnung_zahlweise = $auftragarr['zahlungsweise']; - $rechnung_projekt = $auftragarr['projekt']; - } - - $auftragbelegnr = empty($auftragarr)?'': $auftragarr['belegnr']; - $auftraginternet = empty($auftragarr)?'':$auftragarr['internet']; - $ihrebestellnummer = empty($auftragarr)?'':$auftragarr['ihrebestellnummer']; - - $projekt = empty($lieferscheinarr)?0: $lieferscheinarr['projekt']; - - // wenn shop dann rueckmelden - $shop = empty($auftragarr)?0:$auftragarr['shop']; - - $auftragabgleich = $shop <= 0?0: $this->app->DB->Select( - "SELECT auftragabgleich FROM shopexport WHERE id='$shop' LIMIT 1" - ); - - //Reservierungen löschen - if($lieferscheinid>0) { - $this->app->DB->Delete( - "DELETE FROM lager_reserviert WHERE objekt='lieferschein' AND parameter='$lieferscheinid'" - ); - } - if($auftrag <= 0) { - return; - } - - $this->app->DB->Delete( - "DELETE FROM lager_reserviert WHERE objekt='auftrag' AND parameter='$auftrag'" - ); - - if($shop > 0 && $auftragabgleich=='1') { - try { - $this->app->remote->RemoteUpdateAuftrag($shop, $auftrag); - } - catch(Exception $e) { - $this->AuftragProtokoll($auftag, 'Shoprückmeldung fehlgeschlagen'); - } - } - - try { - $this->sendPaymentStatus($id, $rechnung_zahlweise, $auftrag, $projekt, $rechnung_projekt); - } - catch(Exception $e) { - - } - } - - /** - * @param int $id VersandId - * @param string|null $rechnung_zahlweise - * @param int|null $auftrag - * @param int|null $projekt DeliveryNote ProjectId - * @param int|null $rechnung_projekt - */ - public function sendPaymentStatus( - $id, - $rechnung_zahlweise = null, - $auftrag = null, - $projekt = null, - $rechnung_projekt = null - ) - { - if($auftrag === null) { - $versandarr = $this->app->DB->SelectRow( - sprintf( - 'SELECT rechnung,lieferschein FROM versand WHERE id = %d', - $id - ) - ); - $lieferscheinid = $versandarr['lieferschein']; - $rechnung = $versandarr['rechnung']; - - $rechnungarr = $rechnung <=0?null: $this->app->DB->SelectRow( - "SELECT zahlungsweise,projekt FROM rechnung WHERE id='$rechnung' LIMIT 1" - ); - - $rechnung_zahlweise = empty($rechnungarr)?'':$rechnungarr['zahlungsweise']; - $rechnung_projekt = empty($rechnungarr)?0:$rechnungarr['projekt']; - - $lieferscheinarr = $lieferscheinid <= 0?null: $this->app->DB->SelectRow( - "SELECT auftragid,projekt FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1" - ); - - $auftrag = empty($lieferscheinarr)?0: $this->app->DB->Select( - "SELECT auftragid FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1" - ); - - $auftragarr = $auftrag <= 0?null:$this->app->DB->SelectRow( - "SELECT * FROM auftrag WHERE id='$auftrag' LIMIT 1" - ); - - if(!$rechnung && $auftrag) { - //Fallback Zahlungsweise auf Auftrag - $rechnung_zahlweise = $auftragarr['zahlungsweise']; - $rechnung_projekt = $auftragarr['projekt']; - } - } - if(empty($rechnung_zahlweise)) { - return; - } - try { - if($zahlungsweisenmodule = $this->app->DB->SelectArr( - "SELECT id, modul - FROM zahlungsweisen - WHERE type = '" . $this->app->DB->real_escape_string($rechnung_zahlweise) . "' AND modul <> '' - AND (projekt = '$projekt' OR projekt = 0) - ORDER BY projekt = '$projekt' DESC - LIMIT 1 - ")){ - foreach ($zahlungsweisenmodule as $zahlungsweisenmodul) { - $_zahlungsweisenmodul = preg_replace('/[^a-zA-Z0-9\_]/', '', $zahlungsweisenmodul['modul']); - if(!$_zahlungsweisenmodul){ - continue; - } - if(!file_exists(__DIR__ . '/zahlungsweisen/' . $_zahlungsweisenmodul . '.php')){ - continue; - } - - $class = 'Zahlungsweise_' . $_zahlungsweisenmodul; - if(!class_exists($class)){ - include_once __DIR__ . '/zahlungsweisen/' . $_zahlungsweisenmodul . '.php'; - } - if(!class_exists($class)){ - continue; - } - - $obj = new $class($this->app, $zahlungsweisenmodul['id']); - if($obj && method_exists($obj, 'ZahlungFreigeben')){ - $obj->ZahlungFreigeben($auftrag, $id); - } - return; - } - } - } - catch(Exception $e) { - - } - } - - public function Versandmail($id, $tracking_link = null, $sprache = null, $tracking = '', $forceautoversand = false, $autoversand = true) - { - // $text = $this->app->DB->Select("SELECT text FROM geschaeftsbrief_vorlagen WHERE subjekt='Versand' AND sprache='deutsch' LIMIT 1"); - // $betreff = $this->app->DB->Select("SELECT betreff FROM geschaeftsbrief_vorlagen WHERE subjekt='Versand' AND sprache='deutsch' LIMIT 1"); - - if($id > 0){ - $versandarr = $this->app->DB->SelectRow("SELECT * FROM versand WHERE id='$id' LIMIT 1"); - } - if(empty($versandarr)) - { - return; - } - $adresse = $versandarr['adresse']; - if($adresse > 0) - { - $adressearr = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id = $adresse LIMIT 1"); - } - - $lieferscheinid = $versandarr['lieferschein']; - if($lieferscheinid > 0){ - $lieferscheinarr = $this->app->DB->SelectRow("SELECT * FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1"); - } - if(!empty($lieferscheinarr)){ - $auftrag = $lieferscheinarr['auftragid']; - }else{ - $auftrag = 0; - } - if($auftrag > 0) - { - $auftragarr = $this->app->DB->SelectRow("SELECT email,name,belegnr,internet,ihrebestellnummer,sprache,DATE_FORMAT(datum,'%d.%m.%Y') as datum_de FROM auftrag WHERE id='$auftrag' LIMIT 1"); - } - if(!empty($auftragarr)) - { - $auftragbelegnr = $auftragarr['belegnr']; - $auftraginternet = $auftragarr['internet']; - $ihrebestellnummer = $auftragarr['ihrebestellnummer']; - - $auftragdatum = $auftragarr['datum_de']; - }else{ - $auftragbelegnr = ''; - $auftraginternet = ''; - $ihrebestellnummer = ''; - $auftragdatum = ''; - } - - if(!empty($lieferscheinarr)){ - $projekt = $lieferscheinarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1"); - }else{ - $projekt = 0; - } - - if(is_null($sprache)){ - if(!empty($auftragarr)){ - $sprache = $auftragarr['sprache']; - }else{ - $sprache = ''; - } - } - - if(!empty($auftragarr)){ - $to = $auftragarr['email']; - $to_name = $auftragarr['name']; - }else{ - $to = ''; - $to_name = ''; - } - - - if($to==''){ - if(!empty($adressearr)){ - $to = $adressearr['email']; - } - } - if($to_name==''){ - if(!empty($adressearr)){ - $to_name = $adressearr['name']; - } - } - - if(!$sprache){ - if(!empty($adressearr)){ - $sprache = $adressearr['sprache']; - } - } - if($sprache == ''){ - $sprache = 'deutsch'; - } - $text = $this->GetGeschaeftsBriefText('Versand',(!is_null($sprache) && $sprache?$sprache:'deutsch'),$projekt); - $betreff = $this->GetGeschaeftsBriefBetreff('Versand',(!is_null($sprache) && $sprache?$sprache:'deutsch'),$projekt); - if(((String)$text === "" || (String)$betreff === '') && (!is_null($sprache) && $sprache?$sprache:'deutsch') != 'deutsch') - { - $text = $this->GetGeschaeftsBriefText('Versand','deutsch',$projekt); - $betreff = $this->GetGeschaeftsBriefBetreff('Versand','deutsch',$projekt); - } - - - // wenn Ansprechpartner - if(!empty($lieferscheinarr)){ - $to_lieferschein_name = $lieferscheinarr['ansprechpartner']; - $to_lieferschein_email = $lieferscheinarr['email']; - }else{ - $to_lieferschein_name = ''; - $to_lieferschein_email = ''; - } - - if($to_lieferschein_email!=''){ - $to = $to_lieferschein_email; - - if($to_lieferschein_name!=''){ - $to_name = $to_lieferschein_name; - } - } - if(!empty($adressearr)){ - $trackingsperre = $adressearr['trackingsperre']; - }else{ - $trackingsperre = 0; - } - - $tracking = $versandarr['tracking']; - $keinetrackingmail = $versandarr['keinetrackingmail']; - $versandunternehmen = $versandarr['versandunternehmen']; - - // FIX fuer selbstabholer Mail - $versandart = $versandarr['versandart']; - if($versandart=='selbstabholer') { - $versandunternehmen='selbstabholer'; - } - - $text = str_replace('{BELEGNR}',$auftragbelegnr,$text); - $betreff = str_replace('{BELEGNR}',$auftragbelegnr,$betreff); - - $text = str_replace('{AUFTRAGDATUM}',$auftragdatum,$text); - $betreff = str_replace('{AUFTRAGDATUM}',$auftragdatum,$betreff); - - - $text = str_replace('{INTERNET}',$auftraginternet,$text); - $betreff = str_replace('{INTERNET}',$auftraginternet,$betreff); - - $text = str_replace('{IHREBESTELLNUMMER}',$ihrebestellnummer,$text); - $betreff = str_replace('{IHREBESTELLNUMMER}',$ihrebestellnummer,$betreff); - if(!is_null($tracking_link) && $tracking_link)$text = str_replace('{VERSAND}',$tracking_link.(($tracking && strpos($tracking_link,$tracking) === false)?' ('.$tracking.')':''),$text); - if($versandunternehmen=="dhl" || $versandunternehmen=="dhlpremium" || $versandunternehmen=="intraship") - $versandmodul = false; - - if(!$this->isHTML($text)){ - $text = str_replace("\r\n", "
", $text); - } - - - $typ = $versandunternehmen; - if($typ === ''){ - $typ = $versandart; - } - //$versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul FROM versanddienstleister WHERE aktiv = 1 AND modul = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); - $versandartenmodul = $this->app->DB->SelectArr("SELECT * FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND modul != '' AND type = '".$this->app->DB->real_escape_string($typ)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); - $standard = true; - if($versandartenmodul && @is_file(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) - { - if($versandartenmodul[0]['versandmail'] == -1) - { - $notsend = 1; - } - elseif($versandartenmodul[0]['versandmail'] && $versandartenmodul[0]['geschaeftsbrief_vorlage']) - { - $subjekt = $this->app->DB->Select("SELECT subjekt FROM geschaeftsbrief_vorlagen WHERE id = '".$versandartenmodul[0]['geschaeftsbrief_vorlage']."' LIMIT 1"); - $text = $this->GetGeschaeftsBriefText($subjekt,(!is_null($sprache) && $sprache?$sprache:'deutsch'),$projekt); - $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,(!is_null($sprache) && $sprache?$sprache:'deutsch'),$projekt); - if(((String)$text === '' || (String)$betreff === '') && (!is_null($sprache) && $sprache?$sprache:'deutsch') != 'deutsch') - { - $text = $this->GetGeschaeftsBriefText($subjekt,'deutsch',$projekt); - $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,'deutsch',$projekt); - } - $text = str_replace('{BELEGNR}',$auftragbelegnr,$text); - $betreff = str_replace('{BELEGNR}',$auftragbelegnr,$betreff); - - $text = str_replace('{AUFTRAGDATUM}',$auftragdatum,$text); - $betreff = str_replace('{AUFTRAGDATUM}',$auftragdatum,$betreff); - - - $text = str_replace('{INTERNET}',$auftraginternet,$text); - $betreff = str_replace('{INTERNET}',$auftraginternet,$betreff); - - $text = str_replace('{IHREBESTELLNUMMER}',$ihrebestellnummer,$text); - $betreff = str_replace('{IHREBESTELLNUMMER}',$ihrebestellnummer,$betreff); - if(!is_null($tracking_link) && $tracking_link)$text = str_replace('{VERSAND}',$tracking_link.(($tracking && strpos($tracking_link,$tracking) === false)?' ('.$tracking.')':''),$text); - } - $obj = $this->LoadVersandModul($versandartenmodul[0]['modul'], $versandartenmodul[0]['id']); - $class_name = 'Versandart_'.$versandartenmodul[0]['modul']; - if(!empty($obj) && method_exists($obj, 'Trackinglink')) - { - if($obj->Trackinglink($tracking, $notsend, $link, $rawlink)) - { - $versandpakete = $this->app->DB->SelectArr("SELECT tracking FROM versandpakete WHERE versand = '$id' AND tracking <> '' ORDER BY nr"); - if($versandpakete) - { - foreach($versandpakete as $kv => $vv) - { - $obj->Trackinglink($vv['tracking'], $tmpnotsend, $tmplink, $tmprawlink); - $link .= ', '.$vv['tracking'].' ('.$tmprawlink.')'; - $tracking .= ', '.$vv['tracking']; - } - } - - $text = str_replace('{VERSAND}', $link ,$text); - $text = str_replace('{VERSANDTYPE}', $versandartenmodul[0]['type'] ,$text); - $text = str_replace('{VERSANDBEZEICHNUNG}', $versandartenmodul[0]['bezeichnung'] ,$text); - $text = str_replace('{TRACKINGNUMMER}', $tracking,$text); - $versandmodul = true; - } - } - }elseif($versandartenmodul2 = $this->app->DB->SelectArr("SELECT * FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND type = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1")) - { - if($versandartenmodul2[0]['versandmail'] == -1) - { - $notsend = 1; - } - elseif($versandartenmodul2[0]['versandmail'] && $versandartenmodul2[0]['geschaeftsbrief_vorlage']) - { - $standard = false; - $subjekt = $this->app->DB->Select("SELECT subjekt FROM geschaeftsbrief_vorlagen WHERE id = '".$versandartenmodul2[0]['geschaeftsbrief_vorlage']."' LIMIT 1"); - $text = $this->GetGeschaeftsBriefText($subjekt,(!is_null($sprache) && $sprache?$sprache:'deutsch'),$projekt); - $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,(!is_null($sprache) && $sprache?$sprache:'deutsch'),$projekt); - if(((String)$text === "" || (String)$betreff === '') && (!is_null($sprache) && $sprache?$sprache:'deutsch') != 'deutsch') - { - $text = $this->GetGeschaeftsBriefText($subjekt,'deutsch',$projekt); - $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,'deutsch',$projekt); - } - $text = str_replace('{BELEGNR}',$auftragbelegnr,$text); - $betreff = str_replace('{BELEGNR}',$auftragbelegnr,$betreff); - - $text = str_replace('{INTERNET}',$auftraginternet,$text); - $betreff = str_replace('{INTERNET}',$auftraginternet,$betreff); - $text = str_replace('{AUFTRAGDATUM}',$auftragdatum,$text); - $betreff = str_replace('{AUFTRAGDATUM}',$auftragdatum,$betreff); - $text = str_replace('{VERSANDTYPE}', $versandartenmodul2[0]['type'] ,$text); - - $text = str_replace('{IHREBESTELLNUMMER}',$ihrebestellnummer,$text); - $betreff = str_replace('{IHREBESTELLNUMMER}',$ihrebestellnummer,$betreff); - if(!is_null($tracking_link) && $tracking_link)$text = str_replace('{VERSAND}',$tracking_link.(($tracking && strpos($tracking_link,$tracking) === false)?' ('.$tracking.')':''),$text); - $notsend = 0; - } - } - if(!$versandmodul && $standard) - { - if(strtolower($versandunternehmen)=='dhl' || strtolower($versandunternehmen)=='dhlpremium' || strtolower($versandunternehmen)=="intraship") - { - $text = str_replace('{VERSAND}','DHL Versand: '.$tracking.' (http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc='.$tracking.')',$text); - $notsend = 0; - } - else if (strtolower($versandunternehmen)=='logoix') - { - $text = str_replace('{VERSAND}','LogoiX Versand: '.$tracking.' (http://www.logoix.com/cgi-bin/tnt.pl?q='.$tracking.')',$text); - $notsend = 0; - } - else if (strtolower($versandunternehmen)=='dpd') - { - $text = str_replace('{VERSAND}','DPD Versand: '.$tracking.' (https://tracking.dpd.de/parcelstatus/?locale=de_DE&query='.$tracking.')',$text); - $notsend = 0; - } - else if (strtolower($versandunternehmen)=='gls') - { - $text = str_replace('{VERSAND}','GLS Versand: '.$tracking.' (https://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DE03/DE/5004.htm?txtRefNo='.$tracking.'&txtAction=71000 )',$text); - $notsend = 0; - } - else if (strtolower($versandunternehmen)=='rma') - { - $notsend = 1; - } - else if(strtolower($versandunternehmen)=='selbstabholer') - { - $notsend = 0; - // selbstabholer - - $text = $this->GetGeschaeftsBriefText('Selbstabholer',$sprache,$projekt); - $betreff = $this->GetGeschaeftsBriefBetreff('Selbstabholer',$sprache,$projekt); - if(((String)$text === '' || (String)$betreff === '') && $sprache != 'deutsch') - { - $text = $this->GetGeschaeftsBriefText('Selbstabholer','deutsch',$projekt); - $betreff = $this->GetGeschaeftsBriefBetreff('Selbstabholer','deutsch',$projekt); - } - - //$text = $this->app->DB->Select("SELECT text FROM geschaeftsbrief_vorlagen WHERE subjekt='Selbstabholer' AND sprache='deutsch' LIMIT 1"); - $text = str_replace('{VERSAND}','',$text); - - // nur wenn option gesetzt ist - $selbstabholermail = $this->app->DB->Select("SELECT selbstabholermail FROM projekt WHERE id='$projekt' LIMIT 1"); - if($selbstabholermail!='1') { - $notsend = 1; - } - } else { - // bei allen anderen lieferarten keine mail - $notsend = $forceautoversand?0:1; - } - } - - if(!(!$versandmodul && $standard && strtolower($versandunternehmen)=='selbstabholer')) - { - if(!$forceautoversand && $this->Projektdaten($projekt,"automailversandbestaetigung")!='1'){ - $notsend = 1; - } - } - - $text = str_replace('{NAME}',$to_name,$text); - - $text = str_replace('{VERSAND}', '' ,$text); - if(!empty($versandart)){ - $text = str_replace('{VERSANDTYPE}', $versandart, $text); - } - $text = $this->app->erp->ParseUserVars('auftrag',$auftrag,$text); - $betreff = $this->app->erp->ParseUserVars('auftrag',$auftrag,$betreff); - - - if($lieferscheinid > 0) - { - $text = $this->app->erp->ParseUserVars('lieferschein',$lieferscheinid,$text); - $betreff = $this->app->erp->ParseUserVars('lieferschein',$lieferscheinid,$betreff); - } - - if($to!='' && $to_name!='' && $trackingsperre!=1 && $notsend==0 && $keinetrackingmail!=1) - { - $this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$to,$to_name,$betreff,$text,"",$projekt); - $this->DokumentCreateQuick($adresse, $betreff, $text, $projekt); - - - $this->app->DB->Insert("INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) values ('$auftrag',now(),'".(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')."','Versandmail verschickt')"); - $dateien = null; - $this->RunHook('versandmail', 5, $auftrag, $betreff, $text, $dateien, $autoversand); - } - } - - - function DokumentCreateQuick($adresse,$betreff,$text,$projekt) - { - $data['adresse'] = $adresse; - $data['betreff'] = $betreff; - $data['content'] = $text; - $data['projekt'] = $projekt; - $this->DokumentCreate($data); - } - - function DokumentCreate($data,$adressefromuser=0) - { - if($adressefromuser > 0) - { - if($data['bearbeiter']=="") $data['bearbeiter'] = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adressefromuser' AND id > 0 LIMIT 1"); - } - - $this->app->DB->Insert(' - INSERT INTO - dokumente - SET - adresse_from = "' . $adressefromuser . '", - adresse_to = "' . $data['user'] . '", - typ = "' . $data['typ'] . '", - von = "' . $data['von'] . '", - firma = "' . $data['firma'] . '", - ansprechpartner = "' . $data['ansprechpartner'] . '", - internebezeichnung = "' . $data['internebezeichnung'] . '", - an = "' . $data['an'] . '", - email_an = "' . $data['email_an'] . '", - email_cc = "' . $data['email_cc'] . '", - email_bcc = "' . $data['email_bcc'] . '", - firma_an = "' . $data['firma_an'] . '", - adresse = "' . $data['adresse'] . '", - plz = "' . $data['plz'] . '", - ort = "' . $data['ort'] . '", - land = "' . $data['land'] . '", - datum = NOW(), - betreff = "' . $data['betreff'] . '", - content = "' . $data['content'] . '", - signatur = "' . $data['signatur'] . '", - send_as = "' . $data['send_as'] . '", - email = "' . $data['email'] . '", - printer = "' . $data['printer'] . '", - fax = "' . $data['fax'] . '", - created = NOW(), - uhrzeit = "' . $data['uhrzeit'] . '", - projekt = "' . $data['projekt'] . '", - bearbeiter = "' . $data['bearbeiter'] . '" - '); - - return $this->app->DB->GetInsertID(); - } - - /** - * @param int $projekt - * @param string $feld - * - * @return mixed|null - */ - function Projektdaten($projekt,$feld) - { - return $projekt <= 0?null:$this->app->DB->Select( - sprintf( - 'SELECT `%s` FROM projekt WHERE id=%d LIMIT 1', - $feld, $projekt - ) - ); - } - - function DumpVar($variable) - { - ob_start(); - var_dump($variable); - $result = ob_get_clean(); - file_put_contents($this->GetTMP()."log", "$result\r\n", FILE_APPEND | LOCK_EX); - } - - function VarAsString($variable) - { - ob_start(); - var_dump($variable); - $result = ob_get_clean(); - return $result; - } - - function ImportvorlageLog($importvorlage,$zeitstempel,$tabelle,$datensatz,$ersterdatensatz="0") - { - $this->app->DB->Insert("INSERT INTO importvorlage_log (id,importvorlage,zeitstempel,user,tabelle,datensatz,ersterdatensatz) - VALUES ('','$importvorlage',FROM_UNIXTIME($zeitstempel),'".$this->app->User->GetID()."', - '$tabelle','$datensatz','$ersterdatensatz')"); - } - - function ImportvorlageLogDelete($zeitstempel) - { - $tmp = $this->app->DB->SelectArr("SELECT * FROM importvorlage_log WHERE zeitstempel='$zeitstempel' AND user='".$this->app->User->GetID()."'"); - for($i=0;$iapp->DB->SelectArr("SELECT * FROM adresse WHERE id='$datensatz' LIMIT 1"); - $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id='".$tmp_adresse[0]['projekt']."' LIMIT 1"); - - if($eigenernummernkreis=="1") - { - if($tmp_adresse[0]['kundennummer']!="" && $tmp_adresse[0]['kundennummer']!="0") - { - $this->app->DB->Update("UPDATE projekt SET next_kundennummer='".$tmp_adresse[0]['kundennummer']."' - WHERE id='".$tmp_adresse[0]['projekt']."' LIMIT 1"); - } - if($tmp_adresse[0]['lieferantennummer']!="" && $tmp_adresse[0]['lieferantennummer']!="0") - { - $this->app->DB->Update("UPDATE projekt SET next_lieferantennummer='".$tmp_adresse[0]['lieferantennummer']."' - WHERE id='".$tmp_adresse[0]['projekt']."' LIMIT 1"); - } - if($tmp_adresse[0]['mitarbeiternummer']!="" && $tmp_adresse[0]['mitarbeiternummer']!="0") - { - $this->app->DB->Update("UPDATE projekt SET next_mitarbeiternummer='".$tmp_adresse[0]['mitarbeiternummer']."' - WHERE id='".$tmp_adresse[0]['projekt']."' LIMIT 1"); - } - } else { - if($tmp_adresse[0]['kundennummer']!="" && $tmp_adresse[0]['kundennummer']!="0") - { - $this->FirmendatenSet("next_kundennummer",$tmp_adresse[0]['kundennummer']); - } - if($tmp_adresse[0]['lieferantennummer']!="" && $tmp_adresse[0]['lieferantennummer']!="0") - { - $this->FirmendatenSet("next_lieferantennummer",$tmp_adresse[0]['lieferantennummer']); - } - if($tmp_adresse[0]['mitarbeiternummer']!="" && $tmp_adresse[0]['mitarbeiternummer']!="0") - { - $this->FirmendatenSet("next_mitarbeiternummer",$tmp_adresse[0]['mitarbeiternummer']); - } - } - } - $this->app->DB->Delete("DELETE FROM adresse WHERE id='$datensatz'"); - $this->app->DB->Delete("DELETE FROM ansprechpartner WHERE adresse='$datensatz'"); - $this->app->DB->Delete("DELETE FROM lieferadressen WHERE adresse='$datensatz'"); - $this->app->DB->Delete("DELETE FROM adresse_rolle WHERE adresse='$datensatz'"); - break; - - case "artikel": - - break; - - case "einkaufspreise": - - break; - - - - } - $this->app->DB->Delete("DELETE FROM importvorlage_log WHERE id='".$tmp[$i]['id']."'"); - } - - } - - - function CreatePath($path) { - if (file_exists($path)) - { - return true; - } - $nextDirectoryPath = substr($path, 0, strrpos($path, '/', -2) + 1 ); - - if($this->CreatePath($nextDirectoryPath) && is_writable($nextDirectoryPath)) - { - return mkdir($path); - } - return false; - } - - function ObjektProtokoll($objekt,$id,$action_long,$meldung="") - { - $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->User->GetName():'Import / Cronjob'; - - $this->app->DB->Insert("INSERT INTO objekt_protokoll (id,objekt,objektid,meldung,zeitstempel,bearbeiter,action_long) - VALUES ('','$objekt','$id','$meldung',NOW(),'$bearbeiter','$action_long')"); - - } - - function InternesEvent($userid,$meldung,$type="",$sound=0) - { - //Cronjobs does not have an userid (prevent Exception) - if((int)$userid <= 0) { - return false; - } - /** @var \Xentral\Modules\SystemNotification\Service\NotificationServiceInterface $notification */ - if(empty($this->app->Container) || empty($userid)) - { - return false; - } - $notification = $this->app->Container->get('NotificationService'); - if (!in_array($type, $notification->getValidTypes(), true)) { - $type = 'default'; - } - - return $notification->create($userid, $type, 'Hinweis', $meldung, (bool)$sound); - } - - function EventMitSystemLog($userid, $meldung, $level=-1,$dump="", $type = "", $sound=0, $module="", $action="",$functionname="") - { - $this->SystemLog($meldung, $level, $dump, $module, $action, $functionname); - $this->InternesEvent($userid, $meldung, $type, $sound); - - } - - function SystemLog($meldung="",$level=0,$dump="",$module="",$action="",$functionname="") - { - /** @var Systemlog $obj */ - $obj = $this->app->erp->LoadModul('systemlog'); - if(!empty($obj) && method_exists($obj, 'addSystemLog')){ - return $obj->addSystemLog($meldung,$level,$dump,$module,$action,$functionname); - } - return 0; - } - - - function Protokoll($meldung="",$dump="",$module="",$action="",$functionname="") - { - /** @var Protokoll $obj */ - $obj = $this->app->erp->LoadModul('protokoll'); - if(!empty($obj) && method_exists($obj, 'addProtokoll')){ - return $obj->addProtokoll($meldung,$dump,$module,$action,$functionname); - } - return 0; - } - - function LogRamAndTime($meldung) - { - if(self::$lasttime == 0)self::$lasttime = microtime(true); - $akttime = microtime(true); - $this->LogFile( addslashes((memory_get_peak_usage(true) >> 20). " MB ".(round($akttime - self::$lasttime ,3) )." sek ".$meldung)); - - } - - - function LogFile($meldung,$dump="",$module="",$action="",$functionname="") - { - - $obj = $this->LoadModul('logfile'); - if(!empty($obj) && method_exists($obj,'addLogFile')) { - return $obj->addLogFile($meldung,$dump,$module,$action,$functionname); - } - return null; - } - - - function KundeUpdate($adresse,$typ,$name,$abteilung,$unterabteilung,$ansprechpartner,$adresszusatz,$strasse,$land,$plz,$ort,$email,$telefon,$telefax,$ustid,$partner,$projekt) - { - //echo "Upate"; - $fields = array('typ','name','abteilung','unterabteilung','ansprechpartner','adresszusatz','strasse','land','plz', - 'ort','email','telefon','telefax','ustid','partner','projekt'); - - foreach($fields as $key) - { - $check = $this->app->DB->Select("SELECT $key FROM adresse WHERE id='$adresse' LIMIT 1"); - if($check!=${$key}) - { - $this->app->DB->Update("UPDATE adresse SET $key='".${$key}."' WHERE id='$adresse' LIMIT 1"); - $logfile = $this->app->DB->Select("SELECT `logfile` FROM adresse WHERE id='$adresse' LIMIT 1"); - $this->app->DB->Update("UPDATE adresse SET `logfile`='".$logfile." Update Feld $key alt:$check neu:".${$key}.";' WHERE id='$adresse' LIMIT 1"); - } - - } - return $adresse; - } - - function KundeAnlegen($typ,$name,$abteilung,$unterabteilung,$ansprechpartner,$adresszusatz,$strasse,$land,$plz,$ort,$email,$telefon,$telefax,$ustid,$partner,$projekt, $bundesstaat='', $rechnung_bundesstaat='') - { - $name = $this->app->DB->real_escape_string($name); - $abteilung = $this->app->DB->real_escape_string($abteilung); - $unterabteilung = $this->app->DB->real_escape_string($unterabteilung); - $ansprechpartner = $this->app->DB->real_escape_string($ansprechpartner); - $adresszusatz = $this->app->DB->real_escape_string($adresszusatz); - $strasse = $this->app->DB->real_escape_string($strasse); - $land = $this->app->DB->real_escape_string($land); - $plz = $this->app->DB->real_escape_string($plz); - $ort = $this->app->DB->real_escape_string($ort); - $email = $this->app->DB->real_escape_string($email); - $telefon = $this->app->DB->real_escape_string($telefon); - $telefax = $this->app->DB->real_escape_string($telefax); - $ustid = $this->app->DB->real_escape_string($ustid); - $partner = $this->app->DB->real_escape_string($partner); - $bundesstaat = $this->app->DB->real_escape_string($bundesstaat); - $rechnung_bundesstaat = $this->app->DB->real_escape_string($rechnung_bundesstaat); - - $this->app->DB->Insert("INSERT INTO adresse (id,typ,name,abteilung,unterabteilung,ansprechpartner,adresszusatz,strasse,land,plz,ort,email,telefon,telefax,ustid,partner,projekt,firma,bundesstaat,rechnung_bundesstaat) - VALUES('','$typ','$name','$abteilung','$unterabteilung','$ansprechpartner','$adresszusatz','$strasse','$land','$plz','$ort','$email','$telefon','$telefax','$ustid','$partner','$projekt','".$this->app->User->GetFirma()."','$bundesstaat','$rechnung_bundesstaat')"); - $adresse = $this->app->DB->GetInsertID(); - $this->ObjektProtokoll("adresse",$adresse,"adresse_create","Adresse angelegt"); - $zahlungsweise = $this->Firmendaten('zahlungsweise'); - if($zahlungsweise)$this->app->DB->Update("UPDATE adresse SET zahlungsweise = '".$this->app->DB->real_escape_string($zahlungsweise)."' WHERE id = '$adresse' LIMIT 1"); - if($zahlungsweise == 'rechnung') - { - $zahlungszieltage = $this->Firmendaten('zahlungszieltage'); - $zahlungszieltageskonto = $this->Firmendaten('zahlungszieltageskonto'); - $zahlungszielskonto = $this->Firmendaten('zahlungszielskonto'); - if($zahlungsweise)$this->app->DB->Update("UPDATE adresse SET - zahlungszieltage = '".$this->app->DB->real_escape_string($zahlungszieltage)."', - zahlungszielskonto = '".$this->app->DB->real_escape_string($zahlungszielskonto)."', - zahlungszieltageskonto = '".$this->app->DB->real_escape_string($zahlungszieltageskonto)."' - WHERE id = '$adresse' LIMIT 1"); - } - - $ust_befreit = $this->AdresseUSTCheck($adresse); - $this->app->DB->Update("UPDATE adresse SET ust_befreit='$ust_befreit' WHERE id=$adresse"); - - //adresse Kundennummer verpassen - $this->KundennummerVergeben($adresse); - - $this->AddRolleZuAdresse($adresse, "Kunde", "von", "Projekt", $projekt); - return $adresse; - } - - function IstEU($land) - { - if($land==$this->Firmendaten("land")) - return false; - foreach($this->GetUSTEU() as $euland) - { - if($land==$euland) - return true; - } - return false; - } - - function Steuerbefreit($land,$ustid) - { - if($land==$this->Firmendaten("land")) - return false; - - foreach($this->GetUSTEU() as $euland) - { - if($land==$euland && $ustid!="") - return true; - else if ($land==$euland && $ustid=="") - return false; - } - - // alle anderen laender sind export! - return true; - } - - /** - * @param int $artikel - * @param null|array|int $parents - * - * @return bool - */ - public function IstRohstoffeZirkel($artikel, $parents = null) - { - if($parents !== null && is_numeric($parents)) { - $parents = [$parents]; - } - if(is_array($parents) && count($parents) > 0) { - if(in_array($artikel, $parents)) { - return $artikel; - } - } - $parents[] = $artikel; - - $stueckliste = $this->app->DB->SelectArr( - sprintf( - 'SELECT DISTINCT s.artikel - FROM rohstoffe AS s - INNER JOIN artikel AS a ON s.artikel = a.id - WHERE s.rohstoffvonartikel = %d AND a.geloescht <> 1', - $artikel - ) - ); - if(empty($stueckliste)) { - return false; - } - - foreach($stueckliste as $art) { - if($art['artikel'] == $artikel) { - return true; - } - if($this->IstRohstoffeZirkel($art['artikel'], $parents)) { - return true; - } - } - - return false; - } - - /** - * @param int $artikel - * @param null|int|array $parents - * - * @return bool - */ - public function IstStuecklistenZirkel($artikel, $parents = null) - { - if($parents !== null && is_numeric($parents)) { - $parents = [$parents]; - } - if(is_array($parents) && count($parents) > 0) { - if(in_array($artikel, $parents)) { - return $artikel; - } - } - $parents[] = $artikel; - - $stueckliste = $this->app->DB->SelectArr( - sprintf( - 'SELECT DISTINCT s.artikel - FROM stueckliste AS s - INNER JOIN artikel AS a ON s.artikel = a.id - WHERE s.stuecklistevonartikel = %d AND a.geloescht <> 1', - $artikel - ) - ); - if(empty($stueckliste)) { - return false; - } - - foreach($stueckliste as $art) { - if($art['artikel'] == $artikel) { - return true; - } - if($this->IstStuecklistenZirkel($art['artikel'], $parents)) { - return true; - } - } - - return false; - } - - /** - * @param string $wert - * @param int|array $artikel - * @param null|int|array $shop - * - * @return array|mixed|null - */ - public function GetArtikelShopEinstellung($wert, $artikel, $shop = null) - { - $shopKorrekturwert = null; - if(is_array($shop)) { - $shopKorrekturwert = $shop; - $shop = $shop['id']; - } - $shop = (int)$shop; - if(is_array($artikel)) { - $res = $artikel; - $artikel = $artikel['id']; - } - $artikel = (int)$artikel; - if($artikel <= 0) { - return null; - } - if(empty($res)) { - $res = $this->app->DB->SelectRow( - sprintf('SELECT * FROM artikel WHERE id = %d LIMIT 1', $artikel) - ); - } - if(empty($res)) { - return null; - } - if($shop) { - $artikelarr = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM artikel_onlineshops - WHERE artikel = %d AND aktiv = 1 AND shop = %d AND ausartikel = 0 LIMIT 1', - $artikel, $shop - ) - ); - if(!empty($artikelarr)) { - foreach($artikelarr as $k => $v) { - if(!is_numeric($k) && $k !== 'id' && $k !== 'shop' && $k !== 'artikel'){ - $res[$k] = $v; - } - } - } - if($wert == '' || $wert === 'lagerkorrekturwert') { - if($shopKorrekturwert === null) { - $shopKorrekturwert = $this->app->DB->SelectRow( - sprintf( - 'SELECT lagerkorrekturwert,ueberschreibe_lagerkorrekturwert FROM shopexport WHERE id = %d', - $shop - ) - ); - } - if(!empty($shopKorrekturwert['ueberschreibe_lagerkorrekturwert'])) { - $res['lagerkorrekturwert'] = $shopKorrekturwert['lagerkorrekturwert']; - } - } - } - - if($wert == '') { - return $res; - } - if(isset($res[$wert])) { - return $res[$wert]; - } - - return null; - } - - /** - * @param int|array $artikel - * - * @return array|null - */ - public function GetArtikelshops($artikel) - { - if(is_array($artikel)) { - $artikelarr = $artikel; - $artikel = $artikel['id']; - } - $artikel = (int)$artikel; - if($artikel <= 0) { - return null; - } - $shops = $this->app->DB->SelectArr( - sprintf( - 'SELECT `shop`, `aktiv` FROM `artikel_onlineshops` WHERE `artikel` = %d', - $artikel - ) - ); - if(empty($shops)) { - if(empty($artikelarr)) { - $artikelarr = $this->app->DB->SelectRow( - sprintf( - 'SELECT `shop`, `shop2`, `shop3` FROM `artikel` WHERE `id` = %d LIMIT 1', - $artikel - ) - ); - } - if(empty($artikelarr)) { - return null; - } - $shops = null; - if(!empty($artikelarr['shop'])){ - $shops[] = $artikelarr['shop']; - } - if(!empty($artikelarr['shop2'])){ - $shops[] = $artikelarr['shop2']; - } - if(!empty($artikelarr['shop3'])){ - $shops[] = $artikelarr['shop3']; - } - - return $shops; - } - $res = null; - foreach($shops as $shop) { - if(empty($shop['aktiv'])) { - continue; - } - if(empty($res) || !in_array($shop['shop'], $res)) { - $res[] = $shop['shop']; - } - } - - return $res; - } - -function CheckShopTabelle($artikel) -{ - $artikel = (int)$artikel; - if($artikel <= 0){ - return; - } - $artikelarr = $this->app->DB->SelectRow("SELECT * FROM artikel WHERE id = '$artikel' LIMIT 1"); - if(empty($artikelarr)){ - return; - } - - $shops = null; - if($artikelarr['shop']){ - $shops[] = $artikelarr['shop']; - } - if($artikelarr['shop2']){ - $shops[] = $artikelarr['shop2']; - } - if($artikelarr['shop3']){ - $shops[] = $artikelarr['shop3']; - } - if(!$shops){ - return; - } - $artikelarr['autolagerlampe'] = 0; - $felder = array( - 'lagerkorrekturwert', - 'pseudolager', - 'autolagerlampe', - 'restmenge', - 'lieferzeitmanuell', - 'pseudopreis', - 'generierenummerbeioption', - 'variante_kopie', - 'unikat', - 'unikatbeikopie', - 'autoabgeleicherlaubt' - ); - foreach($felder as $feld){ - if(isset($artikelarr[$feld]) && !empty($artikelarr[$feld])) - { - $inhalt[] = " '".$this->app->DB->real_escape_string($artikelarr[$feld])."' "; - } else { - $inhalt[] = " '' "; - } - } - - foreach($shops as $shop) - { - if(!$this->app->DB->Select("SELECT id FROM artikel_onlineshops WHERE artikel = '$artikel' AND shop = '$shop' LIMIT 1")) - { - $this->app->DB->Insert("INSERT INTO artikel_onlineshops (artikel, shop, aktiv, ausartikel,".implode(', ', $felder).") VALUES ('$artikel','$shop','1','1',".implode(', ', $inhalt).")"); - if(!$this->app->DB->error()) - { - //$this->app->DB->Update("UPDATE artikel SET shop = 0 WHERE artikel = '$artikel' AND shop = '$shop' LIMIT 1"); - //$this->app->DB->Update("UPDATE artikel SET shop2 = 0 WHERE artikel = '$artikel' AND shop2 = '$shop' LIMIT 1"); - //$this->app->DB->Update("UPDATE artikel SET shop3 = 0 WHERE artikel = '$artikel' AND shop3 = '$shop' LIMIT 1"); - } - } - } -} - - function CopyArtikelVariante($artikel,$artikelvon, $optionen, $stuecklistenelement = 0, $option = "") - { - $art = $artikelvon; - if($stuecklistenelement)$art = $stuecklistenelement; - if($artikel != $artikelvon || $stuecklistenelement > 0) - { - $eks = $this->app->DB->SelectArr("SELECT * FROM einkaufspreise WHERE artikel = '$artikel'"); - if(!$eks) - { - $this->app->DB->Insert("INSERT into einkaufspreise (artikel, adresse, objekt, projekt, preis, waehrung,ab_menge, vpe, gueltig_bis, lieferzeit_standard,bezeichnunglieferant, bestellnummer) - SELECT '".$artikel."', adresse, objekt, projekt, preis, waehrung,ab_menge, vpe, gueltig_bis,lieferzeit_standard,bezeichnunglieferant, bestellnummer FROM einkaufspreise WHERE artikel = '".$art."' AND geloescht <> 1 AND (isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' OR gueltig_bis > now())"); - - } - } - - if($artikel != $artikelvon) - { - $stueckliste = $this->app->DB->SelectArr("SELECT s.*, a.variante_kopie FROM stueckliste s INNER JOIN artikel a ON a.id = s.artikel WHERE stuecklistevonartikel = '$artikelvon'"); - if($stueckliste) - { - foreach($stueckliste as $stueck) - { - if($stueck['variante_kopie']) - { - - $idnew = $this->app->DB->MysqlCopyRow("artikel","id",$stueck['artikel']); - $this->KopiereArtikelDateistichwoerter($stueck['artikel'], $idnew); - $this->KopiereArtikelEigenschaften($stueck['artikel'], $idnew); - $nummer = $this->GetNextArtikelnummer('produkt',1,(int)$this->app->DB->Select("SELECT projekt FROM artikel WHERE id = '".$stueck['artikel']."' LIMIT 1")); - $this->app->DB->Update("UPDATE artikel SET variante = 1 , variante_von = '".$stueck['artikel']."' WHERE id = '$idnew' LIMIT 1"); - if($nummer)$this->app->DB->Update("UPDATE artikel SET nummer = '$nummer' WHERE id = '$idnew' LIMIT 1"); - $this->ObjektProtokoll("artikel", $idnew, "artikel_create", "Shopimport: Automatisch Kopie angelegt"); - if($optionen)$this->app->DB->Update("UPDATE artikel SET anabregs_text = '".$optionen."', anabregs_text_en ='".$optionen."' WHERE id = '$idnew' LIMIT 1"); - - $this->app->DB->Insert("INSERT INTO stueckliste (stuecklistevonartikel, artikel, sort, referenz, place, layer, menge, firma, wert,bauform) - SELECT '$artikel', '$idnew', sort, referenz, place, layer, menge, firma, wert,bauform FROM stueckliste WHERE id = '".$stueck['id']."'"); - - - $this->CopyArtikelVariante($idnew, $stueck['artikel'], $stueck['artikel']); - }else{ - $check = $this->app->DB->Select("SELECT id FROM stueckliste WHERE artikel = '".$stueck['artikel']."' AND stuecklistevonartikel = '".$artikel."' LIMIT 1"); - if(!$check) - { - $this->app->DB->Insert("INSERT INTO stueckliste (stuecklistevonartikel, artikel, sort, referenz, place, layer, menge, firma, wert,bauform) - SELECT '$artikel', artikel, sort, referenz, place, layer, menge, firma, wert,bauform FROM stueckliste WHERE id = '".$stueck['id']."'"); - } - } - } - } - } - } - - function GetArticleIDFromShopnumber($shop, $nummer, $herstellernummerUeberspringen = false) - { - $extart = $this->app->DB->Select("SELECT artikelnummernummerkreis FROM shopexport WHERE id = '$shop'"); - $projekt = $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id = '$shop'"); - $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id='$projekt' LIMIT 1"); - if($multiprojekt=='1' || !$eigenernummernkreis){ - $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND IFNULL(geloescht,0) = 0 AND IFNULL(intern_gesperrt,0) = 0 LIMIT 1"); - } - else{ - $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 AND IFNULL(intern_gesperrt,0) = 0 LIMIT 1"); - } - if($j_id){ - return $j_id; - } - - $multiprojekt = $this->app->DB->Select("SELECT multiprojekt FROM shopexport WHERE id='$shop' LIMIT 1"); - - - if(!$j_id) - { - if($multiprojekt=='1' || !$eigenernummernkreis) - $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND nummer <> 'DEL' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE - else - $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND nummer <> 'DEL' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE - - if($j_id) - { - return $j_id; - } - } - - if($herstellernummerUeberspringen){ - return false; - } - if(!$j_id) - { - if($multiprojekt=='1' || !$eigenernummernkreis) - $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='$nummer' AND nummer <> 'DEL' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE - else - $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='$nummer' AND nummer <> 'DEL' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE - if($j_id) - { - return $j_id; - } - } - - - } - - /** - * @param int $auftrag - * @param string $zahlungsstatus - * - * @throws Exception - */ - public function ImportUpdateZahlungsstatus($auftrag, $zahlungsstatus = 'bezahlt') - { - $arr = $this->app->DB->SelectRow( - sprintf( - "SELECT a.shop, a.shopextid,s.modulename,s.shoptyp - FROM auftrag AS a - INNER JOIN shopexport AS s - ON a.shop = s.id AND s.aktiv = 1 AND s.demomodus = 0 AND s.auftragabgleich = 1 - AND (s.shoptyp = 'intern' OR s.shoptyp = 'custom') - LEFT JOIN shopexport_zahlungsstatus sz ON a.shopextid = sz.auftrag - WHERE a.id = %d AND isnull(sz.id) AND a.shop <> 0 AND a.shopextid <> '' - LIMIT 1", - $auftrag - ) - ); - if(empty($arr)) { - return; - } - - $obj = null; - if($arr['shoptyp'] === 'custom') { - $file = dirname(__DIR__) . '/plugins/external/shopimporter/'.$arr['modulename']; - $classa = explode('_',str_replace('_'.$arr['shop'].'.php','', $arr['modulename'])); - foreach($classa as $k => $v) { - $classa[$k] = ucfirst($v); - } - $class = implode('_', $classa); - - if(file_exists($file)) { - if(!class_exists($class)) { - include_once $file; - } - if(class_exists($class)){ - $obj = new $class($this->app, true); - } - } - } - else { - $obj = $this->app->erp->LoadModul($arr['modulename']); - } - if($obj) { - if(method_exists($obj, 'EinstellungenStruktur')) { - $struktur = $obj->EinstellungenStruktur(); - if(isset($struktur['functions']) && $struktur['functions'] - && in_array('updatezahlungsstatus', $struktur['functions'])) { - $erg = $this->app->remote->RemoteCommand( - $arr['shop'], - 'updatezahlungsstatus', - array('auftrag'=>$arr['shopextid'],'zahlungsstatus'=>$zahlungsstatus) - ); - if($erg === 'ok') { - $this->app->DB->Insert( - sprintf( - "INSERT INTO shopexport_zahlungsstatus (shop, auftrag, status) - VALUES (%d,'%s','%s')", - $arr['shop'], - $this->app->DB->real_escape_string($arr['shopextid']), - $this->app->DB->real_escape_string($zahlungsstatus) - ) - ); - } - return; - } - } - } - $this->app->DB->Insert( - sprintf( - "INSERT INTO shopexport_zahlungsstatus (shop, auftrag, status) - VALUES (%d,'%s','')", - $arr['shop'], $this->app->DB->real_escape_string($arr['shopextid']) - ) - ); - } - - function getTaxRatesFromShopOrder($shopid, $warenkorb, $articlearray) - { - $taxrates = array(); - if(!empty($warenkorb['steuersatz_normal'])) - { - if(!in_array($warenkorb['steuersatz_normal'], $taxrates)) - { - $taxrates[] = $warenkorb['steuersatz_normal']; - } - if(!in_array($warenkorb['steuersatz_ermaessigt'], $taxrates)) - { - $taxrates[] = $warenkorb['steuersatz_ermaessigt']; - } - if(!empty($articlearray)) - { - foreach($articlearray as $k => $position) - { - if(!empty($position['steuersatz']) && is_numeric($position['steuersatz']) && !in_array($position['steuersatz'], $taxrates) - ) - { - $taxrates[] = $position['steuersatz']; - } - } - } - } - if(!empty($warenkorb['lieferland'])) - { - $country = $warenkorb['lieferland']; - }elseif(!empty($warenkorb['land'])) - { - $country = $warenkorb['land']; - }else{ - $country = ''; - } - if(!empty($country)) - { - $taxes = array(); - $this->RunHook('getTaxRatesFromShopOrder',2 , $country, $taxes); - if(!empty($taxes)) - { - $taxrates = array_merge($taxrates, $taxes); - } - } - - return $taxrates; - } - - function ImportAuftrag($adresse,$warenkorb,$projekt,$shop="",$auftrag=0) - { - $this->RunHook('ImportAuftragBefore',4, $adresse,$warenkorb,$projekt,$shop); - if(!empty($this->app->stringcleaner)){ - $this->app->stringcleaner->XMLArray_clean($warenkorb); - } - $explodieren = true; - $shopexportArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM shopexport WHERE id = %d LIMIT 1', - (int)$shop - ) - ); - - $angeboteanlegen = $shopexportArr['angeboteanlegen']; - $doctype = 'auftrag'; - - if(isset($warenkorb['benutzergruppe'])){ - $gruppenid = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer ='".$warenkorb['benutzergruppekuerzel']."'"); - if(isset($warenkorb['benutzergruppeanlegen']) && $gruppenid < 1){ - if(!$gruppenid){ - $this->app->DB->Insert("INSERT INTO gruppen (name, art, kennziffer, dta_mail_text, dtavariablen, zahlungszielskonto, zahlungszieltageskonto,webid, aktiv) VALUES ('".$warenkorb['benutzergruppe']."','gruppe','".$warenkorb['benutzergruppekuerzel']."','','',0,0,0,1)"); - } - $gruppenid = $this->app->DB->GetInsertID(); - } - if($gruppenid){ - if(!$this->app->DB->Select("SELECT id FROM adresse_rolle WHERE adresse='$adresse' AND projekt='$projekt' AND subjekt='Mitglied' AND praedikat='von' AND objekt='Gruppe' AND parameter='$gruppenid' LIMIT 1")){ - $this->app->DB->Insert("INSERT INTO adresse_rolle (adresse, projekt, subjekt, praedikat, objekt, parameter, von, bis) VALUES ('$adresse', '$projekt', 'Mitglied', 'von', 'Gruppe', '$gruppenid', 'CURRENT_DATE', '0000-00-00')"); - } - } - } - - if(!empty($warenkorb['doctype']) && $warenkorb['doctype']==='angebot'){ - $angeboteanlegen = 1; - } - - if($shopexportArr['lastschriftdatenueberschreiben'] && isset($warenkorb['bankverbindung']) && is_array($warenkorb['bankverbindung'])){ - $anweisung = array(); - if(isset($warenkorb['bankverbindung']['inhaber'])){ - $anweisung[] = "inhaber='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['inhaber'])."'"; - } - if(isset($warenkorb['bankverbindung']['bank'])){ - $anweisung[] = "bank='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['bank'])."'"; - } - if(isset($warenkorb['bankverbindung']['iban'])){ - $anweisung[] = "iban='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['iban'])."'"; - } - if(isset($warenkorb['bankverbindung']['bic'])){ - $anweisung[] = "swift='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['bic'])."'"; - } - - if(isset($warenkorb['bankverbindung']['firmensepa'])){ - $anweisung[] = "firmensepa='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['firmensepa'])."'"; - } - if(isset($warenkorb['bankverbindung']['mandatsreferenzhinweis'])){ - $anweisung[] = "mandatsreferenzhinweis='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['mandatsreferenzhinweis'])."'"; - } - if(isset($warenkorb['bankverbindung']['mandatsreferenzdatum'])){ - $anweisung[] = "mandatsreferenzdatum='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['mandatsreferenzdatum'])."'"; - } - if(isset($warenkorb['bankverbindung']['mandatsreferenz'])){ - $anweisung[] = "mandatsreferenz='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['mandatsreferenz'])."'"; - } - - if(count($anweisung) > 0){ - $this->app->DB->Update('UPDATE adresse SET '.implode(', ',$anweisung)." WHERE id='$adresse'"); - } - } - - if($angeboteanlegen) - { - $doctype = 'angebot'; - } - if(empty($auftrag)){ - if($angeboteanlegen) - { - $auftrag = $this->CreateAngebot(); - }else{ - $auftrag = $this->CreateAuftrag(); - } - } - if($shopexportArr['rabatteportofestschreiben']) { - $this->app->DB->Update("UPDATE $doctype SET rabatteportofestschreiben = 1 WHERE id = '$auftrag' LIMIT 1"); - } - if($doctype === 'angebot') - { - $this->AngebotProtokoll($auftrag,'Angebot importiert vom Shop'); - }else{ - $this->AuftragProtokoll($auftrag,'Auftrag importiert vom Shop'); - } - if(isset($warenkorb['subshop']) && $warenkorb['subshop']) - { - $subshopprojekt = $this->app->DB->Select("SELECT projekt FROM shopexport_subshop WHERE shop = '$shop' AND aktiv = 1 AND subshopkennung = '".$this->app->DB->real_escape_string($warenkorb['subshop'])."' LIMIT 1"); - if($subshopprojekt && $this->app->DB->Select("SELECT id FROM projekt WHERE id = '$subshopprojekt' AND geloescht <> 1 LIMIT 1")){ - $projekt = $subshopprojekt; - } - } - $portocheck = $this->app->DB->Select("SELECT portocheck FROM projekt WHERE id = '$projekt'"); - - - if(isset($warenkorb['projekt']) && $warenkorb['projekt'] && is_numeric($warenkorb['projekt'])) - { - if($this->app->DB->Select("SELECT id FROM projekt WHERE id = '".(int)$warenkorb['projekt']."' AND geloescht <> 1 LIMIT 1")) - { - $projekt = $warenkorb['projekt']; - $warenkorbprojekt = $warenkorb['projekt']; - } - } - - $demomodus = $shopexportArr['demomodus']; - if($doctype === 'angebot') - { - $this->LoadAngebotStandardwerte($auftrag,$adresse); - }else{ - $this->LoadAuftragStandardwerte($auftrag,$adresse); - } - $vertriebid = $this->app->DB->Select("SELECT vertrieb FROM adresse WHERE id = '$adresse' LIMIT 1"); - $this->app->DB->Update("UPDATE $doctype SET vertriebid = '$vertriebid' WHERE id = '$auftrag' LIMIT 1"); - $vertrieb = ''; - if($vertriebid){ - $vertrieb = $this->app->DB->real_escape_string($this->app->DB->Select("SELECT name FROM adresse WHERE id = '$vertriebid' LIMIT 1")); - } - - if(strpos($warenkorb['gesamtsumme'],',')!==false) - { - $warenkorb['gesamtsumme'] = str_replace(',','.',$warenkorb['gesamtsumme']); - } - - if(!$this->CheckDateValidate($warenkorb['lieferdatum'])) { - $warenkorb['lieferdatum']=''; - } - - if($warenkorb['lieferung']=='' || $warenkorb['lieferung']==='versandunternehmen'){ - $versand = $this->Firmendaten('versandart'); - } - else{ - $versand = $warenkorb['lieferung']; - } - - - $versandarten = $this->GetVersandartAuftrag($projekt); - if (empty($versandarten) || !array_key_exists($versand, $versandarten)){ - $versand = $this->Firmendaten('versandart'); - } - $bekannteversandart = $this->GetVersandartAuftrag($projekt); - if(!isset($bekannteversandart[$warenkorb['lieferung']])) - { - $versand = $this->Firmendaten('versandart'); - } - - $versandartenmapping = $shopexportArr['versandartenmapping']; - $zahlungsweisenmapping = $shopexportArr['zahlungsweisenmapping']; - $positionsteuersaetzeerlauben = $shopexportArr['positionsteuersaetzeerlauben']; - $steuerfreilieferlandexport = $shopexportArr['steuerfreilieferlandexport']; - - $fastlane = 0; - $autoversandvonMapping = false; - if($versandartenmapping) - { - $extrasel = ''; - $lieferung1 = $this->app->DB->real_escape_string($warenkorb['lieferung']); - $lieferung2 = $this->app->DB->real_escape_string($this->app->erp->ConvertForDBUTF8($warenkorb['lieferung'])); - if($lieferung2 !== '' && $lieferung2 != $lieferung1){ - $extrasel .= " OR versandart_shop = '$lieferung2' "; - } - $lieferung3 = $this->app->DB->real_escape_string($this->app->erp->ConvertForDB($warenkorb['lieferung'])); - if($lieferung3 !== '' && $lieferung3 != $lieferung1){ - $extrasel .= " OR versandart_shop = '$lieferung3' "; - } - $versandarten = $this->app->DB->SelectArr("SELECT * FROM shopexport_versandarten WHERE aktiv = 1 AND shop = '$shop' AND versandart_wawision <> '' AND (versandart_shop = '".$this->app->DB->real_escape_string($warenkorb['lieferung'])."' $extrasel)"); - if(!empty($versandarten)) - { - $found = false; - foreach($versandarten as $vers) - { - $land = !empty($warenkorb['lieferadresse_land'])?$warenkorb['lieferadresse_land']:$warenkorb['land']; - if(!$land){ - $land = $this->Firmendaten("land"); - } - if(strpos($vers['land'],$land) !== false) - { - $versand = $vers['versandart_wawision']; - $warenkorb['autoversand'] = $vers['autoversand']; - $autoversandvonMapping = true; - if($vers['fastlane'] == 1) - { - $fastlane = 1; - } - $found = true; - break; - } - } - if(!$found) - { - //Fallback - foreach($versandarten as $vers) - { - if($vers['land'] == '') - { - $versand = $vers['versandart_wawision']; - $warenkorb['autoversand'] = $vers['autoversand']; - $autoversandvonMapping = true; - $found = true; - if($vers['fastlane'] == 1) - { - $fastlane = 1; - } - break; - } - } - } - if(!$found) - { - $versandarten2 = $this->app->DB->SelectArr("SELECT * FROM shopexport_versandarten WHERE aktiv = 1 AND shop = '$shop' AND versandart_wawision <> '' AND versandart_shop = ''"); - foreach($versandarten2 as $vers) - { - $land = !empty($warenkorb['lieferadresse_land'])?$warenkorb['lieferadresse_land']:$warenkorb['land']; - if(!$land){ - $land = $this->Firmendaten('land'); - } - if(strpos($vers['land'],$land) !== false) - { - $versand = $vers['versandart_wawision']; - $warenkorb['autoversand'] = $vers['autoversand']; - $autoversandvonMapping = true; - $found = true; - if($vers['fastlane'] == 1) - { - $fastlane = 1; - } - break; - } - } - if(!$found) - { - //Fallback - foreach($versandarten2 as $vers) - { - if($vers['land'] == '') - { - $versand = $vers['versandart_wawision']; - $warenkorb['autoversand'] = $vers['autoversand']; - $autoversandvonMapping = true; - $found = true; - if($vers['fastlane'] == 1) - { - $fastlane = 1; - } - break; - } - } - } - - } - }else{ - $checkversand = $this->app->DB->Select("SELECT id FROM shopexport_versandarten WHERE shop = '$shop' AND versandart_shop = '".$this->app->DB->real_escape_string($warenkorb['lieferung'])."' LIMIT 1"); - if(!$checkversand) - { - $this->app->DB->Insert("INSERT INTO shopexport_versandarten (shop, versandart_shop, aktiv) values ('$shop','".$this->app->DB->real_escape_string($warenkorb['lieferung'])."',0)"); - } - } - } - - $empfaengerLand = $warenkorb['land']; - if(!empty($warenkorb['lieferadresse_name']) && !empty($warenkorb['lieferadresse_land']) - && ( - $warenkorb['lieferadresse_name'] !== $warenkorb['name'] - || $warenkorb['lieferadresse_land'] !== $warenkorb['land'] - || $warenkorb['lieferadresse_strasse'] !== $warenkorb['strasse'] - || $warenkorb['lieferadresse_ort'] !== $warenkorb['ort'] - || $warenkorb['lieferadresse_plz'] !== $warenkorb['plz'] - ) - ) { - $warenkorb['abweichendelieferadresse']=1; - if($steuerfreilieferlandexport && !empty($warenkorb['lieferadresse_land'])){ - $empfaengerLand = $warenkorb['lieferadresse_land']; - } - } - - $ust_befreit=0; - if(!empty($empfaengerLand) && $empfaengerLand !== $this->Firmendaten("land")) - { - if($this->IstEU($empfaengerLand)){ - $ust_befreit=1; - } - if($this->Export($empfaengerLand)){ - $ust_befreit=2; - } - } - if(isset($warenkorb['ust_befreit']) && is_numeric($warenkorb['ust_befreit'])) - { - $warenkorb_ustbefreit = (int)$warenkorb['ust_befreit']; - if($warenkorb_ustbefreit >= 0 && $warenkorb_ustbefreit <= 3){ - $ust_befreit = $warenkorb_ustbefreit; - } - } - - if(isset($warenkorb['fastlane'])) - { - $fastlane = $warenkorb['fastlane']; - } - - if($fastlane) - { - $fastlane = 1; - }else{ - $fastlane = 0; - } - - - $warenkorb['zahlungsweise'] = str_replace(array('ü','Ü','ä','Ä','ö','Ö','ß'),array('ü','Ü','ä','Ä','ö','Ö','ß'), $warenkorb['zahlungsweise']); - if($zahlungsweisenmapping) - { - $extrasel = ""; - $zahlungsweise1 = $this->app->DB->real_escape_string($warenkorb['zahlungsweise']); - $zahlungsweise2 = $this->app->DB->real_escape_string($this->app->erp->ConvertForDBUTF8($warenkorb['zahlungsweise'])); - if($zahlungsweise2 !== '' && $zahlungsweise2 != $zahlungsweise1)$extrasel .= " OR zahlweise_shop = '$zahlungsweise2' "; - $zahlungsweise3 = $this->app->DB->real_escape_string($this->app->erp->ConvertForDB($warenkorb['zahlungsweise'])); - if($zahlungsweise3 !== '' && $zahlungsweise3 != $zahlungsweise1)$extrasel .= " OR zahlweise_shop = '$zahlungsweise3' "; - $shopexport_zahlweisen = $this->app->DB->SelectArr("SELECT * FROM shopexport_zahlweisen WHERE shop='$shop' AND aktiv = 1 AND zahlweise_wawision <> '' AND (zahlweise_shop = '".$this->app->DB->real_escape_string($warenkorb['zahlungsweise'])."' $extrasel )"); - if(!$shopexport_zahlweisen) - { - if($warenkorb['zahlungsweise']=="secupay_creditcard") $warenkorb['zahlungsweise']="secupay"; - if($warenkorb['zahlungsweise']=="Amazoncba") $warenkorb['zahlungsweise']="amazon"; - if($warenkorb['zahlungsweise'] == 'sofort_sofortueberweisung')$warenkorb['zahlungsweise'] = 'sofortueberweisung'; - $shopexport_zahlweisen = $this->app->DB->SelectArr("SELECT * FROM shopexport_zahlweisen WHERE aktiv = 1 AND shop='$shop' AND zahlweise_shop = '".$this->app->DB->real_escape_string($warenkorb['zahlungsweise'])."'"); - if(!$shopexport_zahlweisen) - { - $checkzahl = $this->app->DB->Select("SELECT id FROM shopexport_zahlweisen WHERE shop = '$shop' and zahlweise_shop = '".$this->app->DB->real_escape_string($warenkorb['zahlungsweise'])."' LIMIT 1"); - if(!$checkzahl) - { - $this->app->DB->Insert("INSERT INTO shopexport_zahlweisen (shop, zahlweise_shop, aktiv) values ('$shop','".$this->app->DB->real_escape_string($warenkorb['zahlungsweise'])."',0)"); - } - } - } - - $found = false; - if($shopexport_zahlweisen) - { - foreach($shopexport_zahlweisen as $zahlung) - { - $warenkorb['zahlungsweise'] = $zahlung['zahlweise_wawision']; - $warenkorb['vorabbezahltmarkieren'] = $zahlung['vorabbezahltmarkieren']; - if(!$zahlung['autoversand']){ - $warenkorb['autoversand'] = 0; - } - if($zahlung['keinerechnung']){ - $warenkorb['auftragsart'] = 'lieferung'; - } - if($zahlung['fastlane'] == 1) { - $fastlane = 1; - } - $found = true; - break; - } - } - if(!$found) - { - $shopexport_zahlweisen2 = $this->app->DB->SelectArr("SELECT * FROM shopexport_zahlweisen WHERE shop='$shop' AND aktiv = 1 AND zahlweise_wawision <> '' AND zahlweise_shop = ''"); - if($shopexport_zahlweisen2) - { - foreach($shopexport_zahlweisen2 as $zahlung) - { - $warenkorb['zahlungsweise'] = $zahlung['zahlweise_wawision']; - $warenkorb['vorabbezahltmarkieren'] = $zahlung['vorabbezahltmarkieren']; - if(!$zahlung['autoversand']){ - $warenkorb['autoversand'] = 0; - } - if($zahlung['keinerechnung']){ - $warenkorb['auftragsart'] = 'lieferung'; - } - if($zahlung['fastlane'] == 1) { - $fastlane = 1; - } - $found = true; - break; - } - } - } - if($warenkorb['zahlungsweise']==='bar') - { - $versand = 'selbstabholer'; - } - }else{ - if($warenkorb['zahlungsweise'] === 'secupay_creditcard') { - $warenkorb['zahlungsweise']='secupay'; - } - if($warenkorb['zahlungsweise'] === 'Amazoncba') { - $warenkorb['zahlungsweise']='amazon'; - } - if($warenkorb['zahlungsweise'] === 'sofort_sofortueberweisung'){ - $warenkorb['zahlungsweise'] = 'sofortueberweisung'; - } - - $bekanntezahlungsweisen = $this->GetZahlungsweise(); - if(!isset($bekanntezahlungsweisen[$warenkorb['zahlungsweise']])) - { - $warenkorb['zahlungsweise'] = $this->Firmendaten("zahlungsweise"); - } - - if($warenkorb['zahlungsweise']==='bar') - { - $versand = 'selbstabholer'; - } - - $vorabbezahltmarkieren_ohnevorkasse_bar = $shopexportArr['vorabbezahltmarkieren_ohnevorkasse_bar']; - - if($vorabbezahltmarkieren_ohnevorkasse_bar=='1' && ($warenkorb['zahlungsweise']!=='rechnung' && $warenkorb['zahlungsweise']!=='nachnahme' && $warenkorb['zahlungsweise']!=='sofortueberweisung' - && $warenkorb['zahlungsweise']!=='bar' && $warenkorb['zahlungsweise']!=='vorkasse' && $warenkorb['zahlungsweise']!=='paypal')) - { - $warenkorb['vorabbezahltmarkieren']='1'; - } - - if(empty($warenkorb['vorabbezahltmarkieren']) || $warenkorb['vorabbezahltmarkieren']!='1') { - $warenkorb['vorabbezahltmarkieren']='0'; - } - } - - switch($shopexportArr['autoversandoption']){ - case 'rechnungundlieferschein': - $warenkorb['auftragsart'] = 'standardauftrag'; - break; - case 'nurrechnung': - $warenkorb['auftragsart'] = 'rechnung'; - break; - case 'nurlieferschein': - $warenkorb['auftragsart'] = 'lieferung'; - break; - } - - - if(!empty($warenkorb['lieferadresse_name'])){ - $warenkorb['abweichendelieferadresse'] = '1'; - } - else{ - $warenkorb['abweichendelieferadresse'] = '0'; - } - - - //belegnummer fuer auftrag erzeugen - $belegnr = (String)$this->app->DB->Select("SELECT belegnr FROM $doctype WHERE id = '$auftrag' LIMIT 1"); - if($belegnr === '' || $belegnr === '0') - { - if((String)$demomodus === '1' || $doctype === 'angebot') - { - $belegnr = ""; - $demomodus = 1; - }else{ - $belegnr = $this->GetNextNummer($doctype,$projekt,$auftrag); - } - } - - if($warenkorb['bestellnummer']!='') { - $warenkorb['bestellnummer'] = 'Ihre Bestellnummer: '.$warenkorb['bestellnummer']; - } - - - if(!isset($warenkorb['aktion'])) { - $warenkorb['aktion'] = ""; - } - - if(isset($warenkorb['aktionscode']) && $warenkorb['aktionscode']!="") { - $warenkorb['aktion'] = $warenkorb['aktionscode']; - } - - $shopfreitext = $shopexportArr['freitext']; - if($shopfreitext === 'freitext' && !empty($warenkorb['internebemerkung'])) - { - if(empty($warenkorb['freitext'])) - { - $warenkorb['freitext'] = $warenkorb['internebemerkung']; - }else{ - $warenkorb['freitext'] .= "\n".$warenkorb['internebemerkung']; - } - $warenkorb['internebemerkung'] = ''; - if(!empty($warenkorb['internebemerkung'])) - { - $warenkorb['internebemerkung'] = ''; - } - }elseif($shopfreitext === 'internebemerkung' && !empty($warenkorb['freitext'])) - { - if(empty($warenkorb['internebemerkung'])) - { - $warenkorb['internebemerkung'] = $warenkorb['freitext']; - }else{ - $warenkorb['internebemerkung'] .= "\n".$warenkorb['freitext']; - } - $warenkorb['freitext'] = ''; - } - - $checksprache = $this->app->DB->Select("SELECT sprache FROM shopexport_sprachen WHERE shop = '$shop' AND (projekt = '$projekt' OR projekt = 0) AND - (land = '".(isset($warenkorb['land'])?$warenkorb['land']:$this->app->erp->Firmendaten('land'))."' OR land = '') ORDER BY projekt = '$projekt' DESC, land = '".$warenkorb['land']."' DESC LIMIT 1 - "); - if(!isset($warenkorb['kunde_sprache']) || !$warenkorb['kunde_sprache']){ - $warenkorb['kunde_sprache'] = $checksprache; - } - - if($warenkorb['bestellnummer']!=''){ - $warenkorb['freitext'] .= "\r\n" . $warenkorb['bestellnummer']; - } - - $escapearr = array('ansprechpartner','lieferadresse_name', 'lieferadresse_strasse','lieferadresse_unterabteilung','lieferadresse_abteilung','lieferadresse_ansprechpartner','lieferadresse_ort','lieferadresse_adresszusatz','freitext'); - foreach($escapearr as $k) - { - if(isset($warenkorb[$k])){ - $warenkorb[$k] = $this->app->DB->real_escape_string($warenkorb[$k]); - } - } - - if($doctype === 'angebot'){ - $this->app->DB->Update("UPDATE angebot SET anfrage = '".$this->app->DB->real_escape_string($warenkorb['onlinebestellnummer'])."' WHERE id = '$auftrag' LIMIT 1"); - } - - $this->app->DB->Update("UPDATE $doctype SET - belegnr='$belegnr', - datum='{$warenkorb['bestelldatum']}', - lieferdatum='{$warenkorb['lieferdatum']}', - ustid='{$warenkorb['ustid']}', - ust_befreit='{$ust_befreit}', - internet='{$warenkorb['onlinebestellnummer']}', - transaktionsnummer='{$warenkorb['transaktionsnummer']}', - aktion='{$warenkorb['aktion']}', - versandart='{$versand}', - vertrieb='{$vertrieb}', - zahlungsweise='{$warenkorb['zahlungsweise']}', - freitext='{$warenkorb['freitext']}', - bank_inhaber='{$warenkorb['kontoinhaber']}', - bank_institut='{$warenkorb['bank']}', - bank_blz='{$warenkorb['blz']}', - bank_konto='{$warenkorb['kontonummer']}', - ".($doctype !== 'angebot'?"vorabbezahltmarkieren='{$warenkorb['vorabbezahltmarkieren']}',":'')." - autoversand='1', - abweichendelieferadresse='{$warenkorb['abweichendelieferadresse']}', - ansprechpartner='{$warenkorb['ansprechpartner']}', - liefername='{$warenkorb['lieferadresse_name']}', - lieferland='{$warenkorb['lieferadresse_land']}', - lieferstrasse='{$warenkorb['lieferadresse_strasse']}', - lieferabteilung='{$warenkorb['lieferadresse_abteilung']}', - lieferunterabteilung='{$warenkorb['lieferadresse_unterabteilung']}', - lieferansprechpartner='{$warenkorb['lieferadresse_ansprechpartner']}', - lieferort='{$warenkorb['lieferadresse_ort']}', - lieferplz='{$warenkorb['lieferadresse_plz']}', - liefertitel='{$warenkorb['lieferadresse_titel']}', - lieferemail='{$warenkorb['lieferadresse_email']}', - lieferadresszusatz='{$warenkorb['lieferadresse_adresszusatz']}', - packstation_inhaber='{$warenkorb['packstation_inhaber']}', - packstation_station='{$warenkorb['packstation_nummer']}', - packstation_ident='{$warenkorb['packstation_postidentnummer']}', - packstation_plz='{$warenkorb['packstation_plz']}', - packstation_ort='{$warenkorb['packstation_ort']}', - ".($doctype !== 'angebot'?"partnerid='{$warenkorb['affiliate_ref']}',":'')." - ".($doctype !== 'angebot'?"kennen='{$warenkorb['kennen']}',":'')." - status=".((String)$demomodus === '1'?"'angelegt'":"'freigegeben'").", - projekt='$projekt', - shop='$shop', - zahlungszielskonto = 0, - bodyzusatz='{$warenkorb['bodyzusatz']}', - gesamtsumme='{$warenkorb['gesamtsumme']}' WHERE id='$auftrag' LIMIT 1"); - - if(!empty($warenkorb['angebot']) && $warenkorb['angebot']!='') - { - $angebotid = $this->app->DB->Select("SELECT id FROM angebot WHERE belegnr='".$this->app->DB->real_escape_string($warenkorb['angebot'])."' AND belegnr!='' LIMIT 1"); - if($angebotid > 0) - { - $this->app->DB->Update("UPDATE angebot SET auftrag='$belegnr', auftragid='$auftrag' WHERE id='$angebotid' LIMIT 1"); - $this->app->DB->Update("UPDATE auftrag SET angebot='".$this->app->DB->real_escape_string($warenkorb['angebot'])."', angebotid='$angebotid' WHERE id='$auftrag' LIMIT 1"); - } - } - - if($projekt && $doctype === 'auftrag') - { - $bevorzugteslager = $this->app->DB->Select("SELECT l.id FROM projekt p INNER JOIN lager l ON p.standardlager = l.id WHERE p.id = '$projekt' LIMIT 1"); - if($bevorzugteslager){ - $this->app->DB->Update("UPDATE auftrag SET standardlager = '$bevorzugteslager' WHERE id='$auftrag' LIMIT 1"); - } - } - - - if($doctype === 'auftrag' && isset($warenkorb['ust_ok']) && (string)$warenkorb['ust_ok'] === '0') { - $this->app->DB->Update( - sprintf( - 'UPDATE `auftrag` SET `ust_ok` = 0 WHERE `id` = %d', - $auftrag - ) - ); - } - - - if($this->app->DB->error()) - { - $this->app->DB->Update("UPDATE $doctype SET versandart='{$versand}' WHERE id='$auftrag'"); - $this->app->DB->Update("UPDATE $doctype SET datum='{$warenkorb['bestelldatum']}' WHERE id='$auftrag'"); - $this->app->DB->Update("UPDATE $doctype SET shop='$shop' WHERE id='$auftrag'"); - $this->app->DB->Update("UPDATE $doctype SET zahlungsweise='{$warenkorb['zahlungsweise']}' WHERE id='$auftrag' LIMIT 1"); - } - $this->app->DB->Update("UPDATE $doctype SET - name = '".$this->app->DB->real_escape_string($warenkorb['name'])."' - ,strasse = '".$this->app->DB->real_escape_string($warenkorb['strasse'])."' - ,plz = '".$this->app->DB->real_escape_string($warenkorb['plz'])."' - ,ort = '".$this->app->DB->real_escape_string($warenkorb['ort'])."' - ,land = '".$this->app->DB->real_escape_string($warenkorb['land'])."' - ,abteilung = '".$this->app->DB->real_escape_string($warenkorb['abteilung'])."' - ,unterabteilung= '".$this->app->DB->real_escape_string($warenkorb['unterabteilung'])."' - ,ansprechpartner= '".$warenkorb['ansprechpartner']."' - ,adresszusatz= '".$this->app->DB->real_escape_string($warenkorb['adresszusatz'])."' - ,email= '".$this->app->DB->real_escape_string($warenkorb['email'])."' - ,telefon= '".$this->app->DB->real_escape_string($warenkorb['telefon'])."' - ,telefax= '".$this->app->DB->real_escape_string($warenkorb['telefax'])."' - WHERE id='$auftrag' LIMIT 1"); - - if(!empty($warenkorb['anrede'])){ - $query = sprintf("UPDATE `%s` SET `typ` = '%s' WHERE `id` = %d", - $doctype, $this->app->DB->real_escape_string($warenkorb['anrede']), $auftrag); - $this->app->DB->Update($query); - } - if($warenkorb['ustid']){ - $this->app->DB->Update("UPDATE $doctype SET ustid= '" . $this->app->DB->real_escape_string($warenkorb['ustid']) . "' WHERE id='$auftrag' LIMIT 1"); - } - if(!empty($warenkorb['abweichendelieferadresse'])){ - $abweichendeUstId = ''; - if(!empty($warenkorb['lieferadresse_ustid'])){ - $abweichendeUstId = $warenkorb['lieferadresse_ustid']; - } - $this->app->DB->Update("UPDATE $doctype SET ustid= '".$this->app->DB->real_escape_string($abweichendeUstId)."' WHERE id='$auftrag' LIMIT 1"); - } - - if($shopexportArr['vertrieb']) { - $vertriebname = $this->app->DB->SelectRow( - sprintf( - 'SELECT id, name FROM adresse WHERE id = %d AND geloescht <> 1', - $shopexportArr['vertrieb'] - ) - ); - if($vertriebname && $doctype === 'angebot'){ - $this->app->DB->Update( - sprintf( - "UPDATE angebot SET vertriebid = %d, vertrieb = '%s' WHERE id = %d", - - $shopexportArr['vertrieb'], $this->app->DB->real_escape_string($vertriebname['name']), $auftrag - ) - ); - } - elseif($vertriebname && $doctype !== 'angebot') { - $this->app->DB->Update( - sprintf( - "UPDATE auftrag SET vertriebid = %d, vertrieb = '%s' WHERE id = %d", - $shopexportArr['vertrieb'], $this->app->DB->real_escape_string($vertriebname['name']), $auftrag - ) - ); - } - } - - if($fastlane) - { - $this->app->DB->Update("UPDATE $doctype SET fastlane= 1 WHERE id='$auftrag' LIMIT 1"); - } - - if(isset($warenkorb['auftragsart'])){ - $this->app->DB->Update("UPDATE $doctype SET art = '{$warenkorb['auftragsart']}' WHERE id='$auftrag'"); - } - - if(!empty($warenkorb['bundesland'])){ - $this->app->DB->Update("UPDATE $doctype SET bundesland = '".$this->app->DB->real_escape_string($warenkorb['bundesland'])."' WHERE id = '$auftrag' LIMIT 1"); - } - if($this->app->erp->ModulVorhanden('bundesstaaten')) - { - if(!empty($warenkorb['bundesstaat'])) - { - $bundesstaat = $this->app->DB->Select("SELECT iso FROM `bundesstaaten` WHERE land = '".$this->app->DB->real_escape_string($warenkorb['land'])."' AND (iso = '".$this->app->DB->real_escape_string($warenkorb['bundesstaat'])."' OR bundesstaat = '".$this->app->DB->real_escape_string($warenkorb['bundesstaat'])."') AND aktiv = 1 LIMIT 1"); - if($bundesstaat != ''){ - $this->app->DB->Update("UPDATE $doctype SET bundesstaat = '".$this->app->DB->real_escape_string($bundesstaat)."' WHERE id = '$auftrag' LIMIT 1"); - } - } - if(!empty($warenkorb['lieferbundesstaat'])) - { - $bundesstaat = $this->app->DB->Select("SELECT iso FROM `bundesstaaten` WHERE land = '".$this->app->DB->real_escape_string($warenkorb['lieferland'])."' AND (iso = '".$this->app->DB->real_escape_string($warenkorb['lieferadresse_bundesstaat'])."' OR bundesstaat = '".$this->app->DB->real_escape_string($warenkorb['lieferadresse_bundesstaat'])."') AND aktiv = 1 LIMIT 1"); - if($bundesstaat != ''){ - $this->app->DB->Update("UPDATE $doctype SET lieferbundesstaat = '".$this->app->DB->real_escape_string($bundesstaat)."' WHERE id = '$auftrag' LIMIT 1"); - } - } - } - - $keinautoversandwegenkommentar = false; - if((!empty($warenkorb['freitext']) || !empty($warenkorb['internebemerkung'])) && $shopexportArr['autoversandbeikommentardeaktivieren']){ - $keinautoversandwegenkommentar = true; - } - if((isset($warenkorb['autoversand']) && $warenkorb['autoversand'] == '0') || $keinautoversandwegenkommentar){ - $this->app->DB->Update("UPDATE $doctype SET autoversand='0' WHERE id='$auftrag'"); - } - if(!empty($warenkorb['autoversandueberschreiben']) && $warenkorb['autoversandueberschreiben'] == '1'){ - $this->app->DB->Update("UPDATE $doctype SET autoversand='1' WHERE id='$auftrag'"); - } - if(!empty($warenkorb['internebemerkung'])){ - $this->app->DB->Update("UPDATE $doctype set internebemerkung = '".$this->app->DB->real_escape_string( $warenkorb['internebemerkung'])."' WHERE id = '$auftrag' LIMIT 1"); - } - if(!empty($warenkorb['internebezeichnung'])){ - $this->app->DB->Update("UPDATE $doctype set internebezeichnung = '".$this->app->DB->real_escape_string( $warenkorb['internebezeichnung'])."' WHERE id = '$auftrag' LIMIT 1"); - } - - if($this->app->DB->Select("SELECT `ust_ok` FROM `shopexport` WHERE `id` = '{$shop}' LIMIT 1")){ - $this->app->DB->Update("UPDATE `{$doctype}` SET `ust_ok` = 1 WHERE `id` = '{$auftrag}' LIMIT 1"); - }elseif(isset($warenkorb['ust_ok']) && $warenkorb['ust_ok'] == '1'){ - $this->app->DB->Update("UPDATE `{$doctype}` SET `ust_ok` = 1 WHERE `id` = '{$auftrag}' LIMIT 1"); - }elseif($doctype === 'auftrag'){ - $this->app->DB->Update("UPDATE `{$doctype}` SET `ust_ok` = 0 WHERE `id` = '{$auftrag}' LIMIT 1"); - } - - if($warenkorb['zahlungsweise'] === 'rechnung') - { - $fromstandard = true; - $adressezahlungsweise = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id = '$adresse' LIMIT 1"); - if($adressezahlungsweise) - { - if($adressezahlungsweise['zahlungsweise'] === 'rechnung' && $adressezahlungsweise['zahlungszieltage'] > 0){ - $fromstandard = false; - } - } - if($fromstandard) - { - $this->app->DB->Update("UPDATE $doctype SET - zahlungszielskonto='".(float)$this->Firmendaten('zahlungszielskonto')."', - zahlungszieltage='".(float)$this->Firmendaten('zahlungszieltage')."', - zahlungszieltageskonto='".(float)$this->Firmendaten('zahlungszieltageskonto')."' - WHERE id='$auftrag' LIMIT 1"); - } - } - - if(!empty($warenkorb['kunde_sprache'])) - { - $this->app->DB->Update("UPDATE $doctype SET sprache = '".$this->app->DB->real_escape_string($warenkorb['kunde_sprache'])."' WHERE id = '$auftrag' LIMIT 1"); - if(!$this->app->DB->Select("SELECT adressennichtueberschreiben FROM shopexport WHERE id = '$shop' LIMIT 1")) - { - $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$auftrag' LIMIT 1"); - if('' === (String)$this->app->DB->Select("SELECT sprache FROM adresse WHERE id = '$adresse' LIMIT 1")) - { - $this->app->DB->Update("UPDATE adresse SET sprache = '".$this->app->DB->real_escape_string($warenkorb['kunde_sprache'])."' WHERE id = '$adresse' LIMIT 1"); - } - } - } - - if(!empty($warenkorb['anhang'])) - { - if(!is_array($warenkorb['anhang'])){ - $data = $warenkorb['anhang']; - $warenkorb['anhang'] = []; - $warenkorb['anhang'][] = ['datei' => $data, 'endung' => '']; - } - - foreach ($warenkorb['anhang'] as $anhang){ - $endung = ltrim($anhang['endung'],'.'); - $dateilabel = 'Anhang'; - $decodedData = @base64_decode($anhang['datei']); - $tmpdatei = $this->app->erp->GetTMP().'anhangtmp'.microtime(true); - file_put_contents($tmpdatei ,$decodedData); - if(empty($endung)){ - $mimetype = explode('/',mime_content_type($tmpdatei)); - switch ($mimetype[0]){ - case 'image': - if(strpos($mimetype[1],'jpg') !== false || strpos($mimetype[1],'jpeg') !== false){ - $endung = 'jpg'; - } - if(strpos($mimetype[1],'png') !== false){ - $endung = 'png'; - } - if(strpos($mimetype[1],'bmp') !== false){ - $endung = 'bmp'; - } - break; - case 'text': - if(strpos($mimetype[1],'plain') !== false){ - $endung = 'txt'; - } - if(strpos($mimetype[1],'php') !== false){ - $endung = 'php'; - } - break; - default: - $endung = 'pdf'; - break; - } - } - - $datei = $this->app->Conf->WFuserdata.'/'.md5($warenkorb['onlinebestellnummer'].'.'.$endung.microtime(true)); - move_uploaded_file($tmpdatei,$datei); - - if(file_put_contents($datei,$decodedData)) - { - if(@is_file($datei) && @filesize($datei)) - { - if(!empty(trim($anhang['name']))){ - $dateilabel = $this->app->DB->real_escape_string(trim($anhang['name'])); - } - $fileid = $this->CreateDatei($warenkorb['onlinebestellnummer'].'.'.$endung, $dateilabel, '', '', $datei, $this->app->User->GetName()); - $this->AddDateiStichwort($fileid, 'anhang', $doctype, $auftrag); - unlink($datei); - } - } - } - } - - - if(isset($warenkorb['zahlungszielskonto'])){ - $this->app->DB->Update("UPDATE $doctype SET zahlungszielskonto = '".(float)(str_replace(',','.',$warenkorb['zahlungszielskonto']))."' WHERE id = '$auftrag' LIMIT 1"); - } - if(isset($warenkorb['zahlungszieltage'])){ - $this->app->DB->Update("UPDATE $doctype SET zahlungszieltage = '".(int)($warenkorb['zahlungszieltage'])."' WHERE id = '$auftrag' LIMIT 1"); - } - if(isset($warenkorb['zahlungszieltageskonto'])){ - $this->app->DB->Update("UPDATE $doctype SET zahlungszieltageskonto = '".(int)($warenkorb['zahlungszieltageskonto'])."' WHERE id = '$auftrag' LIMIT 1"); - } - if(isset($warenkorb['steuersatz_normal']) && (float)str_replace(',','.',$warenkorb['steuersatz_normal']) > 1){ - $this->app->DB->Update("UPDATE $doctype SET steuersatz_normal = '".(float)(str_replace(',','.',$warenkorb['steuersatz_normal']))."' WHERE id = '$auftrag' LIMIT 1"); - } - if(isset($warenkorb['steuersatz_ermaessigt']) && (float)str_replace(',','.',$warenkorb['steuersatz_ermaessigt']) > 1){ - $this->app->DB->Update("UPDATE $doctype SET steuersatz_ermaessigt = '".(float)(str_replace(',','.',$warenkorb['steuersatz_ermaessigt']))."' WHERE id = '$auftrag' LIMIT 1"); - } - - $this->RunHook('import_auftrag_tax_changed',2, $doctype, $auftrag); - if(isset($warenkorb['steuersatz_normal']) && (float)str_replace(',','.',$warenkorb['steuersatz_normal']) > 1){ - $warenkorb['steuersatz_normal'] = $this->app->DB->Select("SELECT steuersatz_normal FROM $doctype WHERE id = $auftrag LIMIT 1"); - } - if(isset($warenkorb['steuersatz_ermaessigt']) && (float)str_replace(',','.',$warenkorb['steuersatz_ermaessigt']) > 1){ - $warenkorb['steuersatz_ermaessigt'] = $this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $doctype WHERE id = $auftrag LIMIT 1"); - } - - $this->RunHook('import_auftrag_tax_changed',2, $doctype, $auftrag); - if(isset($warenkorb['steuersatz_normal']) && (float)str_replace(',','.',$warenkorb['steuersatz_normal']) > 1){ - $warenkorb['steuersatz_normal'] = $this->app->DB->Select("SELECT steuersatz_normal FROM $doctype WHERE id = $auftrag LIMIT 1"); - } - if(isset($warenkorb['steuersatz_ermaessigt']) && (float)str_replace(',','.',$warenkorb['steuersatz_ermaessigt']) > 1){ - $warenkorb['steuersatz_ermaessigt'] = $this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $doctype WHERE id = $auftrag LIMIT 1"); - } - - $waehrung = 'EUR'; - if(!empty($warenkorb['waehrung'])) { - $waehrung = $this->app->DB->real_escape_string(trim(strtoupper($warenkorb['waehrung']))); - if(!$waehrung) { - $waehrung = 'EUR'; - } - else{ - $this->app->DB->Update("UPDATE $doctype SET waehrung = '$waehrung' WHERE id = '$auftrag' LIMIT 1"); - } - } - - if(isset($warenkorb['auftragsart']) && $warenkorb['auftragsart']){ - $this->app->DB->Update("UPDATE $doctype SET art = '".$this->app->DB->real_escape_string($warenkorb['auftragsart'])."' WHERE id = '$auftrag' LIMIT 1"); - } - if($shop){ - $shoptyp = $shopexportArr['typ']; - $artikelimport = $shopexportArr['artikelimport']; - $artikelimporteinzeln = $shopexportArr['artikelimporteinzeln']; - $projekt = $shopexportArr['projekt']; - if(!empty($subshopprojekt)){ - $projekt = $subshopprojekt; - } - if(!empty($warenkorbprojekt)){ - $projekt = $warenkorbprojekt; - } - $multiprojekt = $shopexportArr['multiprojekt']; - $artikelnummernummerkreis = $shopexportArr['artikelnummernummerkreis']; - $shopbezeichnung = $shopexportArr['bezeichnung']; - $stuecklisteergaenzen = $shopexportArr['stuecklisteergaenzen']; - $artikeltexteuebernehmen = $shopexportArr['artikeltexteuebernehmen']; - } - - if($waehrung !== 'EUR') { - $this->LoadKurs($auftrag, $doctype, $projekt); - } - - if($doctype === 'auftrag'){ - $this->RunHook('ImportAuftrag', 4, $auftrag, $shop, $warenkorb, $projekt); - } - - if(isset($warenkorb['vertrieb'])){ - $this->app->DB->Update("UPDATE $doctype SET vertrieb = '".$warenkorb['vertrieb']."' WHERE id = '$auftrag' LIMIT 1"); - } - if(isset($warenkorb['vertriebid']) && $warenkorb['vertriebid'] > 0){ - $this->app->DB->Update("UPDATE $doctype SET vertriebid = '".$warenkorb['vertriebid']."' WHERE id = '$auftrag' LIMIT 1"); - } - - if(empty($warenkorb['steuerfrei']) && !empty($warenkorb['checksteuerfrei'])) - { - if($doctype === 'angebot' && !$this->AngebotMitUmsatzeuer($auftrag)) - { - $warenkorb['steuerfrei'] = 1; - }elseif($doctype === 'auftrag' && !$this->AuftragMitUmsatzsteuer($auftrag)) - { - $warenkorb['steuerfrei'] = 1; - } - } - - $parentcount = []; - $rabattpositionen = array(); - if(!empty($warenkorb['articlelist'])){ - foreach ($warenkorb['articlelist'] as $key => $value) {//Leerzeichen entfernen in Artikelnummern - unset($warenkorb['articlelist'][$key]['databaseId']); - if(isset($warenkorb['articlelist'][$key]['articleid'])){ - $warenkorb['articlelist'][$key]['articleid'] = trim($value['articleid']); - } - if(isset($warenkorb['articlelist'][$key]['variante_von'])){ - $warenkorb['articlelist'][$key]['variante_von'] = trim($value['variante_von']); - } - } - - //Stücklisten mit einem Element auflösen - foreach ($warenkorb['articlelist'] as $key => $value) { - if($stuecklisteergaenzen){ - $warenkorb['articlelist'][$key]['stuecklisteergaenzen'] = true; - } - if(isset($value['posid']) && $value['posid']) { - $posids[$value['posid']] = $key; - } - if(isset($value['parentid']) && $value['parentid']){ - if(empty($parentcount) || !isset($parentcount[$value['parentid']])){ - $parentcount[$value['parentid']] = 0; - } - $parentcount[$value['parentid']]++; - } - } - } - //if(true || !$stuecklisteergaenzen) - if(true) - { - if(!empty($parentcount)) - { - foreach($parentcount as $k => $v) - { - if($v == 1 && isset($posids[$k])) - { - foreach($warenkorb['articlelist'] as $key=>$value) - { - if(isset($value['parentid']) && $value['parentid'] && $value['parentid'] == $k) - { - if(isset($warenkorb['articlelist'][$posids[$k]]['options']) && $warenkorb['articlelist'][$posids[$k]]['options']) - { - $warenkorb['articlelist'][$key]['options'] = (isset($warenkorb['articlelist'][$key]['options']) && $warenkorb['articlelist'][$key]['options']?$warenkorb['articlelist'][$key]['options'].' ':'').$warenkorb['articlelist'][$posids[$k]]['options']; - } - if((isset($warenkorb['articlelist'][$posids[$k]]['price']) && $warenkorb['articlelist'][$posids[$k]]['price'] != 0) || (isset($warenkorb['articlelist'][$posids[$k]]['price_netto']) && $warenkorb['articlelist'][$posids[$k]]['price_netto'] != 0)) - { - if(isset($warenkorb['articlelist'][$posids[$k]]['price'])){ - $warenkorb['articlelist'][$key]['price'] = $warenkorb['articlelist'][$posids[$k]]['price']; - } - if(isset($warenkorb['articlelist'][$posids[$k]]['price_netto'])){ - $warenkorb['articlelist'][$key]['price_netto'] = $warenkorb['articlelist'][$posids[$k]]['price_netto']; - } - $warenkorb['articlelist'][$key]['quantity'] = $warenkorb['articlelist'][$posids[$k]]['quantity']; - } - if(isset($warenkorb['articlelist'][$posids[$k]]['steuersatz'])) - { - $warenkorb['articlelist'][$key]['steuersatz'] = $warenkorb['articlelist'][$posids[$k]]['steuersatz']; - } - unset($warenkorb['articlelist'][$key]['parentid']); - unset($warenkorb['articlelist'][$posids[$k]]); - } - } - } - } - } - } - - if(!empty($parentcount)) - { - foreach($parentcount as $k => $v) - { - if($v > 1 && isset($posids[$k])) - { - if(((isset($warenkorb['articlelist'][$posids[$k]]['price']) && $warenkorb['articlelist'][$posids[$k]]['price'] > 0) || - (isset($warenkorb['articlelist'][$posids[$k]]['price_netto']) && $warenkorb['articlelist'][$posids[$k]]['price_netto'] > 0))){ - foreach($warenkorb['articlelist'] as $key=>$value) - { - if(isset($value['parentid']) && $value['parentid'] && $value['parentid'] == $k && ((isset($value['price']) && $value['price'] > 0) || (isset($value['price_netto']) && $value['price_netto'] > 0)) ) - { - $warenkorb['articlelist'][$key]['price'] = 0; - $warenkorb['articlelist'][$key]['price_netto'] = 0; - } - } - } - } - } - } - - if(isset($warenkorb['gutscheincode'])){ - $voucher = $this->app->DB->SelectRow( sprintf("SELECT v.id,v.agent_address_id, a.name AS agent_name, v.commission_rate, v.voucher_code FROM voucher v - JOIN adresse a ON a.id=v.agent_address_id - WHERE v.voucher_code<>'' AND v.voucher_code='%s' AND (v.project_id=0 OR v.project_id='%s') AND a.geloescht<>1 LIMIT 1", - $warenkorb['gutscheincode'],$projekt)); - - if(!empty($voucher['id'])){ - $this->app->DB->Insert(sprintf("INSERT INTO commission_rate_receipt (doctype_id,doctype,commission_rate,notice) - VALUES ('%s','%s','%s','%s')",$auftrag,$doctype,$voucher['commission_rate'],'Kommission für Gutschein: '.$voucher['voucher_code'])); - - $this->app->DB->Update(sprintf("UPDATE $doctype SET vertrieb='%s', vertriebid='%s' WHERE id=%s", - $voucher['agent_name'],$voucher['agent_address_id'],$auftrag)); - } - } - - //artikelpositionen buchen - foreach($warenkorb['articlelist'] as $key=>$value) - { - $value['articleid'] = trim($value['articleid']); - if(isset($varj_id)){ - unset($varj_id); - } - if(!isset($warenkorb['articlelist'][$key]['ignorieren'])) - { - // wenn es das produkt in dem projekt gibt - $artikelimporteinzelngesetzt = $this->app->DB->Select("SELECT autoabgleicherlaubt FROM artikel WHERE nummer='{$value['articleid']}' AND projekt='$projekt' LIMIT 1"); - - // pruefe ob auftrag auf anderes projekt gestellt werden muss - if($multiprojekt=="1") - { - $artikelprojekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE nummer='{$value['articleid']}' LIMIT 1");// AND //TODO BENE - if($artikelprojekt > 0) - { - $projekt = $artikelprojekt; - } - } - else{ - $artikelprojekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE nummer='{$value['articleid']}' AND projekt='$projekt' LIMIT 1");// AND //TODO BENE - } - - $zwangsprojekt = $this->app->DB->Select("SELECT shopzwangsprojekt FROM projekt WHERE id='$artikelprojekt' LIMIT 1"); - - if($zwangsprojekt==1) - { - $this->app->DB->Update("UPDATE $doctype SET projekt='$artikelprojekt' WHERE id='$auftrag'"); - } - - $extart = $shopexportArr['artikelnummernummerkreis']; - - $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id='$projekt' LIMIT 1"); - //$j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='{$value[articleid]}' AND (shop='$shop' OR shop2='$shop' OR shop3='$shop') LIMIT 1"); - - $j_id = null; - if(!empty($value['fremdnummer'])) - { - $j_id = $this->app->DB->Select("SELECT a.id FROM artikelnummer_fremdnummern af INNER JOIN artikel a on af.artikel = a.id WHERE af.nummer='{$value['fremdnummer']}' AND af.aktiv = 1 AND af.nummer <> '' AND (a.projekt='$projekt' OR af.shopid = '$shop') AND a.nummer <> 'DEL' AND IFNULL(a.geloescht,0) = 0 ORDER BY af.shopid = '$shop' DESC,IFNULL(a.intern_gesperrt,0) = 0 DESC, af.id LIMIT 1"); - } - if(empty($j_id)){ - if($multiprojekt == '1' || !$eigenernummernkreis){ - $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='{$value['articleid']}' AND IFNULL(intern_gesperrt,0) = 0 AND IFNULL(geloescht,0) = 0 LIMIT 1"); //TODO BENE - }else{ - $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='{$value['articleid']}' AND IFNULL(intern_gesperrt,0) = 0 AND IFNULL(geloescht,0) = 0 AND projekt='$projekt' LIMIT 1"); //TODO BENE - } - } - - if(!$j_id) - { - if($multiprojekt=='1' || !$eigenernummernkreis){ - $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='{$value['articleid']}' AND nummer <> 'DEL' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE - } - else{ - $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='{$value['articleid']}' AND nummer <> 'DEL' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE - } - } - if(!$j_id) - { - if($multiprojekt=='1' || !$eigenernummernkreis){ - $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='{$value['articleid']}' AND nummer <> 'DEL' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE - } - else{ - $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='{$value['articleid']}' AND nummer <> 'DEL' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE - } - - } - - $check = false; - if($j_id) - { - $check = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE artikel='$j_id' - AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW()) AND ab_menge=1 - AND ((objekt='Standard' AND adresse=0) OR (objekt='' AND adresse=0)) AND geloescht=0 LIMIT 1"); - } - - - if($eigenernummernkreis) - { - $j_umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$j_id' LIMIT 1"); - } else { - $j_umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$j_id' LIMIT 1"); - } - - if($artikelimport || ($artikelimporteinzeln && $artikelimporteinzelngesetzt)) - { - if(isset($value['umsatzsteuer'])) - { - $j_umsatzsteuer = $value['umsatzsteuer']; - }elseif(isset($value['steuersatz'])) - { - - if(round((float)str_replace(',','.',$value['steuersatz']),2) == 7 || round(1+round((float)str_replace(',','.',$value['steuersatz']),2)/100,2) == round($this->GetSteuersatzErmaessigt(true,$auftrag,$doctype),2)) - { - $j_umsatzsteuer="ermaessigt"; - } - if(round((float)str_replace(',','.',$value['steuersatz']),2) == 19 || round(1+round((float)str_replace(',','.',$value['steuersatz']),2)/100,2) == round($this->GetSteuersatzNormal(true,$auftrag,$doctype),2)) - { - $j_umsatzsteuer="normal"; - } - } - if(isset($value['variante_von']) && $value['variante_von'] && $value['variante_von'] != $value['articleid']) - { - $value['variante_von'] = trim($value['variante_von']); - if($multiprojekt=='1' || !$eigenernummernkreis){ - $varj_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='{$value['variante_von']}' AND IFNULL(geloescht,0) = 0 AND IFNULL(intern_gesperrt,0) = 0 LIMIT 1"); - } - else{ - $varj_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='{$value['variante_von']}' AND IFNULL(geloescht,0) = 0 AND projekt='$projekt' AND IFNULL(intern_gesperrt,0) = 0 LIMIT 1"); - } - if(!$varj_id) - { - if($multiprojekt=='1' || !$eigenernummernkreis){ - $varj_id = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='{$value['variante_von']}' AND nummer <> 'DEL' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); - } - else{ - $varj_id = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='{$value['variante_von']}' AND nummer <> 'DEL' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); - } - } - if(!$varj_id) - { - if($multiprojekt=='1' || !$eigenernummernkreis){ - $varj_id = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='{$value['variante_von']}' AND nummer <> 'DEL' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); - } - else{ - $varj_id = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='{$value['variante_von']}' AND nummer <> 'DEL' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); - } - } - - if(!$varj_id) - { - $dataart = []; - if($artikelnummernummerkreis) - { - $variante_von = $value['variante_von']; - $value['variante_von'] = $this->GetNextArtikelnummer('produkt', 1, $projekt); - } - $dataart['nummer'] = $value['variante_von']; - $dataart['generierenummerbeioption'] = 1; - //$dataart['variante'] = 1; - $dataart['projekt'] = $projekt; - $dataart['art'] = 'produkt'; - if(isset($this->app->User)) - { - $dataart['firma'] = $this->app->User->GetFirma(); - }else { - $dataart['firma'] = 1; - } - if($j_umsatzsteuer==='ermaessigt'){ - $dataart['umsatzsteuer'] = 'ermaessigt'; - } - if($j_umsatzsteuer==='befreit'){ - $dataart['umsatzsteuer'] = 'befreit'; - } - $dataart['name_de'] = $value['variantename']; - $dataart['kurztext_de'] = $value['variantekurztext_de']; - if(isset($value['serviceartikel'])){ - $dataart['serviceartikel'] = $value['serviceartikel']; - } - if(isset($value['lagerartikel'])){ - $dataart['lagerartikel'] = $value['lagerartikel']; - } - if(isset($value['anhang'])){ - $dataart['anhang'] = $value['anhang']; - } - - //$dataart['anabregs_text'] = $value['varianteanabregs_text']; - $dataart['metakeywords_de'] = $value['variantemetakeywords_de']; - $dataart['metadescription_de'] = $value['variantemetadescription_de']; - $varj_id = $this->AddArtikel($dataart); - $this->app->erp->ObjektProtokoll('artikel', $varj_id, 'artikel_create','Shopimport: Atikelvariante erstellt'); - $this->AddVerkaufspreis($varj_id, 1, 0, $value['varianteprice']); - $value['articleid'] = $this->GetNextArtikelnummer("produkt", 1, $projekt); - } else { - $warenkorb['articlelist'][$key]['lagerartikel'] = $this->app->DB->Select("SELECT lagerartikel FROM artikel WHERE id = '$varj_id' LIMIT 1"); - $generierenummerbeioption = $this->app->DB->Select("SELECT generierenummerbeioption from artikel where id = '$varj_id' LIMIT 1"); - //$generierenummerbeioption = 1; - if($generierenummerbeioption) - { - $value['generierenummerbeioption'] = true; - $value['articleid'] = $this->GetNextArtikelnummer('produkt', 1, $projekt); - } - } - } - - if(empty($value['name']) && !empty($value['name_de'])){ - $value['name'] = $value['name_de']; - } - if($warenkorb['steuerfrei']==1) - { - if($j_umsatzsteuer==='ermaessigt') - { - $ap = $this->AddPositionManuellPreisNummer($doctype,$auftrag, $projekt, $value['articleid'],$value['quantity'],$value['name'], - isset($value['price_netto'])?$value['price_netto']:$value['price'],'ermaessigt',$value['rabatt'],$shop,$waehrung, $warenkorb['articlelist'][$key],$warenkorb['articlelist']); - }elseif($j_umsatzsteuer==="befreit"){ - $ap = $this->AddPositionManuellPreisNummer($doctype,$auftrag, $projekt, $value['articleid'],$value['quantity'],$value['name'], - isset($value['price_netto'])?$value['price_netto']:$value['price'],'befreit',$value['rabatt'],$shop,$waehrung, $warenkorb['articlelist'][$key],$warenkorb['articlelist']); - } else { - - $ap = $this->AddPositionManuellPreisNummer($doctype,$auftrag, $projekt, $value['articleid'],$value['quantity'],$value['name'], - isset($value['price_netto'])?$value['price_netto']:$value['price'],'normal',$value['rabatt'],$shop,$waehrung, $warenkorb['articlelist'][$key],$warenkorb['articlelist']); - } - } else { - if($j_umsatzsteuer==='ermaessigt') - { - - $ap = $this->AddPositionManuellPreisNummer($doctype,$auftrag, $projekt, $value['articleid'],$value['quantity'],$value['name'], - isset($value['price_netto'])?$value['price_netto']:($value['price']/$this->GetSteuersatzErmaessigt(true,$auftrag,$doctype)),"ermaessigt",$value['rabatt'],$shop,$waehrung, $warenkorb['articlelist'][$key],$warenkorb['articlelist']); - if($positionsteuersaetzeerlauben && !empty($warenkorb['steuersatz_ermaessigt']) && !isset($value['steuersatz'])) - { - $this->app->DB->Update("UPDATE $doctype"."_position SET steuersatz = ".$warenkorb['steuersatz_ermaessigt']." WHERE id = '$ap' LIMIT 1"); - } - }elseif($j_umsatzsteuer==='befreit') - { - $ap = $this->AddPositionManuellPreisNummer($doctype,$auftrag, $projekt, $value['articleid'],$value['quantity'],$value['name'], - isset($value['price_netto'])?$value['price_netto']:($value['price']),'befreit',$value['rabatt'],$shop,$waehrung, $warenkorb['articlelist'][$key],$warenkorb['articlelist']); - } else { - $ap = $this->AddPositionManuellPreisNummer($doctype,$auftrag, $projekt, $value['articleid'],$value['quantity'],$value['name'], - isset($value['price_netto'])?$value['price_netto']:($value['price']/$this->GetSteuersatzNormal(true,$auftrag,$doctype)),"normal",$value['rabatt'],$shop,$waehrung, $warenkorb['articlelist'][$key],$warenkorb['articlelist']); - if($positionsteuersaetzeerlauben && !empty($warenkorb['steuersatz_normal']) && !isset($value['steuersatz'])) - { - $this->app->DB->Update("UPDATE $doctype"."_position SET steuersatz = ".$warenkorb['steuersatz_normal']." WHERE id = '$ap' LIMIT 1"); - } - } - } - if(!empty($ap)){ - $warenkorb['articlelist'][$key]['databaseId'] = $ap; - } - if(!empty($ap) && isset($value['rabatt'])){ - $rabattpositionen[$ap] = $value['rabatt']; - } - if(empty($ap)){ - $this->LogFile('Fehler '.$value['articleid']); - } - if(isset($artap)){ - unset($artap); - } - if(!empty($ap)) - { - if(isset($value['webid'])){ - $this->app->DB->Update("UPDATE $doctype"."_position SET webid = '".$this->app->DB->real_escape_string($value['webid'])."' WHERE id = '$ap' LIMIT 1"); - } - $artap = $this->app->DB->Select("SELECT artikel FROM $doctype"."_position WHERE id = '$ap' LIMIT 1"); - $this->CopyArtikelVariante($artap, ($varj_id?$varj_id:$artap),isset($value['options']) && !empty($value['options'])?$value['options']:(isset($value['anabregs_text'])?$value['anabregs_text']:'')); - if($positionsteuersaetzeerlauben && isset($value['steuersatz']) && is_numeric($value['steuersatz'])){ - $this->app->DB->Update("UPDATE $doctype"."_position SET steuersatz = ".$value['steuersatz']." WHERE id = '$ap' LIMIT 1"); - } - if(isset($value['anhang'])){ - if(!is_array($value['anhang'])){ - $data = $value['anhang']; - $value['anhang'] = []; - $value['anhang'][] = ['datei' => $data, 'endung' => '', 'name' =>'', 'typ' => '', 'titel' => '']; - } - - foreach ($value['anhang'] as $anhang){ - $dateiname = trim($anhang['name']); - if(empty($dateiname)){ - $dateiname = $this->app->DB->Select("SELECT sort FROM $doctype"."_position WHERE id=$ap"); - } - $typ = trim($anhang['typ']); - if(empty($typ)){ - $typ = 'Bild'; - } - $titel = trim($anhang['titel']); - if(empty($titel)){ - $titel = 'Anhang'; - } - - $fileid = $this->addBase64Bild($anhang['datei'],$dateiname,$anhang['endung'],$titel); - if(!empty($fileid)){ - $this->AddDateiStichwort($fileid, $typ, $doctype, $auftrag, false, $ap, 'position'); - } - - } - } - } - if(!empty($value['variante_von']) && !empty($varj_id)) - { - if($artap) - { - $lieferant = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$varj_id' LIMIT 1"); - if($lieferant) - { - $this->app->DB->Update("UPDATE artikel set adresse = '$lieferant' WHERE id = '$artap' LIMIT 1"); - $this->AddEinkaufspreis($artap,1,$lieferant, $value['articleid'], $value['name'],0); - } - $lagerpl = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$varj_id' LIMIT 1"); - $produktion = $this->app->DB->Select("SELECT produktion FROM artikel WHERE id = '$varj_id' LIMIT 1"); - if($produktion){ - $this->app->DB->Update("UPDATE artikel set produktion = '1' WHERE id = '$artap' LIMIT 1"); - } - $stueckliste = $this->app->DB->Select("SELECT stueckliste FROM artikel WHERE id = '$varj_id' LIMIT 1"); - if($stueckliste){ - $this->app->DB->Update("UPDATE artikel set stueckliste = '1' WHERE id = '$artap' LIMIT 1"); - } - if($lagerpl){ - $this->app->DB->Update("UPDATE artikel set lager_platz = '$lagerpl' WHERE id = '$artap' LIMIT 1"); - } - $this->app->DB->Update("UPDATE artikel set variante = 1, variante_von = '$varj_id' WHERE id = '$artap' LIMIT 1"); - } - } - - $ueberspringe = true; - foreach($warenkorb['articlelist'] as $key2=>$value2) - { - if($ueberspringe) - { - if($key == $key2)$ueberspringe = false; - }else{ - if(isset($value['posid'])) - { - if(isset($value2['parentid']) && $value2['parentid'] == $value['posid']) - { - $warenkorb['articlelist'][$key2]['parentap'] = $ap; - $explodieren = false; - } - } - } - } - } else if ($check > 0) - { - // standardpreis aus wawision verwenden - $anummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$j_id' LIMIT 1"); - if(!empty($anummer)){ - $value['articleid'] = $anummer; - } - $ap = $this->AddAuftragPositionNummer($auftrag,$value['articleid'],$value['quantity'],$projekt,"",true, $doctype, $warenkorb['articlelist'][$key]); - if(isset($value['webid'])){ - $this->app->DB->Update("UPDATE $doctype"."_position SET webid = '".$this->app->DB->real_escape_string($value['webid'])."' WHERE id = '$ap' LIMIT 1"); - } - $ueberspringe = true; - foreach($warenkorb['articlelist'] as $key2=>$value2) - { - if($ueberspringe) - { - if($key == $key2){ - $ueberspringe = false; - } - }else{ - if(isset($value['posid'])) - { - if(isset($value2['parentid']) && $value2['parentid'] == $value['posid']) - { - $warenkorb['articlelist'][$key2]['parentap'] = $ap; - } - } - } - } - } - else { - // fehler - if($doctype !== 'angebot') - { - $this->AuftragProtokoll($auftrag,"Artikel nach Import nicht in interner Datenbank gefunden (Artikel: $j_nummer $j_name Menge: $j_menge Preis: $j_preis) bzw. kein Verkaufspreis vorhanden. Bitte prüfen Sie den Haken Automatischer Abgleich in der Shopschnittstelle"); - }else{ - $this->AngebotProtokoll($auftrag,"Artikel nach Import nicht in interner Datenbank gefunden (Artikel: $j_nummer $j_name Menge: $j_menge Preis: $j_preis) bzw. kein Verkaufspreis vorhanden. Bitte prüfen Sie den Haken Automatischer Abgleich in der Shopschnittstelle"); - } - } - if(!empty($ap) && !empty($value['artikeldaten'])){ - $artap = $this->app->DB->Select("SELECT artikel FROM $doctype"."_position WHERE id = '$ap' LIMIT 1"); - unset($value['artikeldaten']['id'],$value['artikeldaten']['nummer']); - foreach($value['artikeldaten'] as $feldname => $wert){ - $query = sprintf("UPDATE artikel SET %s='%s' WHERE id=%d", - $this->app->DB->real_escape_string($feldname), $this->app->DB->real_escape_string($wert), $artap); - $this->app->DB->Update($query); - } - } - } - } - - foreach ($warenkorb['articlelist'] as $item){ - $commands = []; - if(empty($item['databaseId'])){ - continue; - } - if(isset($item['parentInCart']) && !empty($warenkorb['articlelist'][$item['parentInCart']]['databaseId'])){ - $query = sprintf('UPDATE `%s_position` SET `explodiert` = 1 WHERE `id` = %d', - $doctype, $warenkorb['articlelist'][$item['parentInCart']]['databaseId']); - $this->app->DB->Update($query); - $commands[] = sprintf('`explodiert_parent` = %d', $warenkorb['articlelist'][$item['parentInCart']]['databaseId']); - } - if(!empty($item['hidePrice'])){ - $commands[] = '`ohnepreis` = 1'; - } - if(!empty($commands)){ - $query = sprintf('UPDATE `%s_position` SET %s WHERE `id` = %d', - $doctype, implode(', ', $commands), $item['databaseId']); - $this->app->DB->Update($query); - } - } - - if(!empty($warenkorb['versandkostenbrutto']) - && empty($warenkorb['versandkostennetto']) - && !empty($warenkorb['autoversandsteuer']) - && empty($warenkorb['portosteuersatz'])) { - if($doctype !== 'angebot'){ - $positions = $this->app->DB->SelectArr( - sprintf( - "SELECT IFNULL(steuersatz,-1) as steuersatz, umsatzsteuer - FROM auftrag_position - WHERE preis > 0 AND auftrag = %d - GROUP BY steuersatz, umsatzsteuer", $auftrag - ) - ); - } - else { - $positions = $this->app->DB->SelectArr( - sprintf( - "SELECT IFNULL(steuersatz,-1) as steuersatz, umsatzsteuer - FROM angebot_position - WHERE preis > 0 AND angebot = %d - GROUP BY steuersatz, umsatzsteuer", $auftrag - ) - ); - } - if(!empty($positions) - && count($positions) === 1 - && $positions[0]['steuersatz'] < 0 - && $positions[0]['umsatzsteuer'] === 'ermaessigt' - ) { - $warenkorb['portosteuersatz'] = 'ermaessigt'; - } - } - - if($shoptyp!=='wawision') - { - if($warenkorb['zahlungsweise']==='nachnahme') - { - $artikelnachnahme = $shopexportArr['artikelnachnahme']; - $artikelnachnahme_extraartikel = $shopexportArr['artikelnachnahme_extraartikel']; - $nachnahme = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikelnachnahme' LIMIT 1"); - $umsatzsteuer_nachnahme = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikelnachnahme' LIMIT 1"); - $nachnahmepreis = $this->GetVerkaufspreis($artikelnachnahme,1); - if($umsatzsteuer_nachnahme!=='ermaessigt' && $umsatzsteuer_nachnahme!=='befreit') { - $umsatzsteuer_nachnahme='normal'; - } - if(isset($warenkorb['nachnahmepreisnetto'])) - { - $nachnahmepreis = str_replace(',','.',$warenkorb['nachnahmepreisnetto']); - }elseif($warenkorb['nachnahmepreis']) - { - if($umsatzsteuer_nachnahme==='ermaessigt') - { - $nachnahmepreis = str_replace(',','.',$warenkorb['nachnahmepreis'])/$this->GetSteuersatzErmaessigt(true,$auftrag,$doctype); - }elseif($umsatzsteuer_nachnahme==='befreit') - { - $nachnahmepreis = str_replace(',','.',$warenkorb['nachnahmepreis']); - }else{ - $nachnahmepreis = str_replace(',','.',$warenkorb['nachnahmepreis'])/$this->GetSteuersatzNormal(true,$auftrag,$doctype); - } - } - //$warenkorb['zahlungsgebuehr'] //TODO - - if($artikelnachnahme_extraartikel==1) - { - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelnachnahme,1,$nachnahme,$nachnahmepreis,$umsatzsteuer_nachnahme,0,$waehrung); - if($tmpposid>0) - { - $this->app->DB->Update("UPDATE $doctype"."_position SET keinrabatterlaubt=1 WHERE id='$tmpposid' LIMIT 1"); - if(isset($warenkorb['nachnahmepreisnetto']) || isset($warenkorb['nachnahmepreis'])){ - $nachnahmepreis = 0; - } - } - } - } else { - $nachnahmepreis=0; - } - - //porto und nachnahme - $artikelporto = $shopexportArr['artikelporto']; - $artikelportoermaessigt = $shopexportArr['artikelportoermaessigt']; - - if( $artikelportoermaessigt && isset($warenkorb['portosteuersatz']) && $warenkorb['portosteuersatz'] === 'ermaessigt') - { - $artikelporto = $artikelportoermaessigt; - } - - if(empty($artikelporto) && $this->app->DB->Select("SELECT portoartikelanlegen FROM shopexport WHERE id = '$shop' LIMIT 1")) - { - if($warenkorb['versandkostennetto'] != 0 || $warenkorb['versandkostenbrutto'] != 0 || $portocheck == 1){ - $portoartikelarr = array('projekt'=>$projekt,'porto'=>1, 'lagerartikel'=>0,'name_de'=>'Porto','umsatzsteuer'=>'normal'); - $artikelporto = $this->app->erp->InsertUpdateArtikel($portoartikelarr); - if($artikelporto){ - $this->app->DB->Update("UPDATE shopexport SET artikelporto = '$artikelporto' WHERE id = '$shop' AND artikelporto = 0 LIMIT 1"); - } - } - } - $umsatzsteuer_porto = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikelporto' LIMIT 1"); - - $versandname = ''; - if(isset($warenkorb['kunde_sprache']) && $warenkorb['kunde_sprache']){ - if($warenkorb['kunde_sprache'] === 'englisch') { - $versandname = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id = '$artikelporto'"); - } - } - else{ - if($this->app->DB->Select("SELECT adr.id FROM $doctype auf INNER JOIN adresse adr ON auf.adresse = adr.id AND adr.sprache = 'englisch' WHERE auf.id = '$auftrag' LIMIT 1")) { - $versandname = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id = '$artikelporto'"); - } - } - if($versandname === ''){ - $versandname = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikelporto'"); - } - - $sprachen = $this->GetAdressSprachen(); - $belegsprache = $this->app->DB->Select("SELECT sprache FROM $doctype WHERE id = '$auftrag'"); - if(array_key_exists($belegsprache, $sprachen)){ - $belegsprache = $sprachen[$belegsprache]; - } - $uebersetztername = $this->app->DB->Select("SELECT name FROM artikel_texte WHERE artikel='$artikelporto' AND sprache='$belegsprache' AND aktiv='1' AND (shop=0 OR shop='$shop') ORDER BY shop DESC LIMIT 1"); - if($uebersetztername != ''){ - $versandname = $uebersetztername; - } - - $rabattartikel = $shopexportArr['artikelrabatt']; - $rabattname = ''; - if(isset($warenkorb['kunde_sprache']) && $warenkorb['kunde_sprache']){ - if($warenkorb['kunde_sprache'] === 'englisch') { - $rabattname = (String)$this->app->DB->Select("SELECT name_en FROM artikel WHERE id = '$rabattartikel'"); - } - } - else{ - if($this->app->DB->Select("SELECT adr.id FROM $doctype auf INNER JOIN adresse adr ON auf.adresse = adr.id AND adr.sprache = 'englisch' WHERE auf.id = '$auftrag' LIMIT 1")) { - $rabattname = (String)$this->app->DB->Select("SELECT name_en FROM artikel WHERE id = '$rabattartikel'"); - } - } - if($rabattname === ''){ - $rabattname = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$rabattartikel'"); - } - $uebersetztername = $this->app->DB->Select("SELECT name FROM artikel_texte WHERE artikel='$rabattartikel' AND sprache='$belegsprache' AND aktiv='1' AND (shop=0 OR shop='$shop') ORDER BY shop DESC LIMIT 1"); - if($uebersetztername != ''){ - $rabattname = $uebersetztername; - } - - $umsatzsteuer_rabatt = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$rabattartikel' LIMIT 1"); - - - $rabattsteuer = $this->app->DB->Select("SELECT artikelrabattsteuer FROM shopexport WHERE id = '$shop' LIMIT 1"); - if($this->app->DB->error()){ - $rabattsteuer = -1; - } - if(isset($warenkorb['rabattsteuer']) && is_numeric($warenkorb['rabattsteuer'])){ - $rabattsteuer = $warenkorb['rabattsteuer']; - } - //$this->DumpVar("Fall Porto Preis ".$warenkorb[versandkostennetto]); - if(!empty($warenkorb['rabattname'])){ - $rabattname = $warenkorb['rabattname']; - } - if(isset($warenkorb['rabattnetto'])) - { - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $rabattartikel,1,$rabattname,$warenkorb['rabattnetto'],$umsatzsteuer_rabatt,0,$waehrung); - }elseif(isset($warenkorb['rabattbrutto'])) - { - $rabattbrutto = $warenkorb['rabattbrutto']; - if(isset($warenkorb['rabattsteuer']) && is_numeric($warenkorb['rabattsteuer'])){ - $rabattsteuer = $warenkorb['rabattsteuer']; - } - if($warenkorb['steuerfrei'] == '1') { - $rabattsteuer = 0; - } - if($umsatzsteuer_rabatt==='ermaessigt') - { - $rabattsteuerAdd = $rabattsteuer < 0?$this->GetSteuersatzErmaessigt(true,$auftrag,$doctype):(1+$rabattsteuer/100); - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $rabattartikel,1,$rabattname,$warenkorb['rabattbrutto']/$rabattsteuerAdd,$umsatzsteuer_rabatt,0,$waehrung); - }elseif($umsatzsteuer_rabatt==='befreit') - { - $rabattsteuerAdd = $rabattsteuer < 0?1:(1+$rabattsteuer/100); - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $rabattartikel,1,$rabattname,$warenkorb['rabattbrutto']/$rabattsteuerAdd,$umsatzsteuer_rabatt,0,$waehrung); - }else{ - $rabattsteuerAdd = $rabattsteuer < 0?$this->GetSteuersatzNormal(true,$auftrag,$doctype):(1+$rabattsteuer/100); - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $rabattartikel,1,$rabattname,$warenkorb['rabattbrutto']/$rabattsteuerAdd,$umsatzsteuer_rabatt,0,$waehrung); - } - } - if($rabattsteuer >= 0){ - $this->app->DB->Update("UPDATE $doctype"."_position SET steuersatz = '$rabattsteuer' WHERE id = '$tmpposid' LIMIT 1"); - } - if(isset($warenkorb['rabattsteuer']) && is_numeric($warenkorb['rabattsteuer'])){ - $this->app->DB->Update("UPDATE $doctype"."_position SET steuersatz = '".$warenkorb['rabattsteuer']."' WHERE id = '$tmpposid' LIMIT 1"); - if($warenkorb['rabattsteuer'] > 0){ - $ermaessigt = !empty($warenkorb['steuersatz_ermaessigt']) ? $warenkorb['steuersatz_ermaessigt'] : $this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $doctype WHERE id = $auftrag"); - $normal = !empty($warenkorb['steuersatz_normal']) ? $warenkorb['steuersatz_normal'] : $this->app->DB->Select("SELECT steuersatz_normal FROM $doctype WHERE id = $auftrag"); - if($warenkorb['rabattsteuer'] == $ermaessigt){ - $this->app->DB->Update("UPDATE $doctype" . "_position SET umsatzsteuer = 'ermaessigt' WHERE id = '$tmpposid' LIMIT 1"); - }elseif($warenkorb['rabattsteuer'] == $normal){ - $this->app->DB->Update("UPDATE $doctype" . "_position SET umsatzsteuer = 'normal' WHERE id = '$tmpposid' LIMIT 1"); - } - }elseif($warenkorb['rabattsteuer'] == 0) - { - $this->app->DB->Update("UPDATE $doctype" . "_position SET umsatzsteuer = 'befreit' WHERE id = '$tmpposid' LIMIT 1"); - } - } - if($umsatzsteuer_porto!=='ermaessigt') { - $umsatzsteuer_porto='normal'; - } - $umsatzsteuer_porto2 = $umsatzsteuer_porto; - if(!empty($warenkorb['portosteuersatz']) && $artikelnachnahme_extraartikel!='1' && $warenkorb['portosteuersatz'] === 'ermaessigt') - { - $umsatzsteuer_porto2 = 'ermaessigt'; - }elseif(!empty($warenkorb['portosteuersatz']) && $artikelnachnahme_extraartikel!='1' && $warenkorb['portosteuersatz'] === 'normal') - { - $umsatzsteuer_porto2 = 'normal'; - } - - //if($this->Steuerbefreit($warenkorb['land'],$warenkorb['ustid'])) - if($warenkorb['versandkostennetto'] != 0 || $warenkorb['versandkostenbrutto'] != 0 || $portocheck == 1) - { - if($warenkorb['steuerfrei']=='1') - { - if($artikelnachnahme_extraartikel=='1'){ - $tmpposid = $this->AddPositionManuellPreis($doctype, $auftrag, $artikelporto, 1, $versandname, (isset($warenkorb['versandkostennetto']) ? $warenkorb['versandkostennetto'] : $warenkorb['versandkostenbrutto']) - $nachnahmepreis, $umsatzsteuer_porto, 0, $waehrung); - } - else{ - $tmpposid = $this->AddPositionManuellPreis($doctype, $auftrag, $artikelporto, 1, $versandname, isset($warenkorb['versandkostennetto']) ? $warenkorb['versandkostennetto'] : $warenkorb['versandkostenbrutto'], $umsatzsteuer_porto, 0, $waehrung); - } - } - else - { - if($positionsteuersaetzeerlauben && isset($warenkorb['versandkostensteuersatz']) && is_numeric($warenkorb['versandkostensteuersatz'])) - { - if($artikelnachnahme_extraartikel=='1') - { - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, - (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']/(1+$warenkorb['versandkostensteuersatz']/100)))- $nachnahmepreis,$umsatzsteuer_porto,0,$waehrung); - } else { - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, - (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']/(1+$warenkorb['versandkostensteuersatz']/100))),$umsatzsteuer_porto,0,$waehrung); - } - if($tmpposid) - { - $this->app->DB->Update("UPDATE $doctype"."_position SET steuersatz = ".$warenkorb['versandkostensteuersatz']." WHERE id = ".$tmpposid); - } - }elseif($umsatzsteuer_porto2==='ermaessigt') - { - if($artikelnachnahme_extraartikel=='1') - { - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, - (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']/$this->GetSteuersatzErmaessigt(true,$auftrag,$doctype)))- $nachnahmepreis,$umsatzsteuer_porto,0,$waehrung); - } else { - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, - (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']/$this->GetSteuersatzErmaessigt(true,$auftrag,$doctype))),$umsatzsteuer_porto,0,$waehrung); - if($umsatzsteuer_porto2 !== $umsatzsteuer_porto) - { - $this->app->DB->Update("UPDATE $doctype"."_position SET umsatzsteuer = 'ermaessigt' WHERE id = ".$tmpposid); - } - } - }elseif($umsatzsteuer_porto==='befreit'){ - if($artikelnachnahme_extraartikel=='1') - { - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, - (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']))- $nachnahmepreis,$umsatzsteuer_porto,0,$waehrung); - } else { - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, - (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto'])),$umsatzsteuer_porto,0,$waehrung); - } - } else { - //normal - if($artikelnachnahme_extraartikel=='1') - { - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, - (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']/$this->GetSteuersatzNormal(true,$auftrag,$doctype)))- $nachnahmepreis,$umsatzsteuer_porto,0,$waehrung); - } else { - $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, - (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']/$this->GetSteuersatzNormal(true,$auftrag,$doctype))),$umsatzsteuer_porto,0,$waehrung); - if($umsatzsteuer_porto2 !== $umsatzsteuer_porto) - { - $this->app->DB->Update("UPDATE $doctype"."_position SET umsatzsteuer = 'normal' WHERE id = ".$tmpposid); - } - } - } - } - } - - // wenn versandkostennbrutto = 0 und versandkostennetto > 0 TODO neu ausrechnen - - if($tmpposid>0) - { - $this->app->DB->Update("UPDATE $doctype"."_position SET keinrabatterlaubt=1 WHERE id='$tmpposid' LIMIT 1"); - if(isset($warenkorb['versandkostenbeschreibung'])){ - $this->app->DB->Update("UPDATE $doctype" . "_position SET beschreibung='" . $this->app->DB->real_escape_string($warenkorb['versandkostenbeschreibung']) . "' WHERE id='$tmpposid' LIMIT 1"); - } - } - } - - if($waehrung && $waehrung !== 'EUR'){ - $this->app->DB->Update("UPDATE $doctype"."_position SET waehrung='$waehrung' WHERE $doctype='$auftrag' "); - } - - $shoptyp=''; - - if(isset($warenkorb['wawisionpreise']) && $warenkorb['wawisionpreise']) - { - $wpositionen = $this->app->DB->SelectArr("SELECT * FROM $doctype"."_position WHERE auftrag = '$auftrag'"); - if(!empty($wpositionen)) - { - $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$auftrag' LIMIT 1"); - foreach($wpositionen as $wpos) - { - $pr = $this->GetVerkaufspreis($wpos['artikel'], $wpos['menge'], $adresse); - if($pr){ - $this->app->DB->Update("UPDATE $doctype"."_position SET preis = '$pr' WHERE id = '".$wpos['id']."' LIMIT 1"); - } - } - } - } - if(!empty($artikelimport)){ - $this->app->DB->Update("UPDATE $doctype"."_position set rabatt = 0, keinrabatterlaubt = 1, grundrabatt = 0, rabattsync = 1 WHERE $doctype = '$auftrag'"); - } - if(!empty($rabattpositionen)){ - foreach ($rabattpositionen as $key => $value) { - $this->app->DB->Update("UPDATE $doctype" . "_position SET rabatt='$value' WHERE id='$key'"); - } - } - - // wenn reservierung aktiviert ist - if($doctype !== 'angebot') { - $reservierung = $this->app->DB->Select( - sprintf( - "SELECT pr.reservierung - FROM `projekt` AS `pr` - INNER JOIN `auftrag` AS `o` ON o.projekt = pr.id - WHERE o.id = %d LIMIT 1", - $auftrag - ) - ); - if((int)$reservierung >= 1) { - $this->AuftragReservieren($auftrag); - } - - $this->AuftragNeuberechnen($auftrag); - $this->AuftragEinzelnBerechnen($auftrag); - $this->app->DB->Update(" - UPDATE auftrag a - INNER JOIN adresse adr ON a.lieferant = adr.id - SET a.lieferantkdrnummer = if(a.lieferantennummer <> '',a.lieferantennummer,adr.lieferantennummer) - WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 1 AND a.id = '$auftrag' - "); - $this->app->DB->Update(" - UPDATE auftrag a - INNER JOIN adresse adr ON a.adresse = adr.id - SET a.lieferantkdrnummer = if(a.kundennummer <> '',a.kundennummer, adr.kundennummer) - WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 0 AND a.id = '$auftrag' - "); - if(!empty($warenkorb['auftragsstatus'])){ - if($warenkorb['auftragsstatus'] === 'abgeschlossen'){ - $this->app->DB->Update("UPDATE auftrag SET status = 'abgeschlossen', schreibschutz = 1 WHERE id = '$auftrag' LIMIT 1"); - } - if($warenkorb['auftragsstatus'] === 'unbezahlt'){ - $this->app->DB->Insert("INSERT INTO shopimport_checkorder (shop_id, order_id, ext_order) VALUES ('$shop','$auftrag','".$warenkorb['auftrag']."')"); - $this->app->erp->AuftragProtokoll($auftrag, 'Kaufabwicklung noch nicht abgeschlossen'); - } - } - - $this->app->DB->Update( - "UPDATE artikel art - INNER JOIN auftrag_position ap ON art.id = ap.artikel AND ap.auftrag = '$auftrag' - SET art.cache_lagerplatzinhaltmenge = -999" - ); - $this->app->DB->Update( - sprintf( - 'UPDATE artikel_onlineshops AS ao - INNER JOIN auftrag_position AS ap ON ao.artikel = ap.artikel - SET ao.storage_cache = -999, ao.pseudostorage_cache = -999 - WHERE ao.shop = %d AND ap.auftrag = %d', - $shop,$auftrag - ) - ); - $differenz = $this->app->DB->Select( - sprintf( - 'SELECT gesamtbetragfestsetzendifferenz FROM shopexport WHERE id = %d LIMIT 1', - (int)$shop - ) - ); - if($this->app->DB->Select("SELECT gesamtbetragfestsetzen FROM shopexport WHERE id = '$shop' LIMIT 1")) - { - $gesamtsumme = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id = '$auftrag' LIMIT 1"); - if(abs($gesamtsumme - $warenkorb['gesamtsumme']) <= $differenz) - { - $this->app->DB->Update("UPDATE auftrag SET extsoll = '".$warenkorb['gesamtsumme']."', gesamtsumme = '".$warenkorb['gesamtsumme']."' WHERE id = '$auftrag' LIMIT 1"); - } - } - if(!empty($warenkorb['bestelldatum']) && strtotime($warenkorb['bestelldatum']) > 1) - { - $this->app->DB->Update("UPDATE auftrag SET datum = '".$this->app->DB->real_escape_string($warenkorb['bestelldatum'])."' WHERE belegnr <> '' AND id = ".$auftrag); - } - if(!$autoversandvonMapping && - $this->app->DB->Select( - sprintf( - 'SELECT pr.deactivateautoshipping - FROM auftrag a - INNER JOIN projekt AS pr ON a.projekt = pr.id - WHERE a.id = %d AND a.autoversand = 1', - $auftrag - ) - ) - ) { - $this->app->DB->Update( - sprintf( - 'UPDATE auftrag SET autoversand = 0 WHERE id = %d', - $auftrag - ) - ); - } - if(!empty($warenkorb['gesamtsumme'])) { - $gesamtsumme = $this->app->DB->Select( - sprintf( - 'SELECT gesamtsumme FROM auftrag WHERE id = %d LIMIT 1', - $auftrag - ) - ); - if($gesamtsumme != 0 && - abs( - round((float)$warenkorb['gesamtsumme'] - (float)$gesamtsumme, 2) - ) > round((float)$differenz, 2) - ) { - $this->app->DB->Update( - sprintf( - 'UPDATE auftrag SET autoversand = 0 WHERE id = %d LIMIT 1', - (int)$auftrag - ) - ); - $this->AuftragProtokoll($auftrag, 'Online-Shop Differenz erkannt'); - } - } - }else{ - $this->AngebotNeuberechnen($auftrag); - $this->BelegFreigabe('angebot', $auftrag); - if(!empty($warenkorb['bestelldatum']) && strtotime($warenkorb['bestelldatum']) > 1) - { - $this->app->DB->Update("UPDATE angebot SET datum = '".$this->app->DB->real_escape_string($warenkorb['bestelldatum'])."' WHERE id = ".$auftrag); - } - } - - return $auftrag; -} - - - function KundennummerVergeben($adresse,$projekt="") - { - $id = $adresse; - $kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); - $tmp_data_adresse = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); - - if($projekt=="") - $projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); - - if($kundennummer==0 || $kundennummer==""){ - // pruefe ob rolle kunden vorhanden - $check = $this->app->DB->Select("SELECT adresse FROM adresse_rolle WHERE adresse='$id' AND subjekt='Kunde' LIMIT 1"); - if($check!="") - { - $kundennummer = $this->GetNextKundennummer($projekt,$tmp_data_adresse); - $this->ObjektProtokoll("adresse",$id,"adresse_next_kundennummer","Kundennummer erhalten: $kundennummer"); - $this->app->DB->Update("UPDATE adresse SET kundennummer='$kundennummer' WHERE id='$id' AND (kundennummer='0' OR kundennummer='') LIMIT 1"); - return $kundennummer; - } - } - } - - - function CheckDateValidate($input="0000-00-00") - { - $inputa = explode('-', $input); - if(count($inputa) == 3 && strlen($inputa[1]) == 2 && strlen($inputa[2]) == 2 && strlen($inputa[0]) == 4 && - checkdate($inputa[1],$inputa[2],$inputa[0])) - { - return true; - } - - $date_format = 'Y-m-d'; - - $input = trim($input); - $time = strtotime($input); - - $is_valid = date($date_format, $time) == $input; - - return $is_valid; - } - - function AdresseUSTCheck($adresse) - { - //wenn land DE - - $land = $this->app->DB->Select("SELECT land FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - if($land ==$this->Firmendaten("land") || $land=="") - return 0; - - foreach($this->GetUSTEU() as $euland) - { - if($land==$euland) - return 1; - } - - // alle anderen laender sind export! - return 2; - } - - - function AutoUSTPruefung($adresse) - { - - // schaue obs heute bereits eine pruefung gegeben hat die erfolgreich war - $ustcheck = $this->app->DB->Select("SELECT id FROM ustprf WHERE DATE_FORMAT(datum_online,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') AND status='erfolgreich' AND adresse='$adresse' LIMIT 1"); - if($ustcheck>0 && is_numeric($ustcheck)) - return 1; - - - $name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - $ustid = $this->app->DB->Select("SELECT ustid FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - $land = $this->app->DB->Select("SELECT land FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - $ort = $this->app->DB->Select("SELECT ort FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - $plz = $this->app->DB->Select("SELECT plz FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - $strasse = $this->app->DB->Select("SELECT strasse FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - - if($land==$this->Firmendaten("land") || $ustid=="") return 0; - - - $ustcheck = $this->app->DB->Select("SELECT id FROM ustprf WHERE status='' AND adresse='$adresse' LIMIT 1"); - if(!($ustcheck>0 && is_numeric($ustcheck))) - { - $this->app->DB->Insert("INSERT INTO ustprf (id,adresse,name,ustid,land,ort,plz,rechtsform,strasse,datum_online,bearbeiter) - VALUES('','$adresse','$name','$ustid','$land','$ort','$plz','$rechtsform','$strasse',NOW(),'".$this->app->User->GetName()."')"); - $ustprf_id = $this->app->DB->GetInsertID(); - } - else - $ustprf_id = $ustcheck; - - - //$this->app->DB->Insert('INSERT INTO ustprf_protokoll (ustprf_id, zeit, bemerkung, bearbeiter) VALUES ('.$ustprf_id.',"'.date("Y-m-d H:i:s").'","AUTO Prüfung gestartet", "'.$this->app->User->GetName().'")'); - - $ustid = str_replace(" ","",$ustid); - $ust = $ustid; - $result = 0; - - $UstStatus = $this->CheckUst("DE263136143", $ust, $name, $ort, $strasse, $plz, $druck="nein"); - if(is_array($UstStatus)) - { - $tmp = new USTID(); - $msg = $tmp->errormessages($UstStatus['ERROR_CODE']); - - if($UstStatus['ERROR_CODE']==200) - { - $this->app->DB->Delete("DELETE FROM ustprf_protokoll WHERE ustprf_id='$ustprf_id' AND bemerkung='UST gültig aber Name, Ort oder PLZ wird anders geschrieben'"); - $this->app->DB->Insert('INSERT INTO ustprf_protokoll (ustprf_id, zeit, bemerkung, bearbeiter) VALUES ('.$ustprf_id.',"'.date("Y-m-d H:i:s").'","UST gültig aber Name, Ort oder PLZ wird anders geschrieben", "'.$this->app->User->GetName().'")'); - } - else - $this->app->DB->Insert('INSERT INTO ustprf_protokoll (ustprf_id, zeit, bemerkung, bearbeiter) VALUES ('.$ustprf_id.',"'.date("Y-m-d H:i:s").'","'.$UstStatus['ERROR_CODE'].'('.$msg.')", "'.$this->app->User->GetName().'")'); - - } else if($UstStatus==1){ - - //$this->app->Tpl->Set(STATUS,"
Vollständig
"); - $result = 1; - - // jetzt brief bestellen! - $UstStatus = $this->CheckUst("DE263136143", $ust, $firmenname, $ort, $strasse, $plz, $druck="ja"); - $this->app->DB->Insert('INSERT INTO ustprf_protokoll (ustprf_id, zeit, bemerkung, bearbeiter) VALUES ('.$ustprf_id.',"'.date("Y-m-d H:i:s").'","Online-Abfrage OK + Brief bestellt", "'.$this->app->User->GetName().'")'); - $this->app->DB->Update('UPDATE ustprf SET datum_online=NOW(), status="erfolgreich" WHERE id='.$ustprf_id.''); - } else { - $this->app->DB->Insert('INSERT INTO ustprf_protokoll (ustprf_id, zeit, bemerkung, bearbeiter) VALUES ('.$ustprf_id.',"'.date("Y-m-d H:i:s").'","'.$UstStatus.'", "'.$this->app->User->GetName().'")'); - $this->app->DB->Update('UPDATE ustprf SET datum_online=NOW(), status="allgemeiner fehler" WHERE id='.$ustprf_id.''); - } - - return $result; - } - - function ArtikelMindestlager($artikel) - { - if($artikel <= 0) { - return 0; - } - // Fall ein 100R in vielen Listen dann muss man alle listen mit mindestmengen nehmen - // Fall das ist eine - $mindestlager = $this->app->DB->Select("SELECT mindestlager FROM artikel WHERE id='$artikel' LIMIT 1"); - if($mindestlager > 0) - { - return $mindestlager; - } - return 0; - } - - function AddChargeLagerOhneBewegung($artikel,$menge,$lagerplatz,$datum,$charge='',$internebemerkung='',$zid=0, $doctype = '', $doctypeid = 0, $isInterim = 0) - { - if($artikel <= 0) { - return null; - } - $zid = (int)$zid; - $this->app->DB->Insert("INSERT INTO lager_charge (artikel,menge,lager_platz,datum,internebemerkung,charge,zwischenlagerid) - VALUES ('$artikel','$menge','$lagerplatz','$datum','$internebemerkung','$charge','$zid')"); - $this->app->DB->Insert("INSERT INTO chargen_log (artikel,lager_platz,eingang,bezeichnung,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid, is_interim) - VALUES ('$artikel','$lagerplatz','1','$charge',NOW(),".$this->app->User->GetAdresse().",'$menge','$internebemerkung','$doctype','$doctypeid',".(int)$isInterim.")"); - $id = $this->app->DB->GetInsertID(); - $bestand = $this->app->DB->Select("SELECT ifnull(sum(menge),0) FROM lager_charge WHERE artikel = '$artikel' AND lager_platz = '$lagerplatz' AND charge = '$charge'"); - $this->app->DB->Update("UPDATE chargen_log SET bestand = '$bestand' WHERE id = '$id' LIMIT 1"); - return $id; - } - - - function AddMindesthaltbarkeitsdatumLagerOhneBewegung($artikel,$menge,$lagerplatz,$mhd,$charge='',$zid=0, $doctype = '', $doctypeid = 0, $internebemerkung = '', $adresse = 0, $isInterim = 0) - { - if($artikel <= 0) { - return 0; - } - if (!$this->CheckDateValidate($mhd)) { - $mhd = date('Y-m-d'); - } - $zid = (int)$zid; - $this->app->DB->Insert("INSERT INTO lager_mindesthaltbarkeitsdatum (artikel,menge,lager_platz,datum,internebemerkung,charge,zwischenlagerid,mhddatum) VALUES ('$artikel','$menge','$lagerplatz',NOW(),'$internebemerkung','$charge','$zid','$mhd')"); - $bestand = (float)$this->app->DB->Select("SELECT ifnull(sum(menge),0) FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$artikel' AND lager_platz = '$lagerplatz' AND mhddatum = '$mhd' AND ifnull(charge,'') = '$charge' "); - $this->app->DB->Insert("INSERT INTO mhd_log (artikel,lager_platz,eingang,mhddatum,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid,bestand,adresse,is_interim) - VALUES ('$artikel','$lagerplatz','1','$mhd',NOW(),".$this->app->User->GetAdresse().",'$menge','$internebemerkung','$doctype','$doctypeid','$bestand','$adresse',".(int)$isInterim.")"); - $insid = $this->app->DB->GetInsertID(); - if($charge != '') { - $this->app->DB->Update("UPDATE mhd_log SET charge = '$charge' WHERE id = '$insid' LIMIT 1"); - } - - return $insid; - } - - -function AddChargeLager($artikel,$menge,$lagerplatz,$datum,$charge="",$internebemerkung="",$zid=0, $doctype = "", $doctypeid = 0, $adresse = 0, $isInterim = 0) -{ - if($artikel <= 0) - { - return; - } - $zid = (int)$zid; - $this->LagerArtikelZusammenfassen($artikel, $lagerplatz); - $this->app->DB->Insert("INSERT INTO lager_charge (artikel,menge,lager_platz,datum,internebemerkung,charge,zwischenlagerid) VALUES ('$artikel','$menge','$lagerplatz','$datum','$internebemerkung','$charge','$zid')"); - $this->app->erp->LagerEinlagern($artikel,$menge,$lagerplatz,$projekt,$internebemerkung,"","",$doctype,$doctypeid,0,0,$adresse); - - $this->Chargenlog($artikel, $lagerplatz, 1, $charge, $menge, $internebemerkung, $doctype, $doctypeid, $adresse,0, $isInterim); - $this->LagerArtikelZusammenfassen($artikel, $lagerplatz); -} - - - function AddMindesthaltbarkeitsdatumLager($artikel,$menge,$lagerplatz,$mhd,$charge="",$zid=0, $doctype = "", $doctypeid = 0) - { - if($artikel <= 0 || (empty($lagerplatz) && empty($zid))) { - return 0; - } - $this->LagerArtikelZusammenfassen($artikel, $lagerplatz); - if ($mhd == '' || $mhd==0 || $mhd=='0000-00-00') { - return 0; - } - - $this->app->DB->Insert("INSERT INTO lager_mindesthaltbarkeitsdatum (artikel,menge,lager_platz,datum,internebemerkung,charge,zwischenlagerid,mhddatum) VALUES ('$artikel','$menge','$lagerplatz',NOW(),'$internebemerkung','$charge','$zid','$mhd')"); - - if(empty($lagerplatz)) { - return 0; - } - - if($menge > 0) { - $this->app->DB->Insert("INSERT INTO lager_platz_inhalt (artikel,menge,lager_platz) VALUES ($artikel','$menge','$lagerplatz')"); - } - - if($charge!='') { - $charge = ' Charge: '.$charge; - } - $bestand = $this->ArtikelImLagerPlatz($artikel,$lagerplatz); - $vpe = ''; - $projekt = 0; - $this->app->DB->Insert("INSERT INTO lager_bewegung (lager_platz, artikel, menge,vpe, eingang,zeit,referenz, bearbeiter,projekt,firma,logdatei,bestand,doctype,doctypeid) - VALUES('$lagerplatz','$artikel','$menge','$vpe','1',NOW(),'MHD eingelagert $charge','".$this->app->User->GetName()."', - '$projekt','".$this->app->User->GetFirma()."',NOW(),'$bestand','$doctype','$doctypeid')"); - $insId = $this->app->DB->GetInsertID(); - $this->LagerArtikelZusammenfassen($artikel, $lagerplatz); - - return $insId; - } - - -function SeriennummernLog($artikel, $lagerplatz, $seriennummer, $eingang, $internebemerkung="",$zid=0,$mhd="",$charge="",$doctype="", $doctypeid=0, $adresse = 0) -{ - if(empty($lagerplatz) || (empty($seriennummer) && empty($artikel))) { - return 0; - } - if($adresse == 0 && $doctypeid != 0 && $doctype != '') - { - $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); - } - $this->app->DB->Insert("INSERT INTO seriennummern_log (artikel,lager_platz,eingang,bezeichnung,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid, adresse) - VALUES ('$artikel','$lagerplatz',$eingang,'$seriennummer',NOW(),".$this->app->User->GetAdresse().",1,'$internebemerkung','$doctype','$doctypeid','$adresse')"); - - return (int)$this->app->DB->GetInsertID(); -} - - function LagerEinlagerVomZwischenlager($zwischenlagerid,$menge,$regal,$projekt,$grund="",$doctype="", $doctypeid=0) - { - if($menge <= 0 || $regal <= 0) { - return; - } - - $zwischenlagerRow = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM zwischenlager WHERE id= %d', - $zwischenlagerid - ) - ); - if(empty($zwischenlagerRow) || empty($zwischenlagerRow['artikel'])) { - return; - } - $artikel = $zwischenlagerRow['artikel']; - $this->LagerArtikelZusammenfassen($artikel); - $referenz = $zwischenlagerRow['grund']; - $vpe = $zwischenlagerRow['vpe']; - $bestellung = $zwischenlagerRow['parameter']; - $paketannahme = $zwischenlagerRow['paketannahme']; - - $this->app->DB->Insert("INSERT INTO lager_platz_inhalt (lager_platz,artikel,menge,vpe,bearbeiter,bestellung,projekt,firma,logdatei) - VALUES ('$regal','$artikel','$menge','$vpe','".$this->app->User->GetName()."','$bestellung','$projekt','".$this->app->User->GetFirma()."',NOW())"); - - $bestand = $this->ArtikelImLagerPlatz($artikel,$regal); - // Bewegung - $this->app->DB->Insert("INSERT INTO lager_bewegung (lager_platz, artikel, menge,vpe, eingang,zeit,referenz, bearbeiter,projekt,firma,logdatei,bestand,paketannahme,doctype,doctypeid) - VALUES('$regal','$artikel','$menge','$vpe','1',NOW(),'$referenz:$grund','".$this->app->User->GetName()."','$projekt','".$this->app->User->GetFirma()."',NOW(),'$bestand','$paketannahme','$doctype','$doctypeid')"); - - $this->app->DB->Update("UPDATE lager_seriennummern SET lager_platz='$regal',zwischenlagerid='0' WHERE zwischenlagerid='$zwischenlagerid'"); - $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET lager_platz='$regal',zwischenlagerid='0' WHERE zwischenlagerid='$zwischenlagerid'"); - $this->app->DB->Update("UPDATE lager_charge SET lager_platz='$regal',zwischenlagerid='0' WHERE zwischenlagerid='$zwischenlagerid'"); - - $menge_db = $zwischenlagerRow['menge']; - if($menge_db - $menge > 0) { - $tmp = $menge_db - $menge; - $this->app->DB->Update("UPDATE zwischenlager SET menge='$tmp' WHERE id='$zwischenlagerid' LIMIT 1"); - } - else { - $this->app->DB->Update("DELETE FROM zwischenlager WHERE id='$zwischenlagerid' LIMIT 1"); - } - $this->LagerArtikelZusammenfassen($artikel); - } - - - function LagerAutoAuslagernArtikel($artikel,$menge,$grund, $doctype = "", $doctypeid = 0, $posid = 0, $projektueberschreiben = "") - { - $this->LagerArtikelZusammenfassen($artikel); - $artikelArr = $this->app->DB->SelectRow("SELECT * FROM artikel WHERE id='$artikel' LIMIT 1"); - $lager_platz = $artikelArr['lager_platz']; - $projekt = $artikelArr['projekt']; - if($projektueberschreiben != ''){ - $projekt = $projektueberschreiben; - } - - $mindesthaltbarkeitsdatum = $artikelArr['mindesthaltbarkeitsdatum']; - $chargenverwaltung = $artikelArr['chargenverwaltung']; - - if($lager_platz > 0){ - $tmparr = $this->app->DB->SelectArr("SELECT lager_platz,menge FROM lager_platz_inhalt WHERE artikel='$artikel' ORDER by lager_platz='$lager_platz' DESC, menge DESC"); - } - else{ - $tmparr = $this->app->DB->SelectArr("SELECT lager_platz,menge FROM lager_platz_inhalt WHERE artikel='$artikel' ORDER by menge DESC"); - } - - $mhdchargemengen = null; - - // build common array - $ctmparr = !empty($tmparr)?count($tmparr):0; - for($i=0;$i<$ctmparr;$i++) - { - $lager_platz_id[] = array('lager_platz'=>$tmparr[$i]['lager_platz'],'menge'=>$tmparr[$i]['menge']); - if($mindesthaltbarkeitsdatum) { - if(!isset($mhdchargemengen[$tmparr[$i]['lager_platz']])) - { - $mhdchargemengen[$tmparr[$i]['lager_platz']] = $this->app->DB->Select("SELECT ifnull(sum(menge),0) FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$artikel' AND lager_platz = '".$tmparr[$i]['lager_platz']."'"); - } - }elseif($chargenverwaltung) { - if(!isset($mhdchargemengen[$tmparr[$i]['lager_platz']])) { - $mhdchargemengen[$tmparr[$i]['lager_platz']] = $this->app->DB->Select("SELECT ifnull(sum(menge),0) FROM lager_charge WHERE artikel = '$artikel' AND lager_platz = '".$tmparr[$i]['lager_platz']."'"); - } - } - } - // auslagern mit mhd/chargen - if($mindesthaltbarkeitsdatum || $chargenverwaltung) - { - $clager_platz_id = !empty($lager_platz_id)?count($lager_platz_id):0; - for($i=0;$i < $clager_platz_id;$i++) - { - if($menge <= 0) - { - return; - } - if(!isset($mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']])) - { - continue; - } - if($lager_platz_id[$i]['menge'] <= 0) - { - continue; - } - - if($lager_platz_id[$i]['menge']>=$menge) - { - if($mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']] >= $menge) - { - // in dem regal ist genug restmenge nehmen - $this->LagerAuslagernRegal($artikel,$lager_platz_id[$i]['lager_platz'],$menge,$projekt,$grund, $doctype, $doctypeid); - $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_platz_id[$i]['lager_platz'],$menge,$projekt,$grund, "", $doctype, $doctypeid,$posid); - $menge = 0; - return; - }else{ - $this->LagerAuslagernRegal($artikel,$lager_platz_id[$i]['lager_platz'],$mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']],$projekt,$grund, $doctype, $doctypeid); - $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_platz_id[$i]['lager_platz'],$mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']],$projekt,$grund, "",$doctype, $doctypeid,$posid); - $menge = round($menge - $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']],8); - $lager_platz_id[$i]['menge'] = round($lager_platz_id[$i]['menge'] - $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']], 8); - $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']] = 0; - } - } else { - if($mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']] >= $lager_platz_id[$i]['menge']) - { - $this->LagerAuslagernRegal($artikel,$lager_platz_id[$i]['lager_platz'],$lager_platz_id[$i]['menge'],$projekt,$grund, $doctype, $doctypeid); - $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_platz_id[$i]['lager_platz'],$lager_platz_id[$i]['menge'],$projekt,$grund, "",$doctype, $doctypeid,$posid); - $menge = round($menge - $lager_platz_id[$i]['menge'],8); - $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']] = round($mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']] - $lager_platz_id[$i]['menge'],8); - $lager_platz_id[$i]['menge'] = 0; - }else{ - $this->LagerAuslagernRegal($artikel,$lager_platz_id[$i]['lager_platz'],$mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']],$projekt,$grund, $doctype, $doctypeid); - $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_platz_id[$i]['lager_platz'],$mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']],$projekt,$grund, "",$doctype, $doctypeid,$posid); - $lager_platz_id[$i]['menge'] = round($lager_platz_id[$i]['menge'] - $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']], 8); - $menge = round($menge - $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']], 8); - $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']] = 0; - } - } - } - } - - //auslagern ohne mhd/charge - $clager_platz_id = !empty($lager_platz_id)?count($lager_platz_id):0; - for($i=0;$clager_platz_id;$i++) - { - if($menge <= 0) - { - return; - } - if($lager_platz_id[$i]['menge'] <= 0) - { - continue; - } - //$regal = $this->app->DB->Select("SELECT lager_platz FROM lager_platz_inhalt WHERE id='".$lager_platz_id[$i]['id']."' LIMIT 1"); - if($lager_platz_id[$i]['menge']>=$menge) - { - // in dem regal ist genug restmenge nehmen - $this->LagerAuslagernRegal($artikel,$lager_platz_id[$i]['lager_platz'],$menge,$projekt,$grund, $doctype, $doctypeid); - $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_platz_id[$i]['lager_platz'],$menge,$projekt,$grund, "", $doctype, $doctypeid,$posid); - $menge = 0; - return; - } else { - // komplettes regal und menge abziegen - $this->LagerAuslagernRegal($artikel,$lager_platz_id[$i]['lager_platz'],$lager_platz_id[$i]['menge'],$projekt,$grund, $doctype, $doctypeid); - $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_platz_id[$i]['lager_platz'],$lager_platz_id[$i]['menge'],$projekt,$grund, "",$doctype, $doctypeid,$posid); - $menge = round($menge - $lager_platz_id[$i]['menge'],8); - } - } - //$this->LagerArtikelZusammenfassen($artikel); - } - - function GetVPEBezeichnung($vpeid) - { - if($vpeid <= 0) - { - return ''; - } - return (String)$this->app->DB->Select("SELECT concat(' (VPE Menge: ',".$this->FormatMenge('menge').",' Gewicht: ',".$this->FormatMenge('gewicht').",' Abmessung: ',".$this->FormatMenge('breite').",' x ',".$this->FormatMenge('laenge').",' x ',".$this->FormatMenge('hoehe').",')') FROM `lager_platz_vpe` WHERE id = '$vpeid' LIMIT 1"); - } - - function LagerAuslagernRegal($artikel,$regal,$menge,$projekt,$grund,$importer="", $doctype = "", $doctypeid = 0, $lager_platz_vpe = 0, $lpiid = 0) - { - if(!$artikel) - { - return -1; - } - $break = false; - $this->RunHook('LagerAuslagernRegal_before',8, $artikel, $menge, $regal, $projekt, $grund, $doctype,$doctypeid, $break); - if($break)return; - - $this->LagerArtikelZusammenfassen($artikel, $regal); - - if($importer==1) - $username = "Import"; - else{ - if(!empty($this->app->User) && method_exists($this->app->User,'GetName')){ - $username = $this->app->DB->real_escape_string($this->app->User->GetName()); - }else{ - $username = 'Cronjob'; - } - } - - // abbrechen wenn es nicht so ist! - $bestand = $this->ArtikelImLagerPlatz($artikel,$regal); - - if($menge > $bestand || $bestand <=0) return -1; - - if($menge > 0) - { - $subwhere = ""; - $vpe_found = false; - if($lager_platz_vpe > 0) - { - $check = $this->app->DB->Select("SELECT id FROM lager_platz_inhalt WHERE lager_platz_vpe = '$lager_platz_vpe' AND menge >= $menge AND artikel='$artikel' AND lager_platz='$regal' ORDER BY id = '$lpiid' DESC LIMIT 1"); - if($check) - { - $vpe_found = true; - $subwhere = " AND id = '$check' "; - } - }else{ - $check = $this->app->DB->Select("SELECT id FROM lager_platz_inhalt WHERE lager_platz_vpe = '0' AND menge >= $menge AND artikel='$artikel' AND lager_platz='$regal' LIMIT 1"); - if($check) - { - $subwhere = " AND id = '$check' "; - } - } - if($check) - { - // lager in diesem Regal anpassen - if($vpe_found)$grund .= $this->GetVPEBezeichnung($lager_platz_vpe); - $this->app->DB->Update("UPDATE lager_platz_inhalt SET menge=menge-$menge WHERE artikel='$artikel' AND lager_platz='$regal' $subwhere LIMIT 1"); - $this->app->DB->Delete( - sprintf( - 'DELETE FROM `lager_platz_inhalt` WHERE `id` = %d AND `menge` <= 0 AND `lager_platz_vpe` <= 0', - $check - ) - ); - // Bewegung buchen - $bestand = $this->ArtikelImLagerPlatz($artikel,$regal); - $this->app->DB->Insert("INSERT INTO lager_bewegung (id,lager_platz,artikel,menge,vpe,eingang,zeit,referenz,bearbeiter,projekt,firma,bestand,doctype,doctypeid) VALUES - ('','$regal','$artikel','$menge','','0',NOW(),'$grund','" . $username. "','$projekt','','$bestand','$doctype','$doctypeid')"); - }else{ - $lpis = $this->app->DB->SelectArr("SELECT id, menge,lager_platz_vpe FROM lager_platz_inhalt WHERE artikel = '$artikel' AND lager_platz='$regal' ORDER BY ".($lager_platz_vpe && $lpiid?" id = '$lpiid' DESC, ":'')." lager_platz_vpe = '$lager_platz_vpe' DESC, id"); - if($lpis) - { - $vpemengen = null; - $_menge = $menge; - foreach($lpis as $v) - { - if($_menge <= 0)break; - if($_menge < $v['menge']) - { - if(!isset($vpemengen[$v['lager_platz_vpe']]))$vpemengen[$v['lager_platz_vpe']] = 0; - $vpemengen[$v['lager_platz_vpe']] += $_menge; - $this->app->DB->Update("UPDATE lager_platz_inhalt SET menge=menge-$_menge WHERE id = '".$v['id']."' LIMIT 1"); - $this->app->DB->Delete(sprintf('DELETE FROM `lager_platz_inhalt` WHERE `id` = %d AND `menge` <= 0', $v['id'])); - $_menge = 0; - break; - }elseif($_menge == $v['menge']) - { - if(!isset($vpemengen[$v['lager_platz_vpe']]))$vpemengen[$v['lager_platz_vpe']] = 0; - $vpemengen[$v['lager_platz_vpe']] += $_menge; - $this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE id = '".$v['id']."' LIMIT 1"); - $_menge = 0; - break; - }elseif($v['menge'] < $_menge) - { - if(!isset($vpemengen[$v['lager_platz_vpe']]))$vpemengen[$v['lager_platz_vpe']] = 0; - $vpemengen[$v['lager_platz_vpe']] += $v['menge']; - $this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE id = '".$v['id']."' LIMIT 1"); - $_menge = round($_menge - $v['menge'],8); - } - } - if($_menge > 0)$menge -= $_menge; - if($menge > 0) - { - $bestand = $this->ArtikelImLagerPlatz($artikel,$regal); - $bestandalt = round($bestand + $menge,8); - - foreach($vpemengen as $vpeid => $m) - { - $bestandalt = round($bestandalt - $m, 8); - $_grund = $grund; - if($vpeid)$_grund = $grund . $this->GetVPEBezeichnung($vpeid); - $this->app->DB->Insert("INSERT INTO lager_bewegung (id,lager_platz,artikel,menge,vpe,eingang,zeit,referenz,bearbeiter,projekt,firma,bestand,doctype,doctypeid) VALUES - ('','$regal','$artikel','$m','','0',NOW(),'$_grund','" . $username. "','$projekt','','$bestandalt','$doctype','$doctypeid')"); - } - } - } - } - } - else - { - $this->Protokoll("Menge $menge fuer Artikel $artikel und lager_platz $regal konnte nicht entnommen werden"); - } - - $this->LagerArtikelZusammenfassen($artikel, $regal); - $this->RunHook('LagerAuslagernRegal_after',7, $artikel, $menge, $regal, $projekt, $grund, $doctype,$doctypeid); - $this->app->DB->Update(sprintf('UPDATE `artikel`SET `laststorage_changed` = NOW() WHERE `id` = %d', $artikel)); - return 1; - } - - function AddBaugruppenChargeMHD($id, $artikel, $anzahl, $chargennummer,$mhd = '') - { - $bezeichnung = ""; - $kommentar = ""; - $typ = ""; - $this->app->DB->Insert("INSERT INTO produktion_charge (bezeichnung, kommentar, artikel, produktion,typ,anzahl,chargennummer,mhd,bearbeiter) VALUES ('$bezeichnung','$kommentar','$artikel','$id','$typ','$anzahl','$chargennummer','$mhd','".$this->app->DB->real_escape_string($this->app->User->GetName())."')"); - echo $this->app->DB->error(); - $newid = $this->app->DB->GetInsertID(); - $baugruppen = $this->app->DB->SelectArr("SELECT pb.id, ifnull(count(pbc.id),0) as co FROM produktion_baugruppen pb - LEFT JOIN produktion_baugruppen_charge pbc ON pbc.baugruppe = pb.id - WHERE pb.produktion = '$id' - GROUP BY pb.id ORDER by count(pbc.id), pb.id - "); - if($baugruppen) - { - $ind = 0; - foreach($baugruppen as $baugruppe) - { - $ind+=$mengeprobaugruppe; - $_mengebaugruppe = $mengeprobaugruppe; - if($anzahl && $ind >= $anzahl)$_mengebaugruppe -= $ind - $anzahl; - if($_mengebaugruppe > 0)$this->app->DB->Insert("INSERT INTO produktion_baugruppen_charge (produktion, baugruppe, charge, chargennummer,mhd,bearbeiter, menge) values ('$id','".$baugruppe['id']."','$newid','$chargennummer','$mhd','".$this->app->DB->real_escape_string($this->app->User->GetName())."','$_mengebaugruppe')"); - if($anzahl && $ind >= $anzahl)break; - } - } - } - -function ChargenMHDAuslagern($artikel, $menge, $lagerplatztyp, $lpid,$typ,$wert, $fifo=0, $projekt=0, $grund="",$doctype="",$doctypeid) -{ - $mindesthaltbarkeitsdatum = $this->app->DB->Select("SELECT mindesthaltbarkeitsdatum FROM artikel WHERE id = '$artikel' LIMIT 1"); - $chargenverwaltung = $this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id = '$artikel' LIMIT 1"); - $subwhere = ''; - $join = ''; - $sperrlagerWhere = ' lp.sperrlager <> 1 '; - if($doctype === 'produktion') { - $sperrlagerWhere = ' (lp.sperrlager <> 1 OR lp.allowproduction = 1) '; - } - switch($lagerplatztyp) - { - case 'lagerplatz': - if($lpid) { - $subwhere = " AND c.lager_platz = '$lpid' "; - } - break; - case 'lager': - if($lpid) { - $join = " INNER JOIN lager_platz lp ON c.lager_platz = lp.id AND lp.lager = '$lpid' AND ".$sperrlagerWhere; - } - break; - case 'projektlager': - if($projekt) { - $join = " INNER JOIN lager_platz lp ON c.lager_platz = lp.id AND lp.projekt = '$projekt' AND ".$sperrlagerWhere; - } - break; - case "poslager": - if($lpid) { - $join = " INNER JOIN lager_platz lp ON c.lager_platz = lp.id AND lp.lager = '$lpid' AND lp.poslager = 1"; - } - break; - } - switch($typ) - { - case 'mhdcharge': - case 'mhd': - if(!$mindesthaltbarkeitsdatum || !$chargenverwaltung)return false; - - if($typ == 'mhdcharge') - { - $mhdcharge = $wert; - if($mhdcharge && strlen($mhdcharge) > 10) - { - $mhd = substr($mhdcharge, 0,10); - if(strpos($mhd,'.') !== false) - { - $mhd = $this->app->String->Convert($mhd,"%1.%2.%3","%3-%2-%1"); - } - $mhdcharge = substr($mhdcharge, 11); - } - }else{ - $mhd = $wert; - $mhdcharge = ""; - } - - $checkarr = $this->app->DB->SelectArr("SELECT c.* FROM lager_mindesthaltbarkeitsdatum c $join WHERE c.artikel = '$artikel' $subwhere ORDER BY mhddatum = '$mhd' DESC, ".($mhdcharge != ''?"charge= '$mdhcharge' DESC,":"")." mhddatum,charge, id "); - if($checkarr) - { - $nochmenge = $menge; - foreach($checkarr as $c) - { - if($nochmenge <= 0)break; - if(!$fifo && $c['mhddatum'] != $mhd)break; - if($nochmenge >= $c['menge']) - { - if($doctype == 'produktion')$this->AddBaugruppenChargeMHD($doctypeid, $artikel, $c['menge'], $c['charge'],$c['mhddatum']); - $this->app->DB->Delete("DELETE FROM `lager_mindesthaltbarkeitsdatum` WHERE id = '".$c['id']."' LIMIT 1"); - if($chargenverwaltung) - { - $checkchargen = $this->app->DB->SelectArr("SELECT * FROM lager_charge WHERE artikel = '$artikel' AND lager_platz = '$lager_platz' AND charge = '".$c['charge']."' ORDER BY id "); - if($checkchargen) - { - $cnochmenge = $c['menge']; - foreach($checkchargen as $cc) - { - if($cnochmenge <= 0)break; - if($cc['menge'] <= $cnochmenge) - { - $this->app->DB->Delete("DELETE FROM lager_charge WHERE id = '".$cc['id']."' LIMIT 1"); - $cnochmenge -= $cc['menge']; - }else{ - $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET menge = menge - '".$cnochmenge."' WHERE id = '".$cc['id']."' LIMIT 1"); - break; - } - } - } - } - $nochmenge -= $c['menge']; - }else{ - if($doctype == 'produktion')$this->AddBaugruppenChargeMHD($doctypeid, $artikel, $nochmenge, $c['charge'],$c['mhddatum']); - $this->app->DB->Update("UPDATE lager_charge SET menge = menge - '".$nochmenge."' WHERE id = '".$c['id']."' LIMIT 1"); - if($chargenverwaltung) - { - $checkchargen = $this->app->DB->SelectArr("SELECT * FROM lager_charge WHERE artikel = '$artikel' AND lager_platz = '$lager_platz' AND charge = '".$c['charge']."' ORDER BY id "); - if($checkchargen) - { - $cnochmenge = $nochmenge; - foreach($checkchargen as $cc) - { - if($cnochmenge <= 0)break; - if($cc['menge'] <= $cnochmenge) - { - $this->app->DB->Delete("DELETE FROM lager_charge WHERE id = '".$cc['id']."' LIMIT 1"); - $cnochmenge -= $cc['menge']; - }else{ - $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET menge = menge - '".$cnochmenge."' WHERE id = '".$cc['id']."' LIMIT 1"); - break; - } - } - } - } - $nochmenge = 0; - break; - } - } - return $menge - $nochmenge; - } - - break; - case 'charge': - if(!$chargenverwaltung)return false; - - $checkarr = $this->app->DB->SelectArr("SELECT c.* FROM lager_charge c $join WHERE c.artikel = '$artikel' $subwhere ORDER BY charge = '$wert' DESC, charge, id "); - if($checkarr) - { - $nochmenge = $menge; - foreach($checkarr as $c) - { - if($nochmenge <= 0)break; - if(!$fifo && $c['charge'] != $wert)break; - if($c['menge'] <= $nochmenge) - { - if($doctype == 'produktion')$this->AddBaugruppenChargeMHD($doctypeid, $artikel, $c['menge'], $c['charge']); - $this->app->DB->Delete("DELETE FROM lager_charge WHERE id = '".$c['id']."' LIMIT 1"); - $nochmenge -= $c['menge']; - }else{ - if($doctype == 'produktion')$this->AddBaugruppenChargeMHD($doctypeid, $artikel, $nochmenge, $c['charge']); - $this->app->DB->Update("UPDATE lager_charge SET menge = menge - $nochmenge WHERE id = '".$c['id']."' LIMIT 1"); - $nochmenge = 0; - break; - } - } - return $menge - $nochmenge; - } - break; - } - return false; -} - - function CreateBelegPositionMHDCHARGESRNArr($doctype,$doctypeid,$pos, $data, $lager_platz = 0) - { - if(!$data) { - return; - } - $first = true; - $sql = "INSERT INTO beleg_chargesnmhd (doctype,doctypeid,pos,type,wert,menge, type2, wert2, lagerplatz) VALUES "; - foreach($data as $k => $v) { - if(!$first) { - $sql .= ', '; - } - $sql .= " ('$doctype','$doctypeid','$pos','".$v['type']."','".$v['wert']."','".$v['menge']."','".$v['type2']."','".$v['wert2']."','$lager_platz') "; - $first = false; - } - $this->app->DB->Insert($sql); - } - - function CreateBelegPositionMHDCHARGESRN($doctype,$doctypeid,$pos,$type,$wert,$menge=1, $type2 = "", $wert2 = "", $lager_platz = 0, $internebemerkung = '') - { - if($type === 'sn' && $menge == 0) { - $menge = 1; - } - $this->app->DB->Insert( - "INSERT INTO beleg_chargesnmhd (doctype,doctypeid,pos,type,wert,menge, type2, wert2) VALUES - ('$doctype','$doctypeid','$pos','$type','$wert','$menge','$type2','$wert2')" - ); - $ind = $this->app->DB->GetInsertID(); - if($lager_platz) { - $this->app->DB->Update("UPDATE beleg_chargesnmhd set lagerplatz = '".$lager_platz."' WHERE id = '$ind' LIMIT 1"); - } - if($internebemerkung != '') { - $this->app->DB->Update("UPDATE beleg_chargesnmhd set internebemerkung = '".$this->app->DB->real_escape_string($internebemerkung)."' WHERE id = '$ind' LIMIT 1"); - } - if($type === 'sn') { - $this->app->erp->SeriennummernLog($this->app->DB->Select("SELECT artikel FROM $doctype"."_position WHERE id = '$pos' LIMIT 1"), $lager_platz, $wert, 0, "",0,"","",$doctype, $doctypeid); - } - return $ind; - } - - function MHDAuslagernLog($artikel, $lager_platz, $mhddatum, $charge, $menge, $internebemerkung = '', $doctype = "", $doctypeid = 0, $lager_chargenid = 0, $adresse = 0) - { - if($artikel <= 0 || $menge == 0) { - return false; - } - if($lager_platz == 0 && $lager_chargenid == 0) { - return false; - } - if(!$adresse && $doctype != '' && $doctypeid > 0) { - $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); - } - if($lager_chargenid) - { - $arr = $this->app->DB->SelectArr("SELECT id, lager_platz, menge, charge,mhddatum FROM lager_mindesthaltbarkeitsdatum WHERE id = '$lager_chargenid' AND artikel = '$artikel' LIMIT 1"); - }else{ - $arr = $this->app->DB->SelectArr("SELECT id, lager_platz, menge, charge,mhddatum FROM lager_mindesthaltbarkeitsdatum - WHERE artikel = '$artikel' AND lager_platz = '$lager_platz' - ".($mhddatum!=''?" AND mhddatum = '$mhddatum'":'')." - ".($charge!=''?" AND charge = '$charge'":'')." AND menge > 0"); - } - if(!$arr) { - return false; - } - foreach($arr as $v) - { - if($menge <= 0) { - return true; - } - if($menge >= $v['menge']) - { - $menge -= $v['menge']; - $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id = '".$v['id']."' LIMIT 1"); - $this->MHDLog($artikel, $v['lager_platz'], 0, $v['mhddatum'], $v['menge'], $internebemerkung, $doctype, $doctypeid, $v['charge']); - }else{ - $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET menge = menge - $menge WHERE id = '".$v['id']."' LIMIT 1"); - $this->MHDLog($artikel, $v['lager_platz'], 0, $v['mhddatum'], $menge, $internebemerkung, $doctype, $doctypeid, $v['charge']); - return true; - } - } - - return $menge <= 0; - } - - function ChargeAuslagernLog($artikel, $lager_platz, $charge, $menge, $internebemerkung = '', $doctype = '', $doctypeid = 0, $lager_chargenid = 0, $adresse = 0, $isInterim = 0) - { - if($artikel <= 0 || $menge == 0) { - return false; - } - if($lager_platz == 0 && $lager_chargenid == 0) { - return false; - } - if(!$adresse && $doctype != '' && $doctypeid > 0) { - $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); - } - if($lager_chargenid) { - $arr = $this->app->DB->SelectArr("SELECT id, lager_platz, menge, charge FROM lager_charge WHERE id = '$lager_chargenid' AND artikel = '$artikel' LIMIT 1"); - }else{ - $arr = $this->app->DB->SelectArr("SELECT id, lager_platz, menge, charge FROM lager_charge WHERE artikel = '$artikel' AND lager_platz = '$lager_platz' AND charge = '$charge' AND menge > 0"); - } - if(!$arr) { - return false; - } - foreach($arr as $v) { - if($menge <= 0) { - return true; - } - if($menge >= $v['menge']) - { - $menge -= $v['menge']; - $this->app->DB->Delete("DELETE FROM lager_charge WHERE id = '".$v['id']."' LIMIT 1"); - $this->Chargenlog($artikel, $v['lager_platz'], 0, $charge, $v['menge'], $internebemerkung, $doctype, $doctypeid, $adresse,0,$isInterim); - }else{ - $this->app->DB->Update("UPDATE lager_charge SET menge = menge - $menge WHERE id = '".$v['id']."' LIMIT 1"); - $this->Chargenlog($artikel, $v['lager_platz'], 0, $charge, $menge, $internebemerkung, $doctype, $doctypeid, $adresse,0,$isInterim); - return true; - } - } - return $menge <= 0; - } - - function Chargenlog($artikel, $lager_platz, $eingang, $charge, $menge, $internebemerkung = '', $doctype = "", $doctypeid = 0, $adresse = 0,$chargen_log_id = 0, $isInterim = 0) - { - if($artikel <= 0) { - return null; - } - if(!$adresse && $doctype != '' && $doctypeid > 0) { - $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); - } - $internebemerkung = $this->app->DB->real_escape_string($internebemerkung); - $bestand = $this->app->DB->Select("SELECT ifnull(sum(menge),0) FROM lager_charge WHERE artikel = '$artikel' AND lager_platz = '$lager_platz' AND charge = '$charge'"); - $this->RunHook('chargenlog_bestand', 4, $artikel, $lager_platz, $charge, $bestand); - if($chargen_log_id) { - $chargen_log_id = $this->app->DB->Select("SELECT id FROM chargen_log WHERE id='$chargen_log_id' AND eingang = '$eingang' AND artikel = '$artikel' AND charge = '$charge' AND doctype = '$doctype' AND doctypeid = '$doctypeid' AND adresse = '$adresse' LIMIT 1"); - } - if($chargen_log_id) - { - $this->app->DB->Update("UPDATE chargen_log SET menge = menge + $menge, bestand = '$bestand' WHERE id = '$chargen_log_id' LIMIT 1"); - return $chargen_log_id; - } - $this->app->DB->Insert("INSERT INTO chargen_log (artikel,lager_platz,eingang,bezeichnung,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid,bestand,adresse,is_interim) - VALUES ('$artikel','$lager_platz','$eingang','".$charge."',NOW(),".(int)$this->app->User->GetAdresse().",'".$menge."','$internebemerkung','$doctype','$doctypeid','$bestand','$adresse',".(int)$isInterim.")"); - return $this->app->DB->GetInsertID(); - } - - function ChargenLogArray($artikel, $lager_platz, $eingang, $data, $internebemerkung = '', $doctype = "", $doctypeid = 0, $adresse = 0) - { - if($artikel <= 0) { - return; - } - if(!$adresse && $doctype != '' && $doctypeid > 0) { - $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); - } - $internebemerkung = $this->app->DB->real_escape_string($internebemerkung); - $sql = "INSERT INTO chargen_log (artikel,lager_platz,eingang,bezeichnung,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid,bestand,adresse) VALUES "; - $first = true; - $useradresse = 0; - if(isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetAdresse')) { - $useradresse = $this->app->User->GetAdresse(); - } - foreach($data as $k => $v) { - $this->RunHook('chargenlog_bestand', 4, $artikel, $lager_platz, $data[$k]['charge'], $data[$k]['bestand']); - if(!$first) { - $sql .= ', '; - } - $sql .= " ('$artikel','$lager_platz','$eingang','".$data[$k]['charge']."',NOW(),".$useradresse.",'".$data[$k]['menge']."','$internebemerkung','$doctype','$doctypeid','".$data[$k]['bestand']."','$adresse') "; - $first = false; - } - $this->app->DB->Insert($sql); - } - - function MHDLog($artikel, $lager_platz, $eingang, $mhd, $menge, $internebemerkung = '', $doctype = '', $doctypeid = 0, $charge = '', $adresse = 0, $isInterim = 0) - { - if($artikel <= 0) { - return; - } - if(!$adresse && $doctype != '' && $doctypeid > 0) { - $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); - } - $internebemerkung = $this->app->DB->real_escape_string($internebemerkung); - $bestand = $this->app->DB->Select("SELECT ifnull(sum(menge),0) FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$artikel' AND lager_platz = '$lager_platz' AND mhddatum = '$mhd' AND ifnull(charge,'') = '$charge'"); - $this->RunHook('mhdlog_bestand', 4, $artikel, $lager_platz, $mhd, $bestand); - $this->app->DB->Insert("INSERT INTO mhd_log (artikel,lager_platz,eingang,mhddatum,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid,bestand,adresse,is_interim) - VALUES ('$artikel','$lager_platz','$eingang','".$mhd."',NOW(),".(int)$this->app->User->GetAdresse().",'".$menge."','$internebemerkung','$doctype','$doctypeid','$bestand','$adresse',".(int)$isInterim.")"); - $insid = $this->app->DB->GetInsertID(); - if($charge != '') { - $this->app->DB->Update("UPDATE mhd_log SET charge = '$charge' WHERE id = '$insid' LIMIT 1"); - } - } - - function MHDLogArray($artikel, $lager_platz, $eingang, $data, $internebemerkung = '', $doctype = '', $doctypeid = 0, $adresse = 0) - { - if(empty($data)) { - return; - } - $sql = "INSERT INTO mhd_log (artikel,lager_platz,eingang,mhddatum,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid,bestand,adresse,charge) VALUES "; - $first = true; - foreach($data as $k => $v) - { - $this->RunHook('mhdlog_bestand', 4, $artikel, $lager_platz, $data[$k]['mhd'], $data[$k]['bestand']); - if(!$first) { - $sql .= ', '; - } - $sql .= "('$artikel','$lager_platz','$eingang','".$data[$k]['mhd']."',NOW(),".(int)$this->app->User->GetAdresse().",'".$data[$k]['menge']."','$internebemerkung','$doctype','$doctypeid','".$data[$k]['bestand']."','$adresse','".$data[$k]['charge']."')"; - $first = false; - } - $this->app->DB->Insert($sql); - } - - public function removeBatchFromStock($articleId, $storageLocationId, $batch, $amount, $comment = '', $doctype = '', $doctypeid = 0, $docPosId = '') { - if($articleId <= 0 || $storageLocationId <= 0 || $amount <= 0 || empty($batch)) { - return 0; - } - $toRemove = $amount; - while($toRemove > 0) { - $this->app->erp->RunHook( - 'LagerAuslagernRegalMHDCHARGESRN_Charge', - 7, - $articleId, - $storageLocationId, - $toRemove, - $doctype, - $doctypeid, - $dokumentposid, - $extraorder - ); - $lager_chargen = $this->app->DB->SelectArr( - sprintf( - "SELECT id, menge, charge - FROM lager_charge - WHERE artikel=%d AND lager_platz=%d AND menge > 0 AND charge = '%s' - ORDER BY $extraorder id - LIMIT %d", - (int)$articleId, (int)$storageLocationId, $batch, ceil($toRemove) - ) - ); - if(empty($lager_chargen)){ - break; - } - - $chargen_log_arr = null; - foreach ($lager_chargen as $v) { - if($toRemove <= 0){ - break; - } - if($v['menge'] <= $toRemove){ - $this->app->DB->Update("UPDATE lager_charge SET menge = 0 WHERE id='" . $v['id'] . "' AND menge = '" . $v['menge'] . "' LIMIT 1"); - if($this->app->DB->affected_rows() > 0){ - $this->app->DB->Delete("DELETE FROM lager_charge WHERE id='" . $v['id'] . "' AND id > 0 LIMIT 1"); - if(!isset($chargen_log_arr['C' . $v['charge']])){ - $chargen_log_arr['C' . $v['charge']] = array('menge' => 0, 'bestand' => 0); - } - $chargen_log_arr['C' . $v['charge']]['menge'] += $v['menge']; - $toRemove = round($toRemove - $v['menge'], 8); - }else{ - break; - } - }elseif($toRemove > 0){ - $this->app->DB->Update("UPDATE lager_charge SET menge = menge - $toRemove WHERE id='" . $v['id'] . "' AND menge >= '$toRemove' LIMIT 1"); - if($this->app->DB->affected_rows() > 0){ - $this->app->DB->Delete("DELETE FROM lager_charge WHERE id='" . $v['id'] . "' AND id > 0 AND menge <= 0 LIMIT 1"); - if(!isset($chargen_log_arr['C' . $v['charge']])){ - $chargen_log_arr['C' . $v['charge']] = array('menge' => 0, 'bestand' => 0); - } - $chargen_log_arr['C' . $v['charge']]['menge'] += $toRemove; - $toRemove = 0; - break; - } - break; - } - } - if($chargen_log_arr){ - $chargensqla = null; - $bestandsql = "SELECT sum(menge) as bestand, charge FROM lager_charge WHERE artikel='$articleId' AND lager_platz='$storageLocationId' AND menge > 0 "; - foreach ($chargen_log_arr as $chargenkey => $arr) { - $chargensqla[] = "'" . substr($chargenkey, 1) . "'"; - } - $bestandsql .= " AND ifnull(charge,'') in (" . implode(', ', $chargensqla) . ") GROUP BY charge"; - $query = $this->app->DB->Query($bestandsql); - if($query){ - while ($row = $this->app->DB->Fetch_Assoc($query)) { - if(isset($chargen_log_arr['C' . $row['charge']])){ - $chargen_log_arr['C' . $row['charge']]['bestand'] = $row['bestand']; - } - } - } - $data = null; - $data2 = null; - foreach ($chargen_log_arr as $chargenkey => $arr) { - $data[] = array('charge' => substr($chargenkey, 1), 'menge' => $arr['menge'], 'bestand' => $arr['bestand']); - $data2[] = array('type' => 'charge', 'wert' => substr($chargenkey, 1), 'menge' => $arr['menge'], 'type2' => '', 'wert2' => ''); - } - unset($chargen_log_arr); - $this->ChargenLogArray($articleId, $storageLocationId, 0, $data, $comment, $doctype, $doctypeid); - unset($data); - if($doctypeid){ - $this->CreateBelegPositionMHDCHARGESRNArr($doctype, $doctypeid, $docPosId, $data2, $storageLocationId); - } - unset($data2); - } - - } - - return round($amount - $toRemove, 7); - } - - function LagerAuslagernRegalMHDCHARGESRN($artikel,$regal,$menge,$projekt,$grund,$importer="",$dokumenttyp="",$dokumentid="",$dokumentposid="", $chargenauslagern = 1, $mhdauslagern = 1, $seriennummernauslagern = 1) - { - $grundescaped = $this->app->DB->real_escape_string($grund); - if($this->Verbrauchslagervorhanden()) - { - $verbrauchslager = $this->app->DB->Select("SELECT verbrauchslager FROM lager_platz WHERE id = '$regal' LIMIT 1"); - if($verbrauchslager)$this->LagerArtikelZusammenfassen($artikel, $regal); - } - $artikelArr = $this->app->DB->SelectRow( - sprintf('SELECT mindesthaltbarkeitsdatum, chargenverwaltung, seriennummern FROM artikel WHERE id= %d LIMIT 1', - (int)$artikel - ) - ); - $mhd = $artikelArr['mindesthaltbarkeitsdatum']; - $chargenverwaltung = $artikelArr['chargenverwaltung']; - $chargenverwaltung = $chargenverwaltung == 2 || $chargenverwaltung == 1; - $seriennummern = $artikelArr['seriennummern']; - - if($seriennummernauslagern && $seriennummern==='vomprodukteinlagern') { - if($mhd == '1') { - $mhdauslagern = 1; - } - if($chargenverwaltung) { - $chargenauslagern = 1; - } - } - elseif($seriennummern==='vomprodukteinlagern' && !$seriennummernauslagern) { - if($mhd == '1') { - $mhdauslagern = 0; - } - if($chargenverwaltung) { - $chargenauslagern = 0; - } - } - elseif($mhd == '1' && $mhdauslagern && $chargenverwaltung) { - $chargenauslagern = 1; - } - elseif($mhd == '1' && !$mhdauslagern && $chargenverwaltung) { - $chargenauslagern = 0; - } - - $mhd_menge = $menge; - $charge_menge = $menge; - $extraorder = ''; - if($mhd=='1' && $mhdauslagern) { - $timeout=0; - while($mhd_menge > 0 && $timeout < 1000) { - $timeout++; - $this->app->erp->RunHook('LagerAuslagernRegalMHDCHARGESRN_MHD', 7,$artikel, $regal, $menge, $dokumenttyp,$dokumentid,$dokumentposid, $extraorder); - $lager_mindesthaltbarkeitsdatum = $this->app->DB->SelectArr( - sprintf( - "SELECT id,menge,mhddatum, charge - FROM lager_mindesthaltbarkeitsdatum - WHERE artikel=%d AND lager_platz=%d AND menge > 0 - ORDER BY $extraorder mhddatum, datum - LIMIT %d", - (int)$artikel, (int)$regal, ceil($mhd_menge) - ) - ); - if($lager_mindesthaltbarkeitsdatum) - { - $mhd_log_arr = null; - foreach($lager_mindesthaltbarkeitsdatum as $v) - { - if($mhd_menge <= 0) { - break; - } - $charge_menge = 0; - if($v['menge']<=$mhd_menge) - { - $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET menge = 0 WHERE id='".$v['id']."' AND menge = '".$v['menge']."' LIMIT 1"); - if($this->app->DB->affected_rows() > 0) - { - $mhd_menge = round($mhd_menge - $v['menge'],8); - $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id='".$v['id']."' AND id > 0 LIMIT 1"); - if(!isset($mhd_log_arr[$v['mhddatum']]) || !isset($mhd_log_arr[$v['mhddatum']]['C'.$v['charge']])) - { - $mhd_log_arr[$v['mhddatum']]['C'.$v['charge']] = array('menge'=>0, 'bestand'=>0); - } - $mhd_log_arr[$v['mhddatum']]['C'.$v['charge']]['menge'] += $v['menge']; - - if($chargenverwaltung) { - $stockedout = (float)$this->removeBatchFromStock($artikel, $regal, $v['charge'], $v['menge'], $grundescaped, $dokumenttyp, $dokumentid, $dokumentposid); - $charge_menge = round($charge_menge - $stockedout, 7); - } - - }else { - break; - } - }elseif($mhd_menge > 0) - { - $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET menge = menge - $mhd_menge WHERE id='".$v['id']."' AND menge >= '$mhd_menge' LIMIT 1"); - if($this->app->DB->affected_rows() > 0) - { - $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id='".$v['id']."' AND id > 0 AND menge <= 0 LIMIT 1"); - if(!isset($mhd_log_arr[$v['mhddatum']]) || !isset($mhd_log_arr[$v['mhddatum']]['C'.$v['charge']])) - { - $mhd_log_arr[$v['mhddatum']]['C'.$v['charge']] = array('menge'=>0, 'bestand'=>0); - } - $mhd_log_arr[$v['mhddatum']]['C'.$v['charge']]['menge'] += $mhd_menge; - if($chargenverwaltung) { - $stockedout = (float)$this->removeBatchFromStock($artikel, $regal, $v['charge'], $mhd_menge, $grundescaped, $dokumenttyp, $dokumentid, $dokumentposid); - $charge_menge = round($charge_menge - $stockedout, 7); - } - $mhd_menge = 0; - } - break; - } - } - if($mhd_log_arr) - { - $mhdsqla = null; - $chargensqla = null; - $bestandsql = "SELECT sum(menge) as bestand, mhddatum, charge FROM lager_mindesthaltbarkeitsdatum WHERE artikel='$artikel' AND lager_platz='$regal' AND menge > 0 "; - foreach($mhd_log_arr as $mhdkey => $arr) - { - $mhdsqla[] = "'".$mhdkey."'"; - foreach($arr as $chargenkey => $arr2) - { - $chargensqla[] = "'".substr($chargenkey, 1)."'"; - } - } - $bestandsql .= " AND mhddatum in (".implode(', ',$mhdsqla).") AND ifnull(charge,'') in (".implode(', ', $chargensqla).") GROUP BY mhddatum, charge"; - $query = $this->app->DB->Query($bestandsql); - if($query) - { - while($row = $this->app->DB->Fetch_Assoc($query)) - { - if(isset($mhd_log_arr[$row['mhddatum']]) && isset($mhd_log_arr[$v['mhddatum']]['C'.$row['charge']])) { - $mhd_log_arr[$v['mhddatum']]['C'.$row['charge']]['bestand'] = $row['bestand']; - } - } - } - $data = null; - $data2 = null; - foreach($mhd_log_arr as $mhdkey => $arr) - { - $mhdsqla[] = "'".$mhdkey."'"; - foreach($arr as $chargenkey => $arr2) - { - $data[] = array('mhd' => $mhdkey, 'charge'=> substr($chargenkey,1), 'menge'=>$arr2['menge'],'bestand'=>$arr2['bestand']); - $data2[] = array('type'=>'mhd','wert'=>$mhdkey,'menge'=>$arr2['menge'],'type2'=>(substr($chargenkey,1) == ''?'':'charge'),'wert2'=>substr($chargenkey,1)); - } - } - unset($mhd_log_arr); - $this->MHDLogArray($artikel, $regal, 0, $data, $grundescaped, $dokumenttyp, $dokumentid); - unset($data); - if($dokumentid) { - $this->CreateBelegPositionMHDCHARGESRNArr($dokumenttyp,$dokumentid,$dokumentposid, $data2, $regal); - } - unset($data2); - } - }else { - break; - } - /* 05.06.2018 Bruno Abfragen zusammengefuehrt - */ - } - } - - - if($chargenverwaltung && $chargenauslagern) - { - while($charge_menge > 0) - { - $this->app->erp->RunHook('LagerAuslagernRegalMHDCHARGESRN_Charge', 7,$artikel, $regal, $menge, $dokumenttyp,$dokumentid,$dokumentposid, $extraorder); - $lager_chargen = $this->app->DB->SelectArr( - sprintf( - "SELECT id, menge, charge - FROM lager_charge - WHERE artikel=%d AND lager_platz=%d AND menge > 0 - ORDER BY $extraorder id - LIMIT %d", - (int)$artikel, (int)$regal, ceil($menge) - ) - ); - if($lager_chargen) - { - $chargen_log_arr = null; - foreach($lager_chargen as $v) - { - if($charge_menge <= 0) { - break; - } - if($v['menge'] <= $charge_menge) - { - $this->app->DB->Update("UPDATE lager_charge SET menge = 0 WHERE id='".$v['id']."' AND menge = '".$v['menge']."' LIMIT 1"); - if($this->app->DB->affected_rows() > 0) - { - $this->app->DB->Delete("DELETE FROM lager_charge WHERE id='".$v['id']."' AND id > 0 LIMIT 1"); - if(!isset($chargen_log_arr['C'.$v['charge']])) - { - $chargen_log_arr['C'.$v['charge']] = array('menge'=>0, 'bestand'=>0); - } - $chargen_log_arr['C'.$v['charge']]['menge'] += $v['menge']; - $charge_menge = round($charge_menge - $v['menge'],8); - }else{ - break; - } - }elseif($charge_menge > 0) - { - $this->app->DB->Update("UPDATE lager_charge SET menge = menge - $charge_menge WHERE id='".$v['id']."' AND menge >= '$charge_menge' LIMIT 1"); - if($this->app->DB->affected_rows() > 0) - { - $this->app->DB->Delete("DELETE FROM lager_charge WHERE id='".$v['id']."' AND id > 0 AND menge <= 0 LIMIT 1"); - if(!isset($chargen_log_arr['C'.$v['charge']])) - { - $chargen_log_arr['C'.$v['charge']] = array('menge'=>0, 'bestand'=>0); - } - $chargen_log_arr['C'.$v['charge']]['menge'] += $charge_menge; - $charge_menge = 0; - } - break; - } - } - if($chargen_log_arr) - { - $chargensqla = null; - $bestandsql = "SELECT sum(menge) as bestand, charge FROM lager_charge WHERE artikel='$artikel' AND lager_platz='$regal' AND menge > 0 "; - foreach($chargen_log_arr as $chargenkey => $arr) - { - $chargensqla[] = "'".substr($chargenkey, 1)."'"; - } - $bestandsql .= " AND ifnull(charge,'') in (".implode(', ', $chargensqla).") GROUP BY charge"; - $query = $this->app->DB->Query($bestandsql); - if($query) - { - while($row = $this->app->DB->Fetch_Assoc($query)) - { - if(isset($chargen_log_arr['C'.$row['charge']])) { - $chargen_log_arr['C'.$row['charge']]['bestand'] = $row['bestand']; - } - } - } - $data = null; - $data2 = null; - foreach($chargen_log_arr as $chargenkey => $arr) - { - $data[] = array('charge'=> substr($chargenkey,1), 'menge'=>$arr['menge'],'bestand'=>$arr['bestand']); - $data2[] = array('type'=>'charge','wert'=>substr($chargenkey,1),'menge'=>$arr['menge'],'type2'=>'','wert2'=>''); - } - unset($chargen_log_arr); - $this->ChargenLogArray($artikel, $regal, 0, $data, $grundescaped, $dokumenttyp, $dokumentid); - unset($data); - if($dokumentid) { - $this->CreateBelegPositionMHDCHARGESRNArr($dokumenttyp,$dokumentid,$dokumentposid, $data2, $regal); - } - unset($data2); - } - unset($lager_chargen); - }else { - break; - } - } - /* 05.06.2018 Bruno Abfragen zusammengefuehrt - - */ - } - - if($this->Verbrauchslagervorhanden()) - { - if($verbrauchslager)$this->LagerArtikelZusammenfassen($artikel, $regal); - } - } - - - function CreateLagerplatz($lager,$lagerplatz_name,$firma="1") - { - $lagerplatz_name = trim($lagerplatz_name); - // pruefe ob es Lagerplatz bereits gibt - $check_id = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$lagerplatz_name' AND lager='$lager' LIMIT 1"); - - if($check_id <= 0) - { - if($firma <= 0) $firma=1; - $this->app->DB->Insert("INSERT INTO lager_platz (id,lager,kurzbezeichnung,firma) VALUES ('','$lager','$lagerplatz_name',$firma)"); - $check_id = $this->app->DB->GetInsertID(); - } - return $check_id; - } - - - function LagerID($lager) - { - - if(is_numeric($lager) && $lager > 0) - { - $lager = $lager + 0; - $lager = $this->app->DB->Select("SELECT id FROM lager_platz WHERE id='$lager' LIMIT 1"); - if($lager > 0) - return $lager; - } - - if($lager !="") - { - $id = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$lager' LIMIT 1"); - return $id; - } else return ""; - } - - function IsArtikelInZwischenlager($artikel) - { - $check = $this->app->DB->Select("SELECT id FROM zwischenlager WHERE richtung='Eingang' AND artikel='$artikel' LIMIT 1"); - return $check > 0; - } - - function ArtikelIDWennEAN($artikelnummer, $fremdnummern = false) - { - if($artikelnummer!="") - { - // artikelnummer hat hoechste Prio - $nummer = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikelnummer' AND ifnull(geloescht,0) = 0 LIMIT 1"); - if($nummer > 0) - return $nummer; - - // dann ean nummer - $ean = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$artikelnummer' AND ifnull(geloescht,0) = 0 AND nummer != 'DEL' LIMIT 1"); - if($ean > 0) - return $ean; - - // und zum Schluss Hersteller - $herstellernummer = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='$artikelnummer' AND ifnull(geloescht,0) = 0 AND nummer != 'DEL' LIMIT 1"); - if($herstellernummer > 0) - return $herstellernummer; - - if($fremdnummern) - { - $artikel = $this->app->DB->Select("SELECT art.id FROM artikel art INNER JOIN artikelnummer_fremdnummern af ON art.id = af.artikel AND ifnull(art.geloescht,0) = 0 AND af.aktiv = 1 AND art.nummer <> 'DEL' - INNER JOIN shopexport s ON af.shopid = s.id WHERE af.nummer = '$artikelnummer' LIMIT 1"); - if($artikel) - return $artikel; - } -/* - $id = $this->app->DB->Select("SELECT id FROM artikel WHERE id='$artikelnummer' LIMIT 1"); - if($id > 0) - return $id; - else - return 0; -*/ - } - return 0; - } - - function LagerEinlagern($artikel,$menge,$regal,$projekt,$grund="",$importer="",$paketannahme="",$doctype = "", $doctypeid = 0, $vpeid = 0, $permanenteinventur = 0, $adresse = 0) - { - if(empty($artikel) || empty($regal)){ - return; - } - $break = false; - $this->RunHook('LagerEinlagern_before',8, $artikel, $menge, $regal, $projekt, $grund, $doctype,$doctypeid, $break); - if($break) { - return; - } - if(!$adresse && $doctypeid && $doctype != '') { - $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); - } - //$this->LagerArtikelZusammenfassen($artikel); - $vpe = 'einzeln'; - $username = 'Import'; - if($importer!=1) { - $username = $this->app->DB->real_escape_string($this->app->User->GetName()); - } - - if($menge > 0 && is_numeric($menge)) { - // inhalt buchen - $this->app->DB->Insert("INSERT INTO lager_platz_inhalt (id,lager_platz,artikel,menge,vpe,bearbeiter,bestellung,projekt,firma,logdatei) - VALUES ('','$regal','$artikel','$menge','$vpe','".$username."','','$projekt','',NOW())"); - $insid = $this->app->DB->GetInsertID(); - $bestand = $this->ArtikelImLagerPlatz($artikel,$regal); - // Bewegung - if($vpeid) { - $grund .= $this->GetVPEBezeichnung($vpeid); - } - $this->app->DB->Insert("INSERT INTO lager_bewegung (id,lager_platz, artikel, menge,vpe, eingang,zeit,referenz, bearbeiter,projekt,firma,logdatei,bestand,paketannahme,doctype,doctypeid, permanenteinventur, adresse) - VALUES('','$regal','$artikel','$menge','$vpe','1',NOW(),'$grund','".$username."','$projekt','',NOW(),'$bestand','$paketannahme','$doctype','$doctypeid', '$permanenteinventur','$adresse')"); - if($vpeid)$this->app->DB->Update("UPDATE lager_platz_inhalt SET lager_platz_vpe = '$vpeid' WHERE id = '$insid' LIMIT 1"); - $this->LagerArtikelZusammenfassen($artikel, $regal); - $this->app->DB->Update("UPDATE artikel SET cache_lagerplatzinhaltmenge = -999, `laststorage_changed` = NOW() WHERE id = '$artikel' LIMIT 1"); - $this->app->DB->Update( - sprintf( - 'UPDATE artikel_onlineshops SET storage_cache = -999, pseudostorage_cache = -999 WHERE artikel = %d', - $artikel - ) - ); - } - - $this->RunHook('LagerEinlagern_after',7, $artikel, $menge, $regal, $projekt, $grund, $doctype,$doctypeid); - } - - function CreateLagerPlatzInhaltVPE($artikel, $menge, $gewicht, $laenge, $breite, $hoehe, $menge2 = 0, $gewicht2 = 0, $laenge2 = 0, $breite2 = 0, $hoehe2 = 0) - { - $check = $this->app->DB->Select("SELECT id FROM `lager_platz_vpe` WHERE artikel = '$artikel' AND menge = '$menge' AND gewicht = '$gewicht' AND breite = '$breite' AND - hoehe = '$hoehe' ".($menge2 <= 1?" AND (menge2 = '0' OR menge2 = 1) ":" AND menge2 = '$menge2' ")." AND gewicht2 = '$gewicht' AND breite2 = '$breite' AND - hoehe2 = '$hoehe' LIMIT 1 - "); - if($check)return $check; - $this->app->DB->Insert("INSERT INTO `lager_platz_vpe` (artikel, menge, gewicht, laenge, breite, hoehe, menge2, gewicht2, laenge2, breite2, hoehe2 ) - VALUES ('$artikel', '$menge', '$gewicht', '$laenge', '$breite', '$hoehe', '$menge2', '$gewicht2', '$laenge2', '$breite2', '$hoehe2') - "); - return $this->app->DB->GetInsertID(); - } - - function LagerEinlagernDifferenz($artikel,$menge,$regal,$projekt,$grund="",$importer="", $vpeid = 0) - { - $grund = "Differenz: ".$grund; - $this->LagerEinlagern($artikel,$menge,$regal,$projekt,$grund,$importer, "", "", 0, $vpeid); - } - - function LagerArtikelZusammenfassen($artikel, $regal = 0) - { - $fp = $this->app->erp->ProzessLock("lager_artikelzusammenfassen"); - //$this->LagerSync($artikel); - // all einzeln buchungen in einem Baum zusammenfassen - - if($artikel > 0) { - $result = $this->app->DB->SelectArr("SELECT lager_platz,SUM(menge) as gesamt,projekt,max(firma) as firma,max(inventur) as inventur, min(id) as minid,lager_platz_vpe FROM lager_platz_inhalt WHERE artikel='$artikel' ".($regal?" AND lager_platz = '$regal' ":'')." GROUP by lager_platz,lager_platz_vpe having count(id) > 1"); - //echo "DELETE FROM lager_platz_inhalt WHERE artikel='".$artikel."';"; - if($result) { - $cresult = count($result); - for($i=0;$i<$cresult;$i++) { - $this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz = '".$result[$i]['lager_platz']."' AND lager_platz_vpe = '".$result[$i]['lager_platz_vpe']."' "); - if(empty($result[$i]['lager_platz'])) { - continue; - } - $this->app->DB->Insert("INSERT INTO lager_platz_inhalt (id,lager_platz,artikel,menge,projekt,firma,inventur,lager_platz_vpe) VALUES ('".$result[$i]['minid']."','".$result[$i]['lager_platz']."','$artikel', - '".$result[$i]['gesamt']."','".$result[$i]['projekt']."','".$result[$i]['firma']."',".(is_null($result[$i]['inventur'])?"NULL":"'".$result[$i]['inventur']."'").",'".$result[$i]['lager_platz_vpe']."')"); - } - } - } - if($regal) - { - //$this->app->DB->Delete("DELETE lager_platz_inhalt FROM lager_platz_inhalt WHERE lager_platz = '$regal' AND ((menge<='0' and (isnull(inventur) or inventur <= 0)) or menge < 0)"); - }else{ - //$this->app->DB->Delete("DELETE lager_platz_inhalt FROM lager_platz_inhalt WHERE (menge<='0' and (isnull(inventur) or inventur <= 0)) or menge < 0"); - } - if($this->Verbrauchslagervorhanden()) - { - if($regal && $this->app->DB->Select("SELECT verbrauchslager FROM lager_platz WHERE id = '$regal' LIMIT 1")) - { - $this->app->DB->Delete("DELETE lager_platz_inhalt FROM lager_platz_inhalt INNER JOIN lager_platz ON lager_platz.id=lager_platz_inhalt.lager_platz - WHERE lager_platz.verbrauchslager='1' AND lager_platz.id = '$regal'"); - //WHERE lager_platz_inhalt.artikel='".$artikel."' AND lager_platz.verbrauchslager='1'"); - - $this->app->DB->Delete("DELETE lager_charge FROM lager_charge INNER JOIN lager_platz ON lager_platz.id=lager_charge.lager_platz - WHERE lager_platz.verbrauchslager='1' AND lager_platz.id = '$regal'"); - - $this->app->DB->Delete("DELETE lager_seriennummer FROM lager_seriennummer - INNER JOIN lager_platz ON lager_platz.id=lager_seriennummer.lager_platz - WHERE lager_platz.verbrauchslager='1' AND lager_platz.id = '$regal'"); - - $this->app->DB->Delete("DELETE lager_mindesthaltbarkeitsdatum FROM lager_mindesthaltbarkeitsdatum - LEFT JOIN lager_platz ON lager_platz.id=lager_mindesthaltbarkeitsdatum.lager_platz - WHERE lager_platz.verbrauchslager='1' AND lager_platz.id = '$regal'"); - - }else{ - - // loesche verbrauchslager - // aber ebenfalls chargen, seriennummern und mhd - $this->app->DB->Delete("DELETE lager_platz_inhalt FROM lager_platz_inhalt INNER JOIN lager_platz ON lager_platz.id=lager_platz_inhalt.lager_platz - WHERE lager_platz.verbrauchslager='1'"); - //WHERE lager_platz_inhalt.artikel='".$artikel."' AND lager_platz.verbrauchslager='1'"); - - $this->app->DB->Delete("DELETE lager_charge FROM lager_charge INNER JOIN lager_platz ON lager_platz.id=lager_charge.lager_platz - WHERE lager_platz.verbrauchslager='1'"); - - $this->app->DB->Delete("DELETE lager_seriennummer FROM lager_seriennummer - INNER JOIN lager_platz ON lager_platz.id=lager_seriennummer.lager_platz - WHERE lager_platz.verbrauchslager='1'"); - - $this->app->DB->Delete("DELETE lager_mindesthaltbarkeitsdatum FROM lager_mindesthaltbarkeitsdatum - LEFT JOIN lager_platz ON lager_platz.id=lager_mindesthaltbarkeitsdatum.lager_platz - WHERE lager_platz.verbrauchslager='1'"); - } - } - $this->app->erp->ProzessUnlock($fp); - } - - - // pruefe ob es artikel noch im lager gibt bzw. ob es eine reservierung gibt - function LagerFreieMenge($artikel, $mitautolagersperre = false, $standardlager = 0, $projektlager = 0) - { - $summe_im_lager = (float)$this->app->DB->Select( - sprintf( - "SELECT SUM(li.menge) - FROM `lager_platz_inhalt` AS `li` - LEFT JOIN lager_platz AS lp ON lp.id=li.lager_platz - WHERE li.artikel = %d - AND lp.sperrlager!='1'".($mitautolagersperre?' AND lp.autolagersperre != 1':''), - $artikel - ) - ); - if($summe_im_lager <= 0) { - return 0; - } - $artikel_reserviert = (float)$this->app->DB->Select( - "SELECT SUM(lr.menge) - FROM `lager_reserviert` AS `lr` - WHERE lr.artikel = '{$artikel}' - AND (lr.datum >= NOW() OR lr.datum='0000-00-00')"); - - $restmenge = $summe_im_lager - $artikel_reserviert; - if($restmenge <= 0) { - return 0; - } - - if($standardlager > 0) { - $summe_im_lager_standard = (float)$this->app->DB->Select( - sprintf( - "SELECT SUM(li.menge) - FROM `lager_platz_inhalt` AS `li` - INNER JOIN `lager_platz` AS `lp` ON lp.id=li.lager_platz AND lp.lager = %d - WHERE li.artikel = %d - AND lp.sperrlager != '1'".($mitautolagersperre?' AND lp.autolagersperre != 1':''), - $standardlager,$artikel - ) - ); - if($summe_im_lager_standard <= 0) { - return 0; - } - - $artikelReserviertAuftrag = (float)$this->app->DB->Select( - sprintf( - "SELECT SUM(lr.menge) - FROM `lager_reserviert` AS `lr` - INNER JOIN `auftrag` AS `o` ON lr.objekt LIKE 'auftrag' AND lr.parameter = o.id - AND o.standardlager = %d AND o.status = 'freigegeben' - WHERE lr.artikel = %d AND (lr.datum>=NOW() OR lr.datum='0000-00-00')", - $standardlager, $artikel - ) - ); - - $artikelReserviertProduktion = (float)$this->app->DB->Select( - sprintf( - "SELECT SUM(lr.menge) - FROM `lager_reserviert` AS `lr` - INNER JOIN `produktion` AS `p` ON lr.objekt LIKE 'produktion' AND lr.parameter = p.id - AND p.standardlager = %d AND p.status IN ('freigegeben', 'gestartet') - WHERE lr.artikel = %d AND (lr.datum>=NOW() OR lr.datum='0000-00-00')", - $standardlager, $artikel - ) - ); - - $summe_im_lager_standard -= ($artikelReserviertAuftrag + $artikelReserviertProduktion); - if($summe_im_lager_standard <= 0) { - return 0; - } - - if($summe_im_lager_standard < $restmenge) { - return $summe_im_lager_standard; - } - } - elseif($projektlager > 0) { - $summe_im_lager_projekt = (float)$this->app->DB->Select( - sprintf( - "SELECT SUM(li.menge) - FROM `lager_platz_inhalt` AS `li` - INNER JOIN `lager_platz` AS `lp` ON lp.id=li.lager_platz - INNER JOIN `lager` AS `l` ON lp.lager = l.id AND l.projekt = %d - WHERE li.artikel=%d - AND lp.sperrlager!='1'".($mitautolagersperre?' AND lp.autolagersperre != 1':''), - $projektlager, $artikel - ) - ); - - if($summe_im_lager_projekt <= 0) { - return 0; - } - - $artikelReserviertProjektAuftrag = (float)$this->app->DB->Select( - sprintf( - "SELECT SUM(lr.menge) - FROM `lager_reserviert` AS `lr` - INNER JOIN `auftrag` AS `o` ON lr.objekt LIKE 'auftrag' AND lr.parameter = o.id - AND o.projekt = %d AND o.status = 'freigegeben' - WHERE lr.artikel = %d AND (lr.datum>=NOW() OR lr.datum='0000-00-00')", - $projektlager, $artikel - ) - ); - - $artikelReserviertProjektProduktion = (float)$this->app->DB->Select( - sprintf( - "SELECT SUM(lr.menge) - FROM `lager_reserviert` AS `lr` - INNER JOIN `produktion` AS `p` ON lr.objekt LIKE 'produktion' AND lr.parameter = p.id - AND p.projekt = %d AND p.status IN ('freigegeben', 'gestartet') - WHERE lr.artikel = %d AND (lr.datum>=NOW() OR lr.datum='0000-00-00')", - $projektlager, $artikel - ) - ); - - $summe_im_lager_projekt -= ($artikelReserviertProjektAuftrag + $artikelReserviertProjektProduktion); - if($summe_im_lager_projekt <= 0) { - return 0; - } - - if($summe_im_lager_projekt < $restmenge) { - return $summe_im_lager_projekt; - } - } - - return $restmenge; - } - - public function getPreproducedPartlistFromArticle($id) - { - return $this->app->DB->Select( - "SELECT art.preproduced_partlist - FROM artikel AS art - INNER JOIN artikel art2 ON art.preproduced_partlist = art2.id - AND art2.lagerartikel = 1 AND (art2.geloescht = 0 OR art2.geloescht IS NULL) AND art.id != art2.id - WHERE art.id = $id AND art.has_preproduced_partlist" - ); - } - - public function PreproducedPartlistSellableFrom($id, $projektlager = 0, $shopid = 0, $modus = 0) - { - if($id <= 0) { - return 0; - } - $preproduced_partlist = $this->getPreproducedPartlistFromArticle($id); - if($preproduced_partlist <= 0) { - return 0; - } - - return $this->ArtikelAnzahlVerkaufbar($preproduced_partlist, $projektlager, $shopid, $modus); - } - - public function ArtikelAnzahlLagerStueckliste($id, $projektlager = 0, $shopid = 0, $modus = 0) - { - // gehe stueckliste durch und schaue ob es maximal artikel ist - //$offen = $this->app->DB->Select("SELECT SUM(ap.menge) FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$id' AND a.status='freigegeben'"); - if(empty($id)) { - return 0; - } - - $artikel = $this->app->DB->SelectArr("SELECT s.* FROM stueckliste s INNER JOIN artikel a ON s.artikel = a.id WHERE s.stuecklistevonartikel='$id' AND s.art!='it' AND a.lagerartikel = 1 and (a.geloescht = 0 OR a.geloescht IS NULL)"); - - if(empty($artikel)) { - return 0; - } - $offset = $this->PreproducedPartlistSellableFrom($id, $projektlager, $shopid, $modus); - - $stueck = 0; - $kleinste_max_menge = 0; - $cartikel = !empty($artikel)?count($artikel):0; - for($i=0;$i<$cartikel;$i++) { - $artikelid = $artikel[$i]['artikel']; - $mengeimlage = (float)$this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lp.id=lpi.lager_platz - WHERE lpi.artikel='$artikelid' AND lp.sperrlager!=1"); - $mengereserviert = (float)$this->app->DB->Select("SELECT ifnull(SUM(menge),0) FROM lager_reserviert WHERE artikel='$artikelid'"); - $mengeoffen = $modus == 1 ? 0 : (float)$this->app->DB->Select( - "SELECT ifnull(SUM(ap.menge),0) - FROM `auftrag_position` AS `ap` - INNER JOIN `auftrag` AS `a` ON a.id = ap.auftrag - WHERE ap.artikel='{$artikelid}' AND a.status='freigegeben'" - ); - $mengefrei = $mengeimlage - ($mengeoffen > $mengereserviert ? $mengeoffen : $mengereserviert); - - if($projektlager) { - $mengeimlagerprojekt = (float)$this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lp.id=lpi.lager_platz INNER JOIN lager `lag` ON lp.lager = `lag`.id AND `lag`.projekt = '$projektlager' AND `lag`.geloescht <> 1 - WHERE lpi.artikel='$artikelid' AND lp.sperrlager!=1"); - $mengereserviertprojekt = (float)$this->app->DB->Select("SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r INNER JOIN auftrag a ON r.parameter = a.id AND r.objekt = 'auftrag' AND a.status = 'freigegeben' WHERE r.artikel='$artikelid' AND a.projekt = '$projektlager' "); - $mengeoffenprojekt = $modus == 1 ? 0 : (float)$this->app->DB->Select( - "SELECT ifnull(SUM(ap.menge),0) - FROM `auftrag_position` AS `ap` - INNER JOIN `auftrag` AS `a` ON a.id = ap.auftrag - WHERE ap.artikel='{$artikelid}' AND a.status='freigegeben' AND a.projekt = '{$projektlager}'" - ); - $mengefreiprojekt = $mengeimlage - ($mengeoffenprojekt > $mengereserviertprojekt?$mengeoffenprojekt:$mengereserviertprojekt); - if($mengefreiprojekt < $mengefrei) { - $mengefrei = $mengefreiprojekt; - } - } - - - if($artikel[$i]['menge'] <= 0) { - return $offset; - } - - $max_menge = floor($mengefrei/$artikel[$i]['menge']); - $collect[] = $max_menge; - } - - sort($collect); - $stueck = (float)$collect[0]; - - if($stueck <= 0) { - $stueck=0; - } - - return $stueck+$offset; - } - - function ArtikelAnzahlVerkaufbar($artikelid, $offset = 0, $projektlager = 0, $shopid = 0, $modus=0, $returnArray = false) - { - $ij=0; - if(is_array($artikelid) && isset($artikelid['juststueckliste']) && isset($artikelid['lagerartikel'])) { - $articleRow = $artikelid; - $artikelid = $artikelid['id']; - } - else{ - $lagerartikel[$ij]['id'] = $artikelid; - $articleRow = $this->app->DB->SelectRow( - sprintf( - 'SELECT id, juststueckliste, lagerartikel FROM artikel WHERE id = %d', - $artikelid - ) - ); - } - $lagerartikel[$ij]['juststueckliste'] = $articleRow['juststueckliste'];// $this->app->DB->Select("SELECT juststueckliste FROM artikel WHERE id='$artikelid' LIMIT 1"); - //$lagerartikel[$ij]['name_de'] = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikelid' LIMIT 1"); - //$lagerartikel[$ij]['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikelid' LIMIT 1"); - //$lagerartikel[$ij]['cache_lagerplatzinhaltmenge'] = $this->app->DB->Select("SELECT cache_lagerplatzinhaltmenge FROM artikel WHERE id='$artikelid' LIMIT 1"); - - $keinestueckliste = false; - if($lagerartikel[$ij]['juststueckliste'] && !$articleRow['lagerartikel']) { - $offen = 0; - $reserviert = 0; - $lagernd = (float)$this->ArtikelAnzahlLagerStueckliste($lagerartikel[$ij]['id'], $projektlager, $shopid, $modus); - } - elseif($lagerartikel[$ij]['juststueckliste']) { - $lagernd = (float)$this->ArtikelAnzahlLagerStueckliste($lagerartikel[$ij]['id'], $projektlager, $shopid, $modus); - $offen = (float)$this->ArtikelAnzahlOffene($lagerartikel[$ij]['id'], $projektlager); - $reserviert = (float)$this->ArtikelAnzahlReserviert($lagerartikel[$ij]['id'], $projektlager); - } - else { - $lagernd = (float)$this->ArtikelAnzahlLager($lagerartikel[$ij]['id'],0 , $projektlager); - $offen = (float)$this->ArtikelAnzahlOffene($lagerartikel[$ij]['id'], $projektlager); - $reserviert = (float)$this->ArtikelAnzahlReserviert($lagerartikel[$ij]['id'], $projektlager); - $keinestueckliste = true; - } - - $lagermenge = $lagernd; - $lagernd += (float)$offset; - - if($modus==1) // lager minus reservierte - { - $blockierte_menge = $reserviert; - } - else { - if($offen > $reserviert) { - $blockierte_menge = $offen; - } - else { - $blockierte_menge = $reserviert; - } - } - - $lagernd -= $blockierte_menge; - $berechneterBestand = $lagernd; - - if($lagernd < 0) { - $lagernd = 0; - } - if($shopid) { - $lagernd += (float)$this->GetArtikelShopEinstellung('lagerkorrekturwert', $artikelid, $shopid); - } - - if ($returnArray === false){ - return $lagernd; - } - - return [ - 'lagernd' => (float)$lagermenge, - 'reserviert' => (float)$reserviert, - 'offene_auftraege' => (float)$offen, - 'offene_bestellungen' => (float)$this->ArtikelAnzahlBestellung($artikelid), - 'berechneter_bestand' => (float)$berechneterBestand, - 'verkaufbar' => (float)$lagernd, - ]; - } - - /** - * @param int $shopId - * @param int $articleId - * - * @return array|null - */ - public function getStorageCacheInfosByShopId(int $shopId, int $articleId) - { - return $this->app->DB->SelectRow( - "SELECT `storage_cache`, `pseudostorage_cache`, `last_storage_transfer`, - HOUR(TIMEDIFF(NOW(), `last_storage_transfer`)) AS `last_storage_transfer_hours` - FROM `artikel_onlineshops` - WHERE `shop` = '{$shopId}' AND `artikel` = '{$articleId}' AND `storage_cache` IS NOT NULL - LIMIT 1" - ); - } - - /** - * @param int $shopId - * @param int $articleId - * @param int $sellable - * @param int $pseudoStorage - * - * @return bool - */ - public function isArticleShopCacheDifferent(int $shopId, int $articleId, int $sellable, int $pseudoStorage): bool - { - $storageCache = $this->app->DB->SelectRow( - "SELECT `storage_cache`, `pseudostorage_cache` - FROM `artikel_onlineshops` - WHERE `shop` = '{$shopId}' AND `artikel` = '{$articleId}' AND `storage_cache` IS NOT NULL - LIMIT 1" - ); - if(empty($storageCache)) { - return true; - } - - return $storageCache['storage_cache'] != $sellable || $storageCache['pseudostorage_cache'] != $pseudoStorage; - } - - /** - * @param int|array $artikelid - * @param bool $print_echo - * @param array $shopByIds - * - * @return string - */ - public function LagerSync($artikelid, $print_echo=false, $shopByIds = []) - { - $ij=0; - $message = ''; - if(!empty($artikelid) && is_array($artikelid) && !empty($artikelid['id'])){ - $artikelid = (int)$artikelid['id']; - } - elseif(!empty($artikelid) && is_array($artikelid)){ - $artikelid = (int)reset($artikelid); - } - if(!is_numeric($artikelid) || $artikelid <= 0){ - return ''; - } - $lagerartikel = $this->app->DB->SelectArr( - "SELECT * FROM `artikel` WHERE `id` = '{$artikelid}' LIMIT 1" - ); - if(empty($lagerartikel)){ - return ''; - } - - $bestandalternativartikel = $lagerartikel[$ij]['bestandalternativartikel']; - - $shops = $this->GetArtikelshops($lagerartikel[$ij]); - if(empty($shops)) { - return $message; - } - - foreach($shops as $shop) { - if($shop <= 0){ - continue; - } - if(!empty($shopByIds[$shop])) { - $shopArr = $shopByIds[$shop]; - } - else { - $shopArr = $this->app->DB->SelectRow( - "SELECT `id`, `projekt`, `lagergrundlage`, `lagerkorrekturwert`, `ueberschreibe_lagerkorrekturwert` - FROM `shopexport` - WHERE `id` = '{$shop}' AND `aktiv` = 1 - LIMIT 1" - ); - } - if(empty($shopArr) && empty($this->app->DB->error())) { - continue; - } - - $shopAricleArr = $this->GetArtikelShopEinstellung('', $lagerartikel[$ij], $shopArr); - if(empty($shopAricleArr['autolagerlampe'])) { - continue; - } - if(isset($shopAricleArr['pseudolager']) && trim($shopAricleArr['pseudolager']) !== '') { - $pseudolager = !empty($shopAricleArr['pseudolager'])?(float)$shopAricleArr['pseudolager']:0; - } - else { - $pseudolager = ''; - } - $this->app->erp->RunHook('remote_send_article_list_pseudostorage', 3, $shop, $artikelid, $pseudolager); - if(is_numeric($pseudolager) && $pseudolager < 0) { - $pseudolager = 0; - } - $projekt = $shopArr['projekt']; - $lagergrundlage = $shopArr['lagergrundlage']; - $projektlager = $this->Projektdaten($projekt, 'projektlager'); - if($projektlager) - { - if($bestandalternativartikel) { - $verkaufbare_menge = (float)$this->ArtikelAnzahlVerkaufbar($bestandalternativartikel,0,$projekt); - $verkaufbare_menge_korrektur = floor($this->ArtikelAnzahlVerkaufbar($bestandalternativartikel,0,$projekt, $shop, $lagergrundlage)); - } - else{ - $verkaufbare_menge = (float)$this->ArtikelAnzahlVerkaufbar($artikelid,0,$projekt); - $verkaufbare_menge_korrektur = floor((float)$this->ArtikelAnzahlVerkaufbar($artikelid,0,$projekt, $shop, $lagergrundlage)); - } - } - else{ - //$verkaufbare_menge = $verkaufbare_menge_alle; - if($bestandalternativartikel) { - $verkaufbare_menge = (float)$this->ArtikelAnzahlVerkaufbar($bestandalternativartikel,0,0); - $verkaufbare_menge_korrektur = floor((float)$this->ArtikelAnzahlVerkaufbar($bestandalternativartikel,0,0,$shop,$lagergrundlage)); - } - else{ - $verkaufbare_menge = (float)$this->ArtikelAnzahlVerkaufbar($artikelid,0,0); - $verkaufbare_menge_korrektur = floor((float)$this->ArtikelAnzahlVerkaufbar($artikelid,0,0,$shop,$lagergrundlage)); - } - } - if($verkaufbare_menge_korrektur < 0) { - $verkaufbare_menge_korrektur = 0; - } - $neuer_status = 'red'; - if ($verkaufbare_menge > 0){ - $neuer_status = 'gruen (Menge: ' . ($verkaufbare_menge . ' Pseudolager: ' . $pseudolager) . ')'; - } - - $isArticleCacheDifferent = $lagerartikel[$ij]['cache_lagerplatzinhaltmenge'] - != ($verkaufbare_menge_korrektur + $pseudolager); - - $storageCache = $isArticleCacheDifferent - ? null : $this->getStorageCacheInfosByShopId((int)$shop, (int)$lagerartikel[$ij]['id']); - - $hasToSendStock = $isArticleCacheDifferent - || $this->isArticleShopCacheDifferent( - (int)$shop, (int)$lagerartikel[$ij]['id'], (int)$verkaufbare_menge_korrektur, (int)$pseudolager - ); - - $needUpdateShopStorageCache = $storageCache && !$isArticleCacheDifferent; - - $isZeroQuantity = (is_numeric($pseudolager) && $pseudolager == 0) || (int)$verkaufbare_menge_korrektur === 0; - - if( - $storageCache !== null - && $isZeroQuantity - && ($storageCache['last_storage_transfer_hours'] === null || $storageCache['last_storage_transfer_hours'] > 48) - ) { - $hasToSendStock = true; - $needUpdateShopStorageCache = true; - } - - if(!$hasToSendStock) { - continue; - } - - if($needUpdateShopStorageCache) { - // to prevent loops - $this->app->DB->Update( - "UPDATE `artikel_onlineshops` - SET `last_storage_transfer` = NOW(), `storage_cache` = {$verkaufbare_menge_korrektur} - WHERE `artikel` = {$lagerartikel[$ij]['id']} AND `shop` = {$shop}" - ); - if(is_numeric($pseudolager)) { - $this->app->DB->Update( - "UPDATE `artikel_onlineshops` - SET `pseudostorage_cache` = {$pseudolager} - WHERE `artikel` = {$lagerartikel[$ij]['id']} AND `shop` = {$shop}" - ); - } - } - - $this->LogFile('*** UPDATE '.$lagerartikel[$ij]['nummer'].' '.$lagerartikel[$ij]['name_de'].' Shop: '.$shop.' Lagernd: '.$verkaufbare_menge.' Korrektur: '.round($verkaufbare_menge_korrektur - $verkaufbare_menge,7).' Pseudolager: '.round($pseudolager,8)); - - $cacheQuantity = $verkaufbare_menge_korrektur + $pseudolager; - $this->app->DB->Update( - "UPDATE `artikel` SET `cache_lagerplatzinhaltmenge` = '{$cacheQuantity}' - WHERE `id`= '{$lagerartikel[$ij]['id']}' LIMIT 1" - ); - - $extnummer = null; - $anzges = 0; - $anzfehler = 0; - if(!empty($extnummer) && is_array($extnummer)) { - foreach($extnummer as $nummer) { - $anzges++; - try { - $this->app->remote->RemoteSendArticleList($shop, array($lagerartikel[$ij]['id']), array($nummer['nummer']), true); - } - catch(Exception $e) { - $this->app->erp->LogFile($this->app->DB->real_escape_string('Lagersync Fehler '.$shop.' '.$nummer['nummer'].' '.$e->getMessage())); - $anzfehler++; - } - } - } - else{ - $anzges++; - try { - $this->app->remote->RemoteSendArticleList($shop,array($lagerartikel[$ij]['id']),!empty($extnummer)? array($extnummer):'',true); - } - catch(Exception $e) { - $this->app->erp->LogFile($this->app->DB->real_escape_string('Lagersync Fehler '.$shop.' '.(!empty($extnummer)? array($extnummer):$lagerartikel[$ij]['nummer']).' '.$e->getMessage())); - $anzfehler++; - } - } - $message .= 'Artikel: '.$lagerartikel[$ij]['name_de'].' ('.$lagerartikel[$ij]['nummer'].') Neuer Status: '.$neuer_status."\r\n"; - - if($print_echo) { - echo '*** UPDATE ' . $lagerartikel[$ij]['nummer'] . ' ' . $lagerartikel[$ij]['name_de'] . ' Lagernd: ' . ($verkaufbare_menge) . ' Korrekturwert: ' . round($verkaufbare_menge_korrektur - $verkaufbare_menge, 7) . "\r\n"; - } - } - - $this->app->DB->Update( - "UPDATE `artikel` SET `laststorage_sync` = NOW() WHERE `id` = {$artikelid}" - ); - - return $message; - } - - - // pruefe ob es artikel noch im lager gibt bzw. ob es eine reservierung gibt - public function LagerCheck($adresse,$artikel,$menge,$objekt='',$parameter='', $juststorage = false) - { - $projektlager = 0; - $standardlager = 0; - if($parameter > 0 && ($objekt==='auftrag' || $objekt==='lieferschein')) - { - $docArr = $this->app->DB->SelectRow(sprintf('SELECT * FROM `%s` WHERE id=%d LIMIT 1', $objekt, (int)$parameter)); - $projekt = $docArr['projekt']; - $auftrag = $parameter; - if($objekt === 'lieferschein') - { - $auftrag = $docArr['auftragid']; - } - if($projekt > 0) - { - $projectArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT projektlager, standardlager,kommissionierverfahren FROM projekt WHERE id=%d', - $projekt - ) - ); - $kommissionierverfahren= $projectArr['kommissionierverfahren']; - if( - !($kommissionierverfahren==='lieferscheinlager' || - $kommissionierverfahren==='lieferscheinlagerscan' || - $kommissionierverfahren==='lieferscheinscan' || - $kommissionierverfahren === 'lieferschein') || $this->app->DB->Select('SELECT IFNULL(COUNT(id),0) FROM lager') <= 1 - ) - { - $standardlager = 0; - } else { - $projektlager = $projectArr['projektlager']; - if($objekt==='auftrag' || $objekt === 'lieferschein') { - $standardlager = $docArr['standardlager']; - } else{ - $standardlager = $this->app->DB->Select(sprintf('SELECT standardlager FROM auftrag WHERE id = %d LIMIT 1', (int)$auftrag)); - } - if($standardlager && !$this->app->DB->Select(sprintf('SELECT id FROM lager WHERE id = %d LIMIT 1', (int)$standardlager))) { - $standardlager = $this->app->DB->Select(sprintf('SELECT id FROM lager WHERE id = %d LIMIT 1', (int)$docArr['standardlager'])); - } - } - } - } - - $articleArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT chargenverwaltung, mindesthaltbarkeitsdatum,seriennummern FROM artikel WHERE id = %d LIMIT 1', - $artikel - ) - ); - - $isBestBefore = !empty($articleArr['mindesthaltbarkeitsdatum']); - $isBatch = !empty($articleArr['chargenverwaltung']); - $isSn = !empty($articleArr['seriennummern']) && $articleArr['seriennummern'] !== 'keine'; - if($juststorage) { - $isBestBefore = false; - $isBatch = false; - $isSn = false; - } - if($standardlager > 0) - { - $summe_im_lager = round( - $this->app->DB->Select( - sprintf( - "SELECT IFNULL(SUM(li.menge),0) - FROM lager_platz_inhalt AS li - INNER JOIN lager_platz AS lp ON lp.id=li.lager_platz - INNER JOIN lager AS lag ON lag.id=lp.lager - WHERE li.artikel= %d AND lp.autolagersperre!=1 AND lp.sperrlager!= 1 AND lag.id=%d", - (int)$artikel, (int)$standardlager - ) - ), - $this->GetLagerNachkommastellen() - ); - if($summe_im_lager > 0 && $isBestBefore) { - $bestBeforeStorage = round( - $this->app->DB->Select( - sprintf( - "SELECT IFNULL(SUM(li.menge),0) - FROM lager_mindesthaltbarkeitsdatum AS li - INNER JOIN lager_platz AS lp ON lp.id=li.lager_platz - INNER JOIN lager AS lag ON lag.id=lp.lager - WHERE li.artikel= %d AND lp.autolagersperre!=1 AND lp.sperrlager!= 1 AND lag.id=%d", - (int)$artikel, (int)$standardlager - ) - ), - $this->GetLagerNachkommastellen() - ); - if($bestBeforeStorage < $summe_im_lager) { - $summe_im_lager = $bestBeforeStorage; - } - }elseif($summe_im_lager > 0 && $isBatch) { - $batchStorage = round( - $this->app->DB->Select( - sprintf( - "SELECT IFNULL(SUM(li.menge),0) - FROM lager_charge AS li - INNER JOIN lager_platz AS lp ON lp.id=li.lager_platz - INNER JOIN lager AS lag ON lag.id=lp.lager - WHERE li.artikel= %d AND lp.autolagersperre!=1 AND lp.sperrlager!= 1 AND lag.id=%d", - (int)$artikel, (int)$standardlager - ) - ), - $this->GetLagerNachkommastellen() - ); - if($batchStorage < $summe_im_lager) { - $summe_im_lager = $batchStorage; - } - } - - $artikel_reserviert = round( - $this->app->DB->Select( - sprintf( - "SELECT SUM(menge) - FROM lager_reserviert - WHERE artikel=%d AND (datum>=NOW() OR datum='0000-00-00')", - (int)$artikel - ) - ), - $this->GetLagerNachkommastellen() - ); - $summe_im_lager_gesamt = round( - $this->app->DB->Select( - sprintf( - "SELECT SUM(li.menge) - FROM lager_platz_inhalt AS li - LEFT JOIN lager_platz lp ON lp.id=li.lager_platz WHERE li.artikel= %d - AND lp.autolagersperre!=1 AND lp.sperrlager!=1", - $artikel - ) - ), - $this->GetLagerNachkommastellen() - ); - }elseif($projektlager > 0) - { - $summe_im_lager = round( - $this->app->DB->Select( - sprintf( - "SELECT SUM(li.menge) - FROM lager_platz_inhalt AS li - INNER JOIN lager_platz AS lp ON lp.id=li.lager_platz - INNER JOIN lager AS lag ON lag.id=lp.lager - WHERE li.artikel=%d - AND lp.autolagersperre!=1 AND lp.sperrlager!= 1 AND lag.projekt=%d", - (int)$artikel, (int)$projekt - ) - ), - $this->GetLagerNachkommastellen() - ); - if($summe_im_lager > 0 && $isBestBefore) { - $bestBeforeStorage = round( - $this->app->DB->Select( - sprintf( - "SELECT SUM(li.menge) - FROM lager_mindesthaltbarkeitsdatum AS li - INNER JOIN lager_platz AS lp ON lp.id=li.lager_platz - INNER JOIN lager AS lag ON lag.id=lp.lager - WHERE li.artikel=%d - AND lp.autolagersperre!=1 AND lp.sperrlager!= 1 AND lag.projekt=%d", - (int)$artikel, (int)$projekt - ) - ), - $this->GetLagerNachkommastellen() - ); - if($bestBeforeStorage < $summe_im_lager) { - $summe_im_lager = $bestBeforeStorage; - } - } elseif($summe_im_lager > 0 && $isBatch) { - $batchStorage = round( - $this->app->DB->Select( - sprintf( - "SELECT SUM(li.menge) - FROM lager_charge AS li - INNER JOIN lager_platz AS lp ON lp.id=li.lager_platz - INNER JOIN lager AS lag ON lag.id=lp.lager - WHERE li.artikel=%d - AND lp.autolagersperre!=1 AND lp.sperrlager!= 1 AND lag.projekt=%d", - (int)$artikel, (int)$projekt - ) - ), - $this->GetLagerNachkommastellen() - ); - if($batchStorage < $summe_im_lager) { - $summe_im_lager = $batchStorage; - } - } - $artikel_reserviert = round($this->app->DB->Select("SELECT SUM(menge) - FROM lager_reserviert WHERE artikel='".$artikel."' AND projekt='$projekt' AND (datum>=NOW() OR datum='0000-00-00')"),$this->GetLagerNachkommastellen()); - } else { - $summe_im_lager = round( - $this->app->DB->Select( - sprintf( - "SELECT SUM(li.menge) - FROM lager_platz_inhalt AS li - LEFT JOIN lager_platz lp ON lp.id=li.lager_platz WHERE li.artikel= %d - AND lp.autolagersperre!=1 AND lp.sperrlager!=1", - $artikel - ) - ), - $this->GetLagerNachkommastellen() - ); - if($summe_im_lager > 0 && $isBestBefore) { - $bestBeforeStorage = round( - $this->app->DB->Select( - sprintf( - "SELECT SUM(li.menge) - FROM lager_mindesthaltbarkeitsdatum AS li - LEFT JOIN lager_platz AS lp ON lp.id=li.lager_platz WHERE li.artikel= %d - AND lp.autolagersperre!=1 AND lp.sperrlager!=1", - $artikel - ) - ), - $this->GetLagerNachkommastellen() - ); - if($bestBeforeStorage < $summe_im_lager) { - $summe_im_lager = $bestBeforeStorage; - } - }elseif($summe_im_lager > 0 && $isBatch) { - $batchStorage = round( - $this->app->DB->Select( - sprintf( - "SELECT SUM(li.menge) - FROM lager_charge AS li - LEFT JOIN lager_platz AS lp ON lp.id=li.lager_platz WHERE li.artikel= %d - AND lp.autolagersperre!=1 AND lp.sperrlager!=1", - $artikel - ) - ), - $this->GetLagerNachkommastellen() - ); - if($batchStorage < $summe_im_lager) { - $summe_im_lager = $batchStorage; - } - } - $artikel_reserviert = round($this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='".$artikel."' AND (datum>=NOW() OR datum='0000-00-00')"),$this->GetLagerNachkommastellen()); - } - - // wenn es reservierungen fuer den Auftrag gibt - if($objekt!='') - { - // auftrag reservierungen - $artikel_fuer_adresse_reserviert = round($this->app->DB->Select("SELECT SUM(menge) - FROM lager_reserviert - WHERE artikel='".$artikel."' ".($adresse > 0?" AND adresse='$adresse'":'')." AND ((objekt='$objekt' AND parameter='$parameter')".($objekt==='lieferschein' && $auftrag > 0?" OR (objekt='auftrag' AND parameter = '$auftrag') ":'').") AND (datum>=NOW() OR datum='0000-00-00')"),$this->GetLagerNachkommastellen()); - } else { - $artikel_fuer_adresse_reserviert = round($this->app->DB->Select("SELECT SUM(menge) - FROM lager_reserviert - WHERE artikel='".$artikel."' ".($adresse > 0?" AND adresse='$adresse'":'')." AND (datum>=NOW() OR datum='0000-00-00') AND objekt!='lieferschein'"),$this->GetLagerNachkommastellen()); - } - - if(round(($summe_im_lager - ($artikel_reserviert -$artikel_fuer_adresse_reserviert)),8) >= round($menge,8)) - { - return 1; - } - - if($standardlager) { - $nichtStandardlager = round($summe_im_lager_gesamt - $summe_im_lager,8); - if($nichtStandardlager > 0 ) { - $artikel_reserviert -= $nichtStandardlager; - if($artikel_reserviert < 0) { - $artikel_reserviert = 0; - } - if(round(($summe_im_lager - ($artikel_reserviert -$artikel_fuer_adresse_reserviert)),8) >= round($menge,8)) - { - return 1; - } - } - } - - if($objekt === 'auftrag' && $artikel_fuer_adresse_reserviert > 0) - { - if($summe_im_lager >= $artikel_fuer_adresse_reserviert) - { - $gesamte_menge_im_auftrag= $this->app->DB->Select("SELECT SUM(menge-geliefert_menge) - FROM auftrag_position WHERE auftrag='$parameter' AND artikel='$artikel'"); - if($artikel_fuer_adresse_reserviert >= $menge && $artikel_fuer_adresse_reserviert >= $gesamte_menge_im_auftrag && $summe_im_lager >= $gesamte_menge_im_auftrag){ - return true; - } - } - } - elseif($objekt === 'lieferschein' && $artikel_fuer_adresse_reserviert > 0) - { - if($summe_im_lager >= $artikel_fuer_adresse_reserviert) - { - $gesamte_menge_im_auftrag= $this->app->DB->Select("SELECT SUM(menge-geliefert) - FROM lieferschein_position WHERE lieferschein='$parameter' AND artikel='$artikel'"); - if($artikel_fuer_adresse_reserviert >= $menge && $artikel_fuer_adresse_reserviert >= $gesamte_menge_im_auftrag && $summe_im_lager >= $gesamte_menge_im_auftrag){ - return true; - } - } - } - - return 0; - } - - function AngebotSuche($parsetarget) - { - $treffer = $this->app->Secure->GetPOST("treffer"); - if($treffer > 0 ) { - $_SESSION['angebottreffer'] = $treffer; - $_SESSION['page'] = 1; - } - else - if(!isset($_SESSION['angebottreffer']) || $_SESSION['angebottreffer'] <= 0) - $_SESSION['angebottreffer'] = 10; - - $this->app->Tpl->Set('TREFFER',$_SESSION['angebottreffer']); - - - $suchwort= $this->app->Secure->GetPOST("suchwort"); - $name= $this->app->Secure->GetPOST("name"); - $plz= $this->app->Secure->GetPOST("plz"); - $angebot= $this->app->Secure->GetPOST("angebot"); - $kundennummer= $this->app->Secure->GetPOST("kundennummer"); - - $_SESSION['angebotsuchwort']=$suchwort; //$this->app->Tpl->Set(SUCHWORT,$_SESSION[angebotsuchwort]); - $_SESSION['angebotname']=$name; $this->app->Tpl->Set('NAME',$_SESSION['angebotname']); - $_SESSION['angebotplz']=$plz; $this->app->Tpl->Set('PLZ',$_SESSION['angebotplz']); - $_SESSION['angebotangebot']=$angebot; $this->app->Tpl->Set('ANGEBOT',$_SESSION['angebotangebot']); - $_SESSION['angebotkundennummer']=$kundennummer; $this->app->Tpl->Set('KUNDENNUMMER',$_SESSION['angebotkundennummer']); - - $suche = $this->app->Secure->GetPOST("suche"); - - //$this->app->YUI->AutoComplete(PROJEKTAUTO,"projekt",array('name','abkuerzung'),"abkuerzung"); - - if(($_SESSION['angebotsuchwort']!='' || $_SESSION['angebotname']!='' || $_SESSION['angebotplz']!='' || $_SESSION['angebotangebot']!='' || $_SESSION['angebotkundennummer']!='') && $suche!=""){ - - //Jeder der in Nachbesserung war egal ob auto oder manuell wandert anschliessend in Manuelle-Freigabe"); - if($suchwort!="") - { - return "SELECT DATE_FORMAT(a.datum,'%d.%m.%y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Angebot, ad.kundennummer as kunde, a.name, p.abkuerzung as projekt, a.status, a.id - FROM angebot a, projekt p, adresse ad WHERE - (a.plz LIKE '%$suchwort%' OR a.name LIKE '%$suchwort%' OR a.belegnr LIKE '%$suchwort%') - AND p.id=a.projekt AND a.adresse=ad.id - order by a.datum DESC, a.id DESC"; - } else { - return "SELECT DATE_FORMAT(a.datum,'%d.%m.%y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Angebot, ad.kundennummer as kunde, a.name, p.abkuerzung as projekt, a.status, a.id - FROM angebot a, projekt p, adresse ad WHERE - (ad.kundennummer LIKE '%{$_SESSION['angebotkundennummer']}%' AND a.plz LIKE '%{$_SESSION['angebotplz']}%' - AND a.name LIKE '%{$_SESSION['angebotname']}%' AND a.belegnr LIKE '%{$_SESSION['angebotangebot']}%' ) - AND p.id=a.projekt AND a.adresse=ad.id - order by a.datum DESC, a.id DESC"; - - } - - /* - return ("SELECT DISTINCT a.nummer, a.name_de as Artikel, p.abkuerzung, a.id FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE - a.name_de LIKE '%$name%' AND - a.nummer LIKE '$nummer%'AND - p.abkuerzung LIKE '%$projekt%' - AND geloescht='0' - ORDER by a.id DESC"); - */ - // SELECT DISTINCT a.name, a.ort, a.telefon, a.email, a.id - // FROM adresse a LEFT JOIN adresse_rolle r ON a.id=r.adresse WHERE r.subjekt='Kunde' ORDER by a.id DESC - - } else { - - return "SELECT DATE_FORMAT(a.datum,'%d.%m.%y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Angebot, ad.kundennummer as kunde, a.name, p.abkuerzung as projekt, a.status, a.id - FROM angebot a, projekt p, adresse ad WHERE p.id=a.projekt AND a.adresse=ad.id order by a.datum DESC, a.id DESC"; - - } - //$this->app->Tpl->Set(INHALT,""); - } - - - - function WebmailSuche($parsetarget,$rolle) - { - $suche = $this->app->Secure->GetPOST("suche"); - - $name = $this->app->Secure->GetPOST("name"); $this->app->Tpl->Set('SUCHENAME',$name); - $nummer = $this->app->Secure->GetPOST("nummer"); $this->app->Tpl->Set('SUCHENUMMER',$nummer); - $typ = $this->app->Secure->GetPOST("typ"); - - $this->app->YUI->AutoComplete('PROJEKTAUTO',"projekt",array('name','abkuerzung'),"abkuerzung"); - - $projekt = $this->app->Secure->GetPOST("projekt"); $this->app->Tpl->Set('SUCHEPROJEKT',$projekt); - $limit = $this->app->Secure->GetPOST("limit"); if($limit=="" || $limit ==0) $limit=10; $this->app->Tpl->Set('SUCHELIMIT',$limit); - - if($name!='' && $suche!='') - { - $_SESSION['name_webmailsuche'] = $name; - } elseif ($suche!="" && $name=='') - $_SESSION['name_webmailsuche'] = ''; - - if($name=='' && $suche!='') - { - $_SESSION['name_artikel'] = $name; - } - - $_SESSION['nummer'] = $nummer; - $_SESSION['projekt'] = $projekt; - - $adresse = $this->app->User->getAdresse(); - - if($name==""){ $name = $_SESSION['name_webmailsuche']; $this->app->Tpl->Set('SUCHENAME',$name);} - if($nummer==""){$nummer= $_SESSION['nummer']; $this->app->Tpl->Set('SUCHENUMMER',$nummer);} - if($projekt==""){$projekt= $_SESSION['projekt']; $this->app->Tpl->Set('SUCHEPROJEKT',$projekt);} - - if($name!="" || $nummer!="" || $projekt!="") $suche ="suche"; - - - $this->app->Tpl->Parse($parsetarget,"webmailsuche.tpl"); - if(($name!="" || $nummer!="" || $projekt!="") && $suche!=""){ - - - return("SELECT DATE_FORMAT(e.empfang,'%d.%m.%Y %H:%i') as zeit,CONCAT(LEFT(e.subject,30),'...') as betreff, e.sender,e.id - FROM emailbackup_mails e - WHERE e.webmail IN (SELECT id FROM emailbackup WHERE emailbackup.adresse = '$adresse' AND emailbackup.geloescht!=1) - AND e.sender LIKE '%$name%' AND - e.subject LIKE '$nummer%' - ORDER BY e.empfang DESC"); - - //p.abkuerzung LIKE '%$projekt%' - - //Jeder der in Nachbesserung war egal ob auto oder manuell wandert anschliessend in Manuelle-Freigabe"); - /* - return("SELECT DATE_FORMAT(tn.zeit,'%d.%m.%Y %H:%i') as zeit,CONCAT(LEFT(tn.betreff,30),'...') as betreff, t.kunde, p.abkuerzung, - tn.id FROM ticket_nachricht tn LEFT JOIN ticket t ON t.schluessel=tn.ticket LEFT JOIN projekt p ON p.id=t.projekt WHERE - t.kunde LIKE '%$name%' AND - tn.betreff LIKE '$nummer%'AND - p.abkuerzung LIKE '%$projekt%' - ORDER by tn.zeit DESC"); - */ - // SELECT DISTINCT a.name, a.ort, a.telefon, a.email, a.id - // FROM adresse a LEFT JOIN adresse_rolle r ON a.id=r.adresse WHERE r.subjekt='Kunde' ORDER by a.id DESC - // $table->Display(INHALT,"auftrag","kundeuebernehmen","In Auftrag einfügen"); - } else { - return "SELECT DATE_FORMAT(e.empfang,'%d.%m.%Y %H:%i') as zeit,CONCAT(LEFT(e.subject,30),'...') as betreff, e.sender,e.id - FROM emailbackup_mails e - WHERE webmail IN (SELECT id FROM emailbackup WHERE emailbackup.adresse = '$adresse' AND emailbackup.geloescht!=1) - ORDER BY e.empfang DESC"; - - // return "SELECT DATE_FORMAT(e.empfang,'%d.%m.%Y %H:%i') as zeit,CONCAT(LEFT(e.subject,30),'...') as betreff, e.sender, - // e.id FROM emailbackup_mails e WHERE - // ORDER by e.empfang DESC"; - } - - - - //$this->app->Tpl->Set(INHALT,""); - } - - - function TicketArchivSuche($parsetarget,$rolle) - { - /** @var Ticket $obj */ - $obj = $this->LoadModul('ticket'); - if(!empty($obj) && method_exists($obj, 'TicketArchivSuche')) - { - return $obj->TicketArchivSuche($parsetarget,$rolle); - } - } - - function ArtikelSuche($parsetarget,$rolle) - { - $suche = $this->app->Secure->GetPOST("suche"); - $suchwort= $this->app->Secure->GetPOST("suchwort"); - /* Auftrage fuer manuelle freigabe */ - - $name = $this->app->Secure->GetPOST("name"); $this->app->Tpl->Set('SUCHENAME',$name); - $nummer = $this->app->Secure->GetPOST("nummer"); $this->app->Tpl->Set('SUCHENUMMER',$nummer); - $typ = $this->app->Secure->GetPOST("typ"); - - $this->app->YUI->AutoComplete('PROJEKTAUTO',"projekt",array('name','abkuerzung'),"abkuerzung"); - - $projekt = $this->app->Secure->GetPOST("projekt"); $this->app->Tpl->Set('SUCHEPROJEKT',$projekt); - $limit = $this->app->Secure->GetPOST("limit"); if($limit=="" || $limit ==0) $limit=10; $this->app->Tpl->Set('SUCHELIMIT',$limit); - - if($name!="" && $suche!="") - { - $_SESSION['name_artikel'] = $name; - } elseif ($suche!="" && $name=="") - $_SESSION['name_artikel'] = ""; - - - if($name=="" && $suche!="") - { - $_SESSION['name_artikel'] = $name; - } - - $_SESSION['nummer'] = $nummer; - $_SESSION['projekt'] = $projekt; - - - if($name==""){ $name = $_SESSION['name_artikel']; $this->app->Tpl->Set('SUCHENAME',$name);} - if($nummer==""){$nummer= $_SESSION['nummer']; $this->app->Tpl->Set('SUCHENUMMER',$nummer);} - if($projekt==""){$projekt= $_SESSION['projekt']; $this->app->Tpl->Set('SUCHEPROJEKT',$projekt);} - - if($name!="" || $nummer!="" || $projekt!="") $suche ="suche"; - - - $this->app->Tpl->Parse($parsetarget,"artikelsuche.tpl"); - if(($name!="" || $nummer!="" || $projekt!="" || $suchwort!="") && $suche!=""){ - if($suchwort!="") - { - - return ("SELECT DISTINCT a.nummer, a.name_de as Artikel, p.abkuerzung, a.id FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE - (a.name_de LIKE '%$suchwort%' OR - a.nummer LIKE '%$suchwort%') - AND geloescht='0' - ORDER by a.id DESC"); - - } else { - return ("SELECT DISTINCT a.nummer, a.name_de as Artikel, p.abkuerzung, a.id FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE - a.name_de LIKE '%$name%' AND - a.nummer LIKE '%$nummer%' AND - p.abkuerzung LIKE '%$projekt%' - AND a.geloescht='0' - ORDER by a.id DESC"); - } - - //Jeder der in Nachbesserung war egal ob auto oder manuell wandert anschliessend in Manuelle-Freigabe"); - - // SELECT DISTINCT a.name, a.ort, a.telefon, a.email, a.id - // FROM adresse a LEFT JOIN adresse_rolle r ON a.id=r.adresse WHERE r.subjekt='Kunde' ORDER by a.id DESC - // $table->Display(INHALT,"auftrag","kundeuebernehmen","In Auftrag einfügen"); - } else { - - return "SELECT DISTINCT a.nummer, a.name_de as Artikel, p.abkuerzung, a.id FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.geloescht='0' - ORDER by a.id DESC"; - - } - //$this->app->Tpl->Set(INHALT,""); - } - - function AdressSuche($parsetarget,$rolle) - { - $suche = $this->app->Secure->GetPOST("suche"); - /* Auftrage fuer manuelle freigabe */ - if($rolle!="") - $this->app->Tpl->Set('SUBHEADING',"$rolle suchen"); - else - $this->app->Tpl->Set('SUBHEADING',"Adresse suchen"); - - $name = $this->app->Secure->GetPOST("name"); $this->app->Tpl->Set('SUCHENAME',$name); - $typ = $this->app->Secure->GetPOST("typ"); - $ansprechpartner = $this->app->Secure->GetPOST("ansprechpartner"); $this->app->Tpl->Set('SUCHEANSPRECHPARTNER',$ansprechpartner); - $abteilung= $this->app->Secure->GetPOST("abteilung"); - $unterabteilung= $this->app->Secure->GetPOST("unterabteilung"); - $adresszusatz= $this->app->Secure->GetPOST("adresszusatz"); - $email= $this->app->Secure->GetPOST("email"); - $telefon= $this->app->Secure->GetPOST("telefon"); - $telefax= $this->app->Secure->GetPOST("telefax"); - $ustid= $this->app->Secure->GetPOST("ustid"); - $land= $this->app->Secure->GetPOST("land"); - $plz= $this->app->Secure->GetPOST("plz"); $this->app->Tpl->Set('SUCHEPLZ',$plz); - $ort= $this->app->Secure->GetPOST("ort"); $this->app->Tpl->Set('SUCHEORT',$ort); - $strasse= $this->app->Secure->GetPOST("strasse"); $this->app->Tpl->Set('SUCHESTRASSE',$strasse); - $kundennummer= $this->app->Secure->GetPOST("kundennummer"); $this->app->Tpl->Set('KUNDENNUMMER',$kundennummer); - - if($name!="" && $suche!="") - { - $_SESSION['name'] = $name; - } elseif ($suche!="" && $name=="") - $_SESSION['name'] = ""; - - - if($name=="" && $suche!="") - { - $_SESSION['name'] = $name; - } - - $_SESSION['ort'] = $ort; - $_SESSION['plz'] = $plz; - - - if($name==""){ $name = $_SESSION['name']; $this->app->Tpl->Set('SUCHENAME',$name);} - if($ort==""){$ort= $_SESSION['ort']; $this->app->Tpl->Set('SUCHEORT',$ort);} - if($plz==""){$plz= $_SESSION['plz']; $this->app->Tpl->Set('SUCHEPLZ',$plz);} - - if($name!="" || $ort!="" || $plz!="") $suche ="suche"; - - $this->app->Tpl->Parse($parsetarget,"kundensuche.tpl"); - - if(($name!="" || $kundennummer!="" || $strasse!="" || $ort!="" || $plz!="") && $suche!=""){ - //Jeder der in Nachbesserung war egal ob auto oder manuell wandert anschliessend in Manuelle-Freigabe"); - return ("SELECT DISTINCT a.kundennummer, a.name, a.ort, a.telefon, a.email, a.id FROM adresse a LEFT JOIN adresse_rolle r ON a.id=r.adresse WHERE - a.name LIKE '%$name%' AND - a.ansprechpartner LIKE '%$ansprechpartner%' AND - a.ort LIKE '%$ort%' AND - a.strasse LIKE '%$strasse%' AND - a.kundennummer LIKE '%$kundennummer%' AND - a.plz LIKE '%$plz%' AND a.geloescht=0 ORDER by a.id DESC"); - //a.plz LIKE '%$plz%' AND r.subjekt='$rolle' ORDER by a.id DESC"); - - // SELECT DISTINCT a.name, a.ort, a.telefon, a.email, a.id - // FROM adresse a LEFT JOIN adresse_rolle r ON a.id=r.adresse WHERE r.subjekt='Kunde' ORDER by a.id DESC - // $table->Display(INHALT,"auftrag","kundeuebernehmen","In Auftrag einfügen"); - } else { - - return "SELECT DISTINCT a.name, a.ort, a.telefon, a.email, a.id - FROM adresse a WHERE a.geloescht=0 ORDER by a.name ASC"; - //FROM adresse a LEFT JOIN adresse_rolle r ON a.id=r.adresse WHERE r.subjekt='$rolle' ORDER by a.id DESC"; - - } - //$this->app->Tpl->Set(INHALT,""); - } - - function string2array ($string, $template){ -#search defined dividers - preg_match_all ("|%(.+)%|U", $template, $template_matches); -#replace dividers with "real dividers" - $template = preg_replace ("|%(.+)%|U", "(.+)", $template); -#search matches - preg_match ("|" . $template . "|", $string, $string_matches); -#[template_match] => $string_match - foreach ($template_matches[1] as $key => $value){ - $output[$value] = $string_matches[($key + 1)]; - } - return $output; - } - - - function SelectLaenderliste($selected="") - { - if($selected=="") $selected=$this->Firmendaten("land"); - - $laender = $this->GetSelectLaenderliste(true); - $options = ''; - foreach ($laender as $land => $kuerzel) { - $options = $options."\n"; - } - return $options; - } - - - function GetSelectStaatenliste($land = 'DE', $staatenliste=false){ - switch ($land) { - case 'DE': - $staaten = array( - 'Baden-Württemberg' => 'BW', - 'Bayern' => 'BY', - 'Berlin' => 'BE', - 'Brandenburg' => 'BB', - 'Bremen' => 'HB', - 'Hamburg' => 'HH', - 'Hessen' => 'HE', - 'Mecklenburg-Vorpommern' => 'MV', - 'Niedersachsen' => 'NI', - 'Nordrhein-Westfalen' => 'NW', - 'Rheinland-Pfalz' => 'RP', - 'Saarland' => 'SL', - 'Sachsen' => 'SN', - 'Sachsen-Anhalt' => 'ST', - 'Schleswig-Holstein' => 'SH', - 'Thüringen' => 'TH' - ); - break; - - case 'AT': - $staaten = array( - 'Burgenland' => '01', - 'Kärnten' => '02', - 'Niederösterreich' => '03', - 'Oberösterreich' => '04', - 'Salzburg' => '05', - 'Steiermark' => '06', - 'Tirol' => '07', - 'Vorarlberg' => '08', - 'Wien' => '09' - ); - break; - - case 'CH': - $staaten = array( - 'Aargau' => 'AG', - 'Appenzell Ausserrhoden' => 'AR', - 'Appenzell Innerrhoden' => 'AI', - 'Basel-Landschaft' => 'BL', - 'Basel-Stadt' => 'BS', - 'Bern' => 'BE', - 'Freiburg' => 'FR', - 'Genf' => 'GE', - 'Glarus' => 'GL', - 'Graubünden' => 'GR', - 'Jura' => 'JU', - 'Luzern' => 'LU', - 'Neuenburg' => 'NE', - 'Nidwalden' => 'NW', - 'Obwalden' => 'OW', - 'Schaffhausen' => 'SH', - 'Schwyz' => 'SZ', - 'Solothurn' => 'SO', - 'St. Gallen' => 'SG', - 'Tessin' => 'TI', - 'Thurgau' => 'TG', - 'Uri' => 'UR', - 'Waadt' => 'VD', - 'Wallis' => 'VS', - 'Zug' => 'ZG', - 'Zürich' => 'ZH' - ); - break; - - case 'CA': - $staaten = array( - 'Alberta' => 'AB', - 'British Columbia' => 'BC', - 'Manitoba' => 'MB', - 'Neufundland und Labrador' => 'NL', - 'New Brunswick' => 'NB', - 'Nordwest-Territorien' => 'NT', - 'Nova Scotia' => 'NS', - 'Nunavut' => 'NU', - 'Ontario' => 'ON', - 'Prince Edward Island' => 'PE', - 'Quebéc' => 'QC', - 'Saskatchewan' => 'SK', - 'Yukon' => 'YT' - ); - break; - - case 'US': - $staaten = array( - 'Alabama' => 'AL', - 'Alaska' => 'AK', - 'Arizona' => 'AZ', - 'Arkansas' => 'AR', - 'Colorado' => 'CO', - 'Connecticut' => 'CT', - 'Delaware' => 'DE', - 'Florida' => 'FL', - 'Georgia' => 'GA', - 'Hawaii' => 'HI', - 'Idaho' => 'ID', - 'Illinois' => 'IL', - 'Indiana' => 'IN', - 'Iowa' => 'IA', - 'Kalifornien' => 'CA', - 'Kansas' => 'KS', - 'Kentucky' => 'KY', - 'Louisiana' => 'LA', - 'Maine' => 'ME', - 'Maryland' => 'MD', - 'Massachusetts' => 'MA', - 'Michigan' => 'MI', - 'Minnesota' => 'MN', - 'Mississippi' => 'MS', - 'Missouri' => 'MO', - 'Montana' => 'MT', - 'Nebraska' => 'NE', - 'Nevada' => 'NV', - 'New Hampshire' => 'NH', - 'New Jersey' => 'NJ', - 'New Mexico' => 'NM', - 'New York' => 'NY', - 'North Carolina' => 'NC', - 'North Dakota' => 'ND', - 'Ohio' => 'OH', - 'Oklahoma' => 'OK', - 'Oregon' => 'OR', - 'Pennsylvania' => 'PA', - 'Rhode Island' => 'RI', - 'South Carolina' => 'SC', - 'South Dakota' => 'SD', - 'Tennessee' => 'TN', - 'Texas' => 'TX', - 'Utah' => 'UT', - 'Vermont' => 'VT', - 'Virginia' => 'VA', - 'Washington' => 'WA', - 'West Virginia' => 'WV', - 'Wisconsin' => 'WI', - 'Wyoming' => 'WY' - ); - break; - } - - $Values = array(); - while(list($Key,$Val) = each($staaten)) - $Values[$Val] = $Key; - - if($staatenliste) - return $staaten; - else - return $Values; - - -} - - - function FindISOCountry($country) - { - if(strlen($country)==2) return $country; - - $check = $this->GetSelectLaenderliste(); - foreach($check as $iso=>$countryname) - { - if(strtolower($countryname)===strtolower($country)) return $iso; - } - $check = $this->GetSelectLaenderlisteEN(); - foreach($check as $iso=>$countryname) - { - if(strtolower($countryname)===strtolower($country)) return $iso; - } - return -1; - } - - /** - * @param bool $laenderliste - * - * @return array - */ - public function GetSelectLaenderliste($laenderliste=false) - { - if($laenderliste) { - $tmp = $this->app->DB->SelectPairs( - 'SELECT bezeichnung_de, iso FROM laender ORDER BY bezeichnung_de' - ); - } - else { - $tmp = $this->app->DB->SelectPairs( - 'SELECT iso, bezeichnung_de FROM laender ORDER BY bezeichnung_de' - ); - } - if(!empty($tmp)) { - return $tmp; - } - - $laender = array( - 'Afghanistan' => 'AF', - 'Ägypten' => 'EG', - 'Albanien' => 'AL', - 'Algerien' => 'DZ', - 'Amerikanische Jungferninseln' => 'VI', - 'Andorra' => 'AD', - 'Angola' => 'AO', - 'Anguilla' => 'AI', - 'Antarktis' => 'AQ', - 'Antigua und Barbuda' => 'AG', - 'Äquatorialguinea' => 'GQ', - 'Argentinien' => 'AR', - 'Armenien' => 'AM', - 'Aruba' => 'AW', - 'Aserbaidschan' => 'AZ', - 'Äthiopien' => 'ET', - 'Australien' => 'AU', - 'Bahamas' => 'BS', - 'Bahrain' => 'BH', - 'Bangladesch' => 'BD', - 'Barbados' => 'BB', - 'Belgien' => 'BE', - 'Belize' => 'BZ', - 'Benin' => 'BJ', - 'Bermuda' => 'BM', - 'Bhutan' => 'BT', - 'Bolivien' => 'BO', - 'Bosnien und Herzegowina' => 'BA', - 'Botswana' => 'BW', - 'Bouvetinsel' => 'BV', - 'Brasilien' => 'BR', - 'Britisch-Indischer Ozean' => 'IO', - 'Britische Jungferninseln' => 'VG', - 'Brunei Darussalam' => 'BN', - 'Bulgarien' => 'BG', - 'Burkina Faso' => 'BF', - 'Burundi' => 'BI', - 'Chile' => 'CL', - 'China' => 'CN', - 'Cookinseln' => 'CK', - 'Costa Rica' => 'CR', - 'Dänemark' => 'DK', - 'Deutschland' => 'DE', - 'Dominica' => 'DM', - 'Dominikanische Republik' => 'DO', - 'Dschibuti' => 'DJ', - 'Ecuador' => 'EC', - 'El Salvador' => 'SV', - 'Elfenbeinküste' => 'CI', - 'Eritrea' => 'ER', - 'Estland' => 'EE', - 'Falklandinseln' => 'FK', - 'Färöer Inseln' => 'FO', - 'Fidschi' => 'FJ', - 'Finnland' => 'FI', - 'Frankreich' => 'FR', - 'Französisch-Guayana' => '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' => 'GB', - 'Guadeloupe' => 'GP', - 'Guam' => 'GU', - 'Guatemala' => 'GT', - 'Guinea' => 'GN', - 'Guinea-Bissau' => 'GW', - 'Guyana' => 'GY', - 'Haiti' => 'HT', - 'Heard und McDonaldinseln' => 'HM', - 'Honduras' => 'HN', - 'Hongkong' => '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', - 'Kaimaninseln' => 'KY', - 'Kambodscha' => 'KH', - 'Kamerun' => 'CM', - 'Kanada' => 'CA', - 'Kap Verde' => 'CV', - 'Kasachstan' => 'KZ', - 'Katar' => 'QA', - 'Kenia' => 'KE', - 'Kirgisistan' => 'KG', - 'Kiribati' => 'KI', - 'Kokosinseln' => 'CC', - 'Kolumbien' => 'CO', - 'Komoren' => 'KM', - 'Kongo' => 'CG', - 'Kongo, Demokratische Republik' => 'CD', - 'Kosovo' => 'XK', - 'Kroatien' => 'HR', - 'Kuba' => 'CU', - 'Kuwait' => 'KW', - 'Laos' => 'LA', - 'Lesotho' => 'LS', - 'Lettland' => 'LV', - 'Libanon' => 'LB', - 'Liberia' => 'LR', - 'Libyen' => 'LY', - 'Liechtenstein' => 'LI', - 'Litauen' => 'LT', - 'Luxemburg' => 'LU', - 'Macau' => 'MO', - 'Madagaskar' => 'MG', - 'Malawi' => 'MW', - 'Malaysia' => 'MY', - 'Malediven' => 'MV', - 'Mali' => 'ML', - 'Malta' => 'MT', - 'Marianen' => 'MP', - 'Marokko' => 'MA', - 'Marshallinseln' => 'MH', - 'Martinique' => 'MQ', - 'Mauretanien' => 'MR', - 'Mauritius' => 'MU', - 'Mayotte' => 'YT', - 'Mazedonien' => 'MK', - 'Mexiko' => 'MX', - 'Mikronesien' => 'FM', - 'Moldawien' => 'MD', - 'Monaco' => 'MC', - 'Mongolei' => 'MN', - 'Montenegro' => 'ME', - 'Montserrat' => 'MS', - 'Mosambik' => 'MZ', - 'Myanmar' => 'MM', - 'Namibia' => 'NA', - 'Nauru' => 'NR', - 'Nepal' => 'NP', - 'Neukaledonien' => 'NC', - 'Neuseeland' => 'NZ', - 'Nicaragua' => 'NI', - 'Niederlande' => 'NL', - 'Niger' => 'NE', - 'Nigeria' => 'NG', - 'Niue' => 'NU', - 'Nordkorea' => 'KP', - 'Norfolkinsel' => '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', - 'Pitcairninseln' => 'PN', - 'Polen' => 'PL', - 'Portugal' => 'PT', - 'Puerto Rico' => 'PR', - 'Réunion' => 'RE', - 'Ruanda' => 'RW', - 'Rumänien' => 'RO', - 'Russland' => 'RU', - 'Salomonen' => 'SB', - 'Sambia' => 'ZM', - 'Samoa, amerikanisch' => 'AS', - 'Samoa' => 'WS', - 'San Marino' => 'SM', - 'São Tomé und Príncipe' => 'ST', - 'Saudi-Arabien' => 'SA', - 'Schweden' => 'SE', - 'Schweiz' => 'CH', - 'Senegal' => 'SN', - 'Serbien' => 'RS', - 'Seychellen' => 'SC', - 'Sierra Leone' => 'SL', - 'Simbabwe' => 'ZW', - 'Singapur' => 'SG', - 'Slowakei' => 'SK', - 'Slowenien' => 'SI', - 'Somalia' => 'SO', - 'Südgeorgien, südliche Sandwichinseln' => 'GS', - 'Spanien' => 'ES', - 'Sri Lanka' => 'LK', - 'St. Helena' => 'SH', - 'St. Kitts und Nevis' => 'KN', - 'St. Lucia' => 'LC', - 'St. Pierre und Miquelon' => 'PM', - 'St. Vincent und die Grenadinen' => 'VC', - 'Südkorea' => 'KR', - 'Südafrika' => 'ZA', - 'Sudan' => 'SD', - 'Suriname' => 'SR', - 'Svalbard und Jan Mayen' => 'SJ', - 'Swasiland' => 'SZ', - 'Syrien' => 'SY', - 'Tadschikistan' => 'TJ', - 'Taiwan' => 'TW', - 'Tansania' => 'TZ', - 'Thailand' => 'TH', - 'Togo' => 'TG', - 'Tokelau' => 'TK', - 'Tonga' => 'TO', - 'Trinidad und Tobago' => 'TT', - 'Tschad' => 'TD', - 'Tschechien' => 'CZ', - 'Tunesien' => 'TN', - 'Türkei' => 'TR', - 'Turkmenistan' => 'TM', - 'Turks- und Caicosinseln' => 'TC', - 'Tuvalu' => 'TV', - 'Uganda' => 'UG', - 'Ukraine' => 'UA', - 'Ungarn' => 'HU', - 'Uruguay' => 'UY', - 'Usbekistan' => 'UZ', - 'Vanuatu' => 'VU', - 'Vatikanstadt' => 'VA', - 'Venezuela' => 'VE', - 'Vereinigte Arabische Emirate' => 'AE', - 'Vereinigtes Königreich' => 'UK', - 'Vereinigte Staaten von Amerika' => 'US', - 'Vietnam' => 'VN', - 'Wallis und Futuna' => 'WF', - 'Weihnachtsinsel' => 'CX', - 'Weißrussland' => 'BY', - 'Westsahara' => 'EH', - 'Zentralafrikanische Republik' => 'CF', - 'Zypern' => 'CY' - ); - - if($laenderliste) { - return $laender; - } - - return array_flip($laender); - } - - - /** - * @param bool $laenderliste - * - * @return array - */ - public function GetSelectLaenderlisteEN($laenderliste=false) - { - if($laenderliste) { - $tmp = $this->app->DB->SelectPairs( - 'SELECT bezeichnung_en, iso FROM laender ORDER BY bezeichnung_en' - ); - } - else { - $tmp = $this->app->DB->SelectPairs( - 'SELECT iso, bezeichnung_en FROM laender ORDER BY bezeichnung_en' - ); - } - if(!empty($tmp)) { - return $tmp; - } - - $laender = array( - 'Afghanistan' => 'AF', - 'Albania' => 'AL', - 'Algeria' => 'DZ', - 'Andorra' => 'AD', - 'Angola' => 'AO', - 'Anguilla' => 'AI', - 'Antarctica' => 'AQ', - 'Antigua and Barbuda' => 'AG', - 'Argentina' => 'AR', - 'Armenia' => 'AM', - 'Aruba' => 'AW', - 'Australia' => 'AU', - 'Austria' => 'AT', - 'Azerbaijan' => 'AZ', - 'Bahamas' => 'BS', - 'Bahrain' => 'BH', - 'Bangladesh' => 'BD', - 'Barbados' => 'BB', - 'Belarus' => 'BY', - 'Belgium' => 'BE', - 'Belize' => 'BZ', - 'Benin' => 'BJ', - 'Bermuda' => 'BM', - 'Bhutan' => 'BT', - 'Bolivia' => 'BO', - 'Bosnia and Herzegovina' => 'BA', - 'Botswana' => 'BW', - 'Bouvet Island' => 'BV', - 'Brazil' => 'BR', - 'British Indian Ocean Territory' => 'IO', - 'Brunei Darussalam' => 'BN', - 'Bulgaria' => 'BG', - 'Burkina Faso' => 'BF', - 'Burundi' => 'BI', - 'Cabo Verde' => 'CV', - 'Cambodia' => 'KH', - 'Cameroon' => 'CM', - 'Canada' => 'CA', - 'Cayman Islands' => 'KY', - 'Central African Republic' => 'CF', - 'Chad' => 'TD', - 'Chile' => 'CL', - 'China' => 'CN', - 'Christmas Island' => 'CX', - 'Cocos Islands' => 'CC', - 'Colombia' => 'CO', - 'Comoros' => 'KM', - 'Congo' => 'CG', - 'Congo (Democratic Republic)' => 'CD', - 'Cook Islands' => 'CK', - 'Costa Rica' => 'CR', - 'Côte d\'Ivoire' => 'CI', - 'Croatia' => 'HR', - 'Cuba' => 'CU', - 'Cyprus' => 'CY', - 'Czech Republic' => 'CZ', - 'Denmark' => 'DK', - 'Djibouti' => 'DJ', - 'Dominica' => 'DM', - 'Dominican Republic' => 'DO', - 'Ecuador' => 'EC', - 'Egypt' => 'EG', - 'El Salvador' => 'SV', - 'Equatorial Guinea' => 'GQ', - 'Eritrea' => 'ER', - 'Estonia' => 'EE', - 'Ethiopia' => 'ET', - 'Falkland Islands' => 'FK', - 'Faroe Islands' => 'FO', - 'Fiji' => 'FJ', - 'Finland' => 'FI', - 'France' => 'FR', - 'French Guiana' => 'GF', - 'French Polynesia' => 'PF', - 'French Southern Territories' => 'TF', - 'Gabon' => 'GA', - 'Gambia' => 'GM', - 'Georgia' => 'GE', - 'Germany' => 'DE', - 'Ghana' => 'GH', - 'Gibraltar' => 'GI', - 'Greece' => 'GR', - 'Greenland' => 'GL', - 'Grenada' => 'GD', - 'Guadeloupe' => 'GP', - 'Guam' => 'GU', - 'Guatemala' => 'GT', - 'Guinea' => 'GN', - 'Guinea-Bissau' => 'GW', - 'Guyana' => 'GY', - 'Haiti' => 'HT', - 'Heard Island and McDonald Islands' => 'HM', - 'Holy See' => 'VA', - 'Honduras' => 'HN', - 'Hong Kong' => 'HK', - 'Hungary' => 'HU', - 'Iceland' => 'IS', - 'India' => 'IN', - 'Indonesia' => 'ID', - 'Iran' => 'IR', - 'Iraq' => 'IQ', - 'Ireland' => 'IE', - 'Israel' => 'IL', - 'Italy' => 'IT', - 'Jamaica' => 'JM', - 'Japan' => 'JP', - 'Jordan' => 'JO', - 'Kazakhstan' => 'KZ', - 'Kenya' => 'KE', - 'Kiribati' => 'KI', - 'Korea (Democratic Republic)' => 'KP', - 'Korea (Republic of)' => 'KR', - 'Kosovo' => 'XK', - 'Kuwait' => 'KW', - 'Kyrgyzstan' => 'KG', - 'Lao' => 'LA', - 'Latvia' => 'LV', - 'Lebanon' => 'LB', - 'Lesotho' => 'LS', - 'Liberia' => 'LR', - 'Libya' => 'LY', - 'Liechtenstein' => 'LI', - 'Lithuania' => 'LT', - 'Luxembourg' => 'LU', - 'Macao' => 'MO', - 'Macedonia' => 'MK', - 'Madagascar' => 'MG', - 'Malawi' => 'MW', - 'Malaysia' => 'MY', - 'Maldives' => 'MV', - 'Mali' => 'ML', - 'Malta' => 'MT', - 'Marshall Islands' => 'MH', - 'Martinique' => 'MQ', - 'Mauritania' => 'MR', - 'Mauritius' => 'MU', - 'Mayotte' => 'YT', - 'Mexico' => 'MX', - 'Micronesia' => 'FM', - 'Moldova' => 'MD', - 'Monaco' => 'MC', - 'Mongolia' => 'MN', - 'Montenegro' => 'ME', - 'Montserrat' => 'MS', - 'Morocco' => 'MA', - 'Mozambique' => 'MZ', - 'Myanmar' => 'MM', - 'Namibia' => 'NA', - 'Nauru' => 'NR', - 'Nepal' => 'NP', - 'New Caledonia' => 'NC', - 'New Zealand' => 'NZ', - 'Nicaragua' => 'NI', - 'Netherlands' => 'NL', - 'Niger' => 'NE', - 'Nigeria' => 'NG', - 'Niue' => 'NU', - 'Norfolk Island' => 'NF', - 'Northern Mariana Islands' => 'MP', - 'Norway' => 'NO', - 'Oman' => 'OM', - 'Pakistan' => 'PK', - 'Palau' => 'PW', - 'Palestine' => 'PS', - 'Panama' => 'PA', - 'Papua New Guinea' => 'PG', - 'Paraguay' => 'PY', - 'Peru' => 'PE', - 'Philippines' => 'PH', - 'Pitcairn' => 'PN', - 'Poland' => 'PL', - 'Portugal' => 'PT', - 'Puerto Rico' => 'PR', - 'Qatar' => 'QA', - 'Réunion' => 'RE', - 'Romania' => 'RO', - 'Russia' => 'RU', - 'Rwanda' => 'RW', - 'Saint Helena' => 'SH', - 'Saint Kitts and Nevis' => 'KN', - 'Saint Lucia' => 'LC', - 'Saint Pierre and Miquelon' => 'PM', - 'Saint Vincent and the Grenadines' => 'VC', - 'Samoa (American)' => 'AS', - 'Samoa' => 'WS', - 'San Marino' => 'SM', - 'Sao Tome and Principe' => 'ST', - 'Saudi Arabia' => 'SA', - 'Senegal' => 'SN', - 'Serbia' => 'RS', - 'Seychelles' => 'SC', - 'Sierra Leone' => 'SL', - 'Singapore' => 'SG', - 'Slovakia' => 'SK', - 'Slovenia' => 'SI', - 'Solomon Islands' => 'SB', - 'Somalia' => 'SO', - 'South Africa' => 'ZA', - 'South Georgia, South Sandwich Isl.' => 'GS', - 'Spain' => 'ES', - 'Sri Lanka' => 'LK', - 'Sudan' => 'SD', - 'Suriname' => 'SR', - 'Svalbard and Jan Mayen' => 'SJ', - 'Swaziland' => 'SZ', - 'Sweden' => 'SE', - 'Switzerland' => 'CH', - 'Syrian' => 'SY', - 'Taiwan' => 'TW', - 'Tajikistan' => 'TJ', - 'Tanzania' => 'TZ', - 'Thailand' => 'TH', - 'Timor-Leste' => 'TL', - 'Togo' => 'TG', - 'Tokelau' => 'TK', - 'Tonga' => 'TO', - 'Trinidad and Tobago' => 'TT', - 'Tunisia' => 'TN', - 'Turkey' => 'TR', - 'Turkmenistan' => 'TM', - 'Turks and Caicos Islands' => 'TC', - 'Tuvalu' => 'TV', - 'Uganda' => 'UG', - 'Ukraine' => 'UA', - 'United Arab Emirates' => 'AE', - 'United Kingdom' => 'GB', - 'United States of America' => 'US', - 'Uruguay' => 'UY', - 'Uzbekistan' => 'UZ', - 'Vanuatu' => 'VU', - 'Venezuela' => 'VE', - 'Viet Nam' => 'VN', - 'Virgin Islands (Brit.)' => 'VG', - 'Virgin Islands (USA)' => 'VI', - 'Wallis and Futuna' => 'WF', - 'Western Sahara' => 'EH', - 'Yemen' => 'YE', - 'Zambia' => 'ZM', - 'Zimbabwe' => 'ZW', - - ); - - if($laenderliste) { - return $laender; - } - - return array_flip($laender); - } - - /** - * @return array - */ - public function GetAdressSprachen() - { - return array('deutsch'=>'DE','englisch'=>'EN','franzoesisch'=>'FR','hollaendisch'=>'NL','italienisch'=>'IT','spanisch'=>'ES','tschechisch'=>'CZ','daenisch'=>'DK','slowakisch'=>'SK','schwedisch'=>'SW','polnisch'=>'PL' ); - } - - function RMAGrund(){ - $gruende = array( - 'gutschrift' => 'Gutschrift zu ausgewählten Artikeln', - 'ersatzlieferung' => 'Kostenlose Ersatzlieferung veranlassen', - 'ruecksendung' => 'Rücksendung der ausgewählten Artikel', - 'internreparatur' => 'ausgewählte zur internen Reparatur geben', - 'externreparatur' => 'ausgewählte für Reparatur zurückschicken', - 'abgeschlossen' => 'ausgewählte Artikel auf abgeschlossen setzen', - 'offen' => 'ausgewählte Artikel auf offen setzen'); - - return $gruende; - } - - /** - * @param bool $sprachenliste - * - * @return array - */ - public function GetSelectSprachenListe($sprachenliste=false) - { - if($sprachenliste) { - $tmp = $this->app->DB->SelectPairs('SELECT bezeichnung_de, iso FROM sprachen ORDER BY bezeichnung_de'); - } - else { - $tmp = $this->app->DB->SelectPairs('SELECT iso, bezeichnung_de FROM sprachen ORDER BY bezeichnung_de'); - } - if(!empty($tmp) && count($tmp) > 1) { - return array_merge([''], $tmp); - } - - $sprachen = array( - 'Afrikaans' => 'AF', - 'Albanisch' => 'SQ', - 'Arabisch' => 'AR', - 'Armenisch' => 'HY', - 'Aserbeidschanisch' => 'AZ', - 'Bosnisch' =>'BS', - 'Bulgarisch' => 'BG', - 'Chinesisch' => 'ZH', - 'Dänisch' => 'DA', - 'Deutsch' => 'DE', - 'Englisch' => 'EN', - 'Estnisch' => 'ET', - 'Finnisch' => 'FI', - 'Französisch' => 'FR', - 'Georgisch' => 'KA', - 'Griechisch' => 'EL', - 'Holländisch' => 'NL', - 'Isländisch' => 'IS', - 'Italienisch' => 'IT', - 'Japanisch' => 'JA', - 'Kasachisch' => 'KK', - 'Koreanisch' => 'KO', - 'Kroatisch' => 'HR', - 'Lettisch' => 'LV', - 'Litauisch' => 'LT', - 'Norwegisch' => 'NO', - 'Polnisch' => 'PL', - 'Portugiesisch' => 'PT', - 'Rumänisch' => 'RO', - 'Russisch' => 'RU', - 'Schwedisch' => 'SV', - 'Serbisch' => 'SR', - 'Slowakisch' => 'SK', - 'Slowenisch' => 'SL', - 'Spanisch' => 'ES', - 'Tschechisch' => 'CZ', - 'Türkisch' => 'TR', - 'Ukrainisch' => 'UK', - 'Ungarisch' => 'HU', - 'Weißrussisch' => 'BY' - ); - if($sprachenliste) { - return $sprachen; - } - - return array_flip($sprachen); - } - - /** - * @param bool $sprachenliste - * - * @return array - */ - public function GetSelectSprachenListeEN($sprachenliste=false) - { - if($sprachenliste) { - $tmp = $this->app->DB->SelectPairs('SELECT bezeichnung_en, iso FROM sprachen ORDER BY bezeichnung_en'); - } - else { - $tmp = $this->app->DB->SelectPairs('SELECT iso, bezeichnung_en FROM sprachen ORDER BY bezeichnung_en'); - } - if(!empty($tmp) && count($tmp) > 1) { - return array_merge([''], $tmp); - } - - $sprachen = array( - 'Afrikaans' => 'AF', - 'Albanian' => 'SQ', - 'Arabic' => 'AR', - 'Armenian' => 'HY', - 'Azerbaijani' => 'AZ', - 'Bosnian' =>'BS', - 'Bulgarian' => 'BG', - 'Chinese' => 'ZH', - 'Danish' => 'DA', - 'German' => 'DE', - 'English' => 'EN', - 'Estonian' => 'ET', - 'Finnish' => 'FI', - 'French' => 'FR', - 'Georgian' => 'KA', - 'Greek' => 'EL', - 'Dutch' => 'NL', - 'Icelandic' => 'IS', - 'Italian' => 'IT', - 'Japanese' => 'JA', - 'Kazakh' => 'KK', - 'Korean' => 'KO', - 'Croatian' => 'HR', - 'Latvian' => 'LV', - 'Lithuanian' => 'LT', - 'Norwegian' => 'NO', - 'Polish' => 'PL', - 'Portuguese' => 'PT', - 'Romanian' => 'RO', - 'Russian' => 'RU', - 'Swedish' => 'SV', - 'Serbian' => 'SR', - 'Slovak' => 'SK', - 'Slovenian' => 'SL', - 'Spanish' => 'ES', - 'Czech' => 'CZ', - 'Turkish' => 'TR', - 'Ukrainian' => 'UK', - 'Hungarian' => 'HU', - 'Belarusian' => 'BE' - ); - - if($sprachenliste) { - return $sprachen; - } - - return array_flip($sprachen); - } - - function GetFirmaBCC1() - { - return $this->Firmendaten('bcc1'); - } - - function GetFirmaBCC2() - { - return $this->Firmendaten('bcc2'); - } - - function GetFirmaMail() - { - return $this->Firmendaten('email'); - } - - function GetFirmaName() - { - return $this->Firmendaten('name'); - } - - function GetFirmaAbsender() - { - $name = $this->Firmendaten('absendername'); - if($name!='') { - return $name; - } - return $this->Firmendaten('name'); - } - - - function GetSelectEmailMitName($selected="") - { - $own = $this->app->User->GetEmail(); - $name = $this->app->User->GetName(); - - $selected = str_replace(' <',' <',$selected); - $selected = str_replace('>','>',$selected); - - $email_addr[0]['email'] = $this->Firmendaten('email'); - $absendernamefirma[0]['absendername'] = $this->Firmendaten('absendername'); - $firmenname = $this->Firmendaten('name'); - - if($absendernamefirma[0]['absendername']=="") $absendernamefirma[0]['absendername']= $firmenname; - - - $emails = array(); - - if($this->app->User->GetField("email_bevorzugen")=="1") - { - if($own!='' && $name!='') - $emails[] = $name." <".$own.">"; - } - - $i=0; - foreach($email_addr AS $mail) - { - if($absendernamefirma[$i]['absendername']!="" && $mail['email']!="") - $emails[] = $absendernamefirma[$i]['absendername']." <".$mail['email'].">"; - } - - if($this->app->User->GetField("email_bevorzugen")!="1") - { - if($own!='' && $name!='') - $emails[] = $name." <".$own.">"; - } - - $email_addr = $this->app->DB->SelectArr("SELECT if(smtp_frommail!='',smtp_frommail,email) as email,smtp_fromname FROM emailbackup WHERE (smtp_frommail!='' OR email!='') AND (adresse<=0 OR adresse='".$this->app->User->GetAdresse()."') AND geloescht!=1 ORDER BY email"); - foreach($email_addr AS $mail) - { - if($mail['smtp_fromname']!="") $emails[] = $mail['smtp_fromname']." <".$mail['email'].">"; - else $emails[] = $firmenname." <".$mail['email'].">"; - } - - $emails = array_keys(array_flip($emails)); - - - for($i=0;$i{$emails[$i]}"; - } - return $tpl; - } - - - function GetSelectEmail($selected="") - { - $own = $this->app->User->GetEmail(); - $email_addr= $this->Firmendaten("email"); - - $emails = array(); - - if($this->app->User->GetField("email_bevorzugen")=="1") - { - if($own!='') - $emails[] = $own; - } - - if($email_addr!="") - $emails[] = $email_addr; - - $email_addr = $this->app->DB->SelectArr("SELECT if(smtp_frommail!='',smtp_frommail,email) as email FROM emailbackup WHERE (smtp_frommail!='' OR email!='') AND (adresse<=0 OR adresse='".$this->app->User->GetAdresse()."') AND geloescht!=1 ORDER BY email"); - foreach($email_addr AS $mail) - $emails[] = $mail['email']; - - $emails = array_keys(array_flip($emails)); - - for($i=0;$i{$emails[$i]}"; - } - return $tpl; - } - - function GetSelectTicketmail($selected="") - { - /** @var Ticket $obj */ - $obj = $this->LoadModul('ticket'); - if(!empty($obj) && method_exists($obj, 'GetSelectTicketmail')) - { - return $obj->GetSelectTicketmail($selected); - } - return ''; - } - - - function GetSelectDokumentKunde($typ,$adresse,$select) - { - $typ_bezeichnung = ucfirst($typ); - $result = $this->app->DB->SelectArr("SELECT CONCAT('$typ_bezeichnung ',if(status='angelegt','ENTWURF',belegnr),' (Status: ',status,') vom ',DATE_FORMAT(datum,'%d.%m.%Y')) as - result,id FROM $typ WHERE adresse='$adresse' ORDER by datum DESC"); - if(empty($result)) { - return ''; - } - $tmp = ''; - foreach ($result as $row) { - $tmp .= ""; - } - - return $tmp; - } - - - function GetSelectAuftragKunde($adresse,$select="") - { - return $this->GetSelectDokumentKunde("auftrag",$adresse,$select); - } - - function GetSelectRechnungKunde($adresse,$select="") - { - - return $this->GetSelectDokumentKunde("rechnung",$adresse,$select); - } - - function GetSelectArbeitsnachweisKunde($adresse,$select="") - { - return $this->GetSelectDokumentKunde("arbeitsnachweis",$adresse,$select); - } - - - - - function GetSelectAnsprechpartner($adresse, $selected="") - { - $first = $this->app->DB->Select("SELECT CONCAT(ansprechpartner,' <',email,'>') FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - $firstname = $this->app->DB->Select("SELECT ansprechpartner FROM adresse WHERE id='$adresse' LIMIT 1"); - if($firstname=="") $first = $this->app->DB->Select("SELECT CONCAT(name,' <',email,'>') FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - - $others = $this->app->DB->SelectArr("SELECT id, CONCAT(name,' (',bereich,')',' <',email,'>') as name FROM ansprechpartner WHERE adresse='$adresse'"); - - $tpl =""; - - for($i=0;$i{$others[$i]['name']}"; - } - return $tpl; - } - - function GetVorgaenger($projekt,$disableid="") - { - $user = $this->app->DB->SelectArr("SELECT * FROM arbeitspaket WHERE projekt='".$projekt."' AND id!='$disableid' AND art!='material'"); - $tpl[0]="keinen"; - for($i=0;$iapp->DB->SelectArr("SELECT DISTINCT a.id,a.name FROM adresse a INNER JOIN adresse_rolle ar on ar.adresse=a.id AND ar.subjekt='Mitarbeiter' WHERE a.mitarbeiternummer!='' AND a.geloescht!=1 AND (ar.bis = '0000-00-00' or ar.bis >= now()) ORDER by name"); - - for($i=0;$iapp->DB->SelectArr("SELECT * FROM reisekostenart ORDER by nummer"); - for($i=0;$iGetBezahltWieAssoc(); - - foreach($tmp as $key=>$value) - $result .= ""; - return $result; - } - - - - function GetLagerRegalart($selected="") - { - $tmp = array('Fachboden','Palette'); - foreach($tmp as $key=>$value) - { - if($value==$selected) $mark="selected"; else $mark=""; - $tpl .=""; - } - return $tpl; - } - - - function GetLagerABCKategorie($selected="") - { - $tmp = array(''=>'keine','A'=>'A','B'=>'B','C'=>'C'); - foreach($tmp as $key=>$value) - { - if($key==$selected) $mark="selected"; else $mark=""; - $tpl .=""; - } - return $tpl; - } - - - function GetSelectEtiketten($art,$selected="") - { - $user = $this->app->DB->SelectArr("SELECT * FROM etiketten WHERE verwendenals='$art' ORDER by name"); - for($i=0;$i{$user[$i]['name']}"; - } - return $tpl; - } - - function GetKalkulationartAssoc() - { - $user['artikel']="Artikel aus Stammdaten"; - $user['stueckliste']="Stückliste"; - $user['freieposition']="Freie Position"; - $user['maschinenzeit']="Maschinenzeit"; - $user['arbeitszeit']="Arbeitszeit"; - $user['einmalkosten']="Einmalkosten / Werkzeugkosten"; - -// $user['teilprojekt']="Teilprojekt / Aufgabe"; -// $user['hauptpunkt']="Beschriftung für Gruppe"; -// $user['unterpunkt']="Beschriftung für Untergruppe"; - - $user['zwischensumme']="Zwischensumme"; - $user['zwischensummemengex']="Zwischensumme für Menge X"; - -// $user['geplantemenge']="Geplante Menge"; - return $user; - } - - function GetSelectKalkulationart($selected="") - { - $user = $this->GetKalkulationartAssoc(); - foreach($user as $key=>$value) - { - if($key==$selected) $mark="selected"; else $mark=""; - $tpl .=""; - } - return $tpl; - } - - - function GetSelectReisekostenart($selected="") - { - $user = $this->app->DB->SelectArr("SELECT * FROM reisekostenart ORDER by nummer"); - for($i=0;$i{$user[$i]['nummer']}- {$user[$i]['beschreibung']}"; - } - return $tpl; - } - - function GetSelectUserVorlage($selected="",$disableid="") - { - $user = $this->app->DB->SelectArr("SELECT * FROM uservorlage WHERE id!='$disableid' ORDER by bezeichnung"); - for($i=0;$i{$user[$i]['bezeichnung']}"; - } - return $tpl; - } - - function GetSelectUser($selected="",$disableid="") - { - $user = $this->app->DB->SelectArr("SELECT * FROM user WHERE id!='$disableid'"); - for($i=0;$iapp->DB->Select("SELECT name FROM adresse WHERE id='".$user[$i]['adresse']."' LIMIT 1"); - if($user[$i]['id']==$selected) $mark="selected"; else $mark=""; - $tpl .=""; - } - return $tpl; - } - - /** - * @param array $array - * @param string|int $selected - * - * @return string - */ - public function arrayToSelect($array, $selected = '') - { - $tpl = ''; - foreach($array as $id => $konto) { - $mark = ''; - if($selected == $id) { - $mark = 'selected'; - } - $tpl .= ''; - } - - return $tpl; - } - - function GetIPAdapterbox($id) - { - return $this->app->DB->Select("SELECT adapterboxip FROM drucker WHERE id='$id' LIMIT 1"); - } - - function GetStandardPaketmarkendrucker($projekt="",$versandart="") - { - return $this->app->DB->Select("SELECT paketmarkendrucker FROM user WHERE id='".$this->app->User->GetID()."'"); - } - - function GetStandardVersanddrucker($projekt="",$versandart="") - { - return $this->app->DB->Select("SELECT standardversanddrucker FROM user WHERE id='".$this->app->User->GetID()."'"); - } - - function GetInstrashipExport($projekt="") - { - $export = $this->app->DB->Select("SELECT intraship_exportdrucker FROM projekt WHERE id = '$projekt' LIMIT 1"); - if($export)return $export; - return $this->GetStandardVersanddrucker(); - } - - function GetSelectEtikettenDrucker($selected="") - { - if($selected=="") - $selected = $this->app->DB->Select("SELECT standardetikett FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - - $check = $this->app->DB->Select("SELECT id FROM drucker WHERE id='$selected' AND aktiv='1' LIMIT 1"); - if($check!=$selected) $selected=""; - - if($selected=="") - $selected = $this->Firmendaten("standardetikettendrucker"); - - if($selected=="0" || $selected=="") - $tpl .=""; - else - $tpl .=""; - - $drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='2'"); - for($i=0;$i{$drucker[$i]['name']}"; - } - return $tpl; - } - - function GetSelectFax($selected="") - { - if($selected=="") - $selected = $this->app->DB->Select("SELECT standardfax FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - - $check = $this->app->DB->Select("SELECT id FROM drucker WHERE id='$selected' AND aktiv='1' LIMIT 1"); - if($check!=$selected) $selected=""; - - if($selected=="") - $selected = $this->Firmendaten("standardfax"); - - //$tpl .=""; - $drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='1'"); - for($i=0;$i{$drucker[$i]['name']}"; - } - return $tpl; - } - - function GetSelectBonDrucker($selected="") - { - if($selected=="") - $selected = $this->Firmendaten("aufgaben_bondrucker"); - - $drucker = $this->app->DB->SelectArr("SELECT id, bezeichnung FROM adapterbox WHERE verwendenals='bondrucker'"); - - $tpl =""; - for($i=0;$i{$drucker[$i]['bezeichnung']}"; - } - return $tpl; - } - - - function GetPosAdapterbox() - { - $drucker = $this->app->DB->SelectArr("SELECT id, bezeichnung FROM adapterbox WHERE verwendenals='bondrucker' OR verwendenals='rksvlight'"); - for($i=0;$iapp->DB->SelectArr("SELECT id, bezeichnung FROM adapterbox WHERE verwendenals='bondrucker'"); - for($i=0;$i-- kein --"; - $drucker = $this->app->DB->SelectArr("SELECT id, name FROM etiketten"); - for($i=0;$i-- kein --"; - $drucker = $this->app->DB->SelectArr("SELECT id, bezeichnung FROM adapterbox WHERE verwendenals='waage'"); - for($i=0;$i-- kein --"; - $drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='2'"); - for($i=0;$iapp->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='0'"); - for($i=0;$iapp->DB->Select("SELECT standardversanddrucker FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - - $check = $this->app->DB->Select("SELECT id FROM drucker WHERE id='$selected' AND aktiv='1' LIMIT 1"); - if($check!=$selected) $selected=""; - - $tpl =""; - $drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='0'"); - for($i=0;$i{$drucker[$i]['name']}"; - } - return $tpl; - } - - function GetSelectDrucker($selected="") - { - - - if($selected=="") - $selected = $this->app->DB->Select("SELECT standarddrucker FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - - $check = $this->app->DB->Select("SELECT id FROM drucker WHERE id='$selected' AND aktiv='1' LIMIT 1"); - if($check!=$selected) $selected=""; - - if($selected=="") - $selected = $this->Firmendaten("standardversanddrucker"); - - $tpl .=""; - $drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='0'"); - for($i=0;$i{$drucker[$i]['name']}"; - } - return $tpl; - } - function DokumentSendVorlage($id) - { - $betreff = $this->app->DB->Select("SELECT betreff FROM dokumente_send WHERE id='$id' LIMIT 1"); - $text = $this->app->DB->Select("SELECT text FROM dokumente_send WHERE id='$id' LIMIT 1"); - - $this->app->Tpl->Set('BETREFF',$betreff); - $this->app->Tpl->Set('TEXT',$text); - } - - function Geschaeftsbriefvorlage($sprache,$subjekt,$projekt="",$name="",$id="", $intern = false) - { - if($sprache=="") $sprache="deutsch"; - - $this->BeschriftungSprache($sprache); - - $belegnr = ""; - $adresse = ""; - $anschreiben = ""; - - $lowersubjekt = strtolower($subjekt); - if( - $lowersubjekt=="angebot" || - $lowersubjekt=="auftrag" || - $lowersubjekt=="bestellung" || - $lowersubjekt=="produktion" || - $lowersubjekt=="lieferschein" || - $lowersubjekt=="retoure" || - $lowersubjekt=="rechnung" || - $lowersubjekt=="gutschrift" || - $lowersubjekt=="arbeitsnachweis" || - $lowersubjekt=="proformarechnung" - ){ - if($id > 0) { - - if($name=="") - $name = $this->app->DB->Select("SELECT name FROM $lowersubjekt WHERE id='$id' LIMIT 1"); - - $belegnr = $this->app->DB->Select("SELECT belegnr FROM $lowersubjekt WHERE id='$id' LIMIT 1"); - $adresse = $this->app->DB->Select("SELECT adresse FROM $lowersubjekt WHERE id='$id' LIMIT 1"); - $anschreiben = $this->app->DB->Select("SELECT anschreiben FROM $lowersubjekt WHERE id='$id' LIMIT 1"); - $datum = $this->app->DB->Select("SELECT DATE_FORMAT(datum,'%d.%m.%Y') FROM $lowersubjekt WHERE id='$id' LIMIT 1"); - - if($anschreiben=="") - { - $anschreiben = $this->app->DB->Select("SELECT anschreiben FROM adresse WHERE id='$adresse' LIMIT 1"); - } - - if($anschreiben=="") - { - $anschreiben = $this->Beschriftung("dokument_anschreiben"); - } - - if(!$intern)$this->GeschaeftsBriefAnhang($subjekt,$sprache,$projekt,$lowersubjekt,$id); - } - } - - $text = $this->GetGeschaeftsBriefText($subjekt,$sprache,$projekt,$lowersubjekt,$id); - $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,$sprache,$projekt,$lowersubjekt,$id); - - if($text=="") $text = $this->GetGeschaeftsBriefText($subjekt,$sprache,$projekt,$lowersubjekt,$id); - if($betreff=="") $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,$sprache,$projekt,$lowersubjekt,$id); - - if(($text === "" || $betreff === "") && $sprache != 'deutsch') - { - $text = $this->GetGeschaeftsBriefText($subjekt,'deutsch',$projekt,$lowersubjekt,$id); - $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,'deutsch',$projekt,$lowersubjekt,$id); - - if($text=="") $text = $this->GetGeschaeftsBriefText($subjekt,'deutsch',$projekt,$lowersubjekt,$id); - if($betreff=="") $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,'deutsch',$projekt,$lowersubjekt,$id); - } - - $text = str_replace('{BELEGNR}',$belegnr,$text); - $text = str_replace('{DATUM}',$datum,$text); - - $betreff = str_replace('{BELEGNR}',$belegnr,$betreff); - $betreff = str_replace('{DATUM}',$datum,$betreff); - - if($id > 0) - { - $betreff = $this->ParseUserVars($lowersubjekt,$id, $betreff); - $text = $this->ParseUserVars($lowersubjekt,$id, $text); - } - - if($anschreiben=="") { - $anschreiben = $this->app->erp->Beschriftung("dokument_anschreiben"); - } - $betreff = str_replace('{ANSCHREIBEN}',$anschreiben,$betreff); - $text = str_replace('{ANSCHREIBEN}',$anschreiben,$text); - - $betreff = str_replace('{NAME}',$name,$betreff); - $text = str_replace('{NAME}',$name,$text); - - - - if(!$intern)$this->app->Tpl->Set('BETREFF',$betreff); - - if(!$this->isHTML($text) && $this->Firmendaten("briefhtml")=="1"){ - $texthtml = str_replace("\r\n", "
", $text); - if(!$intern)$this->app->Tpl->Set('TEXT',$texthtml); - } else { - if(!$intern)$this->app->Tpl->Set('TEXT',$text); - } - - return array("betreff"=>$betreff,"text"=>$text); - } - - function GetAnsprechpartner($data) - { - // $data: 'Admin ' - // return id, name, email - - $first = strpos($data, '<'); - $last = strpos($data, '>'); - - $name = trim(substr($data, 0, $first)); - $email = trim(substr($data, $first+1, $last-($first+1))); - - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE email='$mail' LIMIT 1"); - if(!(is_numeric($id) && $id<1)) - $id = $this->app->DB->Select("SELECT id FROM adresse WHERE name='$name' LIMIT 1"); - - if(!is_numeric($id)) $id = 0; - - return array('id'=>$id, 'name'=>$name, 'email'=>$email); - } - - - function RemoveReadonly($feld) - { - $this->app->Tpl->Add('JQUERY','$("#'.$feld.'").removeAttr("disabled","disabled");'); - $this->app->Tpl->Add('JQUERY','$("#'.$feld.'").removeAttr("readonly","readonly");'); - $this->app->Tpl->Add('JQUERY','$("#'.$feld.'").css("background-color", "white");'); - } - - - function CommonReadonly() - { - $this->commonreadonly=1; - $this->app->Tpl->Set('COMMONREADONLYINPUT',"readonly disabled style=\"background-color:#eee; border-color:#ddd;\""); - $this->app->Tpl->Set('COMMONREADONLYSELECT',"disabled=\"disabled\" style=\"background-color:#eee;\""); - - } - - - function BriefpapierHintergrundDisable($drucker) - { - $keinhintergrund = $this->app->DB->Select("SELECT keinhintergrund FROM drucker WHERE id='$drucker' LIMIT 1"); - if($keinhintergrund=="1") - $this->app->erp->BriefpapierHintergrunddisable = true; - } - - function BriefpapierHintergrundEnable() - { - $this->app->erp->BriefpapierHintergrunddisable = false; - } - - - function DokumentMask($parsetarget,$typ,$id,$adresse,$projekt="",$popup=false, $intern = false) - { - if(!$intern) - { - $this->app->Tpl->Set('SID',$id); - $this->app->Tpl->Set('TYP',$typ); - - $ansprechpartnerManuell = $this->app->Secure->GetPOST('ansprechpartnermanuellverwenden'); - if($ansprechpartnerManuell == 'on'){ - $ansprechpartner = $this->app->Secure->GetPOST('ansprechpartnermanuell'); - }else{ - $ansprechpartner = $this->app->Secure->GetPOST('ansprechpartner'); - } - - - $betreff = $this->app->Secure->GetPOST("betreff"); - - $projekt_submit = $this->app->Secure->GetPOST("projekt"); - $text = $this->app->Secure->GetPOST("text"); - $art = $this->app->Secure->GetPOST("senden"); - - $tmpcc = $this->app->Secure->GetPOST("cc"); - $tmpbcc = $this->app->Secure->GetPOST("bcc"); - - $vorlage = $this->app->Secure->GetPOST("vorlage"); - if($vorlage!='' && !empty($this->app->User) && method_exists($this->app->User, 'SetParameter')) { - $this->app->User->SetParameter("briefpapier_vorlage",$vorlage); - } - }else{ - $betreff = isset($intern["betreff"])?$intern["betreff"]:''; - $projekt_submit = isset($intern["projekt"])?$intern["projekt"]:$projekt; - $ansprechpartner = isset($intern["ansprechpartner"])?$intern["ansprechpartner"]:$this->app->DB->Select("SELECT concat(if(ansprechpartner <> '',ansprechpartner,name),'<',email,'>') FROM $typ WHERE id = '$id' LIMIT 1"); - $text = isset($intern["text"])?$intern["text"]:''; - $art = isset($intern["senden"])?$intern["senden"]:''; - $tmpcc = isset($intern["cc"])?$intern["cc"]:''; - $tmpbcc = isset($intern["bcc"])?$intern["bcc"]:''; - - $vorlage = isset($intern["vorlage"])?$intern["vorlage"]:''; - if($vorlage!='' && !empty($this->app->User) && method_exists($this->app->User, 'SetParameter')) { - $this->app->User->SetParameter("briefpapier_vorlage",$vorlage); - } - } - $ansprechpartner = str_replace('<','<',$ansprechpartner); - $ansprechpartner = str_replace('>','>',$ansprechpartner); - list($name, $email) = explode('<', trim($ansprechpartner,'>')); - - $betreff = str_replace('\"','"',$betreff); - $betreff = str_replace("\'","'",$betreff); - - - $partnerinfo['email'] = $email; - $partnerinfo['name'] = $name; - - if(!$intern && $this->app->Secure->GetPOST('ansprechpartnermanuellverwenden')=='on'){ - $partnerinfo['email'] = $this->app->Secure->GetPOST("ansprechpartnermanuell"); - $partnerinfo['name'] = ''; - } - - - if($projekt=="" && $projekt_submit!="") - $projekt = $projekt_submit; - - if($projekt=="") - $projekt = $this->app->DB->Select("SELECT projekt FROM $typ WHERE id='$id' LIMIT 1"); //04.07.2018 von Bruno hinzugefuegt - // hole standard projekt von adresse - if($projekt=="") - $projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - - - if($typ!="brieffax") - $projektbriefpapier = $this->app->DB->Select("SELECT projekt FROM $typ WHERE id='$id' LIMIT 1"); - -// START SCHLEIFE - if(!$intern) - { - $tmpsenden = $this->app->Secure->GetPOST("senden"); - }else{ - $tmpsenden = isset($intern['senden'])?$intern['senden']:null; - } - - if(!$intern && $tmpsenden && !empty($this->app->User) && method_exists($this->app->User, 'SetParameter')) { - $this->app->User->SetParameter("dokumente_abschickenmask_".$typ."_brief","0"); - $this->app->User->SetParameter("dokumente_abschickenmask_".$typ."_email","0"); - $this->app->User->SetParameter("dokumente_abschickenmask_".$typ."_sonstiges","0"); - $this->app->User->SetParameter("dokumente_abschickenmask_".$typ."_telefon","0"); - $this->app->User->SetParameter("dokumente_abschickenmask_".$typ."_fax","0"); - } - - for($tmpis=0;$tmpisapp->User) && method_exists($this->app->User, 'SetParameter')){ - $this->app->User->SetParameter('dokumente_abschickenmask_' . $typ . '_' . $art, '1'); - } - - - if($art == "brief") $drucker = $this->app->Secure->GetPOST("drucker_brief"); - else if($art == "fax") $drucker = $this->app->Secure->GetPOST("drucker_fax"); - else if ($art == "email") $drucker = $this->app->Secure->GetPOST("email_from"); - // Hintergrund ausschalten wenn drucker es erfordert - $this->BriefpapierHintergrundDisable($drucker); - if($art === 'email' || (!$intern && $this->app->Secure->GetPOST('sammelpdf'))) { - if($intern) - { - if(isset($intern['dateianhaenge']) && $intern['dateianhaenge'] && is_array($intern['dateianhaenge'])) - { - foreach($intern['dateianhaenge'] as $pk => $pv) - { - if(is_numeric($pv)) - { - $dateiname = str_replace(' ','_',$this->app->erp->GetDateiName($pv)); - }else { - $dateiname = $pv; - if(!file_exists($dateiname))$dateiname = ''; - } - - if($dateiname != '') - { - if(is_numeric($pv)) { - $dateiinhalt = $this->app->erp->GetDatei($pv); - if($handle = fopen (rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname, "wb")) - { - fwrite($handle, $dateiinhalt); - fclose($handle); - $_dateien[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname; - $dateisort = $pk; - if($dateisort)$dateiensort[$dateisort] = count($_dateien)-1; - $zuloeschen[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname; - } - }else{ - $_dateien[] = $dateiname; - $dateisort = $pk; - if($dateisort)$dateiensort[$dateisort] = count($_dateien)-1; - $zuloeschen[] = $dateiname; - } - } - } - } - }else{ - /*if($this->app->Secure->GetPOST('sammelpdf')) - $_dateien = array($tmpfile);*/ - foreach($_POST as $pk => $pv) - { - $pka = explode('_',$pk); - if($pka[0] == 'datei' && isset($pka[1]) && $pka[1] && is_numeric($pka[1])){ - $dateiname = str_replace(' ','_',$this->app->erp->GetDateiName($pka[1])); - if($dateiname) - { - if($this->app->DB->Select("SELECT id FROM datei_stichwoerter WHERE datei=".$pka[1]." AND subjekt='Deckblatt' AND objekt='auftrag' AND parameter='$id'") && $this->app->Secure->GetPOST('sammelpdf')){ - //Datei ist ein Deckblatt, vermerken - $deckblatt=true; - }else{ - $dateiinhalt = $this->app->erp->GetDatei($pka[1]); - - if($handle = fopen (rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname, "wb")) - { - fwrite($handle, $dateiinhalt); - fclose($handle); - $_dateien[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname; - $dateisort = (int)$this->app->Secure->GetPOST('dateisort_'.$pka[1]); - if($dateisort)$dateiensort[$dateisort] = count($_dateien)-1; - $zuloeschen[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname; - } - } - } - } - } - if($this->app->Secure->GetPOST('sammelpdf') && isset($dateiensort)) - { - foreach($dateiensort as $k => $v) - { - if(file_exists($_dateien[$v])) - { - $contenttyp = mime_content_type($_dateien[$v]); - if($contenttyp == 'application/pdf') - { - $sammelpdf[] = file_get_contents($_dateien[$v]); - unset($_dateien[$v]); - } - } - } - } - } - } - // eigentliches dokument - if($typ=="bestellung") - { - // sende - if($this->Firmendaten('hintergrund') == 'kein'){ - $this->app->erp->BriefpapierHintergrunddisable = false; - } - else{ - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - } - if(class_exists('BestellungPDFCustom')) - { - $Brief = new BestellungPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new BestellungPDF($this->app,$projektbriefpapier); - } - $Brief->GetBestellung($id); - - if(isset($sammelpdf)) - { - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - } - - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('BestellungPDFCustom')) - { - $Brief = new BestellungPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new BestellungPDF($this->app,$projektbriefpapier); - } - $Brief->GetBestellung($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - if(isset($sammelpdf)) - { - unlink($tmpfile); - if(class_exists('BestellungPDFCustom')) - { - $Brief = new BestellungPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new BestellungPDF($this->app,$projektbriefpapier); - } - $Brief->GetBestellung($id); - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - $tmpfile = $Brief->displayTMP(); - } - } - // eigentliches dokument - if($typ=="angebot") - { - // sende - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('AngebotPDFCustom')) - { - $Brief = new AngebotPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new AngebotPDF($this->app,$projektbriefpapier); - } - $Brief->GetAngebot($id); - - if(isset($sammelpdf)) - { - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - } - - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('AngebotPDFCustom')) - { - $Brief = new AngebotPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new AngebotPDF($this->app,$projektbriefpapier); - } - $Brief->GetAngebot($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - if(isset($sammelpdf)) - { - unlink($tmpfile); - if(class_exists('AngebotPDFCustom')) - { - $Brief = new AngebotPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new AngebotPDF($this->app,$projektbriefpapier); - } - $Brief->GetAngebot($id); - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - $tmpfile = $Brief->displayTMP(); - } - } - // eigentliches dokument - if($typ=="lieferschein") - { - // sende - if($this->Firmendaten('hintergrund') == 'kein'){ - $this->app->erp->BriefpapierHintergrunddisable = false; - } - else{ - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - } - - if(class_exists('LieferscheinPDFCustom')) - { - $Brief = new LieferscheinPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new LieferscheinPDF($this->app,$projektbriefpapier); - } - $Brief->GetLieferschein($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('LieferscheinPDFCustom')) - { - $Brief = new LieferscheinPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new LieferscheinPDF($this->app,$projektbriefpapier); - } - $Brief->GetLieferschein($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - } - if($typ=="retoure") - { - // sende - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('RetourePDFCustom')) - { - $Brief = new RetourePDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new RetourePDF($this->app,$projektbriefpapier); - } - $Brief->GetRetoure($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('RetourePDFCustom')) - { - $Brief = new RetourePDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new RetourePDF($this->app,$projektbriefpapier); - } - $Brief->GetRetoure($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - } - // eigentliches dokument - if($typ=="arbeitsnachweis") - { - // sende - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('ArbeitsnachweisPDFCustom')) - { - $Brief = new ArbeitsnachweisPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new ArbeitsnachweisPDF($this->app,$projektbriefpapier); - } - $Brief->GetArbeitsnachweis($id); - - if(isset($sammelpdf)) - { - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - } - - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('ArbeitsnachweisPDFCustom')) - { - $Brief = new ArbeitsnachweisPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new ArbeitsnachweisPDF($this->app,$projektbriefpapier); - } - $Brief->GetArbeitsnachweis($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - - if(isset($sammelpdf)) - { - unlink($tmpfile); - if(class_exists('ArbeitsnachweisPDFCustom')) - { - $Brief = new ArbeitsnachweisPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new ArbeitsnachweisPDF($this->app,$projektbriefpapier); - } - $Brief->GetArbeitsnachweis($id); - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - $tmpfile = $Brief->displayTMP(); - } - } - // eigentliches dokument - if($typ=="reisekosten") - { - // sende - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('ReisekostenPDFCustom')) - { - $Brief = new ReisekostenPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new ReisekostenPDF($this->app,$projektbriefpapier); - } - $Brief->GetReisekosten($id); - - if(isset($sammelpdf)) - { - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - } - - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('ReisekostenPDFCustom')) - { - $Brief = new ReisekostenPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new ReisekostenPDF($this->app,$projektbriefpapier); - } - $Brief->GetReisekosten($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - if(isset($sammelpdf)) - { - unlink($tmpfile); - if(class_exists('ReisekostenPDFCustom')) - { - $Brief = new ReisekostenPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new ReisekostenPDF($this->app,$projektbriefpapier); - } - $Brief->GetReisekosten($id); - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - $tmpfile = $Brief->displayTMP(); - } - - - } - - // eigentliches dokument - if($typ=="auftrag") - { - // sende - if(class_exists('AuftragPDFCustom')) - { - $Brief = new AuftragPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new AuftragPDF($this->app,$projektbriefpapier); - } - $Brief->GetAuftrag($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - if(isset($sammelpdf)) - { - unlink($tmpfile); - if(class_exists('AuftragPDFCustom')) - { - $Brief = new AuftragPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new AuftragPDF($this->app,$projektbriefpapier); - } - $Brief->GetAuftrag($id); - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - if($deckblatt){ - $containerpdf = new Fpdi('P','mm','A4'); - foreach($_POST as $pk => $pv){ - $pka = explode('_',$pk); - if($pka[0] == 'datei' && isset($pka[1]) && $pka[1] && is_numeric($pka[1])){ - $dateiname = str_replace(' ','_',$this->app->erp->GetDateiName($pka[1])); - if($dateiname){ - $deckblattdatei = $this->app->DB->Select("SELECT datei FROM datei_stichwoerter WHERE datei=".$pka[1]." AND subjekt='Deckblatt' AND objekt='auftrag' AND parameter='$id'"); - if($deckblattdatei){ - //Zuerst alle Deckblätter der Reihe nach zum PDF Dokument hinzufügen - $deckblattdateitmp = $this->app->erp->GetUSERDATA()."/dms/".$this->app->Conf->WFdbname."/".$deckblattdatei; - $pages_count = $containerpdf->setSourceFile($deckblattdateitmp); - for($j = 1; $j <= $pages_count; $j++) - { - $containerpdf->AddPage(); - $tplIdx = $containerpdf->importPage($j); - $containerpdf->useTemplate($tplIdx, 0, 0); - } - } - } - } - } - - //Anschließend das eigentliche SammelPDF zum PDF mit den Deckblättern hinzufügen - $pages_count = $containerpdf->setSourceFile($Brief->displayTMP()); - for($j = 1; $j <= $pages_count; $j++) - { - $containerpdf->AddPage(); - $tplIdx = $containerpdf->importPage($j); - $containerpdf->useTemplate($tplIdx, 0, 0); - } - $containerpdf->Output($this->app->erp->GetTMP().$this->app->erp->Dateinamen($Brief->filename),'F'); - $tmpfile = $this->app->erp->GetTMP().$this->app->erp->Dateinamen($Brief->filename); - }else{ - $tmpfile = $Brief->displayTMP(); - } - } - } - // eigentliches dokument - if($typ=="rechnung") - { - // sende - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new RechnungPDF($this->app,$projektbriefpapier); - } - $Brief->GetRechnung($id); - - if(isset($sammelpdf)) - { - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - } - - //$Brief->ArchiviereDocument(); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new RechnungPDF($this->app,$projektbriefpapier); - } - $Brief->GetRechnung($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - if(isset($sammelpdf)) - { - unlink($tmpfile); - if(class_exists('RechnungPDFCustom')) - { - $Brief = new RechnungPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new RechnungPDF($this->app,$projektbriefpapier); - } - $Brief->GetRechnung($id); - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - $tmpfile = $Brief->displayTMP(); - } - - //$Brief->ArchiviereDocument(); - - } - - // eigentliches dokument - if($typ=="gutschrift") - { - // sende - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('GutschriftPDFCustom')) - { - $Brief = new GutschriftPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new GutschriftPDF($this->app,$projektbriefpapier); - } - $Brief->GetGutschrift($id); - - if(isset($sammelpdf)) - { - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - } - - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('GutschriftPDFCustom')) - { - $Brief = new GutschriftPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new GutschriftPDF($this->app,$projektbriefpapier); - } - $Brief->GetGutschrift($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - if(isset($sammelpdf)) - { - unlink($tmpfile); - if(class_exists('GutschriftPDFCustom')) - { - $Brief = new GutschriftPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new GutschriftPDF($this->app,$projektbriefpapier); - } - $Brief->GetGutschrift($id); - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - $tmpfile = $Brief->displayTMP(); - } - } - - // eigentliches dokument - if($typ=="anfrage") - { - // sende - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('AnfragePDFCustom')) - { - $Brief = new AnfragePDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new AnfragePDF($this->app,$projektbriefpapier); - } - $Brief->GetAnfrage($id); - - if(isset($sammelpdf)) - { - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - } - - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('AnfragePDFCustom')) - { - $Brief = new AnfragePDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new AnfragePDF($this->app,$projektbriefpapier); - } - $Brief->GetAnfrage($id); - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - if(isset($sammelpdf)) - { - unlink($tmpfile); - if(class_exists('AnfragePDFCustom')) - { - $Brief = new AnfragePDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new AnfragePDF($this->app,$projektbriefpapier); - } - $Brief->GetAnfrage($id); - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - $tmpfile = $Brief->displayTMP(); - } - } - - // eigentliches dokument - if($typ=="preisanfrage") - { - // sende - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('PreisanfragePDFCustom')) - { - $Brief = new PreisanfragePDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new PreisanfragePDF($this->app,$projektbriefpapier); - } - $Brief->GetPreisanfrage($id); - - if(isset($sammelpdf)) - { - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - } - - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('PreisanfragePDFCustom')) - { - $Brief = new PreisanfragePDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new PreisanfragePDF($this->app,$projektbriefpapier); - } - $Brief->GetPreisanfrage($id); - - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - if(isset($sammelpdf)) - { - unlink($tmpfile); - if(class_exists('PreisanfragePDFCustom')) - { - $Brief = new PreisanfragePDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new PreisanfragePDF($this->app,$projektbriefpapier); - } - $Brief->GetPreisanfrage($id); - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - $tmpfile = $Brief->displayTMP(); - } - } - - - - - // eigentliches dokument - if($typ=="produktion") - { - // sende - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('ProduktionPDFCustom')) - { - $Brief = new ProduktionPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new ProduktionPDF($this->app,$projektbriefpapier); - } - $Brief->GetProduktion($id); - - if(isset($sammelpdf)) - { - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - } - - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('ProduktionPDFCustom')) - { - $Brief = new ProduktionPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new ProduktionPDF($this->app,$projektbriefpapier); - } - $Brief->GetProduktion($id); - - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - if(isset($sammelpdf)) - { - unlink($tmpfile); - if(class_exists('ProduktionPDFCustom')) - { - $Brief = new ProduktionPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new ProduktionPDF($this->app,$projektbriefpapier); - } - $Brief->GetProduktion($id); - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - $tmpfile = $Brief->displayTMP(); - } - } - - - // eigentliches dokument - if($typ=="proformarechnung") - { - // sende - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('ProformarechnungPDFCustom')) - { - $Brief = new ProformarechnungPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new ProformarechnungPDF($this->app,$projektbriefpapier); - } - $Brief->GetProformarechnung($id); - - if(isset($sammelpdf)) - { - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - } - - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - unlink($tmpfile); - $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; - if(class_exists('ProformarechnungPDFCustom')) - { - $Brief = new ProformarechnungPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new ProformarechnungPDF($this->app,$projektbriefpapier); - } - $Brief->GetProformarechnung($id); - - $tmpfile = $Brief->displayTMP(); - $Brief->ArchiviereDocument(true); - if(isset($sammelpdf)) - { - unlink($tmpfile); - if(class_exists('ProformarechnungPDFCustom')) - { - $Brief = new ProformarechnungPDFCustom($this->app,$projektbriefpapier); - }else{ - $Brief = new ProformarechnungPDF($this->app,$projektbriefpapier); - } - $Brief->GetProformarechnung($id); - foreach($sammelpdf as $dat) - { - $Brief->AddPDF($dat); - } - $tmpfile = $Brief->displayTMP(); - } - } - - if($typ!="") - { - if($typ=="brieffax") - $dateien = array($tmpbrief); - else - { - $this->RunHook('DokumentMask', 5, $typ, $id, $tmpfile, $sammelpdf, $art); - if(is_array($tmpfile)) - { - if(isset($tmpbrief) && $tmpbrief) - { - $dateien = array($tmpbrief); - foreach($tmpfile as $v)$dateien[] = $v; - }else{ - $dateien = $tmpfile; - } - }else{ - $dateien = array($tmpbrief,$tmpfile); - } - if(isset($_dateien))foreach ($_dateien as $dat)if($dat)$dateien[] = $dat; - } - } - - if($intern || $this->app->Secure->GetPOST('submit')!='') { - //echo "SENDEN"; - if($art=="fax"){ - $ret = $this->DokumentSend($adresse, $typ, $id, $art, $betreff, $text, $dateien, $drucker, $ansprechpartner, $projekt, $this->app->Secure->GetPOST("faxnummer"), ""); - }else{ - $weitereadressids = ''; - if($typ == 'preisanfrage'){ - $weitereadressids = $this->app->Secure->GetPOST('pran_adressids'); - if($weitereadressids != '' && $adresse > 0){ - $adresse .= ';'.$weitereadressids; - $this->app->erp->RunHook('preisanfrage_mails_abschicken', 13, $adresse, $typ, $id, $art, $betreff, $text, $dateien, $drucker, $ansprechpartner, $projekt, $partnerinfo['email'], $tmpcc, $tmpbcc); - }elseif($weitereadressids == ''){ - $ret = $this->DokumentSend($adresse, $typ, $id, $art, $betreff, $text, $dateien, $drucker, $ansprechpartner, $projekt, $partnerinfo['email'], $partnerinfo['name'], $tmpcc, $tmpbcc); - } - }else{ - $ret = $this->DokumentSend($adresse, $typ, $id, $art, $betreff, $text, $dateien, $drucker, $ansprechpartner, $projekt, $partnerinfo['email'], $partnerinfo['name'], $tmpcc, $tmpbcc); - } - } - if($tmpis == 0)$this->RunHook('dokumentsend_email',6, $typ, $id,$betreff,$text,$dateien, $intern); - if(isset($zuloeschen) && is_array($zuloeschen)) - { - foreach($zuloeschen as $zl)unlink($zl); - unset($zuloeschen); - } - - $this->BriefpapierHintergrundEnable(); - - /* - // NEU ANLEGEN ODER UPDATE - if($typ=="brieffax") - { - $check = $this->app->DB->Select("SELECT id FROM dokumente_send WHERE text='$text' AND betreff='$betreff' AND geloescht=0 AND versendet=0 ORDER by id DESC LIMIT 1"); - } else { - $check = $this->app->DB->Select("SELECT id FROM dokumente_send WHERE dokument='$typ' AND parameter='$id' AND geloescht=0 AND versendet=0 ORDER by id DESC LIMIT 1"); // GEHT bei BE RE LS - } - */ - - //Datei anlegen - - if($this->Firmendaten("belegeinanhang")=="1") { - $fileid = $this->CreateDateiWithStichwort($Brief->filename,$module,"","",$tmpfile,$this->app->User->GetName() ,$typ,$typ,$id, "",false); - /*$fileid = $this->CreateDatei($Brief->filename,$module,"","",$tmpfile,$this->app->User->GetName()); - - $this->AddDateiStichwort($fileid,$typ,$typ,$id,$without_log=false);*/ - } - - if(is_numeric($check) && $check >0) - { - /* - if($typ=="brieffax") - { - // das dokument gibt es so bereits 1:1 hier braucht man nichts machen - //echo "DAS DOKUMENT GIBT ES UNVERSENDET SO"; - $this->app->DB->Update("UPDATE dokumente_send SET versendet=1 WHERE id='$check' LIMIT 1"); - } - else - { - $this->app->DB->Update("UPDATE dokumente_send SET betreff='$betreff', text='$text',versendet=1 WHERE dokument='$typ' AND parameter='$id' AND geloescht=0 AND versendet=0 LIMIT 1"); // GEHT bei RE, LS .. - } - */ - } else { - if($typ=="brieffax") - { - $this->app->DB->Insert("INSERT INTO dokumente_send - (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet,dateiid) VALUES ('','$typ',NOW(),'".$this->app->User->GetName()."', - '$adresse','$parameter','$art','$betreff','$text','$projekt','$ansprechpartner',1,'$fileid')"); - $tmpid = $this->app->DB->GetInsertID(); - $this->app->DB->Update("UPDATE dokumente_send SET parameter='$tmpid' WHERE id='$tmpid' LIMIT 1"); - //echo "INSERT brieffax dokument"; - } else { - //echo "anlegen begleitschreiben RE, LS"; - //TODO ANSPRECHPARTNER - if($weitereadressids == ''){ - $this->app->DB->Insert("INSERT INTO dokumente_send - (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet,dateiid) VALUES ('','$typ',NOW(),'".$this->app->User->GetName()."', - '$adresse','$id','$art','$betreff','$text','$projekt','$ansprechpartner',1,'$fileid')"); - $tmpid = $this->app->DB->GetInsertID(); - } - } - - } - - if($ret == "") - { - if(!$intern)$this->app->Tpl->Set($parsetarget,"
Dokument wurde erfolgreich versendet
"); - - /* Status gezielt von Dokument aendern */ - if($typ=="bestellung") - { - $this->app->DB->Update("UPDATE bestellung SET versendet=1, versendet_am=NOW(), - versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE bestellung SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - $this->BestellungProtokoll($id,"Bestellung versendet"); - //TODO ARCHIVIEREN - } - else if($typ=="angebot") - { - $this->app->DB->Update("UPDATE angebot SET versendet=1, versendet_am=NOW(), - versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE angebot SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - $this->AngebotProtokoll($id,"Angebot versendet"); - //TODO ARCHIVIEREN - } - else if($typ=="lieferschein") - { - $this->app->DB->Update("UPDATE lieferschein SET versendet=1, versendet_am=NOW(), - versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE lieferschein SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - $this->LieferscheinProtokoll($id,"Lieferschein versendet"); - //TODO ARCHIVIEREN - } - else if($typ=="retoure") - { - $this->app->DB->Update("UPDATE retoure SET versendet=1, versendet_am=NOW(), - versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE retoure SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - $this->RetoureProtokoll($id,"Retoure versendet"); - //TODO ARCHIVIEREN - } - else if($typ=="arbeitsnachweis") - { - $this->app->DB->Update("UPDATE arbeitsnachweis SET versendet=1, versendet_am=NOW(), - versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE arbeitsnachweis SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - $this->ArbeitsnachweisProtokoll($id,"Arbeitsnachweis versendet"); - //TODO ARCHIVIEREN - } - else if($typ=="reisekosten") - { - $this->app->DB->Update("UPDATE reisekosten SET versendet=1, versendet_am=NOW(), - versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE reisekosten SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - $this->ReisekostenProtokoll($id,"Reisekosten versendet"); - //TODO ARCHIVIEREN - } - - else if($typ=="auftrag") - { - $this->app->DB->Update("UPDATE auftrag SET versendet=1, versendet_am=NOW(), - versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); - //$this->app->DB->Update("UPDATE auftrag SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - $this->AuftragProtokoll($id,"Auftrag versendet"); - //TODO ARCHIVIEREN - } - else if ($typ=="rechnung") - { - $this->app->DB->Update("UPDATE rechnung SET versendet=1, versendet_am=NOW(), - versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->closeInvoice($id,'freigegeben'); - $this->app->DB->Update("UPDATE rechnung SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - $this->RechnungProtokoll($id,"Rechnung versendet"); - //TODO ARCHIVIEREN - } - else if ($typ=="gutschrift") - { - $this->app->DB->Update("UPDATE gutschrift SET versendet=1, versendet_am=NOW(), - versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE gutschrift SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - $this->GutschriftProtokoll($id,"Gutschrift versendet"); - //TODO ARCHIVIEREN - } - else if ($typ=="proformarechnung") - { - $this->app->DB->Update("UPDATE proformarechnung SET versendet=1, versendet_am=NOW(), - versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE proformarechnung SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - $this->ProformarechnungProtokoll($id,"Proformarechnung versendet"); - //TODO ARCHIVIEREN - } - else if ($typ=="preisanfrage") - { - $this->app->DB->Update("UPDATE preisanfrage SET versendet=1, versendet_am=NOW(), - versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE preisanfrage SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - $this->PreisanfrageProtokoll($id,"Preisanfrage versendet"); - //TODO ARCHIVIEREN - }else if ($typ=="spedition") - { - $this->app->DB->Update("UPDATE spedition SET versendet=1, schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE spedition SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); - $this->app->DB->Insert("INSERT INTO spedition_protokoll (bearbeiter, grund, avi) VALUES ('".$this->app->DB->real_escape_string($this->app->User->GetName())."', 'Spedition versendet', '$id')"); - } - - $this->RunHook('DokumentMaskVersendet', 2, $typ, $id); - } - else { - $this->BelegProtokoll($typ,$id,$ret); - if(!$intern)$this->app->Tpl->Set($parsetarget,"
$ret
"); - } - } elseif ($this->app->Secure->GetPOST("speichern")!="") { - //echo "SPEICHERN"; - // Nur speichern - $action = $this->app->Secure->GetGET("action"); - $module = $this->app->Secure->GetGET("module"); - - if($module=="adresse") - { - $check = $this->app->DB->Select("SELECT id FROM dokumente_send WHERE dokument='brieffax' AND geloescht=0 AND versendet=0 ORDER by id DESC LIMIT 1"); - } else { - $check = $this->app->DB->Select("SELECT id FROM dokumente_send WHERE dokument='$typ' AND parameter='$id' AND geloescht=0 AND versendet=0 ORDER by id DESC LIMIT 1"); // GEHT bei BE RE LS - } - - if($module=="adresse") - { - $typ="brieffax"; - if(is_numeric($check)) - { - $this->app->DB->Insert("UPDATE dokumente_send SET betreff='$betreff',text='$text',bearbeiter='".$this->app->User->GetName()."' WHERE id='$check' LIMIT 1"); - $this->app->Tpl->Set('MESSAGE',"
Die Änderungen wurden gespeichert.
"); - } else { - $this->app->DB->Insert("INSERT INTO dokumente_send - (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet) VALUES ('','$typ',NOW(),'".$this->app->User->GetName()."', - '$adresse','$parameter','$art','$betreff','$text','$projekt','$ansprechpartner',0)"); - $this->app->Tpl->Set('MESSAGE',"
Es wurde ein neues Dokument wurde angelegt, da das alte Dokument bereits versendet worden ist.
"); - } - } else { - - if(is_numeric($check)) - { - $this->app->DB->Update("UPDATE dokumente_send SET betreff='$betreff',text='$text',bearbeiter='".$this->app->User->GetName()."' WHERE id='$check' LIMIT 1"); - $this->app->Tpl->Set('MESSAGE',"
Die Änderungen wurden gespeichert.
"); - } else { - $parameter = $this->app->Secure->GetGET("id"); - $this->app->DB->Insert("INSERT INTO dokumente_send - (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet) VALUES ('','$typ',NOW(),'".$this->app->User->GetName()."', - '$adresse','$parameter','$art','$betreff','$text','$projekt','$ansprechpartner',0)"); - $this->app->Tpl->Set('MESSAGE',"
Es wurde ein neues Dokument wurde angelegt, da das alte Dokument bereits versendet worden ist.
"); - } - } - - }elseif($this->app->Secure->GetPOST("download")!="") { - header("Location: index.php?module=adresse&action=briefpdf&sid=$id&id=$adresse"); - exit; - } - } -// ENDE SCHLEIFE - if(!$intern) - { - $tmp_fax = $this->app->DB->Select("SELECT telefax FROM $typ WHERE id='$id' LIMIT 1"); - $tmp_fax = str_replace('+','00',$tmp_fax); - $n = preg_match_all("/[0-9]/", $tmp_fax, $treffer); - for($i=0;$i<$n;$i++){ - $nummer = $nummer . $treffer[0][$i]; - if($n%2 == 1 && $i%2 == 0 && $i < $n-1){ - $nummer = $nummer . ""; - }elseif($n%2 == 0 && $i%2 == 1 && $i < $n-1){ - $nummer = $nummer . ""; - } - } - $this->app->Tpl->Set('FAXNUMMER',$nummer); - if(!empty($this->app->User) && method_exists($this->app->User, 'GetParameter')){ - if($this->app->User->GetParameter('dokumente_abschickenmask_' . $typ . "_brief") == '1'){ - $this->app->Tpl->Set("BRIEFCHECKED", 'checked'); - } - - if($this->app->User->GetParameter('dokumente_abschickenmask_' . $typ . "_email") == '1') { - $this->app->Tpl->Set("EMAILCHECKED", 'checked'); - } - if($this->app->User->GetParameter('dokumente_abschickenmask_' . $typ . "_fax") == '1') { - $this->app->Tpl->Set("FAXCHECKED", 'checked'); - } - if($this->app->User->GetParameter('dokumente_abschickenmask_' . $typ . "_telefon") == '1') { - $this->app->Tpl->Set("TELEFONCHECKED", 'checked'); - } - if($this->app->User->GetParameter('dokumente_abschickenmask_' . $typ . "_sonstiges") == '1') { - $this->app->Tpl->Set("SONSTIGESCHECKED", 'checked'); - } - - $selected = $this->app->User->GetParameter('drucker_dokumentmask_' . $typ); - $this->app->Tpl->Set('DRUCKER', $this->GetSelectDrucker($selected)); - } - $this->app->Tpl->Set('FAX',$this->GetSelectFax()); - $this->app->Tpl->Set('EMAILEMPFAENGER',$this->GetSelectEmail()); - $projektabkuerzung = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$projekt'"); - $this->app->Tpl->Set('PROJEKT',$projektabkuerzung); - //$this->app->Tpl->Set(PROJEKT,$this->GetProjektSelect($projekt)); - // $this->app->Tpl->Set(ANSPRECHPARTNER,$this->GetSelectAnsprechpartner($adresse,$projekt)); - $tmp_mail = $this->app->DB->Select("SELECT email FROM $typ WHERE id='$id' LIMIT 1"); - $tmp_name = $this->app->DB->Select("SELECT ansprechpartner FROM $typ WHERE id='$id' LIMIT 1"); - if($tmp_name=="") - $tmp_name = $this->app->DB->Select("SELECT name FROM $typ WHERE id='$id' LIMIT 1"); - - //$this->app->Tpl->Set(ANSPRECHPARTNER,$tmp_name." <".$tmp_mail.">"); - - - $this->app->Tpl->Set('ANSPRECHPARTNER',$this->GetAdresseMail($adresse,$id,$typ)); - $this->app->Tpl->Set('SELECTUNSICHTBAR', ''); - $this->app->Tpl->Set('MANUELLUNSICHTBAR', 'display:none;'); - - - //$this->app->YUI->AutoComplete('ansprechpartner', 'emailname'); - $this->app->YUI->AutoComplete('projekt', 'projektname',1); - - $projekt = $this->app->DB->Select("SELECT projekt FROM $typ WHERE id='$id' LIMIT 1"); - $this->DokumentSendShow($parsetarget,$typ,$id,$adresse,$tmpfile,$popup,$projekt); - } - // temp datei wieder loeschen - if(@is_file($tmpfile))unlink($tmpfile); - if(@is_file($tmpbrief))unlink($tmpbrief); - } - - function GetAdresseMail($adresse,$id="",$tabelle="") { - // hole adresse aus feld ansprechpartner - - $tmp_mail = $this->app->DB->Select("SELECT email FROM $tabelle WHERE id='$id' LIMIT 1"); - $tmp_name = $this->app->DB->Select("SELECT ansprechpartner FROM $tabelle WHERE id='$id' LIMIT 1"); - - if($tmp_name=="") - $tmp_name = $this->app->DB->Select("SELECT name FROM $tabelle WHERE id='$id' LIMIT 1"); - - $data[0]['name']=$tmp_name; - $data[0]['email']=$tmp_mail; - - // doppelte eintraege loeschen - - if($data[0]['email']==$tmp_mail) - { - $result = ""; - } - else - $result = ""; - - $data = $this->app->DB->SelectArr("SELECT name, email FROM adresse WHERE id='$adresse' ORDER by name"); - $data2 = $this->app->DB->SelectArr("SELECT name, email FROM ansprechpartner WHERE adresse='$adresse' ORDER by name"); - - foreach($data2 as $item) - { - $check=false; - foreach($data as $check_item) - { - if($item['name']==$check_item['name'] && $item['email']==$check_item['email']) - $check=true; - } - - if($check!=true) - $data[]=array('name'=>$item['name'],'email'=>$item['email']); - } - - for($i=0;$i{$data[$i]['name']} <{$data[$i]['email']}>"; - else - $result .= ""; - } - } - return $result; - } - - - function DokumentSendShow($parsetarget,$dokument,$id,$adresse,$attachments="",$popup=false,$projekt="", $intern = false) - { - $return = null; - - $this->BriefpapierHintergrunddisable = false; - $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - $name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - $name2 = $this->app->DB->Select("SELECT name FROM $dokument WHERE id='$id' LIMIT 1"); - - - $abperfax = $this->app->DB->Select("SELECT abperfax FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - if($abperfax=="1") $this->app->Tpl->Set('ABPERFAX',"checked"); - - $testdata = null;//@todo check query $this->app->DB->SelectArr("SELECT betreff WHERE dokument='".$dokument."' AND parameter='$id' AND parameter!=0 ORDER BY zeit DESC LIMIT 1"); - - if($sprache=="") $sprache="deutsch"; - - - - switch($dokument) - { - case "bestellung": - if($tmp_data[0]['betreff']!="") - $this->DokumentSendVorlage($id); - else - { - $return = $this->Geschaeftsbriefvorlage($sprache,"Bestellung",$projekt,$name2,$id, $intern); - if(!$intern) - { - $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); - }else{ - $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); - } - } - break; - case "angebot": - $return = $this->Geschaeftsbriefvorlage($sprache,"Angebot",$projekt,$name2,$id, $intern); - if(!$intern) - { - $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); - }else{ - $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); - } - break; - case "lieferschein": - $return = $this->Geschaeftsbriefvorlage($sprache,"Lieferschein",$projekt,$name2,$id, $intern); - if(!$intern) - { - $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); - }else{ - $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); - } - break; - case "retoure": - $return = $this->Geschaeftsbriefvorlage($sprache,"Retoure",$projekt,$name2,$id, $intern); - if(!$intern) - { - $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); - }else{ - $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); - } - break; - case "rechnung": - $return = $this->Geschaeftsbriefvorlage($sprache,"Rechnung",$projekt,$name2,$id, $intern); - if(!$intern) - { - $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); - }else{ - $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); - } - break; - case "gutschrift": - $return = $this->Geschaeftsbriefvorlage($sprache,"Gutschrift",$projekt,$name2,$id, $intern); - if(!$intern) - { - $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); - }else{ - $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); - } - break; - - case "auftrag": - $return = $this->Geschaeftsbriefvorlage($sprache,"Auftrag",$projekt,$name2,$id, $intern); - if(!$intern) - { - $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); - }else{ - $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); - } - break; - case "arbeitsnachweis": - $return = $this->Geschaeftsbriefvorlage($sprache,"Auftrag",$projekt,$name2,$id, $intern); - if(!$intern) - { - $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); - }else{ - $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); - } - break; - - case "proformarechnung": - $return = $this->Geschaeftsbriefvorlage($sprache,"Proformarechnung",$projekt,$name2,$id, $intern); - if(!$intern) - { - $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); - }else{ - $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); - } - break; - case "preisanfrage": - $return = $this->Geschaeftsbriefvorlage($sprache,"Preisanfrage",$projekt,$name2,$id, $intern); - if(!$intern) - { - $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); - }else{ - $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); - } - break; - case "produktion": - $return = $this->Geschaeftsbriefvorlage($sprache,"Produktion",$projekt,$name2,$id, $intern); - if(!$intern) - { - $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); - }else{ - $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); - } - break; - - - case "brieffax": - if($testdata!="") - $this->DokumentSendVorlage($id); - else - { - $return = $this->Geschaeftsbriefvorlage($sprache,"Korrespondenz",$projekt,$name2, $intern); - if(!$intern) - { - $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); - }else{ - $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); - } - } - break; - - default: ; - } - - if(!$intern && !empty($this->app->User) && method_exists($this->app->User, 'GetParameter') && - $this->app->User->GetParameter('dokument_absenden_alleartikel')=='1') - { - $tabelle = strtolower($dokument); - $dateianhaenge = $this->app->DB->SelectArr("SELECT DISTINCT ds.id, ds.datei, d.titel,ds.subjekt, ds.objekt, ds.sort FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id where d.geloescht <> 1 AND (ds.parameter = '$id' AND ds.objekt like '$dokument') OR ((ds.parameter IN (SELECT DISTINCT artikel FROM ".$tabelle."_position WHERE ".$tabelle."='$id') ) AND ds.objekt like 'artikel') ORDER BY ds.objekt like '$dokument' DESC, ds.sort"); - } else { - $dateianhaenge = $this->app->DB->SelectArr("SELECT DISTINCT ds.id, ds.datei, d.titel,ds.subjekt, ds.objekt, ds.sort FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id where d.geloescht <> 1 AND ds.parameter = '$id' AND ds.objekt like '$dokument' AND ds.subjekt!='$dokument' ORDER BY ds.sort"); - if($intern)$intern['dateianhaenge'] = $dateianhaenge; - } - if($intern)return $return; - if($dateianhaenge) - { - $sort = 0; - foreach($dateianhaenge as $dk => $dv) - { - $sort++; - if(strtolower($dv['objekt']) == strtolower($dokument)) - { - if($dv['sort'] != $sort)$this->app->DB->Update("UPDATE datei_stichwoerter SET sort = '$sort' WHERE id = '".$dv['id']."' LIMIT 1"); - $dateianhaenge[$dk]['sort'] = $sort; - } - } - foreach($dateianhaenge as $dk => $dv) - { - if(strtolower($dv['subjekt'])=="anhang") $checked="checked"; else $checked=""; - $dateiname = $this->GetDateiName($dv['datei']); - - if($this->app->User->GetParameter("dokument_absenden_sammelpdf")=="1" && strtolower($dv['objekt']) == strtolower($dokument)) - { - $extraspalte = ""; - } else $extraspalte=" "; - - $this->app->Tpl->Add('DATEIANHAENGE',''.$dateiname.''.$extraspalte.''); - - } - } else { - $this->app->Tpl->Add('DATEIANHAENGE','Keine Anhänge vorhanden.
Dateien können unter dem Reiter "Dateien"
als Anhang dem Dokument
angehängt werden.
'); - } - - $module = $this->app->Secure->GetGET("module"); - $id = $this->app->Secure->GetGET("id"); - - if($module=="adresse") - { - //echo "Fall 1"; - // genau das eine dokument - $tmp = $this->app->DB->SelectArr("SELECT DATE_FORMAT(zeit,'%d.%m.%Y %H:%i') as datum, dateiid, text, betreff, ansprechpartner, id, adresse, bearbeiter,art, dokument, parameter, versendet FROM dokumente_send WHERE dokument='".$dokument."' - AND id='$id' AND parameter!=0 AND versendet=1 ORDER by zeit DESC"); - //echo ("SELECT DATE_FORMAT(zeit,'%d.%m.%Y %H:%i') as zeit, text, betreff, id, adresse, bearbeiter,art, dokument, parameter, versendet FROM dokumente_send WHERE dokument='".$dokument."' - // AND id='$id' parameter!=0 AND versendet=1 ORDER by zeit"); - - } - else - { - // alle passenden dokumente - $tmp = $this->app->DB->SelectArr("SELECT DATE_FORMAT(zeit,'%d.%m.%Y %H:%i') as datum, text, dateiid, ansprechpartner, betreff, id, adresse, versendet, parameter, dokument, bearbeiter,art FROM dokumente_send WHERE dokument='".$dokument."' AND parameter='$id' AND parameter!=0 ORDER by zeit DESC"); - //echo "Fall 2"; - - } - - if(count($tmp)>0) - { - $this->app->Tpl->Set('HISTORIE',""); - $this->app->Tpl->Add('HISTORIE'," - - "); - for($i=0;$iapp->DB->Select("SELECT name FROM adresse WHERE id='{$tmp[$i]['adresse']}' AND geloescht=0 LIMIT 1"); - if(is_numeric($tmp[$i]['ansprechpartner'])) - $tmp_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='".$tmp[$i]['ansprechpartner']."'"); - else - $tmp_name = htmlentities($tmp[$i]['ansprechpartner'],ENT_QUOTES, "UTF-8"); - - //$tmp_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='{$tmp[$i]['adresse']}' AND geloescht=0 LIMIT 1"); - - if($tmp[$i]['dateiid'] > 0) $tmppdf = ''; - else $tmppdf=""; - - $this->app->Tpl->Add('HISTORIE',' - - - - - '); - } - $this->app->Tpl->Add('HISTORIE',"
ZeitAnVonArtAnschreibenDokument
'.$tmp[$i]['datum'].''.$tmp_name.''.$tmp[$i]['bearbeiter'].''.ucfirst($tmp[$i]['art']).''.$tmppdf.'
"); - - } else { $this->app->Tpl->Set('HISTORIE',"
Dieses Dokument wurde noch nicht versendet!
"); } - - - for($i=0;$iapp->Tpl->Add('ANHAENGE',"".basename($attachments)." "); - } - if(count($attachments)==0) $this->app->Tpl->Add('ANHAENGE',"keine Anhänge vorhanden"); - - if(count($tmp)>0) - { - $tmp[0]['betreff'] = str_replace('{FIRMA}',$this->Firmendaten("name"),$tmp[0]['betreff']); - $tmp[0]['text'] = str_replace('{FIRMA}',$this->Firmendaten("name"),$tmp[0]['text']); - - $tmp[0]['betreff'] = $this->ParseUserVars($dokument,$id, $tmp[0]['betreff']); - $tmp[0]['text'] = $this->ParseUserVars($dokument,$id, $tmp[0]['text']); - - if($tmp[0]['betreff']!="") - $this->app->Tpl->Set('BETREFF',$tmp[0]['betreff']); - if($tmp[0]['text']!="") - $this->app->Tpl->Set('TEXT',$tmp[0]['text']); - } - - - $tmp = new EasyTable($this->app); - if($dokument == 'spedition'){ - $tmp->Query("SELECT zeit,bearbeiter,grund FROM ".$dokument."_protokoll WHERE avi='$id' ORDER by zeit DESC"); - }else{ - $tmp->Query("SELECT zeit,bearbeiter,grund FROM ".$dokument."_protokoll WHERE $dokument='$id' ORDER by zeit DESC"); - } - $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction"); - - $this->app->YUI->AutoSaveUserParameter("alleartikel","dokument_absenden_alleartikel","window.location.href='index.php?module=$dokument&action=abschicken&id=$id';"); - if(!empty($this->app->User) && method_exists($this->app->User, 'GetParameter') && $this->app->User->GetParameter("dokument_absenden_alleartikel")=="1") - { - $this->app->Tpl->Set("ALLEARTIKEL","checked"); - } - - $this->app->YUI->AutoSaveUserParameter("sammelpdf","dokument_absenden_sammelpdf","window.location.href='index.php?module=$dokument&action=abschicken&id=$id';"); - if(!empty($this->app->User) && method_exists($this->app->User, 'GetParameter') && $this->app->User->GetParameter("dokument_absenden_sammelpdf")=="1") - { - $this->app->Tpl->Set("SAMMELPDF","checked"); - } - - - - $this->app->YUI->CkEditor("text","internal",array("height"=>"450")); - if(is_file('pages/content/dokument_absenden_vorlage.tpl')) - { - $this->app->Tpl->Set('EMPFAENGER',$name); - $pTemplate = (($popup==true) ? 'dokument_absenden_popup.tpl' : 'dokument_absenden_vorlage.tpl'); - $this->app->Tpl->Parse($parsetarget, $pTemplate); - } else { - $this->app->Tpl->Set('EMPFAENGER',$name); - $pTemplate = (($popup==true) ? 'dokument_absenden_popup.tpl' : 'dokument_absenden.tpl'); - if($popup != true) - { - $this->app->Tpl->Add('EMAILHOOK', ''); - $this->RunHook('dokument_absenden_email', 2, $dokument, $id); - } - $this->app->Tpl->Parse($parsetarget, $pTemplate); - } - } - - //art=email,betreff,text,dateien, email_to, email_name_to - function DokumentSend($adresse,$dokument, $parameter, $art,$betreff,$text,$dateien,$drucker="",$ansprechpartner="",$projekt="",$email_to="", $email_name_to="",$cc="",$bcc="") - { - - // $ret muss geleert werden wenn Dokument erfolgreich versendet wurde!! - $ret = "Das Dokument konnte nicht versendet werden! (Bitte wählen Sie eine Versandoption aus um das Dokument zu versenden)"; - - //$text = $this->ParseUserVars($dokument,$parameter,$text); - //$betreff = $this->ParseUserVars($dokument,$parameter,$betreff); - - - if($dokument!="" && $drucker!="") - $this->app->User->SetParameter("drucker_dokumentmask_".$dokument,$drucker); - - - switch($art) - { - case "email": // signatur + dokument als anhang - $ret = ""; - if($email_to!='') { - $to = $email_to; - $to_name = $email_name_to; - }else{ - if($ansprechpartner!=0) - { - $to = $this->app->DB->Select("SELECT email FROM ansprechpartner WHERE id='$ansprechpartner' LIMIT 1"); - $to_name = $this->app->DB->Select("SELECT name FROM ansprechpartner WHERE id='$ansprechpartner' LIMIT 1"); - } else - { - $to = $this->app->DB->Select("SELECT email FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - $to_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - } - } - // wenn emailadresse from email from user name von benutzer sonst firmenname - if($drucker==$this->app->User->GetEmail()) - $from_name = $this->app->User->GetName(); - else { - $from_name = $this->app->DB->Select("SELECT absendername FROM firmendaten WHERE absendername!='' AND email!='' AND email='$drucker' LIMIT 1"); - - if($from_name=="") - $from_name = $this->app->DB->Select("SELECT smtp_fromname FROM emailbackup WHERE smtp_fromname!='' AND smtp_frommail!='' AND smtp_frommail='$drucker' AND geloescht!=1 LIMIT 1"); - } - - if($from_name=="") - $from_name=$this->GetFirmaAbsender(); - - if($drucker=="") - $drucker=$this->GetFirmaMail(); - - - if($dokument=="auftrag") - { - $abweichendeemailab = $this->app->DB->Select("SELECT abweichendeemailab FROM adresse WHERE id='$adresse' AND geloescht!=1 LIMIT 1"); - if($abweichendeemailab!="") $to = $abweichendeemailab; - } - $cc_empfaengerausadresse = $this->app->DB->Select("SELECT ".$dokument."_cc FROM adresse WHERE id='$adresse' AND geloescht!=1 LIMIT 1"); - - $cc_empfaenger = []; - $bcc_empfaenger = []; - - if(!empty($cc_empfaengerausadresse)){ - $cc_empfaenger = explode(',',$cc_empfaengerausadresse); - } - - $text = str_replace('\"','"',$text); - - if($cc!="") { - if (strpos($cc, ',') !== false) { - $tmpcc = explode(',',$cc); - $cc_empfaenger = array_merge($cc_empfaenger, $tmpcc); - } else - $cc_empfaenger[] = trim($cc); - } - if($bcc!="") { - if (strpos($bcc, ',') !== false) { - $tmpbcc = explode(',',$bcc); - $bcc_empfaenger = array_merge($bcc_empfaenger, $tmpbcc); - } else - $bcc_empfaenger[] = trim($bcc); - } - - foreach($cc_empfaenger as $index => $empfaenger){ - $cc_empfaenger[$index] = trim(trim($empfaenger,'>'),'<'); - } - foreach($bcc_empfaenger as $index => $empfaenger){ - $bcc_empfaenger[$index] = trim(trim($empfaenger,'>'),'<'); - } - - if($this->MailSend($drucker,$from_name,$to,$to_name,$betreff,$text,$dateien,$projekt,true,$cc_empfaenger,$bcc_empfaenger)){ - $ret = ""; - $this->RunHook('documentsend_email_success', 8, $dokument, $parameter, $drucker, $to, $to_name, $betreff, $text, $dateien); - } - else { - if($to=="") - $ret = "Keine Empfängeradresse gefunden. E-Mail konnte nicht versendet werden."; - else - $ret = "Die E-Mail konnte nicht versendet werden! (".$this->mail_error.")"; - } - - break; - - case "brief": - foreach($dateien as $key=>$value) - $this->app->printer->Drucken($drucker,$value); - $ret = ""; - break; - - case "fax": - foreach($dateien as $key=>$value) - $this->app->printer->Drucken($drucker,$value,$email_to); - $ret = ""; - break; - - case "telefon": - $ret = ""; - break; - case "sonstiges": - $ret = ""; - break; - - } - - $this->app->erp->RunHook('dokumentsend_ende', 5, $dokument, $parameter, $projekt, $adresse, $art); - - return $ret; - } - - - function NewEvent($beschreibung, $kategorie, $objekt='',$parameter='') - { - - $bearbeiter = $this->app->User->GetName(); - - $this->app->DB->Insert("INSERT INTO event (id,beschreibung,kategorie,zeit,objekt,parameter,bearbeiter) - VALUES('','$beschreibung','$kategorie',NOW(),'$objekt','$parameter','$bearbeiter')"); - - } - - function UpdateChecksumShopartikel($projekt) - { - $tmp = $this->app->DB->SelectArr("SELECT id FROM artikel WHERE shop > 0"); - if(empty($tmp)) { - return; - } - foreach($tmp as $row) { - $this->UpdateArtikelChecksum($row['id'], $projekt); - } - } - - function UpdateArtikelChecksum($artikel,$projekt) - { - $tmp = $this->app->DB->SelectArr("SELECT typ, - nummer, projekt, inaktiv, warengruppe, name_de, name_en, kurztext_de, ausverkauft, - kurztext_en , beschreibung_de, beschreibung_en,standardbild, herstellerlink, hersteller, uebersicht_de,uebersicht_en,links_de,links_en, startseite_de, startseite_en, - lieferzeit , lieferzeitmanuell, wichtig, gewicht, sperrgrund, gueltigbis,umsatzsteuer, klasse, adresse, shop, firma, neu,topseller,startseite, - (SELECT MAX(preis) FROM verkaufspreise WHERE - artikel='$artikel' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND ab_menge = 1 AND (adresse='0' OR adresse='')) as preis - FROM artikel WHERE id='$artikel' LIMIT 1"); - - // artikel='$artikel' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND ab_menge = 1 AND (objekt='Standard' OR objekt='')) as preis - serialize($tmp); - - $checksum = md5(serialize($tmp)); - - $this->app->DB->Update("UPDATE artikel SET checksum='$checksum' WHERE id='$artikel' LIMIT 1"); - } - - function GetStandardMarge() - { - return $this->Firmendaten("standardmarge"); - } - - - function GetStandardStundensatz() - { - return 57.62; - } - - /** @deprecated */ - function GetProjektSelectMitarbeiter($adresse) - { - // Adresse ist Mitglied von Projekt xx - // gibt man kein parameter an soll alles zurueck - // entsprechen weitere parameter filtern die ausgabe - $arr = $this->app->DB->SelectArr("SELECT adresse FROM bla bla where rolle=mitarbeiter von projekt xxx"); - foreach($arr as $value) - { - if($selected==$value) $tmp = "selected"; else $tmp=""; - $ret .= ""; - } - return $ret; - - - } - - function GetArtikelPreisvorlageProjekt($kunde,$projekt,$artikel,$menge) - { - //HACK! - return $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE projekt='$projekt' AND artikel='$artikel'"); - } - - // do not use this function! - function GetAuftragSteuersatz($auftrag) - { - //ermitteln aus Land und UST-ID Prüfung - return 1.19; - } - - function GetSteuersatzAssoc($id,$typ) - { - $steuersatzErmaessigt = $this->GetSteuersatzErmaessigt(false,$id,$typ); - $steuersatzNormal = $this->GetSteuersatzNormal(false,$id,$typ); - - return [ - 0=>'0 %', - $steuersatzErmaessigt=>$steuersatzErmaessigt.' %', - $steuersatzNormal=>$steuersatzNormal.' %' - ]; - } - - function GetSteuersatz($id,$typ) - { - - $tmp[] = 0; - $tmp[] = $this->GetSteuersatzErmaessigt(false,$id,$typ); - $tmp[] = $this->GetSteuersatzNormal(false,$id,$typ); - - return $tmp; - } - - function GetSelectSteuersatz($selected,$id,$typ) - { - $tmp = $this->GetSteuersatz($id,$typ); - $ret = ''; - foreach($tmp as $key=>$value) - { - $tmp = ''; - if($selected==$value) { - $tmp = 'selected'; - } - $ret .= ""; - } - return $ret; - } - - - function GetSteuersatzNormal($komma, $id, $typ) - { - $steuersatz = 0; - if($typ==='provisionsgutschrift'){ - $steuersatz = $this->app->DB->Select("SELECT steuersatz FROM mlm_abrechnung_adresse WHERE id='$id' LIMIT 1"); - } - elseif($typ !== 'lieferschein'){ - $steuersatz = $this->app->DB->Select("SELECT steuersatz_normal FROM $typ WHERE id='$id' LIMIT 1"); - } - - if($komma){ - return ($steuersatz / 100.0) + 1.0; //1.19 - } - - return $steuersatz; - } - - function GetSteuersatzErmaessigt($komma, $id, $typ) - { - $steuersatz = 0; - if($typ !== 'lieferschein'){ - $steuersatz = $this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $typ WHERE id='$id' LIMIT 1"); - } - - if($komma){ - return ($steuersatz / 100.0) + 1.0; //1.19 - } - - return $steuersatz; - } - - function GetSteuersatzBefreit($komma, $id, $typ) - { - if($komma){ - return 1.00; - } - - return 0.00; - } - - - function GetKreditkarten() - { - - return array('MasterCard','Visa','American Express'); - } - - function GetKreditkartenSelect($selected) - { - $ret = ''; - foreach($this->GetKreditkarten() as $value) - { - $tmp = ''; - if($selected==$value) { - $tmp = 'selected'; - } - $ret .= ""; - } - return $ret; - } - - - function GetKundeSteuersatz($kunde) - { - - - } - - function AddUSTIDPruefungKunde($kunde) - { - //gebunden an eine adresse - - - } - - function GetVersandkosten($projekt) - { - - return 3.32; - } - - - - function AuftraegeBerechnen() - { - $this->app->erp->SetKonfigurationValue('last_order_calc',date('d.m.Y H:i:s')); - $this->app->DB->Delete("DELETE r FROM lager_reserviert r LEFT JOIN auftrag a ON r.objekt = 'auftrag' AND r.parameter = a.id AND a.status = 'freigegeben' WHERE r.objekt = 'auftrag' AND isnull(a.id)"); - if(!empty($this->app->User) && method_exists($this->app->User, 'GetID') && $this->app->User->GetID()) - { - $limit = (int)$this->app->erp->Firmendaten('autoversand_maxauftraege'); - }else { - $limit = 0; - } - $auftraege = $this->app->DB->SelectArr("SELECT id FROM auftrag WHERE status='freigegeben' AND inbearbeitung=0 AND autoversand=1 ORDER BY fastlane = 1 DESC, datum ".($limit > 0?" LIMIT $limit ":'')); - if(empty($auftraege)) { - return; - } - foreach($auftraege as $auftrag) { - //$this->app->erp->AuftragNeuberechnen($auftraege[$i][id]); - $this->AuftragEinzelnBerechnen($auftrag['id']); - } - } - - function KalkulationNeuberechnen($id) - { - /** @var Kalkulation $obj */ - $obj = $this->LoadModul('kalkulation'); - if(!empty($obj) && method_exists($obj,'KalkulationNeuberechnen')) - { - $obj->KalkulationNeuberechnen($id); - } - } - - - function AddArtikelAuftrag($artikel,$auftrag,$menge=1) - { - if(!is_numeric($menge)) { - $menge = 1; - } - $articleRow = $this->app->DB->SelectRow("SELECT name_de,anabregs_text FROM artikel WHERE id='$artikel' LIMIT 1"); - $name = $articleRow['name_de']; - $beschreibung = $articleRow['anabregs_text']; - - $this->AddPositionManuell("auftrag",$auftrag, $artikel,$menge,$name,$beschreibung); - } - - function DelArtikelAuftrag($id) - { - //loesche artikel von auftrag und schiebe positionen nach - - - } - - - function GetAuftragStatus($auftrag) - { - - - - } - - - function IsEU($land) - { - foreach($this->GetUSTEU() as $euland) - { - if($land==$euland) - return true; - } - - // alle anderen laender sind export! - return false; - } - - - function Export($land) - { - if($land == '' || $land==$this->Firmendaten('land')){ - return false; - } - - return !$this->IsEU($land); - } - - - function GetEU() - { - return $this->GetUSTEU(false); - } - - function GetUSTEU($ust=false) - { - $isoGreece = 'GR'; - if($ust){ - $isoGreece = 'EL'; - } - - $checklaender = $this->app->DB->Select('SELECT id FROM laender LIMIT 1'); - if($checklaender > 0 ) - { - $laender = $this->app->DB->SelectArr("SELECT iso FROM laender WHERE eu=1 ORDER by iso"); - $ret = null; - foreach($laender as $land) { - if($land['iso'] === 'GR'){ - $ret[] = $isoGreece; - }else{ - $ret[] = $land['iso']; - } - } - return $ret; - } - - return - array('DE','BE','IT','RO', - 'BG','LV','SE', - 'DK','LT','SK', - 'DE','LU','SI', - 'EE','MT','ES', - 'FI','NL','CZ', - 'FR','AT','HU', - $isoGreece,'PL', - 'IE','PT','CY','HR'); - } - - - function CheckUSTFormat($ust) - { - /* - * method not removed for downward compatibility - */ - return USTID::CheckUSTFormat($ust); - } - - - function CheckUst($ust1,$ust2, $firmenname, $ort, $strasse, $plz, $druck="nein") - { - $tmp = new USTID(); - //$status = $tmp->check("DE263136143","SE556459933901","Wind River AB","Kista","Finlandsgatan 52","16493","ja"); - $status = $tmp->check($ust1, $ust2, $firmenname, $ort, $strasse, $plz, $druck,$onlinefehler); - -/* - if($tmp->answer['Erg_Name'] == 'A')$tmp->answer['Erg_Name'] = ''; - if($tmp->answer['Erg_Ort'] == 'A')$tmp->answer['Erg_Ort'] = ''; - if($tmp->answer['Erg_Str'] == 'A')$tmp->answer['Erg_Str'] = ''; - if($tmp->answer['Erg_PLZ'] == 'A')$tmp->answer['Erg_PLZ'] = ''; -*/ - $erg = array( - 'ERG_NAME' => $tmp->answer['Erg_Name'], - 'ERG_ORT' => $tmp->answer['Erg_Ort'], - 'ERG_STR' => $tmp->answer['Erg_Str'], - 'ERG_PLZ' => $tmp->answer['Erg_PLZ'], - 'ERROR_MSG' => $tmp->answer['ErrorMSG'], - 'ERROR_CODE' => $tmp->answer['ErrorCode']); - - return $erg; - } - - - function MailSendNoBCCHTML($from,$from_name,$to,$to_name,$betreff,$text,$files="",$cc="",$bcc="") - { - $from_name = $this->ClearDataBeforeOutput($from_name); - $to_name = $this->ClearDataBeforeOutput($to_name); - //$to = ""; // testmail - $betreff = $this->ReadyForPDF($betreff); - $text = $this->ReadyForPDF($text); - - $this->app->mail->ClearData(); - $countCc = !empty($cc)?count($cc):0; - for($i=0;$i<$countCc;$i++) - { - if($cc[$i]!="" && $cc[$i]!=$to) - $this->app->mail->AddCC($cc[$i]); - } - $countBcc = !empty($bcc)?count($bcc):0; - for($i=0;$i<$countBcc;$i++) - { - if($bcc[$i]!="" && $bcc[$i]!=$to) - $this->app->mail->AddBCC($bcc[$i]); - } - - $this->app->mail->From = $from; - $this->app->mail->FromName = $from_name; - - $this->app->mail->Subject = $betreff; - - if($this->app->Conf->WFtestmode==true){ - $this->app->mail->AddAddress($from, $to_name); - }else{ - $this->app->mail->AddAddress($to, $to_name); - } - - $this->app->mail->Body = utf8_decode(str_replace('\r\n',"\n",$text).nl2br($this->Signatur())); - - $this->app->mail->IsHTML(true); - $cFiles = !empty($files)?count($files):0; - for($i=0;$i<$cFiles;$i++) - { - if(@is_file($files[$i])) - $this->app->mail->AddAttachment($files[$i]); - } - - if(!$this->app->mail->Send()) { - $error = "Mailer Error: " . $this->app->mail->ErrorInfo; - return 0; - } - $error = "Message sent!"; - return 1; - } - - - - function MailSendNoBCC($from,$from_name,$to,$to_name,$betreff,$text,$files="") - { - $from_name = $this->ClearDataBeforeOutput($from_name); - $to_name = $this->ClearDataBeforeOutput($to_name); - $betreff = $this->ReadyForPDF($betreff); - $text = $this->ReadyForPDF($text); - - $this->app->mail->ClearData(); - - $this->app->mail->From = $from; - $this->app->mail->FromName = $from_name; - - $this->app->mail->Subject = $betreff; - if($this->app->mail->Subject=="") $this->app->mail->Subject=$betreff; - - if($this->app->Conf->WFtestmode==true){ - $this->app->mail->AddAddress($from, $to_name); - }else{ - $this->app->mail->AddAddress($to, $to_name); - } - - $this->app->mail->Body = utf8_decode(str_replace('\r\n',"\n",$text).$this->Signatur()); - - - $cFiles = !empty($files)?count($files):0; - for($i=0;$i<$cFiles;$i++) - { - if(@is_file($files[$i])) - $this->app->mail->AddAttachment($files[$i]); - } - if(!$this->app->mail->Send()) { - $error = "Mailer Error: " . $this->app->mail->ErrorInfo; - return 0; - } - $error = "Message sent!"; - return 1; - } - - function MailSend($from,$from_name,$to,$to_name,$betreff,$text,$files="",$projekt="",$signature=true,$cc="",$bcc="", $system = false) - { - $bcc1 = $this->Firmendaten('bcc1'); - $bcc2 = $this->Firmendaten('bcc2'); - - if($bcc1!="") { - $this->MailSendFinal($from,$from_name,$bcc1,"Xentral Kopie 1","KOPIE ".$betreff,$text,$files,$projekt,$signature,'','', $system); - } - if($bcc2!="") $this->MailSendFinal($from,$from_name,$bcc2,"Xentral Kopie 2","KOPIE ".$betreff,$text,$files,$projekt,$signature,'','', $system); - - return $this->MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files,$projekt,$signature,$cc,$bcc, $system); - } - -function MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files="",$projekt="",$signature=true,$cc="",$bcc="", $system = false) -{ - // keine leeren email versenden - if($text=="" && $betreff=="") return; - - $isSystemTemplate = $system && is_file(dirname(__DIR__, 2) .'/classes/Modules/Company/templates/systemmail.tpl'); - if($isSystemTemplate) { - $signature = false; - } - - $from_name = $this->ClearDataBeforeOutput($from_name); - $to_name = $this->ClearDataBeforeOutput($to_name); - $to_name = $this->ReadyForPDF($to_name); - $from_name = $this->ReadyForPDF($from_name); - $this->app->mail->ClearData(); - $ccc = $cc?count($cc):0; - for($i=0;$i<$ccc;$i++) - { - if($cc[$i]!="" && $cc[$i]!=$to) - $this->app->mail->AddCC($cc[$i]); - } - - $cbcc = $bcc?count($bcc):0; - for($i=0;$i<$cbcc;$i++) - { - if($bcc[$i]!="" && $bcc[$i]!=$to) - { - $this->app->mail->AddBCC($bcc[$i]); - } - } - - $bcc3 = $this->Firmendaten('bcc3'); - if($bcc3!="") - { - $this->app->mail->AddBCC($bcc3); - } - - - if($projekt > 0 && $this->Projektdaten($projekt,"absendeadresse")!=""){ - $this->app->mail->From = $this->Projektdaten($projekt, "absendeadresse"); - }else{ - $this->app->mail->From = $from; - } - - if($projekt > 0 && $this->Projektdaten($projekt,"absendename")!=""){ - $this->app->mail->FromName = $this->ReadyForPDF($this->Projektdaten($projekt, "absendename")); - }else{ - $this->app->mail->FromName = $from_name; - } - - $betreff = $this->ReadyForPDF($betreff); - $text = $this->ReadyForPDF($text); - $text = str_replace('€','€',$text); - //$text = htmlentities($text); - - $texthtml = htmlspecialchars_decode( - htmlentities($text, ENT_NOQUOTES, 'UTF-8', false) - , ENT_NOQUOTES - ); - if($texthtml!=$text) - { - $this->app->mail->IsHTML(true); - $text = $texthtml; - } - - $this->app->mail->Subject = $betreff; - - if($this->app->Conf->WFtestmode==true){ - $this->app->mail->AddAddress($from, $to_name); - }else{ - $this->app->mail->AddAddress($to, $to_name); - } - - if($signature) - { - $eigenesignatur = $this->app->DB->Select("SELECT eigenesignatur FROM emailbackup WHERE email='$from' AND email !='' AND geloescht!=1 LIMIT 1"); - //$this->app->erp->LogFile(addslashes("SELECT eigenesignatur FROM emailbackup WHERE email='$from' AND email !='' LIMIT 1")); - if(strlen(trim($this->Signatur($this->app->mail->From))) > 0 && $eigenesignatur == 1) - { - if($this->isHTML($text)) - { - $signaturtext = $this->Signatur($this->app->mail->From); - if($this->isHTML($signaturtext)) - $body = utf8_decode(str_replace('\r\n',"\n",$text))."
".$signaturtext; - else - $body = utf8_decode(str_replace('\r\n',"\n",$text))."
".nl2br($signaturtext); - } - else{ - $body = utf8_decode(str_replace('\r\n',"\n",$text)).$this->Signatur($this->app->mail->From); - } - }else{ - if($projekt > 0 && $this->Projektdaten($projekt,"absendesignatur")!=""){ - if($this->isHTML($text)) - { - $signaturtext = $this->Projektdaten($projekt,"absendesignatur"); - if($this->isHTML($signaturtext)) - $body = utf8_decode(str_replace('\r\n',"\n",$text))."

".$signaturtext; - else - $body = utf8_decode(str_replace('\r\n',"\n",$text))."

".$this->ReadyForPDF(nl2br($signaturtext)); - } else { - $body = utf8_decode(str_replace('\r\n',"\n",$text))."\r\n\r\n".$this->ReadyForPDF($this->Projektdaten($projekt,"absendesignatur")); - } - }else{ - if(strlen(trim($this->Signatur($this->app->mail->From))) > 0 && $eigenesignatur == 0){ - if($this->isHTML($text)) - { - $signaturtext = $this->Signatur($this->app->mail->From); - if($this->isHTML($signaturtext)) - $body = str_replace('\r\n',"\n",$text)."
".$signaturtext; - else - $body = utf8_decode(str_replace('\r\n',"\n",$text))."
".nl2br($signaturtext); - }else{ - $body = utf8_decode(str_replace('\r\n',"\n",$text)).$this->Signatur($this->app->mail->From); - } - }else{ - $body = utf8_decode(str_replace('\r\n',"\n",$text)); - } - } - - } - } else { - $body = utf8_decode(str_replace('\r\n',"\n",$text)); - } - - // wenn html rahmen - if($isSystemTemplate) { - $email_html_template = file_get_contents(dirname(__DIR__, 2) .'/classes/Modules/Company/templates/systemmail.tpl'); - $email_html_template = str_replace( - '{SERVER}', - str_replace('index.php','',$this->app->Location->getServer()), - $email_html_template - ); - } - else{ - $email_html_template = $this->Projektdaten($projekt, "email_html_template"); - if($email_html_template == ""){ - $email_html_template = $this->Firmendaten('email_html_template'); - } - } - if($email_html_template!="" && preg_match("/{CONTENT}/",$email_html_template)) - { - $email_html_template = preg_replace('~\x{00a0}~siu',' ',$email_html_template); - $email_html_template = preg_replace( "#(( |\s|
)+$)#", "", trim($email_html_template) ); - $body = str_replace('{CONTENT}',$body,$email_html_template); - } - - if($this->isHTML($body)) - { - $this->app->mail->IsHTML(true); - $this->app->mail->MsgHTML($body); - } else { - $this->app->mail->Body=$body; - } - - if(is_array($files)) - { - for($i=0;$iapp->mail->AddAttachment($files[$i]); - } - } - $sysMailerSent = false; - $sysMailer = null; - $emailObj = null; - if ($this->app->Container->has('SystemMailer')) { - $sysMailer = $this->app->Container->get('SystemMailer'); - } - - if ($sysMailer !== null) { - $recipients = []; - foreach ($this->app->mail->to as $item) { - $recipients[] = new EmailRecipient($item[0], $item[1]); - } - $ccRecipients = []; - foreach ($this->app->mail->GetCC() as $item) { - $ccRecipients[] = new EmailRecipient($item[0], $item[1]); - } - $bccRecipients = []; - foreach ($this->app->mail->GetBCC() as $item) { - $bccRecipients[] = new EmailRecipient($item[0], $item[1]); - } - $emailObj = $sysMailer->composeEmail( - $recipients, - $this->app->mail->Subject, - $this->app->mail->Body, - $files, - $ccRecipients, - $bccRecipients - ); - $sysMailerSent = $sysMailer->composeAndSendEmail( - $this->app->mail->From, - $this->app->mail->FromName, - $recipients, - $this->app->mail->Subject, - $this->app->mail->Body, - $files, - $ccRecipients, - $bccRecipients - ); - } - if($sysMailerSent === false && !$this->app->mail->Send()) { - $this->app->erp->LogFile("Mailer Error: " . $this->app->mail->ErrorInfo); - $this->MailLogFile(); - $this->mail_error = "Mailer Error: " . $this->app->mail->ErrorInfo; - - if(isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetID')) - { - $this->app->erp->InternesEvent($this->app->User->GetID(),"Fehler bei Mailversand: ".$this->app->mail->ErrorInfo,"alert",1); - } - return 0; - } - // schreiben in post ausgang - $this->MailLogFile(); - $imap_aktiv = $this->app->DB->Select("SELECT imap_sentfolder_aktiv FROM emailbackup WHERE email='".$this->app->mail->From."' AND imap_sentfolder!='' AND geloescht!=1 LIMIT 1"); - if($imap_aktiv=="1" && !preg_match("/Xentral Kopie/",$to_name) && !preg_match("/WaWision Kopie/",$to_name)) - { - $imap_data = $this->app->DB->SelectRow("SELECT * FROM emailbackup WHERE email='".$this->app->mail->From."' AND geloescht!=1 LIMIT 1"); - $imapCopyMessage = $this->app->mail->mailmessage; - if ($sysMailerSent === true && $emailObj !== null) { - /** @var MimeMessageFormatterInterface $formatter */ - $formatter = $this->app->Container->get('MailClientMimeMessageFormatter'); - $imapCopyMessage = $formatter->formatMessage( - $emailObj, - new EmailRecipient($this->app->mail->From, $this->app->mail->FromName) - ); - } - try { - $account = EmailBackupAccount::fromDbState($imap_data); - /** @var MailClientProvider $clientProvider */ - $clientProvider = $this->app->Container->get('MailClientProvider'); - $client = $clientProvider->createMailClientFromAccount($account); - $client->connect(); - $client->appendMessage($imapCopyMessage, $account->getImapOutgoingFolder()); - } catch (Exception $e) {} - - $this->app->erp->LogFile("IMAP Ausgang FROM ".$this->app->mail->From." S $server P $port T $type SP $server_path B ".$imap_data['benutzername']." SF ".$imap_data['imap_sentfolder']); - } - $this->mail_error = ""; - return 1; - } - - - - function MailLogFile() - { - $subject = $this->app->DB->real_escape_string($this->app->mail->Subject); - $body = $this->app->DB->real_escape_string($this->app->mail->Body); - $status = $this->app->DB->real_escape_string($this->app->mail->ErrorInfo); - - if($status!="") { - $status .= " (Host: ".$this->app->mail->Host." User: ".$this->app->mail->Username.") "; - } - - $from = $this->app->DB->real_escape_string($this->app->mail->From); - $to = $this->app->DB->real_escape_string($this->app->mail->to[0][0]); - - $this->app->DB->Insert("INSERT INTO mailausgang (id,`subject`,`body`,`from`,`to`,`status`,zeit) VALUES ('','$subject','$body','$from','$to','$status',NOW())"); - if(method_exists($this->app->mail,'GetCC')){ - $cc = $this->app->mail->GetCC(); - $bcc = $this->app->mail->GetBCC(); - if($cc && count($cc) > 0){ - for ($i=0; $i < count($cc); $i++) { - $this->app->DB->Insert("INSERT INTO mailausgang (id,`subject`,`body`,`from`,`to`,`status`,zeit, art) VALUES ('','$subject','$body','$from','".$cc[$i][0]."','$status',NOW(), '1')"); - } - } - if($bcc && count($bcc) > 0){ - for ($i=0; $i < count($bcc); $i++) { - $this->app->DB->Insert("INSERT INTO mailausgang (id,`subject`,`body`,`from`,`to`,`status`,zeit, art) VALUES ('','$subject','$body','$from','".$bcc[$i][0]."','$status',NOW(), '2')"); - } - } - } - $this->app->DB->Delete("DELETE FROM `mailausgang` WHERE DATE_SUB(CURDATE(), INTERVAL 90 DAY) >= zeit"); - } - - - function isMailAdr($mailadr){ - return preg_match("/^[_a-z0-9!#$%&\\'*+-\/=?^_`.{|}~]+(\.[_a-z0-9!#$%&\'*+-\\/=?^_`.{|}~]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,20})$/i", $mailadr, $treffer)?1:0; - } - - - function BeschriftungSprache($sprache='') - { - $sprache = strtolower(trim($sprache)); - $this->beschriftung_sprache='deutsch'; - } - - function BeschriftungStandardwerte($field,$sprache="deutsch",$getvars=false) - { - $uebersetzung['dokument_rechnung_titel']['deutsch'] = "Rechnung"; - $uebersetzung['dokument_position']['deutsch'] = "Pos"; - $uebersetzung['dokument_anschreiben']['deutsch'] = "Sehr geehrte Damen und Herren"; - $uebersetzung['dokument_artikelnummer']['deutsch'] = "Artikelnr"; - $uebersetzung['dokument_artikel']['deutsch'] = "Artikel"; - $uebersetzung['dokument_lieferdatum']['deutsch'] = "Liefertermin"; - $uebersetzung['dokument_lieferdatumkw']['deutsch'] = "KW"; - $uebersetzung['dokument_artikelnummerkunde']['deutsch'] = "Ihre Artikelnummer"; - $uebersetzung['dokument_menge']['deutsch'] = "Menge"; - $uebersetzung['dokument_gesamt']['deutsch'] = "Gesamt"; - $uebersetzung['dokument_gesamt_total']['deutsch'] = "Gesamt"; - $uebersetzung['dokument_mwst']['deutsch'] = "MwSt."; - $uebersetzung['dokument_zzglmwst']['deutsch'] = "zzgl. MwSt."; - $uebersetzung['dokument_inklmwst']['deutsch'] = "inkl. MwSt."; - $uebersetzung['dokument_gesamtnetto_zzglmwst']['deutsch'] = "Gesamt netto"; - $uebersetzung['dokument_rabatt']['deutsch'] = "Rabatt"; - $uebersetzung['dokument_stueck']['deutsch'] = "Stck"; - $uebersetzung['dokument_einzel']['deutsch'] = "Einzel"; - $uebersetzung['dokument_einheit']['deutsch'] = "Einheit"; - $uebersetzung['dokument_gewicht']['deutsch'] = "Gewicht"; - $uebersetzung['dokument_laenge']['deutsch'] = "Länge"; - $uebersetzung['dokument_breite']['deutsch'] = "Breite"; - $uebersetzung['dokument_hoehe']['deutsch'] = "Höhe"; - $uebersetzung['dokument_optional']['deutsch'] = "Optional: "; - $uebersetzung['dokument_ursprungsregion']['deutsch'] = "Ursprungsregion"; - $uebersetzung['dokument_gewicht']['deutsch'] = "Gewicht"; - $uebersetzung['dokument_gesamtnetto']['deutsch'] = "Gesamt netto"; - $uebersetzung['dokument_seite']['deutsch'] = "Seite"; - $uebersetzung['dokument_seitevon']['deutsch'] = "von"; - $uebersetzung['dokument_datum']['deutsch'] = "Datum"; - $uebersetzung['dokument_angebot_anfrage']['deutsch'] = "Ihre Anfrage"; - $uebersetzung['dokument_angebot']['deutsch'] = "Angebot"; - $uebersetzung['dokument_bestellung']['deutsch'] = "Bestellung"; - $uebersetzung['dokument_bestellung_angebotnummer']['deutsch'] = "Ihr Angebot"; - $uebersetzung['dokument_bestellung_unserekundennummer']['deutsch'] = "Unsere Kunden-Nr."; - $uebersetzung['dokument_bestelldatum']['deutsch'] = "Bestelldatum"; - $uebersetzung['dokument_bestellung_einkauf']['deutsch'] = "Einkauf"; - $uebersetzung['dokument_bestellung_keineartikelnummer']['deutsch'] = "siehe Artikel-Nr."; - $uebersetzung['dokument_lieferdatum_sofort']['deutsch'] = "sofort"; - $uebersetzung['dokument_bestellung_unsereartikelnummer']['deutsch'] = "Unsere Artikel-Nr."; - $uebersetzung['dokument_bestellung_bestellnummer']['deutsch'] = "Best-Nr."; - $uebersetzung['dokument_bestellung_mengeinvpe']['deutsch'] = "Menge in VPE"; - $uebersetzung['dokument_bestellung_bestaetigung']['deutsch'] = "Die Bestellung ist erst nach Eingang einer Bestätigung Ihrerseits gültig. Wird die Bestellung nicht innerhalb einer Woche bestätigt verfällt diese."; - $uebersetzung['dokument_auftrag']['deutsch'] = "Auftrag"; - $uebersetzung['dokument_auftrag_auftragsbestaetigung']['deutsch'] = "Auftragsbestätigung"; - $uebersetzung['dokument_lieferdatum']['deutsch'] = "Lieferdatum"; - $uebersetzung['dokument_lieferschein']['deutsch'] = "Lieferschein"; - $uebersetzung['dokument_retoure']['deutsch'] = "Retoure"; - $uebersetzung['dokument_kommissionierschein']['deutsch'] = "Kommissionierschein"; - $uebersetzung['dokument_ansprechpartner']['deutsch'] = "Ansprechpartner"; - $uebersetzung['dokument_rechnungsdatum']['deutsch'] = "Rechnungsdatum"; - $uebersetzung['dokument_proformarechnungsdatum']['deutsch'] = "Datum"; - $uebersetzung['dokument_auftragsdatum']['deutsch'] = "Auftragsdatum"; - $uebersetzung['dokument_rechnung']['deutsch'] = "Rechnung"; - $uebersetzung['dokument_gutschrift']['deutsch'] = "Gutschrift"; - $uebersetzung['dokument_kalkulation']['deutsch'] = "Kalkulation"; - $uebersetzung['dokument_stueckliste']['deutsch'] = "(Stückliste)"; - $uebersetzung['dokument_proformarechnung']['deutsch'] = "Proformarechnung"; - $uebersetzung['dokument_preisanfrage']['deutsch'] = "Preisanfrage"; - $uebersetzung['dokument_entwurf']['deutsch'] = "Entwurf"; - $uebersetzung['dokument_rechnung_kopie']['deutsch'] = "doppel"; - $uebersetzung['dokument_skonto']['deutsch'] = "Skonto"; - $uebersetzung['dokument_innerhalb']['deutsch'] = "innerhalb"; - $uebersetzung['dokument_tagen']['deutsch'] = "Tagen"; - $uebersetzung['dokument_tagebiszum']['deutsch'] = "Tage bis zum"; - $uebersetzung['dokument_zahlung_per']['deutsch'] = "Bezahlung per"; - $uebersetzung['dokument_offene_lastschriften']['deutsch'] = "Der Betrag wird mit offenen Lastschriften verrechnet."; - $uebersetzung['dokument_auszahlungskonditionen']['deutsch'] = "aus Zahlungskonditionen"; - $uebersetzung['dokument_zahlung_rechnung_anab']['deutsch'] = "Rechnung zahlbar innerhalb von {ZAHLUNGSZIELTAGE} Tagen."; - $uebersetzung['dokument_telefon']['deutsch'] = "Telefon"; - $uebersetzung['dokument_email']['deutsch'] = "E-Mail"; - $uebersetzung['dokument_teillieferung']['deutsch'] = "Teillieferung von Auftrag"; - $uebersetzung['dokument_herstellernummer']['deutsch'] = "Herstellernummer"; - $uebersetzung['dokument_abmessung']['deutsch'] = "Abmessung"; - - $uebersetzung['dokument_zolltarifnummer']['deutsch'] = "Zolltarifnummer"; - $uebersetzung['dokument_ean']['deutsch'] = "EAN"; - $uebersetzung['dokument_mhd']['deutsch'] = "MHD"; - $uebersetzung['dokument_herkunftsland']['deutsch'] = "Herkunftsland"; - $uebersetzung['dokument_charge']['deutsch'] = "Charge"; - $uebersetzung['dokument_seriennummer']['deutsch'] = "S/N"; - $uebersetzung['dokument_ihreartikelnummer']['deutsch'] = "Ihre Artikelnummer"; - $uebersetzung['dokument_projekt']['deutsch'] = "Projekt"; - - $uebersetzung['dokument_skontoanderezahlungsweisen']['deutsch'] = "Skonto {ZAHLUNGSZIELSKONTO} % aus Zahlungskonditionen "; - $uebersetzung['dokument_staffelpreis_von']['deutsch'] = "ab"; - $uebersetzung['dokument_staffelpreis_stueck']['deutsch'] = "St."; - - $uebersetzung['auftrag_bezeichnung_vertrieb']['deutsch'] = "Vertrieb"; - $uebersetzung['auftrag_bezeichnung_bearbeiter']['deutsch'] = "Bearbeiter"; - $uebersetzung['auftrag_bezeichnung_bestellnummer']['deutsch'] = "Ihre Bestellnummer"; - $uebersetzung['beschriftunginternetnummer']['deutsch'] = "Internetnummer"; - $uebersetzung['bezeichnungkundennummer']['deutsch'] = "Kundennummer"; - $uebersetzung['bezeichnungstornorechnung']['deutsch'] = "Stornorechnung"; - $uebersetzung['bezeichnungangebotersatz']['deutsch'] = ""; - $uebersetzung['bezeichnungauftragersatz']['deutsch'] = ""; - $uebersetzung['bezeichnungproformarechnungersatz']['deutsch'] = ""; - $uebersetzung['bezeichnungrechnungersatz']['deutsch'] = ""; - $uebersetzung['bezeichnunglieferscheinersatz']['deutsch'] = ""; - $uebersetzung['bezeichnungbestellungersatz']['deutsch'] = ""; - $uebersetzung['entspricht_rechnungsadresse']['deutsch'] = "entspricht Rechnungsadresse"; - $uebersetzung['entspricht_hauptadresse']['deutsch'] = "entspricht Hauptadresse"; - $uebersetzung['gruppenrechnung_lieferschein_freitext']['deutsch'] = "Lieferschein {BELEGNR} vom {DATUM}"; - $uebersetzung['gruppenrechnung_lieferschein_anzahl']['deutsch'] = "Lieferschein Anzahl: {ANZAHL}"; - - $uebersetzung['proformarechnung_lieferschein_freitext']['deutsch'] = "Lieferschein {BELEGNR} vom {DATUM}"; - $uebersetzung['proformarechnung_lieferschein_anzahl']['deutsch'] = "Lieferschein Anzahl: {ANZAHL}"; - $uebersetzung['proformarechnung_ohnezolltarifnummer']['deutsch'] = "Ohne Zolltarifnummer"; - - - - - $uebersetzung['dokument_zahlungserinnerung']['deutsch'] = "Zahlungserinnerung"; - - $uebersetzung['mahnwesen_betreff']['deutsch'] = "Buchhaltung: Ihre offene Rechnung"; - $uebersetzung['mahnwesen_betreff']['englisch'] = "Accounting: Your outstanding account"; - $uebersetzung['dokument_mahnung1']['deutsch'] = "1. Mahnung"; - $uebersetzung['dokument_mahnung2']['deutsch'] = "2. Mahnung"; - $uebersetzung['dokument_mahnung3']['deutsch'] = "3. Mahnung"; - $uebersetzung['dokument_mahnunginkasso']['deutsch'] = "Inkasso-Mahnung"; - - $uebersetzung['zahlung_proformarechnung_sofort_de']['deutsch'] = "Proformarechnung zahlbar sofort"; - $uebersetzung['zahlung_auftrag_sofort_de']['deutsch'] = "Rechnung zahlbar sofort"; - - for($ifreifeld=1;$ifreifeld<=40;$ifreifeld++) - { - if($this->app->erp->Firmendaten("freifeld".$ifreifeld)!="") - { - $uebersetzung['artikel_freifeld'.$ifreifeld]['deutsch'] = $this->app->erp->Firmendaten("freifeld".$ifreifeld); - $uebersetzung['artikel_freifeld'.$ifreifeld]['englisch'] = $this->app->erp->Firmendaten("freifeld".$ifreifeld); - } - else - { - $uebersetzung['artikel_freifeld'.$ifreifeld]['deutsch'] = "Freifeld ".$ifreifeld; - $uebersetzung['artikel_freifeld'.$ifreifeld]['englisch'] = "Field ".$ifreifeld; - } - } - - - for($ifreifeld=1;$ifreifeld<=20;$ifreifeld++) - { - if($this->app->erp->Firmendaten("projektfreifeld".$ifreifeld)!="") - { - $uebersetzung['projekt_freifeld'.$ifreifeld]['deutsch'] = $this->app->erp->Firmendaten("projektfreifeld".$ifreifeld); - $uebersetzung['projekt_freifeld'.$ifreifeld]['englisch'] = $this->app->erp->Firmendaten("projektfreifeld".$ifreifeld); - } - else - { - $uebersetzung['projekt_freifeld'.$ifreifeld]['deutsch'] = "Freifeld ".$ifreifeld; - $uebersetzung['projekt_freifeld'.$ifreifeld]['englisch'] = "Field ".$ifreifeld; - } - } - - if($this->app->erp->Firmendaten("freitext1inhalt")!="") - { - $uebersetzung['freitext1inhalt']['deutsch'] = $this->app->erp->Firmendaten("freitext1inhalt"); - $uebersetzung['freitext1inhalt']['englisch'] = $this->app->erp->Firmendaten("freitext1inhalt"); - } - else - { - $uebersetzung['freitext1inhalt']['deutsch'] = ''; - $uebersetzung['freitext1inhalt']['englisch'] = ''; - } - if($this->app->erp->Firmendaten("freitext2inhalt")!="") - { - $uebersetzung['freitext2inhalt']['deutsch'] = $this->app->erp->Firmendaten("freitext2inhalt"); - $uebersetzung['freitext2inhalt']['englisch'] = $this->app->erp->Firmendaten("freitext2inhalt"); - } - else - { - $uebersetzung['freitext2inhalt']['deutsch'] = ''; - $uebersetzung['freitext2inhalt']['englisch'] = ''; - } - - - if($getvars) return $uebersetzung; - - - - if(isset($uebersetzung[$field][$sprache])) - return $uebersetzung[$field][$sprache]; - - return ""; - } - - function getUebersetzung($field, $sprache, $id = true) - { - $sprach = strtolower($sprache); - if(empty($this->uebersetzungId)) - { - $arr = $this->app->DB->SelectArr('SELECT id, label, sprache, beschriftung - FROM uebersetzung - WHERE sprache <> "" AND label <> ""'); - if(!empty($arr)) - { - foreach($arr as $row) - { - $this->uebersetzungId[$row['label']][strtolower($row['sprache'])] = $row['id']; - $this->uebersetzungBeschriftung[$row['label']][strtolower($row['sprache'])] = $row['beschriftung']; - } - } - } - - if($id){ - if(!empty($this->uebersetzungId[$field]) && isset($this->uebersetzungId[$field][$sprache])){ - return $this->uebersetzungId[$field][$sprache]; - } - }else{ - if(!empty($this->uebersetzungBeschriftung[$field]) && isset($this->uebersetzungBeschriftung[$field][$sprache])){ - return $this->uebersetzungBeschriftung[$field][$sprache]; - } - } - - return null; - } - - function Beschriftung($field,$sprache='') - { - if($sprache!='') { - $this->BeschriftungSprache($sprache); - } - - if($this->beschriftung_sprache==''){ - $this->beschriftung_sprache = 'deutsch'; - } - - // wenn feld mit artikel_freifeld beginnt dann freifeld draus machen - //$field = str_replace('artikel_freifeld','freifeld',$field); - - // schaue ob es das wort in uebesetzungen gibt - - $check = $this->getUebersetzung($field, $this->beschriftung_sprache); - $uebersetzung = ''; - if($check > 0){ - $uebersetzung = $this->getUebersetzung($field, $this->beschriftung_sprache, false); - } - - if($check > 0 && $uebersetzung!='') - { - // eintrag eindeutig gefunden - return $uebersetzung; - } - // schaueb ob es das wort in firmendaten gibt achtung hier gibtes nur deutsche woerter! - if($this->beschriftung_sprache==='deutsch') - { - $wert = $this->Firmendaten($field); - if($wert!='') { - return $wert; - } - // Gibt es eine Konstante? - return $this->BeschriftungStandardwerte($field,$this->beschriftung_sprache); - } - //gibt es eine Vorlage? - $wert = $this->BeschriftungStandardwerte($field,$this->beschriftung_sprache); - if($wert!='') - { - return $wert; - } - //1. deutsches wort als standard - $wert = $this->BeschriftungDeutschesWort($field); - return $wert; - } - - - - function FirmendatenSet($field,$value) - { - $firmendatenid = $this->app->DB->Select('SELECT MAX(id) FROM firmendaten LIMIT 1'); - $check = $this->app->DB->SelectRow( - sprintf('SELECT id, typ FROM firmendaten_werte WHERE name = \'%s\' LIMIT 1',$field) - ); - if(!empty($check)) - { - if($check['typ'] === 'int' || $check['typ'] === 'tinyint') - { - $this->app->DB->Update("UPDATE firmendaten_werte SET wert = '".(int)$value."' WHERE id = '".$check['id']."'"); - }else{ - $this->app->DB->Update("UPDATE firmendaten_werte SET wert = '".$this->app->DB->real_escape_string($value)."' WHERE id = '".$check['id']."'"); - } - } - $this->app->DB->Update("UPDATE firmendaten SET " . $field . "='$value' WHERE id='" . $firmendatenid . "'"); - $db = $this->app->Conf->WFdbname; - if(!empty($this->firmendaten[$db])) { - $this->firmendaten[$db][$field] = $value; - } - else { - $this->firmendaten = null; - } - } - - function Firmendaten($field,$projekt='', $clearcache = false) - { - if($field === 'mysql55') { - return '1'; - } - if(strpos($field,'next') !== false) - { - $firmendatenid = (int)$this->app->DB->Select('SELECT MAX(id) FROM firmendaten LIMIT 1'); - $firmendaten_value = $this->app->DB->Select( - sprintf( - 'SELECT `%s` FROM firmendaten WHERE id = %d LIMIT 1', - $field, $firmendatenid) - ); - if(!$this->app->DB->error()) { - return $firmendaten_value; - } - $firmendaten_value = $this->app->DB->SelectRow( - sprintf('SELECT id, wert FROM firmendaten_werte WHERE `name` = \'%s\' LIMIT 1', $field) - ); - if(!empty($firmendaten_value)) { - return $firmendaten_value['wert']; - } - return $this->app->DB->Select( - sprintf("SELECT `%s` FROM `firmendaten` WHERE id = %d LIMIT 1",$field, $firmendatenid) - ); - } - $db = $this->app->Conf->WFdbname; - if($clearcache) { - $this->firmendaten = null; - } - if(empty($this->firmendaten[$db])) - { - $firmendatenid = (int)$this->app->DB->Select('SELECT MAX(id) FROM firmendaten LIMIT 1'); - $this->firmendaten[$db] = $this->app->DB->SelectRow( - sprintf('SELECT * FROM firmendaten WHERE id = %d LIMIT 1', $firmendatenid) - ); - $firmendaten_value = $this->app->DB->SelectArr('SELECT id, wert,name,typ FROM firmendaten_werte'); - - if($firmendaten_value) - { - foreach($firmendaten_value as $key => $value) - { - if(!isset($this->firmendaten[$db][$value['name']])) - { - $this->firmendaten[$db][$value['name']] = $value['wert']; - if($value['typ'] === 'int' || $value['typ'] === 'tinyint') { - $this->firmendaten[$db][$value['name']] = (int)$this->firmendaten[$db][$value['name']]; - } - } - } - } - } - $value = null; - if(isset($this->firmendaten[$db][$field])) { - $value = $this->firmendaten[$db][$field]; - } - - // Umstellung 08.01.2015 von DE auf land zursicherheit wenn jemand der Wert DE fehlen sollte. - if($field==='land' && $value=='') { - return 'DE'; - } - if($field==="schriftart" && $value=='') { - return 'Arial'; - } - - return $value; - } - - function TplFirmendaten($field) - { - $ret = $this->Firmendaten($field); - if($ret != "")return $ret; - switch($field) - { - case 'firmenfarbehell': - //return "#42B8C4"; - return '#404040'; - break; - case 'firmenfarbedunkel': - //return "#2F9099"; - return '#2F2F2F'; - break; - case 'firmenfarbeganzdunkel': - return "#018fa3"; - break; - case 'navigationfarbe': - return "#48494b"; - break; - case 'navigationfarbeschrift': - return "#c9c9cb"; - break; - case 'unternavigationfarbe': - return "#d5ecf2"; - break; - case 'unternavigationfarbeschrift': - return $this->TplFirmendaten('firmenfarbeganzdunkel'); - //return "#027d8d"; - break; - case 'firmenfarbe': - return "#48494b"; - break; - case 'tabsnavigationfarbeschrift': - return $this->TplFirmendaten('firmenfarbeganzdunkel'); - //return '#018fa3'; - //return "#26727a"; - break; - case 'tabsnavigationfarbe': - return $this->TplFirmendaten('firmenfarbehell'); - return "#c2e3ea"; - break; - case 'tabsnavigationfarbe2': - return $this->TplFirmendaten('tabsnavigationfarbeschrift'); - break; - case 'navigationfarbe2': - return $this->TplFirmendaten('navigationfarbeschrift'); - break; - case 'navigationfarbeschrift2': - return $this->TplFirmendaten('navigationfarbe'); - break; - } - - - return $ret; -} - -/* -function Firmendaten($field,$projekt="") -{ - $firmendatenid = $this->app->DB->Select("SELECT MAX(id) FROM firmendaten LIMIT 1"); - $value = $this->app->DB->Select("SELECT ".$field." FROM firmendaten WHERE id='".$firmendatenid."' LIMIT 1"); - - // Umstellung 08.01.2015 von DE auf land zursicherheit wenn jemand der Wert DE fehlen sollte. - if($field=="land" && $value=="") $value="DE"; - - return $value; - }*/ - - - function Grusswort($sprache="") - { - //abhaenig von Zeit usw.. passende Grußformel - /* - return "Grüße aus dem sonnigen Ausgburg."; - return "Grüße aus Ausgburg."; - return "Frohe Ostern."; - return "Schöne Feierabend."; - return "Frohe Weihnachten."; - return "Schönes Wochenende."; - */ - if($sprache=="englisch") return "\nKind regards,"; - return "\nMit freundlichen Grüßen"; - - } - - function Grussformel($projekt=0,$sprache="") - { - - if($projekt > 0) - { - $result = $this->app->DB->Select("SELECT absendegrussformel FROM projekt WHERE id='$projekt' LIMIT 1"); - } - - if($result=="") - { - $this->app->erp->BeschriftungSprache($sprache); - - $gruss = $this->app->erp->Beschriftung("mailgrussformel"); - if($gruss!=$this->app->erp->Firmendaten("mailgrussformel")) - { - $result = "

".nl2br($gruss); - } - - if($result=="") - { - $result = $this->app->erp->Firmendaten("mailgrussformel"); - } - } - - //if($sprache=="englisch") $result = "\nKind regards,"; - - $result = str_replace('{MITARBEITER}',$this->app->User->GetName(),$result); - - $data = $this->app->DB->SelectArr("SELECT telefon, telefax,email,mobil FROM adresse WHERE id='".$this->app->User->GetAdresse()."'"); - - $result= str_replace('{MITARBEITER}',$this->app->User->GetName(),$result); - $result = str_replace('{MITARBEITER_TELEFON}',$data[0]['telefon'],$result); - $result = str_replace('{MITARBEITER_TELEFAX}',$data[0]['telefax'],$result); - $result = str_replace('{MITARBEITER_MOBIL}',$data[0]['mobil'],$result); - $result = str_replace('{MITARBEITER_EMAIL}',$data[0]['email'],$result); - - return $result; - //return "\r\n\r\n".$this->ReadyForPDF($signatur); - } - function Signatur($from="",$language="") - { - $signatur = $this->app->DB->Select("SELECT signatur FROM emailbackup WHERE email='$from' AND email!='' AND eigenesignatur=1 AND geloescht!=1 LIMIT 1"); - - if($signatur=="") - { - $firmendatenid = $this->app->DB->Select("SELECT MAX(id) FROM firmendaten LIMIT 1"); - $signatur = base64_decode($this->Beschriftung("signatur",$language)); - } - - $data = $this->app->DB->SelectArr("SELECT telefon, telefax,email,mobil FROM adresse WHERE id='".$this->app->User->GetAdresse()."'"); - - $signatur = str_replace('{MITARBEITER}',$this->app->User->GetName(),$signatur); - $signatur = str_replace('{MITARBEITER_TELEFON}',$data[0]['telefon'],$signatur); - $signatur = str_replace('{MITARBEITER_TELEFAX}',$data[0]['telefax'],$signatur); - $signatur = str_replace('{MITARBEITER_MOBIL}',$data[0]['mobil'],$signatur); - $signatur = str_replace('{MITARBEITER_EMAIL}',$data[0]['email'],$signatur); - - if($this->isHTML($signatur)) return "

".$signatur; - return "\r\n\r\n".$this->ReadyForPDF($signatur); - } - - - function GetQuelleTicket() - { - return array('Telefon','Fax','Brief','Selbstabholer'); - } - - /** @deprecated */ - function GetStatusTicketSelect($status) - { - $stati = array('neu'=>'neu','offen'=>'offen','warten_e'=>'warten auf Intern','warten_kd'=>'warten auf Kunde','klaeren'=>'klären','abgeschlossen'=>'abgeschlossen','spam'=>'Papierkorb'); - - foreach($stati as $key=>$value) - { - if($status==$key) $selected="selected"; else $selected=""; - $ret .=""; - } - return $ret; - } - - /** @depracated */ - function GetPrioTicketSelect($prio) - { - $prios = array('4'=>'niedrig','3'=>'normal','2'=>'hoch'); - - foreach($prios as $key=>$value) - { - if($prio==$key) $selected="selected"; else $selected=""; - $ret .=""; - } - return $ret; - } - - - function GetZeiterfassungArt() - { - return array('arbeit'=>'Arbeit','pause'=>'Pause','urlaub'=>'Urlaub','krankheit'=>'Krankheit','ueberstunden'=>'Freizeitausgleich','feiertag'=>'Feiertag'); - } - - function GetVPE() - { - return array('einzeln'=>'Einzeln','tray'=>'Tray','rolle'=>'Rolle','stueckgut'=>'Stückgut','stange'=>'Stange','palette'=>'Palette'); - } - - function GetUmsatzsteuerklasse() - { - return array('normal'=>'normal','ermaessigt'=>'ermäßgt','befreit'=>'befreit'); - } - - function GetEtikett() - { - $tmp = array('artikel_klein'=>'Artikel klein'); - - $result = $this->app->DB->SelectArr("SELECT * FROM etiketten WHERE (verwendenals='artikel_klein' OR verwendenals='seriennummer') AND ausblenden!=1 ORDER by name"); - if(count($result) > 0) $tmp = array(); - for($i=0;$iLoadModul('waehrungumrechnung'); - if(!empty($obj) && method_exists($obj,'AddWaehrungumrechnung')) - { - return $obj->AddWaehrungumrechnung($waehrung_von, $waehrung_nach, $kurs, $gueltig_bis, $kommentar, $user); - } - } - - function GetWaehrung($onlytable = false) - { - /** @var Waehrungumrechnung $obj */ - $obj = $this->LoadModul('waehrungumrechnung'); - if(!empty($obj) && method_exists($obj,'GetWaehrung')) - { - return $obj->GetWaehrung($onlytable); - } - return array('EUR'=>'EUR','USD'=>'USD','JPY'=>'JPY','BGN'=>'BGN','CZK'=>'CZK','DKK'=>'DKK','GBP'=>'GBP','HUF'=>'HUF','PLN'=>'PLN','RON'=>'RON','SEK'=>'SEK','CHF'=>'CHF','ISK'=>'ISK','NOK'=>'NOK','HRK'=>'HRK','RUB'=>'RUB','TRY'=>'TRY','AUD'=>'AUD','BRL'=>'BRL','CAD'=>'CAD','CNY'=>'CNY','HKD'=>'HKD','IDR'=>'IDR','ILS'=>'ILS','INR'=>'INR','KRW'=>'KRW','MXN'=>'MXN','MYR'=>'MYR','NZD'=>'NZD','PHP'=>'PHP','SGD'=>'SGD','THB'=>'THB','ZAR'=>'ZAR'); - } - - function GetWaehrungUmrechnungskurseTabelle($von = 'EUR') - { - /** @var Waehrungumrechnung $obj */ - $obj = $this->LoadModul('waehrungumrechnung'); - if(!empty($obj) && method_exists($obj,'GetWaehrungUmrechnungskurseTabelle')) - { - return $obj->GetWaehrungUmrechnungskurseTabelle($von); - } - } - - /** - * @param bool $mitstandardlager - * @param bool $forceZwischenlager - * - * @return array - */ - function GetLager($mitstandardlager=false, $forceZwischenlager = false) - { - $tmp = []; - if($forceZwischenlager || $this->Firmendaten('wareneingang_zwischenlager')=='1') { - $tmp['zwischenlager'] = 'Zwischenlager'; - } - if($mitstandardlager) { - $tmp['standardlager'] = 'Standardlager'; - } - - $result = $this->app->DB->SelectArr( - "SELECT lp.id, CONCAT(l.bezeichnung,'->',lp.kurzbezeichnung) as kurzbezeichnung - FROM lager_platz AS lp - INNER JOIN lager AS l ON lp.lager=l.id - WHERE lp.kurzbezeichnung!='' AND lp.geloescht <> 1 AND l.geloescht <> 1 - ORDER BY l.bezeichnung,lp.kurzbezeichnung" - ); - if(empty($result)) { - return $tmp; - } - foreach($result as $row) { - $tmp[$row['id']] = $row['kurzbezeichnung']; - } - - return $tmp; - } - - function GetArtikelart() - { - return array('produkt'=>'Produkt','material'=>'Material','dienstleistung'=>'Dienstleistung','muster'=>'Muster', - 'gebuehr'=>'Gebühr','betriebsstoff'=>'Betriebsstoff','buerobedarf'=>'Bürobedarf', - 'inventar'=>'Inventar','porto'=>'Porto','literatur'=>'Literatur'); - } - - - function StartMessung() - { - $this->start_messung = $this->uniqueTimeStamp(); - } - - function EndeMessung() - { - $this->ende_messung = $this->uniqueTimeStamp(); - } - - function ErgebnisMessung() - { - $differenz = $this->ende_messung-$this->start_messung; - $differenz = $differenz/10; // warum auch immer - $differenz = (int)$differenz; - - echo "Die Ausführung dauerte $differenz ms"; - } - - function uniqueTimeStamp() { - $milliseconds = microtime(); - $timestring = explode(" ", $milliseconds); - $sg = $timestring[1]; - $mlsg = substr($timestring[0], 2, 4); - $timestamp = $sg.$mlsg; - return $timestamp; - } - - /** @deprecated */ - function GetWartezeitTicket($zeit) - { - $timestamp = strToTime($zeit, null); - - - $td = $this->makeDifferenz($timestamp,time()); - return $td['day'][0] . ' ' . $td['day'][1] . ', ' . $td['std'][0] . ' ' . $td['std'][1] . - ', ' . $td['min'][0] . ' ' . $td['min'][1];// . ', ' . $td['sec'][0] . ' ' . $td['sec'][1]; - } - - function makeDifferenz($first, $second){ - - if($first > $second) - $td['dif'][0] = $first - $second; - else - $td['dif'][0] = $second - $first; - - $td['sec'][0] = $td['dif'][0] % 60; // 67 = 7 - - $td['min'][0] = (($td['dif'][0] - $td['sec'][0]) / 60) % 60; - - $td['std'][0] = (((($td['dif'][0] - $td['sec'][0]) /60)- - $td['min'][0]) / 60) % 24; - - $td['day'][0] = floor( ((((($td['dif'][0] - $td['sec'][0]) /60)- - $td['min'][0]) / 60) / 24) ); - - $td = $this->makeString($td); - - return $td; - - } - - - function makeString($td){ - - if ($td['sec'][0] == 1) - $td['sec'][1] = 'Sekunde'; - else - $td['sec'][1] = 'Sekunden'; - - if ($td['min'][0] == 1) - $td['min'][1] = 'Minute'; - else - $td['min'][1] = 'Minuten'; - - if ($td['std'][0] == 1) - $td['std'][1] = 'Stunde'; - else - $td['std'][1] = 'Stunden'; - - if ($td['day'][0] == 1) - $td['day'][1] = 'Tag'; - else - $td['day'][1] = 'Tage'; - - return $td; - } - - - function GetProjektSelect($projekt,$color_selected='') - { - $sql = "SELECT id,name,farbe FROM projekt order by id"; - $tmp = $this->app->DB->SelectArr($sql); - $ctmp = !empty($tmp)?count($tmp):0; - for($i=0;$i<$ctmp;$i++) - { - if($tmp[$i]['farbe']=='') $tmp[$i]['farbe']='white'; - if($projekt==$tmp[$i]['id']){ - $options = (isset($options)?$options:'').""; - $color_selected = $tmp[$i]['farbe']; - } - else{ - $options = (isset($options) ? $options : '') . ""; - } - } - return !empty($options)?$options:''; - } - - /** - * @param int $id - * - * @return string - */ - public function GetAdressName($id) - { - return (String)$this->app->DB->Select( - sprintf('SELECT name FROM adresse WHERE id=%d AND geloescht=0 LIMIT 1', $id) - ); - } - - function GetAdressSubject() - { - return array('Kunde','Lieferant','Mitarbeiter','Mitglied');//'Externer Mitarbeiter','Projektleiter - } - - function GetAdressPraedikat() - { - return array('','von','fuer','ist'); - } - - function GetAdressObjekt() - { - return array('','Projekt'); - } - - - function GetVersandartAuftrag($projekt = 0) - { - $check = $this->app->DB->Select("SELECT COUNT(id) FROM versandarten"); - if($check <=0) - { - - $modul = ""; - - $tmp = array( - 'DHL'=>'DHL','DPD'=>'DPD', - 'express_dpd'=>'Express DPD', - 'export_dpd'=>'Export DPD', - 'gls'=>'GLS', - 'keinversand'=>'Kein Versand', - 'selbstabholer'=>'Selbstabholer', - 'versandunternehmen'=>'Sonstige', - 'spedition'=>'Spedition', - 'Go'=>'GO!', - 'post'=>'Post' - ); - foreach($tmp as $key=>$value) - { - if($key == 'DHL'){$modul='intraship';} - if($key == 'DPD'){$modul='dpdapi';} - if($key == 'express_dpd'){$modul='';} - if($key == 'export_dpd'){$modul='';} - if($key == 'gls'){$modul='glsapi';} - if($key == 'keinversand'){$modul='';} - if($key == 'selbstabholer'){$modul='selbstabholer';} - if($key == 'versandunternehmen'){$modul='';} - if($key == 'spedition'){$modul='';} - if($key == 'Go'){$modul='';} - if($key == 'post'){$modul='post';} - - - $this->app->DB->Insert("INSERT INTO versandarten (id,type,bezeichnung,aktiv,modul) VALUES ('','$key','$value','1','$modul')"); - } - } - - $tmp = $this->app->DB->SelectArr("SELECT type,bezeichnung FROM versandarten WHERE aktiv='1' AND geloescht!='1' AND (projekt = '$projekt' OR projekt = 0) ORDER by bezeichnung"); - if($tmp) - { - for($i=0;$i 0) - { - $result = $this->app->DB->SelectArr("SELECT id,name FROM artikeleigenschaften WHERE projekt='$projekt' AND geloescht!=1 ORDER by name"); - // gibt es keine projekt gruppen dann die ohne projekt verwenden - if(count($result)<=0) - $result = $this->app->DB->SelectArr("SELECT id,name FROM artikeleigenschaften WHERE geloescht!=1 AND projekt <=0 ORDER by name"); - } else - { - $result = $this->app->DB->SelectArr("SELECT id,name FROM artikeleigenschaften WHERE geloescht!=1 AND projekt <=0 ORDER by name"); - } - - if(count($result) > 0) - { - - for($i=0;$i 0) - { - $result = $this->app->DB->SelectArr("SELECT id,bezeichnung FROM artikelkategorien WHERE (projekt='$projekt' OR projekt = 0) AND parent = 0 AND geloescht!=1 ORDER by bezeichnung"); - // gibt es keine projekt gruppen dann die ohne projekt verwenden - if(count($result)<=0) - $result = $this->app->DB->SelectArr("SELECT id,bezeichnung FROM artikelkategorien WHERE geloescht!=1 AND projekt <=0 AND parent = 0 ORDER by bezeichnung"); - } else - { - $result = $this->app->DB->SelectArr("SELECT id,bezeichnung FROM artikelkategorien WHERE geloescht!=1 AND projekt <=0 AND parent = 0 ORDER by bezeichnung"); - } - - if($result && count($result) > 0) - { - - for($i=0;$i"Ware für Verkauf (700000)", - "module"=>"Module / Hardware (600000)", - "produktion"=>"Produktionsmaterial (400000)", - "material"=>"Sonstiges (100000)", - "fremdleistung"=>"Fremdleistung (100000)", - "gebuehr"=>"Gebühr / Miete (100000)"); - } - - - function GetZahlungsstatus() - { - return array('offen','bezahlt'); - } - - /** - * @param null|int $id - * - * @return array - */ - public function GetZahlungsweiseGutschrift($id = null) - { - $zahlungsweise = ''; - $projectId = 0; - $tmp = []; - if($id) { - $returnOrder = $this->app->DB->SelectRow( - sprintf( - 'SELECT `zahlungsweise`, `projekt` FROM `gutschrift` WHERE `id` = %d LIMIT 1', - $id - ) - ); - if(!empty($returnOrder)) { - $projectId = $returnOrder['projekt']; - $zahlungsweise = $returnOrder['zahlungsweise']; - } - } - $extra = $this->app->DB->SelectPairs( - sprintf( - 'SELECT z.`type`, z.`bezeichnung` - FROM `zahlungsweisen` AS `z` - INNER JOIN - ( - SELECT `type`, max(`projekt`) as projekt - FROM `zahlungsweisen` - WHERE `aktiv` = 1 AND `projekt` = 0 OR `projekt` = %d - GROUP BY `type` - ) AS `t` ON z.`type` = t.`type` AND z.`projekt` = t.`projekt`', - $projectId - ) - ); - - - // return array('ueberweisung'=>'Überweisung','bar'=>'Bar','paypal'=>'PayPal'); - - foreach( - [ - 'kreditkarte' => 'Kreditkarte', - 'lastschrift' => 'Verrechnen mit Lastschriften', - 'paypal' => 'Paypal', - 'amazon' => 'Amazon Payments', - 'amazon_bestellung' => 'Amazon Bestellung', - 'secupay' => 'Secupay', - 'sofortueberweisung' => 'Sofortüberweisung', - 'eckarte' => 'EC-Karte', - ] - as $paymentType => $paymentName) { - if(!empty($extra[$paymentType])) { - continue; - } - if($zahlungsweise === $paymentType || $this->Firmendaten('zahlung_'.$paymentType)) { - $tmp[$paymentType] = $paymentName; - } - } - - if(!empty($extra)){ - foreach($extra as $type => $name) { - $tmp[$type] = $name; - } - } - - if($zahlungsweise && empty($tmp[$zahlungsweise])) { - if($zahlungsweise === 'ueberweisung') { - $tmp['ueberweisung'] = 'Überweisung'; - } - else { - $tmp[$zahlungsweise] = ucfirst($zahlungsweise); - } - } - asort($tmp); - - return $tmp; - } - - public function GetZahlungsweise($table = null, $id = null, $projekt = null) - { - $zahlungsweise = ''; - if($projekt === null){ - $projekt = (int)$this->Firmendaten('projekt'); - if(!empty($table) && !empty($id)) - { - $arr = $this->app->DB->SelectRow("SELECT zahlungsweise, projekt FROM $table WHERE id = '$id' LIMIT 1"); - if(!empty($arr)) - { - $zahlungsweise = $arr['zahlungsweise']; - $projekt = (int)$arr['projekt']; - } - } - } - if($this->Firmendaten("zahlung_rechnung") || $zahlungsweise == 'rechnung'){ - $tmp['rechnung'] = "Rechnung"; - } - - if($this->Firmendaten("zahlung_vorkasse") || $zahlungsweise == 'vorkasse'){ - $tmp['vorkasse'] = "Vorkasse"; - } - - if($this->Firmendaten("zahlung_nachnahme") || $zahlungsweise == 'nachnahme'){ - $tmp['nachnahme'] = "Nachnahme"; - } - - if($this->Firmendaten("zahlung_kreditkarte") || $zahlungsweise == 'kreditkarte'){ - $tmp['kreditkarte'] = "Kreditkarte"; - } - - - if($this->Firmendaten("zahlung_eckarte") || $zahlungsweise == 'eckarte'){ - $tmp['eckarte'] = "EC-Karte"; - } - - - if($this->Firmendaten("zahlung_bar") || $zahlungsweise == 'bar'){ - $tmp['bar'] = "Bar"; - } - - if($this->Firmendaten("zahlung_paypal") || $zahlungsweise == 'paypal'){ - $tmp['paypal'] = "Paypal"; - } - - if($this->Firmendaten("zahlung_amazon") || $zahlungsweise == 'amazon'){ - $tmp['amazon'] = "Amazon Payments"; - } - - if($this->Firmendaten("zahlung_amazon_bestellung") || $zahlungsweise == 'amazon_bestellung'){ - $tmp['amazon_bestellung'] = "Amazon Bestellung"; - } - - if($this->Firmendaten("zahlung_secupay") || $zahlungsweise == 'secupay'){ - $tmp['secupay'] = "Secupay"; - } - - if($this->Firmendaten("zahlung_sofortueberweisung") || $zahlungsweise == 'sofortueberweisung'){ - $tmp['sofortueberweisung'] = "Sofortüberweisung"; - } - - if($this->Firmendaten("zahlung_lastschrift") || $zahlungsweise == 'lastschrift'){ - $tmp['lastschrift'] = "Lastschrift"; - } - - if($this->Firmendaten("zahlung_ratenzahlung") || $zahlungsweise == 'ratenzahlung'){ - $tmp['ratenzahlung'] = "Ratenzahlung"; - } - - $extra = $this->app->DB->SelectArr(" - SELECT z.`type`, z.`bezeichnung` - FROM zahlungsweisen z - INNER JOIN - ( - SELECT `type`, max(projekt) as projekt - FROM zahlungsweisen WHERE aktiv=1 AND projekt = 0 OR projekt = $projekt - GROUP BY `type` - ) t ON z.`type` = t.`type` AND z.`projekt` = t.`projekt` - "); - $cextra = !empty($extra)?count($extra):0; - for($i=0;$i<$cextra;$i++) - { - $tmp[$extra[$i]['type']] = $extra[$i]['bezeichnung']; - } - if($zahlungsweise && empty($tmp[$zahlungsweise]))$tmp[$zahlungsweise] = ucfirst($zahlungsweise); - asort($tmp); - return $tmp; - // return array('rechnung'=>'Rechnung','vorkasse'=>'Vorkasse','nachnahme'=>'Nachnahme','kreditkarte'=>'Kreditkarte','einzugsermaechtigung'=>'Einzugsermaechtigung','bar'=>'Bar','paypal'=>'PayPal','lastschrift'=>'Lastschrift'); - } - - function GetPinwandSelect() - { - $tmp = $this->app->DB->SelectArr("SELECT DISTINCT p.id,p.name FROM pinwand p - LEFT JOIN pinwand_user pu ON pu.pinwand=p.id WHERE (pu.user='".$this->app->User->GetID()."' OR p.user='".$this->app->User->GetID()."') ORDER by p.name"); - - $result['0']="Eigene Pinnwand"; - if(empty($tmp)) { - return $result; - } - foreach($tmp as $row) { - $result[$row['id']] = $row['name']; - } - return $result; - } - - function GetSprachenSelect($wert = null) - { - $check = $this->app->DB->Select("SELECT id FROM sprachen WHERE aktiv = 1 LIMIT 1"); - if($check <=0) - { - $this->app->erp->CheckTable("sprachen"); - $this->app->erp->CheckColumn("id", "int(11)", "sprachen", "NOT NULL AUTO_INCREMENT"); - $this->app->erp->CheckColumn("iso", "varchar(2)", "sprachen", "NOT NULL"); - $this->app->erp->CheckColumn("bezeichnung_de", "varchar(255)", "sprachen", "NOT NULL DEFAULT ''"); - $this->app->erp->CheckColumn("bezeichnung_en", "varchar(255)", "sprachen", "NOT NULL DEFAULT ''"); - $this->app->erp->CheckColumn("alias", "varchar(255)", "sprachen", "NOT NULL DEFAULT ''"); - $this->app->erp->CheckColumn("aktiv", "tinyint(1)", "sprachen", "NOT NULL DEFAULT '0'"); - $arr = array('DE'=>array('Deutsch','German','deutsch','1'), - 'EN'=>array('Englisch','English','englisch','1'), - 'FR'=>array('Französisch','French','franzoesisch','1'), - 'NL'=>array('Holländisch','Dutch','hollaendisch','1'), - 'IT'=>array('Italienisch','Italian','italienisch','1'), - 'ES'=>array('Spanisch','Spanish','spanisch','1'), - 'CZ'=>array('Tschechisch','Czech','tschechisch','1'), - 'DK'=>array('Dänisch','Danish','daenisch','1'), - 'SK'=>array('Slowakisch','Slovak','slowakisch','1'), - 'SW'=>array('Schwedisch','Swedish','schwedisch','1'), - 'PL'=>array('Polnisch','Polish','polnisch','1') - ); - foreach($arr as $k => $v) - { - $check = $this->app->DB->SelectArr("SELECT * FROM sprachen WHERE iso = '$k' LIMIT 1"); - if($check) - { - if($check[0]['alias'] != $v[2])$this->app->DB->Update("UPDATE sprachen SET alias = '".$v[2]."', aktiv = 1 WHERE id = '".$check[0]['id']."' LIMIT 1"); - }else{ - $this->app->DB->Insert("INSERT INTO sprachen (iso, bezeichnung_de,bezeichnung_en, alias, aktiv) VALUES ('".$k."','".$v[0]."','".$v[1]."','".$v[2]."','1')"); - } - } - } - $land = $this->Firmendaten('land'); - $tmp = $this->app->DB->SelectArr("SELECT iso,alias, bezeichnung_de,aktiv FROM sprachen WHERE iso <> '' ORDER BY iso = '$land' DESC, bezeichnung_de"); - $deutschfound = false; - $englischfound = false; - for($i=0;$i '') - { - $result[$tmp[$i]['alias']] = $tmp[$i]['bezeichnung_de']; - if($tmp[$i]['alias'] == 'deutsch')$deutschfound = true; - if($tmp[$i]['alias'] == 'englisch')$englischfound = true; - }elseif($wert == $tmp[$i]['iso'] && $wert <> '') - { - $result[$tmp[$i]['iso']] = $tmp[$i]['bezeichnung_de']; - }elseif($tmp[$i]['aktiv']) - { - $result[$tmp[$i]['iso']] = $tmp[$i]['bezeichnung_de']; - } - } - } - if(!$deutschfound)$result['deutsch'] = 'Deutsch'; - if(!$englischfound)$result['englisch'] = 'Englisch'; - return $result; - } - - - function GetTypSelect() - { - $check = $this->app->DB->Select("SELECT COUNT(id) FROM adresse_typ"); - if($check <=0) - { - $tmp = array('firma'=>'Firma','herr'=>'Herr','frau'=>'Frau'); - foreach($tmp as $key=>$value) - { - if($key=="firma") $netto=1;else $netto=0; - $this->app->DB->Insert("INSERT INTO adresse_typ (id,type,bezeichnung,aktiv,netto) VALUES ('','$key','$value','1','$netto')"); - } - } - - $tmp = $this->app->DB->SelectArr("SELECT type,bezeichnung FROM adresse_typ WHERE aktiv='1' AND geloescht!='1' ORDER by bezeichnung"); - - $result['']='Bitte wählen'; - - for($i=0;$i"Privat",'firma_bar'=>"Firma (Kasse/Bar)",'firma_ecr'=>"Firma (EC-Karte)",'firma_cc'=>"Firma (Kreditkarte)",'firma_sonst'=>"Firma (Sonstige)"); - } - - function GetStatusArbeitsnachweis() - { - return array('offen','freigegeben','versendet'); - } - - - function GetStatusAnfrage() - { - return array('offen','abgeschlossen'); - } - - function GetStatusInventur() - { - return array('offen','abgeschlossen'); - } - - function GetStatusReisekosten() - { - return array('offen','freigegeben','versendet','buchhaltung'); - } - - - function GetStatusLieferschein() - { - return array('offen','freigegeben','versendet'); - } - - - function GetStatusAuftrag() - { - return array('offen','freigegeben','abgeschlossen'); - } - - - function GetStatusAngebot() - { - return array('offen','freigegeben','bestellt','angemahnt','empfangen'); - } - - - function GetStatusGutschrift() - { - return array('offen','freigegeben','bezahlt'); - } - - function GetStatusRechnung() - { - return array('offen','freigegeben','gestellt','zahlungserinnerung','mahnung'); - } - - function GetFirmaFieldsCheckbox() - { - $tmp = array('paketmarke_mit_waage','artikel_beschleunigte_suche','internebemerkungminidetails','briefpapier_bearbeiter_ausblenden','briefpapier_vertrieb_ausblenden','versand_gelesen','zahlung_rechnung','zahlung_vorkasse','zahlung_bar','zahlung_lastschrift','zahlung_paypal','zahlung_amazon','artikel_bilder_uebersicht','artikel_baum_uebersicht','internetnummerimbeleg','wiedervorlage_mitarbeiter', - 'zahlung_amazon_bestellung','zahlung_billsafe','zahlung_sofortueberweisung','zahlung_secupay','zahlung_eckarte','zeiterfassung_schliessen','zeiterfassung_pflicht', - 'zahlung_kreditkarte','zahlung_nachnahme','zahlung_ratenzahlung','knickfalz','begrenzen_artikeltabelle','begrenzen_adressetabelle','begrenzen_belege','schnellsuche','schnellsuchecount','versandmail_zwischenspeichern','keinhauptmenurahmen','bordertabnav','steuerfrei_inland_ausblenden','auftragexplodieren_unterstuecklisten', - 'standardaufloesung','immerbruttorechnungen','immernettorechnungen','bestellvorschlaggroessernull','erweiterte_positionsansicht','schnellanlegen','kleinunternehmer','steuerspalteausblenden','api_enable','api_importwarteschlange','warnung_doppelte_nummern','warnung_doppelte_seriennummern','wareneingang_zwischenlager','bestellungohnepreis','zahlung_lastschrift_konditionen','porto_berechnen','breite_artikelbeschreibung','deviceenable','auftrag_eantab','bestellungmitartikeltext','bestellungeigeneartikelnummer','bestellunglangeartikelnummern','steuer_standardkonto_aufwendungen', - 'iconset_dunkel','api_cleanutf8','mahnwesenmitkontoabgleich','briefhtml','absenderunterstrichen','seite_von_ausrichtung_relativ','wareneingang_gross','datatables_export_button_flash','viernachkommastellen_belege','stornorechnung_standard','angebotersatz_standard','geburtstagekalender','footer_zentriert','auftragmarkierenegsaldo','wareneingangauftragzubestellung','freifelderimdokument','zeiterfassung_anderemitarbeiter','zeiterfassung_beschreibungssperre','zeiterfassung_ort','zeiterfassung_kommentar','zeiterfassung_erweitert','footer_reihenfolge_angebot_aktivieren','footer_reihenfolge_auftrag_aktivieren','footer_reihenfolge_rechnung_aktivieren','footer_reihenfolge_gutschrift_aktivieren','footer_reihenfolge_lieferschein_aktivieren','footer_reihenfolge_bestellung_aktivieren','position_quantity_change_price_update', - 'beleg_pos_ean','beleg_pos_charge','beleg_pos_mhd','beleg_pos_sn','beleg_pos_zolltarifnummer', - 'schnellanlegen_ohnefreigabe','langeartikelnummern','noauth','belege_subpositionen', - 'belege_subpositionenstuecklisten','briefpapier_ohnedoppelstrich','bearbeiteremailimdokument', - 'bearbeitertelefonimdokument','seite_belegnr','eigener_skontotext','proformarechnung_ohnebriefpapier', - 'footer_reihenfolge_proformarechnung_aktivieren','zeiterfassung_abrechnenvorausgewaehlt','festetrackingnummer', - 'guenstigste_vk','oneclickrelease','cleaner_logfile','cleaner_protokoll','cleaner_shopimport','cleaner_shopexportlog', - 'cleaner_versandzentrum','cleaner_uebertragungen','cleaner_adapterbox','angebot_auftrag_bestellung_ansprechpartner', - 'ampellager','ampelporto','ampelust','ampelzahlung','ampelnachnahme','ampelautoversand','ampelkunde', - 'ampelliefertermin','ampelkreditlimit','ampelliefersperre','ampelproduktion','freitext1aktiv','freitext2aktiv', - 'reisekosten_ohnebriefpapier','lieferdatumkw','vertriebbearbeiterfuellen','typimdokument','staffelpreiseanzeigen', - 'abmessungimdokument','projektoeffentlich','verkaufspreisevpe','einkaufspreisevpe','apiohnehtmlumwandlung', - 'externeurlsblockieren','auftragabschliessen','belegnummersortierungint', - 'dienstleistungsartikel_nicht_zu_lieferschein','dateienweiterfuehren','systemmailsabschalten','belegeinanhang', - 'lagerbestand_in_auftragspositionen_anzeigen','positionenkaufmaenischrunden','wareneingang_lagerartikel', - 'stuecklistegewichtnurartikel','bestellungabschliessen','gutschriftkursvonrechnung','wareneingangdmsdrucker', - 'dsgvoversandunternehmen','produktionskorrektur_nichtverwenden','disableproductionautostart','closesubproductions', - 'disablecreateproductiononextern', - 'beleg_artikelbild','lieferschein_artikelbild','rechnung_artikelbild','bestellung_artikelbild','gutschrift_artikelbild','angebot_artikelbild', - 'shopexportlog','autoversand_locked_orders','beleg_pos_herkunftsland', - 'loadcurrencyrate','versandzentrum_bild','onlyemployeeprojects','proformainvoice_juststorgearticles' - ); - - return $tmp; - } - - - function GetFirmaFields() - { - $fields = array('additionalcspheader','zahlung_rechnung_de','zahlung_kreditkarte_de','breite_position','breite_menge','breite_nummer','breite_einheit','land','abstand_seiten_unten','beschriftunginternetnummer','breite_artikel','breite_steuer','angebot_anzahltage','angebot_anzahlwiedervorlage','angebot_pipewiedervorlage', - 'zahlung_vorkasse_de','zahlung_nachnahme_de','zahlung_lastschrift_de','zahlung_bar_de','zahlung_paypal_de','zahlung_amazon_de','zahlung_amazon_bestellung_de','zahlung_ratenzahlung_de', - 'zahlung_sofortueberweisung_de','zahlung_billsafe_de','testmailempfaenger','zahlung_secupay_de','zahlung_eckarte_de','abstand_umbruchunten', - 'zahlung_rechnung_sofort_de','api_importwarteschlange_name','footer_farbe','zahlung_auftrag_sofort_de','zahlung_auftrag_de', - 'zahlungszieltage','zahlungszieltageskonto','zahlungszielskonto','api_initkey','api_remotedomain','api_eventurl','steuer_erloese_inland_normal','devicekey','deviceserials','steuer_standardkonto','bcc3', - 'steuer_aufwendung_inland_normal','tabsnavigationfarbe','tabsnavigationfarbeschrift', - 'steuer_erloese_inland_ermaessigt', - 'steuer_aufwendung_inland_ermaessigt', - 'steuer_erloese_inland_steuerfrei', - 'steuer_aufwendung_inland_steuerfrei', - 'steuer_erloese_inland_innergemeinschaftlich', - 'steuer_aufwendung_inland_innergemeinschaftlich', - 'steuer_erloese_inland_eunormal', - 'steuer_erloese_inland_euermaessigt', - 'steuer_erloese_inland_nichtsteuerbar', - 'steuer_aufwendung_inland_nichtsteuerbar', - 'steuer_aufwendung_inland_eunormal', - 'steuer_aufwendung_inland_euermaessigt', - 'steuer_erloese_inland_export', - 'etikettendrucker_wareneingang','schriftgroesseabsender','aufgaben_bondrucker', - 'steuer_aufwendung_inland_import','versandart','zahlungsweise','zahlungsweiselieferant','bezeichnungstornorechnung','steuer_anpassung_kundennummer','abstand_seitenrandlinks','abstand_adresszeilelinks','sepaglaeubigerid','abstand_gesamtsumme_lr', - 'schriftgroesse_gesamt','schriftgroesse_gesamt_steuer','abstand_seitenrandrechts', - - 'bezeichnungangebotersatz', - 'bezeichnungauftragersatz', - 'bezeichnungproformarechnungersatz', - 'bezeichnungrechnungersatz', - 'bezeichnunglieferscheinersatz', - 'bezeichnungbestellungersatz', - 'barcode_x','barcode_y','barcode_x_header','barcode_y_header','abseite2y','mailgrussformel', - 'email_html_template', - 'footer_reihenfolge_angebot', - 'footer_reihenfolge_auftrag', - 'footer_reihenfolge_rechnung', - 'footer_reihenfolge_proformarechnung', - 'footer_reihenfolge_gutschrift', - 'footer_reihenfolge_lieferschein', - 'footer_reihenfolge_bestellung','reihenfolge_zwischenspeicher','adresse_vorlage','eigener_skontotext_re','eigener_skontotext_anab', - 'footer_reihenfolge_bestellung','cleaner_logfile_tage','cleaner_protokoll_tage','cleaner_shopimport_tage','cleaner_versandzentrum_tage','cleaner_uebertragungen_tage','cleaner_adapterbox_tage','begrenzenanzahl_artikeltabelle','begrenzenanzahl_adressetabelle','begrenzenanzahl_belege','versandmails_max','autoversand_maxauftraege' - ,'gewichtzukgfaktor','gewichtbezeichnung','zeiterfassung_schliessentage','freitext1x','freitext1y','freitext1schriftgroesse','freitext1breite','freitext1inhalt', - 'freitext2x','freitext2y','freitext2schriftgroesse','freitext2breite','freitext2inhalt','kommissionskonsignationslager','bezeichnungaktionscodes','belege_stuecklisteneinrueckenmm','ldap_host','ldap_bindname','ldap_searchbase','ldap_filter','systemmailsempfaenger', - 'server_url','server_port','cronjob_limit','cleaner_shopexportlog_tage','poll_repeattime','wareneingangbildtypvorauswahl','wareneingangscanverhalten', 'group_sales', 'group_employee' - ); - - for($ki=1;$ki<=15;$ki++) - { - $fields[]='steuer_art_'.$ki; - $fields[]='steuer_art_'.$ki.'_normal'; - $fields[]='steuer_art_'.$ki.'_ermaessigt'; - $fields[]='steuer_art_'.$ki.'_steuerfrei'; - } - - return $fields; - } - - function GetMLMAuszahlungWaehrung() - { - return array('EUR','CHF'); - } - - function GetWaehrungUmrechnungskurs($von,$nach,$onlytable = false) - { - /** @var Waehrungumrechnung $obj */ - $obj = $this->LoadModul('waehrungumrechnung'); - if(!empty($obj) && method_exists($obj,'GetWaehrungUmrechnungskurs')) - { - return $obj->GetWaehrungUmrechnungskurs($von,$nach,$onlytable); - } - if ($von === 'EUR' && $nach === 'USD') { - return 1.20; - } - if ($von==='EUR' && $nach==='CHF') { - return 1.06; - } - return 0; - } - - function GetSchriftarten() - { - return array( - 'arial' => 'Arial' - ); - } - - function GetFonts() - { - $ret['times'] = array('b' => true,'bi' => true,'i' => true, 'name' => 'Times'); - $ret['arial'] = array('b' => true,'bi' => true,'i' => true, 'name' => 'Arial'); - if(!file_exists(__DIR__.'/pdf/font') || !is_dir(__DIR__.'/pdf/font')) { - return $ret; - } - $handle = opendir(__DIR__.'/pdf/font'); - if(!$handle) { - return $ret; - } - - while (false !== ($entry = readdir($handle))) { - $b = false; - $bi = false; - $i = false; - $pathinfo = pathinfo($entry); - if(isset($pathinfo['extension']) && strtolower($pathinfo['extension']) == 'php') { - if(strpos($entry,'helvetica') !== 0 && strpos($entry,'times') !== 0) - { - $basis = $pathinfo['filename']; - if(substr($pathinfo['filename'],-2) == 'bi') - { - if(file_exists(__DIR__.'/pdf/font/'.substr($pathinfo['filename'],0,strlen($pathinfo['filename'])-2).'.php')) - { - $bi = true; - $basispathinfo = pathinfo(__DIR__.'/pdf/font/'.substr($pathinfo['filename'],0,strlen($pathinfo['filename'])-2)); - $basis = $basispathinfo['basename']; - } - }elseif(substr($pathinfo['filename'],-1) == 'i') - { - if(file_exists(__DIR__.'/pdf/font/'.substr($pathinfo['filename'],0,strlen($pathinfo['filename'])-1).'.php')) - { - $i = true; - $basispathinfo = pathinfo(__DIR__.'/pdf/font/'.substr($pathinfo['filename'],0,strlen($pathinfo['filename'])-1)); - $basis = $basispathinfo['basename']; - } - }elseif(substr($pathinfo['filename'],-1) == 'b') - { - if(file_exists(__DIR__.'/pdf/font/'.substr($pathinfo['filename'],0,strlen($pathinfo['filename'])-1).'.php')) - { - $b = true; - $basispathinfo = pathinfo(__DIR__.'/pdf/font/'.substr($pathinfo['filename'],0,strlen($pathinfo['filename'])-1)); - $basis = $basispathinfo['basename']; - } - - } - if(isset($file))unset($file); - if(isset($name))unset($name); - include_once(__DIR__.'/pdf/font/'.$entry); - if(isset($file)&& file_exists(__DIR__.'/pdf/font/'.$file) && isset($name)) - { - if(!isset($ret[$basis]))$ret[$basis]['name'] = $name; - if(!$bi && !$i && !$b)$ret[$basis]['name'] = $name; - if($bi)$ret[$basis]['bi'] = true; - if($i)$ret[$basis]['i'] = true; - if($b)$ret[$basis]['b'] = true; - } - } - - } - } - closedir($handle); - - return $ret; - } - - function GetMLMAbrechnung() - { - return array('sammelueberweisung'=>'Sammelüberweisung','manuell'=>'Manuelle Auszahlung'); - } - - function GetMLMPositionierung() - { - return array('1'=>'1. Junior Consultant', - '2'=>'2. Consultant', - '3'=>'3. Associate', - '4'=>'4. Manager', - '5'=>'5. Senior Manager', - '6'=>'6. General Director', - '7'=>'7. General Manager', - '8'=>'8. Chief Manager', - '9'=>'9. Vice President', - '10'=>'10. President', - '11'=>'11. ', - '12'=>'12. ', - '13'=>'13. ', - '14'=>'14. ', - '15'=>'15. ' - ); - } - - function GetStatusBestellung() - { - return array('offen','freigegeben','bestellt','angemahnt','empfangen'); - } - - function GetSelectAsso($array, $selected) - { - foreach($array as $key=>$value) - { - if($selected==$key) $tmp = "selected"; else $tmp=""; - $ret .= ""; - } - return $ret; - } - - function GetSelect($array, $selected) - { - foreach($array as $value) - { - if($selected==$value) $tmp = "selected"; else $tmp=""; - $ret .= ""; - } - return $ret; - } - function CreateAdresse($name,$firma="1") - { - $projekt = $this->app->DB->Select("SELECT standardprojekt FROM firma WHERE id='".$this->app->User->GetFirma()."' LIMIT 1"); - - $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - if($projekt_bevorzugt=="1") - { - $projekt = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - } - - $zahlungsweise = $this->StandardZahlungsweise($projekt); - $zahlungsweiselieferant = $this->StandardZahlungsweiseLieferant($projekt); - $versandart = $this->StandardVersandart($projekt); - - $this->app->DB->Insert("INSERT INTO adresse (id,name,firma,zahlungsweise,zahlungsweiselieferant,projekt,versandart) VALUES ('','$name','$firma','$zahlungsweise','$zahlungsweiselieferant','$projekt','$versandart')"); - - $returnId = $this->app->DB->GetInsertID(); - $this->RunHook('AfterAddressCreate', 1, $returnId); - return $returnId; - } - - function CreateLieferadresse($adresse,$data) - { - $this->app->DB->Insert("INSERT INTO lieferadressen (id,adresse) VALUES ('','$adresse')"); - $id = $this->app->DB->GetInsertID(); - if($data['land']=="") $data['land']='DE'; - - $type="lieferadressen"; - $this->app->erp->ObjektProtokoll($type,$id,$type."_create",ucfirst($type)." angelegt"); - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE lieferadressen SET $key='".$value."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - function CreateAnsprechpartner($adresse,$data) - { - $this->app->DB->Insert("INSERT INTO ansprechpartner (id,adresse) VALUES ('','$adresse')"); - $id = $this->app->DB->GetInsertID(); - if($data['land']=="") $data['land']='DE'; - if (!empty($id)) { - $this->app->erp->RunHook('contact_person_created', 1, $id); - } - $type="ansprechpartner"; - $this->app->erp->ObjektProtokoll($type,$id,$type."_create",ucfirst($type)." angelegt"); - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE ansprechpartner SET $key='".$value."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - function CreateAccount($adresse, $data) - { - $this->app->DB->Insert("INSERT INTO adresse_accounts (id, adresse) VALUES ('', '$adresse')"); - $id = $this->app->DB->GetInsertID(); - - if($data['aktiv'] == ""){ - $data['aktiv'] = 0; - } - if($data['art'] == ""){ - $data['art'] = ""; - } - if($data['gueltig_ab'] == "" || $data['gueltig_ab'] == "0000-00-00" || $data['gueltig_ab'] == "00.00.0000"){ - $data['gueltig_ab'] = '0000-00-00'; - }else{ - $data['gueltig_ab'] = date('Y-m-d',strtotime($data['gueltig_ab'])); - } - if($data['gueltig_bis'] == "" || $data['gueltig_bis'] == "0000-00-00" || $data['gueltig_bis'] == "00.00.0000"){ - $data['gueltig_bis'] = "0000-00-00"; - }else{ - $data['gueltig_bis'] = date('Y-m-d',strtotime($data['gueltig_bis'])); - } - - foreach($data as $key => $value){ - $this->app->DB->Update("UPDATE adresse_accounts SET $key = '".$value."' WHERE id = '$id' LIMIT 1"); - } - return $id; - } - - - function FallbackRolle($adresse) - { - if(is_numeric($adresse)) - { - $projekt = $this->app->DB->Select("SELECT ar.parameter FROM adresse_rolle ar INNER JOIN projekt pr ON ar.parameter = pr.id AND pr.geloescht <> 1 WHERE (ar.bis <= CURDATE() OR ar.bis = '0000-00-00') AND ar.adresse='$adresse' AND ar.objekt='Projekt' LIMIT 1"); - if($projekt <=0) - { - $projekt = $this->app->DB->Select("SELECT ar.projekt FROM adresse_rolle ar INNER JOIN projekt pr ON ar.projekt = pr.id AND pr.geloescht <> 1 WHERE (ar.bis <= CURDATE() OR ar.bis = '0000-00-00') AND ar.adresse='$adresse' AND ar.objekt!='Gruppe' LIMIT 1"); - } - return $projekt; - } - } - - function AddRolleZuAdresse($adresse, $subjekt, $praedikat="", $objekt="", $parameter="") - { - if(!$adresse) { - return; - } - $tmp_data_adresse = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); - if(!$tmp_data_adresse) { - return; - } - $projekt = $tmp_data_adresse['projekt']; - if(strtoupper($objekt)=="PROJEKT") - { - $parameter = $this->app->DB->Select("SELECT id FROM projekt WHERE id='$parameter' LIMIT 1"); - if($parameter<=0) $parameter=0; - if($parameter > 0 ) $projekt=$parameter; - else { - $parameter =""; - $projekt = 0; - } - } - - $check = $this->app->DB->Select("SELECT id FROM adresse_rolle WHERE - subjekt='$subjekt' AND objekt='$objekt' AND praedikat='$praedikat' AND parameter='$parameter' AND adresse='$adresse' - AND (bis >= NOW() OR bis='0000-00-00') LIMIT 1"); - - if($check > 0) - return $check; - - // Insert .... - $sql ="INSERT INTO adresse_rolle (id, adresse, subjekt, praedikat, objekt, parameter,von,projekt) - VALUES ('','$adresse','$subjekt','$praedikat','$objekt','$parameter',NOW(),'$projekt')"; - - $this->app->DB->Insert($sql); - $id = $this->app->DB->GetInsertID(); - - - $kundennummer = trim($tmp_data_adresse['kundennummer']); - - // wenn adresse zum erstenmal die rolle erhält wird kundennummer bzw. lieferantennummer vergeben - if($subjekt=="Kunde" && ($kundennummer=="" || is_array($kundennummer))) - { - $kundennummer = $this->GetNextKundennummer($projekt,$tmp_data_adresse); - $this->ObjektProtokoll("adresse",$adresse,"adresse_next_kundennummer","Kundennummer erhalten: $kundennummer"); - $this->app->DB->Update("UPDATE adresse SET kundennummer='$kundennummer' WHERE id='$adresse' AND (kundennummer='0' OR kundennummer='') LIMIT 1"); - } - - $lieferantennummer = trim($this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id='$adresse' LIMIT 1")); - //$data = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); - //$this->LogFile("DEBUG subjekt = $subjekt, projekt=$projekt,adresse=$adresse,lieferantennummer=$lieferantennummer"); - if($subjekt=="Lieferant" && ($lieferantennummer=="" || is_array($lieferantennummer))) - { - $lieferantennummer = $this->GetNextLieferantennummer($projekt,$tmp_data_adresse); - $this->ObjektProtokoll("adresse",$adresse,"adresse_next_lieferantennummer","Lieferantennummer erhalten: $lieferantennummer"); - - $this->app->DB->Update("UPDATE adresse SET lieferantennummer='$lieferantennummer' WHERE id='$adresse' AND (lieferantennummer='0' OR lieferantennummer='') LIMIT 1"); - } - - $mitarbeiternummer = trim($this->app->DB->Select("SELECT mitarbeiternummer FROM adresse WHERE id='$adresse' LIMIT 1")); - if($subjekt=="Mitarbeiter" && ($mitarbeiternummer=="" || is_array($mitarbeiternummer))) - { - $mitarbeiternummer = $this->GetNextMitarbeiternummer($projekt,$tmp_data_adresse); - $this->ObjektProtokoll("adresse",$adresse,"adresse_next_mitarbeiternummer","Mitarbeiternummer erhalten: $mitarbeiternummer"); - - $this->app->DB->Update("UPDATE adresse SET mitarbeiternummer='$mitarbeiternummer' WHERE id='$adresse' AND (mitarbeiternummer='0' OR mitarbeiternummer='') LIMIT 1"); - } - - $this->app->DB->Delete("DELETE FROM adresse_rolle WHERE von > bis AND bis!='0000-00-00'"); - return $id; - } - - - function UpdateArbeitszeit($id,$adr_id, $vonZeit, $bisZeit, $aufgabe, $beschreibung,$ort, $projekt, $paketauswahl,$art,$kunde="",$abrechnen="0",$verrechnungsart="",$kostenstelle="",$abgerechnet="0",$gps="",$internerkommentar="",$auftrag=0,$produktion=0, $preis = 0,$auftragpositionid="") - { - //Update - - $myArr = $this->app->DB->SelectRow("SELECT aufgabe, beschreibung, projekt, kostenstelle FROM arbeitspaket WHERE id = $paketauswahl"); - - if($paketauswahl!=0 && $kunde <=0) - { - $kunde = $this->app->DB->Select("SELECT kunde FROM projekt WHERE id='".$myArr["projekt"]."'"); - $projekt = $myArr["projekt"]; - } - else if($kunde=="NULL") - $kunde = 0; - else if($kunde=="") - $kunde = $this->app->DB->Select("SELECT adresse_abrechnung FROM zeiterfassung WHERE id='$id'"); - - if($auftrag > 0 && $kunde <=0) - $kunde = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$auftrag' LIMIT 1"); - if($produktion > 0 && $kunde <=0) - $kunde = $this->app->DB->Select("SELECT adresse FROM produktion WHERE id='$produktion' LIMIT 1"); - - $this->app->DB->Update("UPDATE zeiterfassung SET aufgabe='$aufgabe',adresse='$adr_id',arbeitspaket='$paketauswahl',ort='$ort',beschreibung='$beschreibung', projekt='$projekt',art='$art', - von='$vonZeit',bis='$bisZeit',adresse_abrechnung='$kunde',abrechnen='$abrechnen',kostenstelle='$kostenstelle', verrechnungsart='$verrechnungsart', abgerechnet='$abgerechnet', ist_abgerechnet='$abgerechnet',gps='$gps',internerkommentar='$internerkommentar',auftrag='$auftrag',produktion='$produktion',auftragpositionid='$auftragpositionid' WHERE id='$id'"); - - // wenn arbeitszeit in arbeistnachweis verwendet wurden ist dann dort auch updaten - - $arbeitsnachweisposid = $this->app->DB->Select("SELECT arbeitsnachweispositionid FROM zeiterfassung WHERE id='$id'"); - if($arbeitsnachweisposid > 0){ - $von = $this->app->DB->Select("SELECT DATE_FORMAT(von,'%H:%i') FROM zeiterfassung WHERE id='$id'"); - $bis = $this->app->DB->Select("SELECT DATE_FORMAT(bis,'%H:%i') FROM zeiterfassung WHERE id='$id'"); - $this->app->DB->Update("UPDATE arbeitsnachweis_position SET bezeichnung='$aufgabe',beschreibung='$beschreibung',ort='$ort', von='$von',bis='$bis', - adresse='$adr_id' WHERE id='$arbeitsnachweisposid' LIMIT 1"); - } - if(!$preis)$preis = $this->app->DB->Select("SELECT stundensatz FROM zeiterfassung WHERE id = '$id' LIMIT 1"); - if(!$preis) - { - $stundensatz = (float)$this->app->DB->Select("SELECT stundensatz FROM `zeiterfassung_kosten` WHERE adresse = '$adr_id' AND (gueltig_ab >= date(von) OR gueltig_ab = '0000-00-00') ORDER by gueltig_ab = '0000-00-00', gueltig_ab LIMIT 1"); - if($stundensatz)$this->app->DB->Update("UPDATE zeiterfassung SET stundensatz = '$stundensatz' WHERE id = '$id' LIMIT 1"); - } - } - - function AddArbeitszeit($adr_id, $vonZeit, $bisZeit, $aufgabe, $beschreibung,$ort, $projekt, $paketauswahl,$art,$kunde="",$abrechnen="",$verrechnungsart="",$kostenstelle="",$abgerechnet="0",$gps="",$aufgabeid=0,$internerkommentar="",$auftrag=0,$produktion=0, $preis = 0,$auftragpositionid="",$serviceauftrag=0) - { - if(str_replace(array('-',':'),'',$vonZeit) == 0 || str_replace(array('-',':'),'',$bisZeit) == 0) - return; - - $insert = ""; - if($paketauswahl==0){ - - if($auftrag > 0 && $kunde <=0) - $kunde = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$auftrag' LIMIT 1"); - - if($produktion > 0 && $kunde <=0) - $kunde = $this->app->DB->Select("SELECT adresse FROM produktion WHERE id='$produktion' LIMIT 1"); - - - - if($abrechnen!="1") $abrechnen=0; - //if($projekt<=0) $projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$kunde' LIMIT 1"); - if($projekt=="") $projekt=0; - $insert = 'INSERT INTO zeiterfassung (adresse, von, bis, aufgabe, beschreibung, projekt, buchungsart,art,adresse_abrechnung,abrechnen,gebucht_von_user,ort,kostenstelle,verrechnungsart,abgerechnet,ist_abgerechnet,gps,aufgabe_id,internerkommentar,auftrag,produktion,auftragpositionid,serviceauftrag) - VALUES ('.$adr_id.',"'.$vonZeit.'","'.$bisZeit.'","'.$aufgabe.'", "'.$beschreibung.'",'.$projekt.', "manuell","'.$art.'","'.$kunde.'","'.$abrechnen.'","'.$this->app->User->GetID().'","'.$ort.'","'.$kostenstelle.'","'.$verrechnungsart.'","'.$abgerechnet.'","'.$abgerechnet.'","'.$gps.'","'.$aufgabeid.'","'.$internerkommentar.'","'.$auftrag.'","'.$produktion.'","'.$auftragpositionid.'","'.$serviceauftrag.'")'; - - }else{ - - $projekt = $this->app->DB->SelectArr("SELECT aufgabe, beschreibung, projekt, kostenstelle FROM arbeitspaket WHERE id = $paketauswahl"); - $myArr = $projekt[0]; - - if($kunde<=0) // wenn kunde angeben wird dann da drauf buchen paralell - $kunde = $this->app->DB->Select("SELECT kunde FROM projekt WHERE id='".$myArr["projekt"]."' LIMIT 1"); - - $insert = 'INSERT INTO zeiterfassung (adresse, von, bis, arbeitspaket, aufgabe, beschreibung, projekt, buchungsart,art,gebucht_von_user,ort,adresse_abrechnung,abrechnen,abgerechnet,ist_abgerechnet,gps,aufgabe_id,internerkommentar,auftrag,produktion,auftragpositionid,serviceauftrag) VALUES - ('.$adr_id.',"'.$vonZeit.'","'.$bisZeit.'",'.$paketauswahl.' , "'.$aufgabe.'", "'.$beschreibung.'",'.$myArr["projekt"].', "AP","'.$art.'","'.$this->app->User->GetID().'","'.$ort.'","'.$kunde.'","'.$abrechnen.'","'.$abgerechnet.'","'.$abgerechnet.'","'.$gps.'","'.$aufgabeid.'","'.$internerkommentar.'","'.$auftrag.'","'.$produktion.'","'.$auftragpositionid.'","'.$serviceauftrag.'")'; - } - $this->app->DB->Insert($insert); - $ret = $this->app->DB->GetInsertID(); - - if(!$preis) - { - $stundensatz = (float)$this->app->DB->Select("SELECT stundensatz - FROM `zeiterfassung_kosten` - WHERE adresse = '$adr_id' AND (gueltig_ab <= curdate() OR gueltig_ab = '0000-00-00') - ORDER BY gueltig_ab DESC LIMIT 1"); - if($stundensatz)$this->app->DB->Update("UPDATE zeiterfassung SET stundensatz = '$stundensatz' WHERE id = '$ret' LIMIT 1"); - } - return $ret; - - // wenn art=="AP" hole projekt und kostenstelle aus arbeitspaket beschreibung - // und update zuvor angelegten datensatz - } - - - /** - * \brief Anlegen eines Arbeitspakets - * - * Diese Funktion legt ein Arbeitspaket an. - * - * \param aufgabe Kurzbeschreibung (ein paar Woerter) - * \param beschreibung Textuelle Beschreibung - * \param projekt Projekt ID - * \param zeit_geplant Stundenanzahl Integer Wert - * \param kostenstelle Kostenstelle - * \param initiator user id des Initiators - * \param abgabedatum Datum fuer Abgabe - * \return Status-Code - * - */ - function CreateArbeitspaket($adresse, $aufgabe,$beschreibung,$projekt,$zeit_geplant,$kostenstelle,$initiator,$abgabedatum="") - { - if(($aufgabe != '') && ($beschreibung != '') && ($projekt != '') && ($zeit_geplant != '') && ($kostenstelle != '') && ($initiator != '')){ - $this->app->DB->Insert('INSERT INTO arbeitspakete (adresse, aufgabe, beschreibung, projekt, zeit_geplant, kostenstelle, initiator, abgabedatum) VALUES ( '.$adresse.',"'.$aufgabe.'", "'.$beschreibung.'", '.$projekt.', '.$zeit_geplant.','.$kostenstelle.', '.$initiator.',"'.$abgabedatum.'")'); - return 1; - } - return 0; - } - - function CreateBenutzerVorlage($felder) - { - $this->app->DB->Insert("INSERT INTO uservorlage (id,bezeichnung,beschreibung) - VALUES ('','{$felder['bezeichnung']}', '{$felder['beschreibung']}')"); - - $id = $this->app->DB->GetInsertID(); - - //standard rechte damit man sich anmelden kann - $this->app->DB->Update("INSERT INTO uservorlagerights (vorlage, module,action,permission) VALUES ('$id','welcome','login',1)"); - $this->app->DB->Update("INSERT INTO uservorlagerights (vorlage, module,action,permission) VALUES ('$id','welcome','logout',1)"); - $this->app->DB->Update("INSERT INTO uservorlagerights (vorlage, module,action,permission) VALUES ('$id','welcome','start',1)"); - $this->app->DB->Update("INSERT INTO uservorlagerights (vorlage, module,action,permission) VALUES ('$id','welcome','startseite',1)"); - $this->app->DB->Update("INSERT INTO uservorlagerights (vorlage, module,action,permission) VALUES ('$id','welcome','settings',1)"); - return $id; - } - - - function CreateBenutzer($felder) - { - $settings = base64_encode(serialize($felder['settings'])); - $firma = $this->app->User->GetFirma(); - - $passwordunenescaped = $felder['passwordunenescaped']; - - $this->app->DB->Insert( - sprintf( - "INSERT INTO `user` - (`username`, `passwordmd5`, `password`, - `description`, `settings`, `parentuser`, `activ`, `type`, `adresse`, - `fehllogins`, `standarddrucker`, `startseite`, - `hwtoken`, `hwkey`, `hwcounter`, `hwdatablock`, - `motppin`, `motpsecret`, `externlogin`, - `gpsstechuhr`, `firma`, `kalender_passwort`, `kalender_aktiv`, `vorlage`, - `projekt_bevorzugen`, `projekt`, `docscan_aktiv`, `docscan_passwort`, `repassword`) - VALUES ( - '%s', MD5('%s'), '', - '%s', '%s', '0', '%d', '%s', %d, - %d, %d, '%s', - %d, '%s', %d, '%s', - '%s', '%s', '%d', - '%d', '%d', '%s', '%d', '%s', - '%d', '%d', '%d', '%s', 0 - )", - $felder['username'], $felder['password'], - $felder['description'], $settings, $felder['activ'], $felder['type'], $felder['adresse'], - $felder['fehllogins'], $felder['standarddrucker'], $felder['startseite'], - $felder['hwtoken'], $felder['hwkey'], $felder['hwcounter'], $felder['hwdatablock'], - $felder['motppin'], $felder['motpsecret'], $felder['externlogin'], - $felder['gpsstechuhr'], $firma, $felder['kalender_passwort'], $felder['kalender_aktiv'], $felder['vorlage'], - $felder['projekt_bevorzugen'], $felder['projekt'], $felder['docscan_aktiv'], $felder['docscan_passwort'] - ) - ); - - $id = $this->app->DB->GetInsertID(); - if(empty($id)) { - return $id; - } - $salt = $this->app->DB->Select("SELECT salt FROM user WHERE id = '$id' LIMIT 1"); - if(!$this->app->DB->error()) { - $salt = hash('sha512',microtime(true)); - $passwordsha512 = hash('sha512', $passwordunenescaped.$salt); - $this->app->DB->Update("UPDATE user SET password='', salt = '$salt', passwordsha512 = '$passwordsha512' WHERE id='$id' LIMIT 1"); - } - - //standard rechte damit man sich anmelden kann - $this->insertDefaultUserRights($id); - $this->AbgleichBenutzerVorlagen($id); - - return $id; - } - - /** - * @param int $userId - */ - public function insertDefaultUserRights($userId) - { - if($userId <= 0) { - return; - } - foreach(['login','logout','start','startseite','settings'] as $action) { - $this->app->DB->Update( - sprintf( - "INSERT INTO `userrights` (`user`, `module`, `action`, `permission`) VALUES (%d, 'welcome', '%s', 1)", - $userId, $action - ) - ); - } - } - - function IsAdresseInGruppe($adresse,$gruppe) - { - - $check = $this->app->DB->Select("SELECT a.parameter FROM adresse_rolle a WHERE - (a.bis='0000-00-00' OR a.bis <=NOW()) AND a.adresse='$adresse' AND a.parameter='$gruppe' AND a.objekt='Gruppe' LIMIT 1"); - - return ($check == $gruppe) && $gruppe > 0; - } - - function IsAdresseSubjekt($adresse,$subjekt) - { - $id = $this->app->DB->Select("SELECT id FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='$subjekt' LIMIT 1"); - return $id > 0?1:0; - } - - function AddOffenenVorgang($adresse, $titel, $href, $beschriftung="", $linkremove="") - { - $sql = "INSERT INTO offenevorgaenge (id,adresse,titel,href,beschriftung,linkremove) VALUES - ('','$adresse','$titel','$href','$beschriftung','$linkremove')"; - $this->app->DB->Insert($sql); - } - - - function RenameOffenenVorgangID($id,$titel) - { - $sql = "UPDATE offenevorgaenge SET titel='$titel' WHERE id='$id' LIMIT 1"; - $this->app->DB->Update($sql); - } - - function RemoveOffenenVorgangID($id) - { - $sql = "DELETE FROM offenevorgaenge WHERE id='$id' LIMIT 1"; - $this->app->DB->Delete($sql); - } - - function CalcNextNummer($nummer) - { - $nummer = trim($nummer); - - //Nummer von rechts abknabbern - for($i=strlen($nummer)-1; $i >= 0; $i--) - { - $checkvalue = $nummer[$i]; - if(is_numeric($checkvalue)) - $nummer_anteil[] = $checkvalue; - else break; - } - // nummer string erstellen - if(isset($nummer_anteil)) - { - $nummer_anteil_string = implode("",$nummer_anteil); - $nummer_anteil_string = strrev($nummer_anteil_string); - $laenge_nummer_anteil_string = strlen($nummer_anteil_string); - } else { - $nummer_anteil_string = 0; - $laenge_nummer_anteil_string = 0; - } - - // buchstaben teil extrahieren - $buchstaben_anteil_string = substr($nummer,0,strlen($nummer) - $laenge_nummer_anteil_string); - if($laenge_nummer_anteil_string == 0)$laenge_nummer_anteil_string = 1; - // nummer erhoehen - $neue_nummer = $nummer_anteil_string+1; - - - // nummer von links auffuellen mit nullern - $neue_nummer = str_pad($neue_nummer, $laenge_nummer_anteil_string, "0", STR_PAD_LEFT); - - //zusammensetzen - return $buchstaben_anteil_string.$neue_nummer; - } - - function GetNextNummer($type,$projekt="",$data="") - { - $doctype = $type; - if(in_array($doctype,['kundennummer', 'lieferantennummer', 'mitarbeiternummer'])) { - $doctype = 'adresse'; - } - $checkprojekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id='$projekt' LIMIT 1"); - - $process_lock = $this->app->erp->ProzessLock("erpapi_getnextnummer"); - - $eigenernummernkreis = 0; - if($eigenernummernkreis=='1') - { - - } else { - // naechste - switch($type) - { - case "preisanfrage": - $belegnr = $this->Firmendaten("next_preisanfrage"); - if($belegnr == "0" || $belegnr == "") $belegnr = 100000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "angebot": - $belegnr = $this->Firmendaten("next_angebot"); - if($belegnr == "0" || $belegnr == "") $belegnr = 100000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "auftrag": - $belegnr = $this->Firmendaten("next_auftrag"); - if($belegnr == "0" || $belegnr=="") $belegnr = 200000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "rechnung": - $belegnr = $this->Firmendaten("next_rechnung"); - if($belegnr == "0" || $belegnr=="") $belegnr = 400000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "gutschrift": - $belegnr = $this->Firmendaten("next_gutschrift"); - if($belegnr == "0" || $belegnr=="") $belegnr = 900000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "lieferschein": - $belegnr = $this->Firmendaten("next_lieferschein"); - if($belegnr == "0" || $belegnr=="") $belegnr = 300000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "retoure": - $belegnr = $this->Firmendaten("next_retoure"); - if($belegnr == "0" || $belegnr=="") $belegnr = 500000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "bestellung": - $belegnr = $this->Firmendaten("next_bestellung"); - if($belegnr == "0" || $belegnr=="") $belegnr = 100000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "arbeitsnachweis": - $belegnr = $this->Firmendaten("next_arbeitsnachweis"); - if($belegnr == "0" || $belegnr=="") $belegnr = 300000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "anfrage": - $belegnr = $this->Firmendaten("next_anfrage"); - if($belegnr == "0" || $belegnr=="") $belegnr = 300000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "preisanfrage": - $belegnr = $this->Firmendaten("next_preisanfrage"); - if($belegnr == "0" || $belegnr=="") $belegnr = 300000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "proformarechnung": - $belegnr = $this->Firmendaten("next_proformarechnung"); - if($belegnr == "0" || $belegnr=="") $belegnr = 300000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "kalkulation": - $belegnr = $this->Firmendaten("next_kalkulation"); - if($belegnr == "0" || $belegnr=="") $belegnr = 300000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "reisekosten": - $belegnr = $this->Firmendaten("next_reisekosten"); - if($belegnr == "0" || $belegnr=="") $belegnr = 300000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "produktion": - $belegnr = $this->Firmendaten("next_produktion"); - if($belegnr == "0" || $belegnr=="") $belegnr = 300000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "kundennummer": - $belegnr = $this->Firmendaten("next_kundennummer"); - if($belegnr == "0" || $belegnr=="") $belegnr = 10000; - while($this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer = '$belegnr' and kundennummer <> '' and geloescht <> 1 LIMIT 1")) - { - $belegnr++; - } - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "lieferantennummer": - $belegnr = $this->Firmendaten("next_lieferantennummer"); - if($belegnr == "0" || $belegnr=="") $belegnr = 70000; - while($this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer = '$belegnr' and lieferantennummer <> '' and geloescht <> 1 LIMIT 1")) - { - $belegnr++; - } - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "mitarbeiternummer": - $belegnr = $this->Firmendaten("next_mitarbeiternummer"); - if($belegnr == "0" || $belegnr=="") $belegnr = 90000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "projektnummer": - $belegnr = $this->Firmendaten("next_projektnummer"); - if($belegnr == "0" || $belegnr=="") $belegnr = 90000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "serviceauftrag": - $belegnr = $this->Firmendaten("next_serviceauftrag"); - if($belegnr == "0" || $belegnr=="") $belegnr = 300000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case "verbindlichkeit": - $belegnr = $this->Firmendaten("next_verbindlichkeit"); - if($belegnr == "0" || $belegnr=="") $belegnr = 10000; - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - case 'receiptdocument': - $belegnr = $this->Firmendaten('next_receiptdocument'); - if($belegnr == '0' || $belegnr=='') { - $belegnr = 10000; - } - $newbelegnr = $this->CalcNextNummer($belegnr); - break; - default: - $belegnr = null; - $newbelegnr = null; - $this->RunHook('next_number', 3, $type, $belegnr, $newbelegnr); - if($belegnr === null && $newbelegnr === null){ - $begelnr = 'Fehler'; - } - break; - } - - $this->FirmendatenSet("next_$type",$newbelegnr); - } - $this->app->erp->ProzessUnlock($process_lock); - - // alle spalten aus Adress als Variable - $doctypeid = $data; - if($doctype === 'adresse') { - if(is_numeric($data)) { - $adresse = $this->app->DB->SelectRow( - sprintf( - 'SELECT a.* FROM `adresse` AS a WHERE a.id=%d LIMIT 1', - $doctypeid - ) - ); - }elseif(is_array($data)) { - if(empty($data['id']) && !empty($data[0])) { - $data = reset($data); - } - if(!empty($data['id'])) { - $adresse = $data; - } - } - } elseif(is_array($data)) { - if(empty($data['id']) && !empty($data[0])) { - $data = reset($data); - } - if(!empty($data['id'])) { - $data = $data['id']; - } - } - if(is_numeric($data)){ - $adresse = $this->app->DB->SelectRow( - sprintf( - "SELECT a.* FROM `%s` b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id=%d LIMIT 1", - $doctype, $data - ) - ); - } - if(!empty($adresse)) { - foreach($adresse as $key=>$value) { - $belegnr = str_ireplace('{ADRESSE_' . strtoupper($key) . '}', $value, $belegnr); - } - } - - $belegnr = str_ireplace('{JAHR}',date('Y'),$belegnr); - $belegnr = str_ireplace('{MONAT}',date('m'),$belegnr); - $belegnr = str_ireplace('{TAG}',date('d'),$belegnr); - $belegnr = str_ireplace('{KW}',date('W'),$belegnr); - return $belegnr; - } - - function InsertUpdateAdresse($data) - { - $created = false; - if(!is_array($data)) { - return false; - } - $projekt = $this->app->DB->Select("SELECT standardprojekt FROM firma WHERE id='".$this->app->User->GetFirma()."' LIMIT 1"); - if(isset($data['projekt'])){ - $projekt = $data['projekt']; - } else { - $data['projekt'] = $projekt; - } - if(isset($data['id'])) - { - $adresse = $this->app->DB->SelectRow("select * from adresse where id = ".$data['id']." limit 1"); - } - if(!isset($adresse) || !$adresse) - { - $where = " geloescht <> 1 "; - if(isset($data['lieferantennummer']) && $data['lieferantennummer'] !== '') - { - if($where != "")$where .= " and "; - $where .= " lieferantennummer like '".$this->app->DB->real_escape_string($data['lieferantennummer'])."' "; - } - if(isset($data['kundennummer']) && $data['kundennummer'] !== '') - { - if($where != "")$where .= " and "; - $where .= " kundennummer like '".$this->app->DB->real_escape_string($data['kundennummer'])."' "; - } - if(isset($data['mitarbeiternummer']) && $data['mitarbeiternummer'] !== '') - { - if($where != "")$where .= " and "; - $where .= " mitarbeiternummer like '".$this->app->DB->real_escape_string($data['mitarbeiternummer'])."' "; - } - if($where != " geloescht <> 1 ") { - $adresse = $this->app->DB->SelectRow("select * from adresse where ".$where." limit 1"); - } - } - if(!isset($adresse) || !$adresse) - { - $this->app->DB->Insert("insert into adresse (id) values ('')"); - $id = $this->app->DB->GetInsertID(); - $created = true; - if($id) - { - $adresse = $this->app->DB->SelectRow("select * from adresse where id = '".$id."' limit 1"); - - } else return false; - if(isset($data['lieferantennummer']) && $data['lieferantennummer'] !== '') - { - $this->AddRolleZuAdresse($id, "Lieferant", "von", "Projekt", $projekt); - } - if(isset($data['kundennummer']) && $data['kundennummer'] !== '') - { - $this->AddRolleZuAdresse($id, "Kunde", "von", "Projekt", $projekt); - } - if(isset($data['mitarbeiternummer']) && $data['mitarbeiternummer'] !== '') - { - $this->AddRolleZuAdresse($id, "Mitarbeiter", "von", "Projekt", $projekt); - } - } - if(!$adresse)return false; - if(isset($adresse['id']))$id = $adresse['id']; - if(isset($data['lieferantennummer']) && $data['lieferantennummer'] !== '') - { - $this->AddRolleZuAdresse($id, "Lieferant", "von", "Projekt", $projekt); - } - if(isset($data['kundennummer']) && $data['kundennummer'] !== '') - { - $this->AddRolleZuAdresse($id, "Kunde", "von", "Projekt", $projekt); - } - if(isset($data['mitarbeiternummer']) && $data['mitarbeiternummer'] !== '') - { - $this->AddRolleZuAdresse($id, "Mitarbeiter", "von", "Projekt", $projekt); - } - - $zielspalten = $this->app->DB->SelectArr("show columns from `adresse`"); - if($zielspalten) - { - foreach($zielspalten as $val)$ziel[$val['Field']] = true; - } - - foreach($data as $k => $v) - { - $k = trim($k); - if(empty($ziel)) - { - $ka = explode(' ',$k); - $k = $ka[0]; - } - if($k !== '' && $k != 'id' && (String)$adresse[$k] !== (String)$v && (empty($ziel) || isset($ziel[$k]))) - { - $sqla[] = $this->app->DB->real_escape_string($k). " = ".(!is_null($v)?"'".$this->app->DB->real_escape_string($v)."'":"NULL")." "; - } - } - - if(!empty($sqla))$this->app->DB->Update("update adresse set ".implode(', ',$sqla)." where id = '".$adresse['id']."' LIMIT 1"); - - if($this->app->DB->error() != '' || empty($sqla)) - { - foreach($data as $k => $v) - { - $k = trim($k); - if(empty($ziel)) - { - $ka = explode(' ',$k); - $k = $ka[0]; - } - if($k !== '' && $k != 'id' && (String)$adresse[$k] !== (String)$v && (empty($ziel) || isset($ziel[$k]))) - { - $this->app->DB->Update("update adresse set ".$this->app->DB->real_escape_string($k)." = ".(!is_null($v)?"'".$this->app->DB->real_escape_string($v)."'":"NULL")." where id = '".$adresse['id']."' LIMIT 1"); - } - } - } - if($created) { - $addressId = $adresse['id']; - $this->RunHook('adresse_create', 1, $addressId); - $this->RunHook('AfterAddressCreate', 1, $addressId); - } - else { - $addressId = $adresse['id']; - $this->RunHook('adresse_update', 1, $addressId); - } - - return $adresse['id']; - } - - public function InsertUpdateArtikel($data, $onlyUpdate = false) { - if(!is_array($data)){ - return false; - } - $created = false; - $projekt = $this->app->erp->Firmendaten('projekt'); - if(isset($data['projekt'])){ - $projekt = $data['projekt']; - } else { - $data['projekt'] = $projekt; - } - if(isset($data['id']) && $data['id']) { - $artikel = $this->app->DB->SelectRow("select * from artikel where id = ".$data['id']." limit 1"); - } - else { - $artikel = null; - } - if(!$artikel && isset($data['nummer']) && $data['nummer'] != '') { - $order = ""; - $where = " geloescht <> 1 AND nummer = '".$this->app->DB->real_escape_string($data['nummer'])."'"; - - if(isset($data['projekt']) && $data['projekt'] && (int)$data['projekt'] > 0) { - if($this->app->DB->Select("SELECT id FROM projekt WHERE eigenernummernkreis = 1 AND id = '".(int)$data['projekt']."'")) { - $where .= " AND projekt = '".(int)$data['projekt']."' "; - }else { - $order .= " ORDER BY projekt = '".(int)$data['projekt']."' DESC "; - } - } - if(isset($data['typ']) && $data['typ'] !== '') { - $kat = (int)str_replace('_kat','',$data['typ']); - if($kat && $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '$kat' AND externenummer = 0 AND geloescht = 0 LIMIT 1")) { - if($order === '') { - $order .= " ORDER BY "; - } - else{ - $order .= " , "; - } - $order .= " typ = '".$kat.'_kat'."' DESC "; - } - } - $artikel = $this->app->DB->SelectRow("select * from artikel where ".$where." $order limit 1"); - } - if(!(isset($artikel['id']) && $artikel['id'] > 0)) { - if($onlyUpdate) { - return false; - } - $this->app->DB->Insert("insert into artikel (id) values (NULL)"); - $created = true; - $id = $this->app->DB->GetInsertID(); - $artikel = $this->app->DB->SelectRow("select * from artikel where id = ".$id." limit 1"); - if(empty($data['nummer'])){ - $data['nummer'] = $this->GetNextArtikelnummer(!empty($data['typ'])?$data['typ']:"", 1, $data['projekt']); - } - } - if(isset($artikel['id']) && $artikel['id'] > 0) { - $id = $artikel['id']; - $zielspalten = $this->app->DB->SelectArr("show columns from `artikel`"); - if($zielspalten) { - foreach($zielspalten as $val) { - $ziel[$val['Field']] = true; - } - } - - foreach($data as $k => $v) { - $k = trim($k); - if(empty($ziel)) { - $ka = explode(' ',$k); - $k = $ka[0]; - } - $artikelValue = isset($artikel[$k])?(String)$artikel[$k]:''; - if($k !== '' && $k !== 'id' && $artikelValue !== (String)$v && (empty($ziel) || isset($ziel[$k]))) { - $sqla[] = $this->app->DB->real_escape_string($k). ' = '.($v !== null?"'".$this->app->DB->real_escape_string($v)."'":'NULL').' '; - } - } - - if(!empty($sqla)) { - $this->app->DB->Update("update artikel set ".implode(', ',$sqla)." where id = '".$id."' LIMIT 1"); - } - if($this->app->DB->error() != '' || empty($sqla)) { - foreach($data as $k => $v) { - if(empty($ziel)){ - $ka = explode(' ',trim($k)); - $k = $ka[0]; - } - $artikelValue = isset($artikel[$k])?(String)$artikel[$k]:''; - if($k !== '' && $k !== 'id' && $artikelValue !== (String)$v && (empty($ziel) || isset($ziel[$k]))) { - $this->app->DB->Update("update artikel set ".$this->app->DB->real_escape_string($k)." = ".($v !== null?"'".$this->app->DB->real_escape_string($v)."'":'NULL')." where id = '".$id."' LIMIT 1"); - } - } - } - if(!empty($data['shop']) || !empty($data['shop2']) || !empty($data['shop3'])) { - $this->CheckShopTabelle($id); - } - $articleId = $id; - if($created) { - $this->app->erp->RunHook('artikel_create', 1, $articleId); - } - else { - $this->app->erp->RunHook('artikel_update', 1, $articleId); - } - return $id; - } - return false; - } - - function GetNextArtikelnummer($artikelart="",$firma="1",$projekt="") - { - // neue artikel nummer holen - $process_lock = $this->app->erp->ProzessLock("erpapi_getnextartikelnummer"); - if(is_numeric($artikelart)) $artikelart = $artikelart."_kat"; - - $check = str_replace("_kat","",$artikelart); - $check = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE id='$check' AND geloescht!=1 LIMIT 1"); - - if($check > 0) - { - $next_nummer_alt = $this->app->DB->Select("SELECT next_nummer FROM artikelkategorien WHERE id='$check' AND geloescht!=1"); - $externenummer = $this->app->DB->Select("SELECT externenummer FROM artikelkategorien WHERE id='$check' AND geloescht!=1"); - - if($externenummer!="1") - { - if($next_nummer_alt=="") - { - $next_nummer_alt = 100000; - $neue_nummer = $next_nummer_alt; - $this->app->DB->Update("UPDATE artikelkategorien SET next_nummer='$neue_nummer' WHERE id='$check' AND geloescht!=1"); - } else { - $nurbuchstaben = preg_replace("/[^a-zA-Z]/","",$next_nummer_alt); - $nurzahlen = preg_replace("/[^0-9]/","",$next_nummer_alt); - $laenge = strlen($nurzahlen); - - $next_nummer = $this->CalcNextNummer($next_nummer_alt); - //$nurbuchstaben.str_pad($nurzahlen+1, $laenge ,'0', STR_PAD_LEFT); - $neue_nummer = $next_nummer; - - $this->app->DB->Update("UPDATE artikelkategorien SET next_nummer='$next_nummer' WHERE id='$check' AND geloescht!=1"); - } - } else { - // externe nummer holen - // TODO pruefen ob es im Projekt ueberladen gehoert - $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id='$projekt' LIMIT 1"); - if($eigenernummernkreis=="1") - { - $neue_nummer = $this->app->DB->Select("SELECT next_artikelnummer FROM projekt WHERE id='$projekt' LIMIT 1"); - if($this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$this->app->DB->real_escape_string($neue_nummer)."' LIMIT 1"))$neue_nummer = $this->CalcNextNummer($neue_nummer); - $next_nummer = $this->CalcNextNummer($neue_nummer); - $this->app->DB->Update("UPDATE projekt SET next_artikelnummer='".$next_nummer."' WHERE id='$projekt' LIMIT 1"); - } else { - //zentraler nummernkreis mit prefix - $next_nummer = $this->CalcNextNummer($this->Firmendaten("next_artikelnummer")); - $this->FirmendatenSet("next_artikelnummer",$next_nummer); - if($next_nummer_alt!="") $neue_nummer=$next_nummer_alt.$next_nummer; - else $neue_nummer = $next_nummer; - } - - //$nurbuchstaben = preg_replace("/[^a-zA-Z]/","",$next_nummer_alt); - //$neue_nummer = $nurbuchstaben.$next_nummer; - //$neue_nummer = $this->CalcNextNummer($next_nummer_alt); - } - } else { - $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id='$projekt' LIMIT 1"); - if($eigenernummernkreis) - { - $neue_nummer = $this->app->DB->Select("SELECT next_artikelnummer FROM projekt WHERE id='$projekt' LIMIT 1"); - if($this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$this->app->DB->real_escape_string($neue_nummer)."' LIMIT 1"))$neue_nummer = $this->CalcNextNummer($neue_nummer); - $next_nummer = $this->CalcNextNummer($neue_nummer); - $this->app->DB->Update("UPDATE projekt SET next_artikelnummer='".$next_nummer."' WHERE id='$projekt' LIMIT 1"); - }else{ - $firmennummer = $this->app->erp->Firmendaten('next_artikelnummer'); - if($firmennummer) - { - $next_nummer = $firmennummer; - $neue_nummer = $this->CalcNextNummer($next_nummer); - $this->FirmendatenSet('next_artikelnummer', $neue_nummer); - $neue_nummer = $this->app->erp->Firmendaten('next_artikelnummer'); - } else { - switch($artikelart) - { - case "produkt": - $neue_nummer = $this->app->DB->Select("SELECT MAX(nummer) FROM artikel WHERE nummer LIKE '7%'"); - if($neue_nummer=="" || $neue_nummer=="0") $neue_nummer = "700000"; - break; - case "produktion": - $neue_nummer = $this->app->DB->Select("SELECT MAX(nummer) FROM artikel WHERE nummer LIKE '4%'"); - if($neue_nummer=="" || $neue_nummer=="0") $neue_nummer = "400000"; - break; - case "module": - $neue_nummer = $this->app->DB->Select("SELECT MAX(nummer) FROM artikel WHERE nummer LIKE '6%'"); - if($neue_nummer=="" || $neue_nummer=="0") $neue_nummer = "600000"; - break; - default: - $neue_nummer = $this->app->DB->Select("SELECT MAX(CAST(nummer AS UNSIGNED)) FROM artikel WHERE nummer LIKE '1%'"); - if(($neue_nummer=="" || $neue_nummer=="0")) $neue_nummer = "100000"; - } - $neue_nummer = $this->CalcNextNummer($neue_nummer);//$neue_nummer + 1; - } - } - } - $this->app->erp->ProzessUnlock($process_lock); - $neue_nummer = str_replace('{JAHR}',date('Y'),$neue_nummer); - $neue_nummer = str_replace('{MONAT}',date('m'),$neue_nummer); - $neue_nummer = str_replace('{TAG}',date('d'),$neue_nummer); - return $neue_nummer; - } - - function GetNextMitarbeiternummer($projekt="",$data="") - { - return $this->GetNextNummer("mitarbeiternummer",$projekt,$data); - } - - - function GetNextKundennummer($projekt="",$data="") - { - return $this->GetNextNummer("kundennummer",$projekt,$data); - } - - function GetNextLieferantennummer($projekt="",$data="") - { - return $this->GetNextNummer("lieferantennummer",$projekt,$data); - } - - function ArbeitsnachweisProtokoll($id,$text) - { - /** @var Arbeitsnachweis $obj */ - $obj = $this->app->erp->LoadModul('arbeitsnachweis'); - if(!empty($obj) && method_exists($obj, 'addArbeitsnachweisProtokoll')) { - $obj->addArbeitsnachweisProtokoll($id, $text); - } - } - - - function KalkulationProtokoll($id,$text) - { - if(!$id)return; - $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; - $text = $this->app->DB->real_escape_string($text); - $this->app->DB->Insert("INSERT INTO kalkulation_protokoll (id,reisekosten,zeit,bearbeiter,grund) VALUES - ('','$id',NOW(),'".$bearbeiter."','$text')"); - } - - function ReisekostenProtokoll($id,$text) - { - /** @var Reisekosten $obj */ - $obj = $this->app->erp->LoadModul('reisekosten'); - if(!empty($obj) && method_exists($obj, 'AddReisekostenProtokoll')) { - $obj->AddReisekostenProtokoll($id, $text); - } - } - - - function AnfrageProtokoll($id,$text) - { - $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; - $text = $this->app->DB->real_escape_string($text); - $this->app->DB->Insert("INSERT INTO anfrage_protokoll (id,anfrage,zeit,bearbeiter,grund) VALUES - ('','$id',NOW(),'".$bearbeiter."','$text')"); - } - - - function BelegProtokoll($typ,$id,$text) - { - if(!$id)return; - $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; - $text = $this->app->DB->real_escape_string($text); - $this->app->DB->Insert("INSERT INTO ".$typ."_protokoll (id,".$typ.",zeit,bearbeiter,grund) VALUES - ('','$id',NOW(),'".$bearbeiter."','$text')"); - } - - - function PreisanfrageProtokoll($id,$text) - { - /** @var Preisanfrage $obj */ - $obj = $this->app->erp->LoadModul('preisanfrage'); - if(!empty($obj) && method_exists($obj,'addPreisanfrageProtokoll')) { - $obj->addPreisanfrageProtokoll($id, $text); - } - } - - - function ProformarechnungProtokoll($id,$text) - { - if(!$id)return; - $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; - $text = $this->app->DB->real_escape_string($text); - $this->app->DB->Insert("INSERT INTO proformarechnung_protokoll (id,proformarechnung,zeit,bearbeiter,grund) VALUES - ('','$id',NOW(),'".$bearbeiter."','$text')"); - } - - - - function InventurProtokoll($id,$text) - { - /** @var Inventur $obj */ - $obj = $this->LoadModul('inventur'); - if(!empty($obj) && method_exists($obj, 'AddInventurProtokoll')) - { - $obj->AddInventurProtokoll($id,$text); - } - } - - function RetoureProtokoll($id,$text) - { - /** @var Retoure $obj */ - $obj = $this->app->erp->LoadModul('retoure'); - if($obj && method_exists($obj,'addRetoureProtokoll')) { - $obj->addRetoureProtokoll($id, $text); - } - } - - function LieferscheinProtokoll($id,$text) - { - if(!$id)return; - $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; - $text = $this->app->DB->real_escape_string($text); - $this->app->DB->Insert("INSERT INTO lieferschein_protokoll (id,lieferschein,zeit,bearbeiter,grund) VALUES - ('','$id',NOW(),'".$bearbeiter."','$text')"); - } - - - function AuftragProtokoll($id, $text, $bearbeiter = '') - { - if(!$id){ - return; - } - if(empty($bearbeiter)){ - $bearbeiter = ''; - if((isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))){ - $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName()); - } - } - $text = $this->app->DB->real_escape_string($text); - $this->app->DB->Insert("INSERT INTO auftrag_protokoll (id,auftrag,zeit,bearbeiter,grund) VALUES - ('','$id',NOW(),'".$bearbeiter."','$text')"); - } - - function AngebotProtokoll($id,$text) - { - if(!$id)return; - $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; - $text = $this->app->DB->real_escape_string($text); - $this->app->DB->Insert("INSERT INTO angebot_protokoll (id,angebot,zeit,bearbeiter,grund) VALUES - ('','$id',NOW(),'".$bearbeiter."','$text')"); - } - - function BestellungProtokoll($id,$text) - { - $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; - $text = $this->app->DB->real_escape_string($text); - $this->app->DB->Insert("INSERT INTO bestellung_protokoll (id,bestellung,zeit,bearbeiter,grund) VALUES - ('','$id',NOW(),'".$bearbeiter."','$text')"); - } - - function RechnungProtokoll($id,$text) - { - if(!$id)return; - $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; - $text = $this->app->DB->real_escape_string($text); - $this->app->DB->Insert("INSERT INTO rechnung_protokoll (id,rechnung,zeit,bearbeiter,grund) VALUES - ('','$id',NOW(),'".$bearbeiter."','$text')"); - } - - function GutschriftProtokoll($id,$text) - { - if(!$id)return; - $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; - $text = $this->app->DB->real_escape_string($text); - $this->app->DB->Insert("INSERT INTO gutschrift_protokoll (id,gutschrift,zeit,bearbeiter,grund) VALUES - ('','$id',NOW(),'$bearbeiter','$text')"); - } - - - function LoadArbeitsnachweisStandardwerte($id,$adresse,$projekt="") - { - /** @var Arbeitsnachweis $obj */ - $obj = $this->app->erp->LoadModul('arbeitsnachweis'); - if(!empty($obj) && method_exists($obj, 'LoadArbeitsnachweisStandardwerte')) { - $obj->LoadArbeitsnachweisStandardwerte($id,$adresse,$projekt); - } - } - - - function LoadInventurStandardwerte($id,$adresse,$projekt="") - { - /** @var Inventur $obj */ - $obj = $this->LoadModul('inventur'); - if(!empty($obj) && method_exists($obj, 'LoadInventurStandardwerte')) - { - $obj->LoadInventurStandardwerte($id,$adresse,$projekt); - } - } - - function KundeHatZR($adresse) - { - $verband = $this->GetVerband($adresse); - $zr = $this->app->DB->Select("SELECT zentralregulierung FROM gruppen WHERE id='$verband' LIMIT 1"); - - return $zr=='1'; - } - - function GetVerbandName($gruppe) - { - return $this->app->DB->Select("SELECT CONCAT(kennziffer,' ',name) FROM gruppen WHERE id='$gruppe' LIMIT 1"); - } - - function GetVerband($adresse) - { - return $this->app->DB->Select("SELECT g.id FROM adresse_rolle a INNER JOIN gruppen g ON g.id=a.parameter WHERE - (a.bis='0000-00-00' OR a.bis >=NOW()) AND a.adresse='$adresse' AND a.objekt='Gruppe' AND (g.art='verband' OR g.art='preisgruppe') AND g.aktiv = 1 LIMIT 1"); - } - - function LoadAnfrageStandardwerte($id,$adresse,$projekt="") - { - // standard adresse von lieferant - $arr = $this->app->DB->SelectArr("SELECT *,vertrieb as vertriebid,innendienst as bearbeiterid,'' as bearbeiter FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - - $arr[0]['gruppe'] = $this->GetVerband($adresse); - $field = array('anschreiben','name','abteilung','typ','unterabteilung','strasse','adresszusatz','plz','ort','land','ustid','email','telefon','telefax', - 'kundennummer','projekt','gruppe','vertriebid','bearbeiterid','bearbeiter','titel'); - - foreach($field as $key=>$value) - { - - if($value=="projekt" && $this->app->Secure->POST[$value]!="") - { - if(!is_numeric($this->app->Secure->POST[$value])) - { - $uparr[$value] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung <> '' AND abkuerzung = '".$this->app->DB->real_escape_string($this->app->Secure->POST[$value])."' AND (geloescht = 0 OR isnull(geloescht)) LIMIT 1"); - }else{ - $uparr[$value] = $this->app->Secure->POST[$value]; - } - } else { - if($value == 'bearbeiterid' || $value=='bearbeiter') - { - if($arr[0]['bearbeiterid'])$this->app->Secure->POST[$value] = $arr[0][$value]; - if($arr[0]['bearbeiterid'])$uparr[$value] = $arr[0][$value]; - }else{ - $this->app->Secure->POST[$value] = $arr[0][$value]; - $uparr[$value] = $arr[0][$value]; - } - } - } - - if($projekt!="") { - $this->app->Secure->POST['projekt'] = $projekt; - $uparr['projekt'] = $this->app->Secure->POST['projekt']; - } - - $uparr['adresse']=$adresse; - $this->app->DB->UpdateArr("anfrage",$id,"id",$uparr,true); - $this->LoadAdresseStandard("anfrage",$id,$adresse); - } - - function LoadPreisanfrageStandardwerte($id,$adresse,$projekt="") - { - /** @var Preisanfrage $obj */ - $obj = $this->app->erp->LoadModul('preisanfrage'); - if(!empty($obj) && method_exists($obj,'LoadPreisanfrageStandardwerte')) { - $obj->LoadPreisanfrageStandardwerte($id,$adresse,$projekt); - } - } - - - function LoadProformarechnungStandardwerte($id,$adresse,$projekt="") - { - // standard adresse von lieferant - $arr = $this->app->DB->SelectArr("SELECT *,zollinformationen as verzollinformationen,if(zollinformationen!='',1,0) as verzollungadresse FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - - $field = array('anschreiben','name','abteilung','typ','unterabteilung','strasse','adresszusatz','plz','ort','land','ustid','email','telefon','telefax', - 'kundennummer','projekt','ust_befreit','lieferbedingung','titel','gln','verzollinformationen','verzollungadresse','zahlungsweise','zahlungszieltage','zahlungszieltageskonto','zahlungszielskonto'); - - foreach($field as $key=>$value) - { - - if($value=="projekt" && $this->app->Secure->POST[$value]!="") - { - if(!is_numeric($this->app->Secure->POST[$value])) - { - $uparr[$value] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung <> '' AND abkuerzung = '".$this->app->DB->real_escape_string($this->app->Secure->POST[$value])."' AND (geloescht = 0 OR isnull(geloescht)) LIMIT 1"); - }else{ - $uparr[$value] = $this->app->Secure->POST[$value]; - } - } else { - $this->app->Secure->POST[$value] = $arr[0][$value]; - $uparr[$value] = $arr[0][$value]; - } - } - - if($this->Firmendaten("proformarechnung_ohnebriefpapier")=="1") - $uparr['ohne_briefpapier'] = "1"; - - if($projekt!="") { - $this->app->Secure->POST['projekt'] = $projekt; - $uparr['projekt'] = $this->app->Secure->POST['projekt']; - } - $this->LoadZahlungsweise($adresse,$uparr); - - - $uparr['adresse']=$adresse; - $this->app->DB->UpdateArr("proformarechnung",$id,"id",$uparr,true); - $this->LoadAdresseStandard("proformarechnung",$id,$adresse); - } - - - /** - * @deprecated - */ - function LoadKalkulationStandardwerte($id,$adresse,$projekt="") - { - $obj = $this->LoadModul('kalkulation'); - if(!empty($obj) && method_exists($obj,'LoadKalkulationStandardwerte')) - { - return $obj->LoadKalkulationStandardwerte($id,$adresse,$projekt); - } - } - - /** - * @deprecated - */ - public function LoadReisekostenStandardwerte($id,$adresse,$projekt="") - { - /** @var Reisekosten $obj */ - $obj = $this->LoadModul('reisekosten'); - if(!empty($obj) && method_exists($obj, 'LoadReisekostenStandardwerte')) - { - $obj->LoadReisekostenStandardwerte($id,$adresse,$projekt); - } - } - - function LoadRetoureStandardwerte($id,$adresse,$lieferantenretoure=false) - { - // standard adresse von lieferant - $arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - $field = array('anschreiben','name','abteilung','unterabteilung','strasse','adresszusatz','plz','ort','land','bundesstaat','ustid','email','telefon','telefax','kundennummer','projekt','ust_befreit','typ','titel','lieferbedingung'); - - - $rolle_projekt = $this->app->DB->Select("SELECT parameter FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='Kunde' AND objekt='Projekt' AND (bis ='0000-00-00' OR bis <= NOW()) LIMIT 1"); - - if($rolle_projekt > 0) - { - $arr[0]['projekt'] = $rolle_projekt; - } - - foreach($field as $key=>$value) - { - - if($value=="projekt" && $this->app->Secure->POST[$value]!="" && 0) - { - $uparr[$value] = $this->app->Secure->POST[$value]; - } else { - $this->app->Secure->POST[$value] = str_replace("'", ''',$arr[0][$value]); - $uparr[$value] = str_replace("'", ''',$arr[0][$value]); - } - - } - $uparr['adresse']=$adresse; - - if($lieferantenretoure) - { - $uparr['lieferant']=$adresse; - $uparr['lieferantenretoure'] = 1; - } - - $this->app->DB->UpdateArr("retoure",$id,"id",$uparr,true); - $uparr=null; - - //liefernantenvorlage - $arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); - - // falls von Benutzer projekt ueberladen werden soll - $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - if($projekt_bevorzugt=="1") - { - $uparr['projekt'] = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - $arr[0]['projekt'] = $uparr['projekt']; - $this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr[0]['projekt']."' AND id > 0 LIMIT 1"); - } - - $field = array('versandart'); - foreach($field as $key=>$value) - { - $uparr[$value] = $arr[0][$value]; - $this->app->Secure->POST[$value] = $arr[0][$value]; - } - if($uparr['versandart']=="") - $uparr['versandart']=$this->StandardVersandart($arr[0]['projekt']); - - $this->app->DB->UpdateArr('retoure', $id, 'id', $uparr, true); - - $this->LoadStandardLieferadresse($adresse,$id,"retoure"); - $this->LoadAdresseStandard("retoure",$id,$adresse); - $this->RunHook('erpapi_loadretourestandardwerte',2, $id, $adresse); - } - - function LoadLieferscheinStandardwerte($id,$adresse,$lieferantenretoure=false) - { - $obj = $this->LoadModul('lieferschein'); - if(!empty($obj) && method_exists($obj, 'LoadLieferscheinStandardwerte')){ - $obj->LoadLieferscheinStandardwerte($id,$adresse,$lieferantenretoure); - } - } - - - /** - * @param string $modul - * @param int $id - */ - public function InfoAuftragsErfassung($modul,$id) - { - if(empty($modul) || empty($id)) { - return; - } - $adresse = $this->app->DB->Select( - sprintf('SELECT `adresse` FROM `%s` WHERE `id` = %d LIMIT 1', $modul, $id) - ); - - $this->app->YUI->CkEditor('readonlybox','none'); - $infoauftragserfassung = $this->app->DB->Select( - sprintf('SELECT `infoauftragserfassung` FROM `adresse` WHERE `id`= %d LIMIT 1', $adresse) - ); - $this->app->Tpl->Set( - 'INFOFUERAUFTRAGSERFASSUNG', - "
Info für Angebots- und Auftragserfassung -
" - ); - } - - function MarkerUseredit($feld1,$useredittimestamp) - { - $usereditid = str_replace("useredittimestamp","usereditid",$useredittimestamp); - - return "CONCAT($feld1,' ',IFNULL(if(TIME_TO_SEC(TIMEDIFF(NOW(), $useredittimestamp)) < 45,CONCAT('
(in Bearbeitung von ', (SELECT a2.name FROM user u2 LEFT JOIN adresse a2 ON a2.id=u2.adresse WHERE u2.id=$usereditid LIMIT 1),')'),''),''))"; - } - - function TimeoutUseredit($smodule,$sid,$user) - { - $sid = (int)$sid; - if($sid <= 0)return; - $smodulea = explode(' ',$smodule); - $smodule = $smodulea[0]; - if(!preg_match('/^[a-zA-Z0-9\_]*$/',$smodule,$trefer)) - { - $smodule = ''; - } - if($smodule==='')return; - if(!in_array($smodule, - array('adresse', 'anfrage', 'angebot', 'arbeitsnachweis', 'artikel', 'auftrag', 'bestellung', 'gutschrift', 'inventur', 'lieferschein', 'preisanfrage', 'produktion', 'proformarechnung', 'rechnung', 'retoure', 'spedition') - ))return; - $this->app->DB->Update("UPDATE $smodule SET useredittimestamp=NOW(),usereditid='$user' WHERE id = '$sid' AND (usereditid='$user' OR ifnull(useredittimestamp,'0000-00-00 00:00:00') = '0000-00-00 00:00:00' OR TIME_TO_SEC(TIMEDIFF(NOW(), useredittimestamp)) > 30) LIMIT 1"); - if(!$this->app->DB->error())return;//Bruno 14.12.17 Querys sparen aber bei Fehler altes Verhalten - $useredittimestamp = $this->app->DB->Select("SELECT useredittimestamp FROM $smodule WHERE id='$sid' LIMIT 1"); - if($useredittimestamp=="0000-00-00 00:00:00" || $useredittimestamp=="") - { - $this->app->DB->Select("UPDATE $smodule SET useredittimestamp=NOW(),usereditid='".$user."' WHERE id='$sid' LIMIT 1"); - } - - // nur wenn timediff > 10 - $timediff = $this->app->DB->Select("SELECT TIME_TO_SEC(TIMEDIFF(NOW(), useredittimestamp)) FROM $smodule WHERE id='$sid' LIMIT 1"); - $timeuser = $this->app->DB->Select("SELECT usereditid FROM $smodule WHERE id='$sid' LIMIT 1"); - if($timeuser == $user) - { - $this->app->DB->Select("UPDATE $smodule SET useredittimestamp=NOW() WHERE id='$sid' LIMIT 1"); - } else - { - if($timediff>30) - $this->app->DB->Select("UPDATE $smodule SET useredittimestamp=NOW(),usereditid='$user' WHERE id='$sid' LIMIT 1"); - } - } - - function DisableModul($modul, $id, $backlink='') - { - // Prüfen ob Backlink mit index.php? beginnt; ansonsten ist Open Redirect möglich - if (!empty($backlink) && strpos($backlink, 'index.php?') !== 0) { - unset($backlink); - } - - $user = $this->app->DB->Select("SELECT usereditid FROM $modul WHERE id='$id' LIMIT 1"); - if($this->app->DB->error())return false; - $user_adresse = $this->app->DB->Select("SELECT adresse FROM user WHERE id='$user' LIMIT 1"); - $user_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$user_adresse' LIMIT 1"); - - $this->TimeoutUseredit($modul,$id,$this->app->User->GetID()); - - $timeuser = $this->app->DB->Select("SELECT usereditid FROM $modul WHERE id='$id' LIMIT 1"); - if($timeuser==$this->app->User->GetID() || $timeuser=="") // heute wieder aus dem kommentar in echten quelltext genommen - { - return false; - } else if ($user_adresse > 0) { - - if($this->RechteVorhanden("welcome","unlock")) - { - $id = $this->app->Secure->GetGET("id"); - $open = ""; - } else { - $this->SystemLog("Fehlendes Recht",1,"","welcome","unlock"); - } - - $this->app->Tpl->Set('TAB1',"
Achtung dieses Dokument wird aktuell durch Mitarbeiter: $user_name bearbeitet! $open
"); - $this->app->Tpl->Parse('PAGE',"tabview.tpl"); - return true; - } - - } - - function LockModule($modul = null, $action = null) - { - if(is_null($modul))$modul = $this->app->Secure->GetGET("module"); - if(is_null($action))$action = $this->app->Secure->GetGET("action"); - //in Modul - //if($this->app->erp->LockModul())return; - //benutzen - $time = microtime(true); - $salt = md5(microtime(true)); - $saltjs = ' - - var lockalert = false; - var lockstarttime = '.$time.'; - setInterval(function(){ - lockstarttime = lockstarttime + 1; - },1000 - ); - $(document).ready(function() { - $( window ).unload(function() { - $.ajax({ - url: "index.php?module=ajax&action=moduleunlock&salt='.$salt.'" - }); - }); - window.addEventListener("beforeunload", function(event) { - $.ajax({ - url: "index.php?module=ajax&action=moduleunlock&salt='.$salt.'" - }); - }); - - if(typeof(Storage) !== "undefined") { - // Code for localStorage/sessionStorage. - setInterval(function(){ - - - - if(!localStorage.getItem("lockedmodule")) - { - var data = new Object(); - localStorage.setItem("lockedmodule",JSON.stringify(data)); - - - } - - - - - //if(localStorage.getItem("lockedmodule")){ - - var lockstr = localStorage.getItem("lockedmodule"); - if(lockstr.indexOf("[") > -1) - { - var data = new Object(); - localStorage.setItem("lockedmodule",JSON.stringify(data)); - lockstr = localStorage.getItem("lockedmodule"); - } - var lockedmodule = JSON.parse(lockstr); - if(typeof(lockedmodule["'.$modul.'"]) === "undefined") - { - lockedmodule.'.$modul.' = new Object(); - } - if(typeof(lockedmodule.'.$modul.'.'.$action.') === "undefined") - { - lockedmodule.'.$modul.'.'.$action.' = new Object(); - } - lockedmodule.'.$modul.'.'.$action.'.x'.$salt.' = lockstarttime; - - var ar = lockedmodule.'.$modul.'.'.$action.'; - var k; - for (k in ar) { - var v = ar[k]; - if(k === "x'.$salt.'") - { - lockedmodule.'.$modul.'.'.$action.'.x'.$salt.' = lockstarttime; - - }else{ - if(v > lockstarttime - 1) - { - if(!lockalert){ - lockalert = true; - alert("Sie haben noch ein Tab mit diesem Modul offen!"); - } - } - if(v < lockstarttime - 10) - { - - } - } - - } - var lstr = JSON.stringify(lockedmodule); - localStorage.setItem("lockedmodule", JSON.stringify(lockedmodule)); - - - },1000); - - - } else { - // Sorry! No Web Storage support.. - } - - }); - '; - - if($this->app->Secure->GetPOST("unlock")) - { - if($this->app->erp->RechteVorhanden("welcome","unlock")){ - $this->app->DB->Delete("DELETE FROM module_lock where module like '".addslashes($modul)."' and action like '".addslashes($action)."'"); - } - } - - if($locked = $this->app->DB->SelectRow("SELECT *, now() as aktzeit from module_lock where module like '".addslashes($modul)."' and action like '".addslashes($action)."' limit 1")) - { - if($locked['userid'] && $locked['userid'] != $this->app->User->GetID() && strtotime($locked['aktzeit']) - strtotime($locked['zeit']) < 300) - { - $user_adresse = $this->app->DB->Select("SELECT adresse FROM user WHERE id='",$locked['userid']."' LIMIT 1"); - $user_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$user_adresse' LIMIT 1"); - if($this->RechteVorhanden("welcome","unlock")) - { - $id = $this->app->Secure->GetGET("id"); - //$open = ""; - $open = '
'; - } else { - $this->SystemLog("Fehlendes Recht",1,"","welcome","unlock"); - } - - $this->app->Tpl->Set('TAB1',"
Achtung dieses Modul wird aktuell durch Mitarbeiter: $user_name bearbeitet! $open
"); - $this->app->Tpl->Parse('PAGE',"tabview.tpl"); - return true; - } - - $this->app->DB->Update("UPDATE module_lock set zeit = now(), userid = ".$this->app->User->GetID().", salt = '".$salt."' where module like '".addslashes($modul)."' and action like '".addslashes($action)."'"); - $this->app->Tpl->Add('JAVASCRIPT',$saltjs); - } else { - - $this->app->DB->Insert("INSERT INTO module_lock (module, action, userid, salt, zeit) values ('".addslashes($modul)."','".addslashes($action)."','".$this->app->User->GetID()."','".$salt."', now())"); - $this->app->Tpl->Add('JAVASCRIPT',$saltjs); - } - return false; - } - - /** - * @param int $adresse - * @param int $id - * @param string $type - * @param int $lieferadressenId - */ - public function LoadStandardLieferadresse($adresse,$id,$type, $lieferadressenId = 0) - { - if($lieferadressenId > 0) { - $standardlieferadresse = $this->app->DB->SelectArr( - sprintf( - 'SELECT * FROM lieferadressen WHERE (adresse=%d OR adresse = 0) AND id=%d LIMIT 1', - $adresse, $lieferadressenId - ) - ); - } - else{ - $standardlieferadresse = $this->app->DB->SelectArr("SELECT * FROM lieferadressen WHERE adresse='$adresse' AND standardlieferadresse='1' LIMIT 1"); - } - - if($standardlieferadresse[0]['id'] > 0) - { - foreach($standardlieferadresse[0] as $k => $v)$standardlieferadresse[0][$k] = $this->app->DB->real_escape_string($v); - switch($type) - { - case "angebot": - case "auftrag": - $this->app->DB->Update("UPDATE $type SET abweichendelieferadresse='1', - liefername='".$standardlieferadresse[0]['name']."', - lieferabteilung='".$standardlieferadresse[0]['abteilung']."', - lieferunterabteilung='".$standardlieferadresse[0]['unterabteilung']."', - lieferland='".$standardlieferadresse[0]['land']."', - lieferstrasse='".$standardlieferadresse[0]['strasse']."', - lieferort='".$standardlieferadresse[0]['ort']."', - lieferplz='".$standardlieferadresse[0]['plz']."', - lieferadresszusatz='".$standardlieferadresse[0]['adresszusatz']."', - lieferansprechpartner='".$standardlieferadresse[0]['ansprechpartner']."' - WHERE id='$id' LIMIT 1"); - if($standardlieferadresse[0]['ustid']!="") $this->app->DB->Update("UPDATE $type SET ustid = '".$standardlieferadresse[0]['ustid']."' WHERE id='$id' LIMIT 1"); - if($standardlieferadresse[0]['ust_befreit']!="") $this->app->DB->Update("UPDATE $type SET ust_befreit = '".$standardlieferadresse[0]['ust_befreit']."' WHERE id='$id' LIMIT 1"); - if($standardlieferadresse[0]['lieferbedingung']!="") $this->app->DB->Update("UPDATE $type SET lieferbedingung = '".$standardlieferadresse[0]['lieferbedingung']."' WHERE id='$id' LIMIT 1"); - if($type == 'auftrag')$this->app->DB->Update("UPDATE $type SET liefergln = '".$standardlieferadresse[0]['gln']."' WHERE id='$id' LIMIT 1"); - if($type == 'auftrag')$this->app->DB->Update("UPDATE $type SET lieferemail = '".$standardlieferadresse[0]['email']."' WHERE id='$id' LIMIT 1"); - if($type == 'auftrag')$this->app->DB->Update("UPDATE $type SET lieferbundesstaat = '".$standardlieferadresse[0]['bundesstaat']."' WHERE id='$id' LIMIT 1"); - break; - case "lieferschein": - $this->app->DB->Update("UPDATE lieferschein SET - name='".$standardlieferadresse[0]['name']."', - abteilung='".$standardlieferadresse[0]['abteilung']."', - unterabteilung='".$standardlieferadresse[0]['unterabteilung']."', - land='".$standardlieferadresse[0]['land']."', - strasse='".$standardlieferadresse[0]['strasse']."', - ort='".$standardlieferadresse[0]['ort']."', - plz='".$standardlieferadresse[0]['plz']."', - adresszusatz='".$standardlieferadresse[0]['adresszusatz']."', - lieferbedingung='".$standardlieferadresse[0]['lieferbedingung']."', - ansprechpartner='".$standardlieferadresse[0]['ansprechpartner']."' - WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE $type SET gln = '".$standardlieferadresse[0]['gln']."' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE $type SET bundesstaat = '".$standardlieferadresse[0]['bundesstaat']."' WHERE id='$id' LIMIT 1"); - break; - - } - } - } - - function DisableVerband() - { - $module = $this->app->Secure->GetGET('module'); - $id = $this->app->Secure->GetGET('id'); - if($id <= 0 || !in_array($module,['angebot', 'auftrag', 'rechnung', 'gutschrift'])) { - return; - } - if($module=="angebot" || $module=="auftrag" || $module=="rechnung" || $module=="gutschrift") - { - $docArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT realrabatt, gruppe, adresse FROM `%s`WHERE id = %d', - $module, $id - ) - ); - - $rabatt = !empty($docArr)?$docArr['realrabatt']: $this->app->DB->Select("SELECT realrabatt FROM $module b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1"); - $gruppe = !empty($docArr)?$docArr['gruppe']:$this->app->DB->Select("SELECT gruppe FROM $module b WHERE b.id='$id' LIMIT 1"); - $adresse = !empty($docArr)?$docArr['adresse']:$this->app->DB->Select("SELECT adresse FROM $module WHERE id='$id' LIMIT 1"); - $rabatte_festschreiben = $this->app->DB->Select("SELECT rabatte_festschreiben FROM adresse WHERE id='".$adresse."' LIMIT 1"); - if($rabatt > 0 && $gruppe > 0)//CLAUDI && $this->Firmendaten("modul_verband")=="1") - { - if($rabatte_festschreiben=='1' && $gruppe<=0){ - $this->app->Tpl->Set('RABATTANZEIGE', "
Kundenrabatt: $rabatt%"); - } - else { - if($this->Firmendaten('modul_verband')=='1') //CLAUDI - { - $this->app->Tpl->Set('RABATTANZEIGE',"
Verbandsrabatt: $rabatt%"); - } - else { - $this->app->Tpl->Set('RABATTANZEIGE',"
Preisgruppenrabatt: $rabatt%"); - } - } - } else { - $this->app->Tpl->Set('STARTDISABLEVERBAND',""); - } - - //if(($rabatte_festschreiben!="1" && $gruppe > 0) || $gruppe > 0) // ANZEIGE VERBAND wenn definiert - if($gruppe > 0) { - $gruppenArr = $this->app->DB->SelectRow( - sprintf( - "SELECT CONCAT(name,' ',kennziffer) AS name, internebemerkung - FROM gruppen - WHERE id=%d", - $gruppe - ) - ); - $gruppe = !empty($docArr)?$docArr['gruppe']:$this->app->DB->Select("SELECT gruppe FROM $module WHERE id='$id' LIMIT 1"); - $gruppe_name = !empty($gruppenArr)?$gruppenArr['name']: $this->app->DB->Select("SELECT CONCAT(name,' ',kennziffer) FROM gruppen WHERE id='$gruppe' LIMIT 1"); - $gruppeinternebemerkung = !empty($gruppenArr)?$gruppenArr['internebemerkung']:$this->app->DB->Select("SELECT internebemerkung FROM gruppen WHERE id='$gruppe' LIMIT 1"); - $this->app->Tpl->Set('VERBANDINFO',""); - } - else { - $gruppe_name = ''; - $rabattinformation = $this->app->DB->Select("SELECT rabattinformation FROM adresse WHERE id='$adresse' LIMIT 1"); - $this->app->Tpl->Set('VERBANDINFO',""); - } - - if($this->RechteVorhanden($module,'deleterabatte')) { - $this->app->Tpl->Set('VERBAND'," "); - } - else { - $this->app->Tpl->Set('VERBAND',""); - } - } - } - - - // prueft ob adresse eine filiale ist wenn wird der beleg gekennzeichnet - function LoadAdresseProjektfiliale($table,$id,$adresse) - { - $check = $this->app->DB->Select("SELECT id FROM projekt WHERE filialadresse='$adresse' LIMIT 1"); - if($check > 0) - { - $this->app->DB->Update("UPDATE $table SET projektfiliale=1 WHERE id='$id'"); - } else { - $this->app->DB->Update("UPDATE $table SET projektfiliale=0 WHERE id='$id'"); - } - } - - function LoadAdresseStandard($table,$id,$adresse) - { - - if($table=="auftrag" || $table=="rechnung" || $table=="gutschrift" || $table=="lieferschein" || $table=="anfrage" || $table=="produktion" || $table=="bestellung" || $table=="preisanfrage" || $table=="proformarechnung" || $table=="angebot") - { - $firma = $this->app->DB->Select("SELECT firma FROM $table WHERE id='$id' LIMIT 1"); - if($firma <=0) - { - $firma = $this->app->DB->Select("SELECT MAX(f.id) FROM firma f INNER JOIN firmendaten fd ON f.id = fd.firma LIMIT 1"); - if(!$firma)$firma = $this->app->DB->Select("SELECT max(id) FROM firma LIMIT 1"); - if($firma<=0)$firma = $this->app->DB->Select("SELECT MAX(id) FROM firma LIMIT 1"); - $this->app->DB->Update("UPDATE $table SET firma='$firma' WHERE id='$id' LIMIT 1"); - } - //Sprache - $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id = '$adresse' LIMIT 1"); - - if($sprache)$this->app->DB->Update("UPDATE $table SET sprache = '".$this->app->DB->real_escape_string($sprache)."' WHERE id = '$id' LIMIT 1"); - if($table == "auftrag" || $table == "rechnung" || $table == "gutschrift" || $table == "lieferschein" || $table == "angebot" || $table=="proformarechnung") - { - $kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id = '$adresse' LIMIT 1"); - - if($kundennummer)$this->app->DB->Update("UPDATE $table SET kundennummer = '".$this->app->DB->real_escape_string($kundennummer)."' WHERE id = '$id' LIMIT 1"); - - }elseif($table == "bestellung") - { - $kundennummerlieferant = $this->app->DB->Select("SELECT kundennummerlieferant FROM adresse WHERE id = '$adresse' LIMIT 1"); - if($kundennummerlieferant)$this->app->DB->Update("UPDATE $table SET kundennummerlieferant = '".$this->app->DB->real_escape_string($kundennummerlieferant)."' WHERE id = '$id' LIMIT 1"); - } - - $this->LoadAdresseProjektfiliale($table,$id,$adresse); - - $checkemail = $this->app->DB->Select("SELECT ".($table==='rechnung' || $table === 'proformarechnung'?'rechnungs':$table)."_email FROM adresse WHERE id='$adresse' LIMIT 1"); - if($checkemail!="") $this->app->DB->Update("UPDATE $table SET email='$checkemail' WHERE id='$id' LIMIT 1"); - } - } - - function LoadAuftragStandardwerte($id,$adresse,$lieferantenauftrag=false) - { - // standard adresse von lieferant - $arr = $this->app->DB->SelectArr("SELECT *,vertrieb as vertriebid,'' as bearbeiter,innendienst as bearbeiterid FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - - if($arr[0]['bearbeiterid'] <=0 ) - $arr[0]['bearbeiterid'] = $this->app->User->GetAdresse(); - - $arr[0]['gruppe'] = $this->GetVerband($adresse); - $field = array('anschreiben','name','vorname','abteilung','ansprechpartner','unterabteilung','strasse','adresszusatz','plz','ort','land','bundesstaat','ustid','email','telefon','telefax','kundennummer','projekt','ust_befreit','gruppe','typ','vertriebid','bearbeiter','gln','bearbeiterid','titel','lieferbedingung'); - - - $rolle_projekt = $this->app->DB->Select("SELECT parameter FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='Kunde' AND objekt='Projekt' AND (bis ='0000-00-00' OR bis <= NOW()) LIMIT 1"); - - if($rolle_projekt > 0) - { - $arr[0]['projekt'] = $rolle_projekt; - } - - - foreach($field as $key=>$value) - { - if($value=="projekt" && $this->app->Secure->POST[$value]!="" && 0) // immer projekt von adresse - { - $uparr[$value] = str_replace("'", ''',$this->app->Secure->POST[$value]); - } else { - $this->app->Secure->POST[$value] = $arr[0][$value]; - $uparr[$value] = str_replace("'", ''',$arr[0][$value]); - } - } - - - $uparr['adresse']=$adresse; - if($lieferantenauftrag) $uparr['lieferant']=$adresse; - - $this->app->DB->UpdateArr("auftrag",$id,"id",$uparr,true); - $uparr=null; - - //liefernantenvorlage - $arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); - if($lieferantenauftrag && $arr) $arr[0]['lieferantkdrnummer']=$arr[0]['lieferantennummer']; - if(!$lieferantenauftrag && $arr) $arr[0]['lieferantkdrnummer']=$arr[0]['kundennummer']; - // falls von Benutzer projekt ueberladen werden soll - $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - if($projekt_bevorzugt=="1") - { - $uparr['projekt'] = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - $arr[0]['projekt'] = $uparr['projekt']; - $arr[0]['standardlager'] = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id='".$uparr['projekt']."' LIMIT 1"); - $this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr[0]['projekt']."' AND id > 0 LIMIT 1"); - } - - $field = array('zahlungsweise','zahlungszieltage','zahlungszieltageskonto','zahlungszielskonto','versandart'); - - $this->LoadZahlungsweise($adresse,$arr); - - if($arr[0]['versandart']==''){ - $arr[0]['versandart'] = $this->StandardVersandart($arr[0]['projekt']); - } - - $this->app->Secure->POST['zahlungsweise'] = strtolower($arr[0]['zahlungsweise']); - $this->app->Secure->POST['zahlungszieltage'] = strtolower($arr[0]['zahlungszieltage']); - $this->app->Secure->POST['zahlungszieltageskonto'] = strtolower($arr[0]['zahlungszieltageskonto']); - $this->app->Secure->POST['zahlungszielskonto'] = strtolower($arr[0]['zahlungszielskonto']); - $this->app->Secure->POST['versandart'] = strtolower($arr[0]['versandart']); - - foreach($arr[0] as $k => $v) - { - if(strpos((String)$v, "'") !== false)$arr[0][$k] = str_replace("'", ''',$v); - } - if(isset($arr[0]['usereditid']))unset($arr[0]['usereditid']); - $this->app->DB->UpdateArr("auftrag",$id,"id",$arr[0], true); - - // must after called after UpdateArr auftrag because ustid can overridden by StandardLieferadresse - $this->LoadStandardLieferadresse($adresse,$id,"auftrag"); - - $this->LoadSteuersaetzeWaehrung($id,"auftrag"); - - $this->LoadAdresseStandard("auftrag",$id,$adresse); - $this->app->DB->Update(" - UPDATE auftrag a - INNER JOIN adresse adr ON a.lieferant = adr.id - SET a.lieferantkdrnummer = if(a.lieferantennummer <> '',a.lieferantennummer,adr.lieferantennummer) - WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 1 AND a.id = '$id' - "); - $this->app->DB->Update(" - UPDATE auftrag a - INNER JOIN adresse adr ON a.adresse = adr.id - SET a.lieferantkdrnummer = if(a.kundennummer <> '',a.kundennummer, adr.kundennummer) - WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 0 AND a.id = '$id' - "); - if($arr[0]['art'])$this->app->DB->Update("UPDATE auftrag SET art = '".$this->app->DB->real_escape_string($arr[0]['art'])."' WHERE id = '$id' LIMIT 1"); - - - $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' LIMIT 1"); - $deactivateAutoversand = (int)$this->app->erp->Projektdaten($projekt,'deactivateautoshipping'); - if($deactivateAutoversand) { - $this->app->DB->Update( - sprintf( - 'UPDATE auftrag SET autoversand = 0 WHERE schreibschutz = 0 AND id = %d', - $id - ) - ); - }else{ - $this->app->DB->Update( - sprintf( - 'UPDATE auftrag SET autoversand = 1 WHERE schreibschutz = 0 AND id = %d', - $id - ) - ); - } - - $this->AuftragEinzelnBerechnen($id); - $this->RunHook('erpapi_loadauftragstandardwerte',3, $id, $adresse, $lieferantenauftrag); - } - - function GetKategorienbaum(&$baum, $parent = 0, $lvl = 0, $shop = 0) - { - if($lvl > 30)return; - $sprachen = $this->GetSelectSprachenListe(true); - $elemente = $this->app->DB->SelectArr("SELECT ak.id, ak.parent, ak.bezeichnung, sk.extid FROM artikelkategorien ak - LEFT JOIN `shopexport_kategorien` sk ON ak.id = sk.kategorie AND sk.shop = '$shop' AND sk.shop > 0 AND sk.aktiv = 1 - WHERE (ak.geloescht = 0 OR isnull(ak.geloescht)) AND ak.parent = '$parent' ORDER BY ak.bezeichnung"); - if($elemente) - { - foreach($elemente as $el) - { - $el['lvl'] = $lvl; - $uebersetzungen = $this->app->DB->SelectArr("SELECT beschriftung,sprache FROM uebersetzung WHERE label='kategorie_".$el['id']."'"); - $texte = array(); - if(is_array($uebersetzungen)){ - foreach ($uebersetzungen as $index => $sprachenarray){ - $kategoriesprache = $sprachenarray['sprache']; - if(array_key_exists(ucfirst($sprachenarray['sprache']),$sprachen)){ - $kategoriesprache = $sprachen[ucfirst($sprachenarray['sprache'])]; - } - $texte[$kategoriesprache] = $sprachenarray['beschriftung']; - } - } - $el['texte'] = $texte; - $baum[] = $el; - $this->GetKategorienbaum($baum, $el['id'], $lvl + 1, $shop); - } - } - } - - function LoadZahlungsweise($adresse,&$arr) - { - //$arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); - - if($arr[0]['zahlungsweise']=="") - $arr[0]['zahlungsweise']=$this->Firmendaten("zahlungsweise"); - - if($arr[0]['zahlungsweise']=="") - $arr[0]['zahlungsweise']="vorkasse"; - - if($arr[0]['zahlungszieltage']==="" && $arr[0]['zahlungsweise']=="rechnung") - $arr[0]['zahlungszieltage']=$this->ZahlungsZielTage(); - - if($arr[0]['zahlungszieltageskonto']==="" && $arr[0]['zahlungsweise']=="rechnung") - $arr[0]['zahlungszieltageskonto']=$this->ZahlungsZielTageSkonto(); - - if($arr[0]['zahlungszielskonto']==="" && $arr[0]['zahlungsweise']=="rechnung") - $arr[0]['zahlungszielskonto']=$this->ZahlungsZielSkonto(); - - } - - - function LoadAngebotStandardwerte($id,$adresse) - { - // standard adresse von lieferant - $arr = $this->app->DB->SelectArr("SELECT *,vertrieb as vertriebid,'' as bearbeiter,innendienst as bearbeiterid FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - - if($arr[0]['bearbeiterid'] <=0 ) - $arr[0]['bearbeiterid'] = $this->app->User->GetAdresse(); - - $arr[0]['gruppe'] = $this->GetVerband($adresse); - - $rolle_projekt = $this->app->DB->Select("SELECT parameter FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='Kunde' AND objekt='Projekt' AND (bis ='0000-00-00' OR bis <= NOW()) LIMIT 1"); - - if($rolle_projekt > 0) - { - $arr[0]['projekt'] = $rolle_projekt; - } - - $field = array('gln','anschreiben','name','abteilung','unterabteilung','strasse','adresszusatz','plz','ort','land','ustid','ust_befreit','email','telefon','telefax','projekt','ansprechpartner','gruppe','typ','vertriebid','bearbeiter','bearbeiterid','titel','lieferbedingung'); - foreach($field as $key=>$value) - { - if($value=="projekt" && $this->app->Secure->POST[$value]!="" && 0) - { - $uparr[$value] = str_replace("'", ''',$this->app->Secure->POST[$value]); - } else { - $this->app->Secure->POST[$value] = str_replace("'", ''',$arr[0][$value]); - $uparr[$value] = str_replace("'", ''',$arr[0][$value]); - } - } - $uparr['adresse'] = $adresse; - $this->app->DB->UpdateArr("angebot",$id,"id",$uparr,true); - $uparr=null; - - //liefernantenvorlage - $arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); - $this->LoadZahlungsweise($adresse,$arr); - - if($arr[0]['versandart']==''){ - $arr[0]['versandart'] = $this->StandardVersandart($arr[0]['projekt']); - } - - // falls von Benutzer projekt ueberladen werden soll - $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - if($projekt_bevorzugt=="1") - { - $uparr['projekt'] = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - $arr[0]['projekt'] = $uparr['projekt']; - $arr[0]['standardlager'] = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id='".$uparr['projekt']."' LIMIT 1"); - $this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr[0]['projekt']."' AND id > 0 LIMIT 1"); - } - - $this->app->Secure->POST['zahlungsweise'] = strtolower($arr[0]['zahlungsweise']); - $this->app->Secure->POST['zahlungszieltage'] = strtolower($arr[0]['zahlungszieltage']); - $this->app->Secure->POST['zahlungszieltageskonto'] = strtolower($arr[0]['zahlungszieltageskonto']); - $this->app->Secure->POST['zahlungszielskonto'] = strtolower($arr[0]['zahlungszielskonto']); - $this->app->Secure->POST['versandart'] = strtolower($arr[0]['versandart']); - - if(isset($arr[0]['usereditid']))unset($arr[0]['usereditid']); - $this->app->DB->UpdateArr("angebot",$id,"id",$arr[0],true); - $this->LoadStandardLieferadresse($adresse,$id,"angebot"); - - $this->LoadSteuersaetzeWaehrung($id,"angebot"); - - $this->LoadAdresseStandard("angebot",$id,$adresse); - } - - function LoadGutschriftStandardwerte($id,$adresse) - { - $obj = $this->LoadModul('gutschrift'); - if(!empty($obj) && method_exists($obj,'LoadGutschriftStandardwerte')) - { - return $obj->LoadGutschriftStandardwerte($id, $adresse); - } - } - - - function BerechneDeckungsbeitrag($id,$typ,$extern=false) - { - - // mit rabatt beruecksichtigen - if($typ==='rechnung' || $typ==='gutschrift' || $typ==='auftrag' || $typ==='angebot') - { - $waehrungProjekt = $this->app->DB->SelectRow( - sprintf( - "SELECT waehrung, projekt,steuersatz_normal, steuersatz_ermaessigt - FROM `%s` - WHERE id=%d - LIMIT 1", - $typ, (int)$id - ) - ); - $waehrung = $waehrungProjekt['waehrung']; - $projectId = $waehrungProjekt['projekt']; - $steuersatzNormal = $waehrungProjekt['steuersatz_normal']; - $steuersatzErmaessigt = $waehrungProjekt['steuersatz_ermaessigt']; - $method = ucfirst($typ).'MitUmsatzsteuer'; - if(!method_exists($this, $method)) { - $method = ucfirst($typ).'MitUmsatzeuer'; - } - $mitumsatzsteuer = method_exists($this, $method)? $this->$method($id):true; - if(!$mitumsatzsteuer) { - $steuersatzNormal = 0; - $steuersatzErmaessigt = 0; - } - $preisberechnung = $this->Projektdaten($projectId,'preisberechnung'); - if($waehrung == '') { - $waehrung = 'EUR'; - } - $ohneeks = $this->app->DB->SelectArr("SELECT id, artikel, menge, preis, rabatt, ekwaehrung, einkaufspreis, waehrung FROM {$typ}_position ap WHERE $typ = '$id' "); - if($this->app->DB->error()){ - $ohneeks = $this->app->DB->SelectArr("SELECT id, artikel, menge, preis, rabatt, ekwaehrung, einkaufspreis FROM {$typ}_position ap WHERE $typ = '$id' "); - } - if(!empty($ohneeks)) - { - foreach($ohneeks as $ek) - { - if($ek['ekwaehrung']=='') - { - $originalwaehrung = $ek['waehrung']; - $originalpreis = $ek['preis']; - $ekpreis = (double)$this->GetEinkaufspreisWaehrung($ek['artikel'],$ek['menge'],$waehrung,$originalwaehrung, $originalpreis); - if($originalwaehrung == '')$originalwaehrung = 'EUR'; - switch($typ) - { - case "rechnung": $explodiertspalte = "explodiert_parent_artikel"; break; - default: $explodiertspalte = "explodiert_parent"; - } - $this->app->DB->Update("UPDATE {$typ}_position SET ekwaehrung = '$originalwaehrung', einkaufspreisurspruenglich = '$originalpreis', einkaufspreis = '$ekpreis' WHERE id = '".$ek['id']."' AND $explodiertspalte = 0 AND einkaufspreis=0 LIMIT 1"); - - }else{ - $ekpreis = $ek['einkaufspreis']; - } - $pdeckungsbeitrag = $ek['preis']*(100-$ek['rabatt'])/100; - $pdeckungsbeitrag = ($pdeckungsbeitrag != 0)?(($pdeckungsbeitrag - $ekpreis) / $pdeckungsbeitrag):1; - $this->app->DB->Update("UPDATE {$typ}_position SET deckungsbeitrag = '$pdeckungsbeitrag' WHERE id = '".$ek['id']."' LIMIT 1"); - } - if($preisberechnung == 3){ - $sql = sprintf( - 'UPDATE `%s` - SET umsatz_netto_einzeln = ROUND(preis * (1 - rabatt / 100),2), - umsatz_netto_gesamt = ROUND(menge * ROUND(preis * (1 - rabatt / 100),2), 2), - umsatz_brutto_einzeln = ROUND(preis * (1 - rabatt / 100),2) * - (1 + IF( - IFNULL(steuersatz,-1) < 0, - IF( - umsatzsteuer = \'befreit\', - 0, - IF(umsatzsteuer = \'ermaessigt\', - %f, - %f - ) - ), - steuersatz - ) / 100), - umsatz_brutto_gesamt = ROUND(menge * ROUND(preis * (1 - rabatt / 100),2), 2) * - (1 + IF( - IFNULL(steuersatz,-1) < 0, - IF( - umsatzsteuer = \'befreit\', - 0, - IF(umsatzsteuer = \'ermaessigt\', - %f, - %f - ) - ), - steuersatz - ) / 100) - WHERE `%s` = %d', - $typ . '_position', - $steuersatzErmaessigt, - $steuersatzNormal, - $steuersatzErmaessigt, - $steuersatzNormal, - $typ, - $id); - }elseif($preisberechnung == 1) { - $sql = sprintf( - 'UPDATE `%s` - SET umsatz_netto_einzeln = preis * (1 - rabatt / 100), - umsatz_netto_gesamt = ROUND(menge * preis * (1 - rabatt / 100), 2), - umsatz_brutto_einzeln = preis * (1 - rabatt / 100) * - (1 + IF( - IFNULL(steuersatz,-1) < 0, - IF( - umsatzsteuer = \'befreit\', - 0, - IF(umsatzsteuer = \'ermaessigt\', - %f, - %f - ) - ), - steuersatz - ) / 100), - umsatz_brutto_gesamt = ROUND(menge * preis * (1 - rabatt / 100), 2) * - (1 + IF( - IFNULL(steuersatz,-1) < 0, - IF( - umsatzsteuer = \'befreit\', - 0, - IF(umsatzsteuer = \'ermaessigt\', - %f, - %f - ) - ), - steuersatz - ) / 100) - WHERE `%s` = %d', - $typ . '_position', - $steuersatzErmaessigt, - $steuersatzNormal, - $steuersatzErmaessigt, - $steuersatzNormal, - $typ, - $id - ); - }else{ - $sql = sprintf( - 'UPDATE `%s` - SET umsatz_netto_einzeln = preis * (1 - rabatt / 100), - umsatz_netto_gesamt = menge * preis * (1 - rabatt / 100), - umsatz_brutto_einzeln = preis * (1 - rabatt / 100) * - (1 + - IF( - IFNULL(steuersatz,-1) < 0, - IF( - umsatzsteuer = \'befreit\', - 0, - IF(umsatzsteuer = \'ermaessigt\', - %f, - %f - ) - ), - steuersatz - ) / 100), - umsatz_brutto_gesamt = menge * preis * (1 - rabatt / 100) * - (1 + IF( - IFNULL(steuersatz,-1) < 0, - IF( - umsatzsteuer = \'befreit\', - 0, - IF(umsatzsteuer = \'ermaessigt\', - %f, - %f - ) - ), - steuersatz - ) / 100) - WHERE `%s` = %d', - $typ . '_position', - $steuersatzErmaessigt, - $steuersatzNormal, - $steuersatzErmaessigt, - $steuersatzNormal, - $typ, - $id - ); - } - $this->app->DB->Update($sql); - } - - $status=$this->app->DB->Select("SELECT status FROM $typ WHERE id='$id' LIMIT 1"); - $deckungsbeitragcalc=$this->app->DB->Select("SELECT deckungsbeitragcalc FROM $typ WHERE id='$id' LIMIT 1"); - //wenn im richtigen status oder noch nicht berechnet - if(1)//($status!="storniert" && $status!="versendet" && $status!="abgeschlossen") || $deckungsbeitragcalc!="1") - { - $deckungsbeitrag = 0; - $deckungsbeitragprozent = 0; - $belegnr = $this->app->DB->Select("SELECT belegnr FROM $typ WHERE id='$id' LIMIT 1"); - if(!$extern) - $this->Protokoll(strtoupper($typ)." BELEG $belegnr"); - - $anzahlStellen = ($this->app->erp->Firmendaten('viernachkommastellen_belege')?4:2); - if($preisberechnung == 3) { - if($typ === 'angebot') - { - $einnahmen = $this->app->DB->Select( - sprintf( - "SELECT SUM(ap.menge*ROUND(ap.preis*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1)),%d)) - FROM `%s` auf - INNER JOIN `%s` ap ON ap.`%s`=auf.id - WHERE auf.id=%d AND ap.optional <> 1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1),0))", - $anzahlStellen, $typ, $typ.'_position', $typ, (int)$id - ) - ); - }else{ - $einnahmen = $this->app->DB->Select(sprintf( - "SELECT SUM(ap.menge*ROUND(ap.preis*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1)),%d)) - FROM `%s` auf - INNER JOIN `%s` ap ON ap.`%s`=auf.id - WHERE auf.id=%d", - $anzahlStellen, $typ, $typ.'_position', $typ, (int)$id - ) - ); - } - }elseif($preisberechnung == 1) { - - if($typ === 'angebot') - { - $einnahmen = $this->app->DB->Select( - sprintf( - "SELECT SUM(ROUND(ap.preis*ap.menge*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1)),%d)) - FROM `%s` auf - INNER JOIN `%s` ap ON ap.`%s`=auf.id - WHERE auf.id=%d AND ap.optional <> 1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1),0))", - $anzahlStellen, $typ, $typ.'_position', $typ, (int)$id - ) - ); - }else{ - $einnahmen = $this->app->DB->Select(sprintf( - "SELECT SUM(ROUND(ap.preis*ap.menge*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1)),%d)) - FROM `%s` auf - INNER JOIN `%s` ap ON ap.`%s`=auf.id - WHERE auf.id=%d", - $anzahlStellen, $typ, $typ.'_position', $typ, (int)$id - ) - ); - } - }else{ - if($typ === 'angebot') - { - $einnahmen = $this->app->DB->Select( - sprintf( - "SELECT SUM(ap.preis*ap.menge*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1))) - FROM `%s` auf - INNER JOIN `%s` ap ON ap.`%s`=auf.id - WHERE auf.id=%d AND ap.optional <> 1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1),0))", - $typ, $typ.'_position', $typ, (int)$id - ) - ); - }else{ - $einnahmen = $this->app->DB->Select(sprintf( - "SELECT SUM(ap.preis*ap.menge*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1))) - FROM `%s` auf - INNER JOIN `%s` ap ON ap.`%s`=auf.id - WHERE auf.id=%d", - $typ, $typ.'_position', $typ, (int)$id - ) - ); - } - } - - - $this->app->DB->Update( - sprintf( - "UPDATE `%s` - SET deckungsbeitragcalc=1, - deckungsbeitrag=%f, - erloes_netto=%f, - umsatz_netto=%f - WHERE id= %d - LIMIT 1" - ,$typ,(float)$deckungsbeitragprozent,(float)$deckungsbeitrag,(float)$einnahmen ,(int)$id - ) - ); - } - } - $this->RunHook('BerechneDeckungsbeitragEnde', 3, $id, $typ, $extern); - } - - - function LoadRechnungStandardwerte($id,$adresse) - { - /** @var Rechnung $obj */ - $obj = $this->LoadModul('rechnung'); - if(!empty($obj) && method_exists($obj,'LoadRechnungStandardwerte')){ - return $obj->LoadRechnungStandardwerte($id, $adresse); - } - } - - function LoadBestellungStandardwerte($id,$adresse) - { - /** @var Bestellung $obj */ - $obj = $this->LoadModul('bestellung'); - if(!empty($obj) && method_exists($obj, 'LoadBestellungStandardwerte')) - { - $obj->LoadBestellungStandardwerte($id, $adresse); - } - } - - function CreateArbeitsnachweis($adresse="",$projekt="") - { - /** @var Arbeitsnachweis $obj */ - $obj = $this->app->erp->LoadModul('arbeitsnachweis'); - if(!empty($obj) && method_exists($obj, 'CreateArbeitsnachweis')) { - return $obj->CreateArbeitsnachweis($adresse,$projekt); - } - return 0; - } - - - function CreateInventur($adresse="") - { - /** @var Inventur $obj */ - $obj = $this->LoadModul('inventur'); - if(!empty($obj) && method_exists($obj, 'CreateInventur')) - { - return $obj->CreateInventur($adresse); - } - return 0; - } - - - - - function CreateAnfrage($adresse='') - { - $projekt = $this->GetCreateProjekt($adresse); - - $belegmax = ''; - $ohnebriefpapier = 1; - $this->app->DB->Insert("INSERT INTO anfrage (id,datum,bearbeiter,firma,belegnr,adresse,ohne_briefpapier,bearbeiterid,projekt) - VALUES ('',NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','$adresse','".$ohnebriefpapier."', - '".$this->app->User->GetAdresse()."','$projekt')"); - - $id = $this->app->DB->GetInsertID(); - $this->LoadSteuersaetzeWaehrung($id,"anfrage"); - - $this->SchnellFreigabe("anfrage",$id); - - $this->EventAPIAdd("EventAnfrageCreate",$id,"anfrage","create"); - return $id; - } - - function SchnellFreigabe($beleg,$id) - { - if($id <= 0 || empty($beleg) || $this->app->erp->Firmendaten('schnellanlegen_ohnefreigabe')!='1') { - return; - } - $doc = $this->app->DB->SelectRow(sprintf('SELECT `projekt`, `status`, `belegnr` FROM `%s` WHERE `id` = %d', $beleg, $id)); - if( - empty($doc) - || ($doc['status'] === 'freigegeben' && (string)$doc['belegnr'] !== '0' && (string)$doc['belegnr'] !=='') - ) { - return; - } - - $projekt = $doc['projekt']; - $belegnr = (String)$doc['belegnr']; - $status = $doc['status']; - if($belegnr === '' || $belegnr === '0') { - $belegnr = $this->app->erp->GetNextNummer($beleg,$projekt,$id); - } - $this->app->DB->Update("UPDATE $beleg SET datum=NOW(),belegnr='$belegnr', status='freigegeben' WHERE id='$id' LIMIT 1"); - $methodname = ucfirst($beleg).'Protokoll'; - if(method_exists($this,$methodname) && $status != 'freigegeben') { - $this->app->erp->$methodname($id,ucfirst($beleg).' freigegeben'); - } - - // automatisch eine wiedervorlage anlegen - if($beleg === 'angebot') { - $this->AngebotWiedervorlage($id); - } - if($beleg === 'auftrag') { - $this->app->DB->Update( - sprintf( - 'UPDATE `artikel` AS `a` - INNER JOIN `auftrag_position` AS `ap` ON a.id = ap.artikel AND (a.lagerartikel = 1 OR a.juststueckliste = 1) - SET a.`laststorage_changed` = NOW() WHERE `ap`.auftrag = %d', $id - ) - ); - } - } - - function BelegFreigabe($beleg,$id) - { - if($id <= 0 || empty($beleg)) { - return; - } - $doc = $this->app->DB->SelectRow(sprintf('SELECT `projekt`, `status`, `belegnr` FROM `%s` WHERE `id` = %d', $beleg, $id)); - if( - empty($doc) - || ($doc['status'] === 'freigegeben' && (string)$doc['belegnr'] !== '0' && (string)$doc['belegnr'] !=='') - ) { - return; - } - - $projekt = $doc['projekt']; - $belegnr = (String)$doc['belegnr']; - $status = $doc['status']; - if($belegnr === '' || $belegnr === '0') { - $belegnr = $this->app->erp->GetNextNummer($beleg,$projekt,$id); - } - - if(!empty($this->app->User) && method_exists($this->app->User, 'GetParameter') - && $this->app->User->GetParameter($beleg."_create_entwurfsdatumuebernehmen")=='1'){ - $this->app->DB->Update("UPDATE $beleg SET belegnr='$belegnr', `status`='freigegeben' WHERE id='$id' LIMIT 1"); - } - else{ - $this->app->DB->Update("UPDATE $beleg SET datum=NOW(),belegnr='$belegnr', `status`='freigegeben' WHERE id='$id' LIMIT 1"); - } - - // schutzt fals kein Datum gefunden - $this->app->DB->Update("UPDATE $beleg SET datum=NOW() WHERE id='$id' AND (datum='0000-00-00' OR datum='1970-01-01' OR datum IS NULL OR datum='') LIMIT 1"); - - $methodname = ucfirst($beleg).'Protokoll'; - if(method_exists($this,$methodname) && $status != 'freigegeben') { - $this->app->erp->$methodname($id,ucfirst($beleg).' freigegeben'); - } - - if($status != 'freigeben') { - $_beleg = $beleg; - $_id = $id; - $this->RunHook('BelegFreigabe', 2, $_beleg, $_id); - } - - // automatisch eine wiedervorlage anlegen - if($beleg=='angebot') { - $this->AngebotWiedervorlage($id); - } - if($beleg === 'auftrag') { - $this->app->DB->Update( - sprintf( - 'UPDATE `artikel` AS `a` - INNER JOIN `auftrag_position` AS `ap` ON a.id = ap.artikel AND (a.lagerartikel = 1 OR a.juststueckliste = 1) - SET a.`laststorage_changed` = NOW() WHERE `ap`.auftrag = %d', $id - ) - ); - } - } - - function CreateWiedervorlage($adresse,$bezeichnung,$beschreibung,$intagen=30,$adresse_mitarbeiter=0,$bearbeiter=0,$typ="",$typid=0) - { - if($adresse_mitarbeiter <=0) - $adresse_mitarbeiter = $this->app->User->GetAdresse(); - - if($bearbeiter <= 0) - $bearbeiter = $this->app->User->GetAdresse(); - - $this->app->DB->Insert("INSERT INTO wiedervorlage ( - datum_angelegt, zeit_angelegt,datum_erinnerung, zeit_erinnerung, bezeichnung,beschreibung,abgeschlossen,bearbeiter,adresse_mitarbeiter,module,parameter,adresse) values ( - DATE_FORMAT(NOW(),'%Y-%m-%d'),DATE_FORMAT(NOW(),'%h:%i:00'),DATE_ADD(NOW(), INTERVAL ".$intagen." DAY), - DATE_FORMAT(NOW(),'%h:%i:00'),'".$this->app->DB->real_escape_string( $bezeichnung)."', - '".$this->app->DB->real_escape_string( $beschreibung)."','0','$bearbeiter','$adresse_mitarbeiter','$typ','$typid','$adresse')" - ); - - return $this->app->DB->GetInsertID(); - } - - - - function AngebotWiedervorlage($id) - { - if($this->Firmendaten('angebot_anzahlwiedervorlage')<=0) { - return; - } - $check = $this->app->DB->Select("SELECT id FROM wiedervorlage WHERE module='angebot' AND parameter='$id' LIMIT 1"); - if($check > 0) { - return; - } - - $angebot_pipewiedervorlage = $this->Firmendaten("angebot_pipewiedervorlage"); - $angebot_pipewiedervorlage = strstr($angebot_pipewiedervorlage, ' ', true); - if(!is_numeric($angebot_pipewiedervorlage)) $angebot_pipewiedervorlage = 0; - - $belegnr = $this->app->DB->Select("SELECT belegnr FROM angebot WHERE id='$id' LIMIT 1"); - - $bezeichnung = "Nachfassen beim Angebot $belegnr"; - $beschreibung = "Nachfassen beim Angebot"; - - $adresse = $this->app->DB->Select("SELECT adresse FROM angebot WHERE id='$id' LIMIT 1"); - - $adresse_mitarbeiter = $this->app->DB->Select("SELECT vertriebid FROM angebot WHERE id='$id' LIMIT 1"); - if($adresse_mitarbeiter <=0) $adresse_mitarbeiter = $this->app->User->GetAdresse(); - - $bearbeiter = $this->app->User->GetAdresse(); - - $projekt = $this->app->DB->Select("SELECT projekt FROM angebot WHERE id = '$id' LIMIT 1"); - - $this->app->DB->Insert("INSERT INTO wiedervorlage ( - datum_angelegt, zeit_angelegt,datum_erinnerung, zeit_erinnerung, bezeichnung,beschreibung,abgeschlossen,bearbeiter,adresse_mitarbeiter,module,parameter,adresse,stages,projekt) values ( - DATE_FORMAT(NOW(),'%Y-%m-%d'),DATE_FORMAT(NOW(),'%h:%i:00'),DATE_ADD(NOW(), INTERVAL ".$this->Firmendaten("angebot_anzahlwiedervorlage")." DAY),DATE_FORMAT(NOW(),'%h:%i:00'),'".$this->app->DB->real_escape_string( $bezeichnung)."', - '".$this->app->DB->real_escape_string( $beschreibung)."','0','$bearbeiter','$adresse_mitarbeiter','angebot','$id','$adresse','$angebot_pipewiedervorlage','$projekt')" - ); - } - - function CreatePreisanfrage($adresse="") - { - /** @var Preisanfrage $obj */ - $obj = $this->app->erp->LoadModul('preisanfrage'); - if(!empty($obj) && method_exists($obj,'CreatePreisanfrage')) { - return $obj->CreatePreisanfrage($adresse); - } - return 0; - } - - - function CreateProformarechnung($adresse="") - { - $projekt = $this->GetCreateProjekt($adresse); - - $belegmax = ""; - $ohnebriefpapier = $this->Firmendaten("proformarechnung_ohnebriefpapier"); - $this->app->DB->Insert("INSERT INTO proformarechnung (id,datum,bearbeiter,firma,belegnr,adresse,ohne_briefpapier,bearbeiterid,projekt,zollinformation) - VALUES ('',NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','$adresse','".$ohnebriefpapier."', - '".$this->app->User->GetAdresse()."','$projekt',1)"); - - $id = $this->app->DB->GetInsertID(); - $this->LoadSteuersaetzeWaehrung($id,"proformarechnung"); - $this->EventAPIAdd("EventAnfrageCreate",$id,"proformarechnung","create"); - return $id; - } - - - function CreateKalkulation($adresse="") - { - /** @var Kalkulation $obj */ - $obj = $this->LoadModul('kalkulation'); - if(!empty($obj) && method_exists($obj,'CreateKalkulation')) { - return $obj->CreateKalkulation($adresse); - } - return null; - } - - /** - * @deprecated - */ - public function CreateReisekosten($adresse='') - { - /** @var Reisekosten $obj */ - $obj = $this->LoadModul('reisekosten'); - if(!empty($obj) && method_exists($obj,'CreateReisekosten')) - { - return $obj->CreateReisekosten($adresse); - } - return 0; - } - - function ZeitSollDatumArbeit($adresse,$datum) - { - $erg = $this->app->DB->Select('SELECT stunden FROM mitarbeiterzeiterfassung_sollstunden WHERE datum = "' . $datum . '" - AND adresse = "' . $adresse . '" LIMIT 1'); - if($erg<=0) $erg=0; - return $erg; - } - - - function AnzahlWerktageMonat($datum="") - { - if($datum=="") - $query_date = date('Y-m-d'); - else $query_date=$datum; - - // First day of the month. - $first = date('Y-m', strtotime($query_date)); - - // Last day of the month. - $last = date('t', strtotime($query_date)); - - $anzahlwerktage=0; - for($day=1;$day<=$last;$day++) - { - $checkday = date('w',strtotime($first."-".$day)); - - if($checkday!=0 && $checkday!=6) - $anzahlwerktage++; - } - return $anzahlwerktage; - } - - function ZeitGesamtDatumArbeitAbrechnen($adresse,$datum) - { - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art LIKE 'Arbeit' - AND DATE_FORMAT(z.von,'%Y-%m-%d')='$datum' AND z.adresse='$adresse' AND z.abrechnen=1"; - - $erg=$this->app->DB->Select($sql); - if($erg<=0) $erg=0; - return $erg; - } - function ZeitGesamtAufgabe($id,$adresse=0) - { - - if($adresse<=0) - { - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art LIKE 'Arbeit' AND z.aufgabe_id='$id'"; - } else { - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art LIKE 'Arbeit' AND z.aufgabe_id='$id' AND z.adresse='$adresse'"; - } - - $erg=$this->app->DB->Select($sql); - if($erg<=0) $erg=0; - return $erg; - } - - - - - function ZeitGesamtDatumArbeit($adresse,$datum) - { - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' - AND DATE_FORMAT(z.von,'%Y-%m-%d')='$datum' AND z.adresse='$adresse'"; - - $erg=$this->app->DB->Select($sql); - if($erg<=0) $erg=0; - return $erg; - } - - function ZeitGesamtHeuteArbeit($adresse) - { - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' - AND DATE_FORMAT(z.von,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') AND z.adresse='$adresse'"; - - $erg=$this->app->DB->Select($sql); - if($erg<=0) $erg=0; - return $erg; - } - - function ZeitGesamtArbeit($adresse,$datum) - { - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' - AND DATE_FORMAT(z.von,'%Y-%m-%d')=DATE_FORMAT('$datum','%Y-%m-%d') AND z.adresse='$adresse'"; - - $erg=$this->app->DB->Select($sql); - if($erg<=0) $erg=0; - return $erg; - } - - - function ZeitGesamtDatumPause($adresse,$datum) - { - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art LIKE 'Pause' - AND DATE_FORMAT(z.von,'%Y-%m-%d')='$datum' AND z.adresse='$adresse'"; - - $erg=$this->app->DB->Select($sql); - if($erg <=0) $erg=0; - return $erg; - } - - - function ZeitGesamtHeutePause($adresse) - { - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art LIKE 'Pause' - AND DATE_FORMAT(z.von,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') AND z.adresse='$adresse'"; - - $erg=$this->app->DB->Select($sql); - if($erg <=0) $erg=0; - return $erg; - } - - function ZeitGesamtPause($adresse,$datum) - { - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art LIKE 'Pause' - AND DATE_FORMAT(z.von,'%Y-%m-%d')=DATE_FORMAT('$datum','%Y-%m-%d') AND z.adresse='$adresse'"; - - $erg=$this->app->DB->Select($sql); - if($erg <=0) $erg=0; - return $erg; - } - - - - function ZeitGesamtWocheIst($adresse,$jahr="",$kw="",$datum="") - { - if($datum!="") - { - $jahr = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%Y')"); - $kw = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%u')"); - } - - if($jahr=="") $jahr=date('Y'); - if($kw=="") $kw=date('W'); - - $kw = str_pad($kw, 2, "0", STR_PAD_LEFT); - - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' - AND DATE_FORMAT(z.von,'%Y-%v')='".$jahr."-".$kw."' AND z.adresse='$adresse'"; - - $erg=$this->app->DB->Select($sql); - if($erg <=0) $erg=0; - return $erg; - } - - function ZeitGesamtMonatIst($adresse,$jahr="",$monat="",$datum="") - { - if($datum!="") - { - $jahr = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%Y')"); - $monat = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%m')"); - } - - if($jahr=="") $jahr=date('Y'); - if($monat=="") $monat=date('m'); - - $monat = str_pad($monat, 2, "0", STR_PAD_LEFT); - - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' - AND DATE_FORMAT(z.von,'%Y-%m')='".$jahr."-".$monat."' AND z.adresse='$adresse'"; - - $erg=$this->app->DB->Select($sql); - if($erg <=0) $erg=0; - return $erg; - } - - - function ZeitGesamtWocheSoll($adresse,$jahr="",$kw="",$datum="") - { - return $this->GetArbeitszeitWoche($adresse,$jahr,$kw,$datum); - } - - function ZeitGesamtWocheOffen($adresse,$jahr="",$kw="",$datum="") - { - $ist=$this->ZeitGesamtWocheIst($adresse,$jahr,$kw,$datum); - $soll=$this->ZeitGesamtWocheSoll($adresse,$jahr,$kw,$datum); - return $soll-$ist; - } - - function ZeitUrlaubOffen($adresse, $datum) - { - $monat = date('m', strtotime($datum)); - $jahr = date('Y', strtotime($datum)); - if($this->ModulVorhanden('zeiterfassung_stundenuebersicht')) - { - if(!$jahr || !$monat) - { - $monat = date('m', strtotime($datum)); - $jahr = date('Y', strtotime($datum)); - } - - - $stundenprowoche = $this->app->DB->Select("SELECT stundenprowoche FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $ueberstundentoleranz = $this->app->DB->Select("SELECT ueberstundentoleranz FROM zeiterfassung_stundenuebersicht_jahre wHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $urlaubimjahr = $this->app->DB->Select("SELECT urlaubimjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - $restueberstunden = $this->app->DB->Select("SELECT ueberstundenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - $resturlaub = $this->app->DB->Select("SELECT urlaubvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $restnotiz = $this->app->DB->Select("SELECT notizenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - if($stundenprowoche == ""){ - $stundenprowoche = 0; - } - if($ueberstundentoleranz == ""){ - $ueberstundentoleranz = 0; - } - if($urlaubimjahr == ""){ - $urlaubimjahr = 0; - } - - if($restueberstunden == ""){ - $restueberstunden = 0; - } - if($resturlaub == ""){ - $resturlaub = 0; - } - - - $stundenausadresse = $this->app->DB->Select("SELECT arbeitszeitprowoche FROM adresse WHERE id='$adresse' AND id>0"); - if($stundenprowoche <=0 && $stundenausadresse >0) - $stundenprowoche = $stundenausadresse; - - $this->app->Tpl->Set("STUNDENWOCHE", $stundenprowoche); - $this->app->Tpl->Set("TOLERANZ", $ueberstundentoleranz); - $this->app->Tpl->Set("URLAUBJAHR", $urlaubimjahr); - - $this->app->Tpl->Set("RESTUEBERSTUNDEN", $restueberstunden); - $this->app->Tpl->Set("RESTURLAUB", $resturlaub); - $this->app->Tpl->Set("RESTNOTIZ", $restnotiz); - - $gesamtsummesoll = $this->app->DB->Select("SELECT SUM(soll) FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - - for($i = 1; $i<13; $i++){ - - //IST - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' - AND DATE_FORMAT(z.von,'%Y-%m')='".$jahr."-".($i < 10?'0':'').$i."' AND z.adresse='$adresse'"; - - $aist2[$i] = $this->app->DB->Select($sql); - - if($aist2[$i] <= 0){ - $aist2[$i] = 0; - } - - $aist2[$i] = number_format($aist2[$i], 2, '.', ''); - - if($gesamtsummesoll != 0){ - //SOLL - $asoll2[$i] = $this->app->DB->Select("SELECT soll FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); - $asoll2[$i] = number_format($asoll2[$i], 2, '.', ''); - }else{ - if($stundenprowoche != ""){ - $asoll2[$i] = $this->app->erp->AnzahlWerktageMonat($jahr."-".str_pad($i, 2, "0", STR_PAD_LEFT)."-"."1")*$stundenprowoche/5; - - //NOCH IN DIE DATENBANK SPEICHERN - $asoll2[$i] = number_format($asoll2[$i], 2, '.', ''); - }else{ - $asoll2[$i] = 0.00; - } - } - - //EINGELÖSTE ÜBERSTUNDEN - $aueberstunden2[$i] = $this->app->DB->Select("SELECT ueberstunden_eingeloest FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); - $aueberstunden2[$i] = number_format($aueberstunden2[$i], 2, '.', ''); - - //EINGELÖSTER URLAUB - $aurlaub2[$i] = $this->app->DB->Select("SELECT urlaub_eingeloest FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); - $aurlaub2[$i] = number_format($aurlaub2[$i], 2, '.', ''); - - //NOTIZEN - $anotizen2[$i] = $this->app->DB->Select("SELECT notizen FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); - - - if($aist2[$i] == 0){ - $differenz_stunden2[$i] = -$asoll2[$i]; - }else{ - $differenz_stunden2[$i] = $aist2[$i] - $asoll2[$i]; - } - - - - $differenz_stunden2[$i] = number_format($differenz_stunden2[$i], 2, '.', ''); - - if($aist2[$i] == 0){ - $stunden_minus_toleranz2[$i] = -$asoll2[$i]; - }else{ - if($differenz_stunden2[$i] <= $ueberstundentoleranz){ - $stunden_minus_toleranz2[$i] = 0; - }else{ - $stunden_minus_toleranz2[$i] = $differenz_stunden2[$i] - $ueberstundentoleranz; - } - } - - - $stunden_minus_toleranz2[$i] = number_format($stunden_minus_toleranz2[$i], 2, '.', ''); - - { - if($i == 1){ - $ueberstunden_aktuell2[$i] = $restueberstunden; - $ueberstunden_aktuell2[0] = $restueberstunden; - } - - - - if($stunden_minus_toleranz2[$i] > 0.00){ - //$ueberstunden_aktuell2[$i] += $stunden_minus_toleranz2[$i]; - } - - //if($aueberstunden2[$i] != "" && $aueberstunden2[$i] > 0.00){ - if($aist2[$i]>0.00){ - $ueberstunden_aktuell2[$i] = $ueberstunden_aktuell2[$i-1] - $aueberstunden2[$i] + $stunden_minus_toleranz2[$i]; - - }else{ - if($stunden_minus_toleranz2[$i]>0.00){ - $ueberstunden_aktuell2[$i] = $ueberstunden_aktuell2[$i-1] - $aueberstunden2[$i] - $asoll2[$i] + $stunden_minus_toleranz2[$i]; - }else{ - $ueberstunden_aktuell2[$i] = $ueberstunden_aktuell2[$i-1] - $aueberstunden2[$i] - $asoll2[$i]; - - } - } - } - $ueberstunden_aktuell2[$i] = number_format($ueberstunden_aktuell2[$i], 2, '.', ''); - - if($i == 1){ - $urlaub_aktuell2[0] = $resturlaub + $urlaubimjahr; - } - $urlaub_aktuell2[$i] = $urlaub_aktuell2[$i-1] - $aurlaub2[$i]; - $urlaub_aktuell2[$i] = number_format($urlaub_aktuell2[$i], 2, '.', ''); - if($i == (int)$monat)return $urlaub_aktuell2[$i]; - } - } - - return 0; - } - - function ZeitUrlaubGenommen($adresse, $datum) - { - if($this->ModulVorhanden('zeiterfassung_stundenuebersicht')) - { - if(!$jahr || !$monat) - { - $monat = date('m', strtotime($datum)); - $jahr = date('Y', strtotime($datum)); - } - - - $stundenprowoche = $this->app->DB->Select("SELECT stundenprowoche FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $ueberstundentoleranz = $this->app->DB->Select("SELECT ueberstundentoleranz FROM zeiterfassung_stundenuebersicht_jahre wHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $urlaubimjahr = $this->app->DB->Select("SELECT urlaubimjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - $restueberstunden = $this->app->DB->Select("SELECT ueberstundenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - $resturlaub = $this->app->DB->Select("SELECT urlaubvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $restnotiz = $this->app->DB->Select("SELECT notizenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - if($stundenprowoche == ""){ - $stundenprowoche = 0; - } - if($ueberstundentoleranz == ""){ - $ueberstundentoleranz = 0; - } - if($urlaubimjahr == ""){ - $urlaubimjahr = 0; - } - - if($restueberstunden == ""){ - $restueberstunden = 0; - } - if($resturlaub == ""){ - $resturlaub = 0; - } - - - $stundenausadresse = $this->app->DB->Select("SELECT arbeitszeitprowoche FROM adresse WHERE id='$adresse' AND id>0"); - if($stundenprowoche <=0 && $stundenausadresse >0) - $stundenprowoche = $stundenausadresse; - - $this->app->Tpl->Set("STUNDENWOCHE", $stundenprowoche); - $this->app->Tpl->Set("TOLERANZ", $ueberstundentoleranz); - $this->app->Tpl->Set("URLAUBJAHR", $urlaubimjahr); - - $this->app->Tpl->Set("RESTUEBERSTUNDEN", $restueberstunden); - $this->app->Tpl->Set("RESTURLAUB", $resturlaub); - $this->app->Tpl->Set("RESTNOTIZ", $restnotiz); - - $gesamtsummesoll = $this->app->DB->Select("SELECT SUM(soll) FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - $eingeloest = 0; - for($i = 1; $i<13; $i++){ - - //IST - $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' - AND DATE_FORMAT(z.von,'%Y-%m')='".$jahr."-".($i < 10?'0':'').$i."' AND z.adresse='$adresse'"; - - $aist2[$i] = $this->app->DB->Select($sql); - - if($aist2[$i] <= 0){ - $aist2[$i] = 0; - } - - $aist2[$i] = number_format($aist2[$i], 2, '.', ''); - - if($gesamtsummesoll != 0){ - //SOLL - $asoll2[$i] = $this->app->DB->Select("SELECT soll FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); - $asoll2[$i] = number_format($asoll2[$i], 2, '.', ''); - }else{ - if($stundenprowoche != ""){ - $asoll2[$i] = $this->app->erp->AnzahlWerktageMonat($jahr."-".str_pad($i, 2, "0", STR_PAD_LEFT)."-"."1")*$stundenprowoche/5; - - //NOCH IN DIE DATENBANK SPEICHERN - $asoll2[$i] = number_format($asoll2[$i], 2, '.', ''); - }else{ - $asoll2[$i] = 0.00; - } - } - - //EINGELÖSTE ÜBERSTUNDEN - $aueberstunden2[$i] = $this->app->DB->Select("SELECT ueberstunden_eingeloest FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); - $aueberstunden2[$i] = number_format($aueberstunden2[$i], 2, '.', ''); - - //EINGELÖSTER URLAUB - $aurlaub2[$i] = $this->app->DB->Select("SELECT urlaub_eingeloest FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); - $aurlaub2[$i] = number_format($aurlaub2[$i], 2, '.', ''); - $eingeloest += $aurlaub2[$i]; - //NOTIZEN - $anotizen2[$i] = $this->app->DB->Select("SELECT notizen FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); - - - if($aist2[$i] == 0){ - $differenz_stunden2[$i] = -$asoll2[$i]; - }else{ - $differenz_stunden2[$i] = $aist2[$i] - $asoll2[$i]; - } - - - - $differenz_stunden2[$i] = number_format($differenz_stunden2[$i], 2, '.', ''); - - if($aist2[$i] == 0){ - $stunden_minus_toleranz2[$i] = -$asoll2[$i]; - }else{ - if($differenz_stunden2[$i] <= $ueberstundentoleranz){ - $stunden_minus_toleranz2[$i] = 0; - }else{ - $stunden_minus_toleranz2[$i] = $differenz_stunden2[$i] - $ueberstundentoleranz; - } - } - - - $stunden_minus_toleranz2[$i] = number_format($stunden_minus_toleranz2[$i], 2, '.', ''); - - { - if($i == 1){ - $ueberstunden_aktuell2[$i] = $restueberstunden; - $ueberstunden_aktuell2[0] = $restueberstunden; - } - - - - if($stunden_minus_toleranz2[$i] > 0.00){ - //$ueberstunden_aktuell2[$i] += $stunden_minus_toleranz2[$i]; - } - - //if($aueberstunden2[$i] != "" && $aueberstunden2[$i] > 0.00){ - if($aist2[$i]>0.00){ - $ueberstunden_aktuell2[$i] = $ueberstunden_aktuell2[$i-1] - $aueberstunden2[$i] + $stunden_minus_toleranz2[$i]; - - }else{ - if($stunden_minus_toleranz2[$i]>0.00){ - $ueberstunden_aktuell2[$i] = $ueberstunden_aktuell2[$i-1] - $aueberstunden2[$i] - $asoll2[$i] + $stunden_minus_toleranz2[$i]; - }else{ - $ueberstunden_aktuell2[$i] = $ueberstunden_aktuell2[$i-1] - $aueberstunden2[$i] - $asoll2[$i]; - - } - } - } - $ueberstunden_aktuell2[$i] = number_format($ueberstunden_aktuell2[$i], 2, '.', ''); - - if($i == 1){ - $urlaub_aktuell2[0] = $resturlaub + $urlaubimjahr; - } - $urlaub_aktuell2[$i] = $urlaub_aktuell2[$i-1] - $aurlaub2[$i]; - $urlaub_aktuell2[$i] = number_format($urlaub_aktuell2[$i], 2, '.', ''); - if($i == (int)$monat)return $eingeloest; - } - } - - return 0; - } - - function ZeitGesamtMonatSoll($adresse, $jahr = "", $monat = "",$datum="") - { - if($datum!="") - { - $jahr = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%Y')"); - $monat = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%m')"); - } - if($this->ModulVorhanden('mitarbeiterzeiterfassung') && $this->app->DB->Select("SELECT id FROM mitarbeiterzeiterfassung_einstellungen WHERE adresse = '$adresse' LIMIT 1")) - { - if(!$jahr || !$monat) - { - $urlaubkrankheitsstunden = (float)$this->app->DB->Select("SELECT sum(minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND month(datum) = month(now()) and year(datum) = year(now()) AND (instr(kuerzel,'U') OR instr(kuerzel,'K'))"); - - $urlaubkrankheitsstunden += (float)$this->app->DB->Select("SELECT sum(ms.minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden ms - INNER JOIN (SELECT distinct datum FROM arbeitsfreietage) a ON a.datum = ms.datum - WHERE ms.adresse = '$adresse' AND month(ms.datum) = month(now()) and year(ms.datum) = year(now()) AND NOT (instr(ms.kuerzel,'U') OR instr(ms.kuerzel,'K'))"); - $mitarbeiterzeiterfassung_sollstunden = $this->app->DB->Select("SELECT sum(minuten) / 60 as wochenstunden FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND month(datum) = month(now()) and year(datum) = year(now())"); - if($mitarbeiterzeiterfassung_sollstunden)return $mitarbeiterzeiterfassung_sollstunden-$urlaubkrankheitsstunden; - }else{ - $urlaubkrankheitsstunden = (float)$this->app->DB->Select("SELECT sum(minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND month(datum) = $monat and year(datum) = $jahr AND (instr(kuerzel,'U') OR instr(kuerzel,'K'))"); - $urlaubkrankheitsstunden += (float)$this->app->DB->Select("SELECT sum(ms.minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden ms - INNER JOIN (SELECT distinct datum FROM arbeitsfreietage) a ON a.datum = ms.datum - WHERE ms.adresse = '$adresse' AND month(ms.datum) = $monat and year(ms.datum) = $jahr AND NOT (instr(ms.kuerzel,'U') OR instr(ms.kuerzel,'K'))"); - $mitarbeiterzeiterfassung_sollstunden = $this->app->DB->Select("SELECT sum(minuten) / 60 as wochenstunden FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND month(datum) = $monat and year(datum) = $jahr"); - if($mitarbeiterzeiterfassung_sollstunden)return $mitarbeiterzeiterfassung_sollstunden-$urlaubkrankheitsstunden; - } - }elseif($this->ModulVorhanden('zeiterfassung_stundenuebersicht')) - { - if(!$jahr || !$monat) - { - $monat = date('m', strtotime($datum)); - $jahr = date('Y', strtotime($datum)); - } - $stundenprowoche = $this->app->DB->Select("SELECT stundenprowoche FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $ueberstundentoleranz = $this->app->DB->Select("SELECT ueberstundentoleranz FROM zeiterfassung_stundenuebersicht_jahre wHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $urlaubimjahr = $this->app->DB->Select("SELECT urlaubimjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - $restueberstunden = $this->app->DB->Select("SELECT ueberstundenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - $resturlaub = $this->app->DB->Select("SELECT urlaubvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $restnotiz = $this->app->DB->Select("SELECT notizenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - if($stundenprowoche == ""){ - $stundenprowoche = 0; - } - if($ueberstundentoleranz == ""){ - $ueberstundentoleranz = 0; - } - if($urlaubimjahr == ""){ - $urlaubimjahr = 0; - } - - if($restueberstunden == ""){ - $restueberstunden = 0; - } - if($resturlaub == ""){ - $resturlaub = 0; - } - - - $stundenausadresse = $this->app->DB->Select("SELECT arbeitszeitprowoche FROM adresse WHERE id='$adresse' AND id>0"); - if($stundenprowoche <=0 && $stundenausadresse >0) - $stundenprowoche = $stundenausadresse; - - $gesamtsummesoll = $this->app->DB->Select("SELECT SUM(soll) FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - if($gesamtsummesoll != 0){ - $asoll2 = $this->app->DB->Select("SELECT soll FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$monat\" AND jahr = \"$jahr\""); - return number_format($asoll2, 2, '.', ''); - } - if($stundenprowoche != ""){ - $asoll2 = $this->app->erp->AnzahlWerktageMonat($jahr."-".str_pad($monat, 2, "0", STR_PAD_LEFT)."-"."1")*$stundenprowoche/5; - return number_format($asoll2, 2, '.', ''); - } - return 0.00; - } - return $this->AnzahlWerktageMonat()*$this->ZeitGesamtWocheSoll($adresse)/5; - } - - function GetArbeitszeitTag($adresse,$datum="") - { - if($datum!="") - { - $jahr = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%Y')"); - $kw = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%u')"); - } - if($this->ModulVorhanden('mitarbeiterzeiterfassung')) - { - if($datum!="") - { - $urlaubkrankheitsstunden = (float)$this->app->DB->Select("SELECT sum(minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND datum = '$datum' AND (instr(kuerzel,'U') OR instr(kuerzel,'K'))"); - $urlaubkrankheitsstunden += (float)$this->app->DB->Select("SELECT sum(ms.minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden ms - INNER JOIN (SELECT distinct datum FROM arbeitsfreietage) a ON a.datum = ms.datum - WHERE ms.adresse = '$adresse' AND datum='$datum' AND not (instr(ms.kuerzel,'U') OR instr(ms.kuerzel,'K'))"); - $mitarbeiterzeiterfassung_sollstunden = $this->app->DB->Select("SELECT sum(minuten) / 60 as wochenstunden FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND datum='$datum'"); - if($mitarbeiterzeiterfassung_sollstunden)return $mitarbeiterzeiterfassung_sollstunden-$urlaubkrankheitsstunden; - }else{ - $urlaubkrankheitsstunden = (float)$this->app->DB->Select("SELECT sum(minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND datum='$datum' AND (instr(kuerzel,'U') OR instr(kuerzel,'K'))"); - $urlaubkrankheitsstunden += (float)$this->app->DB->Select("SELECT sum(ms.minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden ms - INNER JOIN (SELECT distinct datum FROM arbeitsfreietage) a ON a.datum = ms.datum - WHERE ms.adresse = '$adresse' AND datum='$datum' AND not (instr(ms.kuerzel,'U') OR instr(ms.kuerzel,'K'))"); - $mitarbeiterzeiterfassung_sollstunden = $this->app->DB->Select("SELECT sum(minuten) / 60 as wochenstunden FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND datum='$datum'"); - if($mitarbeiterzeiterfassung_sollstunden)return $mitarbeiterzeiterfassung_sollstunden-$urlaubkrankheitsstunden; - } - }elseif($this->ModulVorhanden('zeiterfassung_stundenuebersicht')) - { - if(!$jahr || !$monat) - { - $monat = date('m', strtotime($datum)); - $jahr = date('Y', strtotime($datum)); - } - - - $stundenprowoche = $this->app->DB->Select("SELECT stundenprowoche/5 FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $ueberstundentoleranz = $this->app->DB->Select("SELECT ueberstundentoleranz FROM zeiterfassung_stundenuebersicht_jahre wHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $urlaubimjahr = $this->app->DB->Select("SELECT urlaubimjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - $restueberstunden = $this->app->DB->Select("SELECT ueberstundenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - $resturlaub = $this->app->DB->Select("SELECT urlaubvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $restnotiz = $this->app->DB->Select("SELECT notizenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - if($stundenprowoche == ""){ - $stundenprowoche = 0; - } - if($ueberstundentoleranz == ""){ - $ueberstundentoleranz = 0; - } - if($urlaubimjahr == ""){ - $urlaubimjahr = 0; - } - - if($restueberstunden == ""){ - $restueberstunden = 0; - } - if($resturlaub == ""){ - $resturlaub = 0; - } - $stundenausadresse = $this->app->DB->Select("SELECT arbeitszeitprowoche/5 FROM adresse WHERE id='$adresse' AND id>0"); - if($stundenprowoche <=0 && $stundenausadresse >0) - $stundenprowoche = $stundenausadresse; - return $stundenprowoche; - } - - $arbeitszeitprowoche = $this->app->DB->Select("SELECT arbeitszeitprowoche/5 FROM adresse WHERE id='$adresse' LIMIT 1"); - if($arbeitszeitprowoche<=0 || !is_numeric($arbeitszeitprowoche)) { - return 0; - } - return $arbeitszeitprowoche; - } - - - - function GetArbeitszeitWoche($adresse,$jahr,$kw,$datum="") - { - if($datum!="") - { - $jahr = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%Y')"); - $kw = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%u')"); - } - if($this->ModulVorhanden('mitarbeiterzeiterfassung')) - { - if(!$jahr || !$kw) - { - $urlaubkrankheitsstunden = (float)$this->app->DB->Select("SELECT sum(minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND week(datum,3) = week(now(),3) and year(datum) = year(now()) AND (instr(kuerzel,'U') OR instr(kuerzel,'K'))"); - $urlaubkrankheitsstunden += (float)$this->app->DB->Select("SELECT sum(ms.minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden ms - INNER JOIN (SELECT distinct datum FROM arbeitsfreietage) a ON a.datum = ms.datum - WHERE ms.adresse = '$adresse' AND week(ms.datum,3) = week(now(),3) and year(ms.datum) = year(now()) AND not (instr(ms.kuerzel,'U') OR instr(ms.kuerzel,'K'))"); - $mitarbeiterzeiterfassung_sollstunden = $this->app->DB->Select("SELECT sum(minuten) / 60 as wochenstunden FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND week(datum,3) = week(now(),3) and year(datum) = year(now())"); - if($mitarbeiterzeiterfassung_sollstunden)return $mitarbeiterzeiterfassung_sollstunden-$urlaubkrankheitsstunden; - }else{ - $urlaubkrankheitsstunden = (float)$this->app->DB->Select("SELECT sum(minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND week(datum,3) = $kw and year(datum) = $jahr AND (instr(kuerzel,'U') OR instr(kuerzel,'K'))"); - $urlaubkrankheitsstunden += (float)$this->app->DB->Select("SELECT sum(ms.minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden ms - INNER JOIN (SELECT distinct datum FROM arbeitsfreietage) a ON a.datum = ms.datum - WHERE ms.adresse = '$adresse' AND week(ms.datum,3) = $kw and year(ms.datum) = $jahr AND not (instr(ms.kuerzel,'U') OR instr(ms.kuerzel,'K'))"); - $mitarbeiterzeiterfassung_sollstunden = $this->app->DB->Select("SELECT sum(minuten) / 60 as wochenstunden FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND week(datum,3) = $kw and year(datum) = $jahr"); - if($mitarbeiterzeiterfassung_sollstunden)return $mitarbeiterzeiterfassung_sollstunden-$urlaubkrankheitsstunden; - } - }elseif($this->ModulVorhanden('zeiterfassung_stundenuebersicht')) - { - if(!$jahr || !$monat) - { - $monat = date('m', strtotime($datum)); - $jahr = date('Y', strtotime($datum)); - } - - - $stundenprowoche = $this->app->DB->Select("SELECT stundenprowoche FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $ueberstundentoleranz = $this->app->DB->Select("SELECT ueberstundentoleranz FROM zeiterfassung_stundenuebersicht_jahre wHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $urlaubimjahr = $this->app->DB->Select("SELECT urlaubimjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - $restueberstunden = $this->app->DB->Select("SELECT ueberstundenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - $resturlaub = $this->app->DB->Select("SELECT urlaubvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - $restnotiz = $this->app->DB->Select("SELECT notizenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); - - if($stundenprowoche == ""){ - $stundenprowoche = 0; - } - if($ueberstundentoleranz == ""){ - $ueberstundentoleranz = 0; - } - if($urlaubimjahr == ""){ - $urlaubimjahr = 0; - } - - if($restueberstunden == ""){ - $restueberstunden = 0; - } - if($resturlaub == ""){ - $resturlaub = 0; - } - $stundenausadresse = $this->app->DB->Select("SELECT arbeitszeitprowoche FROM adresse WHERE id='$adresse' AND id>0"); - if($stundenprowoche <=0 && $stundenausadresse >0) - $stundenprowoche = $stundenausadresse; - return $stundenprowoche; - } - - $arbeitszeitprowoche = $this->app->DB->Select("SELECT arbeitszeitprowoche FROM adresse WHERE id='$adresse' LIMIT 1"); - if($arbeitszeitprowoche<=0 || !is_numeric($arbeitszeitprowoche)) { - return 0; - } - return $arbeitszeitprowoche; - } - - - - function AddArbeitsnachweisPositionZeiterfassung($arbeitsnachweis,$zid) - { - $tmp = $this->app->DB->SelectArr("SELECT *,DATE_FORMAT(von,'%Y-%m-%d') as datum,DATE_FORMAT(von,'%H:%i') as von,DATE_FORMAT(bis,'%H:%i') as bis FROM zeiterfassung WHERE id='$zid'"); - $sort = $this->app->DB->Select("SELECT MAX(sort) FROM arbeitsnachweis_position WHERE arbeitsnachweis='$arbeitsnachweis' LIMIT 1"); - $sort = $sort + 1; - - $adresse = $tmp[0]['adresse']; //mitarbeiter - $bezeichnung = $tmp[0]['aufgabe']; - $beschreibung = $tmp[0]['beschreibung']; - $ort = $tmp[0]['ort']; - $arbeitspaket =$tmp[0]['arbeitspaket']; - $datum = $tmp[0]['datum']; - $von=$tmp[0]['von']; - $bis=$tmp[0]['bis']; - - $this->app->DB->Insert("INSERT INTO arbeitsnachweis_position (id,arbeitsnachweis,artikel,bezeichnung,beschreibung,ort,arbeitspaket,datum,von,bis,sort,status,projekt,adresse) - VALUES ('','$arbeitsnachweis','$artikel','$bezeichnung','$beschreibung','$ort','$arbeitspaket','$datum','$von','$bis','$sort','angelegt','$projekt','$adresse')"); - $tmpid = $this->app->DB->GetInsertID(); - //markieren als erledigt - $this->app->DB->Update("UPDATE zeiterfassung SET arbeitsnachweis='$arbeitsnachweis',arbeitsnachweispositionid='$tmpid' WHERE id='$zid'"); - } - - - function CreateAufgabe($adresse,$aufgabe,$kunde=0) - { - $this->app->DB->Insert("INSERT INTO aufgabe (id,adresse,initiator,aufgabe,status,kunde) - VALUES ('','$adresse','".$this->app->User->GetAdresse()."','$aufgabe','offen','$kunde')"); - return $this->app->DB->GetInsertID(); - } - - function AbschlussAufgabe($id) - { - - // einmalig immer weg - $intervall_tage = $this->app->DB->Select("SELECT intervall_tage FROM aufgabe WHERE id='$id'"); - $startdatum = $this->app->DB->Select("SELECT abgabe_bis FROM aufgabe WHERE id='$id'"); - $check = $this->app->DB->Select("SELECT id FROM aufgabe WHERE id='$id' AND ((abgabe_bis <= NOW() AND intervall_tage > 0) OR intervall_tage=0)"); - - if($check<=0) return -1; - - switch($intervall_tage) - { - case 1: //taeglich - $newaufgabe = $this->CopyAufgabe($id); - $newstartdatum =date('Y-m-d H:i:s', strtotime("$startdatum +1 days")); - $this->app->DB->Update("UPDATE aufgabe SET abgabe_bis='$newstartdatum' WHERE id='$newaufgabe'"); - break; - - case 2: //wochen - $newaufgabe = $this->CopyAufgabe($id); - $newstartdatum =date('Y-m-d H:i:s', strtotime("$startdatum +7 days")); - $this->app->DB->Update("UPDATE aufgabe SET abgabe_bis='$newstartdatum' WHERE id='$newaufgabe'"); - break; - case 3: //monatlich - $newaufgabe = $this->CopyAufgabe($id); - $newstartdatum =date('Y-m-d H:i:s', strtotime("$startdatum +1 month")); - $this->app->DB->Update("UPDATE aufgabe SET abgabe_bis='$newstartdatum' WHERE id='$newaufgabe'"); - break; - case 4: // jaehrlich - $newaufgabe = $this->CopyAufgabe($id); - $newstartdatum =date('Y-m-d H:i:s', strtotime("$startdatum +1 year")); - $this->app->DB->Update("UPDATE aufgabe SET abgabe_bis='$newstartdatum' WHERE id='$newaufgabe'"); - break; - } - // aufgaben kopieren und dann wenn intervall_tage 2 = woechen 3 monatlich 4 jaehrlich - // alles kopieren 1:1 neue hat mit dem datum von turnus +1 tag + 7 Tage oder monatlich immer wieder dann rein - - // ab taeglich kann man nur abschliessen abgabe_bis <= heute ist - $this->app->DB->Update("UPDATE aufgabe SET status='abgeschlossen',abgeschlossen_am=NOW() WHERE id='$id' LIMIT 1"); - return 1; - } - - function CopyAufgabe($id) - { - return $this->app->DB->MysqlCopyRow("aufgabe","id",$id); - } - - function CreateRetoure($adresse="") - { - $projekt = $this->GetCreateProjekt($adresse); - - $standardlager = $this->app->DB->Select("SELECT l.id FROM projekt p INNER JOIN lager l ON p.standardlager = l.id WHERE p.id = '$projekt' LIMIT 1"); - - $belegmax = ""; - $ohnebriefpapier = $this->Firmendaten("retoure_ohnebriefpapier"); - $this->app->DB->Insert("INSERT INTO retoure (id,datum,bearbeiter,firma,belegnr,adresse,ohne_briefpapier,projekt) - VALUES ('',NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','$adresse','".$ohnebriefpapier."','".$projekt."')"); - - - $id = $this->app->DB->GetInsertID(); - $this->app->DB->Update("UPDATE retoure SET - liefername = '".$this->app->DB->real_escape_string($this->Firmendaten('name'))."' , - lieferstrasse = '".$this->app->DB->real_escape_string($this->Firmendaten('strasse'))."' , - lieferort = '".$this->app->DB->real_escape_string($this->Firmendaten('ort'))."' , - lieferplz = '".$this->app->DB->real_escape_string($this->Firmendaten('plz'))."' , - lieferland = '".$this->app->DB->real_escape_string($this->Firmendaten('land'))."' , - abweichendelieferadresse = 1 - - WHERE id = '$id' LIMIT 1"); - if(!$id)die($this->app->DB->error()); - if($standardlager)$this->app->DB->Update("UPDATE retoure SET standardlager = '$standardlager' WHERE id = '$id' LIMIT 1"); - $type="retoure"; - $this->app->erp->ObjektProtokoll($type,$id,$type."_create",ucfirst($type)." angelegt"); - $this->SchnellFreigabe($type,$id); - - $this->EventAPIAdd("EventREtoureCreate",$id,"retoure","create"); - return $id; - } - - function CreateLieferschein($adresse="") - { - $obj = $this->LoadModul('lieferschein'); - if(!empty($obj) && method_exists($obj, 'CreateLieferschein')){ - return $obj->CreateLieferschein($adresse); - } - } - - function AddLieferscheinPositionArtikelID($lieferschein, $artikel,$menge,$bezeichnung,$beschreibung,$datum) - { - $obj = $this->LoadModul('lieferschein'); - if(!empty($obj) && method_exists($obj, 'AddLieferscheinPositionArtikelID')){ - $obj->AddLieferscheinPositionArtikelID($lieferschein, $artikel,$menge,$bezeichnung,$beschreibung,$datum); - } - } - - - function AddLieferscheinPosition($lieferschein, $verkauf,$menge,$datum) - { - $obj = $this->LoadModul('lieferschein'); - if(!empty($obj) && method_exists($obj, 'AddLieferscheinPosition')){ - $obj->AddLieferscheinPosition($lieferschein, $verkauf,$menge,$datum); - } - } - - - - function DeleteAnfrage($id) - { - $this->app->DB->Delete("DELETE FROM anfrage_position WHERE anfrage='$id'"); - $this->app->DB->Delete("DELETE FROM anfrage_protokoll WHERE anfrage='$id'"); - $this->app->DB->Delete("DELETE FROM anfrage WHERE id='$id' LIMIT 1"); - } - - - function DeletePreisanfrage($id) - { - /** @var Preisanfrage $obj */ - $obj = $this->app->erp->LoadModul('preisanfrage'); - if(!empty($obj) && method_exists($obj,'DeletePreisanfrage')) { - $obj->DeletePreisanfrage($id); - } - } - - - function DeleteProformarechnung($id) - { - $this->app->DB->Delete("DELETE FROM proformarechnung_lieferschein WHERE proformarechnung='$id'"); - $this->app->DB->Delete("DELETE FROM proformarechnung_position WHERE proformarechnung='$id'"); - $this->app->DB->Delete("DELETE FROM proformarechnung_protokoll WHERE proformarechnung='$id'"); - $this->app->DB->Delete("DELETE FROM proformarechnung WHERE id='$id' LIMIT 1"); - } - - - - function DeleteInventur($id) - { - /** @var Inventur $obj */ - $obj = $this->LoadModul('inventur'); - if(!empty($obj) && method_exists($obj, 'DeleteInventur')) - { - $obj->DeleteInventur($id); - } - } - - - function DeleteKalkulation($id) - { - $this->app->DB->Delete("DELETE FROM kalkulation_position WHERE kalkulation='$id'"); - $this->app->DB->Delete("DELETE FROM kalkulation_protokoll WHERE kalkulation='$id'"); - $this->app->DB->Delete("DELETE FROM kalkulation WHERE id='$id' LIMIT 1"); - } - - - function DeleteReisekosten($id) - { - /** @var Reisekosten $obj */ - $obj = $this->LoadModul('reisekosten'); - if(!empty($obj) && method_exists($obj, 'DeleteReisekosten')) - { - $obj->DeleteReisekosten($id); - } - } - - function DeleteArbeitsnachweis($id) - { - /** @var Arbeitsnachweis $obj */ - $obj = $this->app->erp->LoadModul('arbeitsnachweis'); - if(!empty($obj) && method_exists($obj, 'DeleteArbeitsnachweis')) { - $obj->DeleteArbeitsnachweis($id); - } - } - - function DeleteRetoure($id) - { - $this->app->DB->Delete("DELETE FROM retoure_position WHERE retoure='$id'"); - $this->app->DB->Delete("DELETE FROM retoure_protokoll WHERE retoure='$id'"); - $this->app->DB->Delete("DELETE FROM retoure WHERE id='$id' LIMIT 1"); - } - - function DeleteLieferschein($id) - { - $obj = $this->LoadModul('lieferschein'); - if(!empty($obj) && method_exists($obj, 'DeleteLieferschein')){ - $obj->DeleteLieferschein($id); - } - } - - - - function CreateAuftrag($adresse="") - { - $ohnebriefpapier = $this->Firmendaten("auftrag_ohnebriefpapier"); - $belegmax = ""; - - $projekt = $this->GetCreateProjekt($adresse); - $standardlager = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id = '$projekt' LIMIT 1"); - - $firma = $this->app->DB->Select("SELECT MAX(f.id) FROM firma f INNER JOIN firmendaten fd ON f.id = fd.firma LIMIT 1"); - if(!$firma)$firma = $this->app->DB->Select("SELECT max(id) FROM firma LIMIT 1"); - if(!$firma)$firma = $this->app->DB->Select("SELECT MAX(id) FROM firma LIMIT 1"); - - if($this->StandardZahlungsweise($projekt)=="rechnung") - { - $this->app->DB->Insert("INSERT INTO auftrag (id,datum,bearbeiter,firma,belegnr,autoversand,zahlungsweise,zahlungszieltage, - zahlungszieltageskonto,zahlungszielskonto,status,projekt,adresse,ohne_briefpapier) - VALUES ('',NOW(),'','','$belegmax',1,'".$this->StandardZahlungsweise($projekt)."', - '".$this->ZahlungsZielTage($projekt)."', - '".$this->ZahlungsZielTageSkonto($projekt)."', - '".$this->ZahlungsZielSkonto($projekt)."', - 'angelegt','$projekt','$adresse','".$ohnebriefpapier."')"); - } else { - $this->app->DB->Insert("INSERT INTO auftrag (id,datum,bearbeiter,firma,belegnr,autoversand,zahlungsweise,zahlungszieltage, - zahlungszieltageskonto,zahlungszielskonto,status,projekt,adresse,ohne_briefpapier) - VALUES ('',NOW(),'','','$belegmax',1,'".$this->StandardZahlungsweise($projekt)."', - '0', - '0', - '0', - 'angelegt','$projekt','$adresse','".$ohnebriefpapier."')"); - } - - $id = $this->app->DB->GetInsertID(); - if($standardlager)$this->app->DB->Update("UPDATE auftrag SET standardlager = '$standardlager' WHERE id = '$id' LIMIT 1"); - $this->CheckVertrieb($id,"auftrag"); - $this->CheckBearbeiter($id,"auftrag"); - - $type="auftrag"; - $this->app->erp->ObjektProtokoll($type,$id,$type."_create",ucfirst($type)." angelegt"); - - $this->app->erp->AuftragProtokoll($id,"Auftrag angelegt"); - - $deliverythresholdvatid = $this->getDeliverythresholdvatid($projekt); - if($id > 0 && !empty($deliverythresholdvatid)){ - $deliverythresholdvatid = $this->app->DB->real_escape_string($deliverythresholdvatid); - $this->app->DB->Update("UPDATE auftrag SET deliverythresholdvatid = '$deliverythresholdvatid' WHERE id = $id LIMIT 1"); - } - - $this->SchnellFreigabe("auftrag",$id); - - $this->EventAPIAdd("EventAuftragCreate",$id,"auftrag","create"); - - $this->LoadSteuersaetzeWaehrung($id,"auftrag",$projekt); - return $id; - } - - - function ArtikelIDProjekt($artikelnummer,$projekt=0) - { - $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id='$projekt' LIMIT 1"); - if($eigenernummernkreis=="1") - { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikelnummer' AND projekt='$projekt' AND nummer!='' LIMIT 1"); - if($artikel) { - return $artikel; - } - return $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikelnummer' AND projekt='0' AND nummer!='' LIMIT 1"); - } - - return $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikelnummer' AND nummer!='' LIMIT 1"); - } - - function AddAuftragPositionNummer($auftrag,$nummer,$menge,$projekt,$nullpreis="",$taxfree=false,$typ="", $data = null) - { - $doctype = $typ; - if($doctype !== 'angebot') { - $doctype = 'auftrag'; - } - if($typ === 'produktion'){ - $doctype = $typ; - } - $artikel = 0; - if(!empty($data) && !empty($data['forceartikelid']) && $data['forceartikelid'] > 0) - { - $artikel = (int)$this->app->DB->Select( - sprintf( - 'SELECT id FROM artikel WHERE id = %d AND geloescht = 0 LIMIT 1', - (int)$data['forceartikelid'] - ) - ); - } - if($artikel <= 0) { - $artikel = (int)$this->ArtikelIDProjekt($nummer,$projekt); - } - - $artikeldata = $this->app->DB->SelectRow( - sprintf( - 'SELECT name_de,nummer,anabregs_text,mlmpunkte,mlmbonuspunkte,mlmdirektpraemie,umsatzsteuer - FROM artikel WHERE id=%d LIMIT 1', - $artikel - ) - ); - - $bezeichnunglieferant = $artikeldata['name_de']; - $bestellnummer = $artikeldata['nummer']; - $beschreibung = $artikeldata['anabregs_text']; - - $sprache = $this->app->DB->Select("SELECT sprache FROM $doctype WHERE id='$auftrag' LIMIT 1"); - - $this->RunHook('AARLGPositionenSprache', 6, $doctype, $auftrag, $artikel, $sprache, $bezeichnunglieferant, $beschreibung); - $this->app->erp->LogFile("Add $nummer,$menge $artikel $sprache Name: $bezeichnunglieferant"); - - $verkaufspreisarr = $this->GetVerkaufspreis($artikel, $menge,0,'', $returnwaehrung,true); - if($verkaufspreisarr) - { - $verkaufsid = (int)$verkaufspreisarr['id']; - }else{ - $verkaufsid = (int)$this->app->DB->Select( - sprintf( - "SELECT id - FROM verkaufspreise - WHERE artikel=%d - AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW()) AND ab_menge=1 - AND ((objekt='Standard' AND adresse=0) OR (objekt='' AND adresse=0)) AND geloescht=0 - ORDER BY art = 'gruppe' - LIMIT 1", - $artikel - ) - ); - } - - $preis = 0; - $vpe = ''; - $preisVpe = $this->app->DB->SelectRow(sprintf('SELECT preis,vpe FROM verkaufspreise WHERE id=%d LIMIT 1',$verkaufsid)); - if(!empty($preisVpe)){ - $preis = $preisVpe['preis']; - $vpe = $preisVpe['vpe']; - } - - if($nullpreis=='1'){ - $preis = 0; - } - - $umsatzsteuer = $this->app->DB->real_escape_string($artikeldata['umsatzsteuer']); - $mlmpunkte = $artikeldata['mlmpunkte']; - $mlmbonuspunkte = $artikeldata['mlmbonuspunkte']; - $mlmdirektpraemie = $artikeldata['mlmdirektpraemie']; - - $bezeichnunglieferant = $this->app->DB->real_escape_string($bezeichnunglieferant); - $bestellnummer = $this->app->DB->real_escape_string($bestellnummer); - $beschreibung = $this->app->DB->real_escape_string($beschreibung); - - - if($typ=='produktion') - { - } else { - $sort = 1 + (int)$this->app->DB->Select( - sprintf( - 'SELECT IFNULL(MAX(sort),0) FROM `%s` WHERE `%s`= %d LIMIT 1', - $doctype.'_position', $doctype, (int)$auftrag - ) - ); - $this->app->DB->Insert( - sprintf( - "INSERT INTO `%s` (%s,artikel,bezeichnung,nummer,menge,preis, sort,lieferdatum, umsatzsteuer, status,projekt,vpe,punkte,bonuspunkte,mlmdirektpraemie) - VALUES (%d, %d, '%s', '%s', %f, %f, %d, '%s', '%s','angelegt', %d, '%s', %f, %f, %f)", - $doctype.'_position',$doctype,(int)$auftrag, $artikel,$bezeichnunglieferant,$bestellnummer,(float)$menge,(float)$preis,$sort, - $datum,$umsatzsteuer,(int)$projekt,$this->app->DB->real_escape_string($vpe),$mlmpunkte,$mlmbonuspunkte,$mlmdirektpraemie - ) - ); - $insid = $this->app->DB->GetInsertID(); - if(!empty($data) && !empty($data['parentap'])) { - $this->app->DB->Update( - sprintf( - 'UPDATE `%s` AS pp - INNER JOIN artikel art ON pp.artikel = art.id AND (art.stueckliste = 1 OR art.juststueckliste = 1) - SET pp.explodiert = 1 - WHERE pp.id = %d', - $doctype.'_position', (int)$data['parentap'] - ) - ); - $this->app->DB->Update( - sprintf( - 'UPDATE `%s` - SET explodiert_parent = %d - WHERE id = %d', - $doctype.'_position', (int)$data['parentap'], (int)$insid - ) - ); - } - } - return $insid; - } - - function AddArtikelEigenschaft($artikel, $name, $wert, $einheit = '') - { - if($name == ''){ - return; - } - if(!$this->app->DB->Select("SELECT id FROM artikel WHERE id = '$artikel' AND nummer <> 'DEL' AND ifnull(geloescht,0) = 0")){ - return; - } - $checkkategorie = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' AND geloescht <> 1 LIMIT 1"); - if(!$checkkategorie) - { - $this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) values ('$name')"); - $checkkategorie = $this->app->DB->GetInsertID(); - } - $checkwert = $this->app->DB->Select("SELECT id FROM artikeleigenschaftenwerte WHERE artikeleigenschaften = '$checkkategorie' AND artikel = '$artikel' AND wert = '$wert' LIMIT 1"); - if(!$checkwert){ - $this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (wert, artikeleigenschaften, artikel, einheit) values ('$wert','$checkkategorie','$artikel','$einheit')"); - } - } - - function KopiereArtikelEigenschaften($vonartikel, $nachartikel) - { - $vonartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND id = '". (int)$vonartikel."' LIMIT 1"); - $nachartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND id = '". (int)$nachartikel."' LIMIT 1"); - if(!$vonartikel || !$nachartikel || $vonartikel == $nachartikel){ - return; - } - $artikeleigenschaftenwerte = $this->app->DB->SelectArr("SELECT id FROM artikeleigenschaftenwerte WHERE artikel = '$vonartikel' ORDER by id"); - if($artikeleigenschaftenwerte) - { - foreach($artikeleigenschaftenwerte as $v) - { - $idnew = $this->app->DB->MysqlCopyRow("artikeleigenschaftenwerte","id",$v['id']); - $this->app->DB->Update("UPDATE artikeleigenschaftenwerte SET artikel = '$nachartikel' WHERE id = '$idnew' LIMIT 1"); - } - } - } - - function KopiereArtikelDateistichwoerter($vonartikel, $nachartikel) - { - $vonartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND id = '". (int)$vonartikel."' LIMIT 1"); - $nachartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND id = '". (int)$nachartikel."' LIMIT 1"); - if(!$vonartikel || !$nachartikel || $vonartikel == $nachartikel)return; - $dateistichwoerter = $this->app->DB->SelectArr("SELECT id FROM datei_stichwoerter WHERE objekt LIKE 'Artikel' AND parameter = '$vonartikel' ORDER by id"); - if($dateistichwoerter) - { - foreach($dateistichwoerter as $v) - { - $idnew = $this->app->DB->MysqlCopyRow("datei_stichwoerter","id",$v['id']); - $this->app->DB->Update("UPDATE datei_stichwoerter SET parameter = '$nachartikel' WHERE id = '$idnew' LIMIT 1"); - } - } - } - - function AddPositionManuellPreisNummer($typ,$id,$projekt, $artikelnummer,$menge,$name,$preis,$umsatzsteuer,$rabatt=0,$shop=0,$waehrung='EUR',$data = null, &$fulldata = null) - { - // wenn es Artikel nicht gibt anlegen! bzw. immer updaten wenn name anders ist -// $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikelnummer' AND nummer!='' LIMIT 1"); - $artikelnummershop = $artikelnummer; - $artikel = 0; - $artikelnummernummerkreis = false; - $externeartikelnummer = ""; - $eigenernummernkreis= 0; - $artikeltexteuebernehmen = 0; - $multiprojekt = 0; - $shopArr = null; - if($shop > 0) - { - $shopArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT artikeltexteuebernehmen,multiprojekt,projekt,artikelbeschreibungauswawision, - artikelbeschreibungenuebernehmen,artikelnummernummerkreis,bezeichnung - FROM shopexport - WHERE id= %d', - $shop - ) - ); - $artikeltexteuebernehmen = !empty($shopArr)?$shopArr['artikeltexteuebernehmen']:$this->app->DB->Select("SELECT artikeltexteuebernehmen FROM shopexport WHERE id='$shop' LIMIT 1"); - $multiprojekt = !empty($shopArr)?$shopArr['multiprojekt']:$this->app->DB->Select("SELECT multiprojekt FROM shopexport WHERE id='$shop' LIMIT 1"); - if(!$projekt){ - $projekt = !empty($shopArr)?$shopArr['projekt']:$this->app->DB->Select("SELECT projekt FROM shopexport WHERE id='".$shop."' LIMIT 1"); - } - } - if($projekt){ - $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id = '$projekt' LIMIT 1"); - } - - if($shop && isset($data['fremdnummer']) && trim((String)$data['fremdnummer']) !== ''){ - $artikel = $this->app->DB->Select("SELECT a.id FROM artikelnummer_fremdnummern af INNER JOIN artikel a on af.artikel = a.id WHERE af.nummer='{$data['fremdnummer']}' AND af.aktiv = 1 AND af.nummer <> '' AND (a.projekt='$projekt' OR af.shopid = '$shop') AND a.nummer <> 'DEL' AND IFNULL(a.geloescht,0) = 0 ORDER BY af.shopid = '$shop' DESC,IFNULL(a.intern_gesperrt,0) = 0 DESC, af.id LIMIT 1"); - } - if(empty($artikel)){ - if($eigenernummernkreis && !$multiprojekt) - { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$artikelnummer."' AND IFNULL(geloescht,0) = 0 AND IFNULL(intern_gesperrt,0) = 0 AND projekt = '$projekt' LIMIT 1"); - } else { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$artikelnummer."' AND IFNULL(geloescht,0) = 0 AND IFNULL(intern_gesperrt,0) = 0 ORDER BY projekt = '$projekt' DESC LIMIT 1"); - } - } - - if(!$artikel) - { - if($eigenernummernkreis && !$multiprojekt) - { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer = '".$artikelnummer."' AND nummer <> 'DEL' AND projekt = '$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); - } else { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer = '".$artikelnummer."' AND nummer <> 'DEL' ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC, projekt = '$projekt' AND IFNULL(geloescht,0) = 0 DESC LIMIT 1"); - } - if($artikel){ - $artikelnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"); - } - } - - if(!$artikel) - { - if($eigenernummernkreis && !$multiprojekt) - { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE ean = '".$artikelnummer."' AND nummer <> 'DEL' AND projekt = '$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); - } else { - $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE ean = '".$artikelnummer."' AND nummer <> 'DEL' ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC, projekt = '$projekt' AND IFNULL(geloescht,0) = 0 DESC LIMIT 1"); - } - if($artikel){ - $artikelnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"); - } - } - - if(!$artikel){ - $artikel = $this->ArtikelIDProjekt($artikelnummer,$projekt); - } - if($artikel <=0) - { - if($artikelnummernummerkreis) - { - $externeartikelnummer = $artikelnummer; - $artikelnummer = $this->GetNextArtikelnummer('produkt', 1, $projekt); - } - - //Artikel anlegen - $ean = ''; - if(is_array($data) && isset($data['ean'])){ - $ean = $data['ean']; - } - $artdata = array('name_de'=>$name,'nummer'=>$artikelnummer,'projekt'=>$projekt,'umsatzsteuer'=>$umsatzsteuer,'lagerartikel'=>1,'shop'=>$shop,'firma'=>(isset($this->app->User)?$this->app->User->GetFirma():1),'ean'=>$ean); - if(!is_null($data) && is_array($data)) - { - foreach($data as $k => $v) - { - switch($k) - { - case 'anabregs_text': - case 'anabregs_text_en': - case 'kurztext_de': - case 'kurztext_en': - case 'uebersicht_de': - case 'uebersicht_en': - case 'metadescription_de': - case 'metadescription_en': - case 'metakeywords_de': - case 'metakeywords_en': - if($artikeltexteuebernehmen){ - $artdata[$k] = $v; - } - break; - case 'anabregs_text_de': - //$artdata['anabregs_text'] = $v; - break; - case 'lagerartikel': - case 'serviceartikel': - case 'unikat': - case 'anhang': - $artdata[$k] = $v; - break; - - } - switch($k) - { - case 'options': - $beschreibung = $v; - break; - } - } - - } - $artikel = $this->AddArtikel($artdata); - if(!empty($fulldata['generierenummerbeioption'])){ - $this->ObjektProtokoll('artikel',$artikel, 'artikel_create','Automatisch Kopie angelegt'); - } - - - $this->AddVerkaufspreis($artikel,1,0,$preis,$waehrung); - } else { - $variante_kopietesten = true; - if(!empty($data) && isset($data['stuecklisteergaenzen']) && $data['stuecklisteergaenzen'] && isset($data['posid']) && !empty($fulldata)) - { - $stueckliste = $this->app->DB->Select("SELECT stueckliste FROM artikel WHERE id = '$artikel' LIMIT 1"); - if($stueckliste) - { - $variante_kopietesten = false; - $varkopie = $this->app->DB->Select("SELECT variante_kopie FROM artikel WHERE id = '$artikel' LIMIT 1"); - $copystueckliste = $varkopie; - if(!$copystueckliste) - { - $stuecklistenelemente = $this->app->DB->SelectArr("SELECT a.* FROM stueckliste s INNER JOIN artikel a ON s.artikel = a.id WHERE a.geloescht <> 1 AND s.stuecklistevonartikel = '$artikel' ORDER BY sort"); - if($stuecklistenelemente) - { - foreach($stuecklistenelemente as $v3) - { - if($v3['variante_kopie'])$copystueckliste = true; - } - } - } - if(!$copystueckliste) - { - foreach($fulldata as $k2 => $v2) - { - $cnummer = $v2['articleid']; - if(isset($v2['parentid']) && $v2['parentid'] == $data['posid']) - { - $found = false; - if($stuecklistenelemente) - { - foreach($stuecklistenelemente as $v3) - { - $sfound = false; - if($cnummer == $v3['nummer'])$sfound = true; - if($cnummer == $v3['herstellernummer'])$sfound = true; - if($cnummer == $v3['ean'])$sfound = true; - if(!$sfound) - { - if($this->app->DB->Select("SELECT a.id FROM artikelnummer_fremdnummern af INNER JOIN artikel a on af.artikel = a.id WHERE af.nummer ='".$this->app->DB->real_escape_string($cnummer)."' AND af.nummer <> '' AND af.shopid = '$shop' AND af.aktiv = 1 AND a.nummer <> 'DEL' ORDER by af.id LIMIT 1"))$sfound = true; - } - if(!$sfound)$copystueckliste = true; - } - } - } - } - } - if(!$copystueckliste) - { - foreach($fulldata as $k2 => $v2) - { - if(isset($v2['parentid']) && $v2['parentid'] == $data['posid']) - { - $fulldata[$k2]['ignorieren'] = true; - } - } - }else{ - $neuerartikel['nummer'] = $this->GetNextArtikelnummer($this->app->DB->Select("SELECT typ FROM artikel WHERE id = '$artikel' LIMIT 1"), 1, $projekt); - $neuerartikel['stueckliste'] = 1; - $neuerartikel['variante_kopie'] = $varkopie; - $neuerartikel['projekt'] = $projekt; - $tmpArticleArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT lagerartikel,name_de,lager_platz,produktion,adresse,umsatzsteuer,juststueckliste - FROM artikel - WHERE id = %d', - $artikel - ) - ); - $neuerartikel['lagerartikel'] = !empty($tmpArticleArr)?$tmpArticleArr['lagerartikel']:$this->app->DB->Select("SELECT lagerartikel FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['name_de'] = !empty($tmpArticleArr)?$tmpArticleArr['name_de']:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['lager_platz'] = !empty($tmpArticleArr)?$tmpArticleArr['lager_platz']:$this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['produktion'] = !empty($tmpArticleArr)?$tmpArticleArr['produktion']:$this->app->DB->Select("SELECT produktion FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['adresse'] = !empty($tmpArticleArr)?$tmpArticleArr['adresse']:$this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['umsatzsteuer'] = !empty($tmpArticleArr)?$tmpArticleArr['umsatzsteuer']:$this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['juststueckliste'] = !empty($tmpArticleArr)?$tmpArticleArr['juststueckliste']:$this->app->DB->Select("SELECT juststueckliste FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['anabregs_text'] = isset($value['options']) && !empty($value['options'])?$value['options']:''; - $neuerartikel['bestandalternativartikel'] = $this->app->DB->Select("SELECT bestandalternativartikel FROM artikel WHERE id = '$artikel' LIMIT 1"); - if($this->app->DB->Select("SELECT unikatbeikopie FROM artikel WHERE id = '$artikel' LIMIT 1"))$neuerartikel['unikat'] = 1; - $this->app->DB->Insert("INSERT INTO artikel (id) VALUES ('')"); - $neuerartikel['id'] = $this->app->DB->GetInsertID(); - $neuerartikelid = $this->InsertUpdateArtikel($neuerartikel); - $this->CopyArtikelVariante($neuerartikelid, $artikel,isset($value['options']) && !empty($value['options'])?$value['options']:(isset($value['anabregs_text'])?$value['anabregs_text']:'')); - $stuecklistenelementeneu = $this->app->DB->SelectArr("SELECT a.* FROM stueckliste s INNER JOIN artikel a ON s.artikel = a.id WHERE a.geloescht <> 1 AND s.stuecklistevonartikel = '$neuerartikelid' ORDER BY sort"); - foreach($fulldata as $k2 => $v2) - { - $cnummer = $v2['articleid']; - if(isset($v2['parentid']) && $v2['parentid'] == $data['posid']) - { - $found = false; - if($stuecklistenelementeneu) - { - foreach($stuecklistenelementeneu as $v3) - { - $sfound = false; - if($cnummer == $v3['nummer'])$sfound = true; - if($cnummer == $v3['herstellernummer'])$sfound = true; - if($cnummer == $v3['ean'])$sfound = true; - if(!$sfound) - { - if($this->app->DB->Select("SELECT a.id FROM artikelnummer_fremdnummern af INNER JOIN artikel a on af.artikel = a.id WHERE a.id = '".$v3['id']."' AND af.nummer ='".$this->app->DB->real_escape_string($cnummer)."' AND af.nummer <> '' AND af.shopid = '$shop' AND af.aktiv = 1 AND a.nummer <> 'DEL' ORDER by af.id LIMIT 1"))$sfound = true; - } - if(!$sfound) - { - if($v3['variante_von']) - { - $va = $this->app->DB->SelectRow("SELECT * FROM artikel where id = '".$v3['variante_von']."' LIMIT 1"); - if($va) - { - if($cnummer == $va['nummer'])$sfound = true; - if($cnummer == $va['herstellernummer'])$sfound = true; - if($cnummer == $va['ean'])$sfound = true; - if(!$sfound) - { - if($this->app->DB->Select("SELECT a.id FROM artikelnummer_fremdnummern af INNER JOIN artikel a on af.artikel = a.id WHERE a.id = '".$va['id']."' AND af.nummer ='".$this->app->DB->real_escape_string($cnummer)."' AND af.nummer <> '' AND af.shopid = '$shop' AND af.aktiv = 1 AND a.nummer <> 'DEL' ORDER by af.id LIMIT 1"))$sfound = true; - } - } - } - } - if(!$sfound) - { - $umsatzsteuers = $v2['umsatzsteuer']; - if(!empty($v2['steuersatz']) && round((float)str_replace($v2['steuersatz'],',','.'),2)== 7)$umsatzsteuers = 'ermaessigt'; - $snummer = $this->GetNextArtikelnummer('produkt',1,$projekt); - $artdatas = array('name_de'=>$v2['name'],'nummer'=>$snummer - - ,'projekt'=>$projekt,'umsatzsteuer'=>$umsatzsteuers,'lagerartikel'=>1,'shop'=>$shop,'firma'=>(isset($this->app->User)?$this->app->User->GetFirma():1)); - $this->app->DB->Insert("INSERT INTO artikel (id) VALUES ('')"); - $artdatas['id'] = $this->app->DB->GetInsertID(); - $sneueid = $this->InsertUpdateArtikel($artdatas); - $sort = 1 + (int)$this->app->DB->Select("SELECT max(sort) FROM stueckliste WHERE stuecklistevonartikel = '".$neuerartikelid."'"); - $quant = str_replace($v3['quantity'],',','.'); - if(!$quant)$quant = 1; - $this->app->DB->Insert("INSERT INTO stueckliste (artikel, sort, stuecklistevonartikel, menge) values ('".$sneueid."','".$sort."','".$neuerartikelid."','".$quant."')"); - } - } - } - $fulldata[$k2]['ignorieren'] = true; - } - } - $artikel = $neuerartikelid; - } - } - } - } - - if($variante_kopietesten) - { - if($this->app->DB->Select("SELECT variante_kopie FROM artikel WHERE id = '$artikel' LIMIT 1")) - { - $neuerartikel['nummer'] = $this->GetNextArtikelnummer($this->app->DB->Select("SELECT typ FROM artikel WHERE id = '$artikel' LIMIT 1"), 1, $projekt); - $neuerartikel['stueckliste'] = 1; - $neuerartikel['variante_kopie'] = 1; - $neuerartikel['variante_von'] = $artikel; - $neuerartikel['projekt'] = $projekt; - $neuerartikel['lagerartikel'] = $this->app->DB->Select("SELECT lagerartikel FROM artikel WHERE id = '$artikel' LIMIT 1"); - if(isset($data['lagerartikel']) && $data['lagerartikel']) - { - $neuerartikel['lagerartikel'] = 1; - }elseif(isset($data['lagerartikel']) && ($data['lagerartikel'] === 0 || $data['lagerartikel'] === '0')) - { - $neuerartikel['lagerartikel'] = 1; - } - if(isset($data['serviceartikel']) && $data['serviceartikel']) - { - $neuerartikel['serviceartikel'] = 1; - }elseif(isset($data['serviceartikel']) && ($data['serviceartikel'] === 0 || $data['serviceartikel'] === '0')) - { - $neuerartikel['serviceartikel'] = 1; - } - $tmpArticleArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT name_de,lager_platz,produktion,adresse,umsatzsteuer,juststueckliste,bestandalternativartikel - FROM artikel - WHERE id = %d', - $artikel - ) - ); - $neuerartikel['name_de'] = !empty($tmpArticleArr)?$tmpArticleArr['name_de']:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['lager_platz'] = !empty($tmpArticleArr)?$tmpArticleArr['lager_platz']:$this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['produktion'] = !empty($tmpArticleArr)?$tmpArticleArr['produktion']:$this->app->DB->Select("SELECT produktion FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['adresse'] = !empty($tmpArticleArr)?$tmpArticleArr['adresse']:$this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['umsatzsteuer'] = !empty($tmpArticleArr)?$tmpArticleArr['umsatzsteuer']:$this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['juststueckliste'] = !empty($tmpArticleArr)?$tmpArticleArr['juststueckliste']:$this->app->DB->Select("SELECT juststueckliste FROM artikel WHERE id = '$artikel' LIMIT 1"); - $neuerartikel['anabregs_text'] = isset($value['options']) && !empty($value['options'])?$value['options']:''; - $neuerartikel['bestandalternativartikel'] = !empty($tmpArticleArr)?$tmpArticleArr['bestandalternativartikel']:$this->app->DB->Select("SELECT bestandalternativartikel FROM artikel WHERE id = '$artikel' LIMIT 1"); - if($this->app->DB->Select("SELECT unikatbeikopie FROM artikel WHERE id = '$artikel' LIMIT 1"))$neuerartikel['unikat'] = 1; - $this->app->DB->Insert("INSERT INTO artikel (id) VALUES ('')"); - $neuerartikel['id'] = $this->app->DB->GetInsertID(); - $neuerartikelid = $this->InsertUpdateArtikel($neuerartikel); - if($neuerartikelid) - { - $this->ObjektProtokoll('artikel', $neuerartikelid,"artikel_create","Automatisch Kopie angelegt"); - $this->KopiereArtikelEigenschaften($artikel, $neuerartikelid); - $this->KopiereArtikelDateistichwoerter($artikel, $neuerartikelid); - $artikel = $neuerartikelid; - $artikelnummer = $neuerartikel['nummer']; - } - } - } - - //$waehrung = 'EUR'; - $datum =""; - $belegsprache = $this->app->DB->Select("SELECT sprache FROM $typ WHERE id = $id"); - $adresssprachen = $this->GetAdressSprachen(); - if(!is_null($data) && isset($data['options']))$beschreibung = $data['options']; - if(empty($beschreibung) && $artikelbeschreibungenuebernehmen)$beschreibung = $this->app->DB->real_escape_string($data['anabregs_text']); - if($artikelbeschreibungauswawision) - { - $beschreibung = $this->app->DB->real_escape_string($this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='$artikel' LIMIT 1")); - if($this->app->DB->Select("SELECT adr.id FROM auftrag auf INNER JOIN adresse adr ON auf.adresse = adr.id AND adr.sprache = 'englisch' WHERE auf.id = '$id' LIMIT 1")) - $beschreibung = $this->app->DB->Select("SELECT anabregs_text_en FROM artikel WHERE id = '$artikel'"); - if(!$beschreibung && $this->app->DB->Select("SELECT variante FROM artikel WHERE id = '$artikel' LIMIT 1")) - { - $variante_von = $this->app->DB->Select("SELECT variante_von FROM artikel WHERE id = '$artikel' LIMIT 1"); - if($variante_von)$beschreibung = $this->app->DB->real_escape_string($this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='$variante_von' LIMIT 1")); - } - if($this->ModulVorhanden('artikel_texte')){ - if(array_key_exists($belegsprache,$adresssprachen)){ - $belegsprache = $adresssprachen[$belegsprache]; - } - $artikelbeschreibung = $this->app->DB->Select("SELECT beschreibung FROM artikel_texte WHERE artikel=$artikel AND sprache='$belegsprache'"); - if($artikelbeschreibung){ - $beschreibung = $artikelbeschreibung; - } - } - } - //$vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $sort = $this->app->DB->Select("SELECT MAX(sort) FROM ".$typ."_position WHERE $typ='$id' LIMIT 1"); - $sort = $sort + 1; - $artikelnummeruebernehmen = $this->app->DB->Select("SELECT artikelnummeruebernehmen FROM shopexport WHERE id = '$shop' LIMIT 1"); - if($artikelnummeruebernehmen)$artikelnummer = $artikelnummershop; - - $artikelbezeichnungauswawision = $this->app->DB->Select("SELECT artikelbezeichnungauswawision FROM shopexport WHERE id = '$shop' LIMIT 1"); - if($artikelbezeichnungauswawision) - { - $name = ''; - if($this->app->DB->Select("SELECT adr.id FROM auftrag auf INNER JOIN adresse adr ON auf.adresse = adr.id AND adr.sprache = 'englisch' WHERE auf.id = '$id' LIMIT 1")) - $name = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id = '$artikel'"); - if($name === '')$name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel'"); - if($this->ModulVorhanden('artikel_texte')){ - if(array_key_exists($belegsprache,$adresssprachen)){ - $belegsprache = $adresssprachen[$belegsprache]; - } - $artikelbezeichnung = $this->app->DB->Select( - "SELECT name - FROM artikel_texte - WHERE artikel=$artikel AND sprache='$belegsprache' - ORDER BY name <> '' DESC - LIMIT 1" - ); - if($artikelbezeichnung){ - $name = $artikelbezeichnung; - } - } - } - - $name = $this->app->DB->real_escape_string($name); - if($typ === 'retoure') { - $this->app->DB->Insert("INSERT INTO `retoure_position` - (`retoure`,`artikel`,`bezeichnung`,`beschreibung`,`nummer`,`menge`, - `sort`,`lieferdatum`, `status`,`projekt`,`vpe`) - VALUES ('$id','$artikel','$name','$beschreibung','$artikelnummer','$menge', - '$sort','$datum','angelegt','$projekt','$vpe')"); - } - else{ - $this->app->DB->Insert("INSERT INTO " . $typ . "_position (id,$typ,artikel,bezeichnung,beschreibung,nummer,menge,preis, waehrung, - sort,lieferdatum, umsatzsteuer, status,projekt,vpe,rabatt,grundrabatt,rabattsync) - VALUES ('','$id','$artikel','$name','$beschreibung','$artikelnummer','$menge', - '$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe','$rabatt','$rabatt',1)"); - } - $insid = $this->app->DB->GetInsertID(); - - $mlmfelder = $this->app->DB->SelectArr("SELECT mlmpunkte, mlmbonuspunkte, mlmdirektpraemie FROM artikel WHERE id = '$artikel' LIMIT 1"); - if($mlmfelder) - { - $this->app->DB->Update("UPDATE ".$typ."_position SET - punkte = '".$mlmfelder[0]['mlmpunkte']."', - bonuspunkte = '".$mlmfelder[0]['mlmbonuspunkte']."', - mlmdirektpraemie = '".$mlmfelder[0]['mlmdirektpraemie']."' WHERE id = '$insid' LIMIT 1 - "); - } - - - if(isset($neuerartikel['juststueckliste']) && $neuerartikel['juststueckliste']) { - if($typ == 'auftrag') { - $this->AuftragExplodieren($id); - } - } - if($typ == 'auftrag' && is_array($data) && isset($data['parentap'])) { - $this->app->DB->Update("UPDATE auftrag_position set explodiert_parent = '".$data['parentap']."' where id = '$insid'"); - $this->app->DB->Update("UPDATE auftrag_position ap - INNER JOIN artikel art ON ap.artikel = art.id AND (art.juststueckliste = 1 OR art.stueckliste = 1) - SET ap.explodiert = 1 where ap.id = '".$data['parentap']."'"); - } - - if($typ === 'auftrag') { - $this->app->DB->Update(sprintf('UPDATE `artikel`SET `laststorage_changed` = NOW() WHERE `id` = %d', $artikel)); - } - return $insid; - } - - - function AddPositionManuellPreis($typ,$id, $artikel,$menge,$name,$preis,$umsatzsteuer,$rabatt=0,$waehrung='EUR',$beschreibung="") - { - // wenn es Artikel nicht gibt anlegen! bzw. immer updaten wenn name anders ist - $artArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT nummer,mlmpunkte,mlmbonuspunkte,mlmdirektpraemie FROM artikel WHERE id = %d', - $artikel - ) - ); - $bestellnummer = !empty($artArr)?$artArr['nummer']:$this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); - - //$vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $sort = $this->app->DB->Select("SELECT MAX(sort) FROM ".$typ."_position WHERE $typ='$id' LIMIT 1"); - $sort = $sort + 1; - - $mlmpunkte = !empty($artArr)?$artArr['mlmpunkte']:$this->app->DB->Select("SELECT mlmpunkte FROM artikel WHERE id='$artikel' LIMIT 1"); - $mlmbonuspunkte = !empty($artArr)?$artArr['mlmbonuspunkte']:$this->app->DB->Select("SELECT mlmbonuspunkte FROM artikel WHERE id='$artikel' LIMIT 1"); - $mlmdirektpraemie = !empty($artArr)?$artArr['mlmdirektpraemie']:$this->app->DB->Select("SELECT mlmdirektpraemie FROM artikel WHERE id='$artikel' LIMIT 1"); - - $name = $this->app->DB->real_escape_string($name); - $beschreibung = $this->app->DB->real_escape_string($beschreibung); - $bestellnummer = $this->app->DB->real_escape_string($bestellnummer); - - if($typ=="auftrag" || $typ=="angebot" || $typ=="rechnung") - { - $this->app->DB->Insert("INSERT INTO ".$typ."_position (id,$typ,artikel,bezeichnung, - beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe,rabatt,punkte,bonuspunkte,mlmdirektpraemie) - VALUES ('','$id','$artikel','$name','$beschreibung','$bestellnummer','$menge', - '$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe','$rabatt','$mlmpunkte','$mlmbonuspunkte','$mlmdirektpraemie')"); - } else { - $this->app->DB->Insert("INSERT INTO ".$typ."_position (id,$typ,artikel,bezeichnung, - beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe,rabatt) - VALUES ('','$id','$artikel','$name','$beschreibung','$bestellnummer','$menge','$preis', - '$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe','$rabatt')"); - } - return $this->app->DB->GetInsertID(); - } - - - function AddPositionManuell($typ,$id, $artikel,$menge,$name=null,$beschreibung=null,$waehrung='EUR') - { - $artArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT nummer,projekt FROM artikel WHERE id = %d', - $artikel - ) - ); - $bestellnummer = !empty($artArr)?$artArr['nummer']:$this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); - $projekt = !empty($artArr)?$artArr['projekt']:$this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$artikel' LIMIT 1"); - - $adresse = $this->app->DB->Select("SELECT adresse FROM $typ WHERE id='$id' LIMIT 1"); - - - - if($menge<1) - $preis = $this->GetVerkaufspreis($artikel,1,$adresse,$waehrung); - else - $preis = $this->GetVerkaufspreis($artikel,$menge,$adresse,$waehrung); - - $artikelnummerkunde = $this->app->DB->real_escape_string($this->app->DB->Select("SELECT kundenartikelnummer FROM verkaufspreise WHERE adresse='$adresse' AND artikel='$artikel' AND kundenartikelnummer!='' AND ab_menge <='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') ORDER by ab_menge DESC LIMIT 1")); - - - $artikeldata = $this->app->DB->SelectRow("SELECT umsatzsteuer,mlmpunkte,mlmbonuspunkte,mlmdirektpraemie,name_de,anabregs_text FROM artikel WHERE id='$artikel' LIMIT 1"); - $vpe = ''; - $datum = null; - - $sort = (int)$this->app->DB->Select("SELECT IFNULL(MAX(sort),0) FROM ".$typ."_position WHERE $typ='$id' LIMIT 1"); - $sort = $sort + 1; - - $umsatzsteuer = $artikeldata['umsatzsteuer']; - $mlmpunkte = $artikeldata['mlmpunkte']; - $mlmbonuspunkte = $artikeldata['mlmbonuspunkte']; - $mlmdirektpraemie = $artikeldata['mlmdirektpraemie']; - - if($name===null) { - $name = $artikeldata['name_de']; - } - if($beschreibung===null) { - $beschreibung = $artikeldata['anabregs_text']; - } - - if($typ==='auftrag' || $typ==='angebot' || $typ==='rechnung') - { - $this->app->DB->Insert("INSERT INTO ".$typ."_position (id,$typ,artikel,bezeichnung, - beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe,punkte,bonuspunkte,mlmdirektpraemie,artikelnummerkunde) - VALUES ('','$id','$artikel','$name','$beschreibung','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt', - '$vpe','$mlmpunkte','$mlmbonuspunkte','$mlmdirektpraemie','$artikelnummerkunde')"); - } else { - $this->app->DB->Insert("INSERT INTO ".$typ."_position (id,$typ,artikel,bezeichnung, - beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe) - VALUES ('','$id','$artikel','$name','$beschreibung','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe')"); - } - - $posid = $this->app->DB->GetInsertID(); - - $this->RunHook("erpapi_addpositionmanuell", 5, $typ, $id, $artikel, $menge, $posid); - return $posid; - } - - - - function AddAuftragPosition($auftrag, $verkauf,$menge,$datum) - { - $artikel = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $bezeichnunglieferant = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1"); - $bestellnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); - $preis = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikel' LIMIT 1"); - $sort = $this->app->DB->Select("SELECT MAX(sort) FROM auftrag_position WHERE auftrag='$auftrag' LIMIT 1"); - $sort = $sort + 1; - - $mlmpunkte = $this->app->DB->Select("SELECT mlmpunkte FROM artikel WHERE id='$artikel' LIMIT 1"); - $mlmbonuspunkte = $this->app->DB->Select("SELECT mlmbonuspunkte FROM artikel WHERE id='$artikel' LIMIT 1"); - $mlmdirektpraemie = $this->app->DB->Select("SELECT mlmdirektpraemie FROM artikel WHERE id='$artikel' LIMIT 1"); - - $this->app->DB->Insert("INSERT INTO auftrag_position (id,auftrag,artikel,bezeichnung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, - status,projekt,vpe,punkte,bonuspunkte,mlmdirektpraemie) - VALUES ('','$auftrag','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe', - '$mlmpunkte','$mlmbonuspunkte','$mlmdirektpraemie')"); - } - - - function DeleteAuftrag($id) - { - $belegnr = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1"); - if($belegnr=="" || $belegnr=="0") - { - $positionen = $this->app->DB->SelectArr("SELECT id FROM auftrag_position WHERE auftrag = '$id'"); - if($positionen) - { - foreach($positionen as $pos) - { - $this->app->DB->Delete("DELETE FROM objekt_lager_platz WHERE objekt = 'auftrag' AND parameter = '".$pos['id']."'"); - } - } - $this->app->DB->Delete("DELETE FROM auftrag_position WHERE auftrag='$id'"); - $this->app->DB->Delete("DELETE FROM auftrag_protokoll WHERE auftrag='$id'"); - $this->app->DB->Delete("DELETE FROM auftrag WHERE id='$id' LIMIT 1"); - $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag' AND parameter='$id'"); - } - } - - - function GetCreateProjekt($adresse=0) - { - if($adresse>0) - $tmp_projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$adresse' LIMIT 1"); - - if($tmp_projekt > 0) - $projekt = $tmp_projekt; - - $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - if($projekt_bevorzugt=="1") - { - $projekt = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); - } - - if($projekt <= 0 && $this->app->User->GetType()=="admin") - { - $projekt = $this->app->DB->Select("SELECT standardprojekt FROM firma WHERE id='".$this->app->User->GetFirma()."' LIMIT 1"); - } - else { - if($projekt <=0) - { - $projekt = $this->FallbackRolle($this->app->User->GetAdresse()); - } - } - return $projekt; - } - - - - function CreateAngebot($adresse="") - { - $projekt = $this->GetCreateProjekt($adresse); - $standardlager = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id = '$projekt' LIMIT 1"); - $usereditid = 0; - if(isset($this->app->User) && $this->app->User && method_exists($this->app->User,'GetID'))$usereditid = $this->app->User->GetID(); - $ohnebriefpapier = $this->Firmendaten("angebot_ohnebriefpapier"); - $belegmax = ""; - - $angebotersatz_standard = $this->Firmendaten("angebotersatz_standard"); - if($this->StandardZahlungsweise($projekt)=="rechnung") - { - $this->app->DB->Insert("INSERT INTO angebot (id,datum,gueltigbis,bearbeiter,usereditid,vertrieb,firma,belegnr,autoversand,zahlungsweise, - zahlungszieltage, - zahlungszieltageskonto, - zahlungszielskonto, - status,projekt,adresse,ohne_briefpapier,abweichendebezeichnung ) - VALUES ('',NOW(), DATE_ADD(curdate(), INTERVAL ".((int)$this->Firmendaten("angebot_anzahltage")>0?(int)$this->Firmendaten("angebot_anzahltage"):28)." DAY),'','$usereditid','','".$this->app->User->GetFirma()."','$belegmax',1,'".$this->StandardZahlungsweise($projekt)."', - '".$this->ZahlungsZielTage($projekt)."', - '".$this->ZahlungsZielTageSkonto($projekt)."', - '".$this->ZahlungsZielSkonto($projekt)."', - 'angelegt','$projekt','$adresse','".$ohnebriefpapier."','$angebotersatz_standard')"); - - } else { - $this->app->DB->Insert("INSERT INTO angebot (id,datum,gueltigbis,bearbeiter,usereditid,vertrieb,firma,belegnr,autoversand,zahlungsweise, - zahlungszieltage, - zahlungszieltageskonto, - zahlungszielskonto, - status,projekt,adresse,ohne_briefpapier,abweichendebezeichnung ) - VALUES ('',NOW(), DATE_ADD(curdate(), INTERVAL ".((int)$this->Firmendaten("angebot_anzahltage")>0?(int)$this->Firmendaten("angebot_anzahltage"):28)." DAY),'','$usereditid','','1','$belegmax',1,'".$this->StandardZahlungsweise($projekt)."', - '0', - '0', - '0', - 'angelegt','$projekt','$adresse','".$ohnebriefpapier."','$angebotersatz_standard')"); - } - - $id = $this->app->DB->GetInsertID(); - - $this->CheckVertrieb($id,"angebot"); - $this->CheckBearbeiter($id,"angebot"); - if($standardlager) { - $this->app->DB->Update("UPDATE angebot SET standardlager = '$standardlager' WHERE id = '$id' LIMIT 1"); - } - $type="angebot"; - $this->app->erp->ObjektProtokoll($type,$id,$type."_create",ucfirst($type)." angelegt"); - - $this->app->erp->AngebotProtokoll($id,"Angebot angelegt"); - $this->SchnellFreigabe("angebot",$id); - $this->EventAPIAdd("EventAngebotCreate",$id,"angebot","create"); - $this->LoadSteuersaetzeWaehrung($id,"angebot",$projekt); - - return $id; - } - - - function AddAdressePosition($adresse, $verkauf,$menge,$startdatum, $wiederholend = 1, $zahlzyklus = 1) - { - $adresse = (int)$adresse; - $verkauf = (int)$verkauf; - $menge = (float)str_replace(',','.',$menge); - $lieferdatum = $this->app->String->Convert($startdatum,"%1.%2.%3","%3-%2-%1"); - - $artikel = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $bezeichnung= $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1"); - $bestellnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); - $anabregs_text = $this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='$artikel' LIMIT 1"); - $preis = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $waehrung = $this->app->DB->Select("SELECT waehrung FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikel' LIMIT 1"); - $vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - //$sort = $this->app->DB->Select("SELECT MAX(sort) FROM angebot_position WHERE angebot='$angebot' LIMIT 1"); - $sort = (int)$this->app->DB->Select("SELECT MAX(sort) FROM abrechnungsartikel where adresse = ".$adresse); - $sort = $sort + 1; - $this->app->DB->Insert("INSERT INTO abrechnungsartikel (id,artikel,bezeichnung,nummer,menge,preis, sort, - lieferdatum, steuerklasse, status,projekt,wiederholend,zahlzyklus,adresse,startdatum,waehrung,beschreibung,beschreibungersetzten,dokument,preisart) - VALUES ('','$artikel','$bezeichnung','$bestellnummer','$menge','$preis','$sort','$lieferdatum', - '$umsatzsteuer','angelegt','$projekt','$wiederholend','$zahlzyklus','$adresse','$startdatum','$waehrung','$anabregs_text','1','rechnung','monat')"); - - return $this->app->DB->GetInsertID(); - } - - - function AddAngebotPosition($angebot, $verkauf,$menge,$datum) - { - $artikel = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $bezeichnunglieferant = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1"); - $bestellnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); - $beschreibung = $this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='$artikel' LIMIT 1"); - $preis = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $waehrung = $this->app->DB->Select("SELECT waehrung FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikel' LIMIT 1"); - $vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $sort = $this->app->DB->Select("SELECT MAX(sort) FROM angebot_position WHERE angebot='$angebot' LIMIT 1"); - $sort = $sort + 1; - $this->app->DB->Insert("INSERT INTO angebot_position (id,angebot,artikel,beschreibung,bezeichnung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe) - VALUES ('','$angebot','$artikel','$beschreibung','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe')"); - } - - function DeleteBelegPosition($doctype, $posid) - { - $arr = $this->app->DB->SelectArr("SELECT * FROM $doctype"."_position WHERE id = '$posid' LIMIT 1"); - if(!$arr)return false; - $this->app->DB->Delete("DELETE FROM $doctype"."_position WHERE id = '$posid' LIMIT 1"); - $this->app->DB->Update("UPDATE $doctype"."_position SET sort = sort - 1 WHERE $doctype = '".$arr[0][$doctype]."' AND sort > ".$arr[0]['sort']); - $akstort = $this->app->DB->SelectArr("SELECT sort FROM beleg_zwischenpositionen WHERE doctype = '$doctype' AND doctypeid = '".$arr[0][$doctype]."' AND pos = '".$arr[0]['sort']."' ORDER BY sort DESC LIMIT 1"); - $offset = 0; - if($aktsort)$offset = 1 + (int)$aktsort[0]['sort']; - $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos - 1, sort = sort - $offset WHERE doctype = '$doctype' AND doctypeid = '".$arr[0][$doctype]."' AND pos = '".($arr[0]['sort'] + 1)."'"); - $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos - 1 WHERE doctype = '$doctype' AND doctypeid = '".$arr[0][$doctype]."' AND pos > '".($arr[0]['sort'] + 1)."'"); - return true; - } - - - function CopyBestellung($id) - { - $obj = $this->LoadModul('bestellung'); - if(!empty($obj) && method_exists($obj, 'CopyBestellung')) - { - return $obj->CopyBestellung($id); - } - } - - function NextProjektnummer($abkuerzung) - { - $i = 1; - $neu = $abkuerzung.$i; - while($this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($neu)."' LIMIT 1")) - { - $i++; - $neu =$abkuerzung.$i; - } - return $neu; - } - - - function CopyProjektDaten($fromid , $toid, $data = null) - { - $id = $fromid; - $newid = $toid; - - $arbeitspakete = $this->app->DB->SelectArr("SELECT id,vorgaenger FROM arbeitspaket WHERE projekt = '$id'"); - - for ($i=0; $i < count($data['arbeitspaket']); $i++) { - for ($j=0; $j < count($arbeitspakete); $j++) { - if(($arbeitspakete[$j]['id'] == $data['arbeitspaket'][$i]) && ($arbeitspakete[$j]['vorgaenger'] != '0')){ - if(!in_array($arbeitspakete[$j]['vorgaenger'], $data['arbeitspaket'])){ - $data['arbeitspaket'][] = $arbeitspakete[$j]['vorgaenger']; - } - } - } - } - - - if($arbeitspakete) - { - $alteNeueIds = array(); - - foreach($arbeitspakete as $arbeitspaket) - { - $do = true; - if(is_null($data) || (!is_null($data) && !isset($data['arbeitspaket']) || !is_array($data['arbeitspaket']) || !in_array($arbeitspaket['id'], $data['arbeitspaket'])))$do = false; - if($do) - { - $newpaket = $this->app->DB->MysqlCopyRow('arbeitspaket', 'id', $arbeitspaket['id']); - $alteNeueIds[$arbeitspaket['id']] = $newpaket; - $idtoid[$arbeitspaket['id']] = $newpaket; - $newidtoold[$newpaket] = $arbeitspaket['id']; - $this->app->DB->Update("UPDATE arbeitspaket SET status = 'offen', abgabedatum = '0000-00-00', startdatum = '0000-00-00', projekt = '$newid' WHERE id = '$newpaket' LIMIT 1"); - } - } - foreach($arbeitspakete as $arbeitspaket) - { - if($arbeitspaket['vorgaenger'] && !empty($idtoid[$arbeitspaket['vorgaenger']]) && !empty($idtoid[$arbeitspaket['id']])) - { - $this->app->DB->Update("UPDATE arbeitspaket SET vorgaenger = '".$idtoid[$arbeitspaket['vorgaenger']]."' WHERE id = '".$idtoid[$arbeitspaket['id']]."' LIMIT 1"); - } - } - unset($arbeitspakete); - } - $artikel = $this->app->DB->SelectArr("SELECT id,parent,teilprojekt FROM projekt_artikel WHERE projekt = '$id' and teilprojekt > 0"); - if($artikel) - { - foreach($artikel as $art) - { - $do = true; - if((!isset($idtoid) || !isset($idtoid[$art['teilprojekt']])))$do = false; - if((!is_null($data) && (!isset($data['artikel']) || !is_array($data['artikel']) || !in_array($art['id'], $data['artikel']))))$do = false; - if($do) - { - $newartikel = $this->app->DB->MysqlCopyRow('projekt_artikel', 'id', $art['id']); - $this->app->DB->Update("UPDATE projekt_artikel SET projekt = '$newid' WHERE id = '$newartikel' LIMIT 1"); - $this->app->DB->Update("UPDATE projekt_artikel SET teilprojekt = '".$newidtoold[$art['teilprojekt']]."' WHERE id = '$newartikel' LIMIT 1"); - $idtoidart[$art['id']] = $newpaket; - } - } - foreach($artikel as $art) - { - if($art['parent'] && !empty($idtoidart[$art['parent']]) && !empty($idtoidart[$art['id']])) - { - $this->app->DB->Update("UPDATE projekt_artikel SET parent = '".$idtoidart[$art['parent']]."' WHERE id = '".$idtoidart[$art['id']]."' LIMIT 1"); - } - } - unset($idtoidart); - unset($artikel); - } - $adressrollen = $this->app->DB->SelectArr("SELECT id FROM adresse_rolle WHERE projekt = '$id' AND objekt like 'Projekt' AND (bis = '0000-00-00' OR bis >= date(now()))"); - if($adressrollen) - { - foreach($adressrollen as $rolle) - { - $do = true; - if(!is_null($data) && (!isset($data['adressrollen']) || !is_array($data['adressrollen']) || !in_array($rolle['id'], $data['adressrollen'])))$do = false; - if($do) - { - $newrolle = $this->app->DB->MysqlCopyRow('adresse_rolle', 'id', $rolle['id']); - $this->app->DB->Update("UPDATE adresse_rolle SET projekt = '$newid' , parameter = '$newid' WHERE id = '$newrolle' LIMIT 1"); - } - } - unset($adressrollen); - } - $aufgaben = $this->app->DB->SelectArr("SELECT a.id, a.aufgabe, ap.aufgabe AS teilprojekt, adr.name as mitarbeiter, a.status - FROM aufgabe a - LEFT JOIN projekt p ON p.id=a.projekt - LEFT JOIN adresse adr ON a.adresse=adr.id - LEFT JOIN arbeitspaket ap ON ap.id=a.teilprojekt - WHERE a.projekt = '$id'"); - - if($aufgaben){ - foreach($aufgaben as $aufgabe){ - $do = true; - if((!is_null($data) && (!isset($data['aufgaben']) || !is_array($data['aufgaben']) || !in_array($aufgabe['id'], $data['aufgaben']))))$do = false; - if($do) - { - $newaufgabe = $this->app->DB->MysqlCopyRow('aufgabe', 'id', $aufgabe['id']); - $this->app->DB->Update("UPDATE aufgabe SET projekt = '$newid', angelegt_am = CURDATE() WHERE id = '$newaufgabe' LIMIT 1"); - $altesTeilprojekt = $this->app->DB->Select("SELECT teilprojekt FROM aufgabe WHERE id = '$newaufgabe' LIMIT 1"); - if($altesTeilprojekt != '' && $altesTeilprojekt > 0){ - if(is_array($alteNeueIds)){ - if($alteNeueIds[$altesTeilprojekt] > 0){ - $this->app->DB->Update("UPDATE aufgabe SET teilprojekt = '".$alteNeueIds[$altesTeilprojekt]."' WHERE id = '$newaufgabe' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE aufgabe SET teilprojekt = 0 WHERE id = '$newaufgabe' LIMIT 1"); - } - } - } - - } - } - unset($aufgaben); - } - - $wiedervorlagen = $this->app->DB->SelectArr("SELECT id FROM wiedervorlage WHERE projekt = '$id'"); - - if($wiedervorlagen){ - foreach($wiedervorlagen as $wiedervorlage){ - $do = true; - if(!is_null($data) && (!isset($data['wiedervorlagen']) || !is_array($data['wiedervorlagen']) || !in_array($wiedervorlage['id'], $data['wiedervorlagen']))){ - $do = false; - } - if($do){ - $neueWiedervorlage = $this->app->DB->MysqlCopyRow('wiedervorlage', 'id', $wiedervorlage['id']); - $this->app->DB->Update("UPDATE wiedervorlage SET projekt = '$newid', parameter = '$newid' WHERE id = '$neueWiedervorlage' LIMIT 1"); - } - } - unset($wiedervorlagen); - } - } - - /** - * @param $id Project-ID to Copy - * @param null $data unused - * @return int|bool return new Project-Id or false on error - */ - public function CopyProjekt($id, $data = null) - { - $id = (int)$id; - if(!empty($id)){ - $id = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '$id' LIMIT 1"); - } - if(empty($id)){ - return false; - } - - $newid = $this->app->DB->MysqlCopyRow('projekt', 'id', $id); - if(empty($newid)) - { - return false; - } - $abkuerzung = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$id' LIMIT 1"); - $abkuerzungneu = $this->NextProjektnummer($abkuerzung); - if(!empty($abkuerzungneu)){ - $this->app->DB->Update("UPDATE projekt SET abkuerzung = '".$this->app->DB->real_escape_string($abkuerzungneu)."', status = 'gestartet' WHERE id = '$newid' LIMIT 1"); - } - return $newid; - } - - - /** - * @param $doctype - * @param $doctypeid - * @return int|void - */ - public function getNextSort($doctype, $doctypeid) - { - if($doctypeid <= 0 || !is_numeric($doctypeid) || empty($doctype) || !is_string($doctype) || strpos($doctype,'`') !== false) - { - return; - } - return 1 + (int)$this->app->DB->Select('SELECT ifnull(max(sort),0) FROM `'.$doctype.'` WHERE id = '.$doctypeid); - } - - - public function CopyVerbindlichkeit($id){ - /** @var Verbindlichkeit $obj */ - $obj = $this->app->erp->LoadModul('verbindlichkeit'); - if(!empty($obj) && method_exists($obj,'copyLiability')) { - return $obj->copyLiability($id); - } - return 0; - } - - public function CopyAuftrag($id) - { - if($id <= 0) - { - return; - } - // kopiere eintraege aus auftrag_position - $arr = $this->app->DB->SelectArr( - sprintf( - "SELECT NOW() as datum,projekt,freitext,bodyzusatz,adresse,name,shopextid, - standardlager,ansprechpartner,anschreiben, - abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer, - ihrebestellnummer,typ, - versandart,vertrieb,zahlungsweise,zahlungszieltage,lieferdatum,'angelegt' as status, - rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe, - zahlungszieltageskonto,zahlungszielskonto,firma,'angelegt' as status,abweichendelieferadresse,liefername, - lieferabteilung,lieferunterabteilung,ust_befreit,angebotid,kommissionskonsignationslager, - lieferland,lieferstrasse,lieferort,lieferplz,lieferadresszusatz,lieferansprechpartner,autoversand,art, - sprache,anzeigesteuer,waehrung,kurs,kostenstelle,gln,liefergln,bundesstaat,lieferemail, lieferbedingung - FROM auftrag WHERE id=%d LIMIT 1", - $id - ) - ); - if(empty($arr)) { - return; - } - $this->app->DB->Insert('INSERT INTO auftrag (id) VALUES (NULL)'); - $newid = $this->app->DB->GetInsertID(); - $arr[0]['kundennummer'] = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id = '".$arr[0]['adresse']."' LIMIT 1"); - $this->app->DB->UpdateArr('auftrag', $newid, 'id', $arr[0],true); - $pos = $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE auftrag='$id' order by sort, id"); - $cpos = !empty($pos)?count($pos):0; - for($i=0;$i<$cpos;$i++){ - $this->app->DB->Insert("INSERT INTO auftrag_position (id) VALUES('')"); - $newposid = $this->app->DB->GetInsertID(); - $altzuneu[$pos[$i]['id']] = $newposid; - $pos[$i]['auftrag']=$newid; - if($pos[$i]['explodiert_parent'] && isset($altzuneu[$pos[$i]['explodiert_parent']]))$pos[$i]['explodiert_parent'] = $altzuneu[$pos[$i]['explodiert_parent']]; - $this->app->DB->UpdateArr('auftrag_position',$newposid,'id',$pos[$i],true); - if(is_null($pos[$i]['steuersatz'])){ - $this->app->DB->Update("UPDATE auftrag_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); - } - } - $this->CheckFreifelder('auftrag',$newid); - $this->CopyBelegZwischenpositionen('auftrag',$id,'auftrag',$newid); - - $this->app->DB->Update("UPDATE auftrag_position SET geliefert=0, geliefert_menge=0 WHERE auftrag='$newid'"); - $this->LoadSteuersaetzeWaehrung($newid,'auftrag'); - $this->SchnellFreigabe('auftrag',$newid); - return $newid; - } - - function CopyGutschrift($id) - { - $obj = $this->LoadModul('gutschrift'); - if(!empty($obj) && method_exists($obj,'CopyGutschrift')) - { - return $obj->CopyGutschrift($id); - } - } - - - function CopyRechnung($id) - { - $obj = $this->LoadModul('rechnung'); - if(!empty($obj) && method_exists($obj,'CopyRechnung')){ - return $obj->CopyRechnung($id); - } - } - - function CopyPreisanfrage($id) - { - /** @var Preisanfrage $obj */ - $obj = $this->app->erp->LoadModul('preisanfrage'); - if(!empty($obj) && method_exists($obj,'CopyPreisanfrage')) { - return $obj->CopyPreisanfrage($id); - } - return 0; - } - - function CopyProformarechnung($id) - { - $this->app->DB->Insert("INSERT INTO proformarechnung (id) VALUES ('')"); - $newid = $this->app->DB->GetInsertID(); - $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,projekt,freitext,bodyzusatz,adresse,'' as belegnr,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,lieferantennummer,bearbeiter,'angelegt' as status,typ,sprache,waehrung, - firma FROM proformarechnung WHERE id='$id' LIMIT 1"); - - $this->app->DB->UpdateArr('proformarechnung', $newid, 'id',$arr[0],true); - $pos = $this->app->DB->SelectArr("SELECT * FROM proformarechnung_position WHERE proformarechnung='$id'"); - $cpos = !empty($pos)?count($pos):0; - for($i=0;$i<$cpos;$i++) - { - $this->app->DB->Insert("INSERT INTO proformarechnung_position (id) VALUES('')"); - $newposid = $this->app->DB->GetInsertID(); - $pos[$i]['proformarechnung']=$newid; - $this->app->DB->UpdateArr('proformarechnung_position',$newposid,'id',$pos[$i],true); - if(is_null($pos[$i]['steuersatz'])) { - $this->app->DB->Update("UPDATE proformarechnung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); - } - } - $this->CheckFreifelder("proformarechnung",$newid); - $this->CopyBelegZwischenpositionen("proformarechnung",$id,"proformarechnung",$newid); - $this->LoadSteuersaetzeWaehrung($newid,"proformarechnung"); - return $newid; - } - - - function CopyAnfrage($id) - { - $this->app->DB->Insert("INSERT INTO anfrage (id) VALUES ('')"); - $newid = $this->app->DB->GetInsertID(); - $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,projekt,bodyzusatz,freitext,adresse,CONCAT(name,' (Kopie)') as name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,bearbeiter,'angelegt' as status,typ, - firma FROM anfrage WHERE id='$id' LIMIT 1"); - $this->app->DB->UpdateArr('anfrage', $newid, 'id',$arr[0],true); - $pos = $this->app->DB->SelectArr("SELECT * FROM anfrage_position WHERE anfrage='$id'"); - - $cpos = !empty($pos)?count($pos):0; - for($i=0;$i<$cpos;$i++) - { - $this->app->DB->Insert("INSERT INTO anfrage_position (id) VALUES('')"); - $newposid = $this->app->DB->GetInsertID(); - $pos[$i]['anfrage']=$newid; - $this->app->DB->UpdateArr('anfrage_position',$newposid,'id',$pos[$i],true); - if(is_null($pos[$i]['steuersatz'])) { - $this->app->DB->Update("UPDATE anfrage_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); - } - } - $this->CheckFreifelder("anfrage",$newid); - $this->CopyBelegZwischenpositionen("anfrag",$id,"anfrage",$newid); - $this->LoadSteuersaetzeWaehrung($newid,"anfrage"); - return $newid; - } - - function CopyInventur($id) - { - /** @var Inventur $obj */ - $obj = $this->LoadModul('inventur'); - if(!empty($obj) && method_exists($obj, 'CopyInventur')) - { - return $obj->CopyInventur($id); - } - return 0; - } - - /** - * @deprecated - * - */ - public function CopyKalkulation($id) - { - $obj = $this->LoadModul('kalkulation'); - if(!empty($obj) && method_exists($obj,'CopyKalkulation')) - { - return $obj->CopyKalkulation($id); - } - } - - /** - * @deprecated - * - */ - public function CopyReisekosten($id) - { - /** @var Reisekosten $obj */ - $obj = $this->LoadModul('reisekosten'); - if(!empty($obj) && method_exists($obj,'CopyReisekosten')) - { - return $obj->CopyReisekosten($id); - } - return 0; - } - - - /** - * @param $id - * - * @return int|null - */ - public function CopyArbeitsnachweis($id) - { - /** @var Arbeitsnachweis $obj */ - $obj = $this->app->erp->LoadModul('arbeitsnachweis'); - if(!empty($obj) && method_exists($obj, 'CopyArbeitsnachweis')) { - return $obj->CopyArbeitsnachweis($id); - } - return 0; - } - - - /** - * @param $id - * - * @return int|null - */ - public function CopyLieferschein($id) - { - /** @var Lieferschein $obj */ - $obj = $this->LoadModul('lieferschein'); - if(!empty($obj) && method_exists($obj, 'CopyLieferschein')){ - return $obj->CopyLieferschein($id); - } - return null; - } - - /** - * @param int $id - * - * @return int|null - */ - public function CopyRetoure($id) - { - $this->app->DB->Insert("INSERT INTO retoure (id) VALUES ('')"); - $newid = $this->app->DB->GetInsertID(); - $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,projekt,lieferschein,lieferscheinid,bodyzusatz,freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,bearbeiter,'angelegt' as status,typ,standardlager,ansprechpartner,titel,anschreiben, - firma FROM retoure WHERE id='$id' LIMIT 1"); - $this->app->DB->UpdateArr('retoure',$newid,'id',$arr[0],true); - - $pos = $this->app->DB->SelectArr("SELECT * FROM retoure_position WHERE retoure='$id'"); - $cpos = !empty($pos)?count($pos):0; - for($i=0;$i<$cpos;$i++) { - $this->app->DB->Insert("INSERT INTO retoure_position (id) VALUES(NULL)"); - $newposid = $this->app->DB->GetInsertID(); - $altzuneu[$pos[$i]['id']] = $newposid; - $pos[$i]['lagertext']=''; - $pos[$i]['retoure']=$newid; - $pos[$i]['menge_eingang'] = 0; - $pos[$i]['menge_gutschrift'] = 0; - $pos[$i]['geliefert'] = 0; - if($pos[$i]['explodiert_parent'] && isset($altzuneu[$pos[$i]['explodiert_parent']])) { - $pos[$i]['explodiert_parent'] = $altzuneu[$pos[$i]['explodiert_parent']]; - } - $this->app->DB->UpdateArr('retoure_position',$newposid,'id',$pos[$i],true); - } - $this->CheckFreifelder('retoure',$newid); - $this->CopyBelegZwischenpositionen('retoure',$id,'retoure',$newid); - $this->app->DB->Update("UPDATE retoure_position SET geliefert=0, abgerechnet=0 WHERE retoure='$newid'"); - - $this->SchnellFreigabe("retoure",$newid); - return $newid; - } - - function CopyBelegZwischenpositionen($orgtyp,$orgid,$newtyp,$newid, $zwischenpositionen = null) - { - $where = ''; - if($zwischenpositionen) { - foreach($zwischenpositionen as $v) { - $wherea[] = " id = '$v' "; - $where = ' AND ('.implode(' OR ', $wherea).") "; - } - } - - $belegpositionen = $this->app->DB->SelectArr("SELECT * FROM beleg_zwischenpositionen WHERE doctype = '$orgtyp' AND doctypeid = '$orgid' $where "); - if($belegpositionen) { - $cpos = !empty($belegpositionen)?count($belegpositionen):0; - for($i=0;$i<$cpos;$i++) { - $this->app->DB->Insert('INSERT INTO beleg_zwischenpositionen (id) VALUES (NULL)'); - $newposid = $this->app->DB->GetInsertID(); - $belegpositionen[$i]['doctypeid']=$newid; - $belegpositionen[$i]['doctype']=$newtyp; - $this->app->DB->UpdateArr('beleg_zwischenpositionen',$newposid,'id',$belegpositionen[$i],true); - } - } - } - - - function CopyAngebot($id) - { - - // kopiere eintraege aus angebot_position - $this->app->DB->Insert("INSERT INTO angebot (id) VALUES ('')"); - $newid = $this->app->DB->GetInsertID(); - $arr = $this->app->DB->SelectRow("SELECT NOW() as datum,projekt,anfrage,bodyzusatz,freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,vertrieb,zahlungsweise,zahlungszieltage,ust_befreit,lieferdatum,DATE_ADD(curdate(),INTERVAL ".((int)$this->app->erp->Firmendaten("angebot_anzahltage")>0?(int)$this->app->erp->Firmendaten("angebot_anzahltage"):28)." DAY) as gueltigbis,'angelegt' as status,rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe,typ,aktion,titel,ansprechpartner,anschreiben,keinsteuersatz, - zahlungszieltageskonto,standardlager,zahlungszielskonto,firma,abweichendelieferadresse,liefername,lieferabteilung,lieferunterabteilung, - lieferland,lieferstrasse,lieferort,lieferplz,lieferadresszusatz,lieferansprechpartner,liefergln,lieferemail,gln,liefertitel,internebezeichnung,lieferdatumkw,lieferbedingung,gesamtsummeausblenden - ,sprache,anzeigesteuer,waehrung,kurs,kostenstelle - FROM angebot WHERE id='$id' LIMIT 1"); - - $this->app->DB->UpdateArr('angebot', $newid, 'id', $arr, true); - $pos = $this->app->DB->SelectArr("SELECT * FROM angebot_position WHERE angebot='$id'"); - $cpos = !empty($pos)?count($pos):0; - for($i=0;$i<$cpos;$i++) { - - $this->app->DB->Insert("INSERT INTO angebot_position (id) VALUES('')"); - $newposid = $this->app->DB->GetInsertID(); - $pos[$i]['angebot']=$newid; - $this->app->DB->UpdateArr('angebot_position',$newposid,'id',$pos[$i],true); - if(is_null($pos[$i]['steuersatz'])) { - $this->app->DB->Update("UPDATE angebot_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); - } - } - - $this->CopyBelegZwischenpositionen('angebot',$id,'angebot',$newid); - - $this->LoadSteuersaetzeWaehrung($newid,'angebot'); - $this->SchnellFreigabe('angebot',$newid); - return $newid; - } - - - function WeiterfuehrenDateianhang($vonbelegtyp,$vonbelegid,$nachbelegtyp,$nachbelegid){ - - $dateien = $this->app->DB->SelectArr("SELECT datei, subjekt,parameter2,objekt2 FROM datei_stichwoerter WHERE objekt LIKE '$vonbelegtyp' AND parameter = '$vonbelegid'"); - - if($dateien != ""){ - foreach($dateien as $key=>$value){ - $this->app->erp->AddDateiStichwort($value['datei'], $value['subjekt'], $nachbelegtyp, $nachbelegid,false,$value['parameter2'],$value['objekt2']); - } - } - } - - - function WeiterfuehrenAuftragZuLieferschein($id, $positionen = null, $zwischenpositionen = null) - { - if($id <= 0) { - return null; - } - // pruefe ob auftrag status=angelegt, dann vergebe belegnr - $this->CheckClass('FormHandler'); - - $this->RunHook('WeiterfuehrenAuftragZuLieferschein', 1, $id); - $orderArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT projekt,status,belegnr FROM auftrag WHERE id=%d LIMIT 1', - $id - ) - ); - $projekt = $orderArr['projekt']; - $nurlagerartikel = $this->app->DB->Select("SELECT nurlagerartikel FROM projekt WHERE id = '$projekt' LIMIT 1"); - $status = $orderArr['status']; - $checkbelegnr = $orderArr['belegnr']; - if($status === 'angelegt' && $checkbelegnr == ''){ - $belegnr = $this->GetNextNummer("auftrag", $projekt, $id); - - $this->app->DB->Update("UPDATE auftrag SET belegnr='$belegnr', status='freigegeben' WHERE id='$id' LIMIT 1"); - $this->AuftragProtokoll($id, "Auftrag freigegeben"); - - // auftrag abschliessen und event senden - $this->EventAPIAdd("EventAuftragEdit", $id, "auftrag", "edit"); - } - $bundesland = $this->app->DB->Select("SELECT bundesland FROM auftrag WHERE id = '$id' LIMIT 1"); - $bundesstaat = $this->app->DB->Select("SELECT bundesstaat FROM auftrag WHERE id = '$id' LIMIT 1"); - - $arr = $this->app->DB->SelectArr("SELECT datum,ihrebestellnummer,projekt,belegnr as auftrag,bodyzusatz,freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,titel,lieferbedingung,ansprechpartner,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,vertrieb,zahlungsweise,zahlungszieltage,anschreiben, id as auftragid,vertriebid, bearbeiter,bearbeiterid, internebemerkung,projektfiliale,typ,standardlager,ust_befreit,gln, ohne_artikeltext,sprache,kostenstelle,lieferid, - zahlungszieltageskonto,zahlungszielskonto,firma,'angelegt' as status,internebezeichnung,lieferantenauftrag as lieferantenretoure,lieferant,kommissionskonsignationslager FROM auftrag WHERE id='$id' LIMIT 1"); - - - $check_mail = $this->app->DB->Select("SELECT lieferschein_email FROM adresse WHERE id='".$arr[0]['adresse']."'"); - if($check_mail!="") { - $arr[0]['email'] = $check_mail; - } - $arr2 = $this->app->DB->SelectArr("SELECT gln, liefergln FROM auftrag WHERE id = '$id' LIMIT 1"); - $abweichendelieferadresse = $this->app->DB->Select("SELECT abweichendelieferadresse FROM auftrag WHERE id='$id' LIMIT 1"); - $tmparrliefer = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id='$id' LIMIT 1"); - foreach($tmparrliefer[0] as $k => $v) { - $tmparrliefer[0][$k] = $this->app->DB->real_escape_string($v); - } - $versandart = $this->app->DB->Select("SELECT versandart FROM auftrag WHERE id='$id' LIMIT 1"); - - $poswheretmp = ''; - if($this->Firmendaten("dienstleistungsartikel_nicht_zu_lieferschein")=="1"){ - $poswheretmp = ' AND art.dienstleistung = 0'; - } - - if(!empty($positionen)) - { - $posa = null; - foreach($positionen as $v) - { - $posa[] = " ap.id = '$v' "; - } - $poswheretmp .= ' AND ('.implode(' OR ',$posa).') '; - } - - if($nurlagerartikel) - { - $pos = $this->app->DB->SelectArr("SELECT ap.*,art.porto AS artikelporto FROM auftrag_position ap INNER JOIN artikel art ON ap.artikel = art.id AND (art.lagerartikel = 1 OR (art.stueckliste = 1 AND art.juststueckliste = 1)) WHERE ap.auftrag='$id' $poswheretmp order by ap.sort"); - }else{ - $pos = $this->app->DB->SelectArr("SELECT ap.*,art.porto AS artikelporto FROM auftrag_position ap LEFT JOIN artikel art ON ap.artikel = art.id WHERE ap.auftrag='$id' $poswheretmp order by ap.sort"); - } - - if(empty($pos)) - { - return null; - } - $portoartikelArr = []; - $haspositions = false; - foreach($pos as $positem) - { - $portoartikelArr[$positem['id']] = $positem['artikelporto']; - if((int)$positem['artikelporto']===0) - { - $haspositions = true; - } - } - if(!$haspositions){ - return null; - } - - $newid = $this->CreateLieferschein($arr[0]['adresse']); - - if($this->Firmendaten('dateienweiterfuehren')){ - $this->WeiterfuehrenDateianhang("Auftrag", $id, "Lieferschein", $newid); - } - - $this->app->DB->UpdateArr("lieferschein",$newid,'id',$arr[0],true); - - if(!empty($bundesland)){ - $this->app->DB->Update("UPDATE lieferschein SET bundesland='".$this->app->DB->real_escape_string($bundesland)."' WHERE id='$newid' LIMIT 1"); - } - - if(!empty($bundesstaat)){ - $this->app->DB->Update("UPDATE lieferschein SET bundesstaat='".$this->app->DB->real_escape_string($bundesstaat)."' WHERE id='$newid' LIMIT 1"); - } - - $this->app->DB->Update("UPDATE lieferschein SET datum=NOW() WHERE id='$newid' LIMIT 1"); - - - - //lieferadresse wenn abweichend!!!! - if($abweichendelieferadresse && $versandart!="packstation") - { - if($tmparrliefer[0]['lieferemail']=="") { - $tmparrliefer[0]['lieferemail'] = $arr[0]['email']; - } - - //liefername lieferland lieferstrasse lieferort lieferplz lieferadresszusatz - $this->app->DB->Update("UPDATE lieferschein SET name='{$tmparrliefer[0]['liefername']}', abteilung='{$tmparrliefer[0]['lieferabteilung']}', - unterabteilung='{$tmparrliefer[0]['lieferunterabteilung']}',strasse='{$tmparrliefer[0]['lieferstrasse']}',titel='{$tmparrliefer[0]['liefertitel']}', - email='{$tmparrliefer[0]['lieferemail']}', - adresszusatz='{$tmparrliefer[0]['lieferadresszusatz']}', plz='{$tmparrliefer[0]['lieferplz']}',ort='{$tmparrliefer[0]['lieferort']}',land='{$tmparrliefer[0]['lieferland']}',ansprechpartner='{$tmparrliefer[0]['lieferansprechpartner']}' WHERE id='$newid' LIMIT 1"); - if($tmparrliefer[0]['liefergln']!="") - $this->app->DB->Update("UPDATE lieferschein SET gln = '{$tmparrliefer[0]['liefergln']}' WHERE id = '$newid' LIMIT 1"); - if($tmparrliefer[0]['lieferbundesstaat']!='') { - $this->app->DB->Update("UPDATE `lieferschein` SET `bundesstaat` = '{$tmparrliefer[0]['lieferbundesstaat']}' WHERE `id` = '{$newid}' LIMIT 1"); - } - } - - //lieferadresse wenn packstation - if($versandart=="packstation") - { - //packstation_inhaber packstation_station packstation_ident packstation_plz packstation_ort - $this->app->DB->Update("UPDATE lieferschein SET name='{$tmparrliefer[0]['packstation_inhaber']}', unterabteilung='',strasse='Packstation Nr. {$tmparrliefer[0]['packstation_station']}', adresszusatz='{$tmparrliefer[0]['packstation_ident']}', - plz='{$tmparrliefer[0]['packstation_plz']}',ort='{$tmparrliefer[0]['packstation_ort']}' WHERE id='$newid' LIMIT 1"); - } - - $portosorts = null; - $cpos = $pos?count($pos):0; - for($i=0;$i<$cpos;$i++){ - /* nur lager artikel in den Lieferschein */ - $portoartikel = $portoartikelArr[$pos[$i]]; - if($portoartikel==0) { - $this->app->DB->Insert("INSERT INTO lieferschein_position (id) VALUES('')"); - $newposid = $this->app->DB->GetInsertID(); - $auftragzulieferschein[$pos[$i]['id']] = $newposid; - $pos[$i]['lieferschein']=$newid; - $pos[$i]['auftrag_position_id']=$pos[$i]['id']; - if($pos[$i]['explodiert']) { - $pos[$i]['bezeichnung'] = $pos[$i]['bezeichnung'];//." (Stückliste)"; - } - - if($pos[$i]['explodiert_parent'] > 0) { - - $aktlvl = 1; - $aktparent = $pos[$i]['explodiert_parent']; - while(true) - { - if($aktlvl > 10) { - break; - } - $aktparent = $this->app->DB->Select("SELECT explodiert_parent FROM auftrag_position WHERE id = '".$aktparent."' LIMIT 1"); - - if(!$aktparent) { - break; - } - $aktlvl++; - } - if($aktlvl > 1) { - $pos[$i]['bezeichnung'] = str_repeat("*", $aktlvl - 1).$pos[$i]['bezeichnung']; - } - - $pos[$i]['explodiert_parent_artikel'] = $this->app->DB->Select("SELECT artikel FROM auftrag_position WHERE id='".$pos[$i]['explodiert_parent']."' LIMIT 1"); - - $pos[$i]['explodiert_parent'] = isset($auftragzulieferschein[$pos[$i]['explodiert_parent']])?$auftragzulieferschein[$pos[$i]['explodiert_parent']]:0; - } - $this->app->DB->UpdateArr("lieferschein_position",$newposid,'id',$pos[$i],true); - }else{ - $portosorts[] = $i; - } - } - - if($this->Firmendaten('auftragabschliessen')!='1') { - $this->app->DB->Update("UPDATE auftrag SET status='abgeschlossen',schreibschutz='1' WHERE id='$id' LIMIT 1"); - $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge=menge WHERE auftrag='$id'"); - } - - $this->CheckFreifelder("lieferschein",$newid); - - if(!empty($positionen) && !empty($zwischenpositionen)){ - $this->CopyBelegZwischenpositionen('auftrag', $id, 'lieferschein', $newid, $zwischenpositionen); - } - elseif(empty($positionen)) { - $this->CopyBelegZwischenpositionen('auftrag', $id, 'lieferschein', $newid); - } - - if(!empty($portosorts)) { - foreach($portosorts as $k => $v) { - if($v == count($pos) -1) - { - $this->app->DB->Delete("DELETE FROM beleg_zwischenpositionen WHERE doctype = 'lieferschein' AND doctypeid = '$newid' AND pos = '".($v)."' AND postype LIKE 'gruppe'"); - } - elseif($this->app->DB->Select("SELECT id FROM beleg_zwischenpositionen WHERE doctype = 'lieferschein' AND doctypeid = '$newid' AND pos = '".($v+1)."' AND postype LIKE 'gruppe' LIMIT 1")) { - $this->app->DB->Delete("DELETE FROM beleg_zwischenpositionen WHERE doctype = 'lieferschein' AND doctypeid = '$newid' AND pos = '".($v)."' AND postype LIKE 'gruppe'"); - } - } - } - $this->BelegNeusortieren('lieferschein', $newid); - // auftrag freigeben!!! - $this->SchnellFreigabe("lieferschein",$newid); - $this->LieferscheinNeuberechnen($newid); - $this->RunHook('weiterfuehrenauftragzulieferschein_ende', 2, $id, $newid); - return $newid; - } - - function BelegNeusortieren($doctype, $id) - { - $arr = $this->app->DB->SelectArr("SELECT id, sort FROM $doctype"."_position WHERE $doctype = '$id' ORDER BY sort, id"); - if(empty($arr)) { - return; - } - $altsort = 0; - foreach($arr as $k => $v) { - if($v['sort'] > ($k+1)) { - $diff = $v['sort'] - ($k+1); - $this->app->DB->Update("UPDATE $doctype"."_position SET sort = sort - $diff WHERE id = '".$v['id']."' LIMIT 1"); - for($sort = ($k+1); $sort < $v['sort']; $sort++) { - $beleg_zwischenpositionensort = $this->app->DB->SelectArr("SELECT id, sort FROM beleg_zwischenpositionen where doctype = '$doctype' AND doctypeid = '$id' AND pos = '".($sort-1)."' ORDER BY sort DESC LIMIT 1"); - $offset = 0; - if($beleg_zwischenpositionensort) { - $offset = 1 + $beleg_zwischenpositionensort[0]['sort']; - } - $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos - $diff, sort = sort + $offset WHERE doctype = '$doctype' AND doctypeid = '$id' AND pos = '$sort'"); - } - } - } - //Belegpositionen nach letzter Position - $sort = count($arr); - $restpositionen = $this->app->DB->SelectArr("SELECT id FROM beleg_zwischenpositionen where doctype = '$doctype' AND doctypeid = '$id' AND pos > $sort ORDER BY pos, sort"); - if($restpositionen) { - $beleg_zwischenpositionensort = $this->app->DB->SelectArr("SELECT id, sort FROM beleg_zwischenpositionen where doctype = '$doctype' AND doctypeid = '$id' AND pos = '".($sort)."' ORDER BY sort DESC LIMIT 1"); - $offset = 0; - if($beleg_zwischenpositionensort) { - $offset = 1 + $beleg_zwischenpositionensort[0]['sort']; - } - foreach($restpositionen as $k => $v) { - $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = '".$sort."', sort = '".($offset + $k)."' WHERE id = '".$v['id']."' LIMIT 1"); - } - } - //Luecken in Zwischenpositionen - $restpositionen = $this->app->DB->SelectArr("SELECT id,pos,sort FROM beleg_zwischenpositionen where doctype = '$doctype' AND doctypeid = '$id' ORDER BY pos, sort"); - if(empty($restpositionen)) { - return; - } - - $aktpos = -1; - $k2 = -1; - foreach($restpositionen as $k => $v) { - if($v['pos'] != $aktpos) { - $k2 = -1; - $aktpos = $v['pos']; - } - $k2++; - if($v['sort'] > $k2) { - $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET sort = $k2 WHERE id = '".$v['id']."' LIMIT 1"); - } - } - } - - - function CheckFreifelderEinzelPos($table, $id, $force = false, $posid = 0){ - $language = $this->app->erp->GetSpracheBelegISO($table,$id); - $pos = $this->app->DB->SelectRow("SELECT * FROM ".$table."_position WHERE ".$table."='$id' AND id = '$posid' LIMIT 1"); - if(empty($pos)) { - return; - } - - $artikel_id = $pos['artikel']; - - $tmpfreifelder = $this->app->DB->SelectArr("SELECT * FROM artikel WHERE id='".$artikel_id."' LIMIT 1"); - if(empty($tmpfreifelder)) { - return; - } - - $langFreifeld = []; - $freifelderLang = $this->app->DB->SelectArr("SELECT nummer, wert FROM artikel_freifelder WHERE artikel=$artikel_id AND sprache='$language'"); - if(!empty($freifelderLang)) { - foreach($freifelderLang as $freifelderLangRow) { - $langFreifeld[(int)$freifelderLangRow['nummer']] = $freifelderLangRow['wert']; - } - } - for($ifreifeld=1; $ifreifeld<=40; $ifreifeld++) { - $check_language = !empty($langFreifeld[$ifreifeld])?$langFreifeld[$ifreifeld]:''; - $tmpfreifelder[0]['freifeld'.$ifreifeld] = $this->app->DB->real_escape_string(($check_language!=""?$check_language:$tmpfreifelder[0]['freifeld'.$ifreifeld])); - } - - switch($table){ - case "angebot": $kurz="an"; break; - case "auftrag": $kurz="ab"; break; - case "rechnung": $kurz="re"; break; - case "gutschrift": $kurz="gs"; break; - case "lieferschein": $kurz="ls"; break; - case "bestellung": $kurz="be"; break; - case "proformarechnung": $kurz="pr"; break; - case "preisanfrage": $kurz="pa"; break; - case "produktion": $kurz="pd"; break; - } - for($ifreifeld=1; $ifreifeld<=40; $ifreifeld++){ - $pos['freifeld'.$ifreifeld] = $this->app->DB->real_escape_string($pos['freifeld'.$ifreifeld]); - if($this->app->erp->Firmendaten("freifeld".$ifreifeld.$kurz)=="1" && $pos['freifeld'.$ifreifeld] == ""){ - $this->app->DB->Update("UPDATE ".$table."_position SET freifeld".$ifreifeld."='".$tmpfreifelder[0]['freifeld'.$ifreifeld]."' WHERE id='".$pos['id']."'"); - } - elseif($this->app->erp->Firmendaten("freifeld".$ifreifeld.$kurz)=="1" && $pos['freifeld'.$ifreifeld] != ""){ - $this->app->DB->Update("UPDATE ".$table."_position SET freifeld".$ifreifeld."='".($force?$tmpfreifelder[0]['freifeld'.$ifreifeld]:$pos['freifeld'.$ifreifeld])."' WHERE id='".$pos['id']."'"); - } - elseif($this->app->erp->Firmendaten("freifeld".$ifreifeld.$kurz)!="1"){ - $this->app->DB->Update("UPDATE ".$table."_position SET freifeld".$ifreifeld."='' WHERE id='".$pos['id']."'"); - } - } - } - - - // entsprechend der Firmendaten die Freifelder beim Weiterfuehren vom Dokument fuellen - function CheckFreifelder($table,$id, $force = false) - { - $language = $this->app->erp->GetSpracheBelegISO($table,$id); - - $pos = $this->app->DB->SelectArr( - sprintf( - 'SELECT * FROM `%s` WHERE `%s`=%d', - $table.'_position', $table, (int)$id - ) - ); - if(empty($pos)) { - return; - } - - $articles = []; - foreach($pos as $row) { - if((int)$row['artikel'] > 0 && !in_array((int)$row['artikel'], $articles)) { - $articles[] = (int)$row['artikel']; - } - } - $freifelderLangs = []; - $freifelderLangQuery = $this->app->DB->Query('SELECT artikel, nummer, wert FROM artikel_freifelder WHERE artikel IN ('.implode(', ', $articles).") AND sprache='$language'"); - if(!empty($freifelderLangQuery)) { - while ($row = $this->app->DB->Fetch_Assoc($freifelderLangQuery)) { - $freifelderLangs[$row['artikel']][] = $row; - } - $this->app->DB->free($freifelderLangQuery); - } - - $articleQuery = $this->app->DB->Query('SELECT * FROM artikel WHERE id IN ('.implode(', ', $articles).')'); - if(!empty($articleQuery)){ - while ($row = $this->app->DB->Fetch_Assoc($articleQuery)) { - $articles[$row['id']] = $row; - } - $this->app->DB->free($articleQuery); - } - - switch($table) - { - case 'angebot': $kurz='an'; break; - case 'auftrag': $kurz='ab'; break; - case 'rechnung': $kurz='re'; break; - case 'gutschrift': $kurz='gs'; break; - case 'lieferschein': $kurz='ls'; break; - case 'bestellung': $kurz='be'; break; - case 'proformarechnung': $kurz='pr'; break; - case 'preisanfrage': $kurz='pa'; break; - case 'produktion': $kurz='pd'; break; - } - - $cpos = count($pos); - for($i=0;$i<$cpos;$i++) - { - $artikel_id = $pos[$i]['artikel']; - - $tmpfreifelder = !empty($articles[$artikel_id])?[$articles[$artikel_id]]:null; - if(!empty($tmpfreifelder)) - { - $langFreifeld = []; - $freifelderLang = !empty($freifelderLangs[$artikel_id])?$freifelderLangs[$artikel_id]:null; - if(!empty($freifelderLang)) - { - foreach($freifelderLang as $freifelderLangRow) - { - $langFreifeld[(int)$freifelderLangRow['nummer']] = $freifelderLangRow['wert']; - } - } - for($ifreifeld=1;$ifreifeld<=40;$ifreifeld++) - { - $check_language = !empty($langFreifeld[$ifreifeld])?$langFreifeld[$ifreifeld]:''; - $tmpfreifelder[0]['freifeld'.$ifreifeld] = $this->app->DB->real_escape_string(($check_language!=""?$check_language:$tmpfreifelder[0]['freifeld'.$ifreifeld])); - } - - $updateArr = []; - - for($ifreifeld=1;$ifreifeld<=40;$ifreifeld++) - { - $isFreifeldKurz = $this->app->erp->Firmendaten('freifeld'.$ifreifeld.$kurz)=='1'; - $posFreifeld = $pos[$i]['freifeld'.$ifreifeld]; - $posFreifeldEscaped = $this->app->DB->real_escape_string($posFreifeld); - if($isFreifeldKurz && $posFreifeld=='' && $posFreifeld !== $tmpfreifelder[0]['freifeld' . $ifreifeld]){ - $updateArr['freifeld'.$ifreifeld] = $tmpfreifelder[0]['freifeld' . $ifreifeld]; - } - else if($isFreifeldKurz && $pos[$i]['freifeld'.$ifreifeld]!=''){ - $newValue = ($force ? $tmpfreifelder[0]['freifeld' . $ifreifeld] : $posFreifeldEscaped); - if($posFreifeld !== $newValue){ - $updateArr['freifeld'.$ifreifeld] = $newValue; - } - } - else if (!$isFreifeldKurz && $posFreifeld !== '') { - $updateArr['freifeld'.$ifreifeld] = ''; - } - } - if(!empty($updateArr)) { - $this->app->DB->UpdateArr($table.'_position', (int)$pos[$i]['id'], 'id', $updateArr); - } - } - } - } - - function LagerAuslagernObjektLagerPlatz($artikel,$pos, $regal,$menge, $objekt = 'lieferschein') - { - $check = $this->app->DB->SelectArr("SELECT * FROM objekt_lager_platz WHERE lager_platz = '$regal' AND objekt = '$objekt' AND parameter = '$pos' AND artikel = '$artikel' LIMIT 1"); - if($check) - { - $this->app->DB->Update("UPDATE objekt_lager_platz set menge = menge + '".$menge."' WHERE id = '".$check[0]['id']."'"); - }else{ - $this->app->DB->Insert("INSERT into objekt_lager_platz (objekt, lager_platz, parameter, artikel,menge) values ('$objekt', '$regal', '$pos','$artikel' ,'$menge')"); - } - } - - function LagerAuslagernText($artikel,$pos, $regal,$menge, $objekt = 'lieferschein') - { - $this->LagerAuslagernObjektLagerPlatz($artikel,$pos, $regal,$menge, $objekt); - $this->AddLagerPlatzText($pos, $objekt); - } - - function AddLagerPlatzText($parameter, $objekt = 'lieferschein',$return=false) - { - $parameter = (int)$parameter; - $olp = $this->app->DB->SelectArr("SELECT * FROM objekt_lager_platz WHERE objekt = '$objekt' AND parameter = '$parameter' ORDER BY menge DESC"); - $text = ''; - foreach($olp as $k => $v) - { - $kurzbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id = '".$v['lager_platz']."' LIMIT 1"); - if($text != '')$text .= ', '; - if($v['menge'] == round($v['menge']))$v['menge'] = round($v['menge']); - $text .= $kurzbezeichnung.' ('.$v['menge'].')'; - } - - if($return) return $text; - - switch($objekt) - { - case 'lieferschein': - $this->app->DB->Update("UPDATE ".$objekt."_position SET lagertext = '$text' WHERE id = '$parameter' LIMIT 1"); - break; - } - return true; - } - - function WeiterfuehrenLieferscheinZuRechnung($id) - { - $adresse = $this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id='$id' LIMIT 1"); - $newid = $this->CreateRechnung($adresse); - - if($this->Firmendaten('dateienweiterfuehren')){ - $this->WeiterfuehrenDateianhang("Lieferschein", $id, "Rechnung", $newid); - } - - $this->LoadRechnungStandardwerte($newid,$adresse); - if($newid)$this->app->DB->Update("UPDATE lieferschein SET rechnungid = '$newid' WHERE (rechnungid = 0 OR isnull(rechnungid)) AND id = '$id' LIMIT 1"); - if($newid)$this->app->DB->Update("UPDATE lieferschein_position SET abgerechnet = '1' WHERE lieferschein = '$id'"); - if($newid)$this->app->DB->Update("UPDATE rechnung SET lieferschein = '$id' WHERE id = '$newid' LIMIT 1"); - if($this->app->erp->Firmendaten("schnellanlegen_ohnefreigabe")=="1") - { - $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,ihrebestellnummer,projekt, anschreiben, id as lieferschein,bodyzusatz,auftrag,auftragid, internebemerkung, - freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,ansprechpartner,titel,lieferbedingung,plz,ort,land,email,telefon,telefax,betreff,kundennummer,ohne_artikeltext, - versandart, vertriebid,vertrieb,sprache,projektfiliale,typ,internebezeichnung,bearbeiterid,ustid,ust_befreit,kostenstelle, - gln FROM lieferschein WHERE id='$id' LIMIT 1"); - } else { - $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,ihrebestellnummer,projekt, anschreiben, id as lieferschein,bodyzusatz,auftrag,auftragid,internebemerkung, - freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,ansprechpartner,titel,lieferbedingung,plz,ort,land,email,telefon,telefax,betreff,kundennummer,ohne_artikeltext, - versandart, vertriebid,vertrieb,sprache,projektfiliale,typ,internebezeichnung,bearbeiterid,ustid,ust_befreit,kostenstelle, - 'angelegt' as status, gln FROM lieferschein WHERE id='$id' LIMIT 1"); - } - - - $abweichende_rechnungsadresse = $this->app->DB->SelectArr("SELECT abweichende_rechnungsadresse,rechnung_name,rechnung_titel,rechnung_typ,rechnung_strasse,rechnung_ort,rechnung_plz,rechnung_ansprechpartner, - rechnung_land,rechnung_abteilung,rechnung_unterabteilung,rechnung_adresszusatz,rechnung_telefon,rechnung_telefax,rechnung_anschreiben, rechnung_email,rechnung_gln - FROM adresse WHERE id = '$adresse' LIMIT 1"); - if($abweichende_rechnungsadresse && $abweichende_rechnungsadresse[0]['abweichende_rechnungsadresse'] && $abweichende_rechnungsadresse[0]['rechnung_name']) - { - // abweichende Rechnungsadresse sticht - foreach($abweichende_rechnungsadresse[0] as $k => $v) - { - if($k != 'abweichende_rechnungsadresse') - $arr[0][str_replace('rechnung_','',$k)] = $v; - } - } else if ($arr[0]['auftragid']) { - // adresse aus auftrag wenn vorhanden - $abweichende_rechnungsadresse = $this->app->DB->SelectArr("SELECT name as rechnung_name,titel as rechnung_titel,typ as rechnung_typ, - strasse as rechnung_strasse,ort as rechnung_ort,plz as rechnung_plz,ansprechpartner as rechnung_ansprechpartner, - land as rechnung_land,abteilung as rechnung_abteilung,unterabteilung as rechnung_unterabteilung, - adresszusatz as rechnung_adresszusatz,telefon as rechnung_telefon,telefax as rechnung_telefax,anschreiben as rechnung_anschreiben, - email as rechnung_email, gln as rechnung_gln - FROM auftrag WHERE id = '".$arr[0]['auftragid']."' LIMIT 1"); - foreach($abweichende_rechnungsadresse[0] as $k => $v) - { - if($k != 'abweichende_rechnungsadresse') - $arr[0][str_replace('rechnung_','',$k)] = $v; - } - - } - // this is not the different invoice email - this is the forced email for invoices! - $check_mail = $this->app->DB->Select("SELECT rechnungs_email FROM adresse WHERE id='$adresse'"); - if($check_mail!="") $arr[0]['email'] = $check_mail; - - $this->app->DB->UpdateArr('rechnung', $newid, 'id', $arr[0], true); - - - - if($arr[0]['auftragid']) - { - $aufarr = $this->app->DB->SelectArr("SELECT zahlungsweise,zahlungszieltage,zahlungszieltageskonto,zahlungszielskonto,waehrung,steuersatz_normal,steuersatz_ermaessigt FROM auftrag WHERE id = '".$arr[0]['auftragid']."' LIMIT 1"); - if($aufarr) - { - $this->app->DB->UpdateArr('rechnung',$newid,'id',$aufarr[0],true); - } - } - - $pos = $this->app->DB->SelectArr("SELECT * FROM lieferschein_position WHERE lieferschein='$id' order by sort"); - $cpos = !empty($pos)?count($pos):0; - for($i=0;$i<$cpos;$i++) { - $this->app->DB->Insert("INSERT INTO rechnung_position (id) VALUES('')"); - $newposid = $this->app->DB->GetInsertID(); - $lieferscheinzurechnung[$pos[$i]['id']] = $newposid; - if(!empty($pos[$i]['explodiert_parent'])) { - $pos[$i]['explodiert_parent'] = isset($lieferscheinzurechnung[$pos[$i]['explodiert_parent']])?$lieferscheinzurechnung[$pos[$i]['explodiert_parent']]:0; - } - $pos[$i]['rechnung']=$newid; - - if($pos[$i]['auftrag_position_id'] > 0) - { - $tmpap = $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE id='".$pos[$i]['auftrag_position_id']."' LIMIT 1"); - foreach($tmpap[0] as $key=>$value) - { - if($key!="id" && $key!="menge" && ($key!="bezeichnung" && $value!="") && ($key!="beschreibung" && $value!="")) { - $pos[$i][$key]=$value; - } - } - } else { - $pos[$i]['preis']=$this->GetVerkaufspreis($pos[$i]['artikel'],$pos[$i]['menge'],$adresse); - $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='".$pos[$i]['artikel']."' LIMIT 1"); - if($umsatzsteuer=="ermaessigt") { - $pos[$i]['umsatzsteuer']=$umsatzsteuer; - } - if($umsatzsteuer=="befreit") { - $pos[$i]['umsatzsteuer']=$umsatzsteuer; - } - } - $this->app->DB->UpdateArr('rechnung_position',$newposid,'id',$pos[$i],true); - if(is_null($pos[$i]['steuersatz'])) { - $this->app->DB->Update("UPDATE rechnung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); - } - } - - if($this->Firmendaten('dateienweiterfuehren')){ - foreach($lieferscheinzurechnung as $oldpos => $newpos){ - $this->app->DB->Update("UPDATE datei_stichwoerter SET parameter2='$newpos' - WHERE LOWER(objekt)='rechnung' AND parameter='$newid' AND objekt2='position' AND parameter2=".$oldpos); - } - $this->app->DB->Update("UPDATE datei_stichwoerter SET parameter2='0', objekt2='' - WHERE LOWER(objekt)='rechnung' AND parameter='$newid' AND objekt2='position' AND NOT parameter2 IN (".implode(',',$lieferscheinzurechnung).")"); - } - - $portoExistsInInvoice = ($this->app->DB->Select("SELECT rp.id FROM rechnung_position rp INNER JOIN artikel art ON rp.artikel = art.id AND art.porto = 1 AND rp.rechnung='".$newid."' LIMIT 1") > 0? true:false); - - if($arr[0]['auftragid'] && !$portoExistsInInvoice) - { - $portopositionen = $this->app->DB->SelectArr("SELECT ap.* FROM auftrag_position ap INNER JOIN artikel art ON ap.artikel = art.id AND art.porto = 1 AND ap.auftrag='".$arr[0]['auftragid']."' ORDER by ap.sort"); - if($portopositionen) - { - foreach($portopositionen as $portopos) - { - $this->app->DB->Insert("INSERT INTO rechnung_position (id) VALUES('')"); - $newposid = $this->app->DB->GetInsertID(); - $sort = 1+$this->app->DB->Select("SELECT ifnull(max(sort),0) FROM rechnung_position WHERE rechnung = '$newid'"); - $portopos['sort'] = $sort; - unset($portopos['auftrag']); - $portopos['auftrag_position_id'] = $portopos['id']; - unset($portopos['id']); - $portopos['rechnung'] = $newid; - $this->app->DB->UpdateArr('rechnung_position',$newposid,'id',$portopos,true); - if(is_null($portopos['steuersatz'])) { - $this->app->DB->Update("UPDATE rechnung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); - } - } - } - } - - if(!empty($arr[0]['auftragid'])) { - $orderRow = $this->app->DB->SelectRow( - sprintf( - 'SELECT storage_country,deliverythresholdvatid FROM auftrag WHERE id = %d', - $arr[0]['auftragid'] - ) - ); - if(!empty($orderRow['storage_country'])) { - $this->app->DB->Update( - sprintf( - "UPDATE rechnung SET storage_country = '%s' WHERE id = %d", - $this->app->DB->real_escape_string($orderRow['storage_country']), $newid - ) - ); - } - if(!empty($orderRow['deliverythresholdvatid'])) { - $this->app->DB->Update( - sprintf( - "UPDATE rechnung SET deliverythresholdvatid = '%s' WHERE id = %d", - $this->app->DB->real_escape_string($orderRow['deliverythresholdvatid']), $newid - ) - ); - } - } - - $ohnebriefpapier = $this->Firmendaten("rechnung_ohnebriefpapier"); - //$stornorechnung = $this->Firmendaten("stornorechhung_standard"); - - $this->CheckFreifelder("rechnung",$newid); - $this->CopyBelegZwischenpositionen("lieferschein",$id,"rechnung",$newid); - - $this->app->DB->Update("UPDATE rechnung SET ohne_briefpapier='".$ohnebriefpapier."' WHERE id='$newid,' LIMIT 1"); - //$this->app->DB->Update("UPDATE rechnung SET stornorechnung='$stornorechnung', ohne_briefpapier='".$ohnebriefpapier."' WHERE id='$newid,' LIMIT 1"); - - $this->app->DB->Update("UPDATE lieferschein SET schreibschutz='1' WHERE id='$id' LIMIT 1"); - - //$this->SchnellFreigabe("rechnung",$newid); // braucht man nicht wegen create - $this->ANABREGSNeuberechnen($newid,"rechnung"); - return $newid; - } - - - function WeiterfuehrenRechnungZuGutschrift($id, $grund = "Rechnung storniert") - { - $adresse = $this->app->DB->Select("SELECT adresse FROM rechnung WHERE id='$id' LIMIT 1"); - $newid = $this->CreateGutschrift($adresse); - - - if($this->Firmendaten('dateienweiterfuehren')){ - $this->WeiterfuehrenDateianhang("Rechnung", $id, "Gutschrift", $newid); - } - - $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,ihrebestellnummer,projekt, belegnr as rechnung,anschreiben,aktion,ansprechpartner,titel,lieferbedingung,bodyzusatz, - freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,zahlungsweise,zahlungszieltage,ust_befreit, keinsteuersatz, id as rechnungid,rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe,bearbeiter,projektfiliale,typ,internebezeichnung,ohne_artikeltext,kurs, - `kundennummer_buchhaltung`, - zahlungszieltageskonto,zahlungszielskonto,firma,waehrung,steuersatz_normal,steuersatz_zwischen,steuersatz_ermaessigt,steuersatz_starkermaessigt,steuersatz_dienstleistung,'angelegt' as status,gln,kostenstelle, sprache FROM rechnung WHERE id='$id' LIMIT 1"); - - $check_mail = $this->app->DB->Select("SELECT gutschrift_email FROM adresse WHERE id='$adresse'"); - if($check_mail!='') { - $arr[0]['email'] = $check_mail; - } - $arr[0]['deliverythresholdvatid'] = $this->app->DB->Select("SELECT deliverythresholdvatid FROM rechnung WHERE id='$id' LIMIT 1"); - - $this->app->DB->UpdateArr('gutschrift', $newid, 'id', $arr[0], true); - $this->LoadKurs($newid,"gutschrift",$arr[0]['projekt'],true); - - $pos = $this->app->DB->SelectArr("SELECT * FROM rechnung_position WHERE rechnung='$id' order by sort"); - $cpos = !empty($pos)?count($pos):0; - for($i=0;$i<$cpos;$i++) { - $this->app->DB->Insert("INSERT INTO gutschrift_position (id) VALUES('')"); - $newposid = $this->app->DB->GetInsertID(); - $idtoid[$pos[$i]['id']] = $newposid; - if(!empty($pos[$i]['explodiert_parent'])) - { - $pos[$i]['explodiert_parent'] = isset($idtoid[$pos[$i]['explodiert_parent']])?$idtoid[$pos[$i]['explodiert_parent']]:0; - } - $pos[$i]['gutschrift']=$newid; - $this->app->DB->UpdateArr('gutschrift_position', $newposid, 'id', $pos[$i], true); - if(is_null($pos[$i]['steuersatz'])) { - $this->app->DB->Update("UPDATE gutschrift_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); - } - } - - $ohnebriefpapier = $this->Firmendaten('gutschrift_ohnebriefpapier'); - $stornorechnung = $this->Firmendaten('stornorechnung_standard'); - - $this->CopyBelegZwischenpositionen('rechnung',$id,'gutschrift',$newid); - $this->app->DB->Update("UPDATE gutschrift SET stornorechnung='$stornorechnung', ohne_briefpapier='".$ohnebriefpapier."' WHERE id='$newid,' LIMIT 1"); - - $this->app->DB->Update("UPDATE rechnung SET schreibschutz='1',status='storniert',zahlungsstatus='bezahlt' WHERE id='$id' LIMIT 1"); - $this->RechnungProtokoll($id, $grund); - $this->SchnellFreigabe("gutschrift",$newid); - return $newid; - } - - - function WeiterfuehrenAuftragZuAnfrage($auftrag) - { - $anfrageid = $this->app->DB->Select("SELECT anfrageid FROM auftrag WHERE id='$auftrag' LIMIT 1"); - //angebot aus offene Angebote entfernen - - $arr = $this->app->DB->SelectArr("SELECT projekt,aktion,bodyzusatz, - freitext,anschreiben,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,email,telefon,telefax,projektfiliale,typ,internebezeichnung,ansprechpartner,titel, - firma,'angelegt' as status FROM auftrag WHERE id='$auftrag' LIMIT 1"); - $arr[0]['bundesstaat'] = $this->app->DB->Select("SELECT bundesstaat FROM auftrag WHERE id = '$id' LIMIT 1"); - $this->app->DB->UpdateArr('anfrage',$anfrageid,'id',$arr[0],true); - - $this->app->DB->Delete("DELETE FROM anfrage_position WHERE anfrage='$anfrageid'"); - - $pos = $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE auftrag='$auftrag' order by sort"); - $cpos = !empty($pos)?count($pos):0; - for($i=0;$i<$cpos;$i++){ - $this->app->DB->Insert("INSERT INTO anfrage_position (id) VALUES('')"); - $newposid = $this->app->DB->GetInsertID(); - $idtoid[$pos[$i]['id']] = $newposid; - if(!empty($pos[$i]['explodiert_parent'])) - { - $pos[$i]['explodiert_parent'] = isset($idtoid[$pos[$i]['explodiert_parent']])?$idtoid[$pos[$i]['explodiert_parent']]:0; - } - $pos[$i]['anfrage']=$anfrageid; - - // Hole Verkaufspreis ab menge - $this->app->DB->UpdateArr('anfrage_position',$newposid,'id',$pos[$i],true); - if(is_null($pos[$i]['steuersatz'])) { - $this->app->DB->Update("UPDATE anfrage_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); - } - } - $this->app->DB->Update("UPDATE auftrag SET schreibschutz='1' WHERE id='$id' LIMIT 1"); - return $anfrageid; - } - - - function WeiterfuehrenAnfrageZuAngebot($id) - { - - $adresse = $this->app->DB->Select("SELECT adresse FROM anfrage WHERE id='$id' LIMIT 1"); - //angebot aus offene Angebote entfernen - $this->app->DB->Insert("INSERT INTO angebot (id) VALUES ('')"); - $newid = $this->app->DB->GetInsertID(); - - if($this->Firmendaten('dateienweiterfuehren')){ - $this->WeiterfuehrenDateianhang("Anfrage", $id, "Angebot", $newid); - } - - $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,projekt,aktion,bodyzusatz, - freitext,anschreiben,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,projektfiliale,typ,ansprechpartner,titel, - versandart, id as anfrageid,internebezeichnung, - firma,'angelegt' as status FROM anfrage WHERE id='$id' LIMIT 1"); - $this->app->DB->UpdateArr('angebot',$newid,'id',$arr[0],true); - $pos = $this->app->DB->SelectArr("SELECT * FROM anfrage_position WHERE anfrage='$id' order by sort"); - $cpos = !empty($pos)?count($pos):0; - for($i=0;$i<$cpos;$i++) { - $this->app->DB->Insert("INSERT INTO angebot_position (id) VALUES('')"); - $newposid = $this->app->DB->GetInsertID(); - $idtoid[$pos[$i]['id']] = $newposid; - if(!empty($pos[$i]['explodiert_parent'])) - { - $pos[$i]['explodiert_parent'] = isset($idtoid[$pos[$i]['explodiert_parent']])?$idtoid[$pos[$i]['explodiert_parent']]:0; - } - $pos[$i]['angebot']=$newid; - - // Hole Verkaufspreis ab menge - $pos[$i]['preis']=$this->GetVerkaufspreis($pos[$i]['artikel'],$pos[$i]['menge'],$adresse); - $this->app->DB->UpdateArr('angebot_position',$newposid,'id',$pos[$i],true); - if(is_null($pos[$i]['steuersatz'])) { - $this->app->DB->Update("UPDATE angebot_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); - } - } - $this->app->DB->Update("UPDATE anfrage SET schreibschutz='1' WHERE id='$id' LIMIT 1"); - - $this->SchnellFreigabe("angebot",$newid); - return $newid; - } - - - function CheckClass($class) - { - switch($class) - { - case 'FormHandler': - if(isset($this->app->FormHandler) && $this->app->FormHandler) { - return; - } - if(!class_exists('FormHandler') && file_exists(__DIR__ .'/../../phpwf/plugins/class.formhandler.php')) { - include_once dirname(dirname(__DIR__)) .'/phpwf/plugins/class.formhandler.php'; - } - if(class_exists('FormHandler')) { - $this->app->FormHandler = new FormHandler($this->app); - } - break; - case 'LieferscheinPDF': - case 'RechnungPDF': - case 'AuftragPDF': - case 'BestellungPDF': - case 'GutschriftPDF': - case 'AngebotPDF': - case 'MahnwesenPDF': - case 'AnfragePDF': - case 'LayoutvorlagenPDF': - if(class_exists($class)) { - return; - } - if(!defined('FPDF_FONTPATH')) { - define('FPDF_FONTPATH',dirname(__DIR__).'/pdf/font/'); - } - - if(!class_exists('FPDFWAWISION')) - { - if(file_exists(dirname(dirname(__DIR__)).'/conf/user_defined.php')){ - include_once dirname(dirname(__DIR__)).'/conf/user_defined.php'; - } - if(!defined('USEFPDF3')) - { - define('USEFPDF3',true); - } - if(defined('USEFPDF3') && USEFPDF3 && file_exists(__DIR__.'/pdf/fpdf_3.php')) - { - require_once(__DIR__.'/pdf/fpdf_3.php'); - } - else if(defined('USEFPDF2') && USEFPDF2 && file_exists(__DIR__.'/pdf/fpdf_2.php')) - { - require_once(__DIR__.'/pdf/fpdf_2.php'); - } else { - require_once(__DIR__.'/pdf/fpdf.php'); - } - } - - if(!class_exists('PDF_EPS'))require_once(__DIR__ .'/pdf/fpdf_final.php'); - - if(!class_exists('SuperFPDF'))require_once(__DIR__ ."/dokumente/class.superfpdf.php"); - if(!class_exists('Etikett'))require_once(__DIR__ ."/dokumente/class.etikett.php"); - if(!class_exists('Briefpapier')){ - if(file_exists(__DIR__ ."/dokumente/class.briefpapier_custom.php")) - { - require_once(__DIR__ ."/dokumente/class.briefpapier_custom.php"); - }else{ - require_once(__DIR__ ."/dokumente/class.briefpapier.php"); - } - } - if(!class_exists($class)) - { - if(file_exists(__DIR__ .'/dokumente/class.'.strtolower(substr($class,0,strlen($class)-3)).'_custom.php')) - { - require_once(__DIR__ .'/dokumente/class.'.strtolower(substr($class,0,strlen($class)-3)).'_custom.php'); - }elseif(file_exists(__DIR__ .'/dokumente/class.'.strtolower(substr($class,0,strlen($class)-3)).'.php')) - { - require_once(__DIR__ .'/dokumente/class.'.strtolower(substr($class,0,strlen($class)-3)).'.php'); - } - } - break; - } - } - - function WeiterfuehrenAuftragZuRechnung($id, $positionen = null, $zwischenpositionen = null, $newid = 0) - { - // wenn anfrage vorhanden diese markieren als abgerechnet status='abgerechnet' - $orderArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT anfrageid, adresse, status,projekt, belegnr - FROM auftrag - WHERE id = %d - LIMIT 1', - $id - ) - ); - - $anfrageid = $orderArr['anfrageid']; - $adresseid = $orderArr['adresse']; - $abweichende_rechnungsadresse = $this->app->DB->Select("SELECT abweichende_rechnungsadresse - FROM adresse WHERE id='$adresseid' LIMIT 1"); - if($anfrageid > 0) { - $this->app->DB->Update("UPDATE anfrage SET status='abgerechnet',schreibschutz='0' WHERE id='$anfrageid'"); - } - // pruefe ob auftrag status=angelegt, dann vergebe belegnr - $status = $orderArr['status']; - $projekt = $orderArr['projekt']; - $checkbelegnr = $orderArr['belegnr']; - if($status==='angelegt' && $checkbelegnr=='') { - $belegnr = $this->GetNextNummer("auftrag",$projekt,$id); - - $this->app->DB->Update("UPDATE auftrag SET belegnr='$belegnr', status='freigegeben' WHERE id='$id' LIMIT 1"); - $this->AuftragProtokoll($id,"Auftrag freigegeben"); - - // auftrag abschliessen und event senden - $this->EventAPIAdd("EventAuftragEdit",$id,"auftrag","edit"); - } - - - //angebot aus offene Angebote entfernen - if($newid <= 0) { - $newid = $this->CreateRechnung($adresseid); - } - - if($this->Firmendaten('dateienweiterfuehren')){ - $this->WeiterfuehrenDateianhang("Auftrag", $id, "Rechnung", $newid); - } - - $arr = $this->app->DB->SelectArr("SELECT datum,ihrebestellnummer,projekt,gesamtsumme as soll, belegnr as auftrag, id as auftragid,aktion,typ,bodyzusatz, - freitext,anschreiben,adresse,name,abteilung,unterabteilung,ansprechpartner,titel,lieferbedingung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,vertrieb,zahlungsweise,zahlungszieltage,ust_befreit,keinsteuersatz,rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe,bearbeiter,internebemerkung,typ,internebezeichnung,systemfreitext,ohne_artikeltext,sprache,kostenstelle, - `kundennummer_buchhaltung`, - projektfiliale,zahlungszieltageskonto,zahlungszielskonto,firma,einzugsdatum,waehrung,kurs,steuersatz_normal,steuersatz_zwischen,steuersatz_ermaessigt,steuersatz_starkermaessigt,steuersatz_dienstleistung,'angelegt' as status, gln, storage_country - FROM auftrag WHERE id='$id' LIMIT 1"); - - $arr[0]['deliverythresholdvatid'] = $this->app->DB->Select("SELECT deliverythresholdvatid FROM auftrag WHERE id='$id' LIMIT 1"); - // this is not the different invoice email this is the forec mail for invoices - $check_mail = $this->app->DB->Select("SELECT rechnungs_email FROM adresse WHERE id='$adresseid' "); - if($check_mail!="") $arr[0]['email'] = $check_mail; - - - $arr_zahlung = $this->app->DB->SelectArr("SELECT zahlungsweise,zahlungszieltage,zahlungszieltageskonto,zahlungszielskonto,versandart,projekt FROM auftrag WHERE id='$id' LIMIT 1"); - $arr[0]['bundesstaat'] = $this->app->DB->Select("SELECT bundesstaat FROM auftrag WHERE id = '$id' LIMIT 1"); - $this->app->DB->UpdateArr('rechnung',$newid,'id',$arr[0], true); - $bundesland = $this->app->DB->Select("SELECT bundesland FROM auftrag WHERE id = '$id' LIMIT 1"); - if(!empty($bundesland)) { - $this->app->DB->Update("UPDATE rechnung SET bundesland = '".$this->app->DB->real_escape_string($bundesland)."' WHERE id = '$newid' LIMIT 1"); - } - - $lieferscheinid = $this->app->DB->Select("SELECT id FROM lieferschein WHERE auftragid='$id' LIMIT 1"); - - if($lieferscheinid>0) - { - $this->app->DB->Update("UPDATE rechnung SET lieferschein='$lieferscheinid' WHERE id='$newid' LIMIT 1"); - $this->app->DB->Update("UPDATE lieferschein SET rechnungid='$newid' WHERE id='$lieferscheinid' LIMIT 1"); - } - - $this->app->DB->Update("UPDATE rechnung SET datum=NOW() WHERE id='$newid' LIMIT 1"); - - $where = ""; - if($positionen) - { - if($positionen) - { - $posa = null; - foreach($positionen as $v) - { - $posa[] = " id = '$v' "; - } - $where = ' AND ('.implode(' OR ',$posa).') '; - } - } - - $pos = $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE auftrag='$id' $where order by sort"); - $cpos = !empty($pos)?count($pos):0; - $auftragzurechnung= []; - for($i=0;$i<$cpos;$i++){ - $this->app->DB->Insert("INSERT INTO rechnung_position (id) VALUES('')"); - $newposid = $this->app->DB->GetInsertID(); - $auftragzurechnung[$pos[$i]['id']] = $newposid; - $pos[$i]['rechnung']=$newid; - $pos[$i]['auftrag_position_id']=$pos[$i]['id']; - if($positionen){ - $pos[$i]['sort'] = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM rechnung_position WHERE rechnung = '$newid'"); - } - - //if($pos[$i]['explodiert']) $pos[$i]['bezeichnung'] = $pos[$i]['bezeichnung'];//." (Stückliste)"; - if($pos[$i]['explodiert_parent'] > 0) { - $pos[$i]['bezeichnung'] = "*** ".$pos[$i]['bezeichnung']; - if($pos[$i]['explodiert_parent'] > 0){ - $pos[$i]['explodiert_parent_artikel'] = $this->app->DB->Select("SELECT artikel FROM auftrag_position WHERE id='" . $pos[$i]['explodiert_parent'] . "' LIMIT 1"); - } - else { - $pos[$i]['explodiert_parent_artikel'] = 0; - } - - } - $idtoid[$pos[$i]['id']] = $newposid; - if(!empty($pos[$i]['explodiert_parent'])) { - $pos[$i]['explodiert_parent'] = isset($idtoid[$pos[$i]['explodiert_parent']])?$idtoid[$pos[$i]['explodiert_parent']]:0; - } - $this->app->DB->UpdateArr('rechnung_position',$newposid,'id',$pos[$i], true); - if(is_null($pos[$i]['steuersatz'])){ - $this->app->DB->Update("UPDATE rechnung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); - } - } - - if($this->Firmendaten('dateienweiterfuehren')){ - foreach($auftragzurechnung as $oldpos => $newpos){ - $this->app->DB->Update("UPDATE datei_stichwoerter SET parameter2='$newpos' - WHERE LOWER(objekt)='rechnung' AND parameter='$newid' AND objekt2='position' AND parameter2=".$oldpos); - } - $this->app->DB->Update("UPDATE datei_stichwoerter SET parameter2='0', objekt2='' - WHERE LOWER(objekt)='rechnung' AND parameter='$newid' AND objekt2='position' AND NOT parameter2 IN (".implode(',',$auftragzurechnung).")"); - } - $this->CheckFreifelder("rechnung",$newid); - if($positionen) - { - if($zwischenpositionen) { - $this->CopyBelegZwischenpositionen("auftrag",$id,"rechnung",$newid,$zwischenpositionen); - } - } - else{ - $this->CopyBelegZwischenpositionen("auftrag",$id,"rechnung",$newid); - } - // wenn adresse abweichende rechnungsadresse hat diese nehmen! - if($abweichende_rechnungsadresse=="1") - { - $this->LoadRechnungStandardwerte($newid,$adresseid); - $arr_zahlung[0]['vertriebid']=$arr[0]['vertriebid']; - $arr_zahlung[0]['bearbeiterid']=$arr[0]['bearbeiterid']; - $arr_zahlung[0]['bearbeiter']=$arr[0]['bearbeiter']; - $arr_zahlung[0]['vertrieb']=$arr[0]['vertrieb']; - //$this->app->FormHandler->ArrayUpdateDatabase("rechnung",$newid,$arr_zahlung[0],true); - $arr_zahlung[0]['ust_befreit'] = $arr[0]['ust_befreit']; - $arr_zahlung[0]['steuersatz_normal'] = $arr[0]['steuersatz_normal']; - $arr_zahlung[0]['steuersatz_ermaessigt'] = $arr[0]['steuersatz_ermaessigt']; - $this->app->DB->UpdateArr('rechnung', $newid, 'id', $arr_zahlung[0],true); - } - - $this->RunHook('WeiterfuehrenAuftragZuRechnungPositionen', 2, $id, $newid); - if($this->useTaxFromSettings($arr[0]['projekt'])) { - $this->LoadSteuersaetze($newid, 'rechnung', $arr[0]['projekt']); - } - // wenn auftrag vorkasse rechnung als bezahlt markieren wenn genug geld vorhanden - $this->RechnungNeuberechnen($newid); - //summe zahlungseingaenge - $summe_zahlungseingaenge = 0; - $rechnungssumme = $this->app->DB->Select("SELECT `soll` FROM `rechnung` WHERE `id` = '{$newid}' LIMIT 1"); - - //if(($arr[0][zahlungsweise]=="vorkasse" || $arr[0][zahlungsweise]=="paypal" || $arr[0][zahlungsweise]=="kreditkarte") && $summe_zahlungseingaenge >= $rechnungssumme) - if($summe_zahlungseingaenge > 0) { - $summe_zahlungseingaenge -= (float)$this->app->DB->Select( - "SELECT SUM(`ist`) FROM `rechnung` WHERE `auftragid` = {$id} AND `id` != {$newid}" - ); - if($summe_zahlungseingaenge >= $rechnungssumme){ - $this->app->DB->Update("UPDATE `rechnung` SET `ist` = `soll`, `zahlungsstatus` = 'bezahlt' WHERE `id` = '{$newid}'"); - } - elseif($summe_zahlungseingaenge > 0){ - $lastDate = $this->app->DB->Select( - "SELECT MAX(k.buchung) - FROM `kontoauszuege_zahlungseingang` AS `ke` - INNER JOIN `kontoauszuege` AS `k` ON ke.kontoauszuege = k.id - WHERE ke.`objekt` = 'auftrag' AND ke.`parameter` = '{$id}' " - ); - $invoice = $this->app->DB->SelectRow( - "SELECT `skontobetrag`, `zahlungszielskonto`, `zahlungszieltageskonto`, - DATE_SUB(`datum`, INTERVAL `zahlungszieltageskonto` DAY) <= '{$lastdate}' AS `skonto_ok` - FROM `rechnung` WHERE `id`= '{$newid}'" - ); - if(!empty($invoice['skonto_ok'])){ - $minimumPayed = !empty($invoice['skontobetrag']) - ? $invoice['skontobetrag'] : $rechnungssumme * (100 - $invoice['zahlungszielskonto']) / 100; - - if($summe_zahlungseingaenge >= $minimumPayed){ - $this->app->DB->Update( - "UPDATE `rechnung` - SET `ist` = '{$summe_zahlungseingaenge}', `zahlungsstatus` = 'bezahlt' - WHERE `id` = '{$newid}'" - ); - } - } - } - } - // was ist denn bei rechnung bar oder nachnahme wenn ein auftragsguthaben vorhanden ist - - - if($this->Firmendaten("auftragabschliessen")!="1") - $this->app->DB->Update("UPDATE auftrag SET status='abgeschlossen',schreibschutz='1' WHERE id='$id' LIMIT 1"); - else { - // erstmal nicht mehr umstellen - //if($this->app->DB->Select("SELECT id FROM auftrag WHERE art <> 'rechnung' AND id = '$id' LIMIT 1"))$this->app->DB->Update("UPDATE auftrag SET art='lieferung' WHERE id='$id' LIMIT 1"); - } - - // auftrag freigeben!!! - $this->SchnellFreigabe("rechnung",$newid); - - $this->ANABREGSNeuberechnen($newid,"rechnung"); - return $newid; - } - - - /** - * @param int $projectId - * - * @return bool - */ - function useTaxFromSettings($projectId = 0) - { - $fromProject = $projectId <= 0?0:(int)$this->Projektdaten($projectId, 'taxfromdoctypesettings'); - if($fromProject === 1) { - return false; - } - if($fromProject === 2) { - return true; - } - - return !empty($this->Firmendaten('taxfromdoctypesettings')); - } - - function WeiterfuehrenAngebotZuAuftrag($id) - { - $anfrageid = $this->app->DB->Select("SELECT anfrageid FROM angebot WHERE id='$id' LIMIT 1"); - $adresseid = $this->app->DB->Select("SELECT adresse FROM angebot WHERE id='$id' LIMIT 1"); - - if($anfrageid > 0) - $this->app->DB->Update("UPDATE anfrage SET status='beauftrag',schreibschutz='0' WHERE id='$anfrageid' AND status!='abgeschlossen' AND status!='abgerechnet'"); - - //angebot aus offene Angebote entfernen - $this->app->DB->Insert("INSERT INTO auftrag (id) VALUES ('')"); - $newid = $this->app->DB->GetInsertID(); - - if($this->Firmendaten('dateienweiterfuehren')){ - $this->WeiterfuehrenDateianhang("Angebot", $id, "Auftrag", $newid); - } - - $arr = $this->app->DB->SelectArr("SELECT NOW() as datum, projekt,belegnr as angebot,lieferdatum,aktion,bodyzusatz, '1' as autoversand, - freitext,anschreiben,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,vertrieb,ansprechpartner,titel,lieferbedingung, - standardlager,zahlungsweise, zahlungszieltage, id as angebotid, anfrage as ihrebestellnummer, anfrageid,rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe,bearbeiter,projektfiliale,typ,internebezeichnung, - zahlungszieltageskonto,zahlungszielskonto,firma,abweichendelieferadresse,liefername,lieferabteilung,lieferunterabteilung,lieferland,lieferstrasse,lieferort,liefergln,lieferemail,ust_befreit,internebemerkung,liefertitel, ohne_artikeltext, - lieferplz,lieferadresszusatz,lieferansprechpartner,ust_befreit,keinsteuersatz,keinporto,'angelegt' as status,lieferdatumkw, - waehrung,steuersatz_normal,steuersatz_zwischen,steuersatz_ermaessigt,steuersatz_starkermaessigt,steuersatz_dienstleistung, gln,sprache,kostenstelle FROM angebot WHERE id='$id' LIMIT 1"); - $arr[0]['bundesstaat'] = $this->app->DB->Select("SELECT bundesstaat FROM angebot WHERE id = '$id' LIMIT 1"); - - $check_mail = $this->app->DB->Select("SELECT auftrag_email FROM adresse WHERE id='$adresseid'"); - if($check_mail!="") $arr[0]['email'] = $check_mail; - $arr[0]['autoversand'] = 1-(int)$this->Projektdaten($arr[0]['projekt'],'deactivateautoshipping'); - $this->app->DB->UpdateArr('auftrag',$newid, 'id', $arr[0], true); - $pos = $this->app->DB->SelectArr("SELECT * FROM angebot_position WHERE angebot='$id' order by sort"); - for($i=0;$iapp->DB->Insert("INSERT INTO auftrag_position (id) VALUES('')"); - $newposid = $this->app->DB->GetInsertID(); - $idtoid[$pos[$i]['id']] = $newposid; - if(!empty($pos[$i]['explodiert_parent'])) - { - $pos[$i]['explodiert_parent'] = isset($idtoid[$pos[$i]['explodiert_parent']])?$idtoid[$pos[$i]['explodiert_parent']]:0; - } - $pos[$i]['auftrag']=$newid; - $this->app->DB->UpdateArr('auftrag_position',$newposid, 'id', $pos[$i], true); - if($pos[$i]['berechnen_aus_teile']) { - $berechnen_aus_teile[$newposid] = true; - } - if(is_null($pos[$i]['steuersatz'])) { - $this->app->DB->Update("UPDATE auftrag_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); - } - } - if(isset($berechnen_aus_teile)) - { - foreach($berechnen_aus_teile as $k => $v) - { - $this->app->DB->Update("UPDATE auftrag_position SET preis = 0 WHERE explodiert_parent = '$k' AND auftrag = '$newid'"); - } - } - - //wenn angebot explodiert war dann nicht - if($this->app->DB->Select("SELECT COUNT(id) FROM angebot_position WHERE angebot='$id' AND explodiert_parent > 0") >0 ) - $this->app->DB->Update("UPDATE auftrag_position ap INNER JOIN artikel art ON ap.artikel = art.id SET ap.explodiert = 1 WHERE art.juststueckliste = 1 AND ap.auftrag = '$newid'"); - - - $this->CheckFreifelder("auftrag",$newid); - $this->CopyBelegZwischenpositionen("angebot",$id,"auftrag",$newid); - - $belegnr = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$newid' LIMIT 1"); - $this->app->DB->Update("UPDATE angebot SET status='beauftragt', schreibschutz='1', auftrag='$belegnr',auftragid='$newid' WHERE id='$id' LIMIT 1"); - // wiedervorlagen als abgeschlossen - $this->app->DB->Update("UPDATE wiedervorlage SET abgeschlossen='1' WHERE module='angebot' AND parameter='$id' AND parameter > 0"); - if($this->useTaxFromSettings($arr[0]['projekt'])) { - $this->LoadSteuersaetze($newid, 'auftrag', $arr[0]['projekt']); - } - // auftrag freigeben!!! - $this->SchnellFreigabe("auftrag",$newid); - - $this->app->erp->RunHook('WeiterfuehrenAngebotZuAuftrag', 2, $id, $newid); - return $newid; - } - - function DeleteAngebot($id) - { - $belegnr = $this->app->DB->Select("SELECT belegnr FROM angebot WHERE id='$id' LIMIT 1"); - if($belegnr=="" || $belegnr=="0") - { - $this->app->DB->Delete("DELETE FROM angebot_position WHERE angebot='$id'"); - $this->app->DB->Delete("DELETE FROM angebot_protokoll WHERE angebot='$id'"); - $this->app->DB->Delete("DELETE FROM angebot WHERE id='$id' LIMIT 1"); - } - } - - - function PaketannahmenAbschliessen() - { - $arr = $this->app->DB->SelectArr("SELECT id FROM paketannahme WHERE status!='abgeschlossen'"); - for($i=0;$iapp->erp->LoadModul('verbindlichkeit'); - if(!empty($obj) && method_exists($obj,'createLiability')) { - return $obj->createLiability($adresse); - } - return 0; - } - - - function CreateBestellung($adresse="") - { - /** @var Bestellung $obj */ - $obj = $this->LoadModul('bestellung'); - if(!empty($obj) && method_exists($obj, 'CreateBestellung')) - { - return $obj->CreateBestellung($adresse); - } - } - - function AddBestellungPosition($bestellung, $einkauf,$menge,$datum, $beschreibung = '',$artikel="",$einheit="", $waehrung = '') - { - /** @var Bestellung $obj */ - $obj = $this->LoadModul('bestellung'); - if(!empty($obj) && method_exists($obj, 'AddBestellungPosition')) - { - return $obj->AddBestellungPosition($bestellung, $einkauf,$menge,$datum, $beschreibung,$artikel,$einheit, $waehrung); - } - } - - - function DeleteBestellung($id) - { - /** @var Bestellung $obj */ - $obj = $this->LoadModul('bestellung'); - if(!empty($obj) && method_exists($obj, 'DeleteBestellung')) - { - $obj->DeleteBestellung($id); - } - } - - - function CreateRechnung($adresse="") - { - /** @var Rechnung $obj */ - $obj = $this->LoadModul('rechnung'); - if(!empty($obj) && method_exists($obj,'CreateRechnung')){ - return $obj->CreateRechnung($adresse); - } - } - - - public function GetStandardWaehrung($projekt=0) - { - if(is_array($projekt) && isset($projekt['eigenesteuer']) && isset($projekt['waehrung'])) { - $projekt_arr = $projekt; - } - elseif($projekt > 0) { - $projekt_arr = $this->app->DB->SelectRow( - "SELECT eigenesteuer,waehrung FROM projekt WHERE id='$projekt' LIMIT 1" - ); - } - if(!empty($projekt_arr['eigenesteuer'])) - { - $waehrung = $projekt_arr['waehrung']; - } else { - $waehrung = $this->Firmendaten('waehrung'); - } - return $waehrung; - } - - public function GetStandardSteuersatzErmaessigt($projekt=0) - { - /** @var Steuersaetze $objSteuersaetze */ - $objSteuersaetze = $this->app->loadModule('steuersaetze', false); - if($objSteuersaetze !== null && method_exists($objSteuersaetze, 'checkTaxesToSet')) { - $objSteuersaetze->checkTaxesToSet(); - } - if(is_array($projekt) && isset($projekt['eigenesteuer']) && isset($projekt['steuersatz_ermaessigt'])) { - $projekt_arr = $projekt; - } - elseif($projekt > 0){ - $projekt_arr = $this->app->DB->SelectRow( - "SELECT eigenesteuer,steuersatz_ermaessigt FROM projekt WHERE id='$projekt' LIMIT 1" - ); - } - if(!empty($projekt_arr['eigenesteuer'])) - { - $steuersatz_ermaessigt = $projekt_arr['steuersatz_ermaessigt']; - } - else { - $steuersatz_ermaessigt = $this->Firmendaten('steuersatz_ermaessigt'); - } - return $steuersatz_ermaessigt; - } - - public function GetStandardSteuersatzNormal($projekt=0) - { - /** @var Steuersaetze $objSteuersaetze */ - $objSteuersaetze = $this->app->loadModule('steuersaetze', false); - if($objSteuersaetze !== null && method_exists($objSteuersaetze, 'checkTaxesToSet')) { - $objSteuersaetze->checkTaxesToSet(); - } - if(is_array($projekt) && isset($projekt['eigenesteuer']) && isset($projekt['steuersatz_normal'])) { - $projekt_arr = $projekt; - } - elseif($projekt > 0){ - $projekt_arr = $this->app->DB->SelectRow( - "SELECT eigenesteuer,steuersatz_normal FROM projekt WHERE id='$projekt' LIMIT 1" - ); - } - if(!empty($projekt_arr['eigenesteuer'])) - { - $steuersatz_normal = $projekt_arr['steuersatz_normal']; - } else { - $steuersatz_normal = $this->Firmendaten("steuersatz_normal"); - } - return $steuersatz_normal; - } - - function GetStandardSteuersatzBefreit($projekt=0) - { - return 0.00; - } - - public function LoadSteuersaetze($id,$typ,$projekt='') - { - if($id <= 0 || empty($typ)) { - return; - } - $this->app->erp->StartChangeLog($typ, $id); - /** @var Steuersaetze $objSteuersaetze */ - $objSteuersaetze = $this->app->loadModule('steuersaetze', false); - if($objSteuersaetze !== null && method_exists($objSteuersaetze, 'checkTaxesToSet')) { - $objSteuersaetze->checkTaxesToSet(); - } - - if(!(is_array($projekt) && !empty($projekt['id'])) && $projekt <=0) { - $projekt = $this->app->DB->Select("SELECT projekt FROM `$typ` WHERE id='$id' LIMIT 1"); - } - if(is_array($projekt) && isset($projekt['eigenesteuer']) - && isset($projekt['steuersatz_normal']) && isset($projekt['steuersatz_ermaessigt'])) { - $projekt_arr = $projekt; - } - elseif($projekt > 0) { - $projekt_arr = $this->app->DB->SelectRow( - "SELECT eigenesteuer,steuersatz_normal,steuersatz_ermaessigt FROM projekt WHERE id='$projekt' LIMIT 1" - ); - } - if(!empty($projekt_arr['eigenesteuer'])) { - $steuersatz_normal = $projekt_arr['steuersatz_normal']; - $steuersatz_ermaessigt = $projekt_arr['steuersatz_ermaessigt']; - } - else { - $steuersatz_normal = $this->Firmendaten('steuersatz_normal'); - $steuersatz_ermaessigt = $this->Firmendaten('steuersatz_ermaessigt'); - } - - $this->app->DB->Update("UPDATE $typ SET steuersatz_normal='$steuersatz_normal',steuersatz_ermaessigt='$steuersatz_ermaessigt' WHERE id='$id' LIMIT 1"); - $this->app->erp->WriteChangeLog(); - } - - - function formatMoney($value,$currency,$decimals=2) - { - // Schweizer Franken - $decSeparator = ','; - $thouSeparator = '.'; - - if ($currency === 'CHF') { - $decSeparator = '.'; - $thouSeparator = '\''; - } - - return number_format((float)$value, $decimals, $decSeparator, $thouSeparator); - } - - - - function LoadKurs($id,$typ,$projekt="",$force=false) - { - if($id <= 0 || empty($typ) || $typ === 'bestellung') - { - return; - } - $kurs = 0; - // wenn GS und Kurs aus RE denn nicht neuladen - if($typ==='gutschrift' && $this->app->erp->Firmendaten('gutschriftkursvonrechnung')) - { - $rechnungid = $this->app->DB->Select("SELECT rechnungid FROM gutschrift WHERE id='$id'"); - if($rechnungid > 0) - { - $kurs = $this->app->DB->Select("SELECT kurs FROM rechnung WHERE id='$rechnungid'"); - } - } - - // nur ziehen wenn in den Firmendaten aktiviert - if($this->Firmendaten("loadcurrencyrate")) - { - $waehrung=$this->app->DB->Select("SELECT waehrung FROM $typ WHERE id='$id'"); - $kurs = $this->GetWaehrungUmrechnungskurs($this->Firmendaten('waehrung'),$waehrung); - } - if($kurs<>0) - { - $this->app->DB->Update("UPDATE $typ SET kurs='$kurs' WHERE id='$id' LIMIT 1"); - } - } - - - - public function LoadSteuersaetzeWaehrung($id,$typ,$projekt='') - { - if($id <=0 || empty($typ)) - { - return; - } - $this->LoadSteuersaetze($id,$typ,$projekt); - - $waehrung = $this->GetStandardWaehrung($projekt); - - $this->app->DB->Update("UPDATE $typ SET waehrung='$waehrung' WHERE id='$id' AND waehrung='' LIMIT 1"); // AND waehrung='' - if($typ === 'proformarechnung') { - return; - } - $this->LoadKurs($id,$typ,$projekt); - } - - - function CreateGutschrift($adresse="") - { - $projekt = $this->GetCreateProjekt($adresse); - - $belegmax = ''; - $ohnebriefpapier = $this->Firmendaten('gutschrift_ohnebriefpapier'); - $stornorechnung = (int)$this->Firmendaten('stornorechnung_standard'); - if($stornorechnung !== 0 && $stornorechnung !== 1) { - $stornorechnung = 1; - $this->FirmendatenSet('stornorechnung_standard', '1'); - } - - if($this->StandardZahlungsweise($projekt)=="rechnung") - { - $this->app->DB->Insert("INSERT INTO gutschrift (id,datum,bearbeiter,firma,belegnr,zahlungsweise,zahlungszieltage,status,projekt,adresse,ohne_briefpapier,stornorechnung) - VALUES ('',NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','".$this->StandardZahlungsweise($projekt)."','".$this->ZahlungsZielTage($projekt)."','angelegt','$projekt','$adresse','".$ohnebriefpapier."','$stornorechnung')"); - } else { - $this->app->DB->Insert("INSERT INTO gutschrift (id,datum,bearbeiter,firma,belegnr,zahlungsweise,zahlungszieltage,status,projekt,adresse,ohne_briefpapier,stornorechnung) - VALUES ('',NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','".$this->StandardZahlungsweise($projekt)."','0','angelegt','$projekt','$adresse','".$ohnebriefpapier."','$stornorechnung')"); - } - $id = $this->app->DB->GetInsertID(); - $this->CheckVertrieb($id,"gutschrift"); - $this->CheckBearbeiter($id,"gutschrift"); - - $this->app->erp->GutschriftProtokoll($id,"Gutschrift angelegt"); - - $type="gutschrift"; - $this->app->erp->ObjektProtokoll($type,$id,$type."_create",ucfirst($type)." angelegt"); - $deliverythresholdvatid = $this->getDeliverythresholdvatid($projekt); - if($id > 0 && !empty($deliverythresholdvatid)){ - $deliverythresholdvatid = $this->app->DB->real_escape_string($deliverythresholdvatid); - $this->app->DB->Update("UPDATE gutschrift SET deliverythresholdvatid = '$deliverythresholdvatid' WHERE id = $id LIMIT 1"); - } - $this->SchnellFreigabe("gutschrift",$id); - - - $this->LoadSteuersaetzeWaehrung($id,"gutschrift"); - $this->EventAPIAdd("EventGutschriftCreate",$id,"gutschrift","create"); - return $id; - } - - - function AddGutschritPosition($gutschrift, $verkauf,$menge,$datum) - { - $artikel = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $bezeichnunglieferant = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1"); - $bestellnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); - $preis = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $projekt = $this->app->DB->Select("SELECT projekt FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $waehrung = $this->app->DB->Select("SELECT waehrung FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikel' LIMIT 1"); - $vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $sort = $this->app->DB->Select("SELECT MAX(sort) FROM gutschrift_position WHERE rechnung='$gutschrift' LIMIT 1"); - $sort = $sort + 1; - $this->app->DB->Insert("INSERT INTO gutschrift_position (id,gutschrift,artikel,bezeichnung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe) - VALUES ('','$gutschrift','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe')"); - } - - - function AddAuftragPositionManuell($auftrag, $artikel,$preis, $menge,$bezeichnung,$beschreibung="",$waehrung='EUR',$rabatt=0) - { - $bezeichnunglieferant = $bezeichnung; - $artArr = $this->app->DB->SelectRow( - sprintf( - 'SELECT nummer,projekt,umsatzsteuer,mlmpunkte,mlmbonuspunkte,mlmdirektpraemie FROM artikel WHERE id =%d', - $artikel - ) - ); - $bestellnummer = !empty($artArr)?$artArr['nummer']:$this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); - $projekt = !empty($artArr)?$artArr['projekt']:$this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$artikel' LIMIT 1"); - - if($waehrung!=''){ - $this->app->DB->Update("UPDATE auftrag SET waehrung='$waehrung' WHERE id='$auftrag' AND waehrung='' LIMIT 1"); - } - - $umsatzsteuer = !empty($artArr)?$artArr['umsatzsteuer']:$this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikel' LIMIT 1"); - - $mlmpunkte = !empty($artArr)?$artArr['mlmpunkte']:$this->app->DB->Select("SELECT mlmpunkte FROM artikel WHERE id='$artikel' LIMIT 1"); - $mlmbonuspunkte = !empty($artArr)?$artArr['mlmbonuspunkte']:$this->app->DB->Select("SELECT mlmbonuspunkte FROM artikel WHERE id='$artikel' LIMIT 1"); - $mlmdirektpraemie = !empty($artArr)?$artArr['mlmdirektpraemie']:$this->app->DB->Select("SELECT mlmdirektpraemie FROM artikel WHERE id='$artikel' LIMIT 1"); - - $keinrabatterlaubt=0; - if($rabatt <> 0) { - $keinrabatterlaubt=1; - } - - - //$vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); - $sort = (int)$this->app->DB->Select("SELECT MAX(sort) FROM auftrag_position WHERE auftrag='$auftrag' LIMIT 1"); - $sort++; - $this->app->DB->Insert("INSERT INTO auftrag_position (auftrag,artikel,bezeichnung,nummer,menge,preis, waehrung, sort, umsatzsteuer, status,projekt,vpe,beschreibung,punkte,bonuspunkte,mlmdirektpraemie,rabatt,keinrabatterlaubt) - VALUES ('$auftrag','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$umsatzsteuer','angelegt','$projekt','$vpe','$beschreibung','$mlmpunkte','$mlmbonuspunkte','$mlmdirektpraemie','$rabatt','$keinrabatterlaubt')"); - return $this->app->DB->GetInsertID(); - } - - - function AddRechnungPositionManuell($rechnung, $artikel,$preis, $menge,$bezeichnung,$beschreibung="",$waehrung='EUR',$rabatt=0) - { - $obj = $this->LoadModul('rechnung'); - if(!empty($obj) && method_exists($obj,'AddRechnungPositionManuell')){ - return $obj->AddRechnungPositionManuell($rechnung, $artikel,$preis, $menge,$bezeichnung,$beschreibung,$waehrung,$rabatt); - } - } - - function AddRechnungPosition($rechnung, $verkauf,$menge,$datum) - { - $obj = $this->LoadModul('rechnung'); - if(!empty($obj) && method_exists($obj,'AddRechnungPosition')){ - $obj->AddRechnungPosition($rechnung, $verkauf,$menge,$datum); - } - } - - // Produktion und Auftrag reservieren - function AuftragReservieren($id,$typ="auftrag") - { - $standardlager = 0; - $projektlager = 0; - if($typ==='auftrag' && $id > 0){ - $auftragsArr = $this->app->DB->SelectRow( - sprintf( - "SELECT id, adresse, projekt, belegnr, standardlager,reservationdate FROM auftrag WHERE status='freigegeben' AND id=%d LIMIT 1", - (int)$id - ) - ); - if($this->app->DB->error()) { - $auftragsArr = $this->app->DB->SelectRow( - sprintf( - "SELECT id, adresse, projekt, belegnr, standardlager, NULL AS reservationdate FROM auftrag WHERE status='freigegeben' AND id=%d LIMIT 1", - (int)$id - ) - ); - } - if(empty($auftragsArr)) { - return 0; - } - if(!empty($auftragsArr['reservationdate']) && $auftragsArr['reservationdate'] !== '0000-00-00' - && strtotime($auftragsArr['reservationdate']) > strtotime(date('Y-m-d'))) { - return 0; - } - $id_check = $auftragsArr['id']; - $adresse = $auftragsArr['adresse']; - $projekt = $auftragsArr['projekt']; - if($projekt) { - $projektlager = $this->app->DB->Select( - sprintf( - 'SELECT id FROM projekt WHERE id = %d AND projektlager = 1', - $projekt - ) - ); - } - $belegnr= $auftragsArr['belegnr']; - $standardlager = $auftragsArr['standardlager']; - } - if($typ==='produktion'){ - } - - // nicht reservieren wenn auftrag nicht offen ist - if($id_check!=$id){ - return 0; - } - - - if($typ==='auftrag') - { - $artikelarr= $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE auftrag='$id' AND geliefert!=1"); - $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE parameter='$id' AND objekt='auftrag'"); - - } - - - //schaue artikel fuer artikel an wieviel geliefert wurde und ob bereits reservierungen vorliegen, wenn welche vorliegen auch reservieren auf 9999-01-01 - // Lager Check - $cArtikelarr = !empty($artikelarr)?count($artikelarr):0; - for($k=0;$k<$cArtikelarr; $k++) - { - if(isset($artikelarr[$k]['gelieferte_menge'])){ - $menge = $artikelarr[$k]['menge'] - $artikelarr[$k]['gelieferte_menge']; - } - else{ - $menge = $artikelarr[$k]['menge']; - } - - $artikel = $artikelarr[$k]['artikel']; - // pruefe artikel 12 menge 4 - $articleArr = $this->app->DB->SelectRow( - sprintf( - "SELECT lagerartikel,stueckliste FROM artikel WHERE id=%d LIMIT 1",$artikel - ) - ); - $lagerartikel = $articleArr['lagerartikel']; - $stueckliste = $articleArr['stueckliste']; - if($lagerartikel>=1) - { - // menge = notwendige menge - bereits reserviert - $zu_reservieren = $menge;// - $anzahl_reserviert; - - if($zu_reservieren>0) - { - if($typ==='auftrag'){ - - //if($this->LagerFreieMenge($artikel) < $zu_reservieren) continue; - $lagerfreiemenge = $this->LagerFreieMenge($artikel, true, $standardlager, $projektlager); - if($lagerfreiemenge <=0) { - continue; - } - - // die restliche menge auf den Auftrag reservieren - if($lagerfreiemenge < $zu_reservieren){ - $zu_reservieren = $lagerfreiemenge; - } - - // schaue ob es artikel in reserivierungen fuer diesen auftrag schon gibt dann erhoehe -// $check = $this->app->DB->Select("SELECT menge FROM lager_reserviert WHERE artikel='$artikel' -// AND objekt='auftrag' AND parameter='$id' LIMIT 1"); - $check=0; - - if($check > 0) - { - // wenn schon etwas reserviert ist - $this->app->DB->Update("UPDATE lager_reserviert SET menge = menge + '$zu_reservieren' WHERE - artikel='$artikel' - AND objekt='auftrag' AND parameter='$id'"); - } else { - $this->app->DB->Insert("INSERT INTO lager_reserviert - (id,adresse,artikel,menge,grund,projekt,firma,bearbeiter,datum,objekt,parameter,posid) - VALUES('','$adresse','$artikel','$zu_reservieren','Reservierung für Auftrag $belegnr','$projekt', - '".$this->app->User->GetFirma()."','".$this->app->User->GetName()."','9999-99-99','auftrag','$id','".$artikelarr[$k]['id']."')"); - } - - } - } - } - } - } - - function AnzeigePositionenBrutto($anrede, $doctyp, $projekt, $adresse,$doctypeid=0) - { - // wenn im beleg 3 oder 4 dann zaehlt die einstellung - if($doctypeid > 0 && in_array($doctyp, ['rechnung', 'angebot','auftrag','gutschrift','bestellung'])) { - $anzeigesteuer = $this->app->DB->Select("SELECT anzeigesteuer FROM `$doctyp` WHERE id='$doctypeid' LIMIT 1"); - if($anzeigesteuer==3) { - return false; - } - if($anzeigesteuer==4) { - return true; - } - } - if($adresse) - { - $bruttonetto = $this->app->DB->Select("SELECT anzeigesteuerbelege FROM adresse WHERE id = '$adresse' LIMIT 1"); - if($bruttonetto == 1) { - return false; - } - if($bruttonetto == 2) { - return true; - } - } - if($projekt){ - $bruttonetto = $this->app->DB->Select("SELECT anzeigesteuerbelege FROM projekt WHERE id = '$projekt' LIMIT 1"); - if($bruttonetto == 1) { - return false; - } - if($bruttonetto == 2) { - return true; - } - } - if($this->app->erp->Firmendaten('immerbruttorechnungen',$projekt)) { - return true; - } - return false; - } - - function AnzeigeBelegNettoAdresse($anrede, $doctyp, $projekt, $adresse,$doctypeid=0) - { - // wenn im beleg 3 oder 4 dann zaehlt die einstellung - if($doctypeid > 0 && ($doctyp==='rechnung' || $doctyp==='angebot' || $doctyp==='auftrag' || $doctyp==='gutschrift' || $doctyp==='bestellung')) { - $anzeigesteuer = $this->app->DB->Select("SELECT anzeigesteuer FROM $doctyp WHERE id='$doctypeid' LIMIT 1"); - if($anzeigesteuer==3) { - return true; - } - if($anzeigesteuer==4) { - return false; - } - } - - if($adresse) { - $bruttonetto = $this->app->DB->Select("SELECT anzeigesteuerbelege FROM adresse WHERE id = '$adresse' LIMIT 1"); - if($bruttonetto == 1) { - return 1; - } - if($bruttonetto == 2) { - return 0; - } - } - - if($doctyp==='bestellung' && $this->app->erp->Firmendaten('immerbruttorechnungen',$projekt)!='1' && - $this->Projektdaten($projekt,'anzeigesteuerbelegebestellung') != '1') { - return 1; - } - if($projekt) { - $bruttonetto = $this->Projektdaten($projekt, 'anzeigesteuerbelege');// $this->app->DB->Select("SELECT anzeigesteuerbelege FROM projekt WHERE id = '$projekt' LIMIT 1"); - if($bruttonetto == 1) { - return 1; - } - if($bruttonetto == 2) { - return 0; - } - } - - if($doctyp==='bestellung' && $this->app->erp->Firmendaten('immerbruttorechnungen',$projekt)!='1') { - return 1; - } - - if($this->app->erp->Firmendaten('immerbruttorechnungen',$projekt)!='1' && - ($anrede==='firma' || $doctyp==='bestellung' || $this->app->erp->AnzeigeBelegNetto($anrede,$projekt,$doctyp,$doctypeid) || - $this->app->erp->Firmendaten('immernettorechnungen',$projekt)=='1')) { - return 1; - } - return 0; - } - - - function AnzeigeBelegNetto($typ,$projekt,$doctype="",$doctypeid=0) - { - // wenn im beleg 3 oder 4 dann zaehlt die einstellung - if($doctypeid > 0 && ($doctype==='rechnung' || $doctype==='angebot' || $doctype==='auftrag' || $doctype=='gutschrift' || $doctype=='bestellung')) - { - $anzeigesteuer = $this->app->DB->Select("SELECT anzeigesteuer FROM $doctype WHERE id='$doctypeid' LIMIT 1"); - if($anzeigesteuer==3) { - return 1; - } - } - $orderBy = ''; - if($projekt > 0) { - $orderBy = sprintf(' ORDER BY %d DESC ', (int)$projekt); - } - return (int)$this->app->DB->Select( - sprintf( - 'SELECT netto FROM adresse_typ WHERE type=\'%s\' %s LIMIT 1', - $typ, $orderBy - ) - ); - } - - function AuftragNeuberechnenAllen() - { - $arrAuftrag = $this->app->DB->SelectArr("SELECT id FROM auftrag WHERE status!='abgeschlossen' AND status!='storniert' AND autoversand=1 ORDER BY fastlane = 1 DESC, datum"); - if(empty($arrAuftrag)) { - return; - } - foreach($arrAuftrag as $rowAuftrag) - { - $this->AuftragNeuberechnen($rowAuftrag['id']); - } - } - - function BestellungNeuberechnen($id) - { - $obj = $this->LoadModul('bestellung'); - if(!empty($obj) && method_exists($obj, 'BestellungNeuberechnen')) - { - $obj->BestellungNeuberechnen($id); - } - } - - function LieferscheinNeuberechnen($id) - { - - } - - function AngebotNeuberechnen($id) - { - $this->ANABREGSNeuberechnen($id,"angebot"); - } - - - - function AuftragZahlungaufteilen($auftrag_org,$auftrag_new) - { - $gesamtsumme_new = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftrag_new' LIMIT 1"); - $adresse_new = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$auftrag_new' LIMIT 1"); - - //pruefe ob es auf auftrag einen Zahlungseingang gibt - $zahlungen = $this->app->DB->SelectArr("SELECT * FROM kontoauszuege_zahlungseingang WHERE objekt='auftrag' AND parameter='$auftrag_org'"); - for($i=0;$i $gesamtsumme_new) - { - $betrag_new = $zahlungen[$i]['betrag'] - $gesamtsumme_new; - $this->app->DB->Update("UPDATE kontoauszuege_zahlungseingang SET betrag='$betrag_new' WHERE id='".$zahlungen[$i]['id']."' LIMIT 1"); - - $this->app->DB->Insert("INSERT INTO kontoauszuege_zahlungseingang (id,adresse,bearbeiter,betrag,datum,objekt,parameter,kontoauszuege,firma,abgeschlossen,parameter2) - VALUES ('','".$adresse_new."','".$zahlungen[$i]['bearbeiter']."','".$gesamtsumme_new."','".$zahlungen[$i]['datum']."','auftrag','".$auftrag_new."','".$zahlungen[$i]['kontoauszuege']."','".$zahlungen[$i]['firma']."','".$zahlungen[$i]['abgeschlossen']."','".$zahlungen[$i]['parameter2']."')"); - break; - } - } - return; - } - - - function AuftragNeuberechnen($id,$force=false) - { - $this->ANABREGSNeuberechnen($id,"auftrag",$force); - } - - - - function GutschriftNeuberechnen($id) - { - $this->ANABREGSNeuberechnen($id,"gutschrift"); - - // alle zugehoerigen Rechnungen - $rechnungid = $this->app->DB->Select("SELECT rechnungid FROM gutschrift WHERE id='$id' LIMIT 1"); - if($rechnungid > 0 && $this->Firmendaten("mahnwesenmitkontoabgleich")=="1") - { - $this->app->DB->Update("UPDATE rechnung SET ist=0, zahlungsstatus='offen' WHERE id='$rechnungid' AND mahnwesenfestsetzen!=1 LIMIT 1"); - $this->RechnungNeuberechnen($rechnungid); - } - } - - - function DeleteGutschrift($id) - { - $belegnr = $this->app->DB->Select("SELECT belegnr FROM gutschrift WHERE id='$id' LIMIT 1"); - if($belegnr==="" || $belegnr==="0") - { - $this->app->DB->Delete("DELETE FROM gutschrift_position WHERE gutschrift='$id'"); - $this->app->DB->Delete("DELETE FROM gutschrift_protokoll WHERE gutschrift='$id'"); - $this->app->DB->Delete("DELETE FROM gutschrift WHERE id='$id' LIMIT 1"); - } - } - - function Skontofaehig($id, $art, $mitsteuer=true) - { - $name = ucfirst($art).'MitUmsatzeuer'; - if(!method_exists($this->app->erp, $name)) - { - return; - } - $skontofaehig = 0; - $positionen = $this->app->DB->SelectArr("SELECT ap.*,art.keinskonto as artkeinskonto FROM $art"."_position ap INNER JOIN artikel art ON ap.artikel = art.id WHERE $art = '$id' ".($art == 'angebot'?" AND ifnull(ap.optional,0) = 0 ":'')); - $steuerfrei = !$this->$name($id); - - $steuersatzermaessigt = $this->GetSteuersatzErmaessigt(true,$id,$art); - $steuersatznormal = $this->GetSteuersatzNormal(true,$id,$art); - $zahlungszielskonto = $this->app->DB->Select("SELECT zahlungszielskonto FROM $art WHERE id = '$id' LIMIT 1"); - - foreach($positionen as $k => $v) - { - if($v['artkeinskonto'] == 1 && $v['skontobetrag'] !== 0) - { - - }else{ - $steuersatz = 1; - if(!$steuerfrei) - { - if(!is_null($v['steuersatz']) && $v['steuersatz'] >= 0) - { - $steuersatz = 1+ $v['steuersatz']; - }else{ - if($v['umsatzsteuer'] == 'befreit') - { - - }elseif($v['umsatzsteuer'] == 'ermaessigt') - { - $steuersatz = $steuersatzermaessigt; - }else{ - $steuersatz = $steuersatznormal; - } - } - $rabatt = 0; - if(!$v['keinrabatterlaubt'])$rabatt = (float)$v['rabatt']; - } - if($mitsteuer) - $skontofaehig += $v['menge'] * $v['preis']* (1-$rabatt/100) * $steuersatz; - else - $skontofaehig += $v['menge'] * $v['preis']* (1-$rabatt/100); - } - } - return $skontofaehig; - } - - function BerechneSkonto($id, $art, $force = false) - { - if( ($art == '') || ($id <= 0) ){ - return; - } - if($art === 'proformarechnung') { - return; - } - if(!$force - && $this->app->DB->Select( - sprintf( - 'SELECT schreibschutz FROM `%s` WHERE id = %d LIMIT 1', - $art, $id - ) - ) - ) { - return; - } - $name = ucfirst($art).'MitUmsatzeuer'; - if(!method_exists($this->app->erp, $name)) { - return; - } - $positionen = $this->app->DB->SelectArr( - "SELECT ap.*,art.keinskonto as artkeinskonto, art.umsatzsteuer as artumsatzsteuer - FROM $art"."_position ap - INNER JOIN artikel art ON ap.artikel = art.id - WHERE $art = '$id' ".($art == 'angebot'?" AND ifnull(ap.optional,0) = 0 ":'')); - if(empty($positionen)){ - $this->app->DB->Update("UPDATE $art SET skontobetrag = 0 WHERE id = '$id' LIMIT 1"); - return; - } - $steuerfrei = !$this->$name($id); - $skontobetrag = 0; - $docArr = $this->app->DB->SelectRow(sprintf('SELECT * FROM `%s` WHERE id = %d', $art, $id)); - if(!empty($docArr)){ - $steuersatzermaessigt = 1 + $docArr['steuersatz_ermaessigt'] / 100; - $steuersatznormal = 1 + $docArr['steuersatz_normal'] / 100; - $zahlungszielskonto = $docArr['zahlungszielskonto']; - } - else{ - $steuersatzermaessigt = $this->GetSteuersatzErmaessigt(true, $id, $art); - $steuersatznormal = $this->GetSteuersatzNormal(true, $id, $art); - $zahlungszielskonto = $this->app->DB->Select("SELECT zahlungszielskonto FROM $art WHERE id = '$id' LIMIT 1"); - } - foreach($positionen as $k => $v) { - if($v['artkeinskonto'] == 1 && $v['skontobetrag'] !== 0) { - $skontobetragpos = 0; - if(!$v['skontosperre']) { - $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag = 0 WHERE id = '".$v['id']."' LIMIT 1"); - $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_netto_einzeln = 0 WHERE id = '".$v['id']."' LIMIT 1"); - $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_netto_gesamt = 0 WHERE id = '".$v['id']."' LIMIT 1"); - $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_brutto_einzeln = 0 WHERE id = '".$v['id']."' LIMIT 1"); - $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_brutto_einzeln = 0 WHERE id = '".$v['id']."' LIMIT 1"); - } - else { - $skontobetragpos = $v['skontobetrag']; - } - $skontobetrag += $skontobetragpos; - } - else{ - $steuersatz = 1; - if(!$steuerfrei) - { - if(!is_null($v['steuersatz']) && $v['steuersatz'] >= 0) - { - $steuersatz = 1+ $v['steuersatz']/100; - }else{ - if($v['umsatzsteuer'] == '') - { - $v['umsatzsteuer'] = $v['artumsatzsteuer']; - - } - if($v['umsatzsteuer'] === 'befreit') - { - - }elseif($v['umsatzsteuer'] === 'ermaessigt') - { - $steuersatz = $steuersatzermaessigt; - }else{ - $steuersatz = $steuersatznormal; - } - } - } - $rabatt = 0; - if(!empty($v['rabatt'])) { - $rabatt = (float)$v['rabatt']; - } - $skontobetragpos = $v['menge'] * $v['preis']* (1-$rabatt/100) * $steuersatz * $zahlungszielskonto / 100; - $skontobetragNettoEinzeln = $v['preis'] * (1-$rabatt/100) * $zahlungszielskonto / 100; - $skontobetragBruttoEinzeln = $v['preis'] * (1-$rabatt/100) * $steuersatz * $zahlungszielskonto / 100; - $skontobetragNettoGesamt = $v['menge'] * $v['preis'] * (1-$rabatt/100) * $zahlungszielskonto / 100; - - if(empty($v['skontosperre'])) { - $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag = '$skontobetragpos' WHERE id = '".$v['id']."' LIMIT 1"); - $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_brutto_gesamt = '$skontobetragpos' WHERE id = '".$v['id']."' LIMIT 1"); - $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_netto_gesamt = '$skontobetragNettoGesamt' WHERE id = '".$v['id']."' LIMIT 1"); - $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_brutto_einzeln = '$skontobetragBruttoEinzeln' WHERE id = '".$v['id']."' LIMIT 1"); - $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_netto_einzeln = '$skontobetragNettoEinzeln' WHERE id = '".$v['id']."' LIMIT 1"); - } - else { - $skontobetragpos = $v['skontobetrag']; - } - $skontobetrag += $skontobetragpos; - } - } - $this->app->DB->Update("UPDATE $art SET skontobetrag = '$skontobetrag' WHERE id = '$id' LIMIT 1"); - if(!empty($positionen) && (empty($docArr) || empty($docArr['skontoberechnet']))) { - $this->app->DB->Update("UPDATE $art SET skontoberechnet = '1' WHERE id = '$id' LIMIT 1"); - } - } - - public function ANABREGSNeuberechnen($id,$art,$force=false) - { - if($id <= 0 || empty($art)) - { - return; - } - - //$this->LoadSteuersaetze($id,$art); //03.01.2019 Bruno entfernt, da Shopaufträge umsgestellt werden - //$this->LoadKurs($id,$art); //03.01.2019 Bruno entfernt - $belegarr = $this->app->DB->SelectRow("SELECT * FROM $art WHERE id='$id' LIMIT 1"); - if(empty($belegarr)) - { - return; - } - - $belegnr = $belegarr['belegnr']; - $adresse = $belegarr['adresse']; - $status = $belegarr['status']; - $waehrung = $belegarr['waehrung']; - $rabatteportofestschreiben = 0; - - if($art === 'auftrag' && $belegarr['lieferantkdrnummer'] == '') { - if($belegarr['lieferantenauftrag'] == 1){ - if($belegarr['lieferantenauftrag'] != 1 || empty($belegarr['lieferantkdrnummer'])){ - $this->app->DB->Update(" - UPDATE auftrag a - INNER JOIN adresse adr ON a.lieferant = adr.id - SET a.lieferantkdrnummer = if(a.lieferantennummer <> '',a.lieferantennummer,adr.lieferantennummer) - WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 1 AND a.id = '$id' - "); - } - } - else{ - if($belegarr['lieferantenauftrag'] != 0 || empty($belegarr['lieferantkdrnummer'])){ - $this->app->DB->Update(" - UPDATE auftrag a - INNER JOIN adresse adr ON a.adresse = adr.id - SET a.lieferantkdrnummer = if(a.kundennummer <> '',a.kundennummer, adr.kundennummer) - WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 0 AND a.id = '$id' - "); - } - } - } - - $schreibschutz = $belegarr['schreibschutz']; - if($force!=true && $schreibschutz=='1'){ - return; - } - //waehrungen - - if($waehrung!='') { - $this->app->DB->Update("UPDATE ".$art."_position SET waehrung='$waehrung' WHERE $art='".$id."' AND waehrung=''"); - } - - if($art==='auftrag') - { - // abweichende lieferadresse name loeschen wenn es keine gibt - $abweichendelieferadresse = $belegarr['abweichendelieferadresse']; - $rabatteportofestschreiben = $belegarr['rabatteportofestschreiben']; - $liefername = $belegarr['liefername']; - if($liefername=='' && $abweichendelieferadresse=='1'){ - $this->app->DB->Update("UPDATE auftrag SET abweichendelieferadresse=0 WHERE id='$id' LIMIT 1"); - } - } - - $this->RunHook('ANABREGSNeuberechnen_1', 2, $art, $id); - - $this->CheckFreifelder($art,$id); - - $artikelarr = $this->app->DB->SelectArr( - sprintf( - 'SELECT pos.*, - art.keinrabatterlaubt as art_keinrabatterlaubt, art.porto AS art_porto, art.rabatt AS art_rabatt, - art.rabatt_prozent AS art_rabatt_prozent - FROM `%s` AS pos - LEFT JOIN artikel AS art ON pos.artikel = art.id - WHERE pos.`%s`= %d - ORDER BY pos.sort', - $art.'_position', $art, (int)$id - ) - ); - $adresse = $belegarr['adresse']; - $cartikelarr = $artikelarr?count($artikelarr):0; - - if($art!=='bestellung')//$this->Firmendaten("modul_verband")=="1") //CLAUDI - { - $grundrabatt = 0; - $rabatt1 = 0; - $rabatt2 = 0; - $rabatt3 = 0; - $rabatt4 = 0; - $rabatt5 = 0; - if($art==='angebot' || $art==='auftrag' || $art==='rechnung' || $art==='gutschrift' || $art==='proformarechnung') - { - $rabattarr = $this->app->DB->SelectRow("SELECT * FROM $art WHERE id='$id' LIMIT 1"); - if(!empty($rabattarr)){ - $grundrabatt = $rabattarr['rabatt']; - $rabatt1 = $rabattarr['rabatt1']; - $rabatt2 = $rabattarr['rabatt2']; - $rabatt3 = $rabattarr['rabatt3']; - $rabatt4 = $rabattarr['rabatt4']; - $rabatt5 = $rabattarr['rabatt5']; - } - - if($grundrabatt>0) $rabattarr[] = ((100-$grundrabatt)/100.0); - if($rabatt1>0) $rabattarr[] = ((100-$rabatt1)/100.0); - if($rabatt2>0) $rabattarr[] = ((100-$rabatt2)/100.0); - if($rabatt3>0) $rabattarr[] = ((100-$rabatt3)/100.0); - if($rabatt4>0) $rabattarr[] = ((100-$rabatt4)/100.0); - if($rabatt5>0) $rabattarr[]= ((100-$rabatt5)/100.0); - - $rabatt=1; - if(!empty($rabattarr)) - { - foreach($rabattarr as $rabattRow) { - if($rabattRow > 0 && $rabattRow < 1) { - $rabatt *= $rabattRow; - } - } - } - - $rabatt=(1-$rabatt)*100; - - if($grundrabatt >= 100 || $rabatt1 >= 100 || $rabatt2 >= 100 || $rabatt3 >= 100 || $rabatt4 >= 100 || $rabatt5 >= 100) - { - $rabatt = 100; - } - - if($rabatt > 0 && $rabattarr['realrabatt'] != $rabatt) { - $this->app->DB->Update( - sprintf( - 'UPDATE `%s` SET realrabatt=%f WHERE id=%d LIMIT 1', - $art,(float)$rabatt, (int)$id - ) - ); - } - } - - - // Rabatt Sync starten - - $cartikelarr = $artikelarr?count($artikelarr):0; - for($i=0;$i<$cartikelarr;$i++) - { - // kopiere rabatte zum ersten mal - if($artikelarr[$i]['rabattsync']!='1') - { - // pruefe ob artikel rabatt bekommen darf - $check_keinrabatterlaubt = $artikelarr[$i]['art_keinrabatterlaubt']; - $check_porto = $artikelarr[$i]['art_porto']; - $check_rabatt = $artikelarr[$i]['art_rabatt']; - - if($check_keinrabatterlaubt!="1" && $check_porto!="1" && $check_rabatt!="1") - { - - $this->app->DB->Update("UPDATE ".$art."_position SET rabattsync='1', - grundrabatt='$grundrabatt', rabatt1='$rabatt1', rabatt2='$rabatt2', rabatt3='$rabatt3', rabatt4='$rabatt4', rabatt5='$rabatt5', - keinrabatterlaubt='0' WHERE id='".$artikelarr[$i]['id']."' AND rabatt=0 AND keinrabatterlaubt!='1' LIMIT 1"); - - - if($this->app->DB->affected_rows() > 0){ - $artikelarr[$i]['rabattsync'] = 1; - $artikelarr[$i]['grundrabatt'] = $grundrabatt; - $artikelarr[$i]['rabatt1'] = $rabatt1; - $artikelarr[$i]['rabatt2'] = $rabatt2; - $artikelarr[$i]['rabatt3'] = $rabatt3; - $artikelarr[$i]['rabatt4'] = $rabatt4; - $artikelarr[$i]['rabatt5'] = $rabatt5; - } - } else { - if($check_porto=="1") - { - $this->app->DB->Update("UPDATE ".$art."_position SET rabattsync='1',keinrabatterlaubt='".($rabatteportofestschreiben?'1':'0')."',rabatt='0' WHERE id='".$artikelarr[$i]['id']."' LIMIT 1"); - $artikelarr[$i]['keinrabatterlaubt'] = $rabatteportofestschreiben?'1':'0'; - $artikelarr[$i]['rabattsync'] = 1; - $artikelarr[$i]['rabatt'] = 0; - } - elseif($check_keinrabatterlaubt=="1") - { - $this->app->DB->Update("UPDATE ".$art."_position SET rabattsync='1',keinrabatterlaubt='1',rabatt='0' WHERE id='".$artikelarr[$i]['id']."' LIMIT 1"); - $artikelarr[$i]['keinrabatterlaubt'] = 1; - $artikelarr[$i]['rabattsync'] = 1; - $artikelarr[$i]['rabatt'] = 0; - } - } - } - $keinrabatterlaubt_sub = $artikelarr[$i]['keinrabatterlaubt']; - if($keinrabatterlaubt_sub=='1') { - $rabatt=0; - }else{ - // rechne rabatt fuer position aus - $posarr = $artikelarr[$i]; - if(!empty($posarr)){ - $grundrabatt_sub = $posarr['grundrabatt']; - $rabatt1_sub = $posarr['rabatt1']; - $rabatt2_sub = $posarr['rabatt2']; - $rabatt3_sub = $posarr['rabatt3']; - $rabatt4_sub = $posarr['rabatt4']; - $rabatt5_sub = $posarr['rabatt5']; - $keinrabatterlaubt_sub = $posarr['keinrabatterlaubt']; - }else{ - $grundrabatt_sub = 0; - $rabatt1_sub = 0; - $rabatt2_sub = 0; - $rabatt3_sub = 0; - $rabatt4_sub = 0; - $rabatt5_sub = 0; - $keinrabatterlaubt_sub = 0; - } - $rabattarr = array(); - - if($grundrabatt_sub>0) $rabattarr[] = ((100-$grundrabatt_sub)/100.0); - if($rabatt1_sub>0) $rabattarr[] = ((100-$rabatt1_sub)/100.0); - if($rabatt2_sub>0) $rabattarr[] = ((100-$rabatt2_sub)/100.0); - if($rabatt3_sub>0) $rabattarr[] = ((100-$rabatt3_sub)/100.0); - if($rabatt4_sub>0) $rabattarr[] = ((100-$rabatt4_sub)/100.0); - if($rabatt5_sub>0) $rabattarr[]= ((100-$rabatt5_sub)/100.0); - - $rabatt=1; - if(!empty($rabattarr)) { - foreach($rabattarr as $rabattRow) - { - if($rabattRow > 0 && $rabattRow < 1) { - $rabatt *= $rabattRow; - } - } - } - - $rabatt=(1-$rabatt)*100; - if($grundrabatt_sub >= 100 || $rabatt1_sub >= 100 || $rabatt2_sub >= 100 || $rabatt3_sub >= 100 || $rabatt4_sub >= 100 || $rabatt5_sub >= 100) - { - $rabatt = 100; - } - } - // wenn kein rabatt fuer die Position erlaubt ist - - if($this->Firmendaten("modul_verband")=="1" && $this->ModulVorhanden('verband')) //CLAUDI - $this->app->DB->Update("UPDATE ".$art."_position SET rabatt='$rabatt' WHERE id='".$artikelarr[$i]['id']."' LIMIT 1"); - elseif($rabatt != 0) { - $this->app->DB->Update("UPDATE ".$art."_position SET rabatt='$rabatt' WHERE id='".$artikelarr[$i]['id']."' AND rabatt=0 LIMIT 1"); - } - } - } - - // rabatt positionen berechnen also die, die auf den gesamten auftrag gehen - $betrag = $this->ANABREGSNeuberechnenGesamtsummeOhnePortoUndKeinRabatt($id,$art); - $cartikelarr = $artikelarr?count($artikelarr):0; - for($i=0;$i<$cartikelarr;$i++) - { - $check_rabatt_artikel = $artikelarr[$i]['art_rabatt']; - if($check_rabatt_artikel=='1') - { - $check_rabatt_artikel_prozente = $artikelarr[$i]['art_rabatt_prozent']; - - if($check_rabatt_artikel_prozente<>0) - { - $this->app->DB->Update("UPDATE ".$art."_position SET menge='1', preis='".((($betrag/100)*$check_rabatt_artikel_prozente)*-1)."' WHERE id='".$artikelarr[$i]['id']."' LIMIT 1"); - } - } - } - - // porto berechnen - $portoRow = $this->app->DB->SelectRow( - sprintf( - 'SELECT tp.* - FROM `%s` AS tp - INNER JOIN artikel AS a ON a.id=tp.artikel - WHERE a.porto=1 AND a.geloescht!=1 AND tp.`%s`= %d - LIMIT 1', - $art.'_position', $art, (int)$id - ) - ); - $portoid = !empty($portoRow['id'])?$portoRow['id']:0; - $portoartikel = !empty($portoRow['artikel'])?$portoRow['artikel']:0; - $keinrabatterlaubt_sub = !empty($portoRow['keinrabatterlaubt'])?$portoRow['keinrabatterlaubt']:0; - - $betrag = $this->ANABREGSNeuberechnenGesamtsummeOhnePorto($id,$art); - if($portoid > 0 && $keinrabatterlaubt_sub!="1" && $this->Firmendaten("porto_berechnen")) - { - $realpreis = false; - $portoberechnen = $this->PortoBerechnen($adresse,$betrag,$portoartikel, $realpreis); - - if($portoberechnen || $realpreis) { - $this->app->DB->Update("UPDATE ".$art."_position SET menge='1',preis='".$this->PortoBerechnen($adresse,$betrag,$portoartikel)."' WHERE id='".$portoid ."' LIMIT 1"); - } - } - $this->ANABREGSNeuberechnenGesamtsumme($id,$art); - - if($art==="auftrag") - { - //tatsaechlicheslieferdatum - $orderRow = $this->app->DB->SelectRow( - sprintf( - 'SELECT tatsaechlicheslieferdatum, projekt, lieferdatum,land FROM auftrag WHERE id = %d LIMIT 1', - (int)$id - ) - ); - $tatsaechlicheslieferdatum = $orderRow['tatsaechlicheslieferdatum']; - $projekt = $orderRow['projekt']; - $differenztage = $this->Projektdaten($projekt,'differenz_auslieferung_tage'); - if($differenztage<0) { - $differenztage=2; - } - $lieferdatum = $orderRow['lieferdatum']; - $land = $orderRow['land']; - if(($tatsaechlicheslieferdatum==='0000-00-00' || $tatsaechlicheslieferdatum=='') && $lieferdatum!=='0000-00-00') - { - while($this->app->DB->Select("SELECT id FROM auftrag WHERE weekday(DATE_SUB(lieferdatum, INTERVAL $differenztage DAY)) >= 5 AND id='$id' LIMIT 1") || - $this->app->DB->Select("SELECT id FROM arbeitsfreietage WHERE datum = DATE_SUB((SELECT lieferdatum FROM auftrag WHERE id = '$id' LIMIT 1), INTERVAL $differenztage DAY) AND (projekt='$projekt' OR projekt=0) AND (land='$land' OR land='') ORDER by land='$land' LIMIT 1")) - { - $differenztage++; - } - - $this->app->DB->Update("UPDATE auftrag SET tatsaechlicheslieferdatum=DATE_SUB(lieferdatum, INTERVAL $differenztage DAY) WHERE id='$id' LIMIT 1"); - } - - $this->EventAPIAdd("EventAuftragEdit",$id,"auftrag","edit"); - } - - $this->BerechneDeckungsbeitrag($id,$art); - $this->BerechneSkonto($id, $art); - - - $teillieferung = false; - $systemfreitext = ''; - if($art === 'rechnung') { - $systemfreitext = $this->app->DB->Select(sprintf('SELECT systemfreitext FROM rechnung WHERE id = %d', $id)); - } - elseif($art === 'auftrag') { - $systemfreitext = $this->app->DB->Select(sprintf('SELECT systemfreitext FROM auftrag WHERE id = %d', $id)); - } - - if($systemfreitext == '' && ($art==='rechnung' || $art==='auftrag')) { - if($art==='auftrag') { - $tmprechnung = $this->app->DB->SelectArr("SELECT projekt, id as auftragid, zahlungsweise,transaktionsnummer,teillieferungvon FROM $art WHERE id='$id' LIMIT 1"); - $teillieferung = ($tmprechnung[0]['teillieferungvon']>0?true:false); - } - else{ - $tmprechnung = $this->app->DB->SelectArr("SELECT projekt, auftragid, zahlungsweise FROM $art WHERE id='$id' LIMIT 1"); - } - - if($tmprechnung[0]['transaktionsnummer']==''){ - $tmprechnung[0]['transaktionsnummer'] = $this->app->DB->Select("SELECT transaktionsnummer FROM auftrag WHERE id='" . $tmprechnung[0]['auftragid'] . "' LIMIT 1"); - } - - } - $this->RunHook('ANABREGSNeuberechnenEnde',2, $id, $art); - } - - /** - * @param array $taxes - * @param array $posTaxes - * - * @return array - */ - public function addErloesFromPos($taxes, $posTaxes) - { - if(empty($taxes) || empty($posTaxes)) { - return $taxes; - } - $posByErloes = []; - $hasErloes = false; - foreach($posTaxes as $posTax) { - if(!empty($posTax['erloese'])) { - $hasErloes = true; - } - $posByErloes[(string)$posTax['steuersatz']][!empty($posTax['erloese'])?(string)$posTax['erloese']:''][] - = $posTax; - } - if(!$hasErloes) { - return $taxes; - } - $taxesToAdd = []; - foreach($taxes as $key => $tax) { - $taxRate = $tax['steuersatz']; - if(empty($posByErloes[$taxRate])) { - continue; - } - if(count($posByErloes[$taxRate]) === 1) { - $erloes = array_keys($posByErloes[$taxRate]); - $taxes[$key]['erloese'] = reset($erloes); - continue; - } - $first = true; - foreach($posByErloes[$taxRate] as $erloes => $positions) { - $brutto = 0.0; - $netto = 0.0; - foreach($positions as $position) { - $brutto += $position['brutto']; - $netto += $postion['netto']; - } - if($first) { - $taxesToAdd[] = $tax; - $taxToaddKey = count($taxesToAdd)-1; - $taxesToAdd[$taxToaddKey]['brutto'] -= $brutto; - $taxesToAdd[$taxToaddKey]['netto'] -= $netto; - $tax['brutto'] = $brutto; - $tax['netto'] = $netto; - $tax['erloese'] = $erloes; - $taxes[$key]['brutto'] = $tax['brutto']; - $taxes[$key]['netto'] = $tax['netto']; - $taxes[$key]['erloese'] = $tax['erloese']; - $first = false; - continue; - } - $taxToaddKey = count($taxesToAdd)-1; - $taxesToAdd[] = $taxesToAdd[$taxToaddKey]; - $taxToaddKey = count($taxesToAdd)-1; - $taxesToAdd[$taxToaddKey]['brutto'] -= $brutto; - $taxesToAdd[$taxToaddKey]['netto'] -= $netto; - $taxesToAdd[$taxToaddKey - 1]['brutto'] = $brutto; - $taxesToAdd[$taxToaddKey - 1]['netto'] = $netto; - $taxesToAdd[$taxToaddKey - 1]['erloese'] = $erloes; - } - } - foreach($taxesToAdd as $tax) { - if($tax['netto'] != 0.0) { - $taxes[] = $tax; - } - } - - return $taxes; - } - - /** - * @param int $artikel - * @param int $ust_befreit - * @param bool|int $aufwendung - * @param float $tmpsteuersatz - * @param string $tmpsteuertext - * @param string $tmperloes - * @param string $umsatzsteuerpos - * @param null|string $ustid - * @param int $projekt - */ - public function getErloesFirmendaten($artikel, $ust_befreit,$aufwendung, &$tmpsteuersatz, &$tmpsteuertext, &$tmperloes, $umsatzsteuerpos, $ustid = null, $projekt = 0) { - $tmperloes = ''; - $artikeldata = $this->app->DB->SelectRow("SELECT * FROM artikel WHERE id = '$artikel' LIMIT 1"); - if(empty($artikeldata)) { - return; - } - $umsatzsteuer = $artikeldata['umsatzsteuer'] === 'ermaessigt'?'ermaessigt':($artikeldata['umsatzsteuer']==='befreit'?'befreit':'normal'); - if($umsatzsteuerpos) { - $umsatzsteuer = $umsatzsteuerpos; - } - switch($ust_befreit) { - case 1: - if($aufwendung) { - if(trim((String)$ustid) !== '') { - $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_euermaessigt'); - return; - } - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_euermaessigt'); - return; - } - $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_eunormal'); - return; - } - if(trim((String)$ustid) !== '') { - $tmperloes = $this->Firmendaten('steuer_erloese_inland_innergemeinschaftlich'); - return; - } - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $this->Firmendaten('steuer_erloese_inland_euermaessigt'); - return; - } - $tmperloes = $this->Firmendaten('steuer_erloese_inland_eunormal'); - return; - break; - case 2: - if($aufwendung) { - $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_import'); - return; - } - $tmperloes = $this->Firmendaten('steuer_erloese_inland_export'); - return; - break; - case 3: - if($aufwendung) { - $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_nichtsteuerbar'); - return; - } - $tmperloes = $this->Firmendaten('steuer_erloese_inland_nichtsteuerbar'); - return; - break; - default: - if($aufwendung) { - if($umsatzsteuer === 'ermaessigt') { - $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_ermaessigt'); - return; - } - if($umsatzsteuer === 'befreit'){ - $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_nichtsteuerbar'); - return; - } - $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_normal'); - return; - } - if($umsatzsteuer === 'ermaessigt') { - $tmperloes = $this->Firmendaten('steuer_erloese_inland_ermaessigt'); - return; - } - if($umsatzsteuer === 'befreit') { - $tmperloes = $this->Firmendaten('steuer_erloese_inland_nichtsteuerbar'); - return; - } - $tmperloes = $this->Firmendaten('steuer_erloese_inland_normal'); - return; - - break; - } - } - - /** - * @param int $artikel - * @param int $ust_befreit - * @param bool|int $aufwendung - * @param float $tmpsteuersatz - * @param string $tmpsteuertext - * @param string $tmperloes - * @param string $umsatzsteuerpos - * @param null|string $ustid - * @param int $projekt - */ - function GetArtikelSteuer($artikel, $ust_befreit,$aufwendung, &$tmpsteuersatz, &$tmpsteuertext, &$tmperloes, $umsatzsteuerpos, $ustid = null, $projekt = 0) - { - $tmperloes = ''; - $artikeldata = $this->app->DB->SelectRow("SELECT * FROM artikel WHERE id = '$artikel' LIMIT 1"); - if(empty($artikeldata)) { - return; - } - $umsatzsteuer = $artikeldata['umsatzsteuer'] === 'ermaessigt'?'ermaessigt':($artikeldata['umsatzsteuer']==='befreit'?'befreit':'normal'); - if($umsatzsteuerpos) { - $umsatzsteuer = $umsatzsteuerpos; - } - $projectRow = null; - if($projekt) { - $projectRow = $this->app->DB->SelectRow( - sprintf( - 'SELECT * FROM projekt WHERE id = %d', - $projekt - ) - ); - } - $tmpsteuertext = ''; - $kategorie = null; - switch($ust_befreit) - { - case 1: - $tmpsteuertext = $artikeldata['steuertext_innergemeinschaftlich']; - if($aufwendung) - { - if(trim((String)$ustid) !== '') - { - $tmperloes = $artikeldata['steuer_aufwendung_inland_innergemeinschaftlich']; - }else{ - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $artikeldata['steuer_aufwendung_inland_euermaessigt']; - }else{ - $tmperloes = $artikeldata['steuer_aufwendung_inland_eunormal']; - } - } - }else{ - if(trim((String)$ustid) !== '') - { - $tmperloes = $artikeldata['steuer_erloese_inland_innergemeinschaftlich']; - }else{ - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $artikeldata['steuer_erloese_inland_euermaessigt']; - }else{ - $tmperloes = $artikeldata['steuer_erloese_inland_eunormal']; - } - } - } - break; - case 2: - $tmpsteuertext = $artikeldata['steuertext_export']; - if($aufwendung) - { - $tmperloes = $artikeldata['steuer_aufwendung_inland_import']; - }else{ - $tmperloes = $artikeldata['steuer_erloese_inland_export']; - } - break; - case 3: - if($aufwendung) - { - $tmperloes = $artikeldata['steuer_aufwendung_inland_nichtsteuerbar']; - }else{ - $tmperloes = $artikeldata['steuer_erloese_inland_nichtsteuerbar']; - } - break; - default: - if($aufwendung) - { - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $artikeldata['steuer_aufwendung_inland_ermaessigt']; - }elseif($umsatzsteuer === 'befreit'){ - $tmperloes = $artikeldata['steuer_aufwendung_inland_nichtsteuerbar']; - }else{ - $tmperloes = $artikeldata['steuer_aufwendung_inland_normal']; - } - }else{ - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $artikeldata['steuer_erloese_inland_ermaessigt']; - }elseif($umsatzsteuer === 'befreit'){ - $tmperloes = $artikeldata['steuer_erloese_inland_nichtsteuerbar']; - }else{ - $tmperloes = $artikeldata['steuer_erloese_inland_normal']; - } - } - break; - } - if(strpos($artikeldata['typ'],'_kat') !== false) - { - $kategorie = $this->app->DB->SelectRow("SELECT * FROM artikelkategorien WHERE id = '".(int)str_replace('_kat','',$artikeldata['typ'])."' LIMIT 1"); - } - if($kategorie && ($tmpsteuertext === '' || $tmpsteuertext === false || is_null($tmpsteuertext))) - { - switch($ust_befreit) - { - case 1: - $tmpsteuertext = $kategorie['steuertext_innergemeinschaftlich']; - break; - case 2: - $tmpsteuertext = $kategorie['steuertext_export']; - break; - } - } - if(!$tmperloes) - { - switch($ust_befreit) - { - case 1: - if($aufwendung) - { - if(trim((String)$ustid) !== '') - { - $tmperloes = $kategorie['steuer_aufwendung_inland_euermaessigt']; - }else{ - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $kategorie['steuer_aufwendung_inland_euermaessigt']; - - }else{ - $tmperloes = $kategorie['steuer_aufwendung_inland_eunormal']; - } - } - }else{ - if(trim((String)$ustid) !== '') - { - $tmperloes = $kategorie['steuer_erloese_inland_innergemeinschaftlich']; - }else{ - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $kategorie['steuer_erloese_inland_euermaessigt']; - }else{ - $tmperloes = $kategorie['steuer_erloese_inland_eunormal']; - } - } - } - break; - case 2: - if($aufwendung) - { - $tmperloes = $kategorie['steuer_aufwendung_inland_import']; - }else{ - $tmperloes = $kategorie['steuer_erloese_inland_export']; - } - break; - case 3: - if($aufwendung) - { - $tmperloes = $kategorie['steuer_aufwendung_inland_nichtsteuerbar']; - }else{ - $tmperloes = $kategorie['steuer_erloese_inland_nichtsteuerbar']; - } - break; - default: - if($aufwendung) - { - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $kategorie['steuer_aufwendung_inland_ermaessigt']; - }elseif($umsatzsteuer == 'befreit'){ - $tmperloes = $kategorie['steuer_aufwendung_inland_nichtsteuerbar']; - }else{ - $tmperloes = $kategorie['steuer_aufwendung_inland_normal']; - } - }else{ - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $kategorie['steuer_erloese_inland_ermaessigt']; - }elseif($umsatzsteuer === 'befreit'){ - $tmperloes = $kategorie['steuer_erloese_inland_nichtsteuerbar']; - }else{ - $tmperloes = $kategorie['steuer_erloese_inland_normal']; - } - } - break; - } - } - if(!$tmperloes && !empty($projectRow)) { - switch($ust_befreit) - { - case 1: - if($aufwendung) - { - if(trim((String)$ustid) !== '') - { - $tmperloes = $projectRow['steuer_aufwendung_inland_euermaessigt']; - }else{ - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $projectRow['steuer_aufwendung_inland_euermaessigt']; - - }else{ - $tmperloes = $projectRow['steuer_aufwendung_inland_eunormal']; - } - } - }else{ - if(trim((String)$ustid) !== '') - { - $tmperloes = $projectRow['steuer_erloese_inland_innergemeinschaftlich']; - }else{ - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $projectRow['steuer_erloese_inland_euermaessigt']; - }else{ - $tmperloes = $projectRow['steuer_erloese_inland_eunormal']; - } - } - } - break; - case 2: - if($aufwendung) - { - $tmperloes = $projectRow['steuer_aufwendung_inland_import']; - }else{ - $tmperloes = $projectRow['steuer_erloese_inland_export']; - } - break; - case 3: - if($aufwendung) - { - $tmperloes = $projectRow['steuer_aufwendung_inland_nichtsteuerbar']; - }else{ - $tmperloes = $projectRow['steuer_erloese_inland_nichtsteuerbar']; - } - break; - default: - if($aufwendung) - { - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $projectRow['steuer_aufwendung_inland_ermaessigt']; - }elseif($umsatzsteuer === 'befreit'){ - $tmperloes = $projectRow['steuer_aufwendung_inland_nichtsteuerbar']; - }else{ - $tmperloes = $projectRow['steuer_aufwendung_inland_normal']; - } - }else{ - if($umsatzsteuer === 'ermaessigt') - { - $tmperloes = $projectRow['steuer_erloese_inland_ermaessigt']; - }elseif($umsatzsteuer === 'befreit'){ - $tmperloes = $projectRow['steuer_erloese_inland_nichtsteuerbar']; - }else{ - $tmperloes = $projectRow['steuer_erloese_inland_normal']; - } - } - break; - } - } - } - - /** - * @param string $typ - * @param int $posid - * @param null|string $tmpsteuersatz - * @param null|string $tmpsteuertext - * @param null|string $erloes - */ - function GetSteuerPosition($typ, $posid,&$tmpsteuersatz = null, &$tmpsteuertext = null, &$erloes = null) - { - if($posid <= 0 || empty($typ)) { - return; - } - $postyp = $typ.'_position'; - $posRow = $this->app->DB->SelectRow( - sprintf( - "SELECT * FROM `%s` WHERE id = %d LIMIT 1", - $postyp, - (int)$posid - ) - ); - - if(empty($posRow['artikel'])) { - return; - } - $projekt = (int)$this->app->DB->Select( - sprintf( - 'SELECT projekt FROM `%s` WHERE id = %d', - $typ, $posRow[$typ] - ) - ); - $artikel = $posRow['artikel']; - - $tmpsteuersatz = $posRow['steuersatz']; - if($tmpsteuersatz === '') { - $tmpsteuersatz = null; - } - $typid = $posRow[$typ]; - if($tmpsteuersatz < 0 || $tmpsteuersatz === null) - { - if($posRow['umsatzsteuer'] === 'ermaessigt') - { - $tmpsteuersatz = $this->GetSteuersatzErmaessigt(false,$typid,$typ); - }elseif($posRow['umsatzsteuer'] === 'befreit') - { - $tmpsteuersatz = 0; - }else{ - $tmpsteuersatz = $this->GetSteuersatzNormal(false,$typid,$typ); - } - } - - $ust_befreit = $this->app->DB->Select("SELECT ust_befreit FROM $typ WHERE id = '$typid' LIMIT 1"); - $aufwendung = false; - switch($typ) - { - case 'bestellung': - case 'anfrage': - $aufwendung = true; - break; - } - - $this->GetArtikelSteuer($artikel, $ust_befreit, $aufwendung,$tmpsteuersatz, $tmpsteuertext, $erloes, $posRow['umsatzsteuer'],null, $projekt); - } - - function PortoBerechnen($adresse,$gesamtsumme,$portoartikel, &$realpreis = false) - { - - // schaue ob Kunde eine Regel hat - $checkportofrei = $this->app->DB->Select("SELECT portofrei_aktiv FROM adresse WHERE id='".$adresse."' LIMIT 1"); - if($checkportofrei=="1") - { - $checkportofreiab = $this->app->DB->Select("SELECT portofreiab FROM adresse WHERE id='".$adresse."' LIMIT 1"); - if($gesamtsumme >= $checkportofreiab) - { - $realpreis = true; - return 0; - } else { - // wenn kundenpreis vorhanden dann den holen sonst verband - $tmppreis = $this->GetVerkaufspreisKunde($portoartikel,1,$adresse); - if($tmppreis > 0) - { - $realpreis = true; - return $tmppreis; - } - else - { - $returnwaehrung = null; - $ret = $this->GetVerkaufspreis($portoartikel,1,$adresse,'EUR',$returnwaehrung); - if($ret || $returnwaehrung)$realpreis = true; - return $ret; - } - } - } else { - $gruppenarray = $this->GetGruppen($adresse); - - for($gi=0;$giapp->DB->Select("SELECT id FROM gruppen WHERE ($sql_erweiterung) AND portofrei_aktiv='1' ORDER BY portofreiab LIMIT 1"); - if($checkgruppeportofrei>0) - { - $checkgruppeportofreiab = $this->app->DB->Select("SELECT portofreiab FROM gruppen WHERE id='".$checkgruppeportofrei."' LIMIT 1"); - if($gesamtsumme >= $checkgruppeportofreiab) - { - $realpreis = true; - return 0; - } else { - // hole kunden preis - // wenn nicht vorhanden dann Standardpreis - $tmppreis = $this->GetVerkaufspreisKunde($portoartikel,1,$adresse); - if($tmppreis > 0) - { - $realpreis = true; - return $tmppreis; - } - else - { - $returnwaehrung = null; - $ret = $this->GetVerkaufspreis($portoartikel,1,$adresse,'EUR',$returnwaehrung); - if($ret || $returnwaehrung)$realpreis = true; - return $ret; - } - - //return $this->GetVerkaufspreis($portoartikel,1,$adresse); - } - } - // oder gruppe hat einen versandpreis? - // billigsten versandpreis bei dem betrag - } - - // sollte nicht passieren - $returnwaehrung = null; - $ret = $this->GetVerkaufspreis($portoartikel,1,$adresse,'EUR',$returnwaehrung); - if($ret || $returnwaehrung)$realpreis = true; - return $ret; - } - - function ANABREGSNeuberechnenGesamtsummeOhnePortoUndKeinRabatt($id,$art) - { - //inkl. kein rabatt erlaubt - if($art === 'bestellung') { - return $this->app->DB->Select( - sprintf( - "SELECT IFNULL(SUM(tp.menge*tp.preis),0) - FROM bestellung_position tp - LEFT JOIN artikel a ON a.id=tp.artikel - WHERE a.porto!='1' AND (a.rabatt!='1' OR a.rabatt IS NULL) AND - (a.keinrabatterlaubt!='1' OR a.keinrabatterlaubt IS NULL) AND tp.bestellung=%d", - (int)$id - ) - ); - } - return $this->app->DB->Select("SELECT SUM(tp.menge*(tp.preis-(tp.preis/100*tp.rabatt))) FROM ".$art."_position tp - LEFT JOIN artikel a ON a.id=tp.artikel WHERE a.porto!='1' AND (a.rabatt!='1' OR a.rabatt IS NULL) AND (a.keinrabatterlaubt!='1' OR a.keinrabatterlaubt IS NULL) AND tp.".$art."='$id'"); - } - - - function BEGesamtsummeOhnePorto($id,$art) - { - //inkl. kein rabatt erlaubt - $summeNetto = $this->app->DB->Select("SELECT SUM(tp.menge*tp.preis) FROM ".$art."_position tp - LEFT JOIN artikel a ON a.id=tp.artikel WHERE a.porto!='1' AND tp.".$art."='$id'"); - return $summeNetto; - } - - function ANABREGSNeuberechnenGesamtsummeOhnePorto($id,$art) - { - //inkl. kein rabatt erlaubt - if($art === 'bestellung') { - return $this->app->DB->Select( - sprintf( - 'SELECT IFNULL(SUM(tp.menge*tp.preis),0) - FROM `%s` AS tp - LEFT JOIN artikel a ON a.id=tp.artikel - WHERE a.porto!=1 AND (a.rabatt!=1 OR a.rabatt IS NULL) AND tp.`%s` = %d - ', - $art.'_position',$art,$id - ) - ); - } - $summeNetto = $this->app->DB->Select("SELECT SUM(tp.menge*(tp.preis-(tp.preis/100*tp.rabatt))) FROM ".$art."_position tp - LEFT JOIN artikel a ON a.id=tp.artikel WHERE a.porto!='1' AND (a.rabatt!='1' OR a.rabatt IS NULL) AND tp.".$art."='$id'"); - return $summeNetto; - } - - - function ANABREGSNeuberechnenGesamtsumme($id,$art,$return_netto=false) - { - - if(empty($id) || empty($art)) { - if($return_netto) { - return 0; - } - return; - } - $docArr = $this->app->DB->SelectRow(sprintf('SELECT * FROM `%s` WHERE id = %d LIMIT 1', $art, $id)); - if(empty($docArr)) { - if($return_netto) { - return 0; - } - return; - } - $projekt = $docArr['projekt']; - $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,"preisberechnung"); - if(!$positionenkaufmaenischrunden) - { - $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); - - $sqlvor = ''; - $sqlnach = ''; - $sqlvor2 = ''; - $sqlnach2 = ''; - if($positionenkaufmaenischrunden) - { - $sqlvor = 'round('; - $sqlnach = ',2)'; - } - if($positionenkaufmaenischrunden == 3) - { - $sqlvor2 = 'round('; - $sqlnach2 = ',2)'; - } - if($art==='angebot') - { - $summeV = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position ap WHERE umsatzsteuer!='ermaessigt' AND umsatzsteuer!='befreit' AND ".$art."='$id' AND optional!=1 AND (isnull(steuersatz) OR steuersatz < 0) AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))"); - if($this->app->DB->error()) - $summeV = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position ap WHERE umsatzsteuer!='ermaessigt' AND umsatzsteuer!='befreit' AND ".$art."='$id' AND optional!=1 AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))"); - $summeR = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position ap WHERE umsatzsteuer='ermaessigt' AND ".$art."='$id' AND optional!=1 AND (isnull(steuersatz) OR steuersatz < 0) AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))"); - if($this->app->DB->error()) - $summeR = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position ap WHERE umsatzsteuer='ermaessigt' AND ".$art."='$id' AND optional!=1 AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))"); - if($positionenkaufmaenischrunden != 1 && $positionenkaufmaenischrunden != 3) - { - $summeS = (float)$this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach." * if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100) FROM ".$art."_position ap WHERE ".$art."='$id' AND optional!=1 AND ((steuersatz >= 0) and not isnull(steuersatz) OR umsatzsteuer='befreit') AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))"); - }else{ - $summeS = (float)$this->app->DB->Select("SELECT ifnull(SUM(".$sqlvor." s.pos * s.steuer".$sqlnach."),0) - - FROM ( - SELECT SUM(menge*(preis-(preis/100*rabatt))) as pos, if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100 as steuer - FROM ".$art."_position - WHERE $art = '$id' AND steuersatz >= 0 AND optional!=1 - GROUP BY if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100 - - ) s"); - } - $summeNetto = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position ap WHERE ".$art."='$id' AND optional!=1 AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))"); - } elseif($art === 'bestellung') { - $summeV = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis)".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer!='ermaessigt' AND umsatzsteuer!='befreit' AND ".$art."='$id' AND (isnull(steuersatz) OR steuersatz < 0)"); - if($this->app->DB->error())$summeV = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis)".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer!='ermaessigt' AND ".$art."='$id'"); - $summeR = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis)".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer='ermaessigt' AND ".$art."='$id' AND (isnull(steuersatz) OR steuersatz < 0)"); - if($this->app->DB->error())$summeR = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis)".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer='ermaessigt' AND ".$art."='$id'"); - if($positionenkaufmaenischrunden != 1 && $positionenkaufmaenischrunden != 3) - { - $summeS = (float)$this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis)".$sqlnach2.$sqlnach." * if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100) FROM ".$art."_position WHERE ".$art."='$id' AND ((steuersatz >= 0) and not isnull(steuersatz) OR umsatzsteuer='befreit')"); - }else{ - $summeS = (float)$this->app->DB->Select("SELECT ifnull(SUM(".$sqlvor." s.pos * s.steuer".$sqlnach."),0) - - FROM ( - SELECT SUM(menge*(preis)) as pos, if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100 as steuer - FROM ".$art."_position - WHERE $art = '$id' AND steuersatz >= 0 - GROUP BY if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100 - - ) s"); - } - $summeNetto = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis)".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE ".$art."='$id'"); - } else { - $summeV = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer!='ermaessigt' AND umsatzsteuer!='befreit' AND ".$art."='$id' AND (isnull(steuersatz) OR steuersatz < 0)"); - if($this->app->DB->error())$summeV = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer!='ermaessigt' AND ".$art."='$id'"); - $summeR = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer='ermaessigt' AND ".$art."='$id' AND (isnull(steuersatz) OR steuersatz < 0)"); - if($this->app->DB->error())$summeR = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer='ermaessigt' AND ".$art."='$id'"); - if($positionenkaufmaenischrunden != 1 && $positionenkaufmaenischrunden != 3) - { - $summeS = (float)$this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach." * if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100) FROM ".$art."_position WHERE ".$art."='$id' AND ((steuersatz >= 0) and not isnull(steuersatz) OR umsatzsteuer='befreit')"); - }else{ - $summeS = (float)$this->app->DB->Select("SELECT ifnull(SUM(".$sqlvor." s.pos * s.steuer".$sqlnach."),0) - - FROM ( - SELECT SUM(menge*(preis-(preis/100*rabatt))) as pos, if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100 as steuer - FROM ".$art."_position - WHERE $art = '$id' AND steuersatz >= 0 - GROUP BY if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100 - - ) s"); - } - $summeNetto = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE ".$art."='$id'"); - } - - - $ust_befreit = $docArr['ust_befreit'];// $this->app->DB->Select("SELECT ust_befreit FROM $art WHERE id='$id' LIMIT 1"); - $ustid = $docArr['ustid'];// $this->app->DB->Select("SELECT ustid FROM $art WHERE id='$id' LIMIT 1"); - - //UST ID CHECK - if($ust_befreit==0 || ($ust_befreit==1 && $ustid=="")) - { - if($positionenkaufmaenischrunden == 1 || $positionenkaufmaenischrunden == 3) - { - $betrag = $summeNetto + round($summeV*$this->GetSteuersatzNormal(true,$id,$art)-$summeV,2)+ round($summeR*$this->GetSteuersatzErmaessigt(true,$id,$art)-$summeR,2)+$summeS; - }else{ - $betrag = $summeNetto + ($summeV*$this->GetSteuersatzNormal(true,$id,$art)-$summeV)+ ($summeR*$this->GetSteuersatzErmaessigt(true,$id,$art)-$summeR)+$summeS; - } - } else { - $betrag = $summeNetto; - } - }else{ - $betrag = $this->app->erp->calcBelegBrutto($art, $id); - } - - if($return_netto) return $betrag; - $extsoll = 0; - if($art !== 'bestellung' && $art !== 'proformarechnung'){ - $extsoll = (float)$docArr['extsoll'];//$this->app->DB->Select("SELECT extsoll FROM $art WHERE id = '$id' LIMIT 1"); - } - if($extsoll == 0) - { - if($art==='rechnung' || $art==='gutschrift' || $art==='proformarechnung'){ - if($betrag != $docArr['soll']){ - $this->app->DB->Update("UPDATE $art SET soll='$betrag' WHERE id='$id' LIMIT 1"); - } - } - else{ - if($betrag != $docArr['gesamtsumme']){ - $this->app->DB->Update("UPDATE $art SET gesamtsumme='$betrag' WHERE id='$id' LIMIT 1"); - } - } - } - - } - - - function RechnungZwischensummeSteuersaetzeBrutto2($id,$art="ermaessigt") - { - $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id = '$id' LIMIT 1"); - $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,"preisberechnung"); - $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); - $sqlvor = ''; - $sqlnach = ''; - - if($art!="ermaessigt") - $summe = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*(preis-(preis/100*rabatt))".$sqlnach.") FROM rechnung_position WHERE (umsatzsteuer='normal' OR umsatzsteuer='standard' OR umsatzsteuer='') AND rechnung='$id' AND (isnull(steuersatz) OR steuersatz < 0) AND (isnull(erloese) OR erloese = '') "); - else - $summe = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*(preis-(preis/100*rabatt))".$sqlnach.") FROM rechnung_position WHERE umsatzsteuer='$art' AND rechnung='$id' AND (isnull(steuersatz) OR steuersatz < 0) AND isnull(erloese)"); - if($art=="ermaessigt") - $ermaessigt_summe = $summe*$this->GetSteuersatzErmaessigt(true,$id,"rechnung"); - else - $ermaessigt_summe = $summe*$this->GetSteuersatzNormal(true,$id,"rechnung"); - return $positionenkaufmaenischrunden == 1?round($ermaessigt_summe,2):$ermaessigt_summe; - } - - function RechungZwischensummeSpezialSteuer($id, $gruppierenpositionen = false, $gruppierenKostenstelle = false) - { - /** @var Buchhaltungexport $buchhaltungexport */ - $buchhaltungexport = $this->app->loadModule('buchhaltungexport', false); - if($buchhaltungexport !== null && method_exists($buchhaltungexport, 'RechungZwischensummeSpezialSteuer')) { - return $buchhaltungexport->RechungZwischensummeSpezialSteuer($id, $gruppierenpositionen, $gruppierenKostenstelle); - } - - if($id > 0) { - $rechnungarr = $this->app->DB->SelectRow( - sprintf( - 'SELECT `id`, `projekt`, `ust_befreit`, `ustid`, `kostenstelle`, `datum`, - `steuersatz_ermaessigt`, `steuersatz_normal` - FROM `rechnung` WHERE `id` = %d LIMIT 1', - $id - ) - ); - } - $projekt = null; - $ust_befreit = null; - $ustid = null; - $kostenstelle = ''; - if(!empty($rechnungarr)){ - $projekt = $rechnungarr['projekt']; - $ust_befreit = $rechnungarr['ust_befreit']; - $ustid = $rechnungarr['ustid']; - $kostenstelle = $this->app->DB->real_escape_string($rechnungarr['kostenstelle']); - } - - $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,'preisberechnung'); - $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); - $sqlvor = ''; - $sqlnach = ''; - $sqlvor2 = ''; - $sqlnach2 = ''; - if($positionenkaufmaenischrunden == 1){ - $sqlvor = 'round('; - $sqlnach = ',2)'; - } - if($positionenkaufmaenischrunden == 3){ - $sqlvor2 = 'round('; - $sqlnach2 = ',2)'; - } - - if($gruppierenpositionen){ - $arr = $this->app->DB->SelectArr( - "SELECT rp.`nummer`, rp.`bezeichnung`, rp.`artikel`, rp.`steuersatz`,rp.`erloese`, - ".$sqlvor."rp.menge*".$sqlvor2."(preis-(rp.preis/100*rp.rabatt))".$sqlnach2.$sqlnach." as netto, - rp.menge*(rp.preis-(rp.preis/100*rp.rabatt)) as nettoungerundet, - if(rp.umsatzsteuer = 'ermaessigt','ermaessigt',if(rp.umsatzsteuer = 'befreit','befreit','normal')) as usteuer , - sum(rp.einkaufspreis * rp.menge) as summeeinkaufspreis, - IF( - IFNULL(rp.kostenstelle,'') <> '', - rp.kostenstelle, - IF('$kostenstelle' <> '', '$kostenstelle', art.kostenstelle) - ) AS kostenstelle - FROM `rechnung_position` AS rp - LEFT JOIN `artikel` AS art ON rp.artikel = art.id - WHERE rechnung = '$id' group by rp.`steuersatz`,rp.`erloese`, rp.`umsatzsteuer`,rp.`artikel`, rp.`id` "); - }else{ - $arr = $this->app->DB->SelectArr( - "SELECT rp.`artikel`, rp.`steuersatz`,rp.`erloese`, - SUM(" . $sqlvor . "rp.menge*" . $sqlvor2 . "(rp.preis-(rp.preis/100*rp.rabatt))" . $sqlnach2 . $sqlnach . ") as netto, - SUM(rp.menge*(rp.preis-(rp.preis/100*rp.rabatt))) as nettoungerundet, - if(rp.umsatzsteuer = 'ermaessigt','ermaessigt',if(rp.umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - sum(rp.einkaufspreis * rp.menge) as summeeinkaufspreis, - IF( - IFNULL(rp.kostenstelle,'') <> '', - rp.kostenstelle, - IF('$kostenstelle' <> '', '$kostenstelle', art.kostenstelle) - ) AS kostenstelle - FROM `rechnung_position` AS rp - LEFT JOIN artikel AS art ON rp.artikel = art.id - WHERE rp.rechnung = '$id' - group by rp.`steuersatz`,rp.`erloese`, rp.`umsatzsteuer`,rp.`artikel` " - ); - } - - if($arr) { - $steuersatzermaessigt = $this->GetSteuersatzErmaessigt(true,$id,'rechnung'); - $steuersatznormal = $this->GetSteuersatzNormal(true,$id,'rechnung'); - foreach($arr as $k => $v) { - $_ust_befreit = $ust_befreit; - if($v['steuersatz'] !== null && $v['steuersatz'] == 0 && $ust_befreit == 0) { - $ust_befreit = 3; - } - $erloese = $this->Gegenkonto($ust_befreit, $ustid, 'rechnung', $id); - $this->GetArtikelSteuer( - $v['artikel'], $ust_befreit,0, $dummysteuersatz, $tmpsteuertext, $tmperloes,$v['usteuer'], $ustid, $projekt - ); - if(!$this->RechnungMitUmsatzeuer($id)){ - $v['steuersatz'] = 0; - } - if($v['steuersatz'] === null || $v['steuersatz'] < 0) - { - if($v['usteuer'] === 'ermaessigt') - { - $arr[$k]['steuersatz'] = $steuersatzermaessigt; - }elseif($v['usteuer'] === 'befreit'){ - $arr[$k]['steuersatz'] = 1; - }else{ - $arr[$k]['steuersatz'] = $steuersatznormal; - } - }else { - $arr[$k]['steuersatz'] = 1+$v['steuersatz']/100; - } - if($v['erloese'] === null || $v['erloese'] === '') - { - $arr[$k]['erloese'] = $erloese; - if($tmperloes) - { - $arr[$k]['erloese'] = $tmperloes; - }else{ - if($v['usteuer'] === 'befreit' && $ust_befreit == 0) - { - $arr[$k]['erloese'] = $this->Firmendaten("steuer_erloese_inland_nichtsteuerbar"); - } - elseif($v['usteuer'] === 'ermaessigt' && $ust_befreit == 0) - { - $arr[$k]['erloese'] = $this->Firmendaten("steuer_erloese_inland_ermaessigt"); - }elseif($v['usteuer'] === 'ermaessigt' && $ust_befreit == 1 && (String)$ustid === '') - { - $arr[$k]['erloese'] = $this->Firmendaten("steuer_erloese_inland_euermaessigt"); - }elseif($ust_befreit == 1 && (String)$ustid !== ''){ - - $arr[$k]['erloese'] = $this->Firmendaten("steuer_erloese_inland_innergemeinschaftlich"); - }elseif($v['usteuer'] !== 'ermaessigt' && $v['usteuer'] !== 'befreit' && $ust_befreit == 1 && (String)$ustid === '') - { - $arr[$k]['erloese'] = $this->Firmendaten("steuer_erloese_inland_eunormal"); - } - } - } - $arr[$k]['summe'] = $v['nettoungerundet'] * $arr[$k]['steuersatz']; - if($gruppierenpositionen) { - $arr[$k]['summe'] = round($arr[$k]['summe'], 2); - } - $ust_befreit = $_ust_befreit; - } - } - if($gruppierenpositionen) { - return $arr; - } - - return $this->SteuerZusammenfassen($arr, $gruppierenKostenstelle); - } - - function steuerAusBelegPDF($belegtyp, $id){ - $arr = $this->steuerAusBelegArray($belegtyp, $id); - $summe = 0; - $gesamtsumme = 0; - $summen = null; - if($arr) - { - foreach($arr as $k => $v) - { - $summe += $v['netto']; - $gesamtsumme += $v['brutto']; - if(!isset($summen[$v['steuersatz']]))$summen[$v['steuersatz']] = 0; - $summen[$v['steuersatz']] += $v['brutto'] - $v['netto']; - } - } - return array($summe, $gesamtsumme, $summen); - } - - function calcBelegBrutto($belegtyp, $id) - { - $arr = $this->steuerAusBelegArray($belegtyp, $id); - $summe = 0; - $gesamtsumme = 0; - $summen = null; - if($arr) - { - foreach($arr as $k => $v) - { - $gesamtsumme += $v['brutto']; - } - } - return $gesamtsumme; - } - - /** - * @param string $belegtyp - * @param int $id - * @param bool $gruppierenpositionen - * @param bool $ohneporto - * @param bool $mitErloes nur mit gruppierenpositionen - * - * @return array|null - */ - public function steuerAusBelegArray($belegtyp, $id, $gruppierenpositionen = false, $ohneporto = false, $mitErloes = false) - { - $projekt = $this->app->DB->Select( - sprintf( - 'SELECT `projekt` FROM `%s` WHERE id = %d LIMIT 1', - $belegtyp, $id - ) - ); - $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,'preisberechnung'); - $steuerfrei = false; - $funktionsname = ucfirst($belegtyp).'MitUmsatzeuer'; - if(method_exists($this, $funktionsname)) { - $steuerfrei = !$this->$funktionsname($id); - } - $steuersatzermaessigt = $this->GetSteuersatzErmaessigt(false,$id,$belegtyp); - $steuersatznormal = $this->GetSteuersatzNormal(false,$id,$belegtyp); - $join = ''; - if($ohneporto) { - $join = ' INNER JOIN artikel art ON ap.artikel = art AND art.porto <> 1 '; - } - if($positionenkaufmaenischrunden == 2) { - if($gruppierenpositionen) { - if($steuerfrei){ - return $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - 0 as steuersatz , - round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2) as netto, ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, - if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2) as brutto - " . ($mitErloes ? ' ,ap.erloes' : '') . " - FROM `" . $belegtyp . "_position` ap - $join - WHERE ap.$belegtyp = '$id' " - . ($belegtyp === 'angebot' - ? " AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - : '') - ); - } - return $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2) as steuersatz , - round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2) as netto, ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, - if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))*(1+ round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2)/ 100),2) as brutto - " . ($mitErloes ? ' ,ap.erloes' : '') . " - FROM `".$belegtyp."_position` ap - $join - WHERE ap.$belegtyp = '$id' " - .($belegtyp==='angebot' - ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - :'' - ) - ); - } - if($steuerfrei) { - return $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - 0 as steuersatz , - round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) as netto, - sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, - if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - round( sum(round(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)))),2) as brutto - - FROM `" . $belegtyp . "_position` ap $join - WHERE ap.$belegtyp = '$id' " - . ($belegtyp === 'angebot' - ? " AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - : '') . " - group by `steuersatz`, `usteuer` - HAVING round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) <> 0" - ); - } - return $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2) as steuersatz , - round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) as netto, - sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, - if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - round( sum(round(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))*(1+ round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2)/ 100),2)),2) as brutto - - FROM `".$belegtyp."_position` ap $join - WHERE ap.$belegtyp = '$id' " - .($belegtyp==='angebot' - ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - :'' - )." - group by round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2), `usteuer` HAVING round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) <> 0" - ); - } - if($positionenkaufmaenischrunden == 1 || $positionenkaufmaenischrunden == 3) { - $mengevor = ''; - $mengenach = ''; - if($positionenkaufmaenischrunden == 3){ - $mengevor = 'ROUND('; - $mengenach = ',2)'; - } - if($gruppierenpositionen) { - if($steuerfrei){ - return $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - 0 as steuersatz , - round( ap.menge*" . $mengevor . "(ap.preis-(ap.preis/100*ap.rabatt))" . $mengenach . ",2) as netto, - ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, - if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - round( ap.menge*" . $mengevor . "(ap.preis-(ap.preis/100*ap.rabatt))" . $mengenach . ",2) as brutto - " . ($mitErloes ? ' ,ap.erloes' : '') . " - FROM `" . $belegtyp . "_position` ap - $join - WHERE ap.$belegtyp = '$id' " - . ($belegtyp === 'angebot' - ? " AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - : '') - ); - } - return $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2) as steuersatz , - round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2) as netto, - ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, - if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))* - (1+ round( - if(ifnull(ap.`steuersatz`,-1) < 0, - if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt, - if(umsatzsteuer = 'befreit',0,$steuersatznormal) - ) ,ap.`steuersatz` - )".$mengenach.",2)/ 100),2) as brutto - " . ($mitErloes ? ' ,ap.erloes' : '') . " - FROM `".$belegtyp."_position` ap - $join - WHERE ap.$belegtyp = '$id' " - .($belegtyp==='angebot' - ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - :'') - ); - } - - if($steuerfrei){ - $sql = "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - 0 as steuersatz , - round( - sum( - round( - ap.menge* - " . $mengevor . " (ap.preis-(ap.preis/100*ap.rabatt)) " . $mengenach . " - ,2 - ) - ) - ,2 - ) as netto, - sum( - ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) - ) as nettoungerundet, - if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - - round( - sum( - round( - ap.menge*" . $mengevor . " (ap.preis-(ap.preis/100*ap.rabatt)) " . $mengenach . " - ,2 - ) - ) - ,2 - ) - as brutto - - FROM `".$belegtyp."_position` ap - $join - WHERE ap.$belegtyp = '$id' " - .($belegtyp==='angebot' - ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - :'')." - group by `steuersatz`, - `usteuer` - HAVING round(sum(round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2)),2) <> 0"; - return $this->app->DB->SelectArr($sql); - } - if($positionenkaufmaenischrunden == 3) { - return $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - round( - if( - ifnull(ap.`steuersatz`,-1) < 0, - if( - umsatzsteuer = 'ermaessigt', - $steuersatzermaessigt, - if( - umsatzsteuer = 'befreit', - 0, - $steuersatznormal - ) - ) , - ap.`steuersatz` - ),2 - ) as steuersatz , - round(sum(round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2)),2) as netto, - sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, - if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - - round(sum(round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2)),2)+ - round( - sum(round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2)) * - round( - if( - ifnull(ap.`steuersatz`,-1) < 0, - if( - umsatzsteuer = 'ermaessigt', - $steuersatzermaessigt, - if( - umsatzsteuer = 'befreit', - 0, - $steuersatznormal - ) - ) , - ap.`steuersatz` - ),2 - )/100 - ,2 - ) as brutto - FROM `".$belegtyp."_position` ap - $join - WHERE ap.$belegtyp = '$id' " - .($belegtyp==='angebot' - ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - :'')." - group by round( - if( - ifnull(ap.`steuersatz`,-1) < 0, - if( - umsatzsteuer = 'ermaessigt', - $steuersatzermaessigt, - if( - umsatzsteuer = 'befreit', - 0, - $steuersatznormal - ) - ) , - ap.`steuersatz` - ),2 - ), - `usteuer` HAVING round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) <> 0" - ); - } - return $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2) as steuersatz , - round(sum(round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2)),2) as netto, - sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, - if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - - round(sum(round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2)),2) + round( round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) * round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2)/100 ,2) - as brutto - - FROM `".$belegtyp."_position` ap - $join - WHERE ap.$belegtyp = '$id' " - .($belegtyp==='angebot' - ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - :'')." - group by round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2), - `usteuer` - HAVING round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) <> 0" - ); - } - - if($gruppierenpositionen) { - if($steuerfrei){ - return $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2) as steuersatz , - ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as netto, ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, - 0 as usteuer, - ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as brutto - " . ($mitErloes ? ' ,ap.erloes' : '') . " - FROM `" . $belegtyp . "_position` ap - $join - WHERE ap.$belegtyp = '$id' " - . ($belegtyp === 'angebot' - ? " AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - : '') - ); - } - return $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2) as steuersatz , - ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as netto, ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, - if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))*(1+ round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2)/ 100) as brutto - " . ($mitErloes ? ' ,ap.erloes' : '') . " - FROM `".$belegtyp."_position` ap - $join - WHERE ap.$belegtyp = '$id' " - .($belegtyp==='angebot' - ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - :'') - ); - } - - if($steuerfrei){ - return $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - 0 as steuersatz , - sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as netto, - sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, - if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as brutto - FROM `" . $belegtyp . "_position` ap - $join - WHERE ap.$belegtyp = '$id' " . - ($belegtyp === 'angebot' - ? " AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - : '') . " - group by `steuersatz`, - `usteuer` HAVING sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) <> 0" - ); - } - return $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - round( - if( - ifnull(ap.`steuersatz`,-1) < 0, - if( - ap.umsatzsteuer = 'ermaessigt', - $steuersatzermaessigt, - if(ap.umsatzsteuer = 'befreit', - 0, - $steuersatznormal - ) - ) , - ap.`steuersatz` - ),2) as steuersatz , - sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as netto, - sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, - if(ap.umsatzsteuer = 'ermaessigt','ermaessigt',if(ap.umsatzsteuer = 'befreit','befreit','normal')) as usteuer, - sum( - ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))* - (1+ round( - if( - ifnull(ap.`steuersatz`,-1) < 0, - if( - ap.umsatzsteuer = 'ermaessigt', - $steuersatzermaessigt, - if( - ap.umsatzsteuer = 'befreit', - 0, - $steuersatznormal - ) - ) , - ap.`steuersatz` - ),2)/ 100 - ) - ) as brutto - - FROM `".$belegtyp."_position` ap - $join - WHERE ap.$belegtyp = '$id' " - .($belegtyp==='angebot' - ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" - :'')." - group by round( - if( - ifnull(ap.`steuersatz`,-1) < 0, - if( - ap.umsatzsteuer = 'ermaessigt', - $steuersatzermaessigt, - if(ap.umsatzsteuer = 'befreit', - 0, - $steuersatznormal - ) - ) , - ap.`steuersatz` - ),2), - `usteuer` HAVING - sum(ap.menge* - (ap.preis-(ap.preis/100*ap.rabatt)) - ) <> 0" - ); - } - - /** - * @param array|null $ret - * @param string $belegtyp - * @param int $id - * - * @return array|null - */ - public function addErloesSteuerBeleg($ret, $belegtyp, $id) { - if(empty($ret) || empty($belegtyp) || empty($id)) { - return $ret; - } - $doc = $this->app->DB->SelectRow( - sprintf( - 'SELECT `ustid`, `ust_befreit`, `projekt` FROM `%s` WHERE `id` = %d', - $belegtyp,$id - ) - ); - $aufwendung = null; - $steuertext = null; - foreach($ret as $key => $row) { - if(!empty($row['erloese']) || empty($row['artikel'])) { - continue; - } - $steuersatz = $row['steuersatz']; - $steuertext = null; - $umsatzsteuerpos = $row['umsatzsteuer']; - $this->GetArtikelSteuer( - $row['artikel'], - $doc['ust_befreit'], - $aufwendung, - $steuersatz, - $steuertext, - $row['erloese'], - $umsatzsteuerpos, - $doc['ustid'], - $doc['projekt'] - ); - if(!empty($row['erloese'])) { - $ret[$key]['erloese'] = $row['erloese']; - continue; - } - $this->getErloesFirmendaten( - $row['artikel'], - $doc['ust_befreit'], - $aufwendung, - $steuersatz, - $steuertext, - $row['erloese'], - $umsatzsteuerpos, - $doc['ustid'], - $doc['projekt'] - ); - if(!empty($row['erloese'])) { - $ret[$key]['erloese'] = $row['erloese']; - continue; - } - } - - return $ret; - } - - /** - * @param string $belegtyp - * @param int $id - * @param bool $gruppierenpositionen - * @param bool $ohneporto - * @param bool $mitErloes nur mit gruppierenpositionen - * - * @return array|null - */ - public function SteuerAusBeleg($belegtyp, $id, $gruppierenpositionen = false, $ohneporto = false, $mitErloes = false) - { - $projekt = $this->app->DB->Select( - sprintf( - 'SELECT `projekt` FROM `%s` WHERE `id` = %d LIMIT 1', - $belegtyp, $id - ) - ); - $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,'preisberechnung'); - if($positionenkaufmaenischrunden) { - $ret = $this->steuerAusBelegArray($belegtyp, $id, $gruppierenpositionen, $ohneporto, $mitErloes); - if($gruppierenpositionen && $mitErloes) { - return $this->addErloesSteuerBeleg($ret, $belegtyp, $id); - } - return $ret; - } - $steuerfrei = false; - $funktionsname = ucfirst($belegtyp).'MitUmsatzeuer'; - if(method_exists($this, $funktionsname)) { - $steuerfrei = !$this->$funktionsname($id); - } - $steuersatzermaessigt = $this->GetSteuersatzErmaessigt(false,$id,$belegtyp); - $steuersatznormal = $this->GetSteuersatzNormal(false,$id,$belegtyp); - $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); - - $sqlvor = ''; - $sqlnach = ''; - if($positionenkaufmaenischrunden == 1) { - $sqlvor = 'round('; - $sqlnach = ',2)'; - } - $sqlvor2 = ''; - $sqlnach2 = ''; - if($positionenkaufmaenischrunden == 3) { - $sqlvor2 = 'round('; - $sqlnach2 = ',2)'; - } - - $join = ''; - if($ohneporto) { - $join = ' INNER JOIN artikel art ON ap.artikel = art AND art.porto <> 1 '; - } - if($gruppierenpositionen) { - $arr = $this->app->DB->SelectArr( - "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, - if(ap.`steuersatz` < 0, null,ap.`steuersatz`) as ssatz , - ".$sqlvor." ap.menge*".$sqlvor2."(ap.preis-(ap.preis/100*ap.rabatt))".$sqlnach2.$sqlnach." as netto, - ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, - if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer - ".($mitErloes?',ap.erloese ':'')." - FROM `".$belegtyp."_position` ap - $join - WHERE ap.$belegtyp = '$id' - GROUP BY `ssatz`,ap.`erloese`, `usteuer`,ap.`artikel`,ap.`id` " - ); - } - else{ - $arr = $this->app->DB->SelectArr( - "SELECT if(ap.`steuersatz` < 0, null,ap.`steuersatz`) as ssatz , - SUM(".$sqlvor."ap.menge*".$sqlvor2."(ap.preis-(ap.preis/100*ap.rabatt))".$sqlnach2.$sqlnach.") as netto, - SUM(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, - if(ap.umsatzsteuer = 'ermaessigt','ermaessigt',if(ap.umsatzsteuer = 'befreit','befreit','normal')) as usteuer - - FROM `".$belegtyp."_position` ap - $join - WHERE ap.$belegtyp = '$id' - group by `ssatz`, `usteuer` " - ); - } - $ret = null; - if($arr) { - if(!$gruppierenpositionen) { - foreach($arr as $k => $v) { - if($steuerfrei) { - $satz = 0; - } - else{ - if(is_null($v['ssatz']) || $v['ssatz'] < 0) { - if($v['usteuer'] === 'ermaessigt') { - $satz = $steuersatzermaessigt; - } - elseif($v['usteuer'] === 'befreit'){ - $satz = 0; - } - else{ - $satz = $steuersatznormal; - } - } - else { - $satz = $v['ssatz']; - } - } - if(!isset($ret[$satz])) { - $ret[$satz] = 0; - } - if(!isset($retgerundet[$satz])){ - $retgerundet[$satz] = 0; - } - $ret[$satz] += $v['nettoungerundet']; - $retgerundet[$satz]+= $v['netto']; - } - unset($arr); - if($ret) { - foreach($ret as $steuersatz => $summe) { - $arr[] = array( - 'steuersatz'=>$steuersatz, - 'netto'=>$retgerundet[$steuersatz], - 'brutto'=>$summe*(1+$steuersatz/100) - ); - } - } - } - else{ - foreach($arr as $k => $v) { - if($steuerfrei) { - $arr[$k]['steuersatz'] = 0; - } - else{ - if(is_null($v['ssatz']) || $v['ssatz'] < 0) { - if($v['usteuer'] === 'ermaessigt') { - $arr[$k]['steuersatz'] = $steuersatzermaessigt; - } - elseif($v['usteuer'] === 'befreit') { - $arr[$k]['steuersatz'] = 0; - } - else{ - $arr[$k]['steuersatz'] = $steuersatznormal; - } - } - else { - $arr[$k]['steuersatz'] = $v['ssatz']; - } - } - unset($arr[$k]['ssatz']); - $arr[$k]['brutto'] = $v['nettoungerundet']*(1+$arr[$k]['steuersatz']/100); - $arr[$k]['umsatzsteuer'] = $arr[$k]['usteuer']; - unset($arr[$k]['usteuer']); - } - } - } - - if($gruppierenpositionen && $mitErloes) { - return $this->addErloesSteuerBeleg($arr, $belegtyp, $id); - } - return $arr; - } - - /** - * @param int $id - * @param bool $gruppierenpositionen - * @param bool $gruppierenkostenstelle - * - * @return array|null - */ - public function GutschriftZwischensummeSpezialSteuer($id, $gruppierenpositionen = false, $gruppierenkostenstelle = false) - { - /** @var Buchhaltungexport $buchhaltungexport */ - $buchhaltungexport = $this->app->loadModule('buchhaltungexport', false); - if($buchhaltungexport !== null && method_exists($buchhaltungexport, 'GutschriftZwischensummeSpezialSteuer')) { - return $buchhaltungexport->GutschriftZwischensummeSpezialSteuer( - $id, $gruppierenpositionen, $gruppierenKostenstelle - ); - } - if($id > 0) - { - $gutschriftarr = $this->app->DB->SelectRow( - "SELECT ust_befreit,ustid,projekt,kostenstelle - FROM gutschrift WHERE id = '$id' LIMIT 1" - ); - } - $ust_befreit = null; - $ustid = null; - $projekt = 0; - $kostenstelle = ''; - if(!empty($gutschriftarr)){ - $ust_befreit = $gutschriftarr['ust_befreit']; - $ustid = $gutschriftarr['ustid']; - $projekt = $gutschriftarr['projekt']; - $kostenstelle = $this->app->DB->real_escape_string($gutschriftarr['kostenstelle']); - } - $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,'preisberechnung'); - $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); - - $sqlvor = ''; - $sqlnach = ''; - if($positionenkaufmaenischrunden) { - $sqlvor = 'round('; - $sqlnach = ',2)'; - } - $sqlvor2 = ''; - $sqlnach2 = ''; - if($positionenkaufmaenischrunden == 3) { - $sqlvor2 = 'round('; - $sqlnach2 = ',2)'; - } - if($gruppierenpositionen) - { - $arr = $this->app->DB->SelectArr( - "SELECT gp.`nummer`, gp.`bezeichnung`, gp.`artikel`, gp.`steuersatz`,gp.`erloese`, - ".$sqlvor.'gp.menge*'.$sqlvor2.'(gp.preis-(gp.preis/100*gp.rabatt))'.$sqlnach2.$sqlnach." as netto, - gp.menge*(gp.preis-(gp.preis/100*gp.rabatt)) as nettoungerundet , - if(gp.umsatzsteuer = 'ermaessigt','ermaessigt',if(gp.umsatzsteuer = 'befreit','befreit','normal')) as usteuer , - sum(gp.einkaufspreis * gp.menge) as summeeinkaufspreis, - IF( - IFNULL(gp.kostenstelle,'') <> '', - gp.kostenstelle, - IF('$kostenstelle' <> '', '$kostenstelle', art.kostenstelle) - ) - AS kostenstelle - FROM `gutschrift_position` AS gp - LEFT JOIN artikel AS art ON gp.artikel = art.id - WHERE gp.gutschrift = '$id' - GROUP BY gp.`steuersatz`,gp.`erloese`, gp.`umsatzsteuer`,gp.`artikel`,gp.`id` " - ); - } - else{ - $arr = $this->app->DB->SelectArr( - "SELECT gp.`artikel`, gp.`steuersatz`,gp.`erloese`, - SUM(".$sqlvor."gp.menge*".$sqlvor2."(gp.preis-(gp.preis/100*gp.rabatt))".$sqlnach2.$sqlnach.") as netto, - SUM(gp.menge*(gp.preis-(gp.preis/100*gp.rabatt))) as nettoungerundet, - if(gp.umsatzsteuer = 'ermaessigt','ermaessigt', - if(gp.umsatzsteuer = 'befreit','befreit','normal')) as usteuer , - sum(gp.einkaufspreis * gp.menge) as summeeinkaufspreis, - IF( - IFNULL(gp.kostenstelle,'')<>'', - gp.kostenstelle, - IF('$kostenstelle' <> '', '$kostenstelle',art.kostenstelle) - ) - AS kostenstelle - FROM `gutschrift_position` AS gp - LEFT JOIN artikel AS art ON gp.artikel = art.id - WHERE gp.gutschrift = '$id' - group by gp.`steuersatz`, gp.`erloese`, gp.`umsatzsteuer`, gp.`artikel` " - ); - } - if($arr) { - $steuersatzermaessigt = $this->GetSteuersatzErmaessigt(true,$id,'gutschrift'); - $steuersatznormal = $this->GetSteuersatzNormal(true,$id,'gutschrift'); - foreach($arr as $k => $v) { - if($v['steuersatz'] !== null && $v['steuersatz'] == 0 && $ust_befreit == 0) { - $ust_befreit = 3; - } - $erloese = $this->Gegenkonto($ust_befreit, $ustid, 'gutschrift', $id); - $this->GetArtikelSteuer( - $v['artikel'], $ust_befreit,0, $dummysteuersatz, $tmpsteuertext, $tmperloes, $v['usteuer'], $ustid, $projekt - ); - if(!$this->GutschriftMitUmsatzeuer($id)){ - $v['steuersatz'] = 0; - } - if($v['steuersatz'] === null || $v['steuersatz'] < 0) - { - if($v['usteuer'] === 'ermaessigt') - { - $arr[$k]['steuersatz'] = $steuersatzermaessigt; - }elseif($v['usteuer'] === 'befreit') - { - $arr[$k]['steuersatz'] = 1; - }else{ - $arr[$k]['steuersatz'] = $steuersatznormal; - } - }else { - $arr[$k]['steuersatz'] = 1+$v['steuersatz']/100; - } - if($v['erloese'] === null || $v['erloese'] === '') - { - $arr[$k]['erloese'] = $erloese; - if($tmperloes) - { - $arr[$k]['erloese'] = $tmperloes; - }else{ - if($v['usteuer'] === 'befreit' && $ust_befreit == 0) - { - $arr[$k]['erloese'] = $this->Firmendaten('steuer_erloese_inland_nichtsteuerbar'); - }elseif($v['usteuer'] === 'ermaessigt' && $ust_befreit == 0) - { - $arr[$k]['erloese'] = $this->Firmendaten('steuer_erloese_inland_ermaessigt'); - }elseif($v['usteuer'] === 'ermaessigt' && $ust_befreit == 1 && (String)$ustid === '') - { - $arr[$k]['erloese'] = $this->Firmendaten('steuer_erloese_inland_euermaessigt'); - }elseif($ust_befreit == 1 && (String)$ustid !== ''){ - - $arr[$k]['erloese'] = $this->Firmendaten('steuer_erloese_inland_innergemeinschaftlich'); - }elseif($v['usteuer'] !== 'ermaessigt' && $v['usteuer'] !== 'befreit' && $ust_befreit == 1 && (String)$ustid === '') - { - $arr[$k]['erloese'] = $this->Firmendaten('steuer_erloese_inland_eunormal'); - } - } - } - $arr[$k]['summe'] = $v['nettoungerundet'] * $arr[$k]['steuersatz']; - if($gruppierenpositionen) { - $arr[$k]['summe'] = round($arr[$k]['summe'], 2); - } - } - } - if($gruppierenpositionen) { - return $arr; - } - - return $this->SteuerZusammenfassen($arr, $gruppierenkostenstelle); - } - - /** - * @param array $arr - * @param bool $gruppierenKostenstelle - * - * @return array - */ - public function SteuerZusammenfassen($arr, $gruppierenKostenstelle = false) - { - if(empty($arr)) { - return $arr; - } - - $tmparr = null; - foreach($arr as $k => $v) { - $kostenstelle = $gruppierenKostenstelle?(String)$v['kostenstelle']:''; - if(empty($tmparr) || !isset($tmparr[$v['erloese']]) - || !isset($tmparr[$v['erloese']]['s'.$v['steuersatz']]) - || !isset($tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]) - || !isset($tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]['s'])) { - $tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]['s'] = 0; - } - if(empty($tmparr) || !isset($tmparr[$v['erloese']]) - || !isset($tmparr[$v['erloese']]['s'.$v['steuersatz']]) - || !isset($tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]) - || !isset($tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]['e'])) { - $tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]['e'] = 0; - } - $tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]['s'] += $v['summe']; - $tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]['e'] += $v['summeeinkaufspreis']; - } - foreach($tmparr as $k1 => $v1) { - foreach($v1 as $k2 => $v2) { - foreach($v2 as $kostenstelle => $v3) { - $newarr[] = [ - 'erloese' => $k1, - 'steuersatz' => str_replace('s', '', $k2), - 'summe' => round($v3['s'], 2), - 'summeeinkaufspreis' => round($v3['e'], 2), - 'kostenstelle' => $kostenstelle - ]; - } - } - } - return $newarr; - } - - function RechnungZwischensummeSteuersaetzeBrutto($id,$art="ermaessigt") - { - return number_format($this->RechnungZwischensummeSteuersaetzeBrutto2($id,$art),","); - } - - function GutschriftZwischensummeSteuersaetzeBrutto2($id,$art="ermaessigt") - { - $projekt = $this->app->DB->Select("SELECT projekt FROM gutschrift WHERE id = '$id' LIMIT 1"); - $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,"preisberechnung"); - $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); - - $sqlvor = ''; - $sqlnach = ''; - - if($art!="ermaessigt") - $summe = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*(preis-(preis/100*rabatt))".$sqlnach.") FROM gutschrift_position WHERE (umsatzsteuer='normal' OR umsatzsteuer='') AND gutschrift='$id'"); - else - $summe = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*(preis-(preis/100*rabatt))".$sqlnach.") FROM gutschrift_position WHERE umsatzsteuer='$art' AND gutschrift='$id'"); - if($art == 'befreit')return $summe; - if($art=="ermaessigt") - $ermaessigt_summe = $summe*$this->GetSteuersatzErmaessigt(true,$id,"gutschrift"); - else - $ermaessigt_summe = $summe*$this->GetSteuersatzNormal(true,$id,"gutschrift"); - if($positionenkaufmaenischrunden == 1 || $positionenkaufmaenischrunden == 3)return round($ermaessigt_summe, 2); - return $ermaessigt_summe; - } - - function BelegZwischensummeSteuersaetzeBrutto2($id,$typ="",$art="ermaessigt") - { - $projekt = $this->app->DB->Select("SELECT projekt FROM $typ WHERE id = '$id' LIMIT 1"); - $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,"preisberechnung"); - $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); - - $sqlvor = ''; - $sqlnach = ''; - if($art!="ermaessigt") - $summe = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*(preis-(preis/100*rabatt))".$sqlnach.") FROM ".$typ."_position WHERE (umsatzsteuer='normal' OR umsatzsteuer='') AND ".$typ."='$id'"); - else - $summe = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*(preis-(preis/100*rabatt))".$sqlnach.") FROM ".$typ."_position WHERE umsatzsteuer='$art' AND ".$typ."='$id'"); - if($art == 'befreit')return $summe; - if($art=="ermaessigt") - $ermaessigt_summe = $summe*$this->GetSteuersatzErmaessigt(true,$id,$typ); - else - $ermaessigt_summe = $summe*$this->GetSteuersatzNormal(true,$id,$typ); - if($positionenkaufmaenischrunden == 1 || $positionenkaufmaenischrunden == 3)return round($ermaessigt_summe, 2); - return $ermaessigt_summe; - } - - function GutschriftZwischensummeSteuersaetzeBrutto($id,$art="ermaessigt") - { - return number_format($this->GutschriftZwischensummeSteuersaetzeBrutto2($id,$art),","); - } - - function RechnungNeuberechnen($id) - { - $this->ANABREGSNeuberechnen($id,"rechnung"); - } - - - function DeleteRechnung($id) - { - /** @var Rechnung $obj */ - $obj = $this->LoadModul('rechnung'); - if(!empty($obj) && method_exists($obj,'DeleteRechnung')){ - $obj->DeleteRechnung($id); - } - } - - - function GetUserKalender($adresse) - { - return $this->app->DB->SelectArr("SELECT id, name, farbe FROM kalender WHERE id IN (SELECT kalender FROM kalender_user WHERE adresse = $adresse);"); - } - - function GetAllKalender($adresse="") - { - return $this->app->DB->SelectArr("SELECT id, name, farbe".($adresse!=""?", IFNULL((SELECT 1 FROM kalender_user WHERE adresse=$adresse AND kalender_user.kalender=kalender.id),0) zugriff":"")." FROM kalender;"); - } - - function GetUserKalenderIds($adresse) - { - $arr = array(); - foreach ($this->GetUserKalender($adresse) as $value) - array_push($arr,$value["id"]); - return $arr; - } - - function GetAllKalenderIds($adresse="") - { - $arr = array(); - foreach ($this->GetAllKalender($adresse) as $value) - array_push($arr,$value["id"]); - return $arr; - } - - function GetKalenderSelect($adresse,$selectedKalender=array()) - { - $arr = $this->GetUserKalender($adresse); - foreach($arr as $value) - { - $tmp = (in_array($value["id"],$selectedKalender))?" selected=\"selected\"":""; - $ret .= ""; - } - return $ret; - } - - function GetKwSelect($selectedKW="") - { - $ret = ''; - foreach(range(1,52) as $kw) - { - $tmp = ($selectedKW==$kw)?" selected=\"selected\"":""; - $ret .= ""; - } - return $ret; - } - - function GetYearSelect($selectedYear="", $yearsBefore=2, $yearsAfter=10) - { - $ret = ''; - foreach(range(date("Y")-$yearsBefore, date("Y")+$yearsAfter) as $year) - { - $tmp = ($selectedYear==$year)?" selected=\"selected\"":""; - $ret .= ""; - } - return $ret; - } - - function DownloadFile($url,$label="tmp",$ending="") - { - if($ending!="") $ending = '.'.$ending; - - $tmpname1 = tempnam($this->GetTMP(),$label); - $tmpname = $tmpname1.$ending; - unlink($tmpname1); - - set_time_limit(0); - //This is the file where we save the information - $fp = fopen ($tmpname, 'w+'); - //Here is the file we are downloading, replace spaces with %20 - $ch = curl_init(str_replace(" ","%20",$url)); - curl_setopt($ch, CURLOPT_TIMEOUT, 50); - // write curl response to file - curl_setopt($ch, CURLOPT_FILE, $fp); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); - // get curl response - curl_exec($ch); - curl_close($ch); - fclose($fp); - return $tmpname; - } - - function CreateDateiOhneInitialeVersion($titel,$beschreibung,$nummer,$ersteller,$without_log=false) - { - if(!$without_log) - { - $this->app->DB->Insert("INSERT INTO datei (id,titel,beschreibung,nummer,firma) VALUES - ('','$titel','$beschreibung','$nummer','".$this->app->User->GetFirma()."')"); - } else { - $this->app->DB->InsertWithoutLog("INSERT INTO datei (id,titel,beschreibung,nummer,firma) VALUES - ('','$titel','$beschreibung','$nummer',1)"); - } - - $fileid = $this->app->DB->GetInsertID(); - //$this->AddDateiVersion($fileid,$ersteller,$name,"Initiale Version",$datei,$without_log); - - return $fileid; - } - - function GetDMSPath($id, $path = '', $cache = false) - { - $ids = explode('_', $id, 2); - $id = $ids[0]; - if(isset($ids[1]))$cache = true; - if($path == '') - { - $path = str_replace("index.php", "", $_SERVER['SCRIPT_FILENAME']); - $path = $path."../userdata/dms/"; - if(isset($this->app->Conf->WFuserdata))$path = rtrim($this->app->Conf->WFuserdata,'/').'/dms/'; - $path = $path.$this->app->Conf->WFdbname; - } - if(!is_dir($path))return; - $_path = $path; - $ida = str_split($id, 2); - $path .= '/d'.implode('/d',$ida); - if(is_file($path.'/'.$id))return $path; - if($cache && count($ids) > 0) - { - if(is_file($path.'/'.$ids[0].'_'.$ids[1]))return $path; - if(is_file($_path.'/'.$ids[0].'_'.$ids[1]))return $_path; - } - if($cache && is_dir($path))return $path; - if($cache && is_dir($_path))return $_path; - } - - function CreateDMSPath($path, $id) - { - if($path == '') - { - $path = str_replace("index.php", "", $_SERVER['SCRIPT_FILENAME']); - $path = $path."../userdata/dms/"; - if(isset($this->app->Conf->WFuserdata))$path = rtrim($this->app->Conf->WFuserdata,'/').'/dms/'; - $path = $path.$this->app->Conf->WFdbname; - } - $ids = explode('_', $id, 2); - $id = $ids[0]; - if(!is_dir($path)) - { - $path_b = $path; - if (substr(trim($path), -1) == DIRECTORY_SEPARATOR) { - $path = substr(trim($path), 0, -1); - } - @mkdir($path); - system("chmod 777 ".$path); - $path = $path_b; - mkdir($path,0777,true); - system("chmod 777 ".$path); - } - if(!is_dir($path))return; - $ida = str_split($id, 2); - foreach($ida as $v) - { - $path .= '/d'.$v; - if(!is_dir($path)) - { - if(!@mkdir($path,0777,true)) - { - $path_b = $path; - if (substr(trim($path), -1) == DIRECTORY_SEPARATOR) { - $path = substr(trim($path), 0, -1); - } - system("chmod 777 ".$path); - $path = $path_b; - @mkdir($path,0777,true); - } - if(!is_dir($path))return; - } - if(!is_dir($path))return; - } - return $path; - } - - public function CheckFileSort($objekt, $parameter) - { - $arr = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS s.id, s.sort - FROM datei d - INNER JOIN datei_stichwoerter s ON d.id=s.datei - LEFT JOIN (SELECT datei, max(version) as version FROM datei_version GROUP BY datei ) v2 ON v2.datei=d.id - LEFT JOIN datei_version v ON v.datei=v2.datei AND v.version = v2.version - WHERE s.objekt LIKE '$objekt' AND s.parameter='$parameter' AND d.geloescht=0 - ORDER BY s.sort - "); - if(!$arr)return; - $oldsort = false; - foreach($arr as $v) - { - if($oldsort === false) - { - $oldsort = $v['sort']; - }elseif($v['sort'] <= $oldsort){ - $oldsort = $v['sort'] + 1; - $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = $oldsort WHERE id = '".$v['id']."' LIMIT 1"); - } - } - } - - function CreateDateiWithStichwort($name, $titel,$beschreibung,$nummer,$datei, $ersteller ,$subjekt,$objekt,$parameter, $path = "",$without_log=false) - { - $dateien = $this->app->DB->SelectArr("SELECT dv.datei, dv.id FROM datei_stichwoerter ds - INNER JOIN datei d ON ds.datei = d.id AND ifnull(d.geloescht,0) = 0 - INNER JOIN datei_version dv ON d.id = dv.datei - WHERE ds.subjekt = '".$this->app->DB->real_escape_string($subjekt)."' AND - ds.objekt = '".$this->app->DB->real_escape_string($objekt)."' AND ds.parameter = '".$this->app->DB->real_escape_string($parameter)."'"); - if($dateien) - { - if(is_file($datei)) - { - $md5 = md5_file($datei); - } - else if(is_uploaded_file($datei)) - { - $_datei = $this->app->erp->GetTMP().$datei; - if(move_uploaded_file($datei,$_datei))$datei = $_datei; - $md5 = md5_file($datei); - } - else { - $md5 = md5($datei); - } - if($md5 != '') { - if ($path == "") { - $path = str_replace("index.php", "", $_SERVER['SCRIPT_FILENAME']); - $path = $path . "../userdata/dms/"; - if (isset($this->app->Conf->WFuserdata)) $path = rtrim($this->app->Conf->WFuserdata, '/') . '/dms/'; - $path_only = $path; - $path = $path . $this->app->Conf->WFdbname; - } - foreach($dateien as $v) - { - if(is_file($path."/".$v['id']) && md5_file($path."/".$v['id']) == $md5)return $v['datei']; - } - } - } - $fileid = $this->CreateDatei($name,$titel,$beschreibung,$nummer,$datei,$ersteller,$without_log,$path); - $this->AddDateiStichwort($fileid,$subjekt,$objekt,$parameter,$without_log); - return $fileid; - } - - function CreateDatei($name,$titel,$beschreibung,$nummer,$datei,$ersteller,$without_log=false,$path="") - { - // Anführungszeichen in Unterstriche wandeln - $name = str_replace(['\\\'', '\\"', '\'', '"'], '_', $name); - - if(!$without_log) - { - $this->app->DB->Insert("INSERT INTO datei (id,titel,beschreibung,nummer,firma) VALUES - ('','$titel','$beschreibung','$nummer','".$this->app->User->GetFirma()."')"); - } else { - $this->app->DB->InsertWithoutLog("INSERT INTO datei (id,titel,beschreibung,nummer,firma) VALUES - ('','$titel','$beschreibung','$nummer',1)"); - } - - $fileid = $this->app->DB->GetInsertID(); - $this->AddDateiVersion($fileid,$ersteller,$name,"Initiale Version",$datei,$without_log,$path); - - return $fileid; - } - - function AddDateiVersion($id,$ersteller,$dateiname, $bemerkung,$datei,$without_log=false,$path="") - { - // Anführungszeichen in Unterstriche wandeln - $dateiname = str_replace(['\\\'', '\\"', '\'', '"'], '_', $dateiname); - - // ermittle neue Version - $version = (int)$this->app->DB->Select("SELECT ifnull(max(version),0) FROM datei_version WHERE datei='$id'") + 1; - - $tmpfilesize = 0; - if(@is_file($datei)){ - $tmpfilesize = @filesize($datei); - } - - // speichere werte ab - if(!$without_log) - { - $this->app->DB->Insert("INSERT INTO datei_version (id,datei,ersteller,datum,version,dateiname,bemerkung,size) - VALUES ('','$id','$ersteller',NOW(),'$version','$dateiname','$bemerkung','$tmpfilesize')"); - } else { - $this->app->DB->InsertWithoutLog("INSERT INTO datei_version (id,datei,ersteller,datum,version,dateiname,bemerkung,size) - VALUES ('','$id','$ersteller',NOW(),'$version','$dateiname','$bemerkung','$tmpfilesize')"); - } - - $versionid = $this->app->DB->GetInsertID(); - - $parameter = $this->app->DB->Select("SELECT parameter FROM datei_stichwoerter WHERE datei = '$id' and objekt like 'Artikel' LIMIT 1"); - if($parameter){ - $this->app->DB->Update("UPDATE artikel set bildvorschau = '' WHERE id = '$parameter' LIMIT 1"); - } - - //TODO Das ist keine lösung! - // if($this->app->Conf->WFdbname=="") - // $this->app->Conf->WFdbname="wawision"; - - // Pfad anpassen - if($path=="") - { - $path = str_replace("index.php", "", $_SERVER['SCRIPT_FILENAME']); - $path = $path."../userdata/dms/"; - if(isset($this->app->Conf->WFuserdata)){ - $path = rtrim($this->app->Conf->WFuserdata,'/').'/dms/'; - } - $path_only = $path; - $path = $path.$this->app->Conf->WFdbname; - } else { - $path_only = $path; - } - - if(!is_dir($path)) - { - - $path_b = $path; - if (substr(trim($path), -1) == DIRECTORY_SEPARATOR) { - $path = substr(trim($path), 0, -1); - } - if(!mkdir($path,0777, true) && !is_dir($path)){ - system("chmod 777 " . $path); - $path = $path_b; - //system("mkdir ".$path); - mkdir($path, 0777, true); - system("chmod 777 " . $path); - } - } - $userdata = isset($this->app->Conf->WFuserdata)?$this->app->Conf->WFuserdata:(str_replace('index.php', '', $_SERVER['SCRIPT_FILENAME']).'../userdata'); - - $cachefile = $this->app->erp->GetDMSPath( - $versionid.'_100_100', - $userdata.'/dms/'.$this->app->Conf->WFdbname.'/cache', true - ); - if(is_file($cachefile)) { - @unlink($cachefile); - } - - $path = $this->CreateDMSPath($path, $versionid); - - if(@is_file($datei)) - { - if(copy($datei,$path."/".$versionid)){ - return $versionid; - } - return false; - } - if(@is_uploaded_file($datei)) - { - if(@move_uploaded_file($datei,$path.'/'.$versionid)) - { - if($tmpfilesize == 0) - { - if(@is_file($path.'/'.$versionid)) - { - $tmpfilesize = @filesize($path.'/'.$versionid); - $this->app->DB->Update("UPDATE datei_version SET `size` = '$tmpfilesize' WHERE id = '$versionid'"); - } - } - return $versionid; - } - return false; - } - - // ACHTUNG !!!! ANGRIFFSGEFAHR!!!!! - if($handle = fopen ($path.'/'.$versionid, "wb")) - { - fwrite($handle, $datei); - fclose($handle); - if(@is_file($path.'/'.$versionid)) - { - $tmpfilesize = @filesize($path.'/'.$versionid); - $this->app->DB->Update("UPDATE datei_version SET `size` = '$tmpfilesize' WHERE id = '$versionid'"); - } - return $versionid; - } - return false; - } - - - function AddDateiStichwort($id,$subjekt,$objekt,$parameter,$without_log=false,$parameter2=0,$objekt2='') - { - if(strtolower($objekt) === 'artikel' && $parameter) { - $this->app->DB->Update("UPDATE artikel SET bildvorschau = '' WHERE id = '".$parameter."' LIMIT 1"); - } - $sort = 1 + (int)$this->app->DB->Select("SELECT max(sort) FROM datei_stichwoerter WHERE objekt like '$objekt' AND parameter = '$parameter'"); - if(!$without_log) { - $this->app->DB->Insert("INSERT INTO datei_stichwoerter (id,datei,subjekt,objekt,parameter, sort, parameter2, objekt2) - VALUES ('','$id','$subjekt','$objekt','$parameter','$sort','$parameter2','$objekt2')"); - } else { - $this->app->DB->InsertWithoutLog("INSERT INTO datei_stichwoerter (id,datei,subjekt,objekt,parameter,sort, parameter2, objekt2) - VALUES ('','$id','$subjekt','$objekt','$parameter','$sort','$parameter2','$objekt2')"); - } - } - - function DeleteDateiAll($subjekt,$objekt,$parameter) - { - $dateien = $this->app->DB->SelectArr("SELECT ds.datei FROM datei_stichwoerter ds WHERE ds.subjekt='$subjekt' AND ds.objekt='$objekt' AND ds.parameter='$parameter' group by ds.datei"); - if($dateien) - { - foreach($dateien as $datei) - { - if($datei['datei']){ - $this->DeleteDatei($datei['datei']); - } - } - } - } - - /** - * @param string $path - */ - public function deleteEmptyDmsPath($path) { - $prefix = $this->app->Conf->WFuserdata.'/dms/'.$this->app->Conf->WFdbname.'/'; - if(strpos($path, $prefix) !== 0) { - return; - } - $prefixCache = $prefix.'cache/'; - $isCacheFolder = strpos($path, $prefixCache) === 0; - if($isCacheFolder) { - $prefix = $prefixCache; - } - - $dirRelative = substr($path, strlen($prefix)); - if($dirRelative[0] !== 'd') { - return; - } - $pathArr = explode('/', rtrim($dirRelative,'/')); - - if(substr($pathArr[count($pathArr) - 1],0,1) !== 'd') { - unset($pathArr[count($pathArr) - 1]); - } - if(empty($pathArr) || !is_dir($prefix.'/'.implode('/', $pathArr))) { - return; - } - $glob = glob($prefix.implode('/', $pathArr).'/*'); - if(!empty($glob)) { - return; - } - if(@rmdir($prefix.implode('/', $pathArr)) && count($pathArr) > 1) { - unset($pathArr[count($pathArr) - 1]); - $this->deleteEmptyDmsPath($prefix.implode('/', $pathArr)); - } - } - - function DeleteDatei($id) - { - $id = (int)$id; - if(!$id){ - return false; - } - $error = false; - $versionen = $this->app->DB->SelectArr("SELECT * FROM datei_version WHERE datei = '".$id."'"); - if($versionen) - { - foreach($versionen as $vers) - { - //$path = $this->app->Conf->WFuserdata."/dms/".$this->app->Conf->WFdbname."/".$vers['id']; - $path = $this->GetDMSPath($vers['id'], $this->app->Conf->WFuserdata.'/dms/'.$this->app->Conf->WFdbname); - if($path){ - $path .= '/'.$vers['id']; - } - if($path && file_exists($path)) - { - if(unlink($path)) - { - $this->app->DB->Delete("DELETE FROM datei_version WHERE id = '".$vers['id']."'"); - }else{ - $error = true; - } - }else{ - $this->app->DB->Delete("DELETE FROM datei_version WHERE id = '".$vers['id']."'"); - } - $this->deleteEmptyDmsPath($path); - $cachedir = $this->app->Conf->WFuserdata."/dms/".$this->app->Conf->WFdbname.'/cache/'; - if(is_dir($cachedir)) - { - $caches = glob($this->app->Conf->WFuserdata."/dms/".$this->app->Conf->WFdbname."/cache/".$vers['id'].'_*'); - if(is_array($caches) && count($caches) > 0) - { - foreach($caches as $cache)unlink($cache); - } - } - $cachedir = $this->GetDMSPath($vers['id'], $this->app->Conf->WFuserdata."/dms/".$this->app->Conf->WFdbname."/cache", true); - if(is_dir($cachedir)) - { - $caches = glob($cachedir.'/'.$vers['id'].'_*'); - if(is_array($caches) && count($caches) > 0) - { - foreach($caches as $cache){ - unlink($cache); - } - } - $this->deleteEmptyDmsPath($cachedir); - } - } - } - if(!$error) - { - $ds = $this->app->DB->SelectArr("SELECT id,objekt, parameter FROM datei_stichwoerter WHERE datei = '$id' AND objekt like 'Artikel' AND parameter <> '' AND parameter <> '0'"); - $this->app->DB->Delete("DELETE FROM datei_stichwoerter WHERE datei = '$id'"); - if($ds) - { - foreach($ds as $d) - { - $this->app->DB->Update("UPDATE artikel SET bildvorschau = '' WHERE id = '".$d['parameter']."' LIMIT 1"); - } - } - $this->app->DB->Delete("DELETE FROM datei WHERE id = '$id' LIMIT 1"); - return true; - } - return false; - } - - function GetDateiName($id) - { - $version = $this->app->DB->Select("SELECT MAX(version) FROM datei_version WHERE datei='$id'"); - $newid = $this->app->DB->Select("SELECT dateiname FROM datei_version WHERE datei='$id' AND version='$version' LIMIT 1"); - - return $this->UmlauteEntfernen($newid); - } - - - function GetDateiEndung($id) - { - $version = $this->app->DB->Select("SELECT MAX(version) FROM datei_version WHERE datei='$id'"); - $newid = $this->app->DB->Select("SELECT dateiname FROM datei_version WHERE datei='$id' AND version='$version' LIMIT 1"); - $tmp = pathinfo($newid); - - return strtolower($tmp['extension']); - } - - - function GetDateiSubjektObjektDateiname($subjekt,$objekt,$parameter,$prefix="") - { - $dateien = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE subjekt LIKE '$subjekt' AND objekt LIKE '$objekt' AND parameter='$parameter' GROUP by datei"); - if(empty($dateien)) { - return null; - } - $tmp = []; - foreach($dateien as $datei) { - $tmpname = tempnam($this->GetTMP(), $prefix); - $newname = $tmpname."_".$this->GetDateiName($datei['datei']); - - copy($this->GetDateiPfad($datei['datei']),$newname); - - $tmp[] = $newname; - } - return $tmp; - } - - function GetDateiSubjektObjekt($subjekt,$objekt,$parameter) - { - $dateien = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE subjekt LIKE '$subjekt' AND objekt LIKE '$objekt' AND parameter='$parameter' GROUP by datei"); - if(empty($dateien)) { - return null; - } - $tmp = []; - foreach($dateien as $datei) { - $tmp[] = $this->GetDateiPfad($datei['datei']); - } - return $tmp; - } - - function GetDateiPfad($id) - { - $version = $this->app->DB->Select("SELECT MAX(version) FROM datei_version WHERE datei='$id'"); - $newid = $this->app->DB->Select("SELECT id FROM datei_version WHERE datei='$id' AND version='$version' LIMIT 1"); - - return $this->GetDateiPfadVersion($newid); - } - - function GetDateiPfadVersion($id) - { - $dateipfad = $this->app->DB->Select("SELECT dateiname FROM datei_version WHERE id ='$id' LIMIT 1"); - if(is_file($dateipfad))return $dateipfad; - - $path = $this->GetDMSPath($id, $this->app->Conf->WFuserdata."/dms/".$this->app->Conf->WFdbname); - if($path)return $path."/".$id; - $path = $this->app->Conf->WFuserdata."/dms/".$this->app->Conf->WFdbname."/".$id; - return $path; - } - - function GetDateiVersion($id) - { - $path = $this->GetDateiPfadVersion($id); - return @file_get_contents($path); - } - - function GetDatei($id) - { - $path = $this->GetDateiPfad($id); - return @file_get_contents($path); - } - - function GetDateiSize($id) { - $path = $this->GetDateiPfad($id); - $size = 0; - if(@is_file($path)) { - $size = @filesize($path); - } - - if($size <= 1024){ - return $size . ' Byte'; - } - if($size <= 1024*1024){ - return number_format(($size / 1024), 2) . ' KB'; - } - return number_format(($size/1024/1024),2).' MB'; - } - - - - function SendDatei($id,$versionid='') { - session_write_close(); - ob_end_clean(); - set_time_limit(0); - - if($versionid>0){ - $newid = $versionid; - } else{ - $version = 0; - $newid = 0; - if((int)$id > 0) { - $version = $this->app->DB->Select("SELECT MAX(version) FROM datei_version WHERE datei='$id'"); - $newid = $this->app->DB->Select("SELECT id FROM datei_version WHERE datei='$id' AND version='$version' LIMIT 1"); - } - } - - - $name = $newid <=0?'':$this->app->DB->Select("SELECT dateiname FROM datei_version WHERE id='$newid' LIMIT 1"); - $path = ''; - if($id > 0){ - $path = $this->GetDateiPfad($id); - if(!@file_exists($path)) { - $path = ''; - } - } - //$name=basename($path); - - //filenames in IE containing dots will screw up the - //filename unless we add this - - if ( strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], "MSIE" ) > 0 ) - { - $header_name = 'Content-Disposition: attachment; filename="' . rawurlencode ( $name ) . '"' ; - } - else { - $header_name = 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode ( $name ) ; - } - - $contenttype= $this->content_type($name); - - //required, or it might try to send the serving //document instead of the file - header("Content-Type: $contenttype"); - header("Content-Length: " .(string)(empty($path)?0:@filesize($path)) ); - //header('Content-Disposition: inline; filename="'.$name.'"'); - //$name = $this->Dateinamen($name); - //header('Content-Disposition: attachment; filename="'.$name.'"'); - header($header_name); - - if(!empty($path) && $file = fopen($path, 'rb')){ - while( (!feof($file)) && (connection_status()==0) ){ - print(fread($file, 1024*8)); - flush(); - } - fclose($file); - } - return((connection_status()==0) and !connection_aborted()); - } - - - function content_type($name) { - // Defines the content type based upon the extension of the file - $contenttype = 'application/octet-stream'; - $contenttypes = array( 'html' => 'text/html', - 'htm' => 'text/html', - 'txt' => 'text/plain', - 'gif' => 'image/gif', - 'jpg' => 'image/jpeg', - 'png' => 'image/png', - 'sxw' => 'application/vnd.sun.xml.writer', - 'sxg' => 'application/vnd.sun.xml.writer.global', - 'sxd' => 'application/vnd.sun.xml.draw', - 'sxc' => 'application/vnd.sun.xml.calc', - 'sxi' => 'application/vnd.sun.xml.impress', - 'xls' => 'application/vnd.ms-excel', - 'ppt' => 'application/vnd.ms-powerpoint', - 'doc' => 'application/msword', - 'rtf' => 'text/rtf', - 'zip' => 'application/zip', - 'mp3' => 'audio/mpeg', - 'pdf' => 'application/pdf', - 'tgz' => 'application/x-gzip', - 'gz' => 'application/x-gzip', - 'vcf' => 'text/vcf' ); - - $name = str_replace("§", " ", $name); - foreach ($contenttypes as $type_ext => $type_name) { - if (preg_match ("/$type_ext$/i", $name)) $contenttype = $type_name; - } - return $contenttype; - } - - function getDateiTypen($modul=''){ - $dateiTypen=[]; - - switch($modul){ - case 'artikel': - $dateiTypen[] = ['wert' => 'Shopbild', 'beschriftung' => 'Standard Artikelbild (Shopbild)']; - $dateiTypen[] = ['wert' => 'Gruppenbild', 'beschriftung' => 'Standard Gruppenbild']; - $dateiTypen[] = ['wert' => 'Etikettenbild', 'beschriftung' => 'Etikettenbild']; - $dateiTypen[] = ['wert' => 'Bild', 'beschriftung' => 'Sonstiges Bild']; - $dateiTypen[] = ['wert' => 'Datenblatt', 'beschriftung' => 'Datenblatt']; - $dateiTypen[] = ['wert' => 'Druckbild', 'beschriftung' => 'Druckbild (300dpi)']; - $dateiTypen[] = ['wert' => 'Zertifikat', 'beschriftung' => 'Zertifikat Anhang (PDF)']; - break; - case 'projekt': - $dateiTypen[] = ['wert' => 'Briefpapier1', 'beschriftung' => 'Briefpapier Seite 1']; - $dateiTypen[] = ['wert' => 'Briefpapier2', 'beschriftung' => 'Briefpapier Seite 2']; - break; - case 'verbindlichkeit': - case 'kasse': - $dateiTypen[] = ['wert' => 'Belege', 'beschriftung' => 'Beleg']; - $dateiTypen[] = ['wert' => 'Quittung', 'beschriftung' => 'Quittung']; - break; - } - - $dateiTypen[] = ['wert' => 'Sonstige', 'beschriftung' => 'Sonstige Datei']; - $dateiTypen[] = ['wert' => 'Deckblatt', 'beschriftung' => 'Deckblatt']; - $dateiTypen[] = ['wert' => 'anhang', 'beschriftung' => 'Anhang']; - - //adresse unter defaulttypen, da profilbild nicht als default ausgewählt werden soll OS148717 - switch($modul){ - case 'adresse': - $dateiTypen[] = ['wert' => 'Profilbild', 'beschriftung' => 'Profilbild']; - break; - } - - if($modul !== ''){ - $zusaetzlicheStichworter = $this->app->DB->SelectArr( - "SELECT * FROM datei_stichwortvorlagen WHERE modul='$modul' OR modul='' ORDER by beschriftung" - ); - $cZusaetzlicheStichworter = empty($zusaetzlicheStichworter)?0:count($zusaetzlicheStichworter); - for($i=0;$i<$cZusaetzlicheStichworter;$i++){ - $dateiTypen[] = ['wert' => $zusaetzlicheStichworter[$i]['beschriftung'], 'beschriftung' => $zusaetzlicheStichworter[$i]['beschriftung']]; - } - } - - return $dateiTypen; - } - - function GetEtikettenbild($artikel,$return_dateiid=false) - { - $dateiid = $this->app->DB->Select( - sprintf( - "SELECT datei - FROM datei_stichwoerter - WHERE objekt LIKE 'Artikel' AND parameter = '%d' AND (subjekt LIKE 'Etikettenbild' OR subjekt LIKE 'Bild' OR subjekt LIKE 'Shopbild') - ORDER BY (subjekt like 'Etikettenbild') DESC, (subjekt like 'Bild') DESC - LIMIT 1", - (int)$artikel - ) - ); - - if($artikel <= 0 || $dateiid <= 0) { - return false; - } - - if($return_dateiid) { - return $dateiid; - } - - $filename = $this->GetDateiName($dateiid); - $path_info = pathinfo($filename); - return array('image'=>$this->GetDatei($dateiid),'filename'=>$filename,'extension'=>$path_info['extension']); - } - - - function GetArtikelStandardbild($artikel,$return_dateiid=false) - { - $dateiid = $this->app->DB->Select(sprintf(" - SELECT dv.datei AS datei - FROM datei_stichwoerter AS ds - JOIN (SELECT datei, MAX(id) AS id FROM datei_version GROUP BY datei) AS dv ON dv.datei = ds.datei - WHERE ds.objekt LIKE 'Artikel' AND - ds.parameter = '%d' AND - (ds.subjekt LIKE 'Shopbild' OR ds.subjekt LIKE 'Druckbild' OR ds.subjekt LIKE 'Bild') - ORDER BY ds.subjekt LIKE 'Shopbild' DESC, ds.subjekt LIKE 'Druckbild' DESC - LIMIT 1", - $artikel) - ); - - if($artikel <= 0 || $dateiid <= 0) { - return false; - } - if($return_dateiid) { - return $dateiid; - } - - $filename = $this->GetDateiName($dateiid); - $path_info = pathinfo($filename); - return array('image'=>$this->GetDatei($dateiid),'filename'=>$filename,'extension'=>$path_info['extension']); - } - - function DeleteEmailbackupMail($id,$adresse="") - { - if($adresse > 0) - { - $this->app->DB->Update("UPDATE emailbackup_mails SET geloescht=1 WHERE - webmail IN (SELECT id FROM emailbackup WHERE emailbackup.adresse = '$adresse' AND emailbackup.geloescht!=1) AND id='$id'"); - } else { - $this->app->DB->Update("UPDATE emailbackup_mails SET geloescht=1 WHERE id='$id' LIMIT 1"); - } - } - - function Wochenplan($adr_id,$parsetarget){ - $this->app->Tpl->Set('SUBSUBHEADING', "Wochenplan"); - $this->app->Tpl->Set('INHALT',""); - - $anzWochentage = 5; - $startStunde = 6; - $endStunde = 22; - - $wochentage = $this->getDates($anzWochentage); - - $inhalt = ""; - for($i=$startStunde;$i<=$endStunde;$i++){ // fuelle Zeilen 06:00 bis 22:00 - $zeile = array(); - $zeileCount = 0; - foreach($wochentage as $tag){ // hole Daten fuer Uhrzeit $i und Datum $tage - $result = $this->checkCell($tag, $i, $adr_id); - if($result[0]['aufgabe'] != "") - { - if($result[0]['adresse']==0) $color = '#ccc'; else $color='#BCEE68'; - if($result[0]['prio']==1) $color = 'red'; - - $zeile[$zeileCount] = '
'.$result[0]['aufgabe'].'
'; - } - else - $zeile[$zeileCount] = " "; - $zeileCount++; - } - $inhalt = $inhalt.$this->makeRow($zeile, $anzWochentage,$i.":00"); - } - $this->app->Tpl->Set('WOCHENDATUM', $this->makeRow($wochentage, $anzWochentage)); - $this->app->Tpl->Set('INHALT',$inhalt); - - $this->app->Tpl->Parse($parsetarget,"zeiterfassung_wochenplan.tpl"); - - $this->app->Tpl->Add($parsetarget," - -
".$this->app->User->GetName()."Prio: Sehr Hoch (".$this->app->User->GetName().")Allgemein
"); - } - - function getDates($anzWochentage){ - // hole Datum der Wochentage von Mo bis $anzWochentage - $montag = $this->app->DB->Select("SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE()) day)"); - $week = array(); - for($i=0;$i<$anzWochentage;$i++) - $week[$i] = $this->app->DB->Select("SELECT DATE_ADD('$montag',INTERVAL $i day)"); - return $week; - } - - function makeRow($data, $spalten, $erstefrei="frei"){ - // erzeuge eine Zeile in der Tabelle - // $erstefrei = 1 -> erste Spalte ist leer - - $row = ''; - if($erstefrei=="frei") - $row = $row.' '; - else - $row = $row.''.$erstefrei.''; - for($i=0;$i<$spalten; $i++) - $row = $row.''.$data[$i].''; - $row = $row.''; - return $row; - } - - - function KundeMitUmsatzsteuer($adresse) - { - $addressRow = $this->app->DB->SelectRow("SELECT land, ustid FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - $land = $addressRow['land']; - $ustid = $addressRow['ustid']; - if($land ==$this->Firmendaten('land')){ - return true; - } - - // wenn kunde EU - foreach($this->GetUSTEU() as $value) - { - //echo $value; - if($value==$land && $ustid!='') { - return false; - } - } - - // alle anderen laender = export - return false; - } - - function AuftragMitUmsatzsteuer($auftrag) - { - return $this->AuftragMitUmsatzeuer($auftrag); - } - - function AuftragMitUmsatzeuer($auftrag) - { - $docRow = $this->app->DB->SelectRow(sprintf('SELECT ust_befreit,ustid FROM auftrag WHERE id=%d LIMIT 1', $auftrag)); - return $docRow['ust_befreit'] == 0 - || ($docRow['ust_befreit'] == 1 && - $docRow['ustid'] ==''); - } - - function GutschriftMitUmsatzeuer($gutschrift) - { - $docRow = $this->app->DB->SelectRow(sprintf('SELECT ust_befreit,ustid FROM gutschrift WHERE id=%d LIMIT 1', $gutschrift)); - return $docRow['ust_befreit'] == 0 - || ($docRow['ust_befreit'] == 1 && - $docRow['ustid'] ==''); - } - - function PruefeMengeVPE($table, $posid, $menge) - { - if($posid <= 0)return $menge; - $_menge = $menge; - $beleg = str_replace('_position','',$table); - switch($table) - { - case 'auftrag_position': - case 'angebot_position': - case 'rechnung_position': - case 'gutschrift_position': - if(!$this->app->erp->Firmendaten('verkaufspreisevpe'))return $menge; - $artikel = $this->app->DB->Select("SELECT artikel FROM $table WHERE id = '$posid' LIMIT 1"); - $belegid = $this->app->DB->Select("SELECT $beleg FROM $table WHERE id = '$posid' LIMIT 1"); - $adresse = $this->app->DB->Select("SELECT adresse FROM $beleg WHERE id = '$belegid' LIMIT 1"); - $waehrung = $this->app->DB->Select("SELECT waehrung FROM $beleg WHERE id = '$belegid' LIMIT 1"); - $vp = $this->app->erp->GetVerkaufspreisKunde($artikel,$menge,$adresse,$waehrung,true); - if(!$vp)$vp = $this->app->erp->GetVerkaufspreis($artikel,$menge,$adresse,$waehrung, $returnwaehrung,true, true); - if($vp && $vp['vpe'] > 0) - { - if($vp['vpe'] * ceil($menge / $vp['vpe']) != $_menge) { - $this->app->DB->Update("UPDATE $table SET preis = '" . $vp['preis'] . "' WHERE id = '$posid' LIMIT 1"); - return $vp['vpe'] * ceil($menge / $vp['vpe']); - }else return $_menge; - } - break; - case 'bestellung_position': - if(!$this->app->erp->Firmendaten('einkaufspreisevpe'))return $menge; - $artikel = $this->app->DB->Select("SELECT artikel FROM $table WHERE id = '$posid' LIMIT 1"); - $belegid = $this->app->DB->Select("SELECT $beleg FROM $table WHERE id = '$posid' LIMIT 1"); - $adresse = $this->app->DB->Select("SELECT adresse FROM $beleg WHERE id = '$belegid' LIMIT 1"); - $waehrung = $this->app->DB->Select("SELECT waehrung FROM $beleg WHERE id = '$belegid' LIMIT 1"); - $ep = $this->app->erp->GetEinkaufspreisArr($artikel, $menge, $adresse, $waehrung, true); - if($ep && $ep['vpe'] > 0) - { - if($_menge != $ep['vpe'] * ceil($menge / $ep['vpe'])) { - $this->app->DB->Update("UPDATE $table SET preis = '" . $ep['preis'] . "' WHERE id = '$posid' LIMIT 1"); - return $ep['vpe'] * ceil($menge / $ep['vpe']); - }else return $_menge; - } - break; - } - return $menge; - } - - - - function Belegegesamt($tabellen = null, $where = '') - { - if(is_null($tabellen) || in_array('rechnung', $tabellen))$ret[] = " - select `rechnung`.`id` AS `id`,`rechnung`.`adresse` AS `adresse`,`rechnung`.`datum` AS `datum`,`rechnung`.`belegnr` AS `belegnr`,`rechnung`.`status` AS `status`,`rechnung`.`land` AS `land`,'rechnung' AS `typ`,`rechnung`.`umsatz_netto` AS `umsatz_netto`,`rechnung`.`soll` AS `umsatz_brutto`,`rechnung`.`erloes_netto` AS `erloes_netto`,`rechnung`.`deckungsbeitrag` AS `deckungsbeitrag`,`rechnung`.`provision_summe` AS `provision_summe`,`rechnung`.`vertriebid` AS `vertriebid`,`rechnung`.`gruppe` AS `gruppe`,`rechnung`.`projekt` AS `projekt`,`rechnung`.`waehrung` as `waehrung` - from `rechnung` $where - "; - if(is_null($tabellen) || in_array('gutschrift', $tabellen))$ret[] = " - select `gutschrift`.`id` AS `id`,`gutschrift`.`adresse` AS `adresse`,`gutschrift`.`datum` AS `datum`,`gutschrift`.`belegnr` AS `belegnr`,`gutschrift`.`status` AS `status`,`gutschrift`.`land` AS `land`,'gutschrift' AS `typ`,(`gutschrift`.`umsatz_netto` * -(1)) AS `umsatz_netto`,(`gutschrift`.`soll` * -(1)) AS `umsatz_brutto`,(`gutschrift`.`erloes_netto` * -(1)) AS `erloes_netto`,(`gutschrift`.`deckungsbeitrag` * -(1)) AS `deckungsbeitrag`,(`gutschrift`.`provision_summe` * -(1)) AS `provision_summe`,`gutschrift`.`vertriebid` AS `vertriebid`,`gutschrift`.`gruppe` AS `gruppe`,`gutschrift`.`projekt` AS `projekt`,`gutschrift`.`waehrung` as `waehrung` - from `gutschrift` $where - "; - - if(is_null($tabellen) || in_array('auftrag', $tabellen))$ret[] = " - select `auftrag`.`id` AS `id`,`auftrag`.`adresse` AS `adresse`,`auftrag`.`datum` AS `datum`,`auftrag`.`belegnr` AS `belegnr`,`auftrag`.`status` AS `status`,`auftrag`.`land` AS `land`,'auftrag' AS `typ`,`auftrag`.`umsatz_netto` AS `umsatz_netto`,`auftrag`.`gesamtsumme` AS `umsatz_brutto`,`auftrag`.`erloes_netto` AS `erloes_netto`,`auftrag`.`deckungsbeitrag` AS `deckungsbeitrag`,`auftrag`.`provision_summe` AS `provision_summe`,`auftrag`.`vertriebid` AS `vertriebid`,`auftrag`.`gruppe` AS `gruppe`, `auftrag`.`projekt` AS `projekt`,`auftrag`.`waehrung` as `waehrung` - from `auftrag` $where - "; - if(is_null($tabellen) || in_array('bestellung', $tabellen))$ret[] = " - union all select `bestellung`.`id` AS `id`,`bestellung`.`adresse` AS `adresse`,`bestellung`.`datum` AS `datum`,`bestellung`.`belegnr` AS `belegnr`,`bestellung`.`status` AS `status`,`bestellung`.`land` AS `land`,'bestellung' AS `typ`,`bestellung`.`gesamtsumme` AS `umsatz_netto`,`bestellung`.`gesamtsumme` AS `umsatz_brutto`,'0' AS `erloes_netto`,'0' AS `deckungsbeitrag`,'0' AS `provision_summe`,'0' AS `vertriebid`,'0' AS `gruppe`, `bestellung`.`projekt` AS `projekt`,`bestellung`.`waehrung` as `waehrung` - from `bestellung` $where - "; - if(is_null($tabellen) || in_array('lieferschein', $tabellen))$ret[] = " - union all select `lieferschein`.`id` AS `id`,`lieferschein`.`adresse` AS `adresse`,`lieferschein`.`datum` AS `datum`,`lieferschein`.`belegnr` AS `belegnr`,`lieferschein`.`status` AS `status`,`lieferschein`.`land` AS `land`,'lieferschein' AS `typ`,'0' AS `umsatz_netto`,'0' AS `umsatz_brutto`,'0' AS `erloes_netto`,'0' AS `deckungsbeitrag`,'0' AS `provision_summe`,'0' AS `vertriebid`,'0' AS `gruppe`, `lieferschein`.`projekt` AS `projekt`,'' as `waehrung` - from `lieferschein` $where - "; - return ' ('.implode(' UNION ALL ', $ret).') '; - } - - function SQLPosBrutto($belegtab, $postab, $arttab) - { - return " sum( - (if($belegtab.ust_befreit = 0 OR ($belegtab.ust_befreit = 1 AND $belegtab.ustid <> '' AND $belegtab.ustid <> '0'), - ( if(ifnull($postab.steuersatz,-1) <0, - if($postab.umsatzsteuer = 'befreit',0, - if($postab.umsatzsteuer = 'ermaessigt',$belegtab.steuersatz_ermaessigt, - if($postab.umsatzsteuer = 'normal',$belegtab.steuersatz_normal, - if($arttab.umsatzsteuer = 'befreit',0, - if($arttab.umsatzsteuer = 'ermaessigt',$belegtab.steuersatz_ermaessigt, - $belegtab.steuersatz_normal - ) - ) - ) - ) - ) - ,$postab.steuersatz)),0)/100+1 - ) - * - $postab.menge *($postab.preis * (1-$postab.rabatt/100))) - "; - } - - function RechnungMitUmsatzsteuer($rechnung) - { - $docRow = $this->app->DB->SelectRow(sprintf('SELECT ust_befreit,ustid FROM rechnung WHERE id=%d LIMIT 1', $rechnung)); - return $docRow['ust_befreit'] == 0 - || ($docRow['ust_befreit'] == 1 && - $docRow['ustid'] ==''); - } - - function RechnungMitUmsatzeuer($rechnung) - { - return $this->RechnungMitUmsatzsteuer($rechnung); - } - - - function ProformarechnungMitUmsatzeuer($rechnung) - { - $docRow = $this->app->DB->SelectRow(sprintf('SELECT ust_befreit,ustid FROM proformarechnung WHERE id=%d LIMIT 1', $rechnung)); - return $docRow['ust_befreit'] == 0 - || ($docRow['ust_befreit'] == 1 && - $docRow['ustid'] ==''); - - // wenn lieferant DE dann mit 19% oder 7% einkaufen - // wenn lieferant in der EU kann man mit 0% bezahlen - - // wenn lieferant in der welt sowieso keine steuer sondern zoll - - // wenn wir von privat EU kaufen dann muss mit steuer gekauft werden! (SPAETER KANN ES SEIN) - return false; - } - - - function AngebotMitUmsatzeuer($angebot) - { - return $this->app->DB->Select("SELECT ust_befreit FROM angebot WHERE id='$angebot' LIMIT 1") == 0 - || ($this->app->DB->Select("SELECT ust_befreit FROM angebot WHERE id='$angebot' LIMIT 1") == 1 && - $this->app->DB->Select("SELECT ustid FROM angebot WHERE id='$angebot' LIMIT 1") ==""); - - // wenn lieferant DE dann mit 19% oder 7% einkaufen - // wenn lieferant in der EU kann man mit 0% bezahlen - // wenn lieferant in der welt sowieso keine steuer sondern zoll - - // wenn wir von privat EU kaufen dann muss mit steuer gekauft werden! (SPAETER KANN ES SEIN) - } - - - function BestellungMitUmsatzeuer($bestellung) - { - return $this->app->DB->Select("SELECT ust_befreit FROM bestellung WHERE id='$bestellung' LIMIT 1") == 0; - - // wenn lieferant DE dann mit 19% oder 7% einkaufen - // wenn lieferant in der EU kann man mit 0% bezahlen - - // wenn lieferant in der welt sowieso keine steuer sondern zoll - - // wenn wir von privat EU kaufen dann muss mit steuer gekauft werden! (SPAETER KANN ES SEIN) - - } - - - function BesteuerungKunde($adresse) - { - if($this->AdresseUSTCheck($adresse)==0){ - return 'steuer'; - } - - return ''; - - // steuer muss gezahlt werden! steuer, euexport, exporr - - // wenn kunde im export muss keine steuer bezahlt werden! - - // wenn kunde gepruefte ust id hat && lieferung nach EU geht (aber das land verlaesst!) - - } - - - - function CheckLieferantEU($adresse) - { - // lieferant aus der EU - $land = $this->app->DB->Select("SELECT land FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); - - } - - - function CheckKundeEU($adresse) - { - - } - - function checkCell($datum, $stunde, $adr_id){ - // ueberprueft ob in der Stunde eine Aufgabe zu erledigen ist - //echo $datum." ".$stunde."
"; - return $this->app->DB->SelectArr("SELECT aufgabe,adresse,prio - FROM aufgabe - WHERE DATE(startdatum) = '$datum' - AND HOUR(TIME(startzeit)) <= $stunde - AND HOUR(TIME(startzeit)) + stunden >= $stunde - AND (adresse = $adr_id OR adresse = 0) - OR - ((DATE_SUB('$datum', INTERVAL MOD(DATEDIFF('$datum',DATE_FORMAT(startdatum, '%Y:%m:%d')),intervall_tage) day)='$datum' - AND DATE_SUB('$datum', INTERVAL MOD(DATEDIFF('$datum',DATE_FORMAT(startdatum, '%Y:%m:%d')),intervall_tage) day) - > abgeschlossen_am - AND intervall_tage>0 AND (adresse=$adr_id OR adresse=0)) - AND HOUR(TIME(startzeit)) <= $stunde AND HOUR(TIME(startzeit)) + stunden >= $stunde) - OR ( DATE (abgabe_bis) = '$datum' AND abgeschlossen=0 AND adresse = $adr_id AND HOUR(TIME(startzeit)) = $stunde) - LIMIT 1"); // letztes OR von Bene! - } - - function WebmailSetReadStatus($mailid,$boolean) - { - $this->app->DB->Update("UPDATE emailbackup_mails SET gelesen = ".($boolean?1:0)." WHERE id = $mailid"); - } - - function checkPDF($file,$maxSize=0,$x=0,$y=0) - { - - return ""; - } - function checkFile($file,$filetype,$maxSize=0) - { - if($file!='') - { - if(is_array($file)){ - $pfad = $file['tmp_name']; - } - else { - $pfad = $file; - } - } - - $dbtype = mime_content_type($pfad); - - if($dbtype==='application/octet-stream' && $filetype==='application/pdf'){ - return ''; - } - - if($dbtype!=$filetype){ - return "Falscher Dateityp! Es wird $filetype erwartet aber $dbtype wurde übergeben!"; - } - - return ''; - } - - - - public function checkImage($file,$maxSize=0,$x=0,$y=0,$typcheck=2) - { - // Prueft ein Bild auf Dateigroesse, Hoehe und Breite - if($file!='') - { - if(is_array($file)){ - $pfad = $file['tmp_name']; - } - else { - $pfad = $file; - } - } - $typ = GetImageSize($pfad); - $size = $file['size']; - - - if($maxSize==0){ - $fileSizeLimit = 16777216; // 16MB in BYTE, 100MB stehen in der upload_max_size - } - else{ - $fileSizeLimit = $maxSize; - } - - //if(0 < $typ[2] && $typ[2] < 4) - if($typ[2]==$typcheck) - { - if($size<$fileSizeLimit) - { - if($typ[0]>$x && $x!=0){ - $error = 'Das Bild ist zu breit.'; - } - if($typ[1]>$y && $y!=0){ - $error = 'Das Bild ist zu hoch.'; - }else{ - $error = ''; - } - }else{ - $error = 'Die Datei darf eine Größe von ' . ($fileSizeLimit / 8388608) . ' MB nicht überschreiten.'; - } - }else{ - $error = 'Die Datei muss vom korrekten Typ sein'; - } - return $error; - } - - public function uploadSettigsImage($file, $name) - { - if(empty($file) || empty($name) || empty($file['tmp_name'])) - { - return false; - } - $pfad = $file['tmp_name']; - $typ = @GetImageSize($pfad); - - // Bild hochladen - if($filehandle = fopen($pfad,'r')){ - $filedata = fread($filehandle, @filesize($pfad)); - $dbtype = $typ['mime']; - fclose($filehandle); - }else{ - return false; - } - $pfad2 = $this->GetUSERDATA(); - if(!is_dir($pfad2)) - { - if(!mkdir($pfad2) && !is_dir($pfad2)) - { - return false; - } - } - $pfad2 .= '/dms/'; - if(!is_dir($pfad2)) - { - if(!mkdir($pfad2) && !is_dir($pfad2)) - { - return false; - } - } - $pfad2 .= $this->app->Conf->WFdbname; - if(!is_dir($pfad2)) - { - if(!mkdir($pfad2) && !is_dir($pfad2)) - { - return false; - } - } - if(file_put_contents($pfad2.'/'.$name, $filedata)){ - return array('image' => base64_encode($filedata), 'type' => $dbtype); - } - return false; - } - - public function uploadImageIntoDB($file) - { - // Wandelt ein Bild fuer einen LONGBLOB um - $pfad = $file['tmp_name']; - $typ = @GetImageSize($pfad); - - // Bild hochladen - $filehandle = fopen($pfad,'r'); - $filedata = base64_encode(fread($filehandle, @filesize($pfad))); - $dbtype = $typ['mime']; - fclose($filehandle); - return array('image'=>$filedata,'type'=>$dbtype); - } - - - function GetEinkaufspreisWaehrung($id, $menge, $waehrung='', &$originalwaehrung=null, &$originalpreis=null, $adresse = '') - { - $artikelRow = $this->app->DB->SelectRow( - sprintf( - 'SELECT adresse,verwendeberechneterek,berechneterekwaehrung,berechneterek,produktion, stueckliste FROM artikel WHERE id = %d LIMIT 1 ', - (int)$id - ) - ); - if($adresse == '') { - $adresse = $artikelRow['adresse']; - } - if($waehrung == '') { - $waehrung = 'EUR'; - } - if($artikelRow['verwendeberechneterek']) - { - $originalwaehrung = (String)$artikelRow['berechneterekwaehrung']; - if($originalwaehrung === '') { - $originalwaehrung = 'EUR'; - } - $originalpreis = $artikelRow['berechneterek']; - if($originalwaehrung === $waehrung) { - return $originalpreis; - } - $kurs = $this->GetWaehrungUmrechnungskurs($originalwaehrung,$waehrung); - if($kurs==0) { - $kurs=1; - } - return $originalpreis * $kurs; - } - - - // wenn produktionsartikel - $produktion = $artikelRow['produktion']; - $stueckliste = $artikelRow['stueckliste']; - - if($produktion) { - } - else if($stueckliste==1)// && $juststueckliste!=1) - { - $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC LIMIT 1"); - if(!$eka) { - $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC LIMIT 1"); - } - if(!$eka) { - $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge LIMIT 1"); - } - if($eka && $eka[0]['preis'] != 0) - { - if($eka[0]['waehrung'] == '') { - $eka[0]['waehrung'] = 'EUR'; - } - $originalwaehrung = $eka[0]['waehrung']; - $originalpreis = $eka[0]['preis']; - if($eka[0]['waehrung'] == $waehrung) { - return $originalpreis; - } - return $originalpreis * $this->GetWaehrungUmrechnungskurs($originalwaehrung,$waehrung); - } - return $this->GetEinkaufspreisStuecklisteWaehrung($id, $waehrung); - } - - $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC LIMIT 1"); - if(!$eka) { - $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC LIMIT 1"); - } - if(!$eka) { - $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis>=NOW() OR ifnull(gueltig_bis,'0000-00-00')='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge LIMIT 1"); - } - if(!$eka) { - return 0; - } - if($eka[0]['waehrung'] == '') { - $eka[0]['waehrung'] = 'EUR'; - } - $originalwaehrung = $eka[0]['waehrung']; - $originalpreis = $eka[0]['preis']; - if($eka[0]['waehrung'] == $waehrung) { - return $originalpreis; - } - return $originalpreis * $this->GetWaehrungUmrechnungskurs($originalwaehrung,$waehrung); - } - - function GetEinkaufspreisArr($id, $menge, $adresse, $waehrung = "EUR", $auchpreisegrmenge = false) - { - $ek = $this->app->DB->SelectRow("SELECT * FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by waehrung = '$waehrung' DESC, waehrung = '' DESC, ab_menge DESC LIMIT 1"); - if(!$ek && $auchpreisegrmenge)$ek = $this->app->DB->SelectRow("SELECT * FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by waehrung = '$waehrung' DESC, waehrung = '' DESC, ab_menge ASC LIMIT 1"); - if(!$ek)return; - - if($ek['preis'] <=0) - { - $ek2 = $this->app->DB->SelectRow("SELECT * FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' - AND (gueltig_bis>=NOW() OR ifnull(gueltig_bis,'0000-00-00')='0000-00-00') AND geloescht=0 ORDER by waehrung = '$waehrung' DESC, waehrung = '' DESC,preis LIMIT 1"); - if($ek2)return $ek2; - } - return $ek; - } - - function GetEinkaufspreis($id,$menge,$adresse="") - { - // wenn produktionsartikel - $prodStueckliste = $this->app->DB->SelectRow("SELECT produktion, stueckliste FROM artikel WHERE id='$id' LIMIT 1"); - $produktion = $prodStueckliste['produktion']; - $stueckliste = $prodStueckliste['stueckliste']; - - if($produktion && $stueckliste) { - } - else if($stueckliste==1)// && $juststueckliste!=1) - { - $ek = $this->GetEinkaufspreisStueckliste($id); - } - else { - $ek = $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR ifnull(gueltig_bis,'0000-00-00')='0000-00-00') AND geloescht=0 ORDER by ab_menge DESC LIMIT 1"); - if($ek <=0) - { - $ek = $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE artikel='$id' AND ab_menge<='$menge' - AND (gueltig_bis>=NOW() OR ifnull(gueltig_bis,'0000-00-00')='0000-00-00') AND geloescht=0 ORDER by preis LIMIT 1"); - - if($ek <=0) - { - $ek = $this->app->DB->Select("SELECT MIN(preis) FROM einkaufspreise WHERE artikel='$id' - AND (gueltig_bis>=NOW() OR ifnull(gueltig_bis,'0000-00-00')='0000-00-00') AND geloescht=0 "); - } - } - } - return $ek; - } - - function Wechselkurs($von,$zu,$datum) - { - return 1.3; - } - - - function Rabatt($betrag,$rabatt) - { - $result = $betrag*(100-$rabatt)/100; - return number_format($result, 4, '.', ''); - } - - function GetGruppen($adresse) - { - $tmp = $this->app->DB->SelectArr("SELECT * FROM adresse_rolle WHERE adresse='$adresse' AND (bis > NOW() OR ifnull(bis,'0000-00-00')='0000-00-00') AND parameter > 0 AND objekt='Gruppe'"); - if(empty($tmp)) { - return null; - } - $result = []; - foreach($tmp as $row) { - $result[] = $row['parameter']; - } - - return $result; - } - - function MonatsListe($sprache = 'deutsch') { - - $monatsListe[1] = 'Januar'; - $monatsListe[2] = 'Februar'; - $monatsListe[3] = 'März'; - $monatsListe[4] = 'April'; - $monatsListe[5] = 'Mai'; - $monatsListe[6] = 'Juni'; - $monatsListe[7] = 'Juli'; - $monatsListe[8] = 'August'; - $monatsListe[9] = 'September'; - $monatsListe[10] = 'Oktober'; - $monatsListe[11] = 'November'; - $monatsListe[12] = 'Dezember'; - - return $monatsListe; - - } - - function IsSpezialVerkaufspreis($artikel,$menge,$adresse=0,$waehrung='EUR') - { - $vkarr = null; - $guenstigste_vk = $this->Firmendaten('guenstigste_vk'); - $gruppenarr = $this->GetGruppen($adresse); - $sql_erweiterung = ''; - if(!empty($gruppenarr)) - { - $sql_erweiterung .= ' OR v.gruppe IN ('.implode(' ', $gruppenarr).') '; - } - if(!$guenstigste_vk) { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <= '$menge' AND - (v.gueltig_bis > NOW() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= curdate() OR v.gueltig_ab = '0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse') - ORDER by ab_menge ASC, preis DESC LIMIT 1"); - } - if(empty($vkarr)) { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <= '$menge' AND - (v.gueltig_bis > NOW() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= curdate() OR v.gueltig_ab = '0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' $sql_erweiterung) - ORDER by ab_menge ASC, preis DESC LIMIT 1"); - } - - if(empty($vkarr)) { - return false; - } - - $letzte_menge = 0;//$vkarr[0][ab_menge]; - foreach($vkarr as $vkrow) { - if($vkrow['adresse']==$adresse && $vkrow['adresse']>0 && $vkrow['art']==='Kunde') { - return true; - } - if($vkrow['gruppe'] > 0 && $vkrow['art']==='Gruppe') { - return true; - } - } - - return false; - } - - var $preisliste; - - function GeneratePreisliste($artikel,$adresse,$rabatt=0, $waehrung = '') - { - $waehrungorig = $waehrung; - $sqlwaehrung = ""; - if($waehrung <> '') - { - if($waehrung == 'EUR') - { - $sqlwaehrung = " AND (v.waehrung = '$waehrung' OR v.waehrung = '') "; - }else{ - $sqlwaehrung = " AND v.waehrung = '$waehrung' "; - } - } - $sqlwaehrung2 = $sqlwaehrung; - if($waehrungorig == '')$sqlwaehrung2 = ''; - $vkarr = null; - $guenstigste_vk = $this->Firmendaten('guenstigste_vk'); - - $keinrabatterlaubt = $this->app->DB->Select("SELECT keinrabatterlaubt FROM artikel WHERE id='".$artikel."' LIMIT 1"); - - $gruppenarray = $this->GetGruppen($adresse); - if($gruppenarray) - { - if(count($gruppenarray)>0) $sql_erweiterung = " OR "; - for($gi=0;$giapp->DB->SelectArr("SELECT v.*,if((v.adresse > 0 OR v.gruppe > 0),v.preis,(v.preis*(100-$rabatt))/100.0) as rabattpreis FROM verkaufspreise v WHERE - (v.gueltig_bis > NOW() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR v.gueltig_ab='0000-00-00') $sqlwaehrung2 AND v.artikel='".$artikel."' AND (v.adresse='$adresse' AND v.art='Kunde') ORDER by rabattpreis ASC"); - if(!$vkarr) - { - $vkarr = $this->app->DB->SelectArr("SELECT v.*,if((v.adresse > 0 OR v.gruppe > 0),v.preis,(v.preis*(100-$rabatt))/100.0) as rabattpreis FROM verkaufspreise v WHERE - (v.gueltig_bis > NOW() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR v.gueltig_ab='0000-00-00') $sqlwaehrung2 AND v.artikel='".$artikel."' AND (v.adresse='$adresse' $sql_erweiterung ) ORDER by rabattpreis ASC"); - } - - } - if(!$vkarr) - { - // reinsortieren - $vkarr = $this->app->DB->SelectArr("SELECT v.*,if((v.adresse > 0 OR v.gruppe > 0),v.preis,(v.preis*(100-$rabatt))/100.0) as rabattpreis FROM verkaufspreise v WHERE - (v.gueltig_bis > NOW() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR v.gueltig_ab='0000-00-00') AND v.artikel='".$artikel."' $sqlwaehrung2 AND (v.adresse='$adresse' $sql_erweiterung OR - ((v.adresse='' OR v.adresse='0') AND v.art='Kunde')) ORDER by rabattpreis ASC"); - } - - $letzter_preis = 0; - - // einmal rueckwaerts aufraeumen - $cvkarr = !empty($vkarr)?count($vkarr):0; - for($vi=0;$vi<$cvkarr;$vi++) - { - // rabatt rausrechnen - if($keinrabatterlaubt!="1") - $vkarr[$vi]['preis'] = $vkarr[$vi]['rabattpreis']; - - if($vkarr[$vi]['preis'] > $letzter_preis && (($vkarr[$vi]['ab_menge'] < $letzte_menge) || $vi==0)) - { - // preis behalten - $letzte_menge = $vkarr[$vi]['ab_menge']; - $letzter_preis = $vkarr[$vi]['preis']; - } else { - // preis loeschen - $vkarr[$vi]['ab_menge']=0; - $vkarr[$vi]['preis']=0; - } - } - - for($vi=0;$vi<$cvkarr;$vi++) - { - if($vkarr[$vi]['ab_menge'] > 0) - $vkarr2[] = $vkarr[$vi]; - } - $vkarr = array_reverse($vkarr2); - // an schluss pruefen und unnötige rausschmeissen - return $vkarr; - } - - /** - * @param int $artikel - * @param float $menge - * @param int $gruppe - * @param null|string $waehrung - * - * @return array|null - */ - public function getVerkaufspreisGruppeArr($artikel, $menge, $gruppe, $waehrung = null) - { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= curdate() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND v.gruppe='$gruppe' AND v.art='Gruppe' - ".($waehrung===null?'':" AND v.waehrung = '$waehrung' ")." - ORDER by ab_menge DESC, preis ASC"); - if(!$vkarr && ($menge < 1)) { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <=1 AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= curdate() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND v.gruppe='$gruppe' AND v.art='Gruppe' - ".($waehrung===null?'':" AND v.waehrung = '$waehrung' ")." - ORDER by ab_menge DESC, preis ASC"); - } - if(empty($vkarr)) { - return null; - } - $letzte_menge = -1; //$vkarr[0][ab_menge]; - $letzter_preis = 99999999999; - - foreach($vkarr as $vk) - { - if(($vk['ab_menge'] > $letzte_menge) && ($vk['preis']<$letzter_preis) && (($menge < 1?1:$menge) >= $vk['ab_menge'])) - { - $letzte_menge = $vk['ab_menge']; - $letzter_preis = $vk['preis']; - $letztesarr = $vk; - } - } - - if(isset($letztesarr)) { - return $letztesarr; - } - return null; - } - - function GetVerkaufspreisGruppe($artikel, $menge, $gruppe = 0,$waehrung='EUR') - { - $vkarr = null; - if($gruppe) - { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= curdate() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND v.gruppe='$gruppe' AND v.art='Gruppe' - ORDER by ab_menge DESC, preis ASC"); - if(!$vkarr && ($menge < 1))$vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <=1 AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= curdate() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND v.gruppe='$gruppe' AND v.art='Gruppe' - ORDER by ab_menge DESC, preis ASC"); - } - if(!$vkarr) - { - return $this->GetVerkaufspreis($artikel, $menge, 0, $waehrung); - } - - $letzte_menge = -1; //$vkarr[0][ab_menge]; - $letzter_preis = 99999999999; - - for($vi=0;$vi $letzte_menge) && ($vkarr[$vi]['preis']<$letzter_preis) && (($menge < 1?1:$menge) >= $vkarr[$vi]['ab_menge'])) - { - $letzte_menge = $vkarr[$vi]['ab_menge']; - $letzter_preis = $vkarr[$vi]['preis']; - if($returnarr)$letztesarr = $vkarr[$vi]; - } - } - - if($returnarr) - { - if(isset($letztesarr))return $letztesarr; - return null; - } - - if($letzter_preis==99999999999) - $letzter_preis=0; - - return $letzter_preis; - } - - function GetVerkaufspreisKunde($artikel,$menge,$adresse=0,$waehrung='EUR',$returnarr = false) - { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= curdate() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND v.adresse='$adresse' AND v.art='Kunde' - ORDER by ab_menge DESC, preis ASC"); - - if(!$vkarr && ($menge < 1))$vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <=1 AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= curdate() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND v.adresse='$adresse' AND v.art='Kunde' - ORDER by ab_menge DESC, preis ASC"); - - $letzte_menge = -1; //$vkarr[0][ab_menge]; - $letzter_preis = 99999999999; - - for($vi=0;$vi $letzte_menge) && ($vkarr[$vi]['preis']<$letzter_preis) && (($menge < 1?1:$menge) >= $vkarr[$vi]['ab_menge'])) - { - $letzte_menge = $vkarr[$vi]['ab_menge']; - $letzter_preis = $vkarr[$vi]['preis']; - if($returnarr)$letztesarr = $vkarr[$vi]; - } - } - - if($returnarr) - { - if(isset($letztesarr))return $letztesarr; - return null; - } - - if($letzter_preis==99999999999) - $letzter_preis=0; - - return $letzter_preis; - } - - function GetVerkaufspreisWaehrung($artikel,$menge,$adresse=0) - { - $gruppenarr = $this->GetGruppen($adresse); - $cgruppenarr = !empty($gruppenarr)?count($gruppenarr):0; - for($i=0;$i<$cgruppenarr;$i++) - { - if($gruppenarr[$i]>0) - $sql_erweiterung .= " OR gruppe='".$gruppenarr[$i]."' "; - } - - $vkarr = null; - $guenstigste_vk = $this->Firmendaten('guenstigste_vk'); - $gruppenarr = $this->GetGruppen($adresse); - $cgruppenarr = !empty($gruppenarr)?count($gruppenarr):0; - for($i=0;$i<$cgruppenarr;$i++) - { - if($gruppenarr[$i]>0) - $sql_erweiterung .= " OR gruppe='".$gruppenarr[$i]."' "; - } - if(!$guenstigste_vk) - { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' AND v.art='Kunde') ORDER by preis ASC, ab_menge DESC"); - - if(!$vkarr && ($menge < 1))$vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <= 1 AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' AND v.art='Kunde') ORDER by preis ASC, ab_menge DESC"); - - if(!$vkarr) - { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' $sql_erweiterung) ORDER by ab_menge DESC, preis ASC"); - if(!$vkarr && ($menge < 1))$this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <=1 AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' $sql_erweiterung) ORDER by ab_menge DESC, preis ASC"); - } - - } - if(!$vkarr) - { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' $sql_erweiterung OR - ((v.adresse='' OR v.adresse='0') AND v.art='Kunde')) ORDER by ab_menge DESC, preis ASC"); - if(!$vkarr && ($menge < 1))$vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <=1 AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' $sql_erweiterung OR - ((v.adresse='' OR v.adresse='0') AND v.art='Kunde')) ORDER by ab_menge DESC, preis ASC"); - } - - $letzte_menge = -1; //$vkarr[0][ab_menge]; - $letzter_preis = 99999999999; - $cvkarr = !empty($vkarr)?count($vkarr):0; - for($vi=0;$vi<$cvkarr;$vi++) - { - if(($vkarr[$vi]['ab_menge'] > $letzte_menge) && ($vkarr[$vi]['preis']<$letzter_preis) && (($menge < 1?1:$menge) >= $vkarr[$vi]['ab_menge'])) - { - $letzte_menge = $vkarr[$vi]['ab_menge']; - $letzter_preis = $vkarr[$vi]['preis']; - $waehrung = $vkarr[$vi]['waehrung']; - } - } - - return $waehrung; - } - - - function GetVerkaufspreisBrutto($artikel,$menge,$adresse=0,$waehrung='EUR', &$returnwaehrung = '') - { - $tmp = $this->app->DB->SelectArr("SELECT *,nummer as artikelnummer, name_de as artikel_name_de FROM artikel WHERE id='$artikel' LIMIT 1"); - $projekt = $tmp[0]['projekt']; - if($tmp[0]['umsatzsteuer']=="ermaessigt") - $steuer = ($this->GetStandardSteuersatzErmaessigt($projekt) + 100)/100.0; - elseif($tmp[0]['umsatzsteuer']=="befreit") - $steuer = 1; - else - $steuer = ($this->GetStandardSteuersatzNormal($projekt) + 100)/100.0; - return $this->GetVerkaufspreis($artikel,$menge,$adresse,$waehrung)*$steuer; - } - - function GetSteuersatzBelegpos($doctype, $doctypeid, $pos) - { - $arr = $this->app->DB->SelectArr("SELECT steuersatz, umsatzsteuer, artikel FROM $doctype"."_position WHERE id = '$pos' LIMIT 1"); - if($arr) - { - if(!is_null($arr[0]['steuersatz']) && $arr[0]['steuersatz'] >= 0)return $arr[0]['steuersatz']; - if($arr[0]['umsatzsteuer'] == 'befreit')return 0; - if($arr[0]['umsatzsteuer'] == 'ermaessigt')return (float)$this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); - if($arr[0]['umsatzsteuer'] != '')return (float)$this->app->DB->Select("SELECT steuersatz_normal FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); - $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '".$arr[0]['artikel']."' LIMIT 1"); - if($umsatzsteuer == 'befreit')return 0; - if($umsatzsteuer == 'ermaessigt')return (float)$this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); - return (float)$this->app->DB->Select("SELECT steuersatz_normal FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); - } - } - - function GetVerkaufspreis($artikel,$menge,$adresse=0,$waehrung='', &$returnwaehrung = '',$returnarr = false, $auchpreisegrmenge = false) - { - $waehrungold = $waehrung; - $firmendatenwaehrung = $this->app->erp->Firmendaten('waehrung'); - if($firmendatenwaehrung == '')$firmendatenwaehrung = 'EUR'; - if($waehrung == '')$waehrung = $firmendatenwaehrung; - if($waehrung == $firmendatenwaehrung) - { - $extrasql = " AND (v.waehrung = '$waehrung' OR v.waehrung = '') "; - }else{ - $extrasql = " AND v.waehrung = '$waehrung' "; - } - - $extrasql2 = $extrasql; - if($waehrungold == '')$extrasql2 = ''; - - $vkarr = null; - $guenstigste_vk = $this->Firmendaten('guenstigste_vk'); - $gruppenarr = $this->GetGruppen($adresse); - $sql_erweiterung = ''; - if($gruppenarr) { - for ($i = 0; $i < count($gruppenarr); $i++) { - if ($gruppenarr[$i] > 0) - $sql_erweiterung .= " OR gruppe='" . $gruppenarr[$i] . "' "; - } - } - if(!$guenstigste_vk) - { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND - (v.gueltig_bis >= CURDATE() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR v.gueltig_ab='0000-00-00') AND v.artikel='".$artikel."' $extrasql2 AND (v.adresse='$adresse' AND v.art='Kunde') ORDER by ab_menge DESC, preis ASC"); - - if(!$vkarr && ($menge < 1))$vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <= 1 AND - (v.gueltig_bis >= CURDATE() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR v.gueltig_ab='0000-00-00') AND v.artikel='".$artikel."' $extrasql2 AND (v.adresse='$adresse' AND v.art='Kunde') ORDER by ab_menge DESC, preis ASC"); - - if(!$vkarr) - { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND - (v.gueltig_bis >= CURDATE() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR v.gueltig_ab='0000-00-00') AND v.artikel='".$artikel."' $extrasql2 AND ((v.art <> 'Kunde' AND (0 $sql_erweiterung )) OR - ((v.adresse='$adresse') AND v.art='Kunde')) ORDER by ab_menge DESC, preis ASC"); - if(!$varr && ($menge < 1)) - { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <= 1 AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' $extrasql2 AND ((v.art <> 'Kunde' AND (0 $sql_erweiterung )) OR - ((v.adresse='$adresse') AND v.art='Kunde')) ORDER by ab_menge DESC, preis ASC"); - } - } - } - if(!$vkarr) - { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' $extrasql AND ((v.art <> 'Kunde' AND (0 $sql_erweiterung )) OR - ((v.adresse='' OR v.adresse='0' OR v.adresse='$adresse') AND v.art='Kunde')) ORDER by preis ASC, ab_menge DESC"); - - if(!$vkarr && ($menge < 1)) - { - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <=1 AND - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' $extrasql AND ((v.art <> 'Kunde' AND (0 $sql_erweiterung )) OR - ((v.adresse='' OR v.adresse='0' OR v.adresse='$adresse') AND v.art='Kunde')) ORDER by preis ASC, ab_menge DESC"); - } - } - - if(!$vkarr && $auchpreisegrmenge){ - $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE - (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' $extrasql AND ((v.art <> 'Kunde' AND (0 $sql_erweiterung )) OR - ((v.adresse='' OR v.adresse='0' OR v.adresse='$adresse') AND v.art='Kunde')) ORDER by ab_menge ASC LIMIT 1"); - }else{ - $auchpreisegrmenge = false; - } - $letzte_menge = -1; //$vkarr[0][ab_menge]; - $letzter_preis = 99999999999; - if($vkarr) - { - for($vi=0;$vi $letzte_menge) && ($vkarr[$vi]['preis']<$letzter_preis) && ((($menge >= 1?$menge:1) >= $vkarr[$vi]['ab_menge'])|| $auchpreisegrmenge)) - { - $letzte_menge = $vkarr[$vi]['ab_menge']; - $letzter_preis = $vkarr[$vi]['preis']; - $letzte_gruppe = $vkarr[$vi]['gruppe']; - if($returnarr)$letztesarr = $vkarr[$vi]; - $returnwaehrung = $vkarr[$vi]['waehrung']?$vkarr[$vi]['waehrung']:'EUR'; - } - } - } - - if($letzter_preis==99999999999) - $letzter_preis=0; - if($returnarr) - { - if(isset($letztesarr))return $letztesarr; - return null; - } - - return $letzter_preis; - } - - function GetEinkaufspreisStatistikWaehrung($id,$waehrung = '', $max=false, $lvl = 0) - { - if($lvl > 5)return 0; - //Falls Einkaufspreis definiert - - $menge = 1; - $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC, preis ".($max?'DESC':'ASC')." LIMIT 1"); - if(!$eka)$eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC LIMIT 1"); - if(!$eka)$eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC LIMIT 1"); - $originalwaehrung = $eka[0]['waehrung']; - $originalpreis = $eka[0]['preis']; - if($eka[0]['waehrung'] == $waehrung)return $originalpreis; - $ep = $originalpreis * $this->GetWaehrungUmrechnungskurs($originalwaehrung,$waehrung); - if($ep)return $ep; - - - - $sql = "SELECT FORMAT( - SUM( - - ( - SELECT e.preis * - - if(e.waehrung != '',ifnull( - (SELECT kurs FROM waehrung_umrechnung WHERE waehrung_von = '$waehrung' AND waehrung_nach = e.waehrung AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1), - ifnull((SELECT 1/kurs FROM waehrung_umrechnung WHERE waehrung_nach = '$waehrung' AND waehrung_von = e.waehrung AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1),1)), - ifnull((SELECT kurs FROM waehrung_umrechnung WHERE waehrung_von = '$waehrung' AND waehrung_nach = 'EUR' AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1), - ifnull((SELECT 1/kurs FROM waehrung_umrechnung WHERE waehrung_nach = '$waehrung' AND waehrung_von = 'EUR' AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1),1)) - - ) - FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') ORDER BY waehrung = '$waehrung' DESC, waehrung = '' DESC, preis ".($min?'ASC':'DESC')." LIMIT 1 - - ) - - *s.menge) - ,2) - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id'"; - - $preis = $this->app->DB->Select($sql); - //Kein Einkaufspreis definiert => Stückliste - - $sql = "SELECT s.artikel - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id' and a.stueckliste = '1' - "; - $startikel = $this->app->DB->SelectArr($sql); - if($startikel) - { - foreach($startikel as $art) - $preis += $this->GetEinkaufspreisStatistikWaehrung($art['artikel'],$waehrung,$max, $lvl + 1); - } - - return $preis; - - } - - - function GetEinkaufspreisStatistik($id,$max=false, $lvl = 0) - { - if($lvl > 5)return 0; - //Falls Einkaufspreis definiert - if($max) - { - $ep = $this->app->DB->Select("SELECT FORMAT(MAX(e.preis),2) FROM einkaufspreise e where e.artikel = $id AND (e.objekt='Standard' OR e.objekt='')"); - if($ep)return $ep; - } else { - $ep = $this->app->DB->Select("SELECT FORMAT(MIN(e.preis),2) FROM einkaufspreise e where e.artikel = $id AND (e.objekt='Standard' OR e.objekt='')"); - if($ep)return $ep; - } - //Kein Einkaufspreis definiert => Stückliste - if($max) { - $preis_max = 0; - $ids = $this->app->DB->SelectArr("SELECT s.artikel from stueckliste s LEFT JOIN artikel a ON a.id=s.artikel WHERE s.stuecklistevonartikel='$id' and a.stueckliste != '1' "); - if($ids) - { - foreach($ids as $v)$subwherea[] = $v['artikel']; - $swhere = " (a.id = ". implode(' OR a.id = ',$subwherea).")"; - $sql = " - - SELECT format( SUM(if (ep>0,ep,vp)),2) - from (SELECT MAX(e.preis) as ep, MAX(v.preis) vp FROM artikel a left join einkaufspreise e on a.id = e.artikel left join verkaufspreise v on a.id = v.artikel - WHERE $swhere ) q - - "; - $preis_max = $this->app->DB->Select($sql); - } - $sql = "SELECT s.artikel - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id' and a.stueckliste = '1' - "; - $startikel = $this->app->DB->SelectArr($sql); - if($startikel) - { - foreach($startikel as $art) - $preis_max += $this->GetEinkaufspreisStatistik($art['artikel'],$max, $lvl + 1); - } - return $preis_max; - } - $sql = " SELECT format( SUM(if (ep>0,ep,vp)),2) - from (SELECT MIN(e.preis) as ep, MIN(v.preis) vp FROM artikel a left join einkaufspreise e on a.id = e.artikel left join verkaufspreise v on a.id = v.artikel - WHERE a.id in ( SELECT s.artikel from stueckliste s LEFT JOIN artikel a ON a.id=s.artikel WHERE s.stuecklistevonartikel='$id' and a.stueckliste != '1') ) q"; - $preis = $this->app->DB->Select($sql); - $sql = "SELECT s.artikel - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id' and a.stueckliste = '1' - "; - $startikel = $this->app->DB->SelectArr($sql); - if($startikel) - { - foreach($startikel as $art) - $preis += $this->GetEinkaufspreisStatistik($art['artikel'],$max, $lvl + 1); - } - - return $preis; - } - - function GetEinkaufspreisStuecklisteWaehrung($id, $waehrung = '', $min = false) - { - if($waehrung == '')$waehrung = 'EUR'; - $sql = "SELECT - SUM( - - ( - SELECT e.preis * - - if(e.waehrung != '',ifnull( - (SELECT kurs FROM waehrung_umrechnung WHERE waehrung_von = '$waehrung' AND waehrung_nach = e.waehrung AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1), - ifnull((SELECT 1/kurs FROM waehrung_umrechnung WHERE waehrung_nach = '$waehrung' AND waehrung_von = e.waehrung AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1),1)), - ifnull((SELECT kurs FROM waehrung_umrechnung WHERE waehrung_von = '$waehrung' AND waehrung_nach = 'EUR' AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1), - ifnull((SELECT 1/kurs FROM waehrung_umrechnung WHERE waehrung_nach = '$waehrung' AND waehrung_von = 'EUR' AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1),1)) - - ) - FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis >= CURDATE() OR ifnull(e.gueltig_bis, '0000-00-00') = '0000-00-00') ORDER BY waehrung = '$waehrung' DESC, waehrung = '' DESC, preis ".($min?'ASC':'DESC')." LIMIT 1 - - ) - - *s.menge) - - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id'"; - - - $preis_max = round((float)$this->app->DB->Select($sql),2); - - $sql = "SELECT - SUM( - - ( - SELECT e.preis * - - if(e.waehrung != '',ifnull( - (SELECT kurs FROM waehrung_umrechnung WHERE waehrung_von = '$waehrung' AND waehrung_nach = e.waehrung AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1), - ifnull((SELECT 1/kurs FROM waehrung_umrechnung WHERE waehrung_nach = '$waehrung' AND waehrung_von = e.waehrung AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1),1)), - ifnull((SELECT kurs FROM waehrung_umrechnung WHERE waehrung_von = '$waehrung' AND waehrung_nach = 'EUR' AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1), - ifnull((SELECT 1/kurs FROM waehrung_umrechnung WHERE waehrung_nach = '$waehrung' AND waehrung_von = 'EUR' AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1),1)) - - ) - FROM verkaufspreise e WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis >= CURDATE() OR ifnull(e.gueltig_bis, '0000-00-00') = '0000-00-00') ORDER BY waehrung = '$waehrung' DESC, waehrung = '' DESC, preis ".($min?'ASC':'DESC')." LIMIT 1 - - ) - - *s.menge) - - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id' AND a.stueckliste = 1"; - - return round($preis_max + (float)$this->app->DB->Select($sql),2); - - } - - function GetEinkaufspreisStueckliste($id,$max=false) - { - $sql = "SELECT SUM( - (SELECT MAX(e.preis) FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00') AND e.geloescht=0)*s.menge) - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id'"; - - $preis_max = $this->app->DB->Select($sql); - - $sql = "SELECT SUM( - (SELECT MAX(v.preis) FROM verkaufspreise v WHERE v.artikel=s.artikel AND a.stueckliste=1 AND (v.objekt='Standard' OR v.objekt=''))*s.menge) - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id'"; - - $preis_max = $preis_max + $this->app->DB->Select($sql); - - $sql = "SELECT SUM( - (SELECT MIN(e.preis) FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00') AND e.geloescht=0)*s.menge) - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id'"; - - $preis = $this->app->DB->Select($sql); - $sql = "SELECT SUM( - (SELECT MIN(v.preis) FROM verkaufspreise v WHERE v.artikel=s.artikel AND a.stueckliste=1 AND (v.objekt='Standard' OR v.objekt=''))*s.menge) - FROM stueckliste s - LEFT JOIN artikel a ON a.id=s.artikel - WHERE s.stuecklistevonartikel='$id'"; - - $preis = $preis + $this->app->DB->Select($sql); - - if($max) return $preis_max; - else return $preis; - } - - - /** - * @param string $name Filename - * @param string $base64encoded if true return base64_encoded File - * @return string Filecontent - */ - public function getSettingsFile($name, $base64encoded = false) - { - if(empty($name)) - { - return ''; - } - $pfad = $this->GetUSERDATA().'/dms/'.$this->app->Conf->WFdbname.'/'.$name; - if(!is_file($name)) - { - $ret = $this->Firmendaten($name); - if(empty($ret)) - { - return ''; - } - if($base64encoded) - { - return $ret; - } - return base64_decode($ret); - } - $ret = (String)file_get_contents($pfad); - if(!$base64encoded) - { - return $ret; - } - return base64_encode($ret); - } - - - /** - * @param array $file File from Formr - * @param string $name Filename - * @return array|bool content and type or false if failed - */ - public function uploadSettigsFile($file, $name) - { - if(empty($file) || empty($name) || empty($file['tmp_name'])) - { - return false; - } - $pfad = $file['tmp_name']; - - $dbtype = mime_content_type($pfad); - // Bild hochladen - $filehandle = fopen($pfad,'r'); - if(!empty($filehandle)){ - $filedata = fread($filehandle, @filesize($pfad)); - fclose($filehandle); - }else{ - return false; - } - $pfad2 = $this->GetUSERDATA(); - if(!is_dir($pfad2)) - { - if(!mkdir($pfad2) && !is_dir($pfad2)) - { - return false; - } - } - $pfad2 .= '/dms/'; - if(!is_dir($pfad2)) - { - if(!mkdir($pfad2) && !is_dir($pfad2)) - { - return false; - } - } - $pfad2 .= $this->app->Conf->WFdbname; - if(!is_dir($pfad2)) - { - if(!mkdir($pfad2) && !is_dir($pfad2)) - { - return false; - } - } - if(file_put_contents($pfad2.'/'.$name,$filedata)) - { - return array('file'=>base64_encode($filedata),'type'=>$dbtype); - } - - return false; - } - - public function uploadFileIntoDB($file) - { - // Wandelt ein Bild fuer einen LONGBLOB um - $pfad = $file['tmp_name']; - - $dbtype = mime_content_type($pfad); - // Bild hochladen - $filehandle = fopen($pfad,'r'); - $filedata = base64_encode(fread($filehandle, @filesize($pfad))); - fclose($filehandle); - return array('file'=>$filedata,'type'=>$dbtype); - } - - // im format hh:mm - public function ZeitinMenge($zeit) - { - $zeit = explode(':', $zeit); - - $komma = round(100/(60/$zeit[1]),0); - - $komma = str_pad($komma, 2 ,'0', STR_PAD_LEFT); - - return $zeit[0].','.$komma; - } - - function get_time_difference($start_time_o, $end_time_o){ - $start_time = explode(':', $start_time_o); - $end_time = explode(':', $end_time_o); - - $start_time_stamp = mktime($start_time[0], $start_time[1], 0, 0, 0, 0); - $end_time_stamp = mktime($end_time[0], $end_time[1], 0, 0, 0, 0); - - $time_difference = $end_time_stamp - $start_time_stamp; - - return gmdate('H:i', $time_difference); - } - - function is_html($str){ - $html = array('A','ABBR','ACRONYM','ADDRESS','APPLET','AREA','B','BASE','BASEFONT','BDO','BIG','BLOCKQUOTE','BODY','BR','BUTTON','CAPTION','CENTER','CITE','CODE','COL','COLGROUP','DD','DEL','DFN','DIR','DIV','DL','DT','EM','FIELDSET','FONT','FORM','FRAME','FRAMESET','H1','H2','H3','H4','H5','H6','HEAD','HR','HTML','I','IFRAME','IMG','INPUT','INS','ISINDEX','KBD','LABEL','LEGEND','LI','LINK','MAP','MENU','META','NOFRAMES','NOSCRIPT','OBJECT','OL','OPTGROUP','OPTION','P','PARAM','PRE','Q','S','SAMP','SCRIPT','SELECT','SMALL','SPAN','STRIKE','STRONG','STYLE','SUB','SUP','TABLE','TBODY','TD','TEXTAREA','TFOOT','TH','THEAD','TITLE','TR','TT','U','UL','VAR'); - return preg_match_all("~(<\/?)\b(".implode('|',$html).")\b([^>]*>)~i",$str,$c); - } - - function ImportCreateLieferadresse($adresse,$data) - { - $this->app->DB->Insert("INSERT INTO lieferadressen (id,adresse) VALUES ('','$adresse')"); - $id = $this->app->DB->GetInsertID(); - - if($data['land']=="") $data['land']='DE'; - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE lieferadressen SET $key='".$this->app->DB->real_escape_string($value)."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - function ImportCreateAnsprechpartner($adresse,$data) - { - $this->app->DB->Insert("INSERT INTO ansprechpartner (id,adresse) VALUES ('','$adresse')"); - $id = $this->app->DB->GetInsertID(); - if (!empty($id)) { - $this->app->erp->RunHook('contact_person_created', 1, $id); - } - if($data['land']=="") $data['land']='DE'; - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE ansprechpartner SET $key='".$this->app->DB->real_escape_string($value)."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - function ImportCreateAdresse($data, $uf8 = true) - { - $this->app->DB->Insert("INSERT INTO adresse (id) VALUES ('')"); - $id = $this->app->DB->GetInsertID(); - - if($data['firma']=="") $data['firma']=1; - if($data['projekt']=="") $data['projekt']=1; - - $columns = $this->app->DB->GetColArray("adresse"); - foreach ($columns as $keyi => $columnname) - $arr_columns[] = $columnname; - - - foreach ($data as $key => $value) { - if(in_array($key, $arr_columns)) - { - if($tmp_fields!="") $tmp_fields .=","; - if($uf8) - { - $tmp_fields .= " $key='".$this->ConvertForDBUTF8($value)."' "; - } else { - $tmp_fields .= " $key='".$value."' "; - } - } - } - $this->app->DB->Update("UPDATE adresse SET $tmp_fields WHERE id='$id'"); - return $id; - } - - - function ImportCreateArtikel($data, $utf8 = true) - { - $this->app->DB->Insert("INSERT INTO artikel (id) VALUES ('')"); - $id = $this->app->DB->GetInsertID(); - - if($data['firma']=="") $data['firma']=1; - if($data['projekt']=="") $data['projekt']=1; - - foreach ($data as $key => $value) { - if($utf8) - { - $this->app->DB->Update("UPDATE artikel SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); - }else{ - $this->app->DB->Update("UPDATE artikel SET $key='".$this->app->DB->real_escape_string( $value)."' WHERE id='$id' LIMIT 1"); - } - } - return $id; - } - - // nicht mehr verwenden - function ImportCreateEinkaufspreis($data) { - $this->app->DB->Insert("INSERT INTO einkaufspreise (id) VALUES ('')"); - $id = $this->app->DB->GetInsertID(); - - if($data['firma']=="") $data['firma']=1; - if($data['projekt']=="") $data['projekt']=1; - - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE einkaufspreise SET $key='".$this->ConvertForDBUFT8($value)."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - // nicht mehr verwenden - function ImportCreateVerkaufspreis($data) { - $this->app->DB->Insert("INSERT INTO verkaufspreise (id) VALUES ('')"); - $id = $this->app->DB->GetInsertID(); - - if($data['firma']=="") $data['firma']=1; - if($data['projekt']=="") $data['projekt']=1; - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE verkaufspreise SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - function ImportCreateUser($data) { - $this->app->DB->Insert("INSERT INTO user (id) VALUES ('')"); - $id = $this->app->DB->GetInsertID(); - - if($data['firma']=="") $data['firma']=1; - if($data['projekt']=="") $data['projekt']=1; - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE user SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - - function ImportCreateBestellung($data) { - $this->app->DB->Insert("INSERT INTO bestellung (id,angelegtam) VALUES ('',NOW())"); - $id = $this->app->DB->GetInsertID(); - - if($data['firma']=="") $data['firma']=1; - if($data['projekt']=="") $data['projekt']=1; - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE bestellung SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - function ImportCreateRechnung($data) { - $this->app->DB->Insert("INSERT INTO rechnung (id,angelegtam) VALUES ('',NOW())"); - $id = $this->app->DB->GetInsertID(); - - if($data['firma']=="") $data['firma']=1; - if($data['projekt']=="") $data['projekt']=1; - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE rechnung SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - function ImportCreateAngebot($data) { - $this->app->DB->Insert("INSERT INTO angebot (id,angelegtam) VALUES ('',NOW())"); - $id = $this->app->DB->GetInsertID(); - - if($data['firma']=="") $data['firma']=1; - if($data['projekt']=="") $data['projekt']=1; - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE angebot SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - function ImportCreateAuftrag($data) { - $this->app->DB->Insert("INSERT INTO auftrag (id,angelegtam) VALUES ('',NOW())"); - $id = $this->app->DB->GetInsertID(); - - if($data['firma']=="") $data['firma']=1; - if($data['projekt']=="") $data['projekt']=1; - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE auftrag SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - function ImportCreateLieferschein($data) { - $this->app->DB->Insert("INSERT INTO lieferschein (id,angelegtam) VALUES ('',NOW())"); - $id = $this->app->DB->GetInsertID(); - - if($data['firma']=="") $data['firma']=1; - if($data['projekt']=="") $data['projekt']=1; - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE lieferschein SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - function ImportCreateGutschrift($data) { - $this->app->DB->Insert("INSERT INTO gutschrift (id,angelegtam) VALUES ('',NOW())"); - $id = $this->app->DB->GetInsertID(); - - if($data['firma']=="") $data['firma']=1; - if($data['projekt']=="") $data['projekt']=1; - - foreach ($data as $key => $value) { - $this->app->DB->Update("UPDATE gutschrift SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); - } - return $id; - } - - function CheckArtikel($id) - { - $standardlieferant = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id='$id' LIMIT 1"); - $standardlieferant_ek = $this->app->DB->Select("SELECT adresse FROM einkaufspreise WHERE artikel='$id' AND geloescht!=1 AND standard=1 LIMIT 1"); - if($standardlieferant <= 0 || ($standardlieferant_ek!=$standardlieferant && $standardlieferant > 0 && $standardlieferant_ek > 0)) - { - $standardlieferant = $this->app->DB->Select("SELECT adresse FROM einkaufspreise WHERE artikel='$id' AND geloescht!=1 - AND (gueltig_bis='0000-00-00' OR gueltig_bis >= NOW()) ORDER by standard DESC LIMIT 1"); - - if($standardlieferant > 0) - { - $this->app->DB->Update("UPDATE artikel SET adresse='$standardlieferant' WHERE id='$id' LIMIT 1"); - } - } - } - - - function FirmenDatenStandard() - { - - if($this->app->DB->Select("SELECT COUNT(id) FROM firmendaten") > 0) return; - $this->app->DB->Insert("INSERT INTO `firmendaten` (`id`,`firma`, `logo`, `briefpapier`, `signatur`, `datum`, `steuersatz_normal`, `steuersatz_zwischen`, `steuersatz_ermaessigt`, `steuersatz_starkermaessigt`, `steuersatz_dienstleistung`, `deviceserials`, `lizenz`, `schluessel`, `mlm_mindestbetrag`, `mlm_letzter_tag`, `mlm_erster_tag`, `mlm_letzte_berechnung`, `mlm_01`, `mlm_02`, `mlm_03`, `mlm_04`, `mlm_05`, `mlm_06`, `mlm_07`, `mlm_08`, `mlm_09`, `mlm_10`, `mlm_11`, `mlm_12`, `mlm_13`, `mlm_14`, `mlm_15`, `zahlung_rechnung_sofort_de`, `zahlung_rechnung_de`, `zahlung_vorkasse_de`, `zahlung_lastschrift_de`, `zahlung_nachnahme_de`, `zahlung_bar_de`, `zahlung_paypal_de`, `zahlung_amazon_de`, `zahlung_kreditkarte_de`, `zahlung_ratenzahlung_de`, `briefpapier2`, `freifeld1`, `freifeld2`, `freifeld3`, `freifeld4`, `freifeld5`, `freifeld6`, `firmenfarbehell`, `firmenfarbedunkel`, `firmenfarbeganzdunkel`, `navigationfarbe`, `navigationfarbeschrift`, `unternavigationfarbe`, `unternavigationfarbeschrift`, `firmenlogo`, `rechnung_header`, `lieferschein_header`, `angebot_header`, `auftrag_header`, `gutschrift_header`, `bestellung_header`, `arbeitsnachweis_header`, `provisionsgutschrift_header`, `rechnung_footer`, `lieferschein_footer`, `angebot_footer`, `auftrag_footer`, `gutschrift_footer`, `bestellung_footer`, `arbeitsnachweis_footer`, `provisionsgutschrift_footer`, `eu_lieferung_vermerk`, `export_lieferung_vermerk`, `zahlung_amazon_bestellung_de`, `zahlung_billsafe_de`, `zahlung_sofortueberweisung_de`, `zahlung_secupay_de`, `adressefreifeld1`, `adressefreifeld2`, `adressefreifeld3`, `adressefreifeld4`, `adressefreifeld5`, `adressefreifeld6`, `adressefreifeld7`, `adressefreifeld8`, `adressefreifeld9`, `adressefreifeld10`, `zahlung_eckarte_de`, `benutzername`, `passwort`, `host`, `port`,`mailssl`,`devicekey`,`mailanstellesmtp`,`layout_iconbar`,`name`,`firmenfarbe`,`betreffszeile`,`dokumententext`,`bcc1`,`bcc2`) VALUES - (1, 1, '', '', 'LS0NCk11c3RlcmZpcm1hIEdtYkgNCk11c3RlcndlZyA1DQpELTEyMzQ1IE11c3RlcnN0YWR0DQoNClRlbCArNDkgMTIzIDEyIDM0IDU2IDcNCkZheCArNDkgMTIzIDEyIDM0IDU2IDc4DQoNCk5hbWUgZGVyIEdlc2VsbHNjaGFmdDogTXVzdGVyZmlybWEgR21iSA0KU2l0eiBkZXIgR2VzZWxsc2NoYWZ0OiBNdXN0ZXJzdGFkdA0KDQpIYW5kZWxzcmVnaXN0ZXI6IE11c3RlcnN0YWR0LCBIUkIgMTIzNDUNCkdlc2Now6RmdHNmw7xocnVuZzogTWF4IE11c3Rlcm1hbg0KVVN0LUlkTnIuOiBERTEyMzQ1Njc4OQ0KDQpBR0I6IGh0dHA6Ly93d3cubXVzdGVyZmlybWEuZGUvDQo=', '0000-00-00 00:00:00', 19.00, 7.00, 7.00, 7.00, 7.00, '', '', '', 50.00, NULL, NULL, NULL, 15.00, 20.00, 28.00, 32.00, 36.00, 40.00, 44.00, 44.00, 44.00, 44.00, 50.00, 54.00, 45.00, 48.00, 60.00, 'Rechnung zahlbar sofort.', 'Rechnung zahlbar innerhalb {ZAHLUNGSZIELTAGE} Tage bis zum {ZAHLUNGBISDATUM}.', '', '', '', '', '', '', '', '', NULL, '', '', '', '', '', '', '', '', '', '#e0e0e0', '#686868', '', '', NULL, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '','mustermann3','passwort','smtp.ihr_mail_server.de','25','1','','0','0','Musterfirma GmbH','#ececec','9','9','',''"); - $tmpid = $this->app->DB->GetInsertID(); - - $obj = $this->app->erp->LoadModul('firmendaten'); - if($obj)$obj->FirmendatenBriefpapiervorlage(); - } - - function pruefeDBgen($echo = false) - { - $dir = dirname(__FILE__).'/../objectapi/mysql/_gen'; - if(file_exists($dir)) - { - if ($handle = opendir($dir)) { - while (false !== ($entry = readdir($handle))) - { - if(strpos($entry, 'object.gen.') !== false) - { - $table = str_replace('.php','',str_replace('object.gen.','',$entry)); - $Felder = $this->app->DB->SelectArr("Describe ".addslashes($table)); - if(true) - { - if(isset($class_methods))unset($class_methods); - if($fh = fopen($dir.'/'.$entry, 'r')) - { - $classfound = false; - $fertig = false; - - while(!$fertig && $line = fgets($fh)) - { - - if($classfound) - { - - if(strpos($line, '=') !== false) - { - - $funktion = trim(substr($line, 0,strpos($line, '='))); - $class_methods[] = str_replace(';','',$funktion); - } - elseif(strpos($line, '$this->app->DB->Update') !== false) - { - - $fertig = true; - } - } else { - if(strpos($line,'$sql = "UPDATE') !== false) - { - - $classfound = true; - } - } - - - - } - fclose($fh); - - } - - - $class = 'ObjGen'.ucfirst($table); - } - if($Felder) { - //if(!class_exists($class)) include_once($dir.'/'.$entry); - - //$tmp = ; - //if(class_exists($class)){ - if($classfound && isset($class_methods)) - { - //$class_methods = get_class_methods(new $class($this->app)); - //$class_methods = get_class_methods($class); - //echo "Class: ".$class."\r\n"; - foreach($class_methods as $key => $val) - { - if(strpos($val,'Get') !== false) - { - $found = false; - foreach($Felder as $k => $v) - { - if('get'.strtolower($v['Field']) == strtolower($val))$found = true; - } - if(!$found)$Feldnichtgefunden[$table][] = $val; - //echo "Feld ".substr($val,3)." nicht gefunden\r\n"; - - } - - } - foreach($Felder as $k => $v) - { - if($v['Field'] != 'id'){ - $found = false; - foreach($class_methods as $key => $val) - { - if(strtolower($v['Field']) == strtolower($val))$found = true; - } - if(!$found)$keineFunktion[$table][] = $v['Field']; - } - } - } - - } else { - if($classfound && isset($class_methods)) - $tablenotfound[] = $table; - - } - - $ret = false; - if(isset($tablenotfound))$ret['tablenotfound'] = $tablenotfound; - if(isset($Feldnichtgefunden))$ret['FeldernichtinDatenbank'] = $Feldnichtgefunden; - if(isset($keineFunktion))$ret['FeldernichtinGen'] = $keineFunktion; - if($echo) - { - if($ret){ - print_r($ret); - }else{ - echo "Alles OK"; - } - } - @closedir($handle); - return $ret; - - } - - - - } - @closedir($handle); - return false; - } - @closedir($handle); - } - } - - function pdfmirrorZuArchiv($id) - { - $checkmirror = $this->app->DB->SelectRow("SELECT p.* FROM pdfmirror_md5pool p WHERE id = '$id' LIMIT 1"); - if($checkmirror) - { - $filegroup = @filegroup($this->app->Conf->WFuserdata); - $fileowner = @fileowner($this->app->Conf->WFuserdata); - $dir = $this->app->Conf->WFuserdata."/pdfmirror/".$this->app->Conf->WFdbname."/".$checkmirror['table_name']; - $dir_archiv = $this->app->Conf->WFuserdata."/pdfarchiv/".$this->app->Conf->WFdbname."/".$checkmirror['table_name']; - if(!is_dir($dir)) - { - return false; - } - - $vars = glob($dir."/".($checkmirror['checksum']?$checkmirror['checksum'].'_':'').$checkmirror['table_id'].'_*.pdf'); - if(!$vars) - { - return false; - } - - $path_parts = pathinfo($vars[0]); - - $datei = $path_parts['basename']; - $dateia = explode('_', $path_parts['filename'],($checkmirror['checksum']?4:3)); - $belegnummer = $dateia[($checkmirror['checksum']?3:2)]; - if(strlen($belegnummer) < 3 && !is_numeric($belegnummer)) - { - $belegnr = $this->app->DB->Select("SELECT belegnr FROM ".$this->app->DB->real_escape_string(strtolower($checkmirror['table_name']))." WHERE id = '".$checkmirror['table_id']."' LIMIT 1"); - if($belegnr)$belegnummer.=$belegnr; - - } - - $datum = $dateia[($checkmirror['checksum']?2:1)]; - if(strlen($datum) == 8) - { - $datum = $datum[6].$datum[7].'.'.$datum[4].$datum[5].'.'.$datum[0].$datum[1].$datum[2].$datum[3]; - }else{ - $datum = ''; - } - $doctyporig = $belegnummer.($datum?' von '.$datum:''); - - if(!file_exists($dir."/".$checkmirror['checksum'].'_'.$checkmirror['table_id'])) - if(!is_dir($this->app->Conf->WFuserdata."/pdfarchiv")) - { - mkdir($this->app->Conf->WFuserdata."/pdfarchiv",0700); - if($fileowner && $fileowner != fileowner($this->app->Conf->WFuserdata."/pdfarchiv"))chown($this->app->Conf->WFuserdata."/pdfarchiv", $fileowner); - if($filegroup && $filegroup != filegroup($this->app->Conf->WFuserdata."/pdfarchiv"))chgrp($this->app->Conf->WFuserdata."/pdfarchiv", $filegroup); - - } - if(!is_dir($dir_archiv)) - { - if(!mkdir($dir_archiv, 0700)) - { - //echo "Konnte ".$dir_archiv." nicht erstellen\r\n"; - return false; - } else { - if($fileowner && $fileowner != fileowner($dir_archiv))chown($dir_archiv, $fileowner); - if($filegroup && $filegroup != filegroup($dir_archiv))chgrp($dir_archiv, $filegroup); - } - } - $dir_archivnew = Briefpapier::getPDFfolder($dir_archiv,$checkmirror['table_id'], $datei,false,true); - if($dir_archivnew === false) - { - $dir_archivnew = $dir_archiv."/".$datei; - } - //if(!copy($dir."/".$datei, $dir_archiv."/".$datei)) - if(!copy($dir."/".$datei, $dir_archivnew)) - { - //echo "Kopieren von ".$dir."/".$datei." nach ".$dir_archiv."/".$datei." fehlgeschlagen\r\n"; - return false; - } else { - /* - if($fileowner && $fileowner != fileowner($dir_archiv."/".$datei))chown($dir_archiv."/".$datei, $fileowner); - if($filegroup && $filegroup != filegroup($dir_archiv."/".$datei))chgrp($dir_archiv."/".$datei, $filegroup); */ - } - - $this->app->DB->Insert("INSERT INTO pdfarchiv (zeitstempel,checksum, table_id, table_name, bearbeiter, erstesoriginal, dateiname,doctypeorig, belegnummer) - values ('".$checkmirror['zeitstempel']."','".$this->app->DB->real_escape_string($checkmirror['checksum'])."','".$this->app->DB->real_escape_string($checkmirror['table_id'])."','".$this->app->DB->real_escape_string($checkmirror['table_name'])."','".$this->app->DB->real_escape_string($checkmirror['bearbeiter'])."','".$checkmirror['erstesoriginal']."', - - '".$datei."','".$this->app->DB->real_escape_string($doctyporig)."','".$this->app->DB->real_escape_string($belegnummer)."') - - "); - if($this->app->DB->error()){ - throw new Exception("SQL Error: ".$this->app->DB->error()." SQL: INSERT INTO pdfarchiv (zeitstempel,checksum, table_id, table_name, bearbeiter, erstesoriginal, dateiname,doctypeorig, belegnummer) - values ('" . $checkmirror['zeitstempel'] . "','" . $this->app->DB->real_escape_string($checkmirror['checksum']) . "','" . $this->app->DB->real_escape_string($checkmirror['table_id']) . "','" . $this->app->DB->real_escape_string($checkmirror['table_name']) . "','" . $this->app->DB->real_escape_string($checkmirror['bearbeiter']) . "','" . $checkmirror['erstesoriginal'] . "', - - '" . $datei . "','" . $this->app->DB->real_escape_string($doctyporig) . "','" . $this->app->DB->real_escape_string($belegnummer) . "') - - "); - } - $newid = $this->app->DB->GetInsertID(); - if($newid)$this->app->DB->Update("UPDATE pdfmirror_md5pool set pdfarchiv_id = '$newid' WHERE id = '$id' LIMIT 1"); - return $newid; - } - return false; - } - function AnzeigeAbweichendeBezeichnung($typ) - { - switch($typ) - { - case "auftrag": - $tmp = $this->app->erp->Beschriftung("bezeichnungauftragersatz"); - break; - case "angebot": - $tmp = $this->app->erp->Beschriftung("bezeichnungangebotersatz"); - break; - case "rechnung": - $tmp = $this->app->erp->Beschriftung("bezeichnungrechnungersatz"); - break; - case "lieferschein": - $tmp = $this->app->erp->Beschriftung("bezeichnunglieferscheinersatz"); - break; - case "bestellung": - $tmp = $this->app->erp->Beschriftung("bezeichnungbestellungersatz"); - break; - - - case "proformarechnung": - $tmp = $this->app->erp->Beschriftung("bezeichnungproformarechnungersatz"); - break; - - } - if($tmp == "") $tmp = "Abweichende Bezeichnung"; - $this->app->Tpl->Set('ABWEICHENDEBEZEICHNUNGBESCHRIFTUNG',$tmp); - } - - - - function AnzeigeFreifelderPositionen($form = null) - { - - $module = $this->app->Secure->GetGET('module'); - - switch($module) { - case 'angebot': $kurz='an'; break; - case 'auftrag': $kurz='ab'; break; - case 'rechnung': $kurz='re'; break; - case 'gutschrift': $kurz='gs'; break; - case 'lieferschein': $kurz='ls'; break; - case 'bestellung': $kurz='be'; break; - case 'proformarechnung': $kurz='pr'; break; - case 'preisanfrage': $kurz='pa'; break; - case 'produktion': $kurz='pd'; break; - default: - $kurz = ''; - break; - } - - for($i=1;$i<=40;$i++) { - if($this->Firmendaten('freifeld'.$i.$kurz)!='1') { - $this->app->Tpl->Set('FREIFELD'.$i.'START',''); - } - elseif($this->Firmendaten('freifeld'.$i.'typ') === 'select') { - $id = $this->app->Secure->GetGET('id'); - $options = explode('|',$this->Firmendaten('freifeld'.$i)); - unset($options[0]); - if($form !== null) { - $field = new HTMLSelect('freifeld'.$i,0,'freifeld'.$i,'','','0'); - - foreach($options as $option) { - $option = explode('=>', $option); - $key = trim($option[0]); - $value = !empty($option[1])?trim($option[1]):''; - $field->AddOption($key, $value); - } - $form->NewField($field); - } - }elseif($this->Firmendaten('freifeld'.$i.'typ') === 'checkbox') { - $fieldName = 'freifeld'.$i; - $field = new HTMLCheckbox($fieldName, '','','1'); - $form->NewField($field); - if(!empty($this->app->Secure->GetPOST('nummer')) && empty($this->app->Secure->GetPOST($fieldName))) { - $form->HTMLList[$fieldName]->htmlvalue = '0'; - } - }elseif($this->Firmendaten('freifeld'.$i.'typ') === 'mehrzeilig') { - $field = new HTMLTextarea('freifeld'.$i, 5,75); - $form->NewField($field); - } - } - } - - function OpenstreetmapGetLangLat($apikey,$query) - { - $query = urlencode(html_entity_decode($query)); - $url = sprintf('https://api.openrouteservice.org/geocode/search?text=%s&api_key=%s', $query, $apikey); - - $timeout=0; - while(1) - { - $timeout++; - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); - curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); - curl_setopt($ch, CURLOPT_HTTPHEADER, array( - 'Content-Type: application/json', - 'Charset: utf-8') - ); - $result = curl_exec($ch); - if(strpos($result,"404 page not")===false) break; - if($timeout > 10) { - $this->app->erp->LogFile("Openstreetmap GetLangLat Timeout: $url"); - break; - } - } - $data = json_decode((string)$result); - return $data->{'features'}[0]->{'geometry'}->{'coordinates'}; - } - - function OpenstreetmapGetDistance($apikey,$coord1,$coord2) - { - $url = "https://api.openrouteservice.org/directions?coordinates=".$coord1[0]."%2C".$coord1[1]."%7C".$coord2[0]."%2C".$coord2[1]."&profile=driving-car&preference=fastest&units=km&language=de&geometry=true&geometry_format=encodedpolyline&geometry_simplify=false&instructions=true&instructions_format=text&elevation=false&options=%7B%7D&api_key=$apikey"; - - $timeout=0; - while(1) - { - $timeout++; - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); - curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); - curl_setopt($ch, CURLOPT_HTTPHEADER, array( - 'Content-Type: application/json', - 'Charset: utf-8') - ); - $result = curl_exec($ch); - if(strpos($result,"404 page not")===false) break; - if($timeout > 10) { - $this->app->erp->LogFile("Openstreetmap Distance Timeout: $url"); - break; - } - - } - $data = json_decode((string)$result); - return $data->{'routes'}[0]->{'summary'}->{'distance'}; - } - - function GetFloat($str) { - if(strstr($str, ',') !== false) { - $str = str_replace(['.',','], ['','.'], $str); // replace dots (thousand seps) with blancs - } - - if(preg_match("#([0-9\.]+)#", $str, $match)) { // search for number that may contain '.' - return (float)$match[0]; - } - return (float)$str; // take some last chances with floatval - } - - - - function CheckboxEntwurfsmodus($doctype,$id) - { - $datumentwurf = $this->app->DB->Select("SELECT datum FROM $doctype WHERE id='$id' LIMIT 1"); - $datumentwurf = str_replace('-','',$datumentwurf); - if($datumentwurf == date('Ymd')) { - return ''; - } - $anzeigedatum = $this->app->DB->Select("SELECT DATE_FORMAT(datum,'%d.%m.%Y') FROM $doctype WHERE id='$id' LIMIT 1"); - - $check = $this->app->User->GetParameter($doctype."_create_entwurfsdatumuebernehmen"); - $extra = " Entwurfsdatum vom $anzeigedatum übernehmen"; - $this->app->YUI->AutoSaveUserParameter($doctype."_create_entwurfsdatumuebernehmen",$doctype."_create_entwurfsdatumuebernehmen"); - - return $extra; - } - - function ZeiterfassungAllowEdit($datum_db) - { - if(!$this->app->erp->Firmendaten('zeiterfassung_schliessen')) { - return true; - } - - if($this->app->erp->RechteVorhanden('zeiterfassung', 'bearbeitenerlauben')) { - return true; - } - - if($datum_db != '--' && $datum_db != '0000-00-00' && $datum_db != '') { - if(strtotime(date('Y-m-d')) - strtotime($datum_db) > 86400*(int)$this->app->erp->Firmendaten('zeiterfassung_schliessentage')) { - return false; - } - } - - return true; - } - - function GetBundeslaender($land = '', $bundesland = '') - { - if($land == '') { - $land = $this->app->erp->Firmendaten('land'); - } - $arr = $this->app->DB->SelectArr("SELECT * FROM bundesstaaten WHERE land = '".$this->app->DB->real_escape_string($land)."' AND iso <> '' ORDER BY land, bundesstaat"); - if(empty($arr)) { - return null; - } - $ret = null; - foreach($arr as $v) - { - if($land == $v['iso'] || $land == '') - { - if($v['aktiv'] || $v['iso'] == $bundesland) - { - $ret[$v['iso']] = $v['bundesland']; - } - } - } - return $ret; - } - - - function GetPlacetelSipuid() - { - $username = $this->app->User->GetUsername(); - $accounts = $this->GetKonfiguration("placetel_list_accounts"); - - $tmp = explode(PHP_EOL,trim($accounts)); - $sipuid = false; - - if($this->RechteVorhanden('placetel','call')) - { - foreach($tmp as $row) { - $subtmp = explode(':',trim($row)); - - if(count($subtmp)>0) - { - $subtmp[0] = trim($subtmp[0]); - $subtmp[1] = trim($subtmp[1]); - - if($subtmp[0]==$username) - { - $sipuid = $subtmp[1]; - break; - } - } - } - } - return $sipuid; - } -} - - -function parse_csv($str,$parse_split_parameter="") -{ - global $parse_split; - if($parse_split_parameter!="") $parse_split=$parse_split_parameter; - //match all the non-quoted text and one series of quoted text (or the end of the string) - //each group of matches will be parsed with the callback, with $matches[1] containing all the non-quoted text, - //and $matches[3] containing everything inside the quotes - $str = preg_replace_callback('/([^"]*)("((""|[^"])*)"|$)/s', 'parse_csv_quotes', $str); - - //remove the very last newline to prevent a 0-field array for the last line - $str = preg_replace('/\n$/', '', $str); - - //split on LF and parse each line with a callback - return array_map('parse_csv_line', explode("\n", $str)); - } - - //replace all the csv-special characters inside double quotes with markers using an escape sequence - function parse_csv_quotes($matches) - { - global $parse_split; - if($parse_split=='') { - $parse_split=';'; - } - //anything inside the quotes that might be used to split the string into lines and fields later, - //needs to be quoted. The only character we can guarantee as safe to use, because it will never appear in the unquoted text, is a CR - //So we're going to use CR as a marker to make escape sequences for CR, LF, Quotes, and Commas. - $str = str_replace(["\r","\n",'""',$parse_split], ["\rR","\rN","\rQ","\rC"], !empty($matches[3])?$matches[3]:''); - - //The unquoted text is where commas and newlines are allowed, and where the splits will happen - //We're going to remove all CRs from the unquoted text, by normalizing all line endings to just LF - //This ensures us that the only place CR is used, is as the escape sequences for quoted text - return preg_replace('/\r\n?/', "\n", !empty($matches[1])?$matches[1]:'') . $str; - } - -//split on comma and parse each field with a callback -function parse_csv_line($line) -{ - global $parse_split; - if($parse_split=="") $parse_split=";"; - return array_map('parse_csv_field', explode($parse_split, $line)); -} - -//restore any csv-special characters that are part of the data -function parse_csv_field($field) { - global $parse_split; - if($parse_split=="") $parse_split=";"; - $field = str_replace("\rC", $parse_split, $field); - $field = str_replace("\rQ", '"', $field); - $field = str_replace("\rN", "\n", $field); - $field = str_replace("\rR", "\r", $field); - return $field; -} - - -function code2utf($num) -{ - if ($num < 128) return chr($num); - if ($num < 2048) return chr(($num >> 6) + 192) . chr(($num & - 63) + 128); - if ($num < 65536) return chr(($num >> 12) + 224) . - chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128); - if ($num < 2097152) return chr(($num >> 18) + 240) . - chr((($num >> 12) & 63) + 128) . chr((($num >> 6) & 63) + 128) . chr(($num - & 63) + 128); - return ''; -} +app=$app; + if(empty($this->app->erp)){ + $this->app->erp = $this; + } + $this->firstlogtime = microtime(true); + $this->logtime = microtime(true); + + if(defined('SCRIPT_START_TIME')) + { + $this->firstlogtime = SCRIPT_START_TIME; + } + $this->cache = null; + $this->menuquery = null; + $this->BriefpapierHintergrunddisable = false; + } + + /** + * @param string $category + * @param string $name + * @param string $status + * @param string $message + */ + public function setSystemHealth($category, $name, $status, $message = '') { + /** @var Systemhealth $obj */ + $obj = $this->LoadModul('systemhealth'); + if(empty($obj)) { + return; + } + $obj->changeStatus($category, $name, $status, $message); + } + + public function loadCronjobObj() + { + $dbName = $this->app->Conf->WFdbname; + /** @var Prozessstarter cronjobObj */ + if(empty($this->cronjobObj) || empty($this->cronjobObjDb) || $this->cronjobObjDb !== $dbName) { + $this->cronjobObj = $this->app->loadModule('prozessstarter', true); + $this->cronjobObjDb = $this->app->Conf->WFdbname; + } + } + + /** + * @param string $status + * @param null|int $prozessstarter + */ + public function ProzessstarterStatus($status, $prozessstarter = null) + { + $this->loadCronjobObj(); + if(empty($this->cronjobObj)) { + return; + } + if(method_exists($this->cronjobObj,'setCronjobStatus')) { + $this->cronjobObj->setCronjobStatus($status, $prozessstarter); + } + } + + /** + * @param array $output + * @param array $task + */ + public function checkCronjobMemory($output, $task) + { + $this->loadCronjobObj(); + if(method_exists($this->cronjobObj,'checkCronjobMemory')) { + $this->cronjobObj->checkCronjobMemory($output, $task); + } + } + + public function checkIfCronjobRunning($uid, $task) + { + $this->loadCronjobObj(); + if(method_exists($this->cronjobObj,'checkIfCronjobRunning')) { + $this->cronjobObj->checkIfCronjobRunning($uid, $task); + } + } + + public function checkCronjobRunning($uid, $task) { + $this->loadCronjobObj(); + if(empty($this->cronjobObj)) { + return; + } + if(method_exists($this->cronjobObj,'checkCronjobRunning')) { + return $this->cronjobObj->checkCronjobRunning($uid, $task); + } + return true; + } + + public function closeAndLogCronjob($uid, $fromStarter2 = false) + { + $this->loadCronjobObj(); + if(method_exists($this->cronjobObj,'closeAndLogCronjob')) { + $this->cronjobObj->closeAndLogCronjob($uid, $fromStarter2); + } + } + + public function setCronjobRunning($uid, $task = null, $active = true) { + $this->loadCronjobObj(); + if(empty($this->cronjobObj)) { + return; + } + if(method_exists($this->cronjobObj,'setCronjobRunning')) { + $this->cronjobObj->setCronjobRunning($uid, $task, $active); + } + } + + // @bruno + public function TrackingCSV($datei, $versand, $append = false, $uebertragung = 0) + { + if((int)$versand <= 0 || $datei == ''){ + return false; + } + $arr = $this->app->DB->SelectRow("SELECT ".($uebertragung?" am.id_ext as auftragextid, ":"")." v.tracking, l.belegnr, if(ifnull(l.sprache,'') = '',ifnull(a.sprache,''),l.sprache) as tracking_sprache, l.name, v.versandart FROM versand v INNER JOIN lieferschein l ON v.lieferschein = l.id AND v.id = '$versand' + LEFT JOIN auftrag a ON l.auftragid = a.id + ".($uebertragung?" + LEFT JOIN api_mapping am ON am.tabelle = 'auftrag' AND am.uebertragung_account = '$uebertragung' AND id_int = a.id + ":"")." + LIMIT 1"); + if($arr) + { + $file_ex = @is_file($datei); + $handle = @fopen($datei, $append?'a':'w'); + if($handle) + { + if(!$append || !$file_ex) + { + $output = ""; + foreach($arr as $k => $v)$output .= $k.';'; + $output .= "\r\n"; + fputs($handle, $output); + } + $output = ""; + foreach($arr as $k2 => $v2) + { + $output .= '"'.$v2.'"'.';'; + } + $output .= "\r\n"; + fputs($handle, $output); + fclose($handle); + return true; + } + } + return false; + } + +/** + * @bruno Prüfen ob es weg kann + * + * @deprecated + * + * @param $beleg + * + * @return void + */ +public function checkPDFClass($beleg) +{ + if(empty($beleg)) + { + return; + } + $classcustom = ucfirst($beleg).'PDFCustom'; + $class = ucfirst($beleg).'PDF'; + if(class_exists($classcustom) || class_exists($class) || !file_exists(__DIR__.'/dokumente/class.'.$beleg.'.php')){ + return; + } + if(!defined('FPDF_FONTPATH')){ + define('FPDF_FONTPATH',__DIR__.'/pdf/font/'); + } + if(!class_exists('FPDFWAWISION')) + { + if(file_exists(dirname(dirname(__DIR__)).'/conf/user_defined.php')){ + include_once dirname(dirname(__DIR__)).'/conf/user_defined.php'; + } + if(defined('USEFPDF3') && USEFPDF3 && file_exists(__DIR__ .'/pdf/fpdf_3.php')) + { + require_once __DIR__ .'/pdf/fpdf_3.php'; + } + else if(defined('USEFPDF2') && USEFPDF2 && file_exists(__DIR__ .'/pdf/fpdf_2.php')) + { + require_once __DIR__ .'/pdf/fpdf_2.php'; + } else { + require_once __DIR__ .'/pdf/fpdf.php'; + } + } + if(!class_exists('PDF_EPS')){ + include_once __DIR__.'/pdf/fpdf_final.php'; + } + if(!class_exists('SuperFPDF')){ + require_once __DIR__.'/dokumente/class.superfpdf.php'; + } + + if(!class_exists('Briefpapier')) + { + if(file_exists(__DIR__.'/dokumente/class.briefpapier_custom.php')) + { + require_once __DIR__.'/dokumente/class.briefpapier_custom.php'; + }else{ + require_once __DIR__.'/dokumente/class.briefpapier.php'; + } + } + + if(file_exists(__DIR__.'/dokumente/class.'.$beleg.'_custom.php')) + { + include_once __DIR__.'/dokumente/class.'.$beleg.'_custom.php'; + }elseif(file_exists(__DIR__.'/dokumente/class.'.$beleg.'.php')) + { + include_once __DIR__.'/dokumente/class.'.$beleg.'.php'; + } + if(!class_exists('image')){ + require __DIR__ . '/class.image.php'; + } +} + + function ArtikelUebertragen($datei, $artikelarr, $uebertragung = 0) + { + /** @var Uebertragungen $obj */ + $obj = $this->app->erp->LoadModul('uebertragungen'); + if(!empty($obj) && method_exists($obj, 'ArtikelUebertragen')) { + return $obj->ArtikelUebertragen($datei, $artikelarr, $uebertragung); + } + return false; + } + + /** @deprecated */ + function LagerzahlenCSV($datei, $artikel, $lager = 0, $lager_platz = 0, $append = false) + { + if((int)$artikel <= 0 || $datei == '')return false; + if($lager || $lager_platz) + { + $artikelarr = $this->app->DB->SelectRow("SELECT art.nummer, art.herstellernummer, art.ean, ifnull(lag.menge,0) as lager_menge_total, lag.lager_platz + FROM artikel art + LEFT JOIN ( + SELECT lpi.artikel,lp.kurzbezeichnung as lager_platz, trim(ifnull(sum(lpi.menge),0))+0 as menge FROM lager_platz_inhalt lpi + INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id AND lp.geloescht = 0 ".($lager_platz?" AND lp.id = '$lager_platz' ":"")." + ".($lager?" AND lp.lager = '$lager' ":"")." + WHERE lpi.artikel = '$artikel' GROUP BY lp.id + ) lag ON art.id = lag.artikel WHERE art.id = '$artikel' LIMIT 1"); + }else{ + $artikelarr = $this->app->DB->SelectRow("SELECT art.nummer, art.herstellernummer, art.ean FROM artikel art + WHERE art.id = '$artikel' LIMIT 1"); + if($artikelarr)$artikelarr['lager_menge_total'] = floor($this->ArtikelAnzahlVerkaufbar($artikel)); + } + if($artikelarr){ + $file_ex = @is_file($datei); + $handle = @fopen($datei, $append?'a':'w'); + if($handle) + { + if(!$append || !$file_ex) + { + $output = ""; + foreach($artikelarr as $k => $v)$output .= $k.';'; + $output .= "\r\n"; + fputs($handle, $output); + } + $output = ""; + foreach($artikelarr as $k2 => $v2) + { + $output .= '"'.$v2.'"'.';'; + } + $output .= "\r\n"; + fputs($handle, $output); + fclose($handle); + return true; + } + } + return false; + } + +// @todo +function Belegeexport($datei, $doctype, $doctypeid, $append = false, $optionen = null) +{ + if($doctype == '' || (int)$doctypeid <= 0 || $datei == '') { + return false; + } + + $arr = [ + 'adresse','artikel','art','status','beleg_status','beleg_datum','beleg_lieferdatum','beleg_tatsaechlicheslieferdatum','beleg_versandart','beleg_zahlungsweise','beleg_belegnr','beleg_hauptbelegnr','beleg_kundennummer','beleg_name','beleg_abteilung', + 'beleg_unterabteilung','beleg_adresszusatz','beleg_ansprechpartner','beleg_telefon','beleg_email','beleg_land','beleg_strasse','beleg_plz','beleg_ort','beleg_projekt','beleg_aktion', + 'beleg_internebemerkung','beleg_internebezeichnung','beleg_freitext','beleg_ihrebestellnummer','beleg_lieferbedingung','beleg_art','artikel_nummer','artikel_bezeichnung','artikel_beschreibung', + 'artikel_menge','artikel_preis','artikel_rabatt','artikel_waehrung','artikel_lieferdatum','artikel_sort','artikel_umsatzsteuer','artikel_einheit','artikel_zolltarifnummer', + 'artikel_herkunftsland','artikel_artikelnummerkunde', + 'artikel_freifeld1','artikel_freifeld2','artikel_freifeld3','artikel_freifeld4','artikel_freifeld5','artikel_freifeld6','artikel_freifeld7','artikel_freifeld8','artikel_freifeld9','artikel_freifeld10', + 'artikel_freifeld11','artikel_freifeld12','artikel_freifeld13','artikel_freifeld14','artikel_freifeld15','artikel_freifeld16','artikel_freifeld17','artikel_freifeld18','artikel_freifeld19','artikel_freifeld20','artikel_freifeld21','artikel_freifeld22','artikel_freifeld23','artikel_freifeld24','artikel_freifeld25','artikel_freifeld26','artikel_freifeld27','artikel_freifeld28','artikel_freifeld29','artikel_freifeld30','artikel_freifeld31','artikel_freifeld32','artikel_freifeld33','artikel_freifeld34','artikel_freifeld35','artikel_freifeld36','artikel_freifeld37','artikel_freifeld38','artikel_freifeld39','artikel_freifeld40', + 'beleg_unterlistenexplodieren' + ]; + + if($doctype === 'bestellung') { + $arr[] = 'beleg_lieferantennummer'; + } + + $colsa[] = 't.adresse'; + if($doctype !== 'verbindlichkeit'){ + $colsa[] = 'p.artikel'; + } + $colsa[] = 'pr.abkuerzung as beleg_projekt'; + if(isset($optionen['art']) && $optionen['art'] != '') { + $colsa[] = "'".$optionen['art']."' as art"; + } + else{ + $colsa[] = "'$doctype' as art"; + } + + $checkfields = $this->app->DB->SelectRow("SELECT * FROM $doctype LIMIT 1"); + $checkfieldsposition = $doctype === 'verbindlichkeit' + ?null: $this->app->DB->SelectRow("SELECT * FROM ".$doctype."_position LIMIT 1"); + foreach($arr as $v) { + if(strpos($v,'beleg_') === 0) { + $k = substr($v, 6); + if($k !== 'projekt' && $k !== 'hauptbelegnr') { + if(($k !== 'tatsaechlicheslieferdatum' && $k !== 'aktion' && $k !== 'art' && $k !== 'ihrebestellnummer') || $doctype === 'auftrag') { + if(($doctype !== 'auftrag' && $doctype !== 'lieferschein') || $k !== 'lieferdatum') { + if(array_key_exists($k,$checkfields)) { + $colsa[] = 't.'.$k.' as '.$v; + } + } + } + } + } + elseif(strpos($v,'artikel_') === 0) { + $k = substr($v, 8); + if($k !== 'preisfuermenge' || $doctype === 'auftrag') { + if(($k !== 'rabatt' + || ($doctype !== 'bestellung' && $doctype !== 'lieferschein' && $doctype !== 'retoure' && $doctype!=='produktion')) + && (($k !== 'preis' && $k !== 'waehrung' && $k !== 'umsatzsteuer') || + ($doctype !== 'lieferschein' && $doctype!=='produktion' && $doctype !== 'retoure'))) { + if($doctype === 'bestellung' && $k === 'nummer') { + $k = 'bestellnummer'; + } + if($doctype === 'bestellung' && $k === 'bezeichnung') { + $k = 'bezeichnunglieferant'; + } + if($doctype === 'verbindlichkeit') { + $colsa[] = " '' as " . $v; + continue; + } + if(array_key_exists($k,$checkfieldsposition) && $k !== 'projekt') { + if($k=='preis') + { + $colsa[] = $this->app->erp->FormatPreis('p.'.$k).' as '.$v; + } + else if($k=='menge') + { + $colsa[] = $this->app->erp->FormatMenge('p.'.$k).' as '.$v; + } + else { + $colsa[] = 'p.' . $k . ' as ' . $v; + } + } + } + } + } + } + if($doctype === 'auftrag') { + $colsa[] = 't2.belegnr as beleg_hauptbelegnr'; + } + if($doctype !== 'verbindlichkeit') { + $colsa[] = " art.ean as artikel_ean "; + } + + $colsa[] = "'1' as artikel_preisfuermenge "; + $cols = implode(',', $colsa); + switch($doctype) { + case 'verbindlichkeit': + $arr = $this->app->DB->SelectArr( + sprintf( + "SELECT %s + FROM `verbindlichkeit` AS `t` + LEFT JOIN `projekt` AS `pr` ON t.projekt = pr.id + WHERE t.id = %d", + $cols, $doctypeid + ) + ); + break; + case 'auftrag': + $arr = $this->app->DB->SelectArr( + sprintf( + "SELECT %s + FROM `auftrag` AS `t` + INNER JOIN `auftrag_position` AS `p` ON t.id = p.auftrag + INNER JOIN `artikel` AS `art` ON p.artikel = art.id + LEFT JOIN `projekt` AS `pr` ON t.projekt = pr.id + LEFT JOIN `auftrag` AS `t2` ON t.teillieferungvon = t2.id + WHERE t.id = %d", + $cols, $doctypeid + ) + ); + break; + default: + $arr = $this->app->DB->SelectArr( + sprintf( + "SELECT %s + FROM `%s` AS `t` + INNER JOIN `%s` AS `p` ON t.id = p.%s + INNER JOIN `artikel` AS `art` ON p.artikel = art.id + LEFT JOIN `projekt` AS `pr` ON t.projekt = pr.id + WHERE t.id = %d", + $cols, $doctype, $doctype.'_position',$doctype, $doctypeid + ) + ); + break; + } + + if($arr) { + $file_ex = @is_file($datei); + $handle = @fopen($datei, $append?'a':'w'); + if($handle) { + if(!$append || !$file_ex) { + $output = ''; + foreach($arr[0] as $k => $v) { + $output .= $k.';'; + } + $output .= "\r\n"; + fwrite($handle, $output); + } + $output = ''; + foreach($arr as $k => $v) { + foreach($v as $k2 => $v2) { + if(($k2 === 'belegnr' || $k2 === 'beleg_belegnr')) { + if($k > 0) { + if((isset($optionen['new']) && $optionen['new'] ) || $v2 == '' || !(isset($optionen['noparent']) && $optionen['noparent'])){ + $v2 = 'PARENT'; + } + } + else { + if(isset($optionen['new']) && $optionen['new']) { + $v2 = 'NEW'; + } + } + } + $v3 = str_replace(array('ü','ö','ä','Ü','Ö','Ä','ß','"'),array('ü','ö','ä','Ü','Ö','Ä','ß','"'.'"'),$v2); + if(isset($optionen['nowrap'])) { + $v3 = str_replace(array("\r","\n"),'', $v3); + } + $output .= '"'.$v3.'"'.';'; + } + $output .= "\r\n"; + } + fwrite($handle, $output); + fclose($handle); + return true; + } + } + return false; +} + + // $app->Module()->Warehouse()->Gateway()->isConsumptionWarehouseAvailable() + // $app->Warehouse()-> + function Verbrauchslagervorhanden() + { + if(is_null($this->verbrauchslagervorhanden)) + { + $this->verbrauchslagervorhanden = $this->app->DB->Select("SELECT id FROM lager_platz WHERE verbrauchslager = 1 LIMIT 1")?true:false; + } + return $this->verbrauchslagervorhanden; + } + + public function ExitWawi($status = 0) + { + if(method_exists($this->app, 'ExitXentral')) { + $this->app->ExitXentral($status); + } + exit($status); + } + + // @refactor Module OrderPicking + public function GetNextKommissionierung($bezeichnung = '') + { + $this->app->DB->Insert("INSERT INTO kommissionierung (bearbeiter, bezeichnung) values ('".$this->app->DB->real_escape_string($this->app->User->GetName())."','".$bezeichnung."')"); + return $this->app->DB->GetInsertID(); + } + + // @refactor in DevTools + function LogWithTime($message, $json = false) + { + if(defined('SCRIPT_START_TIME')) + { + $akttime = microtime(true); + $aktmemory = number_format(memory_get_usage()/1024.0/1024.0,2); + $peakmemory = number_format(memory_get_peak_usage()/1024.0/1024.0,2); + $runtime = number_format($akttime - $this->logtime,3); + $runtimeall = number_format($akttime - $this->firstlogtime,3); + $this->LogFile('Time all '.$runtimeall."s last: ".$runtime."s Memakt:".$aktmemory."MB peak:".$peakmemory."MB ".$this->app->DB->real_escape_string( $json?json_encode($message):$message)); + $this->logtime = $akttime; + } + } + + /** + * @deprecated Secure-Klasse verwenden + * + * @param $data + * + * @return mixed|null|string|string[] + */ + function xss_clean($data) + { + // Fix &entity\n; + $data = str_replace(array('&','<','>'), array('&amp;','&lt;','&gt;'), $data); + $data = preg_replace('/(&#*\w+)[\x00-\x20]+;/u', '$1;', $data); + $data = preg_replace('/(&#x*[0-9A-F]+);*/iu', '$1;', $data); + $data = html_entity_decode($data, ENT_COMPAT, 'UTF-8'); + + // Remove any attribute starting with "on" or xmlns + $data = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $data); + + // Remove javascript: and vbscript: protocols + $data = preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2nojavascript...', $data); + $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu', '$1=$2novbscript...', $data); + $data = preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u', '$1=$2nomozbinding...', $data); + + // Only works in IE: + $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i', '$1>', $data); + $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i', '$1>', $data); + $data = preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu', '$1>', $data); + + // Remove namespaced elements (we do not need them) + $data = preg_replace('#]*+>#i', '', $data); + + do + { + // Remove really unwanted tags + $old_data = $data; + $data = preg_replace('#]*+>#i', '', $data); + } + while ($old_data !== $data); + + return $data; + } + + // @refactor in Benutzer Modul + + /** + * @return array + */ + public function getEncModullist() + { + if(file_exists(__DIR__.'/modulliste.php')) { + $erg = []; + include __DIR__.'/modulliste.php'; + return $erg; + } + return []; + } + + /** + * @deprecated + * + * @return bool + */ + function checkLicense() + { + return true; + } + + // @refactor LicenceManager Komponente + final public function isIoncube() + { + if(empty(erpAPI::$license)) + { + erpAPI::Ioncube_Property(''); + } + return !empty(erpAPI::$license); + } + + // @refactor LicenceManager Komponente + static function Ioncube_Property($key = '') + { + if(!class_exists('License')) + { + if(is_file(dirname(dirname(__DIR__)).'/phpwf/plugins/class.license.php')) + { + include(dirname(dirname(__DIR__)).'/phpwf/plugins/class.license.php'); + } + } + if(class_exists('License')) + { + if(!erpAPI::$license) { + erpAPI::$license = new License(); + } + } + if(erpAPI::$license) { + return erpAPI::$license->getProperty($key); + } + if(function_exists('ioncube_license_properties')) + { + if(!self::$ioncubeproperties) { + self::$ioncubeproperties = ioncube_license_properties(); + } + $data = self::$ioncubeproperties; + if($data && is_array($data) && isset($data[$key]) && is_array($data[$key]) && isset($data[$key]['value'])) { + $value = $data[$key]['value']; + return $value; + } + } + return false; + } + + // @refactor LicenceManager Komponente + static function Ioncube_getMaxUser() + { + return erpAPI::Ioncube_Property('maxuser'); + } + + // @refactor LicenceManager Komponente + static function Ioncube_getMaxLightusers() + { + return erpAPI::Ioncube_Property('maxlightuser'); + } + + // @refactor LicenceManager Komponente + static function Ioncube_getMaxLightusersRights() + { + $rechte = (int)erpAPI::Ioncube_Property('maxlightuserrights'); + if($rechte < 5) { + $rechte = 30; + } + return $rechte; + } + + // @refactor LicenceManager Komponente + static function Ioncube_BenutzervorlageAnzahlLightuser(&$app, $vorlage) + { + if(!isset($app->DB)) { + return; + } + return $app->DB->Select("SELECT count(id) FROM `user` WHERE activ = 1 AND type = 'lightuser' AND vorlage = '$vorlage'"); + } + + // @refactor LicenceManager Komponente + static function Ioncube_LightuserRechteanzahl($app, $id, $type = 'user') + { + if(!isset($app->DB)) { + return false; + } + if($type === 'vorlage') { + $id = $app->DB->Select("SELECT id FROM `uservorlage` WHERE bezeichnung <> '' AND bezeichnung = '".$app->DB->real_escape_string($id)."' LIMIT 1"); + } + $id = (int)$id; + if($id <= 0) { + return false; + } + if($type === 'vorlage') + { + if(!$app->DB->Select("SELECT id FROM `uservorlage` WHERE id = '$id' LIMIT 1")) { + return false; + } + return $app->DB->Select("SELECT count(DISTINCT module, action) FROM `uservorlagerights` WHERE vorlage = '$id' AND permission = 1"); + } + if(!$app->DB->Select("SELECT id FROM `user` WHERE id = '$id' LIMIT 1")) { + return false; + } + return $app->DB->Select("SELECT count(DISTINCT module, action) FROM `userrights` WHERE `user` = '$id' AND permission = 1"); + } + + // @refactor LicenceManager Komponente + static function Ioncube_HasExpired() + { + return erpAPI::Ioncube_Property('expdate') && (int)erpAPI::Ioncube_Property('expdate') < time(); + } + + // @refactor LicenceManager Komponente + static function Ioncube_ExpireInDays() + { + if(function_exists('ioncube_file_info')) + { + if(erpAPI::Ioncube_Property('expdate')) { + return round(((int)erpAPI::Ioncube_Property('expdate')-time())/86400); + } + } + return false; + } + + // @refactor LicenceManager Komponente + static function Ioncube_BeforeExpire() + { + if(false === erpAPI::Ioncube_ExpireInDays()) { + return false; + } + return erpAPI::Ioncube_ExpireInDays() < 42; + } + + // @refactor LicenceManager Komponente + static function Ioncube_ExpireDate($format = 'd.m.Y') + { + if(function_exists('ioncube_file_info')) + { + $dat = erpAPI::Ioncube_Property('expdate'); + if(!$dat) { + return false; + } + return date($format,(int)$dat); + } + return false; + } + + // @refactor LicenceManager Komponente + final function GetIoncubeServerList() + { + $ret = null; + $i = 1; + while($check = $this->IoncubeProperty('servername'.$i)) + { + $ret[] = $check; + $i++; + } + return $ret; + } + + // @refactor LicenceManager Komponente + + /** + * @return bool + */ + final function ServerOK() + { + $servername = (isset($_SERVER['SERVER_NAME']) && $_SERVER['SERVER_NAME'] != '')?$_SERVER['SERVER_NAME']:(isset($_SERVER['HTTP_HOST'])?$_SERVER['HTTP_HOST']:''); + $serverlist = $this->GetIoncubeServerList(); + if(!$serverlist) { + return true; + } + foreach($serverlist as $check) { + if($servername == $check) { + return true; + } + } + + return false; + } + + // @refactor LicenceManager Komponente + final function IoncubeProperty($key) + { + if(!class_exists('License')) + { + if(is_file(dirname(dirname(__DIR__)).'/phpwf/plugins/class.license.php')) + { + include(dirname(dirname(__DIR__)).'/phpwf/plugins/class.license.php'); + } + } + if(class_exists('License')) + { + if(!erpAPI::$license)erpAPI::$license = new License(); + } + if(erpAPI::$license)return erpAPI::$license->getProperty($key); + if(method_exists('erpAPI','Ioncube_Property'))return erpAPI::Ioncube_Property($key); + if(function_exists('ioncube_license_properties')) + { + $data = ioncube_license_properties(); + if($data && isset($data[$key]) && isset($data[$key]['value']))return $data[$key]['value']; + } + return false; + } + + // @refactor LicenceManager Komponente + final function IoncubegetMaxUser() + { + return $this->IoncubeProperty('maxuser'); + } + + // @refactor LicenceManager Komponente + final function IoncubeHasExpired() + { + if($this->IoncubeProperty('expdate')) + { + if((int)$this->IoncubeProperty('expdate') < time())return true; + } + return false; + if(function_exists('ioncube_license_has_expired'))return ioncube_license_has_expired(); + return false; + } + + // @refactor LicenceManager Komponente + final function IoncubeServerOK() + { + if(function_exists('ioncube_license_matches_server'))return ioncube_license_matches_server(); + return true; + } + + // @refactor LicenceManager Komponente + final function IoncubeExpireInDays() + { + if(function_exists('ioncube_file_info')) + { + if($this->IoncubeProperty('expdate'))return round(((int)$this->IoncubeProperty('expdate')-time())/86400); + } + return false; + } + + // @refactor LicenceManager Komponente + final function IoncubeBeforeExpire() + { + if(false === $this->IoncubeExpireInDays())return false; + return $this->IoncubeExpireInDays() < 42; + } + + // @refactor LicenceManager Komponente + final function IoncubeExpireDate($format = 'd.m.Y') + { + if(function_exists('ioncube_file_info')) + { + $dat = $this->IoncubeProperty('expdate'); + if(!$dat) { + return false; + } + return date($format,(int)$dat); + } + return false; + } + + /** + * @return array|null + */ + public function getAppList() + { + if(!isset($this->appList[$this->app->Conf->WFdbname])) { + $this->appList[$this->app->Conf->WFdbname] = $this->app->getAppList(); + } + + return $this->appList[$this->app->Conf->WFdbname]; + } + +// @refactor LicenceManager Komponente +function ModuleBenutzeranzahlLizenzFehler($add = '', $typ = 'module', $vorlage = 0) +{ + if(!method_exists($this->app->erp, 'IoncubeProperty')) { + return null; + } + if($typ === 'module') + { + if(strpos($add, 'shopimporter_') === 0) { + return null; + } + if($add === 'welcome' || $add === 'api' || $add === 'ajax') { + return null; + } + $anz = (int)$this->IoncubeProperty('moduleanzX'.str_replace('_','X',$add)); + if($anz > 1) { + $anzadmin = (int)$this->app->DB->Select("SELECT count(id) FROM `user` WHERE activ = 1 AND type = 'admin'"); + $rechte = (int)$this->app->DB->Select("SELECT count(u.i) FROM `user` u + INNER JOIN (SELECT DISTINCT `user` FROM `userrights` WHERE module = '$add' AND permission = 1) ur ON u.id = ur.`user` + WHERE activ = 1 AND type <> 'admin' + "); + if($anzadmin + $rechte + 1 > $anz) { + return array('Error'=> 'Es '.($anz > 1?'sind':'ist').' nur '.$anz.' User für das Modul '.ucfirst($add).' lizenziert, es werden aber '.($anzadmin + $rechte + 1).' benötigt'); + } + } + return null; + } + if($typ === 'vorlage' && $vorlage) + { + if(strpos($add, 'shopimporter_') === 0) { + return null; + } + if($add === 'welcome' || $add === 'api' || $add === 'ajax') { + return null; + } + $anz = (int)$this->IoncubeProperty('moduleanzX'.str_replace('_','X',$add)); + if($anz > 1) + { + $anzadmin = (int)$this->app->DB->Select("SELECT count(id) FROM `user` WHERE activ = 1 AND type = 'admin'"); + $bezeichnung = $this->app->DB->Select("SELECT bezeichnung FROM uservorlage WHERE id = '$vorlage' LIMIT 1"); + if($bezeichnung == '') { + return null; + } + $rechte = (int)$this->app->DB->Select("SELECT count(u.i) FROM `user` u + INNER JOIN (SELECT DISTINCT `user` FROM `userrights` WHERE module = '$add' AND permission = 1) ur ON u.id = ur.`user` + WHERE activ = 1 AND type <> 'admin' AND vorlage != '".$this->app->DB->real_escape_string($bezeichnung)."' + "); + $neueuser = (int)$this->app->DB->Select("SELECT count(u.id) FROM `user` u + WHERE activ = 1 AND type <> 'admin' AND vorlage = '".$this->app->DB->real_escape_string($bezeichnung)."' + "); + if($anzadmin + $rechte + $neueuser > $anz) { + return array('Error'=> 'Es '.($anz > 1?'sind':'ist').' nur '.$anz.' User für das Modul '.ucfirst($add).' lizenziert, es werden aber '.($anzadmin + $rechte + $neueuser).' benötigt'); + } + } + } + + return null; +} + +// @refactor LicenceManager Komponente +function OnlineshopsLizenzFehler($add = '') +{ + if(!method_exists($this->app->erp, 'IoncubeProperty')) { + return false; + } + $shops = $this->app->DB->SelectArr("SELECT shoptyp,modulename FROM shopexport WHERE aktiv = 1 AND (shoptyp = 'intern' OR shoptyp = 'custom') AND modulename <> '' ORDER BY modulename"); + if(!$shops) { + return false; + } + $counts = null; + foreach($shops as $shop) + { + if($shop['shoptyp'] === 'intern') + { + $modulename = $shop['modulename']; + }else{ + if(preg_match_all('/(.*)\_(\d+).php/i',$shop['modulename'],$erg)) + { + $modulename = $erg[1][0]; + }else $modulename = ''; + } + if($modulename != '') + { + if(!isset($counts[$modulename]))$counts[$modulename] = 0; + $counts[$modulename]++; + } + } + if($add != '') + { + if(substr($add,-4) === '.php') + { + if(preg_match_all('/(.*)\_(\d+).php/i',$add,$erg)) + { + $add = $erg[1][0]; + }else { + $add = ''; + } + } + } + + if($add != '') + { + if(!isset($counts[$add])) { + $counts[$add] = 0; + } + $counts[$add]++; + } + if($counts) { + foreach($counts as $k => $v) { + if($v <= 1) { + continue; + } + $anz = (int)$this->IoncubeProperty('moduleanzX'.str_replace('_','X',$k)); + if($anz > 0 && $anz < $v) { + return array('Error'=> 'Es '.($anz > 1?'sind':'ist').' nur '.$anz.' Importer des Typs '.ucfirst(str_replace('shopimporter_','',$k)).' lizenziert'); + } + } + } + return false; +} + + function getApps() + { + /** @var Appstore $obj */ + $obj = $this->LoadModul('appstore'); + if(!empty($obj) && method_exists($obj,'getAppsList')) + { + return $obj->getAppsList(); + } + + return null; + } + + function StartseiteMenu() + { + /** @var Welcome $obj */ + $obj = $this->LoadModul('welcome'); + if(!empty($obj) && method_exists($obj,'StartseiteMenu')) + { + $obj->StartseiteMenu(); + } + } + + function EventAPIAdd($eventname,$parameter,$module,$action,$kommentar="", $api = 0) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'EventAPIAdd')) + { + return $obj->EventAPIAdd($eventname,$parameter,$module,$action,$kommentar, $api); + } + } + + function EventCall($id) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'EventCall')) + { + return $obj->EventCall($id); + } + } + + function EventSendRequest($methodname,$xml,$hash,$parameter="",&$result_body="", $api = 0) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'EventSendRequest')) + { + return $obj->EventSendRequest($methodname,$xml,$hash,$parameter,$result_body, $api); + } + } + +// @refactor Hook Komponente +function RemoveNavigationHook($module, $action = null) +{ + if(empty($module)) { + return; + } + if($action) + { + $this->app->DB->Delete("DELETE FROM `hook_navigation` WHERE `module` = '".$this->app->DB->real_escape_string($module)."' AND `action` = '".$this->app->DB->real_escape_string($action)."'"); + }else{ + $this->app->DB->Delete("DELETE FROM `hook_navigation` WHERE `module` = '".$this->app->DB->real_escape_string($module)."'"); + } +} + + /** + * @param string $table + * @param string $uniqeCol + */ +public function repairNullIds($table, $uniqeCol = 'name') +{ + $doppelteids = $this->app->DB->SelectArr( + sprintf( + 'SELECT `id`, count(*) as `co` FROM `%s` GROUP BY `id` HAVING COUNT(*) > 1', + $table + ) + ); + if(empty($doppelteids)) { + $this->CheckAlterTable(sprintf("ALTER TABLE `%s` ADD PRIMARY KEY(`id`);", $table)); + $maxid = 1+(int)$this->app->DB->Select(sprintf("SELECT max(id) FROM `%s`", $table)); + $this->CheckAlterTable( + sprintf( + "ALTER TABLE `%s` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=%d", + $table, + $maxid + ) + ); + return; + } + + foreach($doppelteids as $val) { + $maxid = 1+(int)$this->app->DB->Select( + sprintf("SELECT max(id) FROM `%s`", $table) + ); + if(empty($uniqeCol)) { + for($i = 1; $i <= $val['co']; $i++) { + $this->app->DB->Update( + sprintf( + 'UPDATE `%s` + SET `id` = %d WHERE `id` = %d + LIMIT 1', + $table, $maxid, $val['id'] + ) + ); + } + continue; + } + $doppelte = $this->app->DB->SelectArr( + sprintf('SELECT * FROM `%s` WHERE id = %d', $table, $val['id']) + ); + foreach($doppelte as $row) { + $this->app->DB->Update( + sprintf( + "UPDATE `%s` + SET id = %d WHERE id = %d AND `%s` = '%s' + LIMIT 1", + $table, $maxid, $val['id'], $uniqeCol, $val[$uniqeCol] + ) + ); + $maxid++; + } + } + $this->CheckAlterTable(sprintf("ALTER TABLE `%s` ADD PRIMARY KEY(`id`);", $table)); + $maxid = 1+(int)$this->app->DB->Select(sprintf("SELECT max(id) FROM `%s`", $table)); + $this->CheckAlterTable( + sprintf( + "ALTER TABLE `%s` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=%d", + $table, + $maxid + ) + ); +} + +// @refactor Hook Komponente +function RegisterNavigationHook($module, $action, $first, $sec, $aftersec = '', $position = 0) +{ + if(empty($module) || empty($action) || (String)$first === '') { + return; + } + + $check = $this->app->DB->SelectRow( + "SELECT hn.id + FROM `hook_navigation` AS `hn` + WHERE hn.module = '".$this->app->DB->real_escape_string($module)."' AND hn.action = '".$this->app->DB->real_escape_string($action)."' + ORDER by hn.aktiv DESC + LIMIT 1" + ); + if(!empty($check) && $check['id'] == 0) { + $this->repairNullIds('hook_navigation'); + $check = $this->app->DB->SelectRow( + "SELECT hn.id + FROM `hook_navigation` AS `hn` + WHERE hn.module = '".$this->app->DB->real_escape_string($module)."' AND hn.action = '".$this->app->DB->real_escape_string($action)."' + ORDER by hn.aktiv DESC + LIMIT 1" + ); + } + if($check) { + $this->app->DB->Update("UPDATE `hook_navigation` SET `aktiv` = 1, `first` = '".$this->app->DB->real_escape_string($first)."', `sec` = '".$this->app->DB->real_escape_string($sec)."', `aftersec` = '".$this->app->DB->real_escape_string($aftersec)."', `position` = '".$this->app->DB->real_escape_string($position)."' WHERE `id` = ".(int)$check['id'].' LIMIT 1'); + } + else { + $this->app->DB->Insert("INSERT INTO `hook_navigation` (`module`, `action`, `first`, `sec`, `aftersec`, `position`, `aktiv`) + VALUES ('".$this->app->DB->real_escape_string($module)."','".$this->app->DB->real_escape_string($action)."', + '".$this->app->DB->real_escape_string($first)."','".$this->app->DB->real_escape_string($sec)."','".$this->app->DB->real_escape_string($aftersec)."','".$this->app->DB->real_escape_string($position)."','1') + "); + } +} + +// @refactor Hook Komponente + + /** + * @param array $menu + */ +public function NavigationHooks(&$menu) +{ + $hook_navigation = $this->app->DB->SelectArr( + "SELECT hn.* + FROM `hook_navigation` AS `hn` + WHERE hn.aktiv = 1 AND hn.first != '' AND hn.module != '' AND hn.action != '' + ORDER BY hn.first, hn.aftersec DESC, hn.position, hn.sec" + ); + + if(!$hook_navigation) { + return; + } + if($hook_navigation[0]['id'] === 0) { + $this->repairNullIds('hook_navigation'); + $hook_navigation = $this->app->DB->SelectArr( + "SELECT hn.* + FROM `hook_navigation` AS `hn` + WHERE hn.aktiv = 1 AND hn.first != '' AND hn.module != '' AND hn.action != '' + ORDER BY hn.first, hn.aftersec DESC, hn.position, hn.sec" + ); + } + + foreach($menu as $k => $v) { + if(isset($v['first'])) { + $first[$v['first'][0]] = $k; + } + } + + foreach($hook_navigation as $k => $v) { + if($k > 0 && $v['id'] > 0 && !empty($hook_navigation[$k-1]) && $hook_navigation[$k-1]['id'] > 0) { + if( + $v['module'] === $hook_navigation[$k-1]['module'] + && $v['action'] === $hook_navigation[$k-1]['action'] + && $v['sec'] === $hook_navigation[$k-1]['sec'] + && $v['first'] === $hook_navigation[$k-1]['first'] + && $v['aftersec'] === $hook_navigation[$k-1]['aftersec'] + ) { + $this->app->DB->Delete(sprintf('DELETE FROM `hook_navigation` WHERE `id` = %d LIMIT 1', $v['id'])); + unset($hook_navigation[$k]); + continue; + } + } + if(!$this->RechteVorhanden($v['module'], $v['action'])) { + continue; + } + if($v['sec'] !== '' || !isset($first[$v['first']])) { + if($v['sec'] == '') { + $menu[] = array('first'=>array($v['first'], $v['module'],$v['action'])); + $first[$v['first']] = count($menu)-1; + } + elseif($v['sec'] != '' && !isset($first[$v['first']])){ + $menu[] = array('first'=>array($v['first'], '',''),'sec'=>array(array($v['sec'],$v['module'],$v['action']))); + $first[$v['first']] = count($menu)-1; + } + else{ + if(isset($menu[$first[$v['first']]])) { + if($v['aftersec']) { + if(empty($menu[$first[$v['first']]]['sec'])) { + $ind = 0; + $menu[$first[$v['first']]]['sec'][$ind] = array($v['sec'],$v['module'],$v['action']); + } + else{ + $found = false; + foreach($menu[$first[$v['first']]]['sec'] as $k2 => $v2) { + if($v2[0] == $v['aftersec']) { + $c = count($menu[$first[$v['first']]]['sec']); + for($k3 = $c; $k3 > $k2; $k3--) { + $menu[$first[$v['first']]]['sec'][$k3] = $menu[$first[$v['first']]]['sec'][$k3-1]; + } + $ind = $k2 + 1; + $menu[$first[$v['first']]]['sec'][$ind] = array($v['sec'],$v['module'],$v['action']); + $found = true; + break; + } + } + if(!$found) { + $ind = empty($menu[$first[$v['first']]]['sec'])?0:count($menu[$first[$v['first']]]['sec']); + $menu[$first[$v['first']]]['sec'][$ind] = array($v['sec'],$v['module'],$v['action']); + } + } + } + else{ + $ind = empty($menu[$first[$v['first']]]['sec'])?0:count($menu[$first[$v['first']]]['sec']); + $menu[$first[$v['first']]]['sec'][$ind] = array($v['sec'],$v['module'],$v['action']); + } + } + } + } + } +} + +// @refactor ModuleRenderer Komponente + + /** + * @param string $headline + * @param string $headline1 + * @param string|array $headline2 + */ + public function Headlines($headline = '', $headline1 = '', $headline2 = '') +{ + if($headline) { + $this->kurzueberschrift = $headline; + $this->app->Tpl->Set('KURZUEBERSCHRIFT', $headline); + } + if($headline1) { + $this->kurzueberschrift1 = htmlspecialchars($headline1); + $this->app->Tpl->Set('KURZUEBERSCHRIFT1', ' '.$headline1); + } + if($this->kurzueberschrift && $this->backlink && $this->kurzueberschrift1) { + $this->app->Tpl->Set('KURZUEBERSCHRIFT', ''.$this->kurzueberschrift.''); + } + if($headline2) { + if(is_string($headline2)) { + $this->kurzueberschrift2 = ' '.(stripos($headline2,'')?$headline2:htmlspecialchars($headline2)).''; + $this->app->Tpl->Set('KURZUEBERSCHRIFT2', $this->kurzueberschrift2); + } + elseif(is_array($headline2)) { + $this->kurzueberschrift2 = ' '; + $first = true; + foreach($headline2 as $k => $v) { + if((String)$v !== '') { + if(!$first) { + $this->kurzueberschrift2 .= ' '; + } + $first = false; + if(!is_numeric($k)) { + $this->kurzueberschrift2 .= $k.' '; + } + $this->kurzueberschrift2 .= ''.htmlspecialchars($v).''; + } + } + $this->app->Tpl->Add('KURZUEBERSCHRIFT2', $this->kurzueberschrift2); + } + } + if(empty($headline) && !empty($this->kurzueberschrift)) { + $headline = $this->kurzueberschrift; + } + if(empty($headline1) && !empty($this->kurzueberschrift1)) { + $headline1 = $this->kurzueberschrift1; + } + + $this->RunHook('HeadLines', 3, $headline, $headline1, $headline2); +} + + function generateHash($id = 0) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'generateHashFromApi')) + { + return $obj->generateHashFromApi($id); + } + return ''; + } + + function XMLGruppe($id, $cdata = false) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'XMLGruppe')) + { + return $obj->XMLGruppe($id, $cdata); + } + return ''; + } + + function XMLAdresseKontakt($id, $cdata = false) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'XMLAdresseKontakt')) + { + return $obj->XMLAdresseKontakt($id, $cdata); + } + return ''; + } + + function XMLAdresse($id, $cdata = false) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'XMLAdresse')) + { + return $obj->XMLAdresse($id, $cdata); + } + } + + function XMLAuftrag($id, $doctype = 'auftrag', $cdata = false) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'XMLAuftrag')) + { + return $obj->XMLAuftrag($id,$doctype, $cdata); + } + return ''; + } + + function XMLBenutzer($id, $cdata = false) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'XMLBenutzer')) + { + return $obj->XMLBenutzer($id, $cdata); + } + } + + function XMLAdresseAccounts($filter=array(), $cdata = false) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'XMLAdresseAccounts')) + { + return $obj->XMLAdresseAccounts($filter, $cdata); + } + } + + function XMLBerichte($id, $cdata = false){ + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'XMLBerichte')) + { + return $obj->XMLBerichte($id, $cdata); + } + } + + + function XMLArtikelkontingente($filter=array(), $cdata = false) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'XMLArtikelkontingente')) + { + return $obj->XMLArtikelkontingente($filter, $cdata); + } + } + + // @refactor PhysicalDimension Komponente + function GetGewichtbezeichnung() + { + $gewichtbezeichnung = $this->Firmendaten('gewichtbezeichnung'); + if((String)$gewichtbezeichnung !== '')return $gewichtbezeichnung; + return 'kg'; + } + + // @refactor PhysicalDimension Komponente + function GewichtzuKgFaktor() + { + $faktor = (float)str_replace(',',',',$this->Firmendaten('gewichtzukgfaktor')); + if($faktor > 0)return $faktor; + return 1; + } + + // @refactor DbHelper Komponente + function FormatGewicht($spalte) + { + return 'concat('.$spalte.",' ".$this->GetGewichtbezeichnung()."')"; + } + + // @refactor DbHelper Komponente + function FormatPreis($spalte, $stellen = null, $punkt = false) + { + if(is_null($stellen))return "if(trim(round( $spalte *100))+0 <> trim($spalte*100)+0, format($spalte, length( trim($spalte)+0)-length(round($spalte))-1 ".($punkt?"":" ,'de_DE'")."),format($spalte,2".($punkt?"":" ,'de_DE'")."))"; + return "format($spalte,$stellen".($punkt?"":" ,'de_DE'").")"; + } + + /** + * @deprecated + * + * @param $value + * + * @return mixed + */ + function FromFormatZahlToDB($value) + { + $poskomma = strrpos($value, ','); + $pospunkt = strrpos($value, '.'); + if($poskomma === false) { + return $value; + } + if($pospunkt === false) { + return str_replace(',','.', $value); + } + + if($poskomma > $pospunkt) { + return str_replace(['.', ','], ['', '.'], $value); + } + + return str_replace(',','', $value); + } + + // @refactor Formater Komponente + function number_format_variable($value, $stellen = null) + { + if(is_null($stellen)) { + $ret = rtrim(number_format($value,8,',','.'),'0'); + if(substr($ret,-1) === ',') { + $ret .= '0'; + } + + return $ret; + } + + return number_format($value, $stellen,',','.'); + } + + // @refactor DbHelper Komponente + function BelegnummerSortierung($prefix = '') + { + $belegnummersortierungint = $this->Firmendaten('belegnummersortierungint'); + if($belegnummersortierungint) { + if($prefix == '') { + return 'cast(belegnr as UNSIGNED)'; + } + return 'cast('.$prefix.'.belegnr as UNSIGNED)'; + } + if($prefix == '') { + return 'belegnr'; + } + return $prefix.'.'.'belegnr'; + } + + // @refactor DbHelper Komponente + function FormatMenge($spalte) + { + return "replace(trim($spalte)+0,'.',',')"; + } + + public function XMLExportVorlage($id,$filter=array(), $cdata = false) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'XMLExportVorlage')) + { + return $obj->XMLExportVorlage($id, $filter, $cdata); + } + } + + /** + * Es werden Werte nur hinzugefuegt falls der Wert noch nicht existiert bzw. leer ist + * + * @refactor in ShopImporter Module + * + * @param int $shop Shopid + * @param int $artikel Artikelid + * @param array $arr Array zum Einfuegen / Updaten + * @param bool $escape Werte werden fuer DB escaped + * + * @return bool wenn Daten OK true sonst falsch + */ + public function AddShopArtikelIfEmpty($shop, $artikel, $arr, $escape = true) + { + if(empty($artikel) || empty($shop) || empty($arr)){ + return false; + } + $bearbeiter = $this->GetBearbeiter(true); + $oldarr = array(); + $old = $this->app->DB->SelectArr("SELECT min(id) as id, name,wert FROM shopexport_artikel + WHERE shopid = '$shop' AND artikel = '$artikel' GROUP BY name,wert"); + if(!empty($old)) + { + foreach($old as $v) + { + $oldarr[$v['name']] = array('id'=>$v['id'],'wert'=>$v['wert']); + } + } + + foreach($arr as $k => $v) + { + if($k) + { + $check = !empty($oldarr[$k])?$oldarr[$k]['id']:0; + if(!$check) + { + $this->app->DB->Insert("INSERT INTO shopexport_artikel (shopid, artikel, name) VALUES ('$shop','$artikel','".$this->app->DB->real_escape_string($k)."')"); + $new = $this->app->DB->GetInsertID(); + $check = $new; + }else{ + $new = null; + } + if(!empty($new) || ($oldarr[$k]['wert'] != $v && empty($oldarr[$k]['wert']))){ + if($escape){ + $this->app->DB->Update("UPDATE shopexport_artikel SET bearbeiter = '$bearbeiter', wert = '" . $this->app->DB->real_escape_string($v) . "' WHERE id = '$check' LIMIT 1"); + }else{ + $this->app->DB->Update("UPDATE shopexport_artikel SET bearbeiter = '$bearbeiter', wert = '$v' WHERE id = '$check' LIMIT 1"); + } + } + } + } + return true; + } + + /** + * @deprecated + * @refactor in User Klasse + * + * @param bool $escaped wenn true real_escaped zurueck + * + * @return string gibt Username oder Cronjob zurueck + */ + public function GetBearbeiter($escaped = false) + { + $bearbeiter = 'Cronjob'; + if(!empty($this->app->User) && method_exists($this->app->User,'GetName')) + { + $bearbeiter = $this->app->User->GetName(); + if($escaped) + { + $bearbeiter = $this->app->DB->real_escape_string($bearbeiter); + } + } + return $bearbeiter; + } + + /** + * @refactor in ShopImport Module + * + * @param int $shop Shopid + * @param int $artikel Artikelid + * @param array $arr Array das Geaendert / Eingefuegt werden soll + * @param bool $escape Escapen fuer DB + * + * @return bool + */ + public function SaveShopArtikel($shop, $artikel, $arr, $escape = true) + { + if(empty($artikel) || empty($shop) || empty($arr)){ + return false; + } + $bearbeiter = $this->GetBearbeiter(true); + $oldarr = array(); + $old = $this->app->DB->SelectArr( + sprintf( + "SELECT MIN(id) as id, MAX(id) AS `maxid`, `name`, `wert` + FROM `shopexport_artikel` + WHERE `shopid` = %d AND `artikel` = %d + GROUP BY `name`, `wert`", + $shop, $artikel + ) + ); + if(!empty($old)) { + foreach($old as $v) { + $oldarr[ + $this->app->DB->real_escape_string($v['name']) + ] = array('id'=>$v['id'],'wert'=>$v['wert'],'maxid' => $v['maxid']); + } + } + + foreach($arr as $k => $v) { + if(empty($k)) { + continue; + } + + $nameForDb = $k; + $valueForDb = $v; + if($escape){ + $nameForDb = $this->app->DB->real_escape_string($k); + $valueForDb = $this->app->DB->real_escape_string($v); + } + $check = !empty($oldarr[$k])?$oldarr[$k]['id']:0; + $new = null; + if(!$check) { + $this->app->DB->Insert( + sprintf( + "INSERT INTO `shopexport_artikel` (shopid, artikel, `name`,wert) + VALUES (%d,%d,'%s','%s')", + $shop, $artikel, $nameForDb, $valueForDb + ) + ); + + $new = $this->app->DB->GetInsertID(); + } + + if($check && (!empty($new) || $oldarr[$k]['wert'] != $v)) { + $this->app->DB->Delete( + sprintf( + "DELETE FROM `shopexport_artikel` + WHERE `artikel` = %d AND `shopid` = %d AND `name` = '%s' AND `id` <> %d", + $artikel, $shop, $nameForDb, $check + ) + ); + + $this->app->DB->Update( + "UPDATE shopexport_artikel SET bearbeiter = '$bearbeiter', wert = '$valueForDb' WHERE id = '$check' LIMIT 1" + ); + } + elseif($check && $oldarr[$k]['id'] != $oldarr[$k]['maxid']) { + $this->app->DB->Delete( + sprintf( + "DELETE FROM `shopexport_artikel` + WHERE `artikel` = %d AND `shopid` = %d AND `name` = '%s' AND `id` <> %d", + $artikel, $shop, $nameForDb, $check + ) + ); + } + + } + + return true; + } + + // @refactor in Placetel Module + function GetPhoneLink($adresse=0,$ansprechpartner=0,$telefon="") + { + $username = $this->app->User->GetUsername(); + $accounts = $this->app->erp->GetKonfiguration("placetel_list_accounts"); + + $tmp = explode(PHP_EOL,trim($accounts)); + $sipuid = false; + if($this->app->erp->RechteVorhanden('placetel','call')) + { + $this->app->Tpl->Set('JSPLACETEL',' + function call(id, dummy) + { + $.ajax({ + url: \'index.php?module=placetel&action=call&id=\'+id, + type: \'POST\', + dataType: \'json\', + data: {}, + success: function(data) { + if(data) + { + + } + } + }); + + } + '); + + $ctmp = !empty($tmp)?count($tmp):0; + for($i=0;$i<$ctmp;$i++) + { + $subtmp = explode(':',trim($tmp[$i])); + + if(count($subtmp)>0) + { + $subtmp[0] = trim($subtmp[0]); + $subtmp[1] = !empty($subtmp[1])?trim($subtmp[1]):''; + + if($subtmp[0]==$username) + { + $sipuid = $subtmp[1]; + break; + } + } + } + } + + if($ansprechpartner <=0) + { + $typ = $this->app->DB->Select("SELECT if(telefon='$telefon' AND telefon!='','1',if(mobil='$telefon' AND mobil!='','2','')) FROM adresse WHERE id='$adresse' LIMIT 1"); + if($typ==1 OR $typ==2){ + $typid = $adresse; + } + } else { + $typ = $this->app->DB->Select("SELECT if(telefon='$telefon' AND telefon!='','3',if(mobil='$telefon' AND mobil!='','4','')) FROM ansprechpartner WHERE id='$ansprechpartner' LIMIT 1"); + if($typ==3 OR $typ==4){ + $typid = $ansprechpartner; + } + } + // 1 = telefon adresse, 2 = mobil adresse, 3 telefon ansprechpartner, 4 mobil ansprechpartner + + if($telefon!='') { + $telefon = str_replace('/','',$telefon); + $telefon = str_replace(' ','',$telefon); + if($sipuid) { + return "app->Conf->WFconf['defaulttheme']."/images/phone.png\" class=\"iconininput\" alt=\"anrufen\" />"; + } + return "app->Conf->WFconf['defaulttheme']."/images/phone.png\" class=\"iconininput\" alt=\"anrufen\" />"; + } + } + + public function GetArtikelunterbaumids($id, &$arr, $lvl = 0) + { + /** @var Artikelbaum $obj */ + $obj = $this->LoadModul('artikelbaum'); + if(!empty($obj) && method_exists($obj, 'getArticleSubtreeIds')) { + $obj->getArticleSubtreeIds($id, $arr, $lvl); + } + } + + // @refactor in Shopimport Module + public function GetShopArtikel($shop, $artikel, $name = '') + { + $ret = null; + if((int)$artikel <= 0 || (int)$shop <= 0){ + return $ret; + } + $arr = $this->app->DB->SelectArr('SELECT `name`, `wert` FROM shopexport_artikel WHERE shopid = '.(int)$shop.' AND artikel = '.(int)$artikel." AND name <> ''".(!empty($name)?" AND name = '".$this->app->DB->real_escape_string($name)."' ":'')); + if(!empty($arr)) + { + foreach($arr as $v){ + $ret[$v['name']] = $v['wert']; + } + } + if(!empty($name)) + { + return !empty($ret[$name])?$ret[$name]:''; + } + return $ret; + } + + public function XMLArtikel($id, $api = 0) + { + /** @var Api $obj */ + $obj = $this->LoadModul('api'); + if(!empty($obj) && method_exists($obj,'XMLArtikel')) + { + return $obj->XMLArtikel($id, $api); + } + } + + // @refactor in Uservorlage Modul + function AbgleichBenutzerVorlagen($userid=0, $vorlage = 0, $module = '', $action = '') + { + $bezeichnung = ''; + if($vorlage != 0) + { + $bezeichnung = $this->app->DB->Select("SELECT bezeichnung FROM uservorlage WHERE id = '$vorlage' LIMIT 1"); + } + + if($userid == 0 && $vorlag > 0 && $module != '' && $action != '') + { + $permission = $this->app->DB->Select("SELECT permission FROM uservorlagerights WHERE vorlage = '".$id_vorlage."' AND module = '$module' AND action = '$action' LIMIT 1"); + } + + + // alle vorlagen ind ei Leute kopieren + if($userid<=0){ + $user = $this->app->DB->SelectArr("SELECT * FROM user" . ($bezeichnung != '' ? " WHERE vorlage like '$bezeichnung' " : '')); + } + else{ + $user = $this->app->DB->SelectArr("SELECT * FROM user WHERE id='$userid'"); + } + $startzeit = microtime(true); + $cuser = !empty($user)?count($user):0; + + $grantingUserId = $this->app->User->GetID(); + $grantingUserName = $this->app->DB->Select("SELECT username FROM user WHERE id=$grantingUserId"); + $userPermission = $this->app->Container->get('UserPermissionService'); + + for($i=0;$i<$cuser;$i++) + { + $user[$i]['vorlage'] = strtolower($user[$i]['vorlage']); + if($vorlage) + { + $id_vorlage = $vorlage; + }else{ + $id_vorlage = $this->app->DB->Select("SELECT id FROM uservorlage WHERE bezeichnung LIKE '".$user[$i]['vorlage']."' LIMIT 1"); + } + if($id_vorlage == $vorlage || $vorlage == 0) + { + $receivingUserId = $user[$i]['id']; + $receivingUserName = $this->app->DB->Select("SELECT username FROM user WHERE id=$receivingUserId"); + + // neue eintraege + if($userid == 0 && $vorlag > 0 && $module != '' && $action != '') + { + $this->app->DB->Delete("DELETE FROM userrights WHERE user = '".$user[$i]['id']."' AND module='$module' AND action = '$action'"); + try { + $userPermission->log($grantingUserId,$grantingUserName,$receivingUserId,$receivingUserName,$module,$action,false); + }catch (Exception $ex){ + $this->app->erp->LogFile('Fehler bei Zuweisung Rechtehistore',$ex->getMessage()); + } + $this->app->DB->Insert("INSERT INTO userrights (user, module, action, permission) VALUES ('".$user[$i]['id']."','$module','$action','$permission')"); + try { + $userPermission->log($grantingUserId,$grantingUserName,$receivingUserId,$receivingUserName,$module,$action,true); + }catch (Exception $ex){ + $this->app->erp->LogFile('Fehler bei Zuweisung Rechtehistore',$ex->getMessage()); + } + }else{ + $permissions = $this->app->DB->SelectArr("SELECT module, action,permission + FROM uservorlagerights WHERE vorlage = '".$id_vorlage."' ".($module != ''?" AND module = '$module' ":"").($action != ''?" AND action = '$action'":'')); + foreach($permissions as $permission){ + try { + $userPermission->log($grantingUserId,$grantingUserName,$receivingUserId,$receivingUserName,$permission['module'],$permission['action'],$permission['permission']); + }catch (Exception $ex){ + $this->app->erp->LogFile('Fehler bei Zuweisung Rechtehistore',$ex->getMessage()); + } + } + $this->app->DB->Update("REPLACE INTO userrights (user, module,action,permission) (SELECT '".$user[$i]['id']."',module, action,permission + FROM uservorlagerights WHERE vorlage = '".$id_vorlage."' ".($module != ''?" AND module = '$module' ":"").($action != ''?" AND action = '$action'":'').") "); + $neuesquery = $this->app->DB->Query("Select * from userrights where user = ".$user[$i]['id']." ".($module != ''?" AND module = '$module' ":"").($action != ''?" AND action = '$action'":'')." order by module, action, id desc"); + if($neuesquery) + { + $aktmodule = false; + $aktaction = false; + while($v = $this->app->DB->Fetch_Array($neuesquery)) + { + if($aktaction != $v['action'] || $aktmodule != $v['module']) + { + $aktaction = $v['action']; + $aktmodule = $v['module']; + } else { + $this->app->DB->Delete("DELETE FROM userrights where id = ".$v['id']); + + } + } + $this->app->DB->free($neuesquery); + } + } + } + } + } + + // @refactor in Poll Komponente (oder Welcome Modul) + // @refactor replace stringcleaner? also validate options_json + function UserEvent($invisible = false) + { + /** @var \Xentral\Modules\SystemNotification\Service\NotificationInterface $notifyService */ + $notifyService= $this->app->Container->get('NotificationService'); + + /** @var \Xentral\Modules\SystemNotification\Gateway\NotificationGateway $notifyGateway */ + $notifyGateway = $this->app->Container->get('NotificationGateway'); + $messages = $notifyGateway->findByUserId($this->app->User->GetID(), 0, 5); + + $result = array(); + if(count($messages) > 0) { + + $cleaner = new Stringcleaner($this->app); + + foreach ($messages as $message) { + // xss prevention + $message['title'] = $cleaner->CleanString($message['title'], 'nojs'); + $message['message'] = $cleaner->CleanString($message['message'], 'nojs'); + $message['options'] = []; + $messageOptions = !empty($message['options_json']) ? json_decode($message['options_json'], true) : null; + if (!empty($messageOptions['id'])) { + $message['options']['id'] = strip_tags($messageOptions['id']); + } + if (!empty($messageOptions['buttons'])) { + $message['options']['buttons'] = []; + foreach ($messageOptions['buttons'] as $messageButton) { + $messageButtonAttrs = []; + foreach ($messageButton as $buttonAttrName => $buttonAttrValue) { + if ($buttonAttrName === 'link') { + $messageButtonAttrs[htmlspecialchars($buttonAttrName)] = $cleaner->CleanString($buttonAttrValue, 'nojs'); + } else{ + $messageButtonAttrs[htmlspecialchars($buttonAttrName)] = htmlspecialchars($buttonAttrValue); + } + } + $message['options']['buttons'][] = $messageButtonAttrs; + } + } + // END xss prevention + + $result[] = [ + 'event' => 'notification', + 'type' => $message['type'], + 'title' => $message['title'], + 'message' => $message['message'], + 'options' => !empty($message['options']) ? $message['options'] : null, + 'priority' => (int)$message['priority'] === 1, + ]; + // Delete processed messages + $notifyService->delete($message['id']); + } + } + + if($this->app->erp->RechteVorhanden('chat','list')) { + $userId = $this->app->User->GetID(); + $registrierDatum = $this->app->DB->Select("SELECT u.logdatei FROM `user` AS u WHERE u.id='".$userId."'"); + + $ungelesenOeffentlich = (int)$this->app->DB->Select( + "SELECT COUNT(c.id) + FROM chat AS c + LEFT JOIN chat_gelesen AS g ON c.id = g.message AND (g.user = '".$userId."' OR g.user = 0) + WHERE c.user_to='0' AND c.zeitstempel > '".$registrierDatum."' + AND g.id IS NULL" + ); + $ungelesenPrivat = (int)$this->app->DB->Select( + "SELECT COUNT(c.id) + FROM chat AS c + INNER JOIN `user` AS u ON c.user_from = u.id + LEFT JOIN chat_gelesen AS g ON c.id = g.message + WHERE u.activ = 1 AND c.user_to='".$userId."' + AND g.id IS NULL" + ); + $anzchat = $ungelesenOeffentlich + $ungelesenPrivat; + + if($anzchat>0) { + $result[] = array('event'=>'chatbox','sound'=>0, 'message'=>$anzchat); + } + } + + if(count($result)>0){ + return $result; + } + return false; + } + + /** + * @deprecated + * + * @param bool $delete + * + * @return array|void + */ + function UserEventNachrichten($delete = false) + { + $user = (int)$this->app->User->GetID(); + if(!$user)return; + $adresse = (int)$this->app->DB->Select("SELECT adresse FROM user WHERE id = '".$user."' LIMIT 1"); + if($adresse) + { + $_gruppen = $this->app->DB->SelectArr("SELECT distinct parameter as gruppe FROM adresse_rolle WHERE adresse = '$adresse' AND subjekt = 'Mitglied' AND (bis = '0000-00-00' OR bis >= date(now())) AND parameter > 0"); + if($_gruppen) + { + foreach($_gruppen as $gruppe) + { + $gruppen[] = " b.gruppe = '".(int)$gruppe['gruppe']."' "; + } + } + } + if(!empty($gruppen)) + { + $subwhere = implode(' OR ',$gruppen); + $nachrichten = $this->app->DB->SelectArr("SELECT b.* FROM boxnachrichten b WHERE (b.user = '$user' OR ($subwhere)) AND (ablaufzeit = 0 OR + TIME_TO_SEC( + TIMEDIFF( + now(), + zeitstempel + ) <= ablaufzeit + ) + ) ORDER BY ablaufzeit > 0 DESC, prio DESC, zeitstempel"); + + }else{ + $nachrichten = $this->app->DB->SelectArr("SELECT b.* FROM boxnachrichten b WHERE user = '$user' AND (ablaufzeit = 0 OR + TIME_TO_SEC( + TIMEDIFF( + now(), + zeitstempel + ) <= ablaufzeit + ) + ) ORDER BY ablaufzeit > 0 DESC, prio DESC, zeitstempel"); + } + if($nachrichten) + { + if($delete)$this->app->DB->Delete("DELETE from boxnachrichten WHERE id = '".$nachrichten[0]['id']."' LIMIT 1"); + return array('anzahl'=>count($nachrichten),'nachricht'=>reset($nachrichten)); + } + return array('anzahl'=>0); + } + + /** + * @deprecated + * + * @param $user + * @param $gruppe + * @param $bezeichnung + * @param string $nachricht + * @param int $prio + * @param int $ablaufzeit + * @param int $beep + * @param string $objekt + * @param int $parameter + * @param bool $delete + * + * @return void + */ + function AddUserGruppenNachricht($user, $gruppe, $bezeichnung, $nachricht = '', $prio = 0,$ablaufzeit = 0, $beep = 0, $objekt = '', $parameter = 0, $delete = false) + { + $parameter = (int)$parameter; + $beep = (int)$beep; + $objekt = $this->app->DB->real_escape_string($objekt); + if($delete == true) + { + if(!empty($objekt) && !empty($parameter))$this->app->DB->Delete("DELETE FROM boxnachrichten WHERE objekt like '".$objekt."' AND parameter = '$parameter' "); + return; + } + if($delete && is_numeric($delete)) + { + $delete = (int)$delete; + $this->app->DB->Delete("DELETE FROM boxnachrichten WHERE id = '$delete' LIMIT 1"); + return; + } + $user = (int)$user; + $gruppe = (int)$gruppe; + $prio = (int)$prio; + $ablaufzeit = (int)$ablaufzeit; + $bezeichnung = $this->app->DB->real_escape_string($bezeichnung); + $nachricht = $this->app->DB->real_escape_string($nachricht); + $this->app->DB->Insert("INSERT INTO boxnachrichten (user, gruppe, bezeichnung, nachricht, prio, ablaufzeit, objekt, parameter, beep) VALUES ( + '$user','$gruppe','$bezeichnung','$nachricht','$prio','$ablaufzeit','$objekt','$parameter','$beep' + )"); + return $this->app->DB->GetInsertID(); + } + + // @refactor FileLock Komponente + function ProzessLock($name) + { + $fp = @fopen($this->GetTMP()."lock_". $name . '.lock', 'w+'); + + if($fp) + { + if (flock($fp, LOCK_EX)) { + ftruncate($fp, 0); + fwrite($fp, "Write something here\n"); + return $fp; + } + @fclose($fp); + } + return false; + } + + // @refactor FileLock Komponente + function ProzessUnlock($fp) + { + if(!$fp)return; + fflush($fp); // leere Ausgabepuffer bevor die Sperre frei gegeben wird + flock($fp, LOCK_UN); // Gib Sperre frei + fclose($fp); + } + + // @refactor Formater Komponente + function ConvertToBytes($tmp) + { + $tmp = trim($tmp); + $last = strtolower($tmp[strlen($tmp)-1]); + switch($last) + { + case 'g': + $tmp *= 1024; + case 'm': + $tmp *= 1024; + case 'k': + $tmp *= 1024; + } + return $tmp; + } + + // @refactor SystemInformation Komponente + function MaxUploadFileSize() + { + //select maximum upload size + $max_upload = $this->ConvertToBytes(ini_get('upload_max_filesize')); + $max_post = $this->ConvertToBytes(ini_get('post_max_size')); + $memory_limit = $this->ConvertToBytes(ini_get('memory_limit')); + return min($max_upload, $max_post, $memory_limit); + } + + // @refactor Document Komponente + public function GetSpracheBeleg($type, $id) + { + if(!empty($this->sprachen) && !empty($this->sprachen[$type]) && !empty($this->sprachen[$type][$id])) + { + return $this->sprachen[$type][$id]; + } + $docArr = $this->app->DB->SelectRow(sprintf('SELECT sprache, adresse FROM `%s` WHERE id = %d', $type, $id)); + $sprache = !empty($docArr)?$docArr['sprache']:$this->app->DB->Select("SELECT sprache FROM $type WHERE id='$id' LIMIT 1"); + if($sprache=='') { + $adresse = !empty($docArr)?$docArr['adresse']:$this->app->DB->Select("SELECT adresse FROM $type WHERE id='$id' LIMIT 1"); + $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + } + if($sprache=='') { + $sprache="de"; + } + $this->sprachen[$type][$id] = $sprache; + return $sprache; + } + + public function GetSpracheBelegISO($type, $id) + { + $language = $this->GetSpracheBeleg($type, $id); + if(strlen($language) > 2) + { + $language = $this->app->DB->Select("SELECT iso FROM sprachen WHERE alias='$language' ORDER by aktiv=1 LIMIT 1"); + } + return $language; + } + + + + // @refactor Document Komponente + function BelegVersand($typ,$id,$versandart,$drucker="") + { + if($typ!="rechnung" && $typ!="angebot" && $typ!="auftrag" && $typ!="gutschrift" && $typ!="lieferschein" && $typ!="reisekosten") + return; + + if($versandart!="email" && $versandart!="brief") + return; + + $projekt = $this->app->DB->Select("SELECT projekt FROM $typ WHERE id='$id' LIMIT 1"); + $name = $this->app->DB->Select("SELECT name FROM $typ WHERE id='$id' LIMIT 1"); + $email = $this->app->DB->Select("SELECT email FROM $typ WHERE id='$id' LIMIT 1"); + $adresse = $this->app->DB->Select("SELECT adresse FROM $typ WHERE id='$id' LIMIT 1"); + + // pruefe ob immer per per Papier oder immer per mail + $rechnung_papier = $this->app->DB->Select("SELECT rechnung_papier FROM adresse WHERE id='$adresse' LIMIT 1"); + $rechnung_permail = $this->app->DB->Select("SELECT rechnung_permail FROM adresse WHERE id='$adresse' LIMIT 1"); + $rechnung_anzahlpapier = $this->app->DB->Select("SELECT rechnung_anzahlpapier FROM adresse WHERE id='$adresse' LIMIT 1"); + + if($rechnung_papier=="1" && $typ=="rechnung") $versandart="brief"; + if($rechnung_permail=="1" && $typ=="rechnung") $versandart="email"; + + + $sprache = $this->app->DB->Select("SELECT sprache FROM $typ WHERE id='$id' LIMIT 1"); + if($sprache=="") + $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + + if($sprache=='') { + $sprache='deutsch'; + } + + $emailtext = $this->Geschaeftsbriefvorlage($sprache,$typ,$projekt,$name,$id); + $idvorlage = $this->GetGeschaeftsBriefID($typ,$sprache,$projekt); + + $footer = $this->Grussformel($projekt,$sprache); + if($footer!="") $emailtext['text'] = $emailtext['text']."\r\n".$footer; + + $this->BriefpapierHintergrundDisable($drucker); + + switch($typ) + { + case "rechnung": + $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?true:!$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projekt); + }else{ + $Brief = new RechnungPDF($this->app,$projekt); + } + $Brief->GetRechnung($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?false:!$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projekt); + }else{ + $Brief = new RechnungPDF($this->app,$projekt); + } + $Brief->GetRechnung($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + break; + case "angebot": + $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?true:!$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('AngebotPDFCustom')) + { + $Brief = new AngebotPDFCustom($this->app,$projekt); + }else{ + $Brief = new AngebotPDF($this->app,$projekt); + } + $Brief->GetAngebot($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?false:!$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('AngebotPDFCustom')) + { + $Brief = new AngebotPDFCustom($this->app,$projekt); + }else{ + $Brief = new AngebotPDF($this->app,$projekt); + } + $Brief->GetAngebot($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + break; + case "auftrag": + $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?true:!$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('AuftragPDFCustom')) + { + $Brief = new AuftragPDFCustom($this->app,$projekt); + }else{ + $Brief = new AuftragPDF($this->app,$projekt); + } + $Brief->GetAuftrag($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?false:!$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('AuftragPDFCustom')) + { + $Brief = new AuftragPDFCustom($this->app,$projekt); + }else{ + $Brief = new AuftragPDF($this->app,$projekt); + } + $Brief->GetAuftrag($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + break; + case "bestellung": + $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?true:!$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('BestellungPDFCustom')) + { + $Brief = new BestellungPDFCustom($this->app,$projekt); + }else{ + $Brief = new BestellungPDF($this->app,$projekt); + } + $Brief->GetBestellung($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?false:!$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('BestellungPDFCustom')) + { + $Brief = new BestellungPDFCustom($this->app,$projekt); + }else{ + $Brief = new BestellungPDF($this->app,$projekt); + } + $Brief->GetBestellung($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + break; + case "preisanfrage": + $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?true:!$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('PreisanfragePDFCustom')) + { + $Brief = new PreisanfragePDFCustom($this->app,$projekt); + }else{ + $Brief = new PreisanfragePDF($this->app,$projekt); + } + $Brief->GetPreisanfrage($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?false:!$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('PreisanfragePDFCustom')) + { + $Brief = new PreisanfragePDFCustom($this->app,$projekt); + }else{ + $Brief = new PreisanfragePDF($this->app,$projekt); + } + $Brief->GetPreisanfrage($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + break; + case "produktion": + $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?true:!$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('ProduktionPDFCustom')) + { + $Brief = new ProduktionPDFCustom($this->app,$projekt); + }else{ + $Brief = new ProduktionPDF($this->app,$projekt); + } + $Brief->GetProduktion($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = $versandart === 'email'?false:!$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('ProduktionPDFCustom')) + { + $Brief = new ProduktionPDFCustom($this->app,$projekt); + }else{ + $Brief = new ProduktionPDF($this->app,$projekt); + } + $Brief->GetProduktion($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + break; + + } + + if($rechnung_anzahlpapier > 1 && $typ==='rechnung' && $versandart==='brief') + { + for($ra_i=0;$ra_i<$rechnung_anzahlpapier;$ra_i++) + { + $sendtmp[]=$tmpfile; + } + } else { + $sendtmp = array($tmpfile); + } + + //$this->LogFile("BelegeVersand T $typ I $id V $versandart Email $email Name $name betreff ".$emailtext['betreff']); + + if($drucker<0) + $drucker = $this->app->DB->Select("SELECT standarddrucker FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + else + $drucker = $this->app->DB->Select("SELECT id FROM drucker WHERE id='".$drucker."' LIMIT 1"); + + if($drucker <=0) + $drucker = $this->Firmendaten('standardversanddrucker'); + + if($versandart==='email') { + if(!$this->isHTML($emailtext['text'])){ + $emailtext['text'] = nl2br($emailtext['text']);//str_replace("\r\n", "
", $emailtext['text']); + } + if( + in_array( + $typ, + ['auftrag', 'rechnung','gutschrift','angebot','bestellung','retoure','proformarechnung','lieferschein'] + ) + ) { + $dateien = [$tmpfile]; + + if($typ === 'auftrag'){ + $stichwoerter = $this->app->DB->SelectArr("SELECT * FROM datei_stichwoerter WHERE objekt='geschaeftsbrief_vorlagen' AND parameter='$idvorlage' AND parameter > 0"); + if($stichwoerter){ + foreach ($stichwoerter as $v) { + $dateiname = str_replace(' ', '_', $this->app->erp->GetDateiName($v['datei'])); + if($dateiname){ + $dateiinhalt = $this->app->erp->GetDatei($v['datei']); + + if($handle = fopen(rtrim($this->app->erp->GetTMP(), '/') . "/" . $dateiname, "wb")){ + fwrite($handle, $dateiinhalt); + fclose($handle); + $dateien[] = rtrim($this->app->erp->GetTMP(), '/') . "/" . $dateiname; + $dateienIds[] = $v['datei']; + } + } + } + } + } + + $stichwoerterAnhaenge = $this->app->DB->SelectArr("SELECT * FROM datei_stichwoerter WHERE subjekt = 'Anhang' AND objekt = '$typ' AND parameter = '$id' AND parameter > 0"); + if($stichwoerterAnhaenge) + { + foreach($stichwoerterAnhaenge as $v) + { + $dateiname = str_replace(' ','_',$this->app->erp->GetDateiName($v['datei'])); + + if($dateiname && !in_array($v['datei'], $dateienIds)) + { + $dateiinhalt = $this->app->erp->GetDatei($v['datei']); + + if($handle = fopen (rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname, "wb")) + { + fwrite($handle, $dateiinhalt); + fclose($handle); + $dateien[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname; + } + } + } + } + + $this->DokumentSend($adresse,$typ, $id, $versandart,$emailtext['betreff'],$emailtext['text'],$dateien,"","",$projekt,$email, $name); + if($dateien && count($dateien) > 1) + { + for($i = 1; $i < count($dateien); $i++) + { + if(@is_file($dateien[$i])){ + @unlink($dateien[$i]); + } + } + } + }else{ + $this->DokumentSend($adresse,$typ, $id, $versandart,$emailtext['betreff'],$emailtext['text'],array($tmpfile),"","",$projekt,$email, $name); + } + } + else{ + $this->DokumentSend($adresse, $typ, $id, $versandart, $emailtext['betreff'], $emailtext['text'], $sendtmp, $drucker, "", $projekt, $email, $name); + } + + + if($this->Firmendaten("belegeinanhang")=="1") { + $fileid = $this->CreateDateiWithStichwort($tmpfile, $module,'','',$tmpfile, $this->app->User->GetName() ,$typ,$typ, $id, "",false); + } + /* + $fileid = $this->CreateDatei($tmpfile,$module,"","",$tmpfile,$this->app->User->GetName()); + $this->AddDateiStichwort($fileid,$typ,$typ,$id,false); + */ + + $ansprechpartner = $name." <".$email.">"; + + $this->app->DB->Insert("INSERT INTO dokumente_send + (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet,dateiid) + VALUES ('','$typ',NOW(),'".$this->app->User->GetName()."', + '$adresse','$id','$versandart','".$emailtext['betreff']."','".$emailtext['text']."','$projekt','$ansprechpartner',1,'$fileid')"); + + unlink($tmpfile); + + if($typ==='rechnung' || $typ==='angebot' || $typ==='gutschrift') + { + if($typ === 'rechnung') + { + $this->closeInvoice($id,'freigegeben'); + } + $this->app->DB->Update("UPDATE $typ SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + } + + $this->app->DB->Update("UPDATE $typ SET versendet=1, versendet_am=NOW(), + versendet_per='$versandart',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); + + + + $this->BriefpapierHintergrundEnable(); + + + switch($typ) + { + case "angebot": $this->AngebotProtokoll($id,"Angebot versendet"); break; + case "auftrag": $this->AuftragProtokoll($id,"Auftrag versendet"); break; + case "rechnung": $this->RechnungProtokoll($id,"Rechnung versendet"); break; + case "lieferschein": $this->LieferscheinProtokoll($id,"Lieferschein versendet"); break; + case "gutschrift": $this->GutschriftProtokoll($id,"Gutschrift versendet"); break; + case "reisekosten": $this->ReisekostenProtokoll($id,"Reisekosten versendet"); break; + case "proformarechnung": $this->ProformarechnungProtokoll($id,"Proformarechnung versendet"); break; + } + } + + // @refactor DocumentPdf Komponente + public function PDFArchivieren($type,$id, $force = false) + { + $id = (int)$id; + if($id <= 0){ + return false; + } + $types = array("auftrag","angebot","rechnung","lieferschein","gutschrift","bestellung","reisekosten","anfrage","preisanfrage","proformarechnung","arbeitsnachweis"); + if(!in_array($type, $types)){ + return false; + } + $class = ucfirst($type).'PDFCustom'; + if(!class_exists($class)){ + $class = ucfirst($type).'PDF'; + } + if(class_exists($class)) { + $projekt = $this->app->DB->Select("SELECT projekt FROM $type WHERE id = '$id' LIMIT 1"); + $Brief = new $class($this->app,$projekt); + $get = 'Get'.ucfirst($type); + if(method_exists($Brief, $get)) { + $tmpfile = ''; + try { + $Brief->$get($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument($force, $force); + unlink($tmpfile); + $tmpfile = ''; + } + catch(Exception $e) { + if($tmpfile !== '' && is_file($tmpfile)) { + unlink($tmpfile); + $tmpfile = ''; + } + $this->LogFile($this->app->DB->real_escape_string($e->getMessage())); + return false; + } + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + try { + $Brief = new $class($this->app, $projekt); + $Brief->$get($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument($force, $force); + unlink($tmpfile); + $tmpfile = ''; + } + catch(Exception $e) { + if($tmpfile !== '' && is_file($tmpfile)) { + unlink($tmpfile); + } + $this->LogFile($this->app->DB->real_escape_string($e->getMessage())); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + return false; + } + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if($force) { + $this->app->DB->Update("UPDATE `{$type}` SET `zuarchivieren` = 0 WHERE `id` = {$id}"); + } + return true; + } + } + return false; + } + + // @refactor in Location Klasse + function UrlOrigin($s, $use_forwarded_host=false) + { + $ssl = (!empty($s['HTTPS']) && $s['HTTPS'] == 'on') ? true:false; + $sp = strtolower($s['SERVER_PROTOCOL']); + $protocol = substr($sp, 0, strpos($sp, '/')) . (($ssl) ? 's' : ''); + $port = $s['SERVER_PORT']; + $port = ((!$ssl && $port=='80') || ($ssl && $port=='443')) ? '' : ':'.$port; + $host = ($use_forwarded_host && isset($s['HTTP_X_FORWARDED_HOST'])) ? $s['HTTP_X_FORWARDED_HOST'] : (isset($s['HTTP_HOST']) ? $s['HTTP_HOST'] : null); + $host = isset($host) ? $host : $s['SERVER_NAME'] . $port; + + $path = str_replace('/index.php','',$s['SCRIPT_NAME']); + + return $protocol . '://' . $host.$path; + } + + // @refactor Formater Komponente + function ZeitInStundenMinuten($number, $format = "%h:%i") { + + $number = str_replace(",",'.',$number); + $h = floor($number); + $i = round(($number - $h) * 60); + + $h = str_pad($h, 2, "0", STR_PAD_LEFT); + $i = str_pad($i, 2, "0", STR_PAD_LEFT); + $format = preg_replace("/%h/", $h, $format); + $format = preg_replace("/%i/", $i, $format); + return $format; + } + + // @refactor Formater Komponente + + /** + * @param string $text + * + * @return string + */ + public function UmlauteEntfernen($text) + { + $text = $this->ReadyForPDF($text); + $text = str_replace ("ä", "ae", $text); + $text = str_replace ("Ä", "Ae", $text); + $text = str_replace ("ö", "oe", $text); + $text = str_replace ("Ö", "Oe", $text); + $text = str_replace ("ü", "ue", $text); + $text = str_replace ("Ü", "Ue", $text); + $text = str_replace ("ß", "ss", $text); + $text = str_replace( + array('ü','Ü','ä','Ä','ö','Ö','ß'), + array('ue','Ue','ae','Ae','oe','Oe','ss'), + $text + ); + $text = str_replace ("&", "u", $text); + $text = str_replace ("`", "", $text); + $text = str_replace ("'", "", $text); + + return $text; + } + + // @refactor DbHelper Komponente + function Stroke($fieldstroke, $field) { + return "if(" . $fieldstroke . ",CONCAT(''," . $field . ",'')," . $field . ")"; + } + + // @refactor Formater Komponente + function Dateinamen($text) { + $text = $this->UmlauteEntfernen($text); + $text = str_replace(' ', '_', $text); + $text = preg_replace('#[^-_.A-Za-z0-9]#', '', $text); + return $text; + } + + // @refactor in Dateien Modul + function AnzahlDateien($objekt,$id) + { + return $this->app->DB->Select("SELECT COUNT(id) FROM datei_stichwoerter WHERE objekt='$objekt' AND parameter='$id'"); + } + + + // @refactor in Service Modul + function AnzahlOffeneSupport() + { + return 0; + } + + + // @refactor in Aufgaben Modul + function AnzahlOffeneAufgaben() + { + return (int)$this->app->DB->Select("SELECT COUNT(a.id) FROM aufgabe a WHERE (a.adresse='" . $this->app->User->GetAdresse() . "') AND a.startdatum='0000-00-00' AND a.status!='abgeschlossen' AND ( abgabe_bis='0000-00-00' OR abgabe_bis<=NOW())"); + } + + + public function AnzahlOffeneTickets($eigene=true) + { + return 0; + } + + + // @refactor UiHelper Komponente + function UserDevice() + { + return 'desktop'; + } + + // @refactor in Acl oder Login Modul + function Startseite($weiterleitung = "") + { + if($this->app->User->GetID()!="") + { + if($this->UserDevice()=="desktop") + { + $startseite = (string)$weiterleitung !== ''?'':$this->app->DB->Select("SELECT startseite FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + $startseite = $this->ReadyForPDF($startseite); + if(strpos($startseite,'action=logout') !== false && strpos($startseite,'module=welcome') !== false) { + $startseite= ''; + } + // wenn die GPS Stechuhr da ist + if((string)$weiterleitung !== '') + { + header("Location: $weiterleitung"); + } + elseif($startseite!=''){ + $this->app->Location->execute((String)$startseite); + } + else{ + header("Location: index.php?module=welcome&action=start"); + } + exit; + } else + { + header("Location: index.php?module=welcome&action=start"); + exit; + } + } + header("Location: index.php?module=welcome&action=login"); + exit; + } + + // @refactor in Kalender Modul @prüfen + function getFirstDayOfWeek($year, $weeknr) + { + $offset = date('w', mktime(0,0,0,1,1,$year)); + $offset = ($offset < 5) ? 1-$offset : 8-$offset; + $monday = mktime(0,0,0,1,1+$offset,$year); + + return date('Y-m-d',strtotime('+' . ($weeknr - 1) . ' weeks', $monday)); + } + + // @refactor in SystemInformation Modul + function IsWindows() + { + return strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'; + } + + /** + * Returns the absolute path to installation directory; without trailing slash + * + * @return string + */ + public function GetRootPath() + { + return dirname(dirname(__DIR__)); + } + + // @refactor in SystemInformation Modul + function GetTMP() + { + $userdata = $this->app->Conf->WFuserdata; + $dbname = $this->app->Conf->WFdbname; + + if ($this->IsWindows()) { + $tmp = $userdata."\\tmp\\".$dbname."\\"; + } else { + $tmp = $userdata."/tmp/".$dbname."/"; + } + + $tmp = str_replace('//','/',$tmp); + + if(!is_dir($tmp)){ + mkdir($tmp, 0777, true); + } + + return $tmp; + } + + // @refactor in SystemInformation Modul + function GetUSERDATA() + { + return $this->app->Conf->WFuserdata; + } + + + + /** @deprecated */ + function RetoureSeriennummernberechnen($id) + { + + } + +function LieferscheinSeriennummernberechnen($id) +{ + /** @var Seriennummern $obj */ + $obj = $this->LoadModul('seriennummern'); + if(!empty($obj) && method_exists($obj, 'LieferscheinSeriennummernberechnen')) { + $obj->LieferscheinSeriennummernberechnen($id); + } +} + +// @refactor in Lager Modul +function ArtikelAnzahlLagerPlatzMitSperre($artikel,$lager_platz) +{ + $result = $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='$artikel' AND lpi.lager_platz='$lager_platz'"); + if($result <=0) $result=0; + return $result; +} + + +// @refactor LagerBeleg Modul +function LieferscheinEinlagern($id,$grund="Lieferschein Einlagern", $lpiids = null) +{ + if(!$id)return; + $belegnr = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id = '$id' LIMIT 1"); + $bearbeiter = ''; + if(isset($this->app->User) && $this->app->User && method_exists($this->app->User,'GetName'))$bearbeiter = $this->app->User->GetName(); + $objekt_lager_platz = $this->app->DB->SelectArr("SELECT olp.id, olp.menge, olp.lager_platz, olp.artikel, olp.parameter, lp.id as lpid FROM + lieferschein_position lp INNER JOIN objekt_lager_platz olp ON lp.id = olp.parameter AND olp.objekt = 'lieferschein' AND lp.lieferschein = '$id'"); + if($objekt_lager_platz) + { + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id = '$id' LIMIT 1"); + foreach($objekt_lager_platz as $olp) + { + $lpiid = null; + if(isset($lpiids[$olp['lpid']]))$lpiid = $lpiids[$olp['lpid']]; + + $this->app->erp->LagerEinlagern($olp['artikel'],$olp['menge'],$olp['lager_platz'],$projekt, + "Stornierung Lieferschein $belegnr",$bearbeiter,"",'lieferschein', $id, $lpiid); + $beleg_chargesnmhd = $this->app->DB->SelectArr("SELECT * FROM `beleg_chargesnmhd` WEHRE doctype = 'lieferschein' AND doctypeid = '$id' AND pos = '".$olp['parameter']."'"); + $seriennummern = $this->app->DB->SelectArr("SELECT * FROM seriennummern WHERE lieferschein = '$id' AND lieferscheinpos = '".$olp['parameter']."'"); + if($seriennummern) + { + foreach($seriennummern as $sn) + { + $belegesnarr['sn'][] = array('menge'=>1, 'value'=>$sn['seriennummer'],'table'=>'seriennummern','id'=>$sn['id']); + } + } + if($beleg_chargesnmhd) + { + $belegesnarr = null; + foreach($beleg_chargesnmhd as $bc) + { + $belegesnarr[$bc['typ']][] = array('menge'=>$bc['menge'], 'value'=>$bc['wert'],'table'=>'beleg_chargesnmhd','id'=>$bc['id']); + } + } + if(isset($belegesnarr['sn'])) + { + foreach($belegesnarr['sn'] as $v) + { + if(isset($belegesnarr['charge']) && isset($belegesnarr['mhd'])) + { + $charge = ''; + $mhd = ''; + foreach($belegesnarr['charge'] as $k2 => $v2) + { + if($v2['menge'] > 1) + { + $charge = $v2['value']; + $belegesnarr['charge'][$k2]['menge'] -= 1; + break; + }elseif($v2['menge'] == 1) + { + $charge = $v2['value']; + unset($belegesnarr['charge'][$k2]); + break; + } + } + foreach($belegesnarr['mhd'] as $k2 => $v2) + { + if($v2['menge'] > 1) + { + $mhd = $v2['value']; + $belegesnarr['mhd'][$k2]['menge'] -= 1; + break; + }elseif($v2['menge'] == 1) + { + $mhd = $v2['value']; + unset($belegesnarr['mhd'][$k2]); + break; + } + } + if(isset($v['table']) && $v['table'] == 'seriennummern' && !empty($v['id'])) + { + $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1"); + }elseif(isset($v['table']) && $v['table'] == 'beleg_chargesnmhd' && !empty($v['id'])){ + $this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1"); + } + if(method_exists($this->app->erp,'AddSeriennummerLager'))$this->app->erp->AddSeriennummerLager($olp['artikel'], $olp['lager_platz'], $v['value'],"Stornierung Lieferschein $belegnr", "", $mhd, $charge,'lieferschein', $id); + if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung'))$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], 1,$olp['lager_platz'], $mhd, $charge); + if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung'))$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],1, $olp['lager_platz'],$mhd,$charge,$grund); + }elseif(isset($belegesnarr['charge'])) + { + $charge = ''; + $mhd = ''; + foreach($belegesnarr['charge'] as $k2 => $v2) + { + if($v2['menge'] > 1) + { + $charge = $v2['value']; + $belegesnarr['charge'][$k2]['menge'] -= 1; + break; + }elseif($v2['menge'] == 1) + { + $charge = $v2['value']; + unset($belegesnarr['charge'][$k2]); + break; + } + } + if(isset($v['table']) && $v['table'] == 'seriennummern' && !empty($v['id'])) + { + $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1"); + }elseif(isset($v['table']) && $v['table'] == 'beleg_chargesnmhd' && !empty($v['id'])){ + $this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1"); + } + if(method_exists($this->app->erp,'AddSeriennummerLager'))$this->app->erp->AddSeriennummerLager($olp['artikel'],1, $olp['lager_platz'], $v['value'],$grund, "", $mhd, $charge,'lieferschein', $id); + if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung'))$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'], 1,$olp['lager_platz'],$mhd,$charge,"", 'lieferschein', $id,$grund); + }elseif(isset($belegesnarr['mhd'])) + { + $charge = ''; + $mhd = ''; + foreach($belegesnarr['mhd'] as $k2 => $v2) + { + if($v2['menge'] > 1) + { + $mhd = $v2['value']; + $belegesnarr['mhd'][$k2]['menge'] -= 1; + break; + }elseif($v2['menge'] == 1) + { + $mhd = $v2['value']; + unset($belegesnarr['mhd'][$k2]); + break; + } + } + if(isset($v['table']) && $v['table'] == 'seriennummern' && !empty($v['id'])) + { + $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1"); + }elseif(isset($v['table']) && $v['table'] == 'beleg_chargesnmhd' && !empty($v['id'])){ + $this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1"); + } + if(method_exists($this->app->erp,'AddSeriennummerLager'))$this->app->erp->AddSeriennummerLager($olp['artikel'], $olp['lager_platz'], $v['value'],$grund, "", $mhd, $charge); + if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung'))$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'],1, $olp['lager_platz'], $mhd, $charge, "", "lieferschein", $id, $grund); + }else{ + if(isset($v['table']) && $v['table'] == 'seriennummern' && !empty($v['id'])) + { + $this->app->DB->Delete("DELETE FROM seriennummern WHERE id = '".$v['id']."' LIMIT 1"); + }elseif(isset($v['table']) && $v['table'] == 'beleg_chargesnmhd' && !empty($v['id'])){ + $this->app->DB->Delete("DELETE FROM beleg_chargesnmhd WHERE id = '".$v['id']."' LIMIT 1"); + } + if(method_exists($this->app->erp,'AddSeriennummerLager'))$this->app->erp->AddSeriennummerLager($olp['artikel'], $olp['lager_platz'], $v['value'],$grund, "", $mhd, $charge); + } + } + }else{ + if(isset($belegesnarr['charge']) && isset($belegesnarr['mhd'])) + { + foreach($belegesnarr['charge'] as $v2) + { + $nochmenge = $v2['value']; + foreach($belegesnarr['mhd'] as $k3 => $v3) + { + if($nochmenge <= 0)break; + if($nochmenge == $v3['menge']) + { + $mhd = $v3['value']; + $charge = $v2['value']; + if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung'))$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], $nochmenge,$olp['lager_platz'], $mhd, $charge, "", "lieferschein", $id, $grund); + if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung'))$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],$nochmenge, $olp['lager_platz'],$mhd,$charge,"", 'lieferschein', $id,$grund); + unset($belegesnarr['mhd'][$k3]); + break; + }elseif($nochmenge > $v3['menge']) + { + $mhd = $v3['value']; + $charge = $v2['value']; + if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung'))$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], $v3['menge'],$olp['lager_platz'], $mhd, $charge, "", "lieferschein", $id, $grund); + if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung'))$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],$v3['menge'], $olp['lager_platz'],$mhd,$charge,"", 'lieferschein', $id,$grund); + unset($belegesnarr['mhd'][$k3]); + $nochmenge -= $v3['menge']; + }elseif($nochmenge < $v3['menge']) + { + $mhd = $v3['value']; + $charge = $v2['value']; + if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung'))$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'], $nochmenge,$olp['lager_platz'], $mhd, $charge, "", "lieferschein", $id, $grund); + if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung'))$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],$nochmenge, $olp['lager_platz'],$mhd,$charge,"", 'lieferschein', $id,$grund); + $belegesnarr['mhd'][$k3]['menge'] -= $nochmenge; + break; + } + } + } + }elseif($belegesnarr['charge']) + { + foreach($belegesnarr['charge'] as $v2) + { + if(method_exists($this->app->erp,'AddChargeLagerOhneBewegung'))$this->app->erp->AddChargeLagerOhneBewegung($olp['artikel'],$v2['menge'], $olp['lager_platz'],'',$v2['value'],"", 'lieferschein', $id,$grund); + } + }elseif($belegesnarr['mhd']) + { + if(method_exists($this->app->erp,'AddMindesthaltbarkeitsdatumLagerOhneBewegung'))$this->app->erp->AddMindesthaltbarkeitsdatumLagerOhneBewegung($olp['artikel'],$v2['menge'], $olp['lager_platz'], $v2['value'], "", "lieferschein", $id, $grund); + } + } + $this->app->DB->Delete("DELETE FROM objekt_lager_platz WHERE id = '".$olp['id']."' LIMIT 1"); + } + } +} + + // @refactor LagerBeleg Modul + function LieferscheinAuslagern($lieferschein,$anzeige_lagerplaetze_in_lieferschein=false, $standardlager = 0, $belegtyp = 'lieferschein', $chargenmhdnachprojekt = 0, $forceseriennummerngeliefertsetzen = false,$nurrestmenge = false, $lager_platz_vpe = 0, $lpiid = 0) + { + if($lieferschein <= 0) { + return; + } + if(!$anzeige_lagerplaetze_in_lieferschein) { + $anzeige_lagerplaetze_in_lieferschein = true; + } + $artikelarr = $this->app->DB->SelectArr( + sprintf( + "SELECT * FROM `%s` WHERE `%s` = %d ORDER BY sort", + $belegtyp.'_position', $belegtyp, (int)$lieferschein + ) + ); + + $belegarr = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM `%s` WHERE id=%d LIMIT 1', + $belegtyp, (int)$lieferschein + ) + ); + $kommissionskonsignationslager = 0; + if($belegtyp === 'lieferschein'){ + $kommissionskonsignationslager = $belegarr['kommissionskonsignationslager']; + } + $chargenerfassen = 0; + $mhderfassen = 0; + $seriennummernerfassen = 0; + $kommissionierverfahren = ''; + $projekt = 0; + $belegnr = ''; + if(!empty($belegarr)) { + $projekt = (int)$belegarr['projekt']; + $projektarr = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM projekt WHERE id = %d LIMIT 1', + $projekt + ) + ); + if(!empty($projektarr)) { + $chargenerfassen = $projektarr['chargenerfassen']; + $mhderfassen = $projektarr['mhderfassen']; + $seriennummernerfassen = $projektarr['seriennummernerfassen']; + if(!empty($projektarr['multiorderpicking']) && $this->ModulVorhanden('multiorderpicking')) { + $chargenerfassen = 1; + $mhderfassen = 1; + $seriennummernerfassen = 1; + } + $kommissionierverfahren = $projektarr['kommissionierverfahren']; + } + $belegnr = $belegarr['belegnr']; + } + + $chargenauslagern = 1; + $mhdauslagern = 1; + $seriennummernauslagern = 1; + if($chargenmhdnachprojekt && $chargenerfassen){ + $chargenauslagern = 0; + } + if($chargenmhdnachprojekt && $mhderfassen){ + $mhdauslagern = 0; + } + if($chargenmhdnachprojekt && $seriennummernerfassen && $kommissionierverfahren !== 'kommissionierverfahren'){ + $seriennummernauslagern = 0; + } + $sortreihenfolge = 'ASC'; + if($belegtyp === 'produktion') { + $sortreihenfolge = 'DESC'; + } + + if($belegtyp === 'produktion') { + if($standardlager > 0 && !$this->app->DB->Select( + sprintf( + "SELECT id FROM lager WHERE id = %d AND bezeichnung <> '' AND IFNULL(geloescht,0) = 0 LIMIT 1", + (int)$standardlager) + ) + ) { + $standardlager = (int)$this->app->DB->Select( + sprintf( + "SELECT l.id + FROM projekt AS p + INNER JOIN lager AS l ON p.standardlagerproduktion = l.id + WHERE p.id = %d AND l.bezeichnung <> '' AND IFNULL(l.geloescht,0) = 0 + LIMIT 1", + (int)$projekt + ) + ); + } + } + else{ + if($standardlager > 0 && !$this->app->DB->Select( + sprintf( + "SELECT id FROM lager WHERE id = %d AND bezeichnung <> '' AND IFNULL(geloescht,0) = 0 LIMIT 1", + (int)$standardlager) + )){ + $standardlager = (int)$this->app->DB->Select( + sprintf( + "SELECT l.id + FROM projekt AS p + INNER JOIN lager AS l ON p.standardlager = l.id + WHERE p.id = %d AND l.bezeichnung <> '' AND IFNULL(l.geloescht,0) = 0 + LIMIT 1", + $projekt + ) + ); + } + } + if($standardlager == 0) { + if($projekt > 0){ + $projektlager = $this->app->DB->Select("SELECT projektlager FROM projekt WHERE id='$projekt'"); + } + } + $storageLocations = []; + $cartikel = $artikelarr?count($artikelarr):0; + for($i= ($belegtyp==='produktion'?1:0) ;$i<$cartikel;$i++) { + $beschreibung = $artikelarr[$i]['beschreibung']; + $artikel = $artikelarr[$i]['artikel']; + $menge = $artikelarr[$i]['menge']; + if($nurrestmenge && $belegtyp=='produktion') + { + $menge = $artikelarr[$i]['menge'] - $artikelarr[$i]['geliefert_menge']; + } + $subid = $artikelarr[$i]['id']; + $lager_string = ''; + + $arcticleRow = $this->app->DB->SelectRow( + sprintf( + "SELECT lagerartikel, mindesthaltbarkeitsdatum, chargenverwaltung, seriennummern + FROM artikel WHERE id=%d LIMIT 1", + (int)$artikel + ) + ); + $lagerartikel = $arcticleRow['lagerartikel']; + $seriennummern = $arcticleRow['seriennummern'] === 'keine'?'':$arcticleRow['seriennummern']; + $regal = 0; + + $sperrlagerWhere = ' lp.sperrlager <> 1 '; + if($belegtyp=='produktion') { + $sperrlagerWhere = ' (lp.sperrlager <> 1 OR lp.allowproduction = 1) '; + } + + if($lagerartikel > 0) + { + $this->LagerArtikelZusammenfassen($artikel); + // lager platz suchen eins abziehen und namen in lieferschein + // kleinster lager leer machen + $regal = 0; + $timeout=0; + $restmenge = $menge; + $lager_string = ''; + $mindesthaltbarkeitsdatum = $arcticleRow['mindesthaltbarkeitsdatum']; + $chargenverwaltung = $arcticleRow['chargenverwaltung']; + while($restmenge > 0) + { + $timeout++; + if($restmenge <= 0){ + break; + } + //if($timeout > 1000) break; + + $extraorder = ''; + $maxAuslagern = $restmenge; + if(!empty($seriennummern) && $belegtyp !== 'produktion') { + $snDeliveryNoteStorage = $this->app->DB->SelectArr( + sprintf( + 'SELECT bc.lagerplatz AS storage_location_id, COUNT(bc.id) - IFNULL(olp.menge, 0) AS amount + FROM `beleg_chargesnmhd` AS bc + LEFT JOIN ( + SELECT SUM(menge) AS menge, lager_platz + FROM `objekt_lager_platz` + WHERE objekt = \'lieferschein\' AND parameter = %d + GROUP BY lager_platz + ) AS olp ON bc.lagerplatz = olp.lager_platz + WHERE bc.type = \'sn\' AND bc.doctype = \'lieferschein\' AND bc.doctypeid = %d AND bc.pos = %d AND bc.wert <> \'\' + GROUP BY bc.lagerplatz + HAVING amount > 0 + ORDER BY COUNT(bc.id) - IFNULL(olp.menge, 0) = %f DESC, COUNT(bc.id) - IFNULL(olp.menge, 0) + ', + (int)$subid, (int)$lieferschein, (int)$subid, (float)$restmenge + ) + ); + if(!empty($snDeliveryNoteStorage)) { + $extraorder = sprintf(' lpi.lager_platz = %d DESC, ', $snDeliveryNoteStorage[0]['storage_location_id']); + if($snDeliveryNoteStorage[0]['amount'] < $restmenge && $snDeliveryNoteStorage[0]['amount'] > 0 && count($snDeliveryNoteStorage) > 1) { + $maxAuslagern = $snDeliveryNoteStorage[0]['amount']; + } + } + } + + $this->app->erp->RunHook('lieferscheinauslagern', 6, $belegtyp, $subid, $artikel, $mindesthaltbarkeitsdatum, $chargenverwaltung, $extraorder); + + if($mindesthaltbarkeitsdatum) { + if($standardlager > 0) { + $lager_max = $this->app->DB->SelectArr( + sprintf( + "SELECT lpi.lager_platz, if(lpi.menge > lm.menge, lm.menge,lpi.menge) as menge, lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> %d + INNER JOIN lager AS `lag` ON `lag`.id=lp.lager + INNER JOIN ( + SELECT lager_platz, sum(menge) as menge,min(mhddatum) as mhddatum + FROM lager_mindesthaltbarkeitsdatum + WHERE artikel = %d + GROUP BY lager_platz + ) AS lm ON lp.id = lm.lager_platz + WHERE lpi.artikel=%d AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.id='$standardlager' + ORDER by ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." `lag`.id='$standardlager' DESC, $extraorder lm.mhddatum ASC, lpi.menge $sortreihenfolge + LIMIT 1", + (int)$kommissionskonsignationslager,(int)$artikel, (int)$artikel + ) + ); + if(!$lager_max) { + $lager_max = $this->app->DB->SelectArr( + sprintf( + "SELECT lpi.lager_platz, lpi.menge, lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id + INNER JOIN lager AS `lag` ON `lag`.id=lp.lager + LEFT JOIN lager_mindesthaltbarkeitsdatum lm ON lm.artikel=lpi.artikel AND lp.id = lm.lager_platz + WHERE lpi.artikel=%d AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.id='$standardlager' + ORDER by ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." lag.id='$standardlager' DESC, $extraorder lm.mhddatum ASC, lpi.menge $sortreihenfolge + LIMIT 1", + (int)$artikel + ) + ); + } + } + elseif($projektlager > 0) { + // Hole nach und nach bis alles da ist + $lager_max = $this->app->DB->SelectArr( + "SELECT lpi.lager_platz, if(lpi.menge > lm.menge, lm.menge,lpi.menge) as menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' + INNER JOIN lager AS `lag` ON `lag`.id=lp.lager + INNER JOIN ( + SELECT lager_platz, sum(menge) as menge,min(mhddatum) as mhddatum + FROM lager_mindesthaltbarkeitsdatum + WHERE artikel = '$artikel' AND menge > 0 + GROUP BY lager_platz + ) AS lm ON lp.id = lm.lager_platz + WHERE lpi.artikel='$artikel' AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.projekt='$projekt' + ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lm.mhddatum ASC, lpi.menge $sortreihenfolge + LIMIT 1" + ); + if(!$lager_max) { + $lager_max = $this->app->DB->SelectArr( + "SELECT lpi.lager_platz, lpi.menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id + INNER JOIN lager AS `lag` ON `lag`.id=lp.lager + LEFT JOIN lager_mindesthaltbarkeitsdatum AS lm ON lm.artikel=lpi.artikel AND lp.id = lm.lager_platz + WHERE lpi.artikel='$artikel' AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.projekt='$projekt' + ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lm.mhddatum ASC, lpi.menge $sortreihenfolge + LIMIT 1"); + } + } + else { + // Hole nach und nach bis alles da ist + $lager_max = $this->app->DB->SelectArr( + sprintf( + "SELECT lpi.lager_platz, if(lpi.menge > lm.menge, lm.menge,lpi.menge) as menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' + INNER JOIN ( + SELECT lager_platz, sum(menge) as menge,min(mhddatum) as mhddatum + FROM lager_mindesthaltbarkeitsdatum + WHERE artikel = %d AND menge > 0 + GROUP BY lager_platz + ) AS lm ON lp.id = lm.lager_platz + WHERE lpi.artikel=%d AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." + ORDER by ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lm.mhddatum ASC, lpi.menge $sortreihenfolge + LIMIT 1", + (int)$artikel, (int)$artikel + ) + ); + if(!$lager_max) { + $lager_max = $this->app->DB->SelectArr("SELECT lpi.lager_platz, lpi.menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id + INNER JOIN lager_mindesthaltbarkeitsdatum AS lm ON lm.artikel=lpi.artikel AND lp.id = lm.lager_platz + WHERE lpi.artikel='$artikel' AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." + ORDER by ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lm.mhddatum ASC, lpi.menge $sortreihenfolge + LIMIT 1" + ); + } + } + } + else { + if($chargenverwaltung) { + if($standardlager > 0) { + $lager_max = $this->app->DB->SelectArr( + "SELECT lpi.lager_platz, if(lpi.menge > lm.menge, lm.menge,lpi.menge) as menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id + INNER JOIN lager AS `lag` ON `lag`.id=lp.lager + INNER JOIN ( + SELECT lager_platz, sum(menge) as menge + FROM lager_charge + WHERE artikel = '$artikel' AND menge > 0 + GROUP BY lager_platz + ) AS lm ON lp.id = lm.lager_platz + WHERE lpi.artikel='$artikel' AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.id='$standardlager' + ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." `lag`.id='$standardlager' DESC, $extraorder lpi.menge $sortreihenfolge + LIMIT 1" + ); + if(!$lager_max) + { + $lager_max = $this->app->DB->SelectArr( + "SELECT lpi.lager_platz, lpi.menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id + INNER JOIN lager AS `lag` ON `lag`.id=lp.lager + WHERE lpi.artikel='$artikel' AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.id='$standardlager' + ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." `lag`.id='$standardlager' DESC, $extraorder lpi.menge $sortreihenfolge + LIMIT 1" + ); + } + } + elseif($projektlager > 0){ + + $lager_max = $this->app->DB->SelectArr( + "SELECT lpi.lager_platz, if(lpi.menge > lm.menge, lm.menge,lpi.menge) as menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' + INNER JOIN lager AS `lag` ON `lag`.id=lp.lager + INNER JOIN ( + SELECT lager_platz, sum(menge) as menge + FROM lager_charge + WHERE artikel = '$artikel' AND menge > 0 + GROUP BY lager_platz + ) AS lm ON lp.id = lm.lager_platz + WHERE lpi.artikel='$artikel' AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.projekt='$projekt' + ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lpi.menge $sortreihenfolge + LIMIT 1" + ); + if(!$lager_max) { + $lager_max = $this->app->DB->SelectArr( + "SELECT lpi.lager_platz, lpi.menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' + INNER JOIN lager AS `lag` ON `lag`.id=lp.lager + WHERE lpi.artikel='$artikel' AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.projekt='$projekt' + ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lpi.menge $sortreihenfolge + LIMIT 1" + ); + } + } + else { + $lager_max = $this->app->DB->SelectArr( + "SELECT lpi.lager_platz, if(lpi.menge > lm.menge, lm.menge,lpi.menge) as menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' + INNER JOIN ( + SELECT lager_platz, sum(menge) as menge + FROM lager_charge + WHERE artikel = '$artikel' AND menge > 0 + GROUP BY lager_platz + ) AS lm ON lp.id = lm.lager_platz + WHERE lpi.artikel='$artikel' AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." + ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lpi.menge $sortreihenfolge + LIMIT 1" + ); + if(!$lager_max) { + $lager_max = $this->app->DB->SelectArr( + "SELECT lpi.lager_platz, lpi.menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' + WHERE lpi.artikel='$artikel' AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." + ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lpi.menge $sortreihenfolge + LIMIT 1" + ); + } + } + } + else{ + if($standardlager > 0) { + $lager_max = $this->app->DB->SelectArr( + "SELECT lpi.lager_platz, lpi.menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' + INNER JOIN lager AS `lag` ON `lag`.id=lp.lager + WHERE lpi.artikel='$artikel' AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.id='$standardlager' + ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." `lag`.id='$standardlager' DESC, $extraorder lpi.menge $sortreihenfolge + LIMIT 1" + ); + } + elseif($projektlager > 0) { + $lager_max = $this->app->DB->SelectArr( + "SELECT lpi.lager_platz, lpi.menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' + INNER JOIN lager AS `lag` ON `lag`.id=lp.lager + WHERE lpi.artikel='$artikel' AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." AND `lag`.projekt='$projekt' + ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lpi.menge $sortreihenfolge + LIMIT 1" + ); + } + else { + $lager_max = $this->app->DB->SelectArr( + "SELECT lpi.lager_platz, lpi.menge,lpi.id + FROM lager_platz_inhalt AS lpi + INNER JOIN lager_platz AS lp ON lpi.lager_platz=lp.id AND lp.id <> '$kommissionskonsignationslager' + WHERE lpi.artikel='$artikel' AND lpi.menge > 0 + ".($lpiid?'':' AND lp.autolagersperre!=1 AND '.$sperrlagerWhere)." + ORDER BY ".($lpiid?" lpi.id = '$lpiid' DESC, ":'')." ".($lager_platz_vpe?" lpi.lager_platz_vpe = '$lager_platz_vpe' DESC, ":'')." $extraorder lpi.menge $sortreihenfolge + LIMIT 1" + ); + } + } + } + if(!$lager_max){ + break; + } + if((round($maxAuslagern,8) > round($lager_max[0]['menge'],8)) && ($lager_max[0]['menge'] > 0)) { + // es werden mehr gebraucht als im lager sind + $this->LagerAuslagernRegal($artikel,$lager_max[0]['lager_platz'],$lager_max[0]['menge'],$projekt,ucfirst($belegtyp)." $belegnr","",$belegtyp,$lieferschein, $lager_max[0]['lager_platz_vpe'], $lager_max[0]['id']); + if($anzeige_lagerplaetze_in_lieferschein){ + $this->LagerAuslagernText($artikel, $subid, $lager_max[0]['lager_platz'], $lager_max[0]['menge'], $belegtyp); + }else{ + $this->LagerAuslagernObjektLagerPlatz($artikel, $subid, $lager_max[0]['lager_platz'], $lager_max[0]['menge'], $belegtyp); + } + $storageLocations[] = $lager_max[0]['lager_platz']; + $regal_name = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='".$lager_max[0]['lager_platz']."' LIMIT 1"); + $lager_string .= $regal_name."(".$lager_max[0]['menge'].") "; + $restmenge = round($restmenge - $lager_max[0]['menge'],8); + if(!$nurrestmenge){ + $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_max[0]['lager_platz'],$lager_max[0]['menge'],$projekt,ucfirst($belegtyp)." $belegnr","",$belegtyp,$lieferschein,$subid, $chargenauslagern, $mhdauslagern, $seriennummernauslagern); + } + } + else if( ($lager_max[0]['menge'] >= $maxAuslagern) && ($maxAuslagern > 0) ) { + // es sind genuegend lager + $this->LagerAuslagernRegal($artikel,$lager_max[0]['lager_platz'],$maxAuslagern,$projekt,ucfirst($belegtyp)." $belegnr","",$belegtyp,$lieferschein, $lager_max[0]['lager_platz_vpe'], $lager_max[0]['id']); + $storageLocations[] = $lager_max[0]['lager_platz']; + if($anzeige_lagerplaetze_in_lieferschein){ + $this->LagerAuslagernText($artikel, $subid, $lager_max[0]['lager_platz'], $maxAuslagern, $belegtyp); + }else{ + $this->LagerAuslagernObjektLagerPlatz($artikel, $subid, $lager_max[0]['lager_platz'], $maxAuslagern, $belegtyp); + } + $regal_name = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='".$lager_max[0]['lager_platz']."' LIMIT 1"); + $lager_string .= $regal_name."(".(float)$maxAuslagern.") "; + + if(!$nurrestmenge){ + $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_max[0]['lager_platz'],$maxAuslagern,$projekt,ucfirst($belegtyp)." $belegnr","",$belegtyp,$lieferschein,$subid, $chargenauslagern, $mhdauslagern, $seriennummernauslagern); + } + $restmenge = round($restmenge - $maxAuslagern, 8); + } + else { + break; + } + } + +/* +// neue datenstruktue + if($lager_string=='') { + $beschreibung .="\r\nLager: manuell"; + } + else { + $beschreibung .="\r\nLager: $lager_string"; + } +*/ + } + + $geliefert = $menge; + if($nurrestmenge && $belegtyp=='produktion') { + $geliefert = $menge + $artikelarr[$i]['geliefert_menge']; + } + $artikelhatseriennummer = $this->app->DB->Select("SELECT seriennummern FROM artikel WHERE id='".$artikel."' LIMIT 1"); + if($belegtyp == 'produktion') + { + $this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert_menge='$geliefert', geliefert = 1 WHERE id='$subid' LIMIT 1"); + }else{ + + if($belegtyp=="lieferschein") + { + $auftragposid=$this->app->DB->Select("SELECT auftrag_position_id FROM lieferschein_position WHERE id='$subid'"); + if($auftragposid>0) + { + $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$geliefert' WHERE id='$auftragposid' LIMIT 1"); + } + } + + if($seriennummernerfassen=='1' && ($artikelhatseriennummer=='vomprodukteinlagern' || $artikelhatseriennummer=='vomprodukt' || $artikelhatseriennummer=='eigene')) + { + // wenn Seriennummer erfasst werden soll + //if($anzeige_lagerplaetze_in_lieferschein) + //{ + //$this->app->DB->Update("UPDATE ".$belegtyp."_position SET beschreibung='$beschreibung' WHERE id='$subid' LIMIT 1"); + //neue datenstruktur + //} + if($forceseriennummerngeliefertsetzen)$this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert='$geliefert' WHERE id='$subid' LIMIT 1"); + } else { + //wenn nicht + //if($anzeige_lagerplaetze_in_lieferschein) + // $this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert='$geliefert',beschreibung='$beschreibung' WHERE id='$subid' LIMIT 1"); + //else + $this->app->DB->Update("UPDATE ".$belegtyp."_position SET geliefert='$geliefert' WHERE id='$subid' LIMIT 1"); + } + } + } + if(!empty($storageLocations)) { + $this->addStorageCountry($belegtyp, $lieferschein, $storageLocations); + } + $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt = '$belegtyp' AND parameter = '$lieferschein'"); + + $auftragid = $this->app->DB->Select("SELECT auftragid FROM $belegtyp WHERE id='$lieferschein'"); + if($auftragid){ + $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt = 'auftrag' AND parameter = '$auftragid'"); + } + + if($belegtyp == '' || $belegtyp === 'lieferschein') + { + $this->RunHook('erpapi_lieferschein_auslagern', 1, $lieferschein); + $this->LieferscheinProtokoll($lieferschein,"Lieferschein ausgelagert"); + } + } + + /** + * @param string $doctype + * @param int $doctypeId + * @param array $storageLocations + */ + public function addStorageCountry($doctype, $doctypeId, $storageLocations) + { + if($doctype === 'lieferschein') { + $order = $this->app->DB->SelectRow( + sprintf( + "SELECT o.id, o.schreibschutz + FROM lieferschein AS dn + INNER JOIN auftrag AS o ON dn.auftragid = o.id AND o.belegnr <> '' + WHERE dn.id = %d AND o.`storage_country` = '' AND o.shop = 0 + ORDER BY o.status <> 'storniert' DESC", + $doctypeId + ) + ); + if(!empty($order)) { + $country = $this->app->DB->Select( + sprintf( + "SELECT adr.land + FROM lager_platz AS lp + INNER JOIN lager AS l ON lp.lager = l.id + INNER JOIN adresse adr ON IF(l.adresse > 0, l.adresse, lp.adresse) = adr.id + AND adr.land <> '' AND adr.land <> '%s' + WHERE lp.id IN (%s) + LIMIT 1", + $this->app->DB->real_escape_string($this->app->erp->Firmendaten('land')), + implode(',', array_unique($storageLocations)) + ) + ); + if(!empty($country)) { + $this->app->DB->Update( + sprintf( + "UPDATE auftrag + SET storage_country = '%s', zuarchivieren = 0, schreibschutz = 0 + WHERE id = %d AND storage_country = ''", + $this->app->DB->real_escape_string($country), $order['id'] + ) + ); + if($this->app->DB->affected_rows() > 0) { + $this->app->erp->ANABREGSNeuberechnen($order['id'], 'auftrag'); + if($order['schreibschutz']) { + $this->app->erp->PDFArchivieren('auftrag', $order['id'], true); + } + + $invoice = $this->app->DB->SelectRow( + sprintf( + "SELECT id,storage_country, schreibschutz + FROM rechnung + WHERE auftragid = %d AND status <> 'storniert' + ORDER BY id DESC + LIMIT 1", + $order['id'] + ) + ); + if(!empty($invoice) && empty($invoice['storage_country'])) { + $this->app->DB->Update( + sprintf( + "UPDATE rechnung + SET storage_country = '%s', zuarchivieren = 0, schreibschutz = 0 + WHERE id = %d AND storage_country = ''", + $this->app->DB->real_escape_string($country), $invoice['id'] + ) + ); + $this->app->erp->ANABREGSNeuberechnen($invoice['id'], 'rechnung'); + if($invoice['schreibschutz']) { + $this->app->erp->PDFArchivieren('rechunng', $invoice['id'], true); + } + } + } + } + } + } + } + + // @refactor in Artikel Modul + function artikelnummerscan($artikel) + { + $hauptprojekt = (int)$this->app->erp->Firmendaten('projekt'); + $haupteanherstellerscanerlauben = $this->app->DB->Select("SELECT eanherstellerscanerlauben FROM projekt WHERE id = '$hauptprojekt' LIMIT 1"); + $subwhere = ""; + if($haupteanherstellerscanerlauben)$subwhere = 'or isnull(p.id)'; + $artikelnummer = $this->app->erp->FirstTillSpace($artikel); + $artikelid = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikelnummer' AND geloescht!=1 LIMIT 1"); + if(!$artikelid)$artikelid = $this->app->DB->Select("SELECT art.id FROM artikel art + LEFT JOIN projekt p ON art.projekt = p.id + WHERE (p.eanherstellerscanerlauben = 1 $subwhere) AND art.ean='$artikelnummer' AND art.ean != '' AND art.geloescht!=1 LIMIT 1"); + if(!$artikelid)$artikelid = $this->app->DB->Select("SELECT art.id FROM artikel art + LEFT JOIN projekt p ON art.projekt = p.id + WHERE (p.eanherstellerscanerlauben = 1 $subwhere) AND art.herstellernummer='$artikelnummer' AND art.herstellernummer != '' AND art.geloescht!=1 LIMIT 1"); + $this->RunHook('artikelnummerscan',2, $artikel, $artikelid); + return $artikelid; + } + + // @refactor in TemplateMessge Komponente + function AddTplMsg($message) + { + if(!isset($this->app->User))return; + if(!method_exists($this->app->User,'GetID'))return; + $user = (int)$this->app->User->GetID(); + $this->app->DB->Insert("INSERT INTO `templatemessage` (`message`, `user`, `zeitstempel`) VALUES ('".$this->app->DB->real_escape_string($message)."','$user',now())"); + return $this->app->DB->GetInsertID(); + } + + // @refactor in TemplateMessge Komponente + function GetTmpMessageOut() + { + if(isset($this->app->Secure) && $this->app->Secure && method_exists($this->app->Secure, 'GetGET')) + { + $msgid = (int)$this->app->Secure->GetGET('msgid'); + if($msgid)return $this->base64_url_decode($this->GetTplMessage($msgid)); + return $this->base64_url_decode($this->app->Secure->GetGET('msg')); + } + return ''; + } + + // @refactor in TemplateMessge Komponente + function GetTplMessage($id) + { + if(!isset($this->app->User))return; + if(!method_exists($this->app->User,'GetID'))return; + $user = (int)$this->app->User->GetID(); + return $this->app->DB->Select("SELECT `message` FROM `templatemessage` WHERE `user` = '$user' AND id = '$id' LIMIT 1"); + } + + // @refactor in TemplateMessge Komponente + function base64_url_encode($input) { + return strtr(base64_encode($input), '+/=', '-_,'); + } + + // @refactor in TemplateMessge Komponente + function base64_url_decode($input) { + return base64_decode(strtr($input, '-_,', '+/=')); + } + + // @refactor in Session Klasse + function ClearCookies() + { + if(count($_COOKIE) > 0) + { + foreach($_COOKIE as $key=>$value) + { + if($key!=str_replace("SpryMedia","",$key)) + setcookie ($key, time() - 3600); + } + } + } + + /** @deprecated */ + function ManuelEcho($text) + { + echo $this->ClearDataBeforeOutput($text); + exit; + } + + // @refactor Formater Komponente + function ClearDataBeforeOutput($text, $replaceEmptyFormAction = true) + { + if ((bool)$replaceEmptyFormAction === true) { + $text = str_replace('form action=""','form action="#"',$text); + } + $text = str_replace('NONBLOCKINGZERO','',$text); + $text = str_replace("'","'",$text); + return $text; + } + + function AdresseAnschriftString($id,$ansprechpartner=false) + { + /** @var Adresse $obj */ + $obj = $this->LoadModul('adresse'); + if(!empty($obj) && method_exists($obj, 'AdresseAnschriftString')) { + return $obj->AdresseAnschriftString($id,$ansprechpartner); + } + return ''; + } + + + // @refactor BelegPositionen Widget + function EinkaufspreiseTabelle($artikel, $divid = '') + { + if($this->RechteVorhanden('artikel','einkauf')) + { + $table = new EasyTable($this->app); + $table->Query("SELECT if(CHAR_LENGTH(adr.name) > 20, CONCAT(SUBSTRING(adr.name,1,20),'...'), adr.name) as adrname, if(CHAR_LENGTH(e.bestellnummer) > 20, CONCAT(SUBSTRING(e.bestellnummer,1,20),'...'), e.bestellnummer) as bestellnummer, trim(e.ab_menge)+0 as ab, ". $this->FormatPreis("e.preis")." as preis, e.waehrung FROM einkaufspreise e LEFT JOIN adresse adr ON e.adresse = adr.id + WHERE e.artikel = '$artikel' AND (e.gueltig_bis = '0000-00-00' OR isnull(e.gueltig_bis) OR gueltig_bis >= now() ) ORDER BY adrname, ab_menge"); + return ' +

Einkaufspreise

'. + $table->DisplayNew('return','Währung','noAction').' + '; + } + return ''; + } + + /** @deprecated */ + function DokumentAbschickenPopup() + { + $module = $this->app->Secure->GetGET("module"); + return "var horizontalPadding = 30; + var verticalPadding = 30; $(''); + /*$this->app->Tpl->Add('INLINEHELP',' + +
'.$heading.'
');*/ + } + if(isset($inline[$module][$action]['weitereyoutube'])) { + if(isset($inline[$module][$action]['weitereyoutube'][0])) + { + $weitereyoutube = $inline[$module][$action]['weitereyoutube']; + }else{ + $weitereyoutube[0] = $inline[$module][$action]['weitereyoutube']; + } + $this->app->Tpl->Add( + 'INLINEHELP', + '
' + .(count($weitereyoutube) > 2?'':'') + .'
' + ); + foreach($weitereyoutube as $k => $v) { + $objiframes['youtubeifr'.$k] = 'https://www.youtube.com/embed/'.$v['youtube'].'?rel=0'; + $this->app->Tpl->Add( + 'INLINEHELP', + '
+ + +
'.$v['titel'].'
+ +
' + ); + + } + $this->app->Tpl->Add( + 'INLINEHELP', + '
' + .(count($weitereyoutube) > 2?'
':'') + .'
' + ); + } + + if(isset($inline[$module][$action]['description'])) + { + $this->app->Tpl->Add('INLINEHELP','
'.$inline[$module][$action]['description'].'
'); + } + if(!empty($inline[$module][$action]['extradescription'])) { + preg_match_all( + '//', + $inline[$module][$action]['extradescription'], + $pregerg + ); + if(!empty($pregerg) && !empty($pregerg[0])) { + foreach($pregerg[0] as $pregKey => $pregVal) { + $inline[$module][$action]['extradescription'] = str_replace( + $pregVal, + '', + $inline[$module][$action]['extradescription'] + ); + } + } + $this->app->Tpl->Add('INLINEHELP','
'.$inline[$module][$action]['extradescription'].'
'); + } + + if(!empty($inline[$module][$action]['site2'])) { + $this->app->Tpl->Add( + 'INLINEHEL2',$inline[$module][$action]['site2'] + ); + } + + if(isset($inline[$module][$action]['link']) + || !empty($inline[$module][$action]['extralinks']) + || !empty($inline[$module][$action]['extralinks3'])) { + $inlinehelplink = true; + $this->app->Tpl->Add( + 'INLINEHELPLINK','
' + ); + if(isset($inline[$module][$action]['link'])) { + $this->app->Tpl->Add( + 'INLINEHELPLINK', + '' + ); + } + if(!empty($inline[$module][$action]['extralinks'])) { + foreach($inline[$module][$action]['extralinks'] as $eLink => $eValue) { + if(is_numeric($eLink)) { + $this->app->Tpl->Add( + 'INLINEHELPLINK', + '' + ); + } + else { + $this->app->Tpl->Add( + 'INLINEHELPLINK', + '' + ); + } + } + } + if(!empty($inline[$module][$action]['extralinks3'])) { + foreach($inline[$module][$action]['extralinks3'] as $eLink => $eValue) { + if(is_numeric($eLink)) { + $this->app->Tpl->Add( + 'INLINEHELP3', + '' + ); + } + else { + $this->app->Tpl->Add( + 'INLINEHELP3', + '' + ); + } + } + } + $this->app->Tpl->Add( + 'INLINEHELPLINK','
' + ); + } + + $this->app->Tpl->Add('INLINEHELP',''); + $include = true; + + if(is_string($inline[$module][$action])) { + $this->app->Tpl->Set('INLINEHELP',$inline[$module][$action]); + } + } + if(!$inlinehelplink) { + //$this->app->Tpl->Add('INLINEHELPLINK','
'); + $this->app->Tpl->Add('TABSPRINT', + ' + ' + ); + }else { + $this->app->Tpl->Add('TABSPRINT', + ' + ' + ); + } + + $this->app->Tpl->Add('SCRIPTJAVASCRIPT',' + + '); + if($this->app->User->GetParameter('tooltipinline_autoopen')) { + $this->app->Tpl->Add('INLINEHELPOPEN', ' class="inlineautoopen" '); + } + $phone = str_replace(['-',' '],'', erpAPI::Ioncube_Property('phone_smb')); + if(empty($phone)) { + $this->app->Tpl->Set('BEFORESUPPORTPHONE', ''); + } + else { + $this->app->Tpl->Set('SUPPORTPHONENUMBER', $phone); + $sipuid = $this->app->erp->ModulVorhanden('sipgate') && $this->app->erp->GetPlacetelSipuid(); + if(!empty($sipuid)) { + $this->app->Tpl->Set('SIPGATEACTIVE', 1); + $this->app->Tpl->Set('SUPPORTPHONENUMBERLINK', '#'); + } + else{ + $this->app->Tpl->Set('SUPPORTPHONENUMBERLINK', 'tel://'.$phone); + } + } + $this->app->Tpl->Parse('PAGE','tooltipinline.tpl'); + } + + /** + * @param array $faqs + * @param string $target + */ + public function showInlineFaq($faqs, $target = 'INLINEHELP2') + { + $html = '
'; + if(!empty($faqs)) { + foreach($faqs as $faq) { + $html .= '

'.$faq['question'].'

'.$faq['answer'].'
'; + } + } + $html .= '
'; + $this->app->Tpl->Add($target, $html); + } + + /**@deprected**/ + function HelpIcon() + { + $module = $this->app->Secure->GetGET("module"); + $action = $this->app->Secure->GetGET("action"); + } + + /**@deprected**/ + function PrinterIcon() + { + // $this->app->Tpl->Add('TABSPRINT'," "); + } + + // @refactor Auftrag Modul + function SaldoAdresseAuftrag($adresse) + { + return $this->app->DB->Select("SELECT SUM(gesamtsumme) FROM auftrag WHERE adresse='$adresse' AND status='freigegeben' LIMIT 1"); + } + + // @refactor Adresse Modul + function UmsatzAdresseAuftragJahr($adresse) + { + return $this->app->DB->Select("SELECT + SUM(ap.preis*ap.menge*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1))) + FROM auftrag_position ap LEFT JOIN auftrag a ON ap.auftrag=a.id WHERE (a.status='freigegeben' OR a.status='abgeschlossen') + AND DATE_FORMAT(a.datum,'%Y')=DATE_FORMAT(NOW(),'%Y') AND a.adresse='$adresse'"); + //"SELECT SUM(gesamtsumme) FROM auftrag WHERE adresse='$adresse' AND status='freigegeben' + // AND DATE_FORMAT(datum,'%Y')=DATE_FORMAT(NOW(),'%Y') LIMIT 1"); + } + + // @refactor Adresse Modul + function UmsatzAdresseRechnungJahr($adresse) + { + return $this->app->DB->Select("SELECT + SUM(ap.preis*ap.menge*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1))) + FROM rechnung_position ap LEFT JOIN rechnung a ON ap.rechnung=a.id WHERE (a.status='freigegeben' OR a.status='abgeschlossen' OR a.status='versendet') + AND DATE_FORMAT(a.datum,'%Y')=DATE_FORMAT(NOW(),'%Y') AND a.adresse='$adresse'"); + } + + + // @refactor Adresse Modul + function SaldoAdresse($adresse) + { + return $this->KundenSaldo($adresse); + } + + // @refactor Adresse Modul + public function KundenSaldo($adresse){ + if(!is_numeric($adresse) || $adresse <= 0){ + return 0; + } + + $rechnungs = $this->app->DB->Select("SELECT IFNULL(SUM(soll-ist),0) FROM rechnung WHERE status != 'angelegt' AND zahlungsstatus != 'bezahlt' AND adresse = '$adresse'"); + $gutschrifts = $this->app->DB->Select("SELECT IFNULL(SUM(soll-ist),0) FROM gutschrift WHERE status != 'angelegt' AND (manuell_vorabbezahlt = '0000-00-00' OR manuell_vorabbezahlt IS NULL) AND zahlungsstatus != 'bezahlt' AND adresse = '$adresse'"); + + $kundensaldo = $rechnungs - $gutschrifts; + $kundensaldo = round($kundensaldo, 2); + + return $kundensaldo; + } + + + // @refactor Produktion Modul + function genLvl($id, $typ = '') + { + if($typ !== 'produktion') { + return; + } + } + + + // @refactor Auftrag Modul + function AuftragExplodieren($auftrag,$typ="", $listeexplodieren = null) + { + if($typ==='produktion') { + } + else { + $auftraege = $this->app->DB->SelectRow("SELECT * FROM auftrag WHERE (status='freigegeben' OR status='angelegt') AND id='$auftrag'"); + $projektlager = 0; + } + + $adresse = $auftraege['adresse']; + $projekt = $auftraege['projekt']; + $status= $auftraege['status']; + + /** + * Die nächsten vier Zeilen zur projektabhängigen Stücklistenanpassung + */ + if($projekt > 0) { + if (!$listeexplodieren + && ($this->app->DB->Select("SELECT autostuecklistenanpassung FROM projekt WHERE id='$projekt' LIMIT 1")) == 0) { + return; + } + if($typ !== 'produktion') { + $projektlager = $this->app->DB->Select("SELECT id FROM projekt WHERE id = $projekt AND projektlager = 1 LIMIT 1"); + } + } + + if($status!=='freigegeben' && $status!=='angelegt'){ + return; + } + + if($typ==='produktion') { + } + else { + if($listeexplodieren) { + $swhere = null; + foreach($listeexplodieren as $v) { + $swhere[] = " ap.id = '$v' "; + } + $swhere = ' ('.implode(' OR ', $swhere).') '; + $artikelarr= $this->app->DB->SelectArr( + "SELECT ap.* ,art.lagerartikel, art.keineeinzelartikelanzeigen,art.juststueckliste,art.stueckliste + FROM auftrag_position AS ap + LEFT JOIN artikel AS art ON ap.artikel = art.id + WHERE ap.auftrag='$auftrag' AND (ap.geliefert_menge < ap.menge AND ap.geliefert=0) AND $swhere"); + } + else { + $artikelarr= $this->app->DB->SelectArr( + "SELECT ap.* ,art.lagerartikel, art.keineeinzelartikelanzeigen,art.juststueckliste,art.stueckliste + FROM auftrag_position AS ap + LEFT JOIN artikel AS art ON ap.artikel = art.id + WHERE ap.auftrag='$auftrag' AND (ap.geliefert_menge < ap.menge AND ap.geliefert=0)" + ); + } + } + + $treffer=0; + // Lager Check + $positionen_vorhanden = 0; + $artikelzaehlen=0; + + $changed = false; + if($artikelarr) { + for($k=0;$kapp->DB->SelectRow(sprintf('SELECT explodiert,menge,sort FROM auftrag_position WHERE id=%d LIMIT 1', (int)$artikel_position_id)); + $explodiert = $positionRow['explodiert']; + $menge = $positionRow['menge']; + $sort = $positionRow['sort']; + } + if($listeexplodieren && in_array($artikel_position_id, $listeexplodieren)) { + $just_stueckliste = 1; + } + $waehrung = $this->app->DB->real_escape_string($artikelarr[$k]['waehrung']);// $this->app->DB->real_escape_string($this->app->DB->Select("SELECT waehrung FROM auftrag_position WHERE id = '$artikel_position_id' LIMIT 1")); + if($just_stueckliste && !$explodiert && ($preproducedpartlist = $this->getPreproducedPartlistFromArticle($artikel)) && + (($partlistsellable = $this->ArtikelAnzahlVerkaufbar($preproducedpartlist, $projektlager)) > 0) && round($partlistsellable,7) >= round($menge,7)) + { + $preproducednummer = $this->app->DB->real_escape_string($this->app->DB->Select("SELECT nummer FROM artikel WHERE id = $preproducedpartlist")); + $changed = true; + if(round($partlistsellable,7) >= round($menge,7)){ + $just_stueckliste = 0; + $lagerartikel = 1; + $this->app->DB->Update("UPDATE auftrag_position SET artikel = $preproducedpartlist,nummer = '$preproducednummer' WHERE id = " . $artikel_position_id); + $this->app->DB->Update( + sprintf( + 'UPDATE `artikel` SET `laststorage_changed` = NOW() WHERE `id` = %d', + $preproducedpartlist + ) + ); + $order_obj = $this->app->erp->LoadModul('auftrag'); + if(!empty($order_obj) && method_exists($order_obj,'removeExplodedArticles')){ + $order_obj->removeExplodedArticles($auftrag, $artikel_position_id); + } + }else{ + $preproducedart = $artikelarr[$k]; + $preproducedart['sort'] = $sort; + $preproducedart['menge'] = $partlistsellable; + $preproducedart['artikel'] = $preproducedpartlist; + $preproducedart['nummer'] = $preproducednummer; + if(is_null($preproducedart['steuersatz'])) + { + $preproducedart['steuersatz'] = -1; + } + unset($preproducedart['id']); + $preproducedart['id'] = $this->app->DB->InsertArr('auftrag_position','id',$preproducedart,true); + $sort++; + $this->app->DB->Update("UPDATE auftrag_position SET menge = menge - $partlistsellable,sort = $sort WHERE id = " . $artikel_position_id); + $this->app->DB->Update( + sprintf( + 'UPDATE `artikel` SET `laststorage_changed` = NOW() WHERE `id` = %d', + $preproducedpartlist + ) + ); + } + $this->app->DB->Update( + sprintf( + 'UPDATE `artikel` SET `laststorage_changed` = NOW() WHERE `id` = %d', + $artikel + ) + ); + } + } + //$artikel_von_stueckliste = $this->app->DB->SelectArr("SELECT * FROM stueckliste WHERE stuecklistevonartikel='$artikel' AND art!='it' AND art!='bt'"); + + + // mengen anpassung +/* + // Dieses Feature stammt aus uralten Zeiten von WaWision - habs heute enternt 30.12.2018 BS da wenn man an der Stückliste was anpasst das auch dann so bleiben soll + if($just_stueckliste=="1" && $explodiert=="1")// && $max=="9898989") + { + foreach($artikel_von_stueckliste as $key=>$value) + { + $menge_st =$value['menge']*$menge; + if($typ=="produktion") + { + } + else + { + $this->app->DB->Update("UPDATE auftrag_position SET menge='{$menge_st}' WHERE explodiert_parent='$artikel_position_id' AND artikel='{$value['artikel']}'"); + } + } + } +*/ + // darunter war ein else if + if($just_stueckliste=="1" && $explodiert=="0") + { + $checklieferkette = 0; + if($typ === 'auftrag'){ + $checklieferkette = $this->app->DB->Select("SELECT id FROM lieferkette_bestellung WHERE belegtyp='auftrag' AND belegid='$auftrag' LIMIT 1"); + } + + if($checklieferkette > 0){ + $artikel_von_stueckliste = $this->app->DB->SelectArr( + "SELECT s.*, art.nummer AS artnummer,art.projekt AS artprojekt + FROM stueckliste AS s + INNER JOIN artikel AS art ON s.artikel = art.id + WHERE s.stuecklistevonartikel='$artikel' AND s.art!='it' AND s.art!='bt'" + ); + } + else{ + $artikel_von_stueckliste = $this->app->DB->SelectArr( + "SELECT s.*, art.nummer AS artnummer,art.projekt AS artprojekt + FROM stueckliste AS s + INNER JOIN artikel AS art ON s.artikel = art.id + WHERE s.stuecklistevonartikel='$artikel'" + ); + } + + $treffer++; + $changed = true; + //hole artikel von stueckliste + + // schiebe alle artikel nach hinten + $erhoehe_sort = !empty($artikel_von_stueckliste)?count($artikel_von_stueckliste):0; + if($typ==='produktion') + { + } + else + { + $this->app->DB->Update("UPDATE auftrag_position SET sort=sort+$erhoehe_sort WHERE auftrag='$auftrag' AND sort > $sort"); + } + + if(!empty($artikel_von_stueckliste)){ + foreach ($artikel_von_stueckliste as $key => $value) { + $sort++; + $nummer = $value['artnummer']; + $projekt_artikel = $value['artprojekt']; + if($projekt_artikel > 0) $projekt = $projekt_artikel; + if($typ === 'produktion'){ + }else{ + $explodiert_id = $this->AddAuftragPositionNummer($auftrag, $nummer, $value['menge'] * $menge, $projekt, 1, false, "", array('forceartikelid' => $value['artikel'])); + $this->app->DB->Update( + sprintf( + 'UPDATE `artikel` SET `laststorage_changed` = NOW() WHERE `id` = %d', + $artikel + ) + ); + if($waehrung != '') $this->app->DB->Update("UPDATE auftrag_position SET waehrung='" . $waehrung . "' WHERE id='$explodiert_id' LIMIT 1"); + $this->app->DB->Update("UPDATE auftrag_position SET einkaufspreis='0',einkaufspreisurspruenglich=0 WHERE id='$explodiert_id' AND preis=0"); + $this->app->DB->Update("UPDATE auftrag_position SET ausblenden_im_pdf='" . ($keineeinzelartikelanzeigen == 1 ? 1 : 0) . "' WHERE id='$explodiert_id' "); + $this->app->DB->Update("UPDATE auftrag_position SET explodiert_parent='$artikel_position_id',sort='$sort',ohnepreis=1 WHERE id='$explodiert_id' LIMIT 1"); + if($this->app->DB->Select("SELECT id FROM artikel WHERE id = '" . $value['artikel'] . "' AND (juststueckliste = 1 " . ($listeexplodieren ? " OR stueckliste = 1 " : '') . ") LIMIT 1")) $this->app->DB->Update("UPDATE auftrag_position SET explodiert = 1 WHERE id='$explodiert_id' LIMIT 1"); + if($this->Firmendaten('auftragexplodieren_unterstuecklisten')) $this->app->DB->Update("UPDATE auftrag_position SET explodiert = 0 WHERE id = '$explodiert_id' LIMIT 1"); + $this->app->DB->Update("UPDATE `beleg_zwischenpositionen` SET pos = pos + 1 WHERE doctype = 'auftrag' AND doctypeid = '$auftrag' AND pos >= '" . ($sort - 1) . "' "); + } + } + } + + // MLM wenn mlm und der artikel explodiert ist alle punkte platt machen + if($typ==='auftrag' && $this->Firmendaten('modul_mlm')=='1') + { + $this->app->DB->Update("UPDATE auftrag_position SET mlmdirektpraemie=0, bonuspunkte=0,punkte=0 WHERE explodiert_parent='$artikel_position_id'"); + } + + if($typ==='produktion') + { + } + else + { + $this->app->DB->Update("UPDATE auftrag_position SET explodiert='1' WHERE id='$artikel_position_id' LIMIT 1"); + } + } + } + } + } + + if($typ==='produktion'){ + $this->ANABREGSNeuberechnen($auftrag, 'produktion'); + } + if($typ==='auftrag'){ + $this->ANABREGSNeuberechnen($auftrag, 'auftrag'); + } + } + + + // @refactor Auftrag Modul + public function AuftragEinzelnBerechnen($auftrag,$festreservieren=false) + { + if($auftrag <=0) + { + return; + } + $this->AuftragExplodieren($auftrag); + + //$this->BerechneDeckungsbeitrag($auftrag,"auftrag"); + $auftragarr = $this->app->DB->SelectRow("SELECT projekt,internet FROM auftrag WHERE id = '$auftrag' LIMIT 1"); + if(empty($auftragarr)) + { + return; + } + /* + $internet = $auftragarr['internet'];//$this->app->DB->Select("SELECT internet FROM auftrag WHERE id = '$auftrag' LIMIT 1"); + if(empty($internet)){ + $this->LoadSteuersaetzeWaehrung($auftrag,'auftrag'); + }*/ + + // reservieren nur wenn es manuell gemacht wurde oder im auftrag fest steht + $projekt = $auftragarr['projekt']; + $reservierung = $this->Projektdaten($auftragarr['projekt'], 'reservierung');// $this->app->DB->Select("SELECT reservierung FROM projekt WHERE id='$projekt' LIMIT 1"); + if($reservierung=="1" || $festreservieren){ + $this->AuftragReservieren($auftrag); + } + + $this->AuftragAutoversandBerechnen($auftrag); + } + + // @refactor Auftrag Modul + function AuftragAutoversandBerechnen($auftrag) + { + $toleranz = (float)str_replace(',','.', $this->app->erp->GetKonfiguration('zahlungseingang_toleranz')); + if($toleranz < 0)$toleranz = 0; + $auftraege = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id='$auftrag'"); + $adresse = $auftraege[0]['adresse']; + $artikelarr= $this->app->DB->SelectArr("SELECT ap.id, ap.artikel, ap.menge, ap.geliefert_menge, art.lagerartikel as artlagerartikel FROM auftrag_position ap LEFT JOIN artikel art ON ap.artikel = art.id WHERE ap.auftrag='$auftrag' AND ap.geliefert_menge < ap.menge AND ap.geliefert=0"); + + //pruefe ob es mindestens eine reservierung gibt + $reservierte = $this->app->DB->Select("SELECT COUNT(id) FROM lager_reserviert WHERE adresse='$adresse' AND datum>=NOW() AND objekt!='lieferschein'"); + if($reservierte >0 && $auftraege[0]['reserviert_ok'] != 1) { + $this->app->DB->Update("UPDATE auftrag SET reserviert_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + elseif($reservierte <= 0 && $auftraege[0]['reserviert_ok'] != 0) { + $this->app->DB->Update("UPDATE auftrag SET reserviert_ok='0' WHERE id='$auftrag' LIMIT 1"); + } + + // liefertermin + $liefertermincheck = $this->app->DB->Select("SELECT id FROM auftrag WHERE (tatsaechlicheslieferdatum<=NOW() OR tatsaechlicheslieferdatum IS NULL OR tatsaechlicheslieferdatum='0000-00-00') AND id='$auftrag'"); + if($liefertermincheck >0 && $auftraege[0]['liefertermin_ok'] != 1) { + $this->app->DB->Update("UPDATE auftrag SET liefertermin_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + elseif($liefertermincheck <= 0 && $auftraege[0]['liefertermin_ok'] != 0) { + $this->app->DB->Update("UPDATE auftrag SET liefertermin_ok='0' WHERE id='$auftrag' LIMIT 1"); + } + //liefersperre + $liefersperre = $this->app->DB->Select("SELECT liefersperre FROM adresse WHERE id='$adresse'"); + if($liefersperre >0 && $auftraege[0]['liefersperre_ok'] != 0) { + $this->app->DB->Update("UPDATE auftrag SET liefersperre_ok='0' WHERE id='$auftrag' LIMIT 1"); + } + elseif($liefersperre <= 0 && $auftraege[0]['liefersperre_ok'] != 1){ + $this->app->DB->Update("UPDATE auftrag SET liefersperre_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + + //kreditlimit + $kreditlimit_freigabe = $auftraege[0]['kreditlimit_freigabe'] ;// $this->app->DB->Select("SELECT kreditlimit_freigabe FROM auftrag WHERE id='$auftrag' LIMIT 1"); + $setKreditLimitOk = $kreditlimit_freigabe=='1' + || $this->KundeHatZR($adresse) + || $this->KreditlimitCheck($adresse)==true; + if($setKreditLimitOk && $auftraege[0]['kreditlimit_ok'] != 1) { + $this->app->DB->Update("UPDATE auftrag SET kreditlimit_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + elseif(!$setKreditLimitOk && $auftraege[0]['kreditlimit_ok'] != 0) { + $this->app->DB->Update("UPDATE auftrag SET kreditlimit_ok='0' WHERE id='$auftrag' LIMIT 1"); + } + + if($auftraege[0]['ust_ok'] != 1 && ($auftraege[0]['ust_befreit']==0 || ($auftraege[0]['ust_befreit']==1 && $auftraege[0]['ustid']==''))) { + $this->app->DB->Update("UPDATE auftrag SET ust_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + + // Lager Check + $positionen_vorhanden = 0; + $artikelzaehlen=0; + $cartikelarr = $artikelarr?count($artikelarr):0; + for($k=0;$k<$cartikelarr; $k++) { + $menge = $artikelarr[$k]['menge'] - $artikelarr[$k]['geliefert_menge']; + $artikel = $artikelarr[$k]['artikel']; + $artikel_position_id = $artikelarr[$k]['id']; + $lagerartikel = $artikelarr[$k]['artlagerartikel']; + if($lagerartikel==1) { + // wenn artikel oefters im Auftrag nehme gesamte summe her + + $gesamte_menge_im_auftrag= $this->app->DB->Select("SELECT SUM(menge-geliefert_menge) FROM auftrag_position WHERE auftrag='$auftrag' AND artikel='$artikel'"); + if($gesamte_menge_im_auftrag > $menge) { + $menge = $gesamte_menge_im_auftrag; + } + $artikelzaehlen++; + if($this->LagerCheck($adresse,$artikel,$menge,"auftrag",$auftrag)>0) { + $positionen_vorhanden++; + } + elseif($positionen_vorhanden > 0) { + break; + } + //else { if($auftrag==314) {echo "Artikel $artikel Menge $menge";exit;} } + + } + } + $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$auftrag' LIMIT 1"); + + $this->app->DB->Update("UPDATE auftrag SET teillieferung_moeglich='0' WHERE id='$auftrag' LIMIT 1"); + //echo "$positionen_vorhanden $artikelzaehlen
"; + if($positionen_vorhanden==$artikelzaehlen){ + $this->app->DB->Update("UPDATE auftrag SET lager_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + else { + $kommissionierverfahren = $this->app->DB->Select("SELECT kommissionierverfahren FROM projekt WHERE id = '$projekt' LIMIT 1"); + if($kommissionierverfahren == 'rechnungsmail') + { + $this->app->DB->Update("UPDATE auftrag SET lager_ok='1' WHERE id='$auftrag' LIMIT 1"); + }else{ + $this->app->DB->Update("UPDATE auftrag SET lager_ok='0' WHERE id='$auftrag' LIMIT 1"); + } + if($positionen_vorhanden > 0 && $artikelzaehlen > 0) + { + $this->app->DB->Update("UPDATE auftrag SET teillieferung_moeglich='1' WHERE id='$auftrag' LIMIT 1"); + } + + } + + + // projekt check start + $projektcheck = 0; + $projektcheckname = 0; + $projektportocheck = 0; + $projektnachnahmecheck = 0; + $projektarr = empty($projekt)?null:$this->app->DB->SelectRow("SELECT * FROM projekt WHERE id='$projekt' LIMIT 1"); + + if(!empty($projektarr)){ + $projektcheck = $projektarr['checkok']; + $projektcheckname = $projektarr['checkname']; + $projektportocheck = $projektarr['portocheck']; + $projektnachnahmecheck = $projektarr['nachnahmecheck']; + } + $altercheck = $this->app->DB->Select("SELECT check_ok FROM auftrag WHERE id='$auftrag' LIMIT 1"); + + if($projektcheck=='1' && @is_file(dirname(__FILE__)."/../plugins/class.".$projektcheckname.".php")) + { + //echo "projekt check $projektcheckname notwendig"; + if(file_exists(dirname(__DIR__).'/plugins/class.'.$projektcheckname.'.php') && !class_exists('unishop')) + { + include_once dirname(__DIR__).'/plugins/class.'.$projektcheckname.'.php'; + } + + if(class_exists('unishop')){ + $tmp = new unishop($this->app); + if($tmp->CheckOK($auftrag)) { + $this->app->DB->Update("UPDATE auftrag SET check_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + else{ + $this->app->DB->Update("UPDATE auftrag SET check_ok='0' WHERE id='$auftrag' LIMIT 1"); + } + }else{ + $this->app->DB->Update("UPDATE auftrag SET check_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + } + else{ + $this->app->DB->Update("UPDATE auftrag SET check_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + $this->RunHook('auftragcheck', 2, $auftrag, $altercheck); + + // autopruefung anstubsen + //$this->AutoUSTPruefung($adresse); + + // UST Check + // pruefe adresse 23 ust innerhalb 3 tagen vorhanden? wenn nicht schaue ob selber ordern kann wenn ja ordern und auf gruen + + $ustprf = $this->app->DB->Select("SELECT id FROM ustprf WHERE DATE_FORMAT(datum_online,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') AND adresse='$adresse' AND status='erfolgreich' LIMIT 1"); + $ustid = ''; + $ust_befreit = ''; + $land = ''; + $auftragarr = $this->app->DB->SelectRow("SELECT * FROM auftrag WHERE id='$auftrag' LIMIT 1"); + if(!empty($auftragarr)){ + $ustid = $auftragarr['ustid']; + $ust_befreit = $auftragarr['ust_befreit']; + $land = $auftragarr['land']; + } + + if($auftragarr['ust_ok'] != 1 && ($ust_befreit==0 || ($ust_befreit==1 && $ustid==''))) { + $this->app->DB->Update("UPDATE auftrag SET ust_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + + // Porto Check + // sind versandkosten im auftrag + $porto = $this->app->DB->Select("SELECT ap.id FROM auftrag_position ap, artikel a WHERE ap.auftrag='$auftrag' AND ap.artikel=a.id AND a.porto=1 AND ap.preis >= 0 + AND a.id=ap.artikel LIMIT 1"); + $keinporto = 0; + $selbstabholer = ''; + $projekt = 0; + $checkkeinportocheck = 0; + if(!empty($auftragarr)) { + $keinporto = $auftragarr['keinporto']; + $selbstabholer = $auftragarr['versandart']; + $projekt = $auftragarr['projekt']; + + // portocheck bei projekt + $checkkeinportocheck = $this->app->DB->Select("SELECT keinportocheck FROM versandarten WHERE type = '".$this->app->DB->real_escape_string($auftragarr['versandart'])."' AND + (projekt = '$projekt' OR projekt = 0) ORDER BY projekt = '$projekt' DESC LIMIT 1"); + + + } + + if($selbstabholer=='selbstabholer' || $selbstabholer=='keinversand' || $checkkeinportocheck=="1") { + $keinporto=1; + } + + if($projektportocheck==1) + { + if($porto > 0){ + $this->app->DB->Update("UPDATE auftrag SET porto_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + else{ + $portoFreeLimit = (double) $this->app->DB->Select("SELECT portofreiab FROM adresse WHERE id={$adresse} LIMIT 1"); + $parcelValue = (double) $auftragarr['gesamtsumme']; + + if(!empty($portoFreeLimit) && !empty($parcelValue) && $parcelValue > $portoFreeLimit){ + $this->app->DB->Update("UPDATE auftrag SET porto_ok='1' WHERE id='$auftrag' LIMIT 1"); + }else{ + $this->app->DB->Update("UPDATE auftrag SET porto_ok='0' WHERE id='$auftrag' LIMIT 1"); + } + } + } else { + //projekt hat kein portocheck porto ist immer ok + $this->app->DB->Update("UPDATE auftrag SET porto_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + + + + if($keinporto==1 || $selbstabholer=='selbstabholer') + { + $this->app->DB->Update("UPDATE auftrag SET porto_ok='1' WHERE id='$auftrag' LIMIT 1"); + //$this->app->DB->Update("UPDATE auftrag_position ap, artikel a SET ap.preis='0' WHERE ap.auftrag='$auftrag' AND a.id=ap.artikel AND a.porto='1'"); + } + + + //Vorkasse Check + //ist genug geld da? zusammenzaehlen der kontoauszuege_zahlungseingang + $summe_eingang = 0; + $auftrag_gesamtsumme = 0; + $zahlungsweise = ''; + $vorabbezahltmarkieren = 0; + if(!empty($auftragarr)) { + $auftrag_gesamtsumme = $auftragarr['gesamtsumme'];// $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftrag' LIMIT 1"); + $zahlungsweise = $auftragarr['zahlungsweise'];// $this->app->DB->Select("SELECT zahlungsweise FROM auftrag WHERE id='$auftrag' LIMIT 1"); + $vorabbezahltmarkieren = $auftragarr['vorabbezahltmarkieren'];// $this->app->DB->Select("SELECT vorabbezahltmarkieren FROM auftrag WHERE id='$auftrag' LIMIT 1"); + } + //TODO zahlungsweisemodul + $zahlungsweise = strtolower($zahlungsweise); + + if($zahlungsweisenmodule = $this->app->DB->SelectArr("SELECT id, modul, verhalten FROM zahlungsweisen WHERE type = '".$this->app->DB->real_escape_string($zahlungsweise)."' AND + (projekt = '$projekt' OR projekt = 0) ORDER BY projekt = '$projekt' DESC LIMIT 1 + ")) + { + if( ( $zahlungsweisenmodule[0]['verhalten'] == 'vorkasse' && (($summe_eingang + $toleranz>=$auftrag_gesamtsumme) || $vorabbezahltmarkieren)) || ($zahlungsweisenmodule[0]['verhalten'] == 'lastschrift') || ($zahlungsweisenmodule[0]['verhalten'] == '') || ($zahlungsweisenmodule[0]['verhalten'] == 'rechnung') ) + { + $this->app->DB->Update("UPDATE auftrag SET vorkasse_ok='1' WHERE id='$auftrag' LIMIT 1"); + }elseif($summe_eingang > 0) + { + $this->app->DB->Update("UPDATE auftrag SET vorkasse_ok='2' WHERE id='$auftrag' LIMIT 1"); + }else{ + $this->app->DB->Update("UPDATE auftrag SET vorkasse_ok='0' WHERE id='$auftrag' LIMIT 1"); + } + }else{ + if($summe_eingang+$toleranz>=$auftrag_gesamtsumme || ($zahlungsweise=="rechnung" || $zahlungsweise=="amazon" || $zahlungsweise=="amazon_bestellung" || $zahlungsweise=="secupay" + || $zahlungsweise=="nachnahme" || $zahlungsweise=="einzugsermaechtigung" || $zahlungsweise=="lastschrift" || $zahlungsweise=="bar") || $auftrag_gesamtsumme==0 || $vorabbezahltmarkieren=="1") + { + //TODO ok bei amazon und amazon_bestellung nur wenn transaktionsnummer vorhanden? + $this->app->DB->Update("UPDATE auftrag SET vorkasse_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + else if ($summe_eingang > 0) { + $this->app->DB->Update("UPDATE auftrag SET vorkasse_ok='2' WHERE id='$auftrag' LIMIT 1"); + } + else { + $this->app->DB->Update("UPDATE auftrag SET vorkasse_ok='0' WHERE id='$auftrag' LIMIT 1"); + } + } + //nachnahme gebuehr check!!!! + //$nachnahme = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag='$auftrag' AND nummer='200001' LIMIT 1"); + $nachnahme = $this->app->DB->Select("SELECT COUNT(ap.id) FROM auftrag_position ap, artikel a WHERE ap.auftrag='$auftrag' AND ap.artikel=a.id AND a.porto=1 AND ap.preis >= 0 + AND a.id=ap.artikel"); + + if($zahlungsweise=="nachnahme" && $nachnahme <2 && $projektnachnahmecheck==1){ + $this->app->DB->Update("UPDATE auftrag SET nachnahme_ok='0' WHERE id='$auftrag' LIMIT 1"); + } + else{ + $this->app->DB->Update("UPDATE auftrag SET nachnahme_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + + $lieferungtrotzsperre = $this->app->DB->Select("SELECT lieferungtrotzsperre FROM auftrag WHERE id='$auftrag' LIMIT 1"); + if($lieferungtrotzsperre==1){ + $this->app->DB->Update("UPDATE auftrag SET liefersperre_ok='1' WHERE id='$auftrag' LIMIT 1"); + } + } + + // @refactor Lieferschein Modul + public function LieferscheinCheck($lieferschein) + { + $obj = $this->LoadModul('lieferschein'); + if(!empty($obj) && method_exists($obj, 'LieferscheinCheck')){ + return $obj->LieferscheinCheck($lieferschein); + } + } + + + // @refactor Formater Komponente + public function EUR($betrag) + { + return number_format($betrag,2,',','.'); + } + + // @refactor Adresse Modul + public function KreditlimitCheck($adresse) + { + if($adresse <= 0) + { + return true; + } + $kreditlimit = $this->app->DB->Select("SELECT kreditlimit FROM adresse WHERE id='$adresse' LIMIT 1"); + if($kreditlimit <=0) { + return true; + } + // offene Rechnungen + $rechnungen = $this->SaldoAdresse($adresse); + + $auftraege = $this->SaldoAdresseAuftrag($adresse); + + return $kreditlimit >= ($rechnungen+$auftraege); + } + + // @refactor FormHelper Komponente + public function ReplaceBetrag($db,$value,$fromform = null) + { + // wenn ziel datenbank + if($db) + { + // wenn . und , vorhanden dann entferne punkt + $pos_punkt = strrpos($value, '.'); + $pos_komma = strrpos($value, ','); + if(($pos_punkt !== false) && ($pos_komma !== false)){ + if($pos_punkt < $pos_komma){ + $value = str_replace('.', '', $value); + }else{ + $value = str_replace(',', '', $value); + } + } + return str_replace(',','.',$value); + } + // wenn ziel formular + + //return $abkuerzung; + if($value == round($value, 2)) { + return number_format((float)$value,2,',',''); + } + + return rtrim(str_replace('.',',',$value),'0'); + } + + // @refactor FormHelper Komponente + function ReplaceAdresse($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(id,' ',name) FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + + $tmp = trim($value); + $rest = explode(" ",$tmp); + $rest = $rest[0]; + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE id='$rest' AND geloescht=0 LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + + return $abkuerzung; + } + + // @refactor FormHelper Komponente + function ReplaceMitarbeiter($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(mitarbeiternummer,' ',name) FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + + $tmp = trim($value); + $rest = explode(" ",$tmp); + $rest = $rest[0]; + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE mitarbeiternummer='$rest' AND mitarbeiternummer!='' AND geloescht=0 LIMIT 1"); + if($id <=0) $id=0; + + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + return $abkuerzung; + } + + // @refactor FormHelper Komponente + function ReplaceGruppenKategorien($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(id,' ',bezeichnung) as name FROM gruppen_kategorien WHERE id='$id' LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + // wenn nummer keine DB id ist! + $tmp = trim($value); + $rest = explode(" ",$tmp); + $rest = (int)$rest[0]; + $id = $this->app->DB->Select("SELECT id FROM gruppen_kategorien WHERE id='$rest' LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + return $abkuerzung; + } + + public function ReplacePreisgruppe($db,$value,$fromform) + { + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(g.kennziffer,' ',g.name) as name FROM gruppen g WHERE id='$id' LIMIT 1"); + }else{ + $abkuerzung =''; + } + if($id==0 || $id=='') { + $abkuerzung =''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + // wenn nummer keine DB id ist! + $tmp = trim($value); + $rest = explode(" ",$tmp); + $rest = $rest[0]; + $id = $this->app->DB->Select("SELECT id + FROM gruppen AS g + WHERE (CONCAT(g.kennziffer,' ',g.name)='$value' OR g.kennziffer = '$rest') AND + (g.name!='' OR g.kennziffer != '') AND g.art = 'preisgruppe' AND g.aktiv=1 + LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + return $abkuerzung; + } + + // @refactor FormHelper Komponente + function ReplaceArtikel($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(nummer,' ',name_de) as name FROM artikel WHERE id='$id' AND geloescht=0 LIMIT 1"); + }else{ + $abkuerzung =''; + } + if($id==0 || $id=="") $abkuerzung =""; + } else { + $dbformat = 0; + $abkuerzung = $value; + // wenn nummer keine DB id ist! + $tmp = trim($value); + $rest = explode(" ",$tmp); + $rest = $rest[0]; + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$rest' AND nummer!='' AND geloescht=0 LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + return $abkuerzung; + } + + // @refactor Formater Komponente + function FormatMengeBetrag($value) + { + if(strpos($value,'.') !== false) + { + $pos = strpos($value,'.'); + $value = rtrim($value,'0'); + if(strlen($value) <= $pos + 2) { + $value .= '0'; + } + if(strlen($value) <= $pos + 2) { + $value .= '0'; + } + }else { + $value .= '.00'; + } + if($value[0] === '.') { + $value = '0'.$value; + } + return $value; + } + + // @refactor FormHelper Komponente + function ReplaceMengeBetrag($db,$value,$fromform) + { + $dbformat = 0; + if(strpos($value,'.') > 0) { + $dbformat = 1; + } + + // wenn ziel datenbank + if($db) + { + if($dbformat) { + return $value; + } + if($value!=''){ + return str_replace(',', '.', $value); + } + return ''; + } + // wenn ziel formular + + $value = str_replace('.',',',$this->FormatMengeBetrag($value)); + if($dbformat) { + if($value!='') { + return $value; + } + return ''; + } + return $value; + } + + // @refactor FormHelper Komponente + function ReplaceMenge($db,$value,$fromform) + { + $tcheck = str_replace(',','.',$value); + if($tcheck < 0) { + return 1; + } + + + $dbformat = 0; + if(strpos($value,'.') > 0) { + $dbformat = 1; + } + + // wenn ziel datenbank + if($db) + { + if($dbformat) { + return $value; + } + + if($value!=''){ + return str_replace(',', '.', $value); + } + + return ''; + } + // wenn ziel formular + if(strpos($value,'.') !== false) + { + $value = rtrim(rtrim($value,'0'),'.'); + if($value[0] === '.') { + $value = '0'.$value; + } + } + if($dbformat) { + if($value!='') { + return str_replace('.',',',$value); + } + return ''; + } + + return $value; + } + + // @refactor FormHelper Komponente + function ReplaceDecimal($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(strpos($value,'.') > 0) { + $dbformat = 1; + } + + // wenn ziel datenbank + if($db) + { + if($dbformat) { + return $value; + } + + if($value!=''){ + return str_replace(',', '.', $value); + } + return ''; + } + // wenn ziel formular + + if($dbformat) { + if($value!='') { + return $value; + } + return ''; + } + + return $value; + } + + + // @refactor FormHelper Komponente + function ReplaceZeit($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(strlen($value) > 5) $dbformat = 1; + + // wenn ziel datenbank + if($db) + { + if($dbformat) return $value; + else return $this->app->String->Convert($value,"%1:%2","%1:%2:00"); + } + // wenn ziel formular + else + { + if($dbformat) return $this->app->String->Convert($value,"%1:%2:%3","%1:%2"); + else return $value; + } + } + + // @refactor FormHelper Komponente + function ReplaceDatum($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(strpos($value,'-') > 0) $dbformat = 1; + + // wenn ziel datenbank + if($db) + { + if($dbformat) { + return $value; + } + + if($value!=''){ + return $this->app->String->Convert($value, "%1.%2.%3", "%3-%2-%1"); + } + return ''; + } + // wenn ziel formular + + if($dbformat) { + if($value!='') { + return $this->app->String->Convert($value,'%1-%2-%3','%3.%2.%1'); + } + return ''; + } + + return $value; + } + + + // @refactor FormHelper Komponente + function ReplacePreisanfrage($db,$value,$fromform) + { + return $this->ReplaceANABRELSGSBE("preisanfrage",$db,$value,$fromform); + } + + // @refactor FormHelper Komponente + function ReplaceAngebot($db,$value,$fromform) + { + return $this->ReplaceANABRELSGSBE("angebot",$db,$value,$fromform); + } + + // @refactor FormHelper Komponente + function ReplaceLieferschein($db,$value,$fromform) + { + return $this->ReplaceANABRELSGSBE("lieferschein",$db,$value,$fromform); + } + + // @refactor FormHelper Komponente + function ReplaceAuftrag($db,$value,$fromform) + { + return $this->ReplaceANABRELSGSBE("auftrag",$db,$value,$fromform); + } + + // @refactor FormHelper Komponente + function ReplaceRechnung($db,$value,$fromform) + { + return $this->ReplaceANABRELSGSBE("rechnung",$db,$value,$fromform); + } + + function ReplaceRetoure($db,$value,$fromform) + { + return $this->ReplaceANABRELSGSBE('retoure',$db,$value,$fromform); + } + + // @refactor FormHelper Komponente + function ReplaceBestellung($db,$value,$fromform) + { + return $this->ReplaceANABRELSGSBE("bestellung",$db,$value,$fromform); + } + + // @refactor FormHelper Komponente + function ReplaceANABRELSGSBE($table,$db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT belegnr as name FROM $table WHERE id='$id' LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + $tmp = explode(' ', trim($value)); + $tmp = reset($tmp); + //$id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$rest' AND geloescht=0 LIMIT 1"); + $id = $this->app->DB->Select("SELECT id FROM $table WHERE belegnr='$tmp' AND belegnr!='' LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + + } + + // @refactor FormHelper Komponente + function ReplaceLagerPlatz($db, $value, $fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id ='$id' LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + $id = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung LIKE '$value' AND kurzbezeichnung!='' LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + + return $abkuerzung; + } + + // @refactor FormHelper Komponente + function ReplaceLager($db, $value, $fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id ='$id' LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + $id = $this->app->DB->Select("SELECT id FROM lager WHERE bezeichnung LIKE '$value' AND bezeichnung!='' LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + // @refactor FormHelper Komponente + function ReplaceKasse($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT bezeichnung FROM konten WHERE id ='$id' LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + $id = $this->app->DB->Select("SELECT id FROM konten WHERE bezeichnung LIKE '$value' AND bezeichnung!='' LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + // @refactor FormHelper Komponente + function ReplaceKostenstelle($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(nummer,' ',beschreibung) FROM kostenstelle WHERE nummer='$id' LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + $id = $this->app->DB->Select("SELECT nummer FROM kostenstelle WHERE CONCAT(nummer,' ',beschreibung)='$value' AND CONCAT(nummer,' ',beschreibung)!='' LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + // @refactor FormHelper Komponente + function ReplaceGruppe($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(name,' ',kennziffer) as name FROM gruppen WHERE id='$id' LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + $id = $this->app->DB->Select("SELECT id FROM gruppen WHERE CONCAT(name,' ',kennziffer)='$value' OR (kennziffer='$value' AND kennziffer!='') LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + // @refactor FormHelper Komponente + function ReplaceWiedervorlageStages($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(id,' ',kurzbezeichnung,' (',name,')') FROM wiedervorlage_stages WHERE id='$id' LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $tmp = trim($value); + $rest = explode(" ",$tmp); + $rest = $rest[0]; + + $id = $this->app->DB->Select("SELECT id FROM wiedervorlage_stages WHERE id='$rest' LIMIT 1"); + if($value=='') $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + // @refactor FormHelper Komponente + function ReplaceArbeitspaket($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(a.id,' ',p.abkuerzung,' ',a.aufgabe) FROM arbeitspaket a LEFT JOIN projekt p ON a.projekt=p.id WHERE a.id='$id' LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $tmp = trim($value); + $rest = explode(" ",$tmp); + $rest = $rest[0]; + + $id = $this->app->DB->Select("SELECT id FROM arbeitspaket WHERE id='$rest' LIMIT 1"); + if($value=='') $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + // @refactor FormHelper Komponente + function ReplaceProjektNameDyn($db, $value, $fromform) + { + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(abkuerzung,' ',name) FROM projekt WHERE id='$id' LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + $id = $this->app->DB->Select("SELECT id FROM projekt WHERE CONCAT(abkuerzung,' ',name)='$value' AND abkuerzung!='' LIMIT 1"); + if($id != '') + { + $value = explode(' ', $value); + $value = reset($value); + $id = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$value' AND abkuerzung!='' LIMIT 1"); + } + if($value=='') $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + + return $abkuerzung; + } + + // @refactor FormHelper Komponente + function ReplaceProjektName($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(abkuerzung,' ',name) FROM projekt WHERE id='$id' LIMIT 1"); + }else{ + $abkuerzung=''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + $id = $this->app->DB->Select("SELECT id FROM projekt WHERE CONCAT(abkuerzung,' ',name)='$value' AND abkuerzung!='' LIMIT 1"); + if($value=='') $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + // @refactor FormHelper Komponente + function ReplaceProjekt($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$id' LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $abkuerzung = $value; + $id = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung='$value' AND abkuerzung!='' LIMIT 1"); + if($value=='') $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + // @refactor FormHelper Komponente + function ReplaceLieferantennummer($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { // wenn es eine id ist! + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT lieferantennummer as name FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); + }else{ + $abkuerzung = ''; + } + if($id==0 || $id=="") $abkuerzung =""; + } else { + $rmodule = $this->app->Secure->GetGET("module"); + $raction = $this->app->Secure->GetGET("action"); + $rid = (int)$this->app->Secure->GetGET("id"); + $pruefemodule = array('artikel','auftrag','angebot','rechnung','lieferschein','gutschrift','bestellung'); + $filter_projekt = false; + if($raction == 'edit' && $rid && in_array($rmodule, $pruefemodule)) + { + $projekt = $this->app->DB->Select("SELECT projekt FROM $rmodule WHERE id = '$rid' LIMIT 1"); + if($projekt) + { + $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id = '$projekt' LIMIT 1"); + //if($eigenernummernkreis) + $filter_projekt = $projekt; + } + } + $abkuerzung = $value; + $tmp = trim($value); + $rest = explode(" ",$tmp); + $rest = $rest[0]; + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$rest' AND lieferantennummer!='' AND geloescht=0 ORDER BY ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + // @refactor Formater Komponente + function FirstTillSpace($string) + { + $tmp = trim($string); + $rest = explode(" ",$tmp); + return $rest[0]; + } + + // @refactor FormHelper Komponente + function ReplaceKundennummer($db,$value,$fromform) + { + + + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { // wenn es eine id ist! + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT kundennummer as name FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $rmodule = $this->app->Secure->GetGET("module"); + $raction = $this->app->Secure->GetGET("action"); + $rid = (int)$this->app->Secure->GetGET("id"); + $pruefemodule = array('artikel','auftrag','angebot','rechnung','lieferschein','gutschrift','bestellung','produktion'); + $filter_projekt = 0; + if($raction == 'edit' && $rid && in_array($rmodule, $pruefemodule)) + { + $projekt = $this->app->DB->Select("SELECT projekt FROM $rmodule WHERE id = '$rid' LIMIT 1"); + if($projekt) + { + $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id = '$projekt' LIMIT 1"); + //if($eigenernummernkreis) + $filter_projekt = $projekt; + } + } + $abkuerzung = $value; + $tmp = trim($value); + //$rest = substr($tmp, 0, 5); + $rest = explode(" ",$tmp); + $rest = $rest[0]; + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$rest' AND kundennummer!='' AND geloescht=0 ORDER BY ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + // @refactor FormHelper Komponente + function ReplaceKunde($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(kundennummer,' ',name) as name FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $rmodule = $this->app->Secure->GetGET("module"); + $raction = $this->app->Secure->GetGET("action"); + $rid = (int)$this->app->Secure->GetGET("id"); + $pruefemodule = array('artikel','auftrag','angebot','rechnung','lieferschein','gutschrift','bestellung'); + $filter_projekt = false; + if($raction == 'edit' && $rid && in_array($rmodule, $pruefemodule)) + { + $projekt = $this->app->DB->Select("SELECT projekt FROM $rmodule WHERE id = '$rid' LIMIT 1"); + if($projekt) + { + $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id = '$projekt' LIMIT 1"); + //if($eigenernummernkreis) + $filter_projekt = $projekt; + } + } + $dbformat = 0; + $abkuerzung = $value; + $tmp = trim($value); + $rest = explode(" ",$tmp); + $rest = $rest[0]; + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer='$rest' AND kundennummer!='' AND geloescht=0 ORDER BY ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + // @refactor FormHelper Komponente + function ReplaceSteuersatz($db,$value,$fromform) + { + if($db) + { + if($value === "" || $value === null)return -1; + return str_replace(',','.', $value); + }else{ + if($value < 0)return ""; + return str_replace('.',',', $value);; + } + } + + // @refactor FormHelper Komponente + function ReplaceSteuergruppe($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT bezeichnung FROM steuerregelngruppe WHERE id='$id' LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $dbformat = 0; + $value = $this->app->DB->real_escape_string($value); + $id = $this->app->DB->Select("SELECT id FROM steuerregelngruppe WHERE bezeichnung = '$value' ORDER BY aktiv = 1 DESC LIMIT 1"); + if($id <=0) $id=0; + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + // @refactor FormHelper Komponente + function ReplaceLieferant($db,$value,$fromform) + { + //value muss hier vom format ueberprueft werden + $dbformat = 0; + if(!$fromform) { + $dbformat = 1; + $id = $value; + if($id > 0){ + $abkuerzung = $this->app->DB->Select("SELECT CONCAT(lieferantennummer,' ',name) as name FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); + }else{ + $abkuerzung = ''; + } + } else { + $rmodule = $this->app->Secure->GetGET("module"); + $raction = $this->app->Secure->GetGET("action"); + $rid = (int)$this->app->Secure->GetGET("id"); + $pruefemodule = array('artikel','auftrag','angebot','rechnung','lieferschein','gutschrift','bestellung'); + $filter_projekt = false; + if($raction == 'edit' && $rid && in_array($rmodule, $pruefemodule)) + { + $projekt = $this->app->DB->Select("SELECT projekt FROM $rmodule WHERE id = '$rid' LIMIT 1"); + if($projekt) + { + $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id = '$projekt' LIMIT 1"); + //if($eigenernummernkreis) + $filter_projekt = $projekt; + } + } + $dbformat = 0; + $abkuerzung = $value; + $tmp = trim($value); + $rest = explode(" ",$tmp); + $rest = $rest[0]; + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$rest' AND lieferantennummer!='' AND geloescht=0 ORDER BY ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt LIMIT 1"); + if($id <=0) $id=0; + + } + + // wenn ziel datenbank + if($db) + { + return $id; + } + // wenn ziel formular + else + { + return $abkuerzung; + } + } + + /**@depreacated */ + function CheckSamePage() + { + $id = $this->app->Secure->GetGET("id"); + $check_id = strstr($_SERVER['HTTP_REFERER'], 'id='); + if($check_id!="id=".$id) + return true; + else + return false; + } + + /** + * @depreacated + * @refactor Artikel Modul + */ + function SeitenSperrAuswahl($ueberschrift,$meldung) + { + /* $this->app->Tpl->Set(SPERRMELDUNG, '$("a#inline").fancybox({ + \'modal\': true, + \'autoDimensions\': false, + \'width\': 500, + \'height\': 300 + }); + $(\'#inline\').click();'); + + $this->app->Tpl->Set(SPERRMELDUNGNACHRICHT,' +

'.$ueberschrift.'


von Benedikt Sauter

'.$meldung.'
+

Jetzt Zurück zum letzten Schritt |  + Bitte Fenster dennoch freigeben
'); + */ + + $this->app->Tpl->Set('SPERRMELDUNG', ' + // a workaround for a flaw in the demo system (http://dev.jqueryui.com/ticket/4375), ignore! + $( "#dialog:ui-dialog" ).dialog( "destroy" ); + + $( "#dialog-message" ).dialog({ +modal: true, +buttons: { +Ok: function() { +$( this ).dialog( "close" ); +} +} +}); + '); + + + $this->app->Tpl->Set('SPERRMELDUNGNACHRICHT',' +
+

+ '.$meldung.' +

+
+ '); + } + +/**@depreacated */ +function SeitenSperrInfo($meldung) +{ + $this->app->Tpl->Set('SPERRMELDUNG', '$("a#inline").fancybox({ + \'hideOnContentClick\': true, + \'autoDimensions\': false, + \'width\': 500, + \'height\': 300 + }); + $(\'#inline\').click();'); + + $this->app->Tpl->Set('SPERRMELDUNGNACHRICHT',' +

Infomeldung




'.$meldung.'
'); + +} + +// @refactor Artikel Modul +function AddArtikel($felder) +{ + $this->app->DB->Insert("INSERT INTO artikel (id) VALUES ('')"); + $id = $this->app->DB->GetInsertID(); + if($felder['firma']<=0) + $felder['firma'] = $this->app->DB->Select("SELECT MAX(f.id) FROM firma f INNER JOIN firmendaten fd ON f.id = fd.firma LIMIT 1"); + if($felder['firma']<=0) + $felder['firma'] = $this->app->DB->Select("SELECT MAX(firma) FROM firmendaten LIMIT 1"); + + if($felder['projekt']<=0) + $felder['projekt'] = $this->app->DB->Select("SELECT standardprojekt FROM firma WHERE id='".$felder['firma']."' LIMIT 1"); + + if($felder['firma']<=0) $felder['firma']=1; + if($felder['projekt']<=0) $felder['projekt']=1; + + // so starten, dass alle uebertragen werden + if($felder['cache_lagerplatzinhaltmenge']<=0) $felder['cache_lagerplatzinhaltmenge']=-999; + + if(!empty($felder['anhang'])) + { + if(!is_array($felder['anhang'])){ + $data = $felder['anhang']; + $felder['anhang'] = []; + $felder['anhang'][] = ['datei' => $data, 'endung' => '', 'name' =>'']; + } + + foreach ($felder['anhang'] as $anhang){ + $dateiname = trim($anhang['name']); + if(empty($dateiname)){ + $dateiname = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id ='$id'"); + } + $fileid = $this->addBase64Bild($anhang['datei'],$dateiname,$anhang['endung']); + if(!empty($fileid)){ + $this->AddDateiStichwort($fileid, 'Bild', 'artikel', $id); + } + + } + unset($felder['anhang']); + } + + + $this->app->DB->UpdateArr("artikel",$id,"id",$felder); + + + return $id; +} + +public function addBase64Bild($base64datei,$name = '',$endung = '',$titel='Anhang'){ + $decodedData = @base64_decode($base64datei); + $tmpdatei = $this->app->erp->GetTMP().'anhangtmp'.microtime(true); + file_put_contents($tmpdatei ,$decodedData); + + if(empty($endung)){ + $mimetype = explode('/',mime_content_type($tmpdatei)); + switch ($mimetype[0]){ + case 'image': + if(strpos($mimetype[1],'jpg') !== false || strpos($mimetype[1],'jpeg') !== false){ + $endung = 'jpg'; + } + if(strpos($mimetype[1],'png') !== false){ + $endung = 'png'; + } + if(strpos($mimetype[1],'bmp') !== false){ + $endung = 'bmp'; + } + break; + case 'text': + if(strpos($mimetype[1],'plain') !== false){ + $endung = 'txt'; + } + if(strpos($mimetype[1],'php') !== false){ + $endung = 'php'; + } + break; + default: + $endung = 'pdf'; + break; + } + } + + + $datei = $this->app->Conf->WFuserdata.'/'.md5($name.'.'.$endung.microtime(true)); + move_uploaded_file($tmpdatei,$datei); + + $fileid = 0; + if(file_put_contents($datei,$decodedData)) + { + if(@is_file($datei) && @filesize($datei)) + { + $fileid = $this->CreateDatei($name.'.'.$endung, $titel, '', '', $datei, $this->app->User->GetName()); + unlink($datei); + } + } + + return $fileid; +} + +// @refactor API Modul +function SetzteSperreAPIArtikelPreise($artikel) +{ + $this->app->DB->Update("UPDATE verkaufspreise SET apichange=0 WHERE artikel=$artikel"); + //$this->app->DB->Update("UPDATE einkaufspreise SET apichange=0 WHERE artikel=$artikel"); +} + +// @refactor API Modul +function EntferneSperreAPIArtikelPreise($artikel) +{ + $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE apichange!=1 AND artikel=$artikel"); + //$this->app->DB->Update("UPDATE einkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY) WHERE apichange!=1 AND artikel=$artikel"); +} + +// @refactor Artikel Modul +function AddVerkaufspreisGruppe($artikel,$abmenge,$gruppe,$preis,$waehrung="EUR",$kundenartikelnummer="", $gueltig_ab = null, $interner_kommentar = null, $gueltig_bis = null) +{ + if($abmenge<=0)$abmenge=1; + + $gruppe = $this->app->DB->Select("SELECT id FROM gruppen WHERE id='$gruppe' LIMIT 1"); + if($gruppe <=0) + return; + $gueltigabwhere = 'curdate()'; + if($gueltig_ab)$gueltigabwhere = "'$gueltig_ab'"; + if($gruppe > 0) + $check = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE ab_menge='".$abmenge."' AND gruppe='".$gruppe."' AND artikel='$artikel' AND art='Gruppe' + AND (gueltig_bis='0000-00-00' OR gueltig_bis >= $gueltigabwhere) AND geloescht!='1' AND adresse <= 0 LIMIT 1"); + else + $check = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE ab_menge='".$abmenge."' AND (gruppe='' OR gruppe='0') AND artikel='$artikel' AND art='Gruppe' + AND (gueltig_bis='0000-00-00' OR gueltig_bis >= $gueltigabwhere) AND geloescht!='1' AND adresse <= 0 LIMIT 1"); + + // soll man preis als ungueltig markieren? + if($check > 0) + { + // noch nie dagewesen jetzt anlegen + // ist der preis anders? + $preis_alt = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$check' LIMIT 1"); + if($preis!=$preis_alt) + { + $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis=DATE_SUB($gueltigabwhere,INTERVAL 1 DAY),apichange=1 WHERE id='$check' LIMIT 1"); + $this->app->DB->Insert("INSERT INTO verkaufspreise (id,gruppe,artikel,angelegt_am, + ab_menge,waehrung,preis,firma,kundenartikelnummer,adresse,art,apichange,logdatei) + VALUES ('','$gruppe','$artikel',NOW(),'$abmenge','$waehrung','$preis','".$this->app->User->GetFirma()."','".$kundenartikelnummer."',0,'Gruppe',1,now())"); + $insid = $this->app->DB->GetInsertID(); + if($waehrung !== 'EUR' && $waehrung !== ''){ + $kurs = $this->app->erp->GetWaehrungUmrechnungskurs('EUR', $waehrung, true); + }else{ + $kurs = -1; + $kursdatum = 'NULL'; + } + if($kurs !== false){ + if($kurs !== -1){ + $kursdatum = "'" . date('Y-m-d') . "'"; + } + $this->app->DB->Update("UPDATE verkaufspreise SET kurs = $kurs, kursdatum = $kursdatum WHERE id = $insid LIMIT 1"); + } + if($gueltig_ab)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_ab = '$gueltig_ab' WHERE id = '$insid' LIMIT 1"); + if($interner_kommentar)$this->app->DB->Update("UPDATE verkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$insid' LIMIT 1"); + } else { + // nur attribute update + if($kundenartikelnummer!="") + { + $this->app->DB->Update("UPDATE verkaufspreise SET kundenartikelnummer='$kundenartikelnummer', apichange=1 WHERE id='$check' LIMIT 1"); + } else { + $this->app->DB->Update("UPDATE verkaufspreise SET apichange=1 WHERE id='$check' LIMIT 1"); + } + if($interner_kommentar)$this->app->DB->Update("UPDATE verkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$check' LIMIT 1"); + } +} else { + $this->app->DB->Insert("INSERT INTO verkaufspreise (id,gruppe,artikel,angelegt_am, + ab_menge,waehrung,preis,firma,kundenartikelnummer,adresse,art,apichange) + VALUES ('','$gruppe','$artikel',NOW(),'$abmenge','$waehrung','$preis','".$this->app->User->GetFirma()."','".$kundenartikelnummer."',0,'Gruppe',1)"); + $insid = $this->app->DB->GetInsertID(); + if($waehrung !== 'EUR' && $waehrung !== ''){ + $kurs = $this->app->erp->GetWaehrungUmrechnungskurs('EUR', $waehrung, true); + }else{ + $kurs = false; + } + if($kurs !== false){ + if($kurs !== -1){ + $kursdatum = "'" . date('Y-m-d') . "'"; + } + $this->app->DB->Update("UPDATE verkaufspreise SET kurs = $kurs, kursdatum = $kursdatum WHERE id = $insid LIMIT 1"); + } + if($gueltig_ab)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_ab = '".$this->app->DB->real_escape_string($gueltig_ab)."' WHERE id = '$insid' LIMIT 1"); + if($gueltig_bis)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis = '".$this->app->DB->real_escape_string($gueltig_bis)."' WHERE id = '$insid' LIMIT 1"); + if($interner_kommentar)$this->app->DB->Update("UPDATE verkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$insid' LIMIT 1"); + } +} + +// @refactor Artikel Modul +function AddVerkaufspreis($artikel,$abmenge,$adresse,$preis,$waehrung="EUR",$kundenartikelnummer="", $gruppe = null, $gueltig_ab = null, $interner_kommentar = null, $gueltig_bis = null) +{ + if($adresse==="") + return false; + + if($abmenge<=0)$abmenge=1; + + if($adresse > 0) + { + $adresse = $this->app->DB->Select("SELECT id FROM adresse WHERE id='$adresse' LIMIT 1"); + if($adresse <=0) + return false; + } + + if($waehrung == "EUR") + { + $where = " AND (waehrung = '' OR waehrung = 'EUR') "; + }else{ + $where = " AND waehrung = '".$waehrung."' "; + } + + $gueltigabwhere = 'curdate()'; + if($gueltig_ab)$gueltigabwhere = "'$gueltig_ab'"; + + $preis = round($preis,8); + + if($adresse > 0) + $check = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE ab_menge=".$abmenge." ".$where." AND adresse=".$adresse." AND artikel=$artikel AND art='Kunde' + AND (gueltig_bis='0000-00-00' OR gueltig_bis >= $gueltigabwhere) AND (gueltig_ab='0000-00-00' OR gueltig_ab <= $gueltigabwhere) AND geloescht!='1' ".($gruppe?" AND gruppe = '$gruppe' ":'')." LIMIT 1"); + else + $check = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE ab_menge=".$abmenge." ".$where." AND (adresse='' OR adresse=0) AND artikel=$artikel AND art='Kunde' + AND (gueltig_bis='0000-00-00' OR gueltig_bis >= $gueltigabwhere) AND (gueltig_ab='0000-00-00' OR gueltig_ab <= $gueltigabwhere) AND geloescht!=1 ".($gruppe?" AND gruppe = '$gruppe' ":'')." LIMIT 1"); + +// soll man preis als ungueltig markieren? +if($check > 0) +{ + // noch nie dagewesen jetzt anlegen + // ist der preis anders? + $preis_alt = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$check' LIMIT 1"); + if($preis!=$preis_alt) + { + $this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis=DATE_SUB($gueltigabwhere,INTERVAL 1 DAY),apichange=1 WHERE id='$check' LIMIT 1"); + $this->app->DB->Insert("INSERT INTO verkaufspreise (id,adresse,artikel,angelegt_am, + ab_menge,waehrung,preis,firma,kundenartikelnummer,art,apichange,logdatei) + VALUES ('','$adresse','$artikel',NOW(),'$abmenge','$waehrung','$preis','1','".$kundenartikelnummer."','Kunde',1,now())"); + + $insid = $this->app->DB->GetInsertID(); + if($waehrung !== 'EUR' && $waehrung !== ''){ + $kurs = $this->app->erp->GetWaehrungUmrechnungskurs('EUR', $waehrung, true); + }else{ + $kurs = -1; + $kursdatum = 'NULL'; + } + if($kurs !== false){ + if($kurs !== -1){ + $kursdatum = "'" . date('Y-m-d') . "'"; + } + $this->app->DB->Update("UPDATE verkaufspreise SET kurs = $kurs, kursdatum = $kursdatum WHERE id = $insid LIMIT 1"); + } + + if($gueltig_ab)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_ab = '$gueltig_ab' WHERE id = '$insid' LIMIT 1"); + $this->ObjektProtokoll('verkaufspreise',$insid,'AddVerkaufspreis',"Verkaufspreis von $preis_alt nach $preis ge&auuml;ndert"); + if($gruppe) + { + $this->app->DB->Update("UPDATE verkaufspreise set gruppe = '".$gruppe."' where id = '".$insid."'"); + } + if($gueltig_bis)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis = '".$this->app->DB->real_escape_string($gueltig_bis)."' WHERE id = '$insid' LIMIT 1"); + if($interner_kommentar)$this->app->DB->Update("UPDATE verkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$insid' LIMIT 1"); + return $insid; + } else { + // nur attribute update + if($kundenartikelnummer!="") + { + $this->app->DB->Update("UPDATE verkaufspreise SET kundenartikelnummer='$kundenartikelnummer',apichange=1 WHERE id='$check' LIMIT 1"); + $this->ObjektProtokoll('verkaufspreise',$check,'AddVerkaufspreis',"Kundenartikelnummer ge&auuml;ndert"); + } else { + $this->app->DB->Update("UPDATE verkaufspreise SET apichange=1 WHERE id='$check' LIMIT 1"); + } + if($interner_kommentar)$this->app->DB->Update("UPDATE verkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$check' LIMIT 1"); + } + return $check; +} else { + $this->app->DB->Insert("INSERT INTO verkaufspreise (id,adresse,artikel,angelegt_am, + ab_menge,waehrung,preis,firma,kundenartikelnummer,art,apichange,logdatei) + VALUES ('','$adresse','$artikel',NOW(),'$abmenge','$waehrung','$preis','1','".$kundenartikelnummer."','Kunde',1,now())"); + $insid = $this->app->DB->GetInsertID(); + if($waehrung !== 'EUR' && $waehrung !== ''){ + $kurs = $this->app->erp->GetWaehrungUmrechnungskurs('EUR', $waehrung, true); + }else{ + $kurs = false; + } + if($kurs !== false){ + $kursdatum = "'" . date('Y-m-d') . "'"; + $this->app->DB->Update("UPDATE verkaufspreise SET kurs = $kurs, kursdatum = $kursdatum WHERE id = $insid LIMIT 1"); + } + if($gueltig_ab)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_ab = '".$this->app->DB->real_escape_string($gueltig_ab)."' WHERE id = '$insid' LIMIT 1"); + if($gueltig_bis)$this->app->DB->Update("UPDATE verkaufspreise SET gueltig_bis = '".$this->app->DB->real_escape_string($gueltig_bis)."' WHERE id = '$insid' LIMIT 1"); + if($gruppe) + { + $this->app->DB->Update("UPDATE verkaufspreise set gruppe = '".$gruppe."' where id = '".$insid."'"); + } + if($interner_kommentar)$this->app->DB->Update("UPDATE verkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$insid' LIMIT 1"); + $this->ObjektProtokoll('verkaufspreise',$insid,'AddVerkaufspreis',"Verkaufspreis angelegt"); + return $insid; + } +} + +// @refactor Artikel Modul +function AddEinkaufspreis($artikel,$abmenge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung="",$vpe="", $testebestellnummer = false, $interner_kommentar = null) +{ + if($abmenge<=0) $abmenge=1; + + if($waehrung=="") $waehrung="EUR"; + if($waehrung == "EUR") + { + $where = " AND (waehrung = '' OR waehrung = 'EUR') "; + }else{ + $where = " AND waehrung = '".$waehrung."' "; + } + + if($testebestellnummer && $bestellnummer)$where = " AND bestellnummer = '".addslashes($bestellnummer)."' "; + $check = $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE ab_menge='".$abmenge."' AND adresse='".$adresse."' AND artikel='$artikel' + AND (gueltig_bis='0000-00-00' OR gueltig_bis >= NOW()) AND geloescht!='1' ".$where." LIMIT 1"); + // soll man preis als ungueltig markieren? + if($check > 0) + { + // noch nie dagewesen jetzt anlegen + // ist der preis anders? + $preis_alt = $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE id='$check' LIMIT 1"); + if($preis!=$preis_alt) + { + $this->app->DB->Update("UPDATE einkaufspreise SET gueltig_bis=DATE_SUB(NOW(),INTERVAL 1 DAY),apichange=1 WHERE id='$check' LIMIT 1"); + //$this->AddEinkaufspreis($artikel,$abmenge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); + $this->app->DB->Insert("INSERT INTO einkaufspreise (id,adresse,artikel,bestellnummer,bezeichnunglieferant, preis_anfrage_vom, + ab_menge,waehrung,preis,firma,vpe,apichange,logdatei) VALUES + ('','$adresse','$artikel','$bestellnummer','$bezeichnunglieferant',NOW(),'$abmenge','$waehrung','$preis','".$this->app->User->GetFirma()."','$vpe',1, now())"); + if($interner_kommentar)$this->app->DB->Update("UPDATE einkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$insid' LIMIT 1"); + $insid = $this->app->DB->GetInsertID(); + $this->ObjektProtokoll('einkaufspreise',$insid,'AddEinkaufspreis',"Einkaufspreis von $preis_alt nach $preis ge&auuml;ndert"); + return $insid; + } else { + $this->app->DB->Update("UPDATE einkaufspreise SET bestellnummer='$bestellnummer', bezeichnunglieferant='$bezeichnunglieferant',apichange=1, logdatei = now() + WHERE id='$check' LIMIT 1"); + $this->ObjektProtokoll('einkaufspreise',$check,'AddEinkaufspreis',"Einkaufspreis ge&auuml;ndert"); + if($interner_kommentar)$this->app->DB->Update("UPDATE einkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$check' LIMIT 1"); + return $check; + } + } else { + //$this->AddEinkaufspreis($artikel,$abmenge,$adresse,$bestellnummer,$bezeichnunglieferant,$preis,$waehrung); + $this->app->DB->Insert("INSERT INTO einkaufspreise (id,adresse,artikel,bestellnummer,bezeichnunglieferant, preis_anfrage_vom, + ab_menge,waehrung,preis,firma,vpe,apichange, logdatei) VALUES + ('','$adresse','$artikel','$bestellnummer','$bezeichnunglieferant',NOW(),'$abmenge','$waehrung','$preis','".$this->app->User->GetFirma()."','$vpe',1,now())"); + $insid = $this->app->DB->GetInsertID(); + if($interner_kommentar)$this->app->DB->Update("UPDATE einkaufspreise SET bemerkung = '".$this->app->DB->real_escape_string($interner_kommentar)."' WHERE id = '$insid' LIMIT 1"); + $this->ObjektProtokoll('einkaufspreise',$insid,'AddEinkaufspreis',"Einkaufspreis angelegt"); + return $insid; + + } + +} + +// @refactor Artikel Modul +function EinkaufspreisBetrag($artikel,$menge,$lieferant,$projekt='') +{ + if(!$menge) { + $menge = 1; + } + $id = $artikel; + $adresse = $lieferant; + + $ek = $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND ab_menge <= $menge order by ab_menge desc LIMIT 1"); + if($ek) { + return $ek; + } + + return $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') order by ab_menge ASC LIMIT 1"); +} + +// @refactor Artikel Modul +function Einkaufspreis($artikel,$menge,$lieferant,$projekt="") +{ + $id = $artikel; + $adresse = $lieferant; + + $ek = $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND ab_menge <= $menge order by ab_menge desc LIMIT 1"); + if($ek) { + return $ek; + } + return $this->app->DB->Select("SELECT id FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') order by ab_menge LIMIT 1"); +} + + +// @refactor Bestellung Modul +function ArtikelBestellung($artikel, $format = false, $ohnebestellauftrag = false) +{ + $summe_in_bestellung = $this->app->DB->Select("SELECT ".($format?"trim(SUM(bp.menge-bp.geliefert))+0":"SUM(bp.menge-bp.geliefert)")." + FROM bestellung_position bp + LEFT JOIN bestellung b ON b.id=bp.bestellung + WHERE bp.artikel='$artikel' ".($ohnebestellauftrag?" AND bp.auftrag_position_id = 0 ":"")." AND bp.geliefert < bp.menge AND (bp.abgeschlossen IS NULL OR bp.abgeschlossen!=1) AND b.status!='abgeschlossen' AND b.status!='freigegeben' AND b.status!='angelegt' AND b.status!='storniert'"); + + if($summe_in_bestellung <= 0) + return 0; + + return $summe_in_bestellung; +} + +// @refactor Bestellung Modul +function ArtikelBestellungNichtVersendet($artikel, $format = false, $ohnebestellauftrag = false) +{ + //$summe_in_bestellung = $this->app->DB->Select("SELECT SUM(bp.menge-bp.geliefert) FROM bestellung_position bp WHERE bp.artikel='$artikel' AND bp.geliefert < bp.menge AND bp.abgeschlossen!='1'"); + + $summe_in_bestellung = $this->app->DB->Select("SELECT ".($format?"trim(SUM(bp.menge-bp.geliefert))+0":"SUM(bp.menge-bp.geliefert)")." + FROM bestellung_position bp + LEFT JOIN bestellung b ON b.id=bp.bestellung + WHERE bp.artikel='$artikel' ".($ohnebestellauftrag?" AND bp.auftrag_position_id = 0 ":"")." AND bp.geliefert < bp.menge AND (bp.abgeschlossen IS NULL OR bp.abgeschlossen!=1) AND (b.status='freigegeben' OR b.status='angelegt')"); + + + if($summe_in_bestellung <= 0) + return 0; + + return $summe_in_bestellung; +} + + +// @refactor Bestellung Modul +function ArtikelVerkaufGesamt($artikel, $format = false) +{ + if($format) + { + $summe_im_auftrag = $this->app->DB->Select("SELECT trim(SUM(menge))+0 FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$artikel' AND a.status='abgeschlossen'"); + if($summe_im_auftrag<=0) $summe_im_auftrag=0; + return $summe_im_auftrag; + } + $summe_im_auftrag = $this->app->DB->Select("SELECT SUM(menge) FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$artikel' AND a.status='abgeschlossen'"); + if($summe_im_auftrag<=0) $summe_im_auftrag=0; + return $summe_im_auftrag; +} + +// @refactor Bestellung Modul +function ReserviertAuftrag($artikel, $von = null, $bis = null, $ohnebestellung = false) +{ + return $this->app->DB->Select("SELECT trim(SUM(ifnull(r.menge,0)))+0 + FROM lager_reserviert r INNER JOIN + (SELECT ap.auftrag, ap.artikel, sum(ap.menge) as menge + FROM auftrag_position ap + ".($ohnebestellung?" LEFT JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id ":"")." + INNER JOIN auftrag a ON a.id=ap.auftrag + WHERE ap.artikel='$artikel' ".($ohnebestellung?" AND isnull(bp.id) ":"")." AND a.status='freigegeben' ".($auftrag?" AND ap.auftrag = '$auftrag' ":"")."" + .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") + .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' + ":"")." GROUP BY ap.auftrag, ap.artikel) ab ON r.parameter = ab.auftrag AND r.artikel = '$artikel' AND r.objekt = 'auftrag'" + ); +} + +// @refactor Bestellung Modul +function ReserviertLieferschein($artikel, $von = null, $bis = null) +{ + return $this->app->DB->Select("SELECT trim(SUM(ifnull(r.menge,0)))+0 + FROM `lager_reserviert` AS `r` INNER JOIN + (SELECT lp.lieferschein, lp.artikel, sum(lp.menge) as `menge` + FROM `lieferschein_position` AS `lp` + INNER JOIN `lieferschein` AS `l` ON l.id = lp.lieferschein + WHERE lp.artikel = '$artikel' AND l.status = 'freigegeben'" + .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") + .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' + ":"")." GROUP BY lp.lieferschein, lp.artikel) AS `lb` ON r.parameter = lb.lieferschein AND r.artikel = '$artikel' AND r.objekt = 'lieferschein'" + ); +} + +// @refactor Bestellung Modul +function ReserviertAuftragLiefertermin($artikel, $von = null, $bis = null, $ohnebestellung = false) +{ + return $this->app->DB->Select("SELECT trim(SUM(ifnull(r.menge,0)))+0 + FROM lager_reserviert r INNER JOIN + (SELECT ap.auftrag, ap.artikel, sum(ap.menge) as menge + FROM auftrag_position ap + ".($ohnebestellung?" LEFT JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id ":"")." + INNER JOIN auftrag a ON a.id=ap.auftrag + WHERE ap.artikel='$artikel' ".($ohnebestellung?" AND isnull(bp.id) ":"")." AND a.status='freigegeben' ".($auftrag?" AND ap.auftrag = '$auftrag' ":"")."" + .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") + .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' + AND (ifnull(ap.lieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(ap.lieferdatum,'0000-00-00') <= '$bis') + AND (ifnull(a.tatsaechlicheslieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(a.tatsaechlicheslieferdatum,'0000-00-00') <= '$bis') + AND (ifnull(a.lieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(a.lieferdatum,'0000-00-00') <= '$bis') + + ":"")." GROUP BY ap.auftrag, ap.artikel) ab ON r.parameter = ab.auftrag AND r.artikel = '$artikel' AND r.objekt = 'auftrag'" + ); +} + +// @refactor Bestellung Modul +function ArtikelImAuftragLiefertermin($artikel, $format = false, $von = null, $bis = null, $auftrag = 0, $ohnebestellung = false) +{ + return $this->app->DB->Select("SELECT ".($format?"trim(SUM(menge))+0":"sum(menge)")." + FROM auftrag_position ap + LEFT JOIN auftrag a ON a.id=ap.auftrag + ".($ohnebestellung?" LEFT JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id ":"")." + WHERE ap.artikel='$artikel' ".($ohnebestellung?" AND isnull(bp.id) ":"")." AND a.status='freigegeben' ".($auftrag?" AND ap.auftrag = '$auftrag' ":"")."" + .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") + .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' + AND (ifnull(ap.lieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(ap.lieferdatum,'0000-00-00') <= '$bis') + AND (ifnull(a.tatsaechlicheslieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(a.tatsaechlicheslieferdatum,'0000-00-00') <= '$bis') + AND (ifnull(a.lieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(a.lieferdatum,'0000-00-00') <= '$bis') + + ":"") + ); + + return $summe_im_auftrag; +} + +// @refactor Bestellung Modul +function ArtikelImAuftrag($artikel, $format = false, $von = null, $bis = null, $auftrag = 0, $ohnebestellung = false) +{ + return $this->app->DB->Select("SELECT ".($format?"trim(SUM(ap.menge))+0":"SUM(ap.menge)")." + FROM auftrag_position ap + ".($ohnebestellung?" LEFT JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id ":"")." + LEFT JOIN auftrag a ON a.id=ap.auftrag + WHERE ap.artikel='$artikel' ".($ohnebestellung?" AND isnull(bp.id) ":"")." AND a.status='freigegeben' ".($auftrag?" AND ap.auftrag = '$auftrag' ":"")." " + .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") + .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' ":"") + ); +} + +// @refactor Bestellung Modul +function ArtikelImAuftragStuecklisteLiefertermin($artikel, $format = false, $von = null, $bis = null, $auftrag = 0, $ohnebestellung = false) +{ + + return $this->app->DB->Select("SELECT ".($format?"trim(SUM(ap.menge * s.menge))+0":"SUM(ap.menge * s.menge)")." + FROM auftrag_position ap + ".($ohnebestellung?" LEFT JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id ":"")." + INNER JOIN auftrag a ON a.id=ap.auftrag + INNER JOIN stueckliste s ON ap.artikel = s.stuecklistevonartikel + INNER JOIN artikel a2 ON a2.id = s.stuecklistevonartikel + WHERE s.artikel='$artikel' ".($ohnebestellung?" AND isnull(bp.id) ":"")." AND a.status='freigegeben' AND a2.produktion = 1 ".($auftrag?" AND ap.auftrag = '$auftrag' ":"")." " + .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") + .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' + AND (ifnull(ap.lieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(ap.lieferdatum,'0000-00-00') <= '$bis') + AND (ifnull(a.tatsaechlicheslieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(a.tatsaechlicheslieferdatum,'0000-00-00') <= '$bis') + AND (ifnull(a.lieferdatum,'0000-00-00') = '0000-00-00' OR ifnull(a.lieferdatum,'0000-00-00') <= '$bis') + ":"") + ); + + return $summe_im_auftrag; +} + +// @refactor Bestellung Modul +function ArtikelImAuftragStueckliste($artikel, $format = false, $von = null, $bis = null, $auftrag = 0, $ohnebestellung = false) +{ + return $this->app->DB->Select("SELECT ".($format?" trim(SUM(ap.menge * s.menge))+0 ":" SUM(ap.menge * s.menge) ")." + FROM auftrag_position ap + ".($ohnebestellung?" LEFT JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id ":"")." + INNER JOIN auftrag a ON a.id=ap.auftrag + INNER JOIN stueckliste s ON ap.artikel = s.stuecklistevonartikel INNER JOIN artikel a2 ON a2.id = s.stuecklistevonartikel + WHERE s.artikel='$artikel' ".($ohnebestellung?" AND isnull(bp.id) ":"")." AND a.status='freigegeben' AND a2.produktion = 1 ".($auftrag?" AND ap.auftrag = '$auftrag' ":"")."" + .($von && $von != '0000-00-00'?" AND a.datum >= '$von' ":"") + .($bis && $bis != '0000-00-00'?" AND a.datum <= '$bis' ":"") + ); +} + +// @refactor Lager Modul +function ArtikelImLagerPlatz($artikel,$lager_platz, $format = false) +{ + if(!$lager_platz)return 0; + if($format)return $this->app->DB->Select("SELECT trim(SUM(menge))+0 FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz='$lager_platz'"); + $summe_im_lager = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz='$lager_platz'"); + return $summe_im_lager; +} + +// @refactor Lager Modul +public function ArtikelImLager($artikel, $format = false) +{ + if($format){ + return $this->app->DB->Select("SELECT trim(SUM(menge))+0 FROM lager_platz_inhalt WHERE artikel='$artikel'"); + } + $summe_im_lager = $this->app->DB->Select("SELECT SUM(menge) FROM lager_platz_inhalt WHERE artikel='$artikel'"); + return $summe_im_lager; +} + +// @refactor Lager Modul +public function ArtikelImLagerOhneSperrlager($artikel, $format = false) +{ + + if($format){ + return $this->app->DB->Select("SELECT trim(ifnull(SUM(lpi.menge),0))+0 FROM lager_platz_inhalt lpi + INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id AND (ifnull(lp.sperrlager,0) = 0 OR lp.allowproduction) + WHERE lpi.artikel='$artikel'"); + } + $summe_im_lager = $this->app->DB->Select("SELECT ifnull(SUM(lpi.menge),0) FROM lager_platz_inhalt lpi + INNER JOIN lager_platz lp ON lpi.lager_platz = lp.id AND ifnull(lp.sperrlager,0) = 0 + WHERE lpi.artikel='$artikel'"); + return $summe_im_lager; +} + +function VerbindlichkeitErweiterteBestellung($id) +{ + /** @var Verbindlichkeit $obj */ + $obj = $this->app->erp->LoadModul('verbindlichkeit'); + if(!empty($obj) && method_exists($obj, 'VerbindlichkeitErweiterteBestellung')) { + return $obj->VerbindlichkeitErweiterteBestellung($id); + } + return []; +} + +/** + * @deprecated + * @refactor Verbindlichkeit Modul + */ +function BestellungErweiterteVerbindlichkeiten($id) +{ + for($i=1;$i<=15;$i++) + { + $alleids[] = $this->app->DB->SelectArr("SELECT id, bestellung{$i}betrag as betrag FROM verbindlichkeit WHERE bestellung$i='$id'"); + } + + for($i=0;$iapp->erp->LoadModul('verbindlichkeit'); + if(!empty($obj) && method_exists($obj, 'BestellungErweiterteVerbindlichkeitenNeu')) { + return $obj->BestellungErweiterteVerbindlichkeitenNeu($id); + } + return []; +} + + +function get_emails ($str) +{ + $emails = array(); + $pattern="/([\s]*)([_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*([ ]+|)@([ ]+|)([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,}))([\s]*)/i"; + //preg_match_all("/\b\w+\@w+[\-\.\w+]+\b/", $str, $output); + preg_match_all($pattern, $str, $output); + foreach($output[0] as $email) array_push ($emails, trim(strtolower($email))); + if (count ($emails) >= 1) return $emails; + else return false; +} + + +// @refactor Mahnwesen Modul +function MahnwesenBody($id,$als,$_datum=null,$sprache='') +{ + if($id > 0) + { + $rechnungarr = $this->app->DB->SelectRow("SELECT r.*,DATE_FORMAT(datum,'%d.%m.%Y') as datum_de,DATE_FORMAT(mahnwesen_datum,'%d.%m.%Y') as mahnwesen_datum_de,r.mahnwesen_datum + FROM rechnung AS r WHERE r.id=$id LIMIT 1"); + } + if(empty($rechnungarr)) + { + return ''; + } + + $adresse = $rechnungarr['adresse']; + if($sprache==''){ + $sprache = $rechnungarr['sprache']; + } + if($sprache==''){ + $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1"); + } + // OfferNo, customerId, OfferDate + + $kundennummer = $rechnungarr['kundennummer']; + $projekt = $rechnungarr['projekt']; + $auftrag= $rechnungarr['auftrag']; + $buchhaltung= $rechnungarr['buchhaltung']; + $lieferschein = $rechnungarr['lieferschein']; + $lieferscheinid = $lieferschein; + if($lieferscheinid){ + $lieferschein = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); + }else{ + $lieferschein = ''; + } + $bestellbestaetigung = $rechnungarr['kundennummer']; + $datum = $rechnungarr['datum_de']; + $datum_sql = $rechnungarr['datum']; + $belegnr = $rechnungarr['belegnr']; + $doppel = $rechnungarr['doppel']; + $freitext = $rechnungarr['freitext']; + $ustid = $rechnungarr['ustid']; + $soll = $rechnungarr['soll']; + $ist = $rechnungarr['ist']; + $land = $rechnungarr['land']; + $mahnwesen_datum = $rechnungarr['mahnwesen_datum']; + $mahnwesen_datum_deutsch = $rechnungarr['mahnwesen_datum_de']; + $zahlungsweise = $rechnungarr['zahlungsweise']; + $zahlungsstatus = $rechnungarr['zahlungsstatus']; + $zahlungszieltage = $rechnungarr['zahlungszieltage']; + $zahlungszieltageskonto = $rechnungarr['zahlungszieltageskonto']; + $zahlungszielskonto = $rechnungarr['zahlungszielskonto']; + $waehrung = $rechnungarr['waehrung']; + + $zahlungdatum = $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD(datum, INTERVAL $zahlungszieltage DAY),'%d.%m.%Y') FROM rechnung WHERE id='$id' LIMIT 1"); + + if($_datum!=null) + { + $mahnwesen_datum = $this->app->String->Convert($_datum,'%1.%2.%3','%3-%2-%1'); + $mahnwesen_datum_deutsch = $_datum; + } + + $zahlungsweise = strtolower($zahlungsweise); + + if($als=='zahlungserinnerung') + { + $body = $this->GetGeschaeftsBriefText("MahnwesenZahlungserinnerung",$sprache,$projekt,"rechnung",$id); + $tage = $this->GetKonfiguration('mahnwesen_m1_tage'); + } + else if($als=='mahnung1') + { + $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung1",$sprache,$projekt,"rechnung",$id); + $mahngebuehr = $this->GetKonfiguration('mahnwesen_m1_gebuehr'); + $tage = $this->GetKonfiguration('mahnwesen_m2_tage'); + } + else if($als=='mahnung2') + { + $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung2",$sprache,$projekt,"rechnung",$id); + $tage = $this->GetKonfiguration('mahnwesen_m3_tage'); + $mahngebuehr = $this->GetKonfiguration('mahnwesen_m2_gebuehr'); + } + else if($als=='mahnung3') + { + $body = $this->GetGeschaeftsBriefText("MahnwesenMahnung3",$sprache,$projekt,"rechnung",$id); + $tage = $this->GetKonfiguration('mahnwesen_ik_tage'); + $mahngebuehr = $this->GetKonfiguration('mahnwesen_m3_gebuehr'); + } + else if($als=='inkasso') + { + $body = $this->GetGeschaeftsBriefText("MahnwesenInkasso",$sprache,$projekt,"rechnung",$id); + //$tage = $this->GetKonfiguration("mahnwesen_ik_tage"); + $tage = 3; //eigentlich vorbei + $mahngebuehr = $this->GetKonfiguration('mahnwesen_ik_gebuehr'); + } + else + { + $body = $this->app->erp->Beschriftung("dokument_anschreiben"); + } + + if($tage <=0) $tage = 0; + + $datummahnung= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$mahnwesen_datum', INTERVAL $tage DAY),'%d.%m.%Y')"); + $datumrechnungzahlungsziel= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datum_sql', INTERVAL $zahlungszieltage DAY),'%d.%m.%Y')"); + + $tage_ze = $zahlungszieltage + $this->GetKonfiguration('mahnwesen_m1_tage'); + $datumzahlungserinnerung= $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD('$datum_sql', INTERVAL $tage_ze DAY),'%d.%m.%Y')"); + + // checkstamp $this->CheckStamp("jhdskKUHsiusakiakuhsd"); // errechnet aus laufzeit und kundenid // wenn es nicht drinnen ist darf es nicht gehen + + if($mahngebuehr=='' || !is_numeric($mahngebuehr)) + $mahngebuehr = 0; + + //$offen= '11,23'; + $body = str_replace('{RECHNUNG}',$belegnr,$body); + $body = str_replace('{BELEGNR}',$belegnr,$body); + $body = str_replace('{DATUMRECHNUNG}',$datum,$body); + $body = str_replace('{TAGE}',$tage,$body); + $body = str_replace('{OFFEN}',$this->formatMoney($soll - $ist,$waehrung),$body); + $body = str_replace('{SOLL}',$this->formatMoney($soll,$waehrung),$body); + $body = str_replace('{SUMME}',$this->formatMoney($soll - $ist + $mahngebuehr,$waehrung),$body); + $body = str_replace('{IST}',$this->formatMoney($ist,$waehrung),$body); + $body = str_replace('{DATUM}',$datummahnung,$body); + $body = str_replace('{MAHNGEBUEHR}',$this->formatMoney($mahngebuehr,$waehrung),$body); + $body = str_replace('{OFFENMITMAHNGEBUEHR}',$this->formatMoney($mahngebuehr + $soll - $ist,$waehrung),$body); + $body = str_replace('{MAHNDATUM}',$mahnwesen_datum_deutsch,$body); + + + // Im Protokoll suchen Datum von Zahlungserinnerung, Mahnung 1, Mahnung 2, Mahnung 3 + + $mahnung1 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$id' + AND grund LIKE 'Mahnung1 versendet%' ORDER by Zeit DESC LIMIT 1"); + + $mahnung2 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$id' + AND grund LIKE 'Mahnung2 versendet%' ORDER by Zeit DESC LIMIT 1"); + + $mahnung3 = $this->app->DB->Select("SELECT DATE_FORMAT(zeit,'%d.%m.%Y') FROM rechnung_protokoll WHERE rechnung='$id' + AND grund LIKE 'Mahnung3 versendet%' ORDER by Zeit DESC LIMIT 1"); + + $body = str_replace('{DATUMMAHNUNG1}',$mahnung1,$body); + $body = str_replace('{DATUMMAHNUNG2}',$mahnung2,$body); + $body = str_replace('{DATUMMAHNUNG3}',$mahnung3,$body); + + $body = str_replace('{DATUMZAHLUNGSERINNERUNGFAELLIG}',$datumzahlungserinnerung,$body); + $body = str_replace('{DATUMZAHLUNGSERINNERUNG}',$datumzahlungserinnerung,$body); + $body = str_replace('{DATUMRECHNUNGZAHLUNGSZIEL}',$datumrechnungzahlungsziel,$body); + + $body = $this->ParseUserVars('rechnung',$id,$body); + + return $body; +} + +/**@deprecated */ +function AufragZuDTA($auftrag,$rechnung="1") +{ + $arr = $this->app->DB->Select("SELECT belegnr, bank_inhaber, bank_konto, bank_blz, gesamtsumme, adresse, name FROM auftrag WHERE id='$auftrag'"); + + + if($rechnung=="1") + { + $arr[0]['vz1'] = "RE ".$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE auftrag='{$arr[0]['belegnr']}' LIMIT 1"); + } else + $arr[0]['vz1'] = ""; + + $this->app->DB->Insert("INSERT INTO dta (id,adresse,datum,name,konto,blz,betrag,vz1,firma) + VALUES('','{$arr[0]['adresse']}',NOW(),'{$arr[0]['name']}','{$arr[0]['konto']}','{$arr[0]['blz']}','{$arr[0]['betrag']}','{$arr[0]['vz1']}','".$this->app->User->GetFirma()."')"); + +} + +//@refactor versanddiestleister Modul +function TrackingNummerAnpassen($projekt,$tracking) +{ + + if($this->Projektdaten($projekt,"tracking_substr_length") > 0) + $tracking = substr($tracking,$this->Projektdaten($projekt,"tracking_substr_start"),$this->Projektdaten($projekt,"tracking_substr_length")); + else + $tracking = substr($tracking,$this->Projektdaten($projekt,"tracking_substr_start")); + + //TODO anpassung, damit die Nummer an schluss entfernt wird + $kundennummerdpd = $this->app->DB->Select("SELECT dpdkundennr FROM projekt WHERE id='$projekt' LIMIT 1"); + + if($this->Projektdaten($projekt,"tracking_remove_kundennummer") =="1") + $tracking = str_replace($kundennummerdpd,"",$tracking); + + return $tracking; +} + +/**@deprecated */ +function PaketmarkeGo($parsetarget,$sid="",$zusatz="") +{ + $id = $this->app->Secure->GetGET("id"); + // entscheiden ob Intraship oder Easylog anhang Projekt einstellung + // wenn sid==versand dann steht die id in der vesandtabelle + if($sid=="versand") + { + $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); + } else { + // ansonsten ist es die id vom lieferschein + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); + } + + $this->Paketmarke($parsetarget,$sid,$zusatz,"Go"); +} + +/**@deprecated */ +function PaketmarkeUPSEmbedded($parsetarget,$sid="",$zusatz="") +{ + $id = $this->app->Secure->GetGET("id"); + // entscheiden ob Intraship oder Easylog anhang Projekt einstellung + // wenn sid==versand dann steht die id in der vesandtabelle + if($sid=="versand") + { + $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); + } else { + // ansonsten ist es die id vom lieferschein + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); + } + + //TODO pruefe ob i oder easylog +// $intraship_enabled = $this->app->DB->Select("SELECT intraship_enabled FROM projekt WHERE id='$projekt' LIMIT 1"); +// if($intraship_enabled=="1") +// $this->Paketmarke($parsetarget,$sid,$zusatz,"Intraship"); +// else + $this->Paketmarke($parsetarget,$sid,$zusatz,"UPS"); + +} + +/**@deprecated */ +function PaketmarkeDPDEmbedded($parsetarget,$sid="",$zusatz="") +{ + if($sid=="") + $sid= $this->app->Secure->GetGET("sid"); + + if($zusatz=="express") + $this->app->Tpl->Set('ZUSATZ',"Express"); + + if($zusatz=="export") + $this->app->Tpl->Set('ZUSATZ',"Export"); + + $id = $this->app->Secure->GetGET("id"); + $drucken = $this->app->Secure->GetPOST("drucken"); + $anders = $this->app->Secure->GetPOST("anders"); + $land = $this->app->Secure->GetGET("land"); + $tracking_again = $this->app->Secure->GetGET("tracking_again"); + + + $versandmit= $this->app->Secure->GetPOST("versandmit"); + $trackingsubmit= $this->app->Secure->GetPOST("trackingsubmit"); + $versandmitbutton = $this->app->Secure->GetPOST("versandmitbutton"); + $tracking= $this->app->Secure->GetPOST("tracking"); + $trackingsubmitcancel= $this->app->Secure->GetPOST("trackingsubmitcancel"); + + $versand = "dpd"; + + // mit trackingnummer + if($trackingsubmit!="" || $trackingsubmitcancel!="") + { + + if($sid=="versand") + { + // falche tracingnummer bei DPD da wir in der Funktion PaketmarkeDPDEmbedded sind + //if(strlen($tracking) < 14 || strlen($tracking) > 30) + if((strlen($tracking) < 5 || strlen($tracking) > 30) && $trackingsubmitcancel=="") + { + header("Location: index.php?module=versanderzeugen&action=frankieren&id=$id&land=$land&tracking_again=1"); + exit; + } + else + { + $tmplieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$tmplieferschein' LIMIT 1"); + $tracking = $this->TrackingNummerAnpassen($projekt,$tracking); + $this->app->DB->Update("UPDATE versand SET versandunternehmen='$versand', tracking='$tracking',versendet_am=NOW(), + versendet_am_zeitstempel=NOW(), abgeschlossen='1',logdatei=NOW() WHERE id='$id' LIMIT 1"); + + + $this->VersandAbschluss($id); + $this->RunHook('versanderzeugen_frankieren_hook1', 1, $id); + //versand mail an kunden + $this->Versandmail($id); + + $weiterespaket=$this->app->Secure->GetPOST("weiterespaket"); + $lieferscheinkopie=$this->app->Secure->GetPOST("lieferscheinkopie"); + + if($weiterespaket=="1") + { + if($lieferscheinkopie=="1") $lieferscheinkopie=0; else $lieferscheinkopie=1; + //$this->app->erp->LogFile("Lieferscheinkopie $lieferscheinkopie"); + $all = $this->app->DB->SelectArr("SELECT * FROM versand WHERE id='$id' LIMIT 1"); + $this->app->DB->Insert("INSERT INTO versand (id,adresse,rechnung,lieferschein,versandart,projekt,bearbeiter,versender,versandunternehmen,firma, + keinetrackingmail,gelesen,paketmarkegedruckt,papieregedruckt,weitererlieferschein) + VALUES ('','{$all[0]['adresse']}','{$all[0]['rechnung']}','{$all[0]['lieferschein']}','{$all[0]['versandart']}','{$all[0]['projekt']}', + '{$all[0]['bearbeiter']}','{$all[0]['versender']}','{$all[0]['versandunternehmen']}', + '{$all[0]['firma']}','{$all[0]['keinetrackingmail']}','{$all[0]['gelesen']}',0,$lieferscheinkopie,1)"); + + $newid = $this->app->DB->GetInsertID(); + header("Location: index.php?module=versanderzeugen&action=einzel&id=$newid"); + } else { + + $obj = $this->app->erp->LoadModul('versanderzeugen'); + if(!empty($obj) && method_exists($obj,'CheckKommissionierungByLieferschein')) + { + $obj->CheckKommissionierungByLieferschein($this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id'")); + } + + header("Location: index.php?module=versanderzeugen&action=offene"); + } + } + exit; + } else { + //direkt aus dem Lieferschein + if($id > 0) + { + + $adresse = $this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id='$id' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); + $kg = $this->app->Secure->GetPOST("kg1"); + if($kg=="") { + $kg = $this->VersandartMindestgewicht($id); + } + + $tracking = $this->TrackingNummerAnpassen($projekt,$tracking); + + $this->app->DB->Update("INSERT INTO versand (id,versandunternehmen, tracking, + versendet_am,abgeschlossen,lieferschein, + freigegeben,firma,adresse,projekt,gewicht,paketmarkegedruckt,anzahlpakete) + VALUES ('','$versand','$tracking',NOW(),1,'$id',1,'".$this->app->User->GetFirma()."','$adresse','$projekt','$kg','1','1') "); + $auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id = '$id'"); + $shop = $this->app->DB->Select("SELECT shop FROM auftrag WHERE id = '$auftrag' LIMIT 1"); + $auftragabgleich=$this->app->DB->Select("SELECT auftragabgleich FROM shopexport WHERE id='$shop' LIMIT 1"); + + if($shop > 0 && $auftragabgleich=="1") + { + //$this->LogFile("Tracking gescannt"); + $this->app->remote->RemoteUpdateAuftrag($shop,$auftrag); + } + + header("Location: index.php?module=lieferschein&action=paketmarke&id=$id"); + exit; + } + } + } + + if($versandmitbutton!="") + { + + if($sid=="versand") + { + + $this->app->DB->Update("UPDATE versand SET versandunternehmen='$versandmit', + versendet_am=NOW(),versendet_am_zeitstempel=NOW(),abgeschlossen='1' WHERE id='$id' LIMIT 1"); + + $this->VersandAbschluss($id); + //versand mail an kunden + $this->Versandmail($id); + + $obj = $this->app->erp->LoadModul('versanderzeugen'); + if(!empty($obj) && method_exists($obj,'CheckKommissionierungByLieferschein')) + { + $obj->CheckKommissionierungByLieferschein($this->app->DB->Select("SELECT lieferschein FROM versand WHERE id=$id")); + } + + header("Location: index.php?module=versanderzeugen&action=offene"); + exit; + } + } + + if($sid=="versand") + { + // wenn paketmarke bereits gedruckt nur tracking scannen + $paketmarkegedruckt = $this->app->DB->Select("SELECT paketmarkegedruckt FROM versand WHERE id='$id' LIMIT 1"); + + if($paketmarkegedruckt>=1) + $tracking_again=1; + } + + + if($anders!="") + { + //header("Location: index.php?module=paketmarke&action=tracking"); + $this->app->Tpl->Add('TAB1', + "

+ +
+

+

Methode:



+
Versandart:  
+

+
+

+ "); + + + } + else if($drucken!="" || $tracking_again=="1") + { + if($tracking_again!="1") + { + $nachnahme = $this->app->Secure->GetPOST("nachnahme"); + $betrag= $this->app->Secure->GetPOST("betrag"); + $versichert = $this->app->Secure->GetPOST("versichert"); + $extraversichert = $this->app->Secure->GetPOST("extraversichert"); + $name= $this->app->Secure->GetPOST("name"); + $name2= $this->app->Secure->GetPOST("name2"); + $name3= $this->app->Secure->GetPOST("name3"); + $land= $this->app->Secure->GetPOST("land"); + $plz= $this->app->Secure->GetPOST("plz"); + $ort= $this->app->Secure->GetPOST("ort"); + $strasse = $this->app->Secure->GetPOST("strasse"); + $hausnummer= $this->app->Secure->GetPOST("hausnummer"); + + $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); + $rechnungsnummer = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1"); + $rechnungsnummer = "RE ".$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$rechnungsnummer' LIMIT 1"); + $kg = $this->app->Secure->GetPOST("kg1"); + $anzahl = $this->app->Secure->GetPOST("anzahl"); + if($kg=="") $kg=$this->VersandartMindestgewicht($lieferschein); + // speichern + $this->app->DB->Update("UPDATE versand SET gewicht='$kg',anzahlpakete='$anzahl',paketmarkegedruckt=1 WHERE id='$id' LIMIT 1"); + + if($nachnahme=="" && $versichert=="" && $extraversichert=="") + { + if($zusatz=="express") + $this->DPDPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,1,101,"express"); + else if($zusatz=="export") + $this->DPDPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,1,101,"export"); + else + $this->DPDPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); + + } else if ($nachnahme=="1" && $versichert=="" && $extraversichert=="") + { + $this->DPDPaketmarkeNachnahme($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer); + } + } + //insert into versand oder update + + + //insert into versand oder update + if($anzahl > 1) + { + if($zusatz=="express" || $zusatz=="export") { + $produkt_zusatz_nr=101; + $produkt_zusatz_id=1; + } + else { + $produkt_zusatz_nr=""; + $produkt_zusatz_id=""; + } + for($anzahli=2;$anzahli<=$anzahl; $anzahli++) + { + + $kg = $this->app->Secure->GetPOST("kg".$anzahli); + if($kg <=0) $kg = 2; + $this->DPDPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$produkt_zusatz_id,$produkt_zusatz_nr,$zusatz); //TODO 2kg + $this->app->DB->Insert("INSERT INTO versandpakete (id,versand,gewicht,nr,versender) VALUES ('','$id','$kg','$anzahli','".$this->app->User->GetName()."')"); + } + } + + if($tracking_again=="1") + { + $error_message_tracking = "
Fehlerhafte Trackingnummer!
"; + } + + if($sid=="versand") + { + $paketmarkedrucken = "";//""; + } + else $paketmarkedrucken=""; + + //header("Location: index.php?module=paketmarke&action=tracking"); + $this->app->Tpl->Add('TAB1', + "
$error_message_tracking
+ +
+

+

Tracking-Nummer Scannen:



+
Tracking-Nummer:   +

+
+ + + +
 Weitere Paketmarke für diese Lieferung erstellen.
 Zusätzlichen Lieferschein drucken.
+
+
+
+
+ $paketmarkedrucken + +
+
+
+

+ "); + + } else { + + if($sid=="rechnung") + $rechnung = $id; + else $rechnung =""; + + if($sid=="versand") + { + $tid = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); + $rechnung = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1"); + $sid = "lieferschein"; + } else { + $tid = $id; + } + + + if($sid=="rechnung" || $sid=="lieferschein" || $sid=="adresse") + { + $name = $this->app->DB->Select("SELECT name FROM $sid WHERE id='$tid' LIMIT 1"); + $name2 = $this->app->DB->Select("SELECT adresszusatz FROM $sid WHERE id='$tid' LIMIT 1"); + if($name2=="") + { + $name2 = $this->app->DB->Select("SELECT abteilung FROM $sid WHERE id='$tid' LIMIT 1"); + $abt=1; + } + $name3 = $this->app->DB->Select("SELECT ansprechpartner FROM $sid WHERE id='$tid' LIMIT 1"); + if($name3=="" && $abt!=1) + $name3 = $this->app->DB->Select("SELECT abteilung FROM $sid WHERE id='$tid' LIMIT 1"); + + //unterabteilung versuchen einzublenden + if($name2=="") { + $name2 = trim($this->app->DB->Select("SELECT unterabteilung FROM $sid WHERE id='$tid' LIMIT 1")); + } else if ($name3=="") { + $name3 = trim($this->app->DB->Select("SELECT unterabteilung FROM $sid WHERE id='$tid' LIMIT 1")); + } + + + + $ort = $this->app->DB->Select("SELECT ort FROM $sid WHERE id='$tid' LIMIT 1"); + $plz = $this->app->DB->Select("SELECT plz FROM $sid WHERE id='$tid' LIMIT 1"); + $land = $this->app->DB->Select("SELECT land FROM $sid WHERE id='$tid' LIMIT 1"); + $strasse = $this->app->DB->Select("SELECT strasse FROM $sid WHERE id='$tid' LIMIT 1"); + $hausnummer = $this->ExtractStreetnumber($strasse); + + $strasse = str_replace($hausnummer,"",$strasse); + $strasse = str_replace('.',"",$strasse); + + if($strasse=="") + { + $strasse = $hausnummer; + $hausnummer = ""; + } + + } + + // wenn rechnung im spiel entweder durch versand oder direkt rechnung + if($rechnung >0) + { + + $zahlungsweise = $this->app->DB->Select("SELECT zahlungsweise FROM rechnung WHERE id='$rechnung' LIMIT 1"); + $soll = $this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$rechnung' LIMIT 1"); + $this->app->Tpl->Set('BETRAG',$soll); + + if($zahlungsweise=="nachnahme") + $this->app->Tpl->Set('NACHNAHME',"checked"); + + if($soll >= 500 && $soll <= 2500) + $this->app->Tpl->Set('VERSICHERT',"checked"); + + if($soll > 2500) + $this->app->Tpl->Set('EXTRAVERSICHERT',"checked"); + + } + $this->app->Tpl->Set('NAME',$name); + $this->app->Tpl->Set('NAME2',$name2); + $this->app->Tpl->Set('NAME3',$name3); + $this->app->Tpl->Set('ORT',$ort); + $this->app->Tpl->Set('PLZ',$plz); + $this->app->Tpl->Set('STRASSE',$strasse); + $this->app->Tpl->Set('HAUSNUMMER',$hausnummer); + $this->app->Tpl->Set('LAND',$land); + + $abholdatum_user = $this->app->User->GetParameter("paketmarke_abholdatum"); + $abholdatum_user = date('Y-m-d', strtotime($abholdatum_user)); + + $check_date = $this->app->DB->Select("SELECT date_format(now(),'%Y-%m-%d')"); + if($abholdatum_user >= $check_date) + $this->app->Tpl->Set('ABHOLDATUM',date('d.m.Y', strtotime($abholdatum_user))); + else + $this->app->Tpl->Set('ABHOLDATUM',date('d.m.Y', strtotime($check_date))); + +// $this->app->Tpl->Set('ABHOLDATUM',$this->app->DB->Select("SELECT date_format(now(),'%d.%m.%Y')")); + + + $anzahl = $this->app->Secure->GetGET("anzahl"); + + if($anzahl <= 0) $anzahl=1; + + $this->app->Tpl->Set('ANZAHL',$anzahl); + + $standardkg=$this->VersandartMindestgewicht($lieferschein); + $this->PaketmarkeGewichtForm($anzahl, $standardkg, $this->VersandartMindestgewicht()); + /* + if($anzahl==1) + { + $i=1; + $this->app->Tpl->Add('GEWICHT','Gewicht Paket: in kg'); + } + else { + for($i=1;$i<=$anzahl;$i++) + $this->app->Tpl->Add('GEWICHT','Gewicht Paket '.$i.': in kg'); + }*/ + + + if($tracking_again!="1") + $this->app->Tpl->Parse($parsetarget,"paketmarke_dpd.tpl"); + } +} + +//@refactor versanddiestleister Modul +function PaketmarkeGewichtForm($anzahl, $standardkg, $mindestgewicht = 0) +{ + $mitwaage = false; + $mindestgewicht = (float)$mindestgewicht; + if($this->app->erp->Firmendaten('paketmarke_mit_waage')) + { + $mitwaage = $this->app->DB->Select("SELECT seriennummer FROM adapterbox WHERE verwendenals = 'waage' AND seriennummer <> '' LIMIT 1"); + } + if($anzahl==1) + { + $i=1; + $this->app->Tpl->Add('GEWICHT','Gewicht: in kg'); + if($mitwaage) + { + $this->app->Tpl->Add('GEWICHT',' '); + $this->app->Tpl->Set('SERIENNUMMER', $mitwaage); + $this->app->Tpl->Set('MINDESTGEWICHT', $mindestgewicht); + $this->app->Tpl->Parse('GEWICHT', 'paketmarke_waage.tpl'); + } + $this->app->Tpl->Add('GEWICHT',''); + + } + else { + for($i=1;$i<=$anzahl;$i++) + { + $this->app->Tpl->Add('GEWICHT','Gewicht: in kg'); + if($mitwaage) + { + $this->app->Tpl->Add('GEWICHT',' '); + $this->app->Tpl->Set('SERIENNUMMER', $mitwaage); + $this->app->Tpl->Set('MINDESTGEWICHT', $mindestgewicht); + if($i == 1)$this->app->Tpl->Parse('GEWICHT', 'paketmarke_waage.tpl'); + } + $this->app->Tpl->Add('GEWICHT',''); + } + } +} + +/**@deprecated */ +function PaketmarkeDHLEmbedded($parsetarget,$sid="",$zusatz="") +{ + $id = $this->app->Secure->GetGET("id"); + // entscheiden ob Intraship oder Easylog anhang Projekt einstellung + // wenn sid==versand dann steht die id in der vesandtabelle + if($sid=="versand") + { + $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); + } else { + // ansonsten ist es die id vom lieferschein + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); + } + + //TODO pruefe ob i oder easylog + $intraship_enabled = $this->app->DB->Select("SELECT intraship_enabled FROM projekt WHERE id='$projekt' LIMIT 1"); + if($intraship_enabled=="1") + $this->Paketmarke($parsetarget,$sid,$zusatz,"Intraship"); + else + $this->Paketmarke($parsetarget,$sid,$zusatz,"DHL"); + +} +//@refactor versanddiestleister Modul +function VersandartMindestgewicht($id=0) +{ + $gewicht = $this->LieferscheinNettoGewicht($id); + $versandart =""; $projekt=0; $intraship_weightinkg=0; + $gewicht /= $this->GewichtzuKgFaktor(); + +if($id > 0) +{ + $versandart = $this->app->DB->Select("SELECT versandart FROM lieferschein WHERE id='$id' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); + $intraship_weightinkg = $this->app->DB->Select("SELECT intraship_weightinkg FROM projekt WHERE id='$projekt' LIMIT 1"); + $versandart = strtolower($versandart); + + $modul = $this->app->DB->SelectArr("SELECT id, modul FROM `versandarten` WHERE aktiv = 1 AND ausprojekt = 0 AND modul <> '' AND type = '".$this->app->DB->real_escape_string($versandart)."' AND geloescht = 0 AND (projekt = 0 OR projekt = '$projekt') ORDER by projekt = '$projekt' DESC LIMIT 1"); + if($modul && @is_file(dirname(__FILE__).'/versandarten/'.$modul[0]['modul'].'.php')) + { + $obj = $this->LoadVersandModul($modul[0]['modul'], $modul[0]['id']); + if($obj){ + if(method_exists($obj, 'VersandartMindestgewicht')) + $mindestgewicht = $obj->VersandartMindestgewicht(); + return $mindestgewicht > $gewicht ? $mindestgewicht : $gewicht; + } + } +} + + if(($versandart=="dhl" || $versandart=="versandunternehmen") && $intraship_weightinkg > 0 && $gewicht <=0) return $intraship_weightinkg; + else if ($gewicht > 0) return $gewicht; + else return 2; +} + +//@refactor ApplicationCore +function LoadVersandModul($modul, $id) +{ + if(empty($modul) || + strpos($modul,'..') !== false || + !@is_file(__DIR__.'/versandarten/'.$modul.'.php') + ) + { + return; + } + $class_name = 'Versandart_'.$modul; + $class_name_custom = 'Versandart_'.$modul.'Custom'; + if(!class_exists($class_name)) + { + if(@is_file(__DIR__.'/versandarten/'.$modul.'_custom.php')) + { + include_once(__DIR__.'/versandarten/'.$modul.'_custom.php'); + }else{ + include_once(__DIR__.'/versandarten/'.$modul.'.php'); + } + } + if(class_exists($class_name_custom)) + { + return new $class_name_custom($this->app, $id); + }elseif(class_exists($class_name)) + { + return new $class_name($this->app, $id); + } +} + +//@refactor versanddiestleister Modul +function Paketmarke($parsetarget,$sid="",$zusatz="",$typ="DHL") +{ + if($sid=="") + $sid= $this->app->Secure->GetGET("sid"); + + if($zusatz=="express") + $this->app->Tpl->Set('ZUSATZ',"Express"); + + if($zusatz=="export") + $this->app->Tpl->Set('ZUSATZ',"Export"); + + $id = $this->app->Secure->GetGET("id"); + $drucken = $this->app->Secure->GetPOST("drucken"); + $anders = $this->app->Secure->GetPOST("anders"); + $land = $this->app->Secure->GetGET("land"); + $tracking_again = $this->app->Secure->GetGET("tracking_again"); + + $tablesid=$sid; + if($drucken && !$tracking_again) { + $this->app->User->SetParameter('versand_lasttracking', ''); + $this->app->User->SetParameter('versand_lasttracking_versand', ''); + $this->app->User->SetParameter('versand_lasttracking_lieferschein', ''); + } + + $versandmit= $this->app->Secure->GetPOST("versandmit"); + $trackingsubmit= $this->app->Secure->GetPOST("trackingsubmit"); + $versandmitbutton = $this->app->Secure->GetPOST("versandmitbutton"); + $tracking= trim($this->app->Secure->GetPOST("tracking")); + $trackingBefore = $tracking; + $trackingLink = $this->app->Secure->GetPOST("tracking_link"); + $trackingsubmitcancel= $this->app->Secure->GetPOST("trackingsubmitcancel"); + $retourenlabel = $this->app->Secure->GetPOST("retourenlabel"); + if($typ=="DHL" || $typ=="dhl") + $versand = "dhl"; + else if($typ=="Intraship") + $versand = "intraship"; + else $versand = $typ; + + //pruefe ob dpd im namen vorkommt + $tracking = str_replace(' ','',$tracking); + $tracking = str_replace('%','',$tracking); + + if($sid == "versand") + { + $this->app->Tpl->Set("TRACKINGMANUELL",'  '); + $projekt = $this->app->DB->Select("SELECT projekt FROM versand WHERE id='$id' LIMIT 1"); + }elseif($sid == "retoure") + { + $projekt = $this->app->DB->Select("SELECT projekt FROM retoure WHERE id='$id' LIMIT 1"); + }else{ + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); + } + $intraship_weightinkg = $this->app->DB->Select("SELECT intraship_weightinkg FROM projekt WHERE id='$projekt' LIMIT 1"); + + + if($trackingsubmit!="" || $trackingsubmitcancel!="") + { + //TrackingReplace + $versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul,bezeichnung, einstellungen_json FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND type = '".$this->app->DB->real_escape_string($typ)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); + + if($versandartenmodul && @is_file(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) + { + $obj = $this->LoadVersandModul($versandartenmodul[0]['modul'], $versandartenmodul[0]['id']); + if(!empty($obj) && method_exists($obj, 'TrackingReplace')) + { + $tracking = $obj->TrackingReplace($tracking); + } + } + + if($sid=="versand") + { + // falche tracingnummer bei DHL da wir in der Funktion PaketmarkeDHLEmbedded sind + if((strlen($tracking) < 12 || strlen($tracking) > 21) && $trackingsubmitcancel=="" && ($typ=="DHL" || $typ=="Intraship")) + { + header("Location: index.php?module=versanderzeugen&action=frankieren&id=$id&land=$land&tracking_again=1"); + exit; + } + else + { +/* $versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul,bezeichnung FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND type = '".$this->app->DB->real_escape_string($typ)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); + if($versandartenmodul && @is_file(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) + { + $obj = $this->LoadVersandModul($versandartenmodul[0]['modul'], $versandartenmodul[0]['id']); + if(!empty($obj) && method_exists($obj, 'TrackingReplace')) + { + $tracking = $obj->TrackingReplace($tracking); + } + } +*/ + + $trackingUser = !empty($this->app->User) && method_exists($this->app->User,'GetParameter')? + $this->app->User->GetParameter('versand_lasttracking'):''; + + if(!empty($trackingUser) && in_array($trackingUser,[$trackingBefore,$tracking])) { + $this->app->User->SetParameter('versand_lasttracking',''); + $this->app->User->SetParameter('versand_lasttracking_link',''); + $this->app->User->SetParameter('versand_lasttracking_versand', ''); + $this->app->User->SetParameter('versand_lasttracking_lieferschein', ''); + } + + $this->app->DB->Update("UPDATE versand SET versandunternehmen='$versand', tracking='$tracking', + versendet_am=NOW(),versendet_am_zeitstempel=NOW(), abgeschlossen='1',logdatei=NOW() WHERE id='$id' LIMIT 1"); + if($lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id = '$id' LIMIT 1")) { + $this->app->erp->LieferscheinProtokoll($lieferschein,'Verarbeitung im Versandzentrum'); + } + $rechnung = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id = '$id' LIMIT 1"); + if($lieferschein && ($auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id = '$lieferschein'"))) { + $this->app->erp->AuftragProtokoll($auftrag,'Verarbeitung im Versandzentrum'); + + if(empty($rechnung)) { + $rechnung = $this->app->DB->Select( + sprintf( + "SELECT id FROM rechnung WHERE auftragid = %d AND status <> 'storniert' AND belegnr <> '' LIMIT 1", + $auftrag + ) + ); + if($rechnung) { + $this->app->DB->Update( + sprintf( + 'UPDATE versand SET rechnung = %d WHERE id = %d AND rechnung = 0', + $rechnung, $id + ) + ); + } + } + } + + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id = '$lieferschein' LIMIT 1"); + if($lieferschein) { + + $this->PDFArchivieren('lieferschein', $lieferschein, true); + } + $proformaPrinted = false; + $druckennachtracking = $this->app->erp->Projektdaten($projekt,'druckennachtracking'); + if($druckennachtracking + && !($proformarechnung = $this->app->DB->Select( + sprintf( + 'SELECT id FROM proformarechnung WHERE lieferschein = %d LIMIT 1', + $lieferschein + ) + ) + ) + ) { + /** @var Versanderzeugen $versandObj */ + $versandObj = $this->LoadModul('versanderzeugen'); + if($versandObj !== null && method_exists($versandObj, 'checkPrintCreateProformaInvoice')) { + $druckercode = $this->app->DB->Select("SELECT druckerlogistikstufe2 FROM projekt WHERE id='$projekt' LIMIT 1"); + + if($druckercode <=0) { + $druckercode = $this->app->erp->Firmendaten('standardversanddrucker'); // standard = 3 // 2 buchhaltung // 1 empfang + } + $userversanddrucker = $this->app->DB->Select("SELECT standardversanddrucker FROM user WHERE id='".$this->app->User->GetID()."'"); + if($userversanddrucker>0) { + $druckercode = $userversanddrucker; + } + $deliveryArr = $this->app->DB->SelectRow( + sprintf('SELECT land FROM lieferschein WHERE id = %d', $lieferschein) + ); + $country = $deliveryArr['land']; + $versandObj->checkPrintCreateProformaInvoice($lieferschein,$country,$projekt,$druckercode,true); + $proformaPrinted = $druckercode > 0; + } + } + if($rechnung) { + $this->PDFArchivieren('rechnung', $rechnung, true); + } + elseif($auftrag && $druckennachtracking + && $this->app->DB->Select( + sprintf( + "SELECT id FROM auftrag WHERE id = %d AND art <> 'lieferung'", + $auftrag + ) + ) + ) { + $rechnung = $this->WeiterfuehrenAuftragZuRechnung($auftrag); + $this->BelegFreigabe('rechnung', $rechnung); + $this->app->DB->Update( + sprintf( + 'UPDATE versand SET rechnung = %d WHERE id = %d LIMIT 1', + $rechnung, $id + ) + ); + $this->app->DB->Update( + sprintf( + "UPDATE rechnung SET schreibschutz = 1, status = 'versendet' WHERE id = %d", + $rechnung + ) + ); + $this->PDFArchivieren('rechnung', $rechnung, true); + } + + if($rechnung > 0 && $druckennachtracking + && $this->app->DB->Select("SELECT count(id) FROM versand WHERE lieferschein = '$lieferschein'") <= 1) { + $druckercode = $this->app->DB->Select("SELECT druckerlogistikstufe2 FROM projekt WHERE id='$projekt' LIMIT 1"); + + if($druckercode <=0) + $druckercode = $this->app->erp->Firmendaten("standardversanddrucker"); // standard = 3 // 2 buchhaltung // 1 empfang + + $userversanddrucker = $this->app->DB->Select("SELECT standardversanddrucker FROM user WHERE id='".$this->app->User->GetID()."'"); + if($userversanddrucker>0) + $druckercode = $userversanddrucker; + + $this->app->erp->BriefpapierHintergrundDisable($druckercode); + + $addressId = $this->app->DB->Select("SELECT `adresse` FROM `rechnung` WHERE `id` = '{$rechnung}' LIMIT 1"); + $printInvoice = $this->app->DB->Select("SELECT `rechnung_papier` FROM `adresse` WHERE `id` = '{$addressId}' LIMIT 1"); + $amountPrintedInvoices = $this->app->DB->Select("SELECT `rechnung_anzahlpapier` FROM `adresse` WHERE `id` = '{$addressId}' LIMIT 1"); + if($printInvoice === '1' && $amountPrintedInvoices > 0){ + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projekt); + }else{ + $Brief = new RechnungPDF($this->app,$projekt); + } + $Brief->GetRechnung($rechnung); + $tmpfile = $Brief->displayTMP(); + + for($i = 1; $i <= $amountPrintedInvoices; $i++) { + $this->app->printer->Drucken($druckercode,$tmpfile); + } + } else { + $autodruckrechnungmenge = $this->app->erp->Projektdaten($projekt,"autodruckrechnungmenge"); + $autodruckrechnung= $this->app->erp->Projektdaten($projekt,"autodruckrechnung"); + + if($autodruckrechnungmenge < 0)$autodruckrechnungmenge = 1; + + if($autodruckrechnung > 0) + { + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projekt); + }else{ + $Brief = new RechnungPDF($this->app,$projekt); + } + $Brief->GetRechnung($rechnung); + $tmpfile = $Brief->displayTMP(); + + for($i = 1; $i <= $autodruckrechnungmenge; $i++) { + $this->app->printer->Drucken($druckercode,$tmpfile); + } + } + } + + + // Print additional invoices for export + $exportdruckrechnung = $this->app->erp->Projektdaten($projekt,"exportdruckrechnung"); + if($exportdruckrechnung) + { + $exportland = $this->app->DB->Select("SELECT land FROM rechnung WHERE id = '$rechnung' LIMIT 1"); + $exportdruckrechnung = $this->app->erp->Export($exportland); + if($exportdruckrechnung) + { + $mengedruck = $this->app->erp->Projektdaten($projekt,"exportdruckrechnungmenge"); + for($mengedruck;$mengedruck > 0;$mengedruck--) + { + $this->app->printer->Drucken($druckercode,$tmpfile); + } + } + } + + unlink($tmpfile); + if($this->app->erp->Projektdaten($projekt,"automailrechnung")=="1") + { + // aber nur das erste mal also wenn es einen eintrag in der versand tabelle gibt + $rechnungbereitsversendet = $this->app->DB->Select("SELECT versendet FROM rechnung WHERE id = '$rechnung' LIMIT 1"); + if($rechnungbereitsversendet!="1") + { + $this->app->erp->Rechnungsmail($rechnung); + } + } + $this->BriefpapierHintergrundEnable(); + } + + if($druckennachtracking && $lieferschein && $this->Export($land) + && $this->Projektdaten($projekt, 'proformainvoice_amount') && $proformaRechnungId = $this->app->DB->Select( + sprintf( + "SELECT id FROM proformarechnung WHERE lieferschein = %d AND status <> 'storniert' LIMIT 1", + $lieferschein + )) + ) { + /** @var Versanderzeugen $objProforma */ + $objVersand = $this->LoadModul('versanderzeugen'); + if($objVersand && method_exists($objVersand,'checkPrintCreateProformaInvoice')){ + if(empty($druckercode)) { + $druckercode = $this->app->DB->Select("SELECT druckerlogistikstufe2 FROM projekt WHERE id='$projekt' LIMIT 1"); + + if($druckercode <= 0) { + $druckercode = $this->app->erp->Firmendaten('standardversanddrucker'); // standard = 3 // 2 buchhaltung // 1 empfang + } + $userversanddrucker = $this->app->DB->Select("SELECT standardversanddrucker FROM user WHERE id='" . $this->app->User->GetID() . "'"); + if($userversanddrucker > 0) { + $druckercode = $userversanddrucker; + } + } + $objVersand->checkPrintCreateProformaInvoice($lieferschein, $land, $projekt, $druckercode, empty($proformaPrinted)); + } + } + + if(!$this->app->erp->Firmendaten('versandmail_zwischenspeichern') || !$this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = 'versandmailsundrueckmeldung' AND aktiv = 1")) + { + $this->VersandAbschluss($id); + $this->RunHook('versanderzeugen_frankieren_hook1', 1, $id); + //versand mail an kunden + $this->Versandmail($id); + }else{ + $this->app->DB->Update("UPDATE versand SET cronjob = 1 WHERE id = '$id' LIMIT 1"); + } + $weiterespaket=$this->app->Secure->GetPOST("weiterespaket"); + $lieferscheinkopie=$this->app->Secure->GetPOST("lieferscheinkopie"); + if($weiterespaket=="1") + { + if($lieferscheinkopie=="1") $lieferscheinkopie=0; else $lieferscheinkopie=1; + //$this->app->erp->LogFile("Lieferscheinkopie $lieferscheinkopie"); + $all = $this->app->DB->SelectArr("SELECT * FROM versand WHERE id='$id' LIMIT 1"); + $this->app->DB->Insert("INSERT INTO versand (id,adresse,rechnung,lieferschein,versandart,projekt,bearbeiter,versender,versandunternehmen,firma, + keinetrackingmail,gelesen,paketmarkegedruckt,papieregedruckt,weitererlieferschein) + VALUES ('','{$all[0]['adresse']}','{$all[0]['rechnung']}','{$all[0]['lieferschein']}','{$all[0]['versandart']}','{$all[0]['projekt']}', + '{$all[0]['bearbeiter']}','{$all[0]['versender']}','{$all[0]['versandunternehmen']}', + '{$all[0]['firma']}','{$all[0]['keinetrackingmail']}','{$all[0]['gelesen']}',0,$lieferscheinkopie,1)"); + + $newid = $this->app->DB->GetInsertID(); + + $obj = $this->app->erp->LoadModul('versanderzeugen'); + if(!empty($obj) && method_exists($obj,'CheckKommissionierungByLieferschein')) + { + $obj->CheckKommissionierungByLieferschein($all[0]['lieferschein']); + } + + header("Location: index.php?module=versanderzeugen&action=einzel&weiterespaket=1&id=$newid"); + } else { + $this->RunHook('paketmarke_abschluss', 1, $lieferschein); + + $obj = $this->app->erp->LoadModul('versanderzeugen'); + if(!empty($obj) && method_exists($obj,'CheckKommissionierungByLieferschein')) + { + $obj->CheckKommissionierungByLieferschein($lieferschein); + } + $url = 'index.php?module=versanderzeugen&action=offene'; + $this->RunHook('paketmarke_abschluss_url', 2, $lieferschein, $url); + header('Location: '.$url); + } + } + exit; + } elseif($sid == 'retoure') { + if($id > 0) + { + $adresse = $this->app->DB->Select("SELECT adresse FROM retoure WHERE id='$id' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM retoure WHERE id='$id' LIMIT 1"); + $kg = $this->app->Secure->GetPOST("kg1"); + if($kg=="") { + $kg = $this->VersandartMindestgewicht($id); + } + + $this->app->DB->Insert("INSERT INTO versand (id,versandunternehmen, tracking, + versendet_am,abgeschlossen,retoure, + freigegeben,firma,adresse,projekt,gewicht,paketmarkegedruckt,anzahlpakete) + VALUES ('','$versand','$tracking',NOW(),1,'$id',1,'".$this->app->User->GetFirma()."','$adresse','$projekt','$kg','1','1') "); + + $versandid = $this->app->DB->GetInsertID(); + if($this->app->DB->Select("SELECT automailversandbestaetigung FROM projekt WHERE id = '$projekt' LIMIT 1"))$this->Versandmail($versandid); + $this->RunHook('versanderzeugen_frankieren_hook1', 1, $versandid); + $lieferschein = $this->app->DB->Select("SELECT lieferscheinid FROM retoure WHERE id = '$id' LIMIT 1"); + $auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id = '$lieferschein'"); + $shop = $this->app->DB->Select("SELECT shop FROM auftrag WHERE id = '$auftrag' LIMIT 1"); + $auftragabgleich=$this->app->DB->Select("SELECT auftragabgleich FROM shopexport WHERE id='$shop' LIMIT 1"); + $this->app->erp->RetoureProtokoll($id,'Verarbeitung im Versandzentrum'); + if($auftrag)$this->app->erp->AuftragProtokoll($auftrag,'Verarbeitung im Versandzentrum'); + if($shop > 0 && $auftragabgleich=="1") + { + //$this->LogFile("Tracking gescannt"); + $this->app->remote->RemoteUpdateAuftrag($shop,$auftrag); + } + header("Location: index.php?module=retoure&action=paketmarke&id=$id"); + exit; + } + } else { + //direkt aus dem Lieferschein + if($id > 0) + { + $adresse = $this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id='$id' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$id' LIMIT 1"); + $kg = $this->app->Secure->GetPOST("kg1"); + if($kg=="") { + $kg = $this->VersandartMindestgewicht($id); + } +/* + //Brauchen wir nicht + $versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul,bezeichnung FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND type = '".$this->app->DB->real_escape_string($versand)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); + if($versandartenmodul && @is_file(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) + { + $class_name = 'Versandart_'.$versandartenmodul[0]['modul']; + if(!class_exists($class_name))include_once(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php'); + if(class_exists($class_name)) + { + $obj = new $class_name($this->app, $versandartenmodul[0]['id']); + if(method_exists($obj, 'TrackingReplace')){ + $tracking = $obj->TrackingReplace($tracking); + } + } + } +*/ + + $trackingUser = !empty($this->app->User) && method_exists($this->app->User,'GetParameter')? + $this->app->User->GetParameter('versand_lasttracking'):''; + + if(!empty($trackingUser) && in_array($trackingUser,[$trackingBefore,$tracking])) { + $this->app->User->SetParameter('versand_lasttracking',''); + $this->app->User->SetParameter('versand_lasttracking_link',''); + $this->app->User->SetParameter('versand_lasttracking_versand', ''); + $this->app->User->SetParameter('versand_lasttracking_lieferschein', ''); + } + + $this->app->DB->Insert("INSERT INTO versand (id,versandunternehmen, tracking, tracking_link, + versendet_am,abgeschlossen,lieferschein, + freigegeben,firma,adresse,projekt,gewicht,paketmarkegedruckt,anzahlpakete) + VALUES ('','$versand','$tracking', '{$trackingLink}',NOW(),1,'$id',1,'".$this->app->User->GetFirma()."','$adresse','$projekt','$kg','1','1') "); + + $versandid = $this->app->DB->GetInsertID(); + if($this->app->DB->Select("SELECT automailversandbestaetigung FROM projekt WHERE id = '$projekt' LIMIT 1"))$this->Versandmail($versandid); + $this->RunHook('versanderzeugen_frankieren_hook1', 1, $versandid); + $auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id = '$id'"); + $rechnung = $this->app->DB->Select( + sprintf('SELECT id FROM rechnung where auftragid = %d LIMIT 1', $auftrag) + ); + if($rechnung) { + $rechnung_projekt = $this->app->DB->Select( + sprintf( + 'SELECT projekt FROM rechnung WHERE id = %d', $rechnung + ) + ); + $rechnung_zahlweise = $this->app->DB->Select( + sprintf( + 'SELECT zahlweise FROM rechnung WHERE id = %d', $rechnung + ) + ); + } + else{ + $rechnung_projekt = $this->app->DB->Select( + sprintf( + 'SELECT projekt FROM auftrag WHERE id = %d', $auftrag + ) + ); + $rechnung_zahlweise = $this->app->DB->Select( + sprintf( + 'SELECT zahlweise FROM auftrag WHERE id = %d', $auftrag + ) + ); + } + $shop = $this->app->DB->Select("SELECT shop FROM auftrag WHERE id = '$auftrag' LIMIT 1"); + $auftragabgleich=$this->app->DB->Select("SELECT auftragabgleich FROM shopexport WHERE id='$shop' LIMIT 1"); + $this->app->erp->LieferscheinProtokoll($id,'Verarbeitung im Versandzentrum'); + if($auftrag)$this->app->erp->AuftragProtokoll($auftrag,'Verarbeitung im Versandzentrum'); + if($shop > 0 && $auftragabgleich=="1") + { + //$this->LogFile("Tracking gescannt"); + try { + $this->app->remote->RemoteUpdateAuftrag($shop, $auftrag); + }catch(Exception $e) + { + $this->AuftragProtokoll($auftag, 'Shoprückmeldung fehlgeschlagen'); + } + } + try { + $this->sendPaymentStatus($versandid, $rechnung_zahlweise, $auftrag, $projekt, $rechnung_projekt); + } + catch (Exception $e) { + + } + if($lieferschein) { + $this->PDFArchivieren('lieferschein', $lieferschein, true); + } + if($rechnung) { + $this->PDFArchivieren('rechnung', $rechnung, true); + } + header("Location: index.php?module=lieferschein&action=paketmarke&id=$id"); + exit; + } + } + } + + if($versandmitbutton!="") + { + + if($sid=="versand") + { + $this->app->DB->Update("UPDATE versand SET versandunternehmen='$versandmit', + versendet_am=NOW(),versendet_am_zeitstempel=NOW(),abgeschlossen='1' WHERE id='$id' LIMIT 1"); + + $this->VersandAbschluss($id); + //versand mail an kunden + $this->Versandmail($id); + $obj = $this->app->erp->LoadModul('versanderzeugen'); + if(!empty($obj) && method_exists($obj,'CheckKommissionierungByLieferschein')) + { + $obj->CheckKommissionierungByLieferschein($this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id'")); + } + + + header("Location: index.php?module=versanderzeugen&action=offene"); + exit; + } + } + + if($sid=="versand") + { + // wenn paketmarke bereits gedruckt nur tracking scannen + $paketmarkegedruckt = $this->app->DB->Select("SELECT paketmarkegedruckt FROM versand WHERE id='$id' LIMIT 1"); + + if($paketmarkegedruckt>=1) + $tracking_again=1; + } + + // wenn anders ausgewaehlt + if($anders!="") + { + + //header("Location: index.php?module=paketmarke&action=tracking"); + $this->app->Tpl->Add('TAB1', + "

+ +
+

+

Methode:



+
Versandart:   +

+
+
+ +
+
+ +

+
+

+ "); + + + } + else if($drucken!="" || $tracking_again=="1") + { + + + + if($tracking_again!="1") + { + $nachnahme = trim($this->app->Secure->GetPOST("nachnahme")); + $betrag= $this->app->Secure->GetPOST("betrag"); + $versichert = $this->app->Secure->GetPOST("versichert"); + $extraversichert = $this->app->Secure->GetPOST("extraversichert"); + $name= trim($this->app->Secure->GetPOST("name")); + $name2= trim($this->app->Secure->GetPOST("name2")); + $name3= trim($this->app->Secure->GetPOST("name3")); + $land= $this->app->Secure->GetPOST("land"); + $plz= trim($this->app->Secure->GetPOST("plz")); + $ort= trim($this->app->Secure->GetPOST("ort")); + $telefon= trim($this->app->Secure->GetPOST("telefon")); + $email= trim($this->app->Secure->GetPOST("email")); + $strasse = trim($this->app->Secure->GetPOST("strasse")); + $hausnummer= trim($this->app->Secure->GetPOST("hausnummer")); + $altersfreigabe = $this->app->Secure->GetPOST("altersfreigabe"); + + $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); + $rechnungsnummer = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1"); + $rechnungid = $rechnungsnummer; + $rechnungsnummer = "RE ".$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$rechnungsnummer' LIMIT 1"); + + $kg = $this->app->Secure->GetPOST("kg1"); + $anzahl = $this->app->Secure->GetPOST("anzahl"); + + if($kg=="") $kg=$this->VersandartMindestgewicht($lieferschein); + + //$versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul FROM versanddienstleister WHERE aktiv = 1 AND modul = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); + $versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul,bezeichnung, einstellungen_json FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND type = '".$this->app->DB->real_escape_string($typ)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); + if($versandartenmodul && @is_file(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) + { + $obj = $this->LoadVersandModul($versandartenmodul[0]['modul'], $versandartenmodul[0]['id']); + $this->app->Tpl->Set("ZUSATZ",$versandartenmodul[0]['bezeichnung']); + + if(!empty($obj) && method_exists($obj, 'Paketmarke')) + { + $error = $obj->Paketmarke($sid!=''?$sid:'lieferschein',$id); + }else $error[] = 'Versandmodul '.$typ.' fehlerhaft!'; + }else{ + switch($typ) + { + case "DHL": + if($nachnahme=="" && $versichert=="" && $extraversichert=="") + { + $this->EasylogPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); + } else if ($nachnahme=="1" && $versichert=="" && $extraversichert=="") + { + $this->EasylogPaketmarkeNachnahme($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer); + } else if ($versichert=="1" && $extraversichert=="" && $nachnahme=="") + { + $this->EasylogPaketmarke2500($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); + } else if ($versichert=="1" && $extraversichert=="" && $nachnahme=="1") + { + $this->EasylogPaketmarkeNachnahme2500($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer); + } else if ($versichert=="" && $extraversichert=="1" && $nachnahme=="1") + { + $this->EasylogPaketmarkeNachnahme25000($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer); + } else if ($extraversichert=="1" && $versichert=="" && $nachnahme=="") + { + $this->EasylogPaketmarke25000($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); + } + break; + case "Intraship": + $kg = (float)str_replace(',','.',$kg); + + $abholdatum = $this->app->Secure->GetPOST("abholdatum"); + $retourenlabel= $this->app->Secure->GetPOST("retourenlabel"); + if($retourenlabel) + { + $this->app->Tpl->Set('RETOURENLABEL', ' checked="checked" '); + $zusaetzlich['retourenlabel'] = 1; + } + if($abholdatum){ + $this->app->Tpl->Set('ABHOLDATUM',$abholdatum); + $zusaetzlich['abholdatum'] = date('Y-m-d', strtotime($abholdatum)); + $this->app->User->SetParameter("paketmarke_abholdatum",$zusaetzlich['abholdatum']); + } + if($altersfreigabe)$zusaetzlich['altersfreigabe'] = 1; + if($nachnahme=="1") + $error = $this->IntrashipPaketmarkeNachnahme($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer,$zusaetzlich); + else + $error = $this->IntrashipPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,"",$rechnungsnummer,$zusaetzlich); + break; + case "UPS": + $error = $this->UPSPaketmarke($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer); + break; + case "FEDEX": + $error = $this->FEDEXPaketmarke($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer); + break; + case 'Go': + if($name && $strasse && $plz && $ort && (($hausnummer && (!$land || $land == 'DE') || ($land && $land != 'DE')))) + { + $kg = $this->app->Secure->GetPOST("kg"); + if($kg=="") $kg=$this->VersandartMindestgewicht($lieferschein); + $kg = str_replace(',','.',$kg); + $frei = $this->app->Secure->GetPOST("frei")==1?1:0; + $auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein where id = ".(int)$lieferschein." limit 1"); + + if($frei){ + $this->app->Tpl->Set('FREI',' checked="checked" '); + $zusaetzlich['frei'] = 1; + } + $selbstabholung = $this->app->Secure->GetPOST("selbstabholung"); + if($selbstabholung){ + $this->app->Tpl->Set('SELBSTABHOLUNG',' checked="checked" '); + $zusaetzlich['selbstabholung'] = 1; + } + $landesvorwahl = $this->app->Secure->GetPOST("landesvorwahl"); + if($landesvorwahl){ + $this->app->Tpl->Set('LANDESVORWAHL',$landesvorwahl); + $zusaetzlich['landesvorwahl'] = $landesvorwahl; + } + $ortsvorwahl = $this->app->Secure->GetPOST("ortsvorwahl"); + if($ortsvorwahl){ + $this->app->Tpl->Set('ORTSVORWAHL',$ortsvorwahl); + $zusaetzlich['ortsvorwahl'] = $ortsvorwahl; + } + if($telefon) + { + $this->app->Tpl->Set('TELEFON',$telefon); + $zusaetzlich['telefon'] = $telefon; + } + if($email) + { + $this->app->Tpl->Set('EMAIL',trim($email)); + $zusaetzlich['email'] = trim($email); + } + + + $selbstanlieferung = $this->app->Secure->GetPOST("selbstanlieferung"); + if($selbstanlieferung){ + $this->app->Tpl->Set('SELBSTANLIEFERUNG',' checked="checked" '); + $zusaetzlich['selbstanlieferung'] = 1; + } + $abholdatum = $this->app->Secure->GetPOST("abholdatum"); + if($abholdatum){ + $this->app->Tpl->Set('ABHOLDATUM',$abholdatum); + $zusaetzlich['abholdatum'] = $abholdatum; + $this->app->User->SetParameter("paketmarke_abholdatum",$zusaetzlich['abholdatum']); + } + $zustelldatum = $this->app->Secure->GetPOST("zustelldatum"); + if(!$zustelldatum) + { + //$zustelldatum = $this->app->DB->Select("SELECT lieferdatum FROM rechnung where id = ".(int)$rechnungid." and lieferdatum > now() limit 1"); + $zustelldatum = $this->app->DB->Select("SELECT lieferdatum FROM auftrag where id = ".(int)$auftragid." limit 1"); + } + if($zustelldatum){ + $this->app->Tpl->Set('ZUSTELLDATUM',$zustelldatum); + $zusaetzlich['zustelldatum'] = $zustelldatum; + } + + if(!$abholdatum) + { + //$abholdatum = $this->app->DB->Select("SELECT tatsaechlicheslieferdatum FROM rechnung where id = ".(int)$rechnungid." and tatsaechlicheslieferdatum > now() limit 1"); + $abholdatum = $this->app->DB->Select("SELECT date_format(now(),'%d.%m.%Y')"); + /*if(!$abholdatum) + { + $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$auftragid' LIMIT 1"); + $differenztage = $this->Projektdaten($projekt,"differenz_auslieferung_tage"); + if($differenztage<0) $differenztage=2; + $abholdatum = $this->app->DB->Select("SELECT DATE_SUB(lieferdatum, INTERVAL $differenztage DAY) from auftrag WHERE id='$auftragid' and DATE_SUB(lieferdatum, INTERVAL $differenztage DAY) > now() LIMIT 1"); + }*/ + if($abholdatum) + { + $this->app->Tpl->Set('ABHOLDATUM',$abholdatum); + $zusaetzlich['abholdatum'] = $abholdatum; + $this->app->User->SetParameter("paketmarke_abholdatum",$zusaetzlich['abholdatum']); + } + } + + + $Zustellhinweise = $this->app->Secure->GetPOST("Zustellhinweise"); + if($Zustellhinweise){ + $this->app->Tpl->Set('ZUSTELLHINWEISE',$Zustellhinweise); + $zusaetzlich['Zustellhinweise'] = $Zustellhinweise; + } + $Abholhinweise = $this->app->Secure->GetPOST("Abholhinweise"); + if($Abholhinweise){ + $this->app->Tpl->Set('ABHOLHINWEISE',$Abholhinweise); + $zusaetzlich['Abholhinweise'] = $Abholhinweise; + } + + + if($anzahl)$zusaetzlich['menge'] = $anzahl; + $inhalt = $this->app->Secure->GetPOST("inhalt"); + if($inhalt){ + $this->app->Tpl->Set('INHALT',$inhalt); + $zusaetzlich['inhalt'] = $inhalt; + } + if(isset($nachnahme))$zusaetzlich['nachnahme'] = $nachnahme; + $this->GoPaketmarke($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$betrag,$rechnungsnummer, $zusaetzlich); + } else header("Location: index.php?module=lieferschein&action=paketmarke&id=$id"); + break; + + } + } + + if(!isset($error) || !$error)$this->app->DB->Update("UPDATE versand SET gewicht='$kg',paketmarkegedruckt=1,anzahlpakete='$anzahl' WHERE id='$id' LIMIT 1"); + } + if(!$error) + { + //insert into versand oder update + if($anzahl > 1) + { + for($anzahli=2;$anzahli<=$anzahl; $anzahli++) + { + + $kg = $this->app->Secure->GetPOST("kg".$anzahli); + + if($kg <=0) $kg = $this->VersandartMindestgewicht($lieferschein); + + //$this->DPDPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg,$produkt_zusatz_id,$produkt_zusatz_nr,$zusatz); //TODO 2kg + switch($typ) + { + case "DHL": + $this->EasylogPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); //TODO 1 + break; + case "Intraship": + $kg = (float)str_replace(',','.',$kg); + $this->IntrashipPaketmarkeStandard($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); //TODO 1 + break; + case "UPS": + $this->UPSPaketmarke($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); //TODO 1 + break; + case "FEDEX": + $this->FEDEXPaketmarke($id,$name,$name2,$name3,$strasse,$hausnummer,$plz,$ort,$land,$kg); + break; + + } + $this->app->DB->Insert("INSERT INTO versandpakete (id,versand,gewicht,nr,versender) VALUES ('','$id','$kg','$anzahli','".$this->app->User->GetName()."')"); + } + + } + + if($tracking_again=="1") + { + //$error_message_tracking = "
Bitte korrekte Trackingnummer erfassen!
"; + } + + if($sid==='versand') { + $paketmarkedrucken = '';//""; + } + else { + $paketmarkedrucken=''; + } + + $lastTrackingVersand = $this->app->User->GetParameter('versand_lasttracking_versand'); + $lastTrackingLieferschein = $this->app->User->GetParameter('versand_lasttracking_lieferschein'); + $tracking = $this->app->User->GetParameter('versand_lasttracking'); + $trackingLink = $this->app->User->GetParameter('versand_lasttracking_link'); + if(empty($tracking) && $sid === 'versand') { + $trackingRow = $this->app->DB->SelectRow( + sprintf( + 'SELECT tracking, tracking_link FROM versand WHERE id = %d', + $id + ) + ); + if(!empty($trackingRow)) { + $tracking = $trackingRow['tracking']; + $trackingLink = $trackingRow['tracking_link']; + } + } + if((!empty($lastTrackingVersand) && $sid === 'versand' && $id != $lastTrackingVersand) || + (!empty($lastTrackingLieferschein) && $sid !== 'versand' && $id != $lastTrackingLieferschein)) { + $this->app->User->SetParameter('versand_lasttracking', ''); + $this->app->User->SetParameter('versand_lasttracking_versand', ''); + $this->app->User->SetParameter('versand_lasttracking_lieferschein', ''); + } + $printagain = ''; + $versandRow = $this->app->DB->SelectRow(sprintf('SELECT * FROM versand WHERE id = %d', $id)); + + if($sid === 'versand' && $this->app->erp->RechteVorhanden('versanderzeugen','reprintlabel') + && !empty($versandRow['lastprinter']) && !empty($versandRow['lastspooler_id']) + ) { + $printable = $this->app->DB->Select( + sprintf( + 'SELECT id FROM drucker_spooler WHERE id = %d AND content <> \'\' LIMIT 1', + $versandRow['lastspooler_id'] + ) + ); + + $printagain = '  +
+ * Die Paketmarke wird maximal 10 Tage vorgehalten.'; + } + $this->app->erp->RunHook("versanderzeugen_scan_dialog", 2, $lastTrackingLieferschein, $versandartenmodul[0]); + + //header("Location: index.php?module=paketmarke&action=tracking"); + $this->app->Tpl->Add('TAB1', + "
$error_message_tracking
+ +
+

+

Tracking-Nummer Scannen:



+
Tracking-Nummer:    +

+
+ + + +
 Weitere Paketmarke für diese Lieferung erstellen.
 Zusätzlichen Lieferschein drucken.
+
+
+
+
+ $paketmarkedrucken +
$printagain
+
+
+

+
+

+ "); + + } + } + if(!($drucken!="" || $tracking_again=="1") || $error) + { + if($error) + { + $this->app->Tpl->Add('ERROR','
'); + foreach($error as $er)$this->app->Tpl->Add('ERROR',$er.'
'); + $this->app->Tpl->Add('ERROR','
'); + + } + + if($sid=="rechnung") + $rechnung = $id; + else $rechnung =""; + + if($sid=="versand") + { + $tid = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1"); + $rechnung = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1"); + $tablesid = "lieferschein"; + } elseif($sid == "retoure") + { + $lieferschein = $this->app->DB->Select("SELECT lieferscheinid FROM retoure WHERE id = '$id' LIMIT 1"); + $tid = $id; + if($lieferschein)$rechnung = $this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein = '$lieferschein' LIMIT 1"); + if($rechnung<=0) $rechnung = $this->app->DB->Select("SELECT rechnungid FROM lieferschein WHERE id='$lieferschein' LIMIT 1"); + } else { + $tid = $id; + if($sid == 'lieferschein')$rechnung = $this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein = '$tid' LIMIT 1"); + if($rechnung<=0) $rechnung = $this->app->DB->Select("SELECT rechnungid FROM lieferschein WHERE id='$tid' LIMIT 1"); + } + + if($rechnung){ + $artikel_positionen = $this->app->DB->SelectArr("SELECT * FROM rechnung_position WHERE rechnung='$rechnung'"); + } else { + //if($sid =="versand" && $tid > 0) + //{ + // $artikel_positionen = $this->app->DB->SelectArr("SELECT * FROM lieferschein_position WHERE lieferschein='$tid'"); + //} + //else { + $artikel_positionen = $this->app->DB->SelectArr("SELECT * FROM ".$tablesid."_position WHERE $tablesid='$tid'"); + //} + + } + $altersfreigabe = 0; + for($i=0;$iapp->DB->Select("SELECT altersfreigabe FROM artikel WHERE id = '".$artikel_positionen[$i]['artikel']."' LIMIT 1"); + if($artikelaltersfreigabe > $altersfreigabe)$altersfreigabe = $artikelaltersfreigabe; + } + + if($altersfreigabe) + { + if($sid == 'adresse') + { + $adresse = $tid; + }else{ + $adresse = $this->app->DB->Select("SELECT adresse FROM $tablesid WHERE id = '$tid' LIMIT 1"); + } + if(!$this->app->DB->Select("SELECT keinealtersabfrage FROM adresse WHERE id = '$adresse' LIMIT 1")) + $this->app->Tpl->Set('ALTERSFREIGABE',' checked '); + }else{ + $this->app->Tpl->Set('VORALTERSFREIGABE', ''); + } + + + if($tablesid=="rechnung" || $tablesid=="lieferschein" || $tablesid=="adresse" || $tablesid == "retoure") + { + $name = trim($this->app->DB->Select("SELECT name FROM $tablesid WHERE id='$tid' LIMIT 1")); + $name2 = trim($this->app->DB->Select("SELECT adresszusatz FROM $tablesid WHERE id='$tid' LIMIT 1")); + if($name2=="") + { + $name2 = trim($this->app->DB->Select("SELECT abteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); + $abt=1; + } + $name3 = trim($this->app->DB->Select("SELECT ansprechpartner FROM $tablesid WHERE id='$tid' LIMIT 1")); + if($name3=="" && $abt!=1) + $name3 = trim($this->app->DB->Select("SELECT abteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); + + //unterabteilung versuchen einzublenden + if($name2=="") { + $name2 = trim($this->app->DB->Select("SELECT unterabteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); + } else if ($name3=="") { + $name3 = trim($this->app->DB->Select("SELECT unterabteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); + } + + if($name3!="" && $name2=="") { $name2=$name3; $name3=""; } + + $ort = trim($this->app->DB->Select("SELECT ort FROM $tablesid WHERE id='$tid' LIMIT 1")); + $plz = trim($this->app->DB->Select("SELECT plz FROM $tablesid WHERE id='$tid' LIMIT 1")); + $land = trim($this->app->DB->Select("SELECT land FROM $tablesid WHERE id='$tid' LIMIT 1")); + $strasse = trim($this->app->DB->Select("SELECT strasse FROM $tablesid WHERE id='$tid' LIMIT 1")); + $strassekomplett = $strasse; + $hausnummer = trim($this->ExtractStreetnumber($strasse)); + + $strasse = trim(str_replace($hausnummer,"",$strasse)); + $strasse = str_replace('.',"",$strasse); + + if($strasse=="") + { + $strasse = trim($hausnummer); + $hausnummer = ""; + } + $telefon = trim($this->app->DB->Select("SELECT telefon FROM $tablesid WHERE id='$tid' LIMIT 1")); + $email = trim($this->app->DB->Select("SELECT email FROM $tablesid WHERE id='$tid' LIMIT 1")); + + if($sid == "retoure") + { + if($this->app->DB->Select("SELECT abweichendelieferadresse FROM retoure WHERE id = '$id' LIMIT 1")) + { + + $name = trim($this->app->DB->Select("SELECT liefername FROM $tablesid WHERE id='$tid' LIMIT 1")); + $name2 = trim($this->app->DB->Select("SELECT lieferadresszusatz FROM $tablesid WHERE id='$tid' LIMIT 1")); + if($name2=="") + { + $name2 = trim($this->app->DB->Select("SELECT lieferabteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); + $abt=1; + } + $name3 = trim($this->app->DB->Select("SELECT lieferansprechpartner FROM $tablesid WHERE id='$tid' LIMIT 1")); + if($name3=="" && $abt!=1) + $name3 = trim($this->app->DB->Select("SELECT lieferabteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); + + //unterabteilung versuchen einzublenden + if($name2=="") { + $name2 = trim($this->app->DB->Select("SELECT lieferunterabteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); + } else if ($name3=="") { + $name3 = trim($this->app->DB->Select("SELECT lieferunterabteilung FROM $tablesid WHERE id='$tid' LIMIT 1")); + } + + if($name3!="" && $name2=="") { $name2=$name3; $name3=""; } + + $ort = trim($this->app->DB->Select("SELECT lieferort FROM $tablesid WHERE id='$tid' LIMIT 1")); + $plz = trim($this->app->DB->Select("SELECT lieferplz FROM $tablesid WHERE id='$tid' LIMIT 1")); + $land = trim($this->app->DB->Select("SELECT lieferland FROM $tablesid WHERE id='$tid' LIMIT 1")); + $strasse = trim($this->app->DB->Select("SELECT lieferstrasse FROM $tablesid WHERE id='$tid' LIMIT 1")); + $strassekomplett = $strasse; + $hausnummer = trim($this->ExtractStreetnumber($strasse)); + + $strasse = trim(str_replace($hausnummer,"",$strasse)); + $strasse = str_replace('.',"",$strasse); + + if($strasse=="") + { + $strasse = trim($hausnummer); + $hausnummer = ""; + } + + } + } + + } + + if($rechnung > 0) + { + $zahlungsweise = $this->app->DB->Select("SELECT zahlungsweise FROM rechnung WHERE id='$rechnung' LIMIT 1"); + $soll = $this->app->DB->Select("SELECT soll FROM rechnung WHERE id='$rechnung' LIMIT 1"); + } else { + $auftragtmp = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$tid'"); + $zahlungsweise = $this->app->DB->Select("SELECT zahlungsweise FROM auftrag WHERE id='$auftragtmp' LIMIT 1"); + $soll = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftragtmp' LIMIT 1"); + } + + + // wenn rechnung im spiel entweder durch versand oder direkt rechnung + if($soll>0) + { + $this->app->Tpl->Set('BETRAG',$soll); + + if($zahlungsweise=="nachnahme") + $this->app->Tpl->Set('NACHNAHME',"checked"); + + if($soll >= 500 && $soll <= 2500) + $this->app->Tpl->Set('VERSICHERT',"checked"); + + if($soll > 2500) + $this->app->Tpl->Set('EXTRAVERSICHERT',"checked"); + } + + $felder = array('name','name2','name3','ort','plz','strasse','hausnummer','land','telefon','email'); + foreach($felder as $feld) + { + $varname = $feld; + if($this->app->Secure->GetPOST($feld)!="") + { + $$varname = $this->app->Secure->GetPOST($feld); + } + } + + $this->app->Tpl->Set('NAME',str_replace('"','',$name)); + $this->app->Tpl->Set('NAME2',str_replace('"','',$name2)); + $this->app->Tpl->Set('NAME3',str_replace('"','',$name3)); + $this->app->Tpl->Set('ORT',str_replace('"','',$ort)); + $this->app->Tpl->Set('PLZ',str_replace('"','',$plz)); + $this->app->Tpl->Set('STRASSE',str_replace('"','',$strasse)); + $this->app->Tpl->Set('STRASSEKOMPLETT',$strassekomplett); + $this->app->Tpl->Set('HAUSNUMMER',$hausnummer); + $this->app->Tpl->Set('LAND',$land); + + //DSGVO + + if($this->Firmendaten("dsgvoversandunternehmen")!="1") + { + $this->app->Tpl->Set('TELEFON',$telefon); + $this->app->Tpl->Set('EMAIL',trim($email," \t\n\r\0\x0B\xc2\xa0")); + } + + $abholdatum_user = $this->app->User->GetParameter("paketmarke_abholdatum"); + $abholdatum_user = date('Y-m-d', strtotime($abholdatum_user)); + + + $check_date = $this->app->DB->Select("SELECT date_format(now(),'%Y-%m-%d')"); + if($abholdatum_user >= $check_date) + $this->app->Tpl->Set('ABHOLDATUM',date('d.m.Y', strtotime($abholdatum_user))); + else + $this->app->Tpl->Set('ABHOLDATUM',date('d.m.Y', strtotime($check_date))); + + $anzahl = $this->app->Secure->GetGET("anzahl"); + + if($anzahl <= 0) $anzahl=1; + + $this->app->Tpl->Set('ANZAHL',$anzahl); + + if($tablesid=="lieferschein") + $standardkg=$this->VersandartMindestgewicht($tid); + else + $standardkg=$this->VersandartMindestgewicht(); + + $this->PaketmarkeGewichtForm($anzahl, $standardkg, $this->VersandartMindestgewicht()); + /* + if($anzahl==1) + { + $i=1; + $this->app->Tpl->Add('GEWICHT','Gewicht Paket: in kg'); + } + else { + for($i=1;$i<=$anzahl;$i++) + $this->app->Tpl->Add('GEWICHT','Gewicht Paket '.$i.': in kg'); + }*/ + + if($tracking_again!="1") + { + + //$versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul FROM versanddienstleister WHERE aktiv = 1 AND modul = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); + $versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul,bezeichnung FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND modul != '' AND type = '".$this->app->DB->real_escape_string($typ)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); + + if(!( + $this->app->DB->Select("SELECT id FROM versandarten WHERE aktiv = 1 AND ausprojekt = 1 AND type = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1") + && ($typ == 'DHL' || $typ == 'dhl' || $typ == 'intraship' || $typ == 'Intraship' || $typ == 'UPS' || $typ == 'FEDEX' || $typ == 'Go'))) + { + if($versandartenmodul[0]['modul']=="") { + + if(!(($typ == 'DHL' || $typ == 'dhl' || $typ == 'intraship' || $typ == 'Intraship') && $this->app->DB->Select("SELECT id FROM versandarten WHERE aktiv = 1 AND ausprojekt = 1 AND (type like 'dhl' OR type like 'intraship') AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"))) + { + $versandartenmodul[0]['modul'] ="sonstiges"; + $versandartenmodul[0]['bezeichnung'] ="Sonstiges


   Bitte weiter klicken und im Feld Trackingnummer Information für Versand eingeben z.B. Brief oder Spedition   

"; + } + } + } + if($versandartenmodul && @is_file(__DIR__.'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) + { + $obj = $this->LoadVersandModul($versandartenmodul[0]['modul'], $versandartenmodul[0]['id']); + $this->app->Tpl->Set("ZUSATZ",$versandartenmodul[0]['bezeichnung']); + if(!empty($obj) && method_exists($obj, 'Paketmarke')) + { + $error = $obj->Paketmarke($sid!=''?$sid:'lieferschein',($sid=='versand'?$id:$tid), $parsetarget, $error); + }else $error[] = 'Versandmodul '.$typ.' fehlerhaft!'; + }else{ + if($typ == 'dhl' || $typ == 'DHL') + { + if($this->app->DB->Select("SELECT intraship_enabled FROM projekt WHERE id='$projekt' LIMIT 1"))$typ = 'intraship'; + } + switch($typ) + { + case "DHL": + case "dhl": + $this->app->Tpl->Parse($parsetarget,"paketmarke_dhl.tpl"); + break; + case "Intraship": + case "intraship": + if(!$this->app->DB->Select("SELECT intraship_retourenaccount FROM projekt WHERE id = '$projekt' LIMIT 1")) + { + $this->app->Tpl->Add('VORRETOURENLABEL', ''); + } + if($this->app->DB->Select("SELECT intraship_retourenlabel FROM projekt WHERE id = '$projekt' LIMIT 1"))$this->app->Tpl->Add('RETOURENLABEL',' checked="checked" '); + $this->app->Tpl->Parse($parsetarget,"paketmarke_intraship.tpl"); + break; + case "UPS": + $this->app->Tpl->Parse($parsetarget,"paketmarke_ups.tpl"); + break; + case "FEDEX": + $this->app->Tpl->Parse($parsetarget,"paketmarke_fedex.tpl"); + break; + case "Go": + $this->app->Tpl->Parse($parsetarget,"paketmarke_go.tpl"); + break; + } + } + } + } + if($this->app->Secure->GetGET('module') === 'versanderzeugen'){ + $obj = $this->app->erp->LoadModul('versanderzeugen'); + if(!empty($this->app->User) && method_exists($this->app->User,'GetParameter')){ + $defaultklaergrund = $this->app->User->GetParameter('versand_klaergrund'); + }else{ + $defaultklaergrund = ''; + } + //$fields = array('klaergrund' => array('bezeichnung' => '&nbps;','size'=>40,'autocomplete'=>'versand_klaergrund','defaultonempty'=>$defaultklaergrund)); + $vorlagen = $this->app->DB->SelectArr("SELECT DISTINCT problemcase FROM + delivery_problemcase WHERE problemcase != '' ORDER BY sort, problemcase"); + $klaeroptions = []; + if(!empty($vorlagen)){ + //$fields['vorlagen'] = array('type'=>'legend','bezeichnung'=>'Vorlagen'); + foreach($vorlagen as $k => $v) + { + $klaeroptions[] = $v['problemcase']; + //$fields['vorlage_'.$k] = array('type'=>'link','nodoublepoint'=>1,'bezeichnung' => '•','link'=>''.$v['problemcase'].''); + } + $fields = array('klaergrund' => array('type'=>'radiobutton','optionen'=>$klaeroptions)); + if(!empty($klaeroptions)){ + $this->app->YUI->AddSimpleForm('versand', $fields, + array('editbutton' => $this->app->Secure->GetGET('id'), 'nocreate' => true, 'edittext' => 'Klärfall anlegen', 'legend' => 'Grund', 'title' => 'Einstellungen', 'functionaftersave' => 'VersanderzeugenKlaerfallfunctionaftersave' + , 'addbuttonafter' => '$(\'input[name="drucken"]\').parent().find(\'input\').last()', 'onsave' => 'window.location.href=\'index.php?module=versanderzeugen&action=offene\''), $obj); + } + } + } +} + +//@refactor versanddiestleister Modul +function ExtractStreetnumber($street) +{ + $address = trim($street); + $number = preg_replace('/^.*?(\d+).*$/i', '$1', $address); + // suche erstes vorkommen + $pos = strpos($address,$number); + if($pos === 0) + { + $result = substr($address, 0, strpos($address ,' ')); + }else{ + $result = substr ( $address, $pos); + } + return $result; +} +//@refactor versanddiestleister Modul +function RetoureNettoGewicht($id) +{ + return $this->LieferscheinNettoGewicht($id, 'retoure'); +} +//@refactor versanddiestleister Modul + /** + * @param int $id + * @param string $doctype + * + * @return float|int + */ + public function LieferscheinNettoGewicht($id=0, $doctype = 'lieferschein') + { + if($id <= 0) { + return 0; + } + + if($this->Firmendaten('stuecklistegewichtnurartikel')!='1') { + $nettogewicht = $this->app->DB->Select( + "SELECT SUM(REPLACE(a.gewicht,',','.')*ap.menge) + FROM ".$doctype."_position ap + INNER JOIN artikel a ON ap.artikel=a.id WHERE ap.".$doctype."='$id'"); + } + else { + $nettogewicht = $this->app->DB->Select( + "SELECT SUM(REPLACE(if(a2.gewicht > 0,0,a.gewicht),',','.')*ap.menge) + FROM ".$doctype."_position ap + INNER JOIN artikel a ON ap.artikel=a.id + LEFT JOIN ".$doctype."_position ap2 ON ap2.id=ap.explodiert_parent + LEFT JOIN artikel a2 ON a2.id=ap2.artikel + WHERE ap.".$doctype."='$id'" + ); + } + + if($nettogewicht > 0){ + return round($nettogewicht, 2); + } + return 0; + } +//@refactor versanddiestleister Modul + + /** + * @param int $id + * + * @return float|int + */ + public function AuftragNettoGewicht($id=0) + { + if($id <= 0) { + return 0; + } + + if($this->Firmendaten('stuecklistegewichtnurartikel')!='1') { + $nettogewicht = $this->app->DB->Select( + "SELECT SUM(REPLACE(a.gewicht,',','.')*ap.menge) + FROM auftrag_position ap + INNER JOIN artikel a ON ap.artikel=a.id + WHERE ap.auftrag='$id'" + ); + } + else { + $nettogewicht = $this->app->DB->Select( + "SELECT SUM(REPLACE(if(a2.gewicht > 0,0,a.gewicht),',','.')*ap.menge) + FROM auftrag_position ap + INNER JOIN artikel a ON ap.artikel=a.id + LEFT JOIN auftrag_position ap2 ON ap2.id=ap.explodiert_parent + LEFT JOIN artikel a2 ON a2.id=ap2.artikel + WHERE ap.auftrag='$id'" + ); + } + + if($nettogewicht > 0){ + return round($nettogewicht, 2); + } + + return 0; + } + +function BestellungNettoGewicht($id=0){ + if($id <= 0) { + return 0; + } + + if($this->Firmendaten('stuecklistegewichtnurartikel')!='1') { + $nettogewicht = $this->app->DB->Select( + "SELECT SUM(REPLACE(a.gewicht,',','.')*bp.menge) + FROM bestellung_position bp + INNER JOIN artikel a ON bp.artikel=a.id WHERE bp.bestellung='$id'"); + } + else { + $nettogewicht = $this->app->DB->Select( + "SELECT SUM(REPLACE(if(a2.gewicht > 0,0,a.gewicht),',','.')*bp.menge) + FROM bestellung_position bp + INNER JOIN artikel a ON bp.artikel=a.id + LEFT JOIN bestellung_position bp2 ON bp2.id=bp.explodiert_parent + LEFT JOIN artikel a2 ON a2.id=bp2.artikel + WHERE bp.bestellung='$id'" + ); + } + + if($nettogewicht > 0){ + return round($nettogewicht, 2); + } + + return 0; +} + +function AngebotNettoGewicht($id=0){ + if($id <= 0) { + return 0; + } + if($this->Firmendaten('stuecklistegewichtnurartikel')!='1') + { + $nettogewicht = $this->app->DB->Select( + "SELECT SUM(REPLACE(a.gewicht,',','.')*ap.menge) + FROM angebot_position ap + INNER JOIN artikel a ON ap.artikel=a.id + WHERE ap.angebot='$id'" + ); + } else { + $nettogewicht = $this->app->DB->Select( + "SELECT SUM(REPLACE(if(a2.gewicht > 0,0,a.gewicht),',','.')*ap.menge) + FROM angebot_position ap + INNER JOIN artikel a ON ap.artikel=a.id + LEFT JOIN angebot_position ap2 ON ap2.id=ap.explodiert_parent + LEFT JOIN artikel a2 ON a2.id=ap2.artikel + WHERE ap.angebot='$id'" + ); + } + + if($nettogewicht > 0){ + return round($nettogewicht, 2); + } + + return 0; +} + + //@refactor versanddiestleister Modul + public function ProformarechnungNettoGewicht($id=0,$round=true) + { + if($id <= 0) { + return 0; + } + if($this->Firmendaten('stuecklistegewichtnurartikel')!='1') + { + $nettogewicht = $this->app->DB->Select( + "SELECT SUM(REPLACE(a.gewicht,',','.')*prp.menge) + FROM proformarechnung_position prp + INNER JOIN artikel a ON prp.artikel=a.id + WHERE prp.proformarechnung='$id'" + ); + } + else { + $nettogewicht = $this->app->DB->Select( + "SELECT SUM(REPLACE(if(a2.gewicht > 0,0,a.gewicht),',','.')*ap.menge) + FROM proformarechnung_position ap + INNER JOIN artikel a ON ap.artikel=a.id + LEFT JOIN proformarechnung_position ap2 ON ap2.id=ap.explodiert_parent_artikel + LEFT JOIN artikel a2 ON a2.id=ap2.artikel + WHERE ap.proformarechnung='$id'" + ); + } + + if($nettogewicht > 0) { + if($round){ + return round($nettogewicht,2); + } + return $nettogewicht; + } + + return 0; + } + + + + +//@refactor Exportvorlage Modul +function Gegenkonto($ust_befreit,$ustid='', $doctype = '', $doctypeId = 0) +{ + /** @var Buchhaltungexport $buchhaltungexport */ + $buchhaltungexport = $this->app->loadModule('buchhaltungexport', false); + if($buchhaltungexport !== null && method_exists($buchhaltungexport, 'Gegenkonto')) { + return $buchhaltungexport->Gegenkonto($ust_befreit, $ustid, $doctype, $doctypeId); + } + switch($ust_befreit) + { + case 0: $tmp['gegenkonto']=$this->Firmendaten("steuer_erloese_inland_normal"); break; + case 1: + if($ustid=="") + { + $tmp['gegenkonto']=$this->Firmendaten("steuer_erloese_inland_eunormal"); + } else { + $tmp['gegenkonto']=$this->Firmendaten("steuer_erloese_inland_innergemeinschaftlich"); + } + break; + case 2: $tmp['gegenkonto']=$this->Firmendaten("steuer_erloese_inland_export"); break; + case 3: $tmp['gegenkonto']=$this->Firmendaten("steuer_erloese_inland_nichtsteuerbar"); break; + default: + //TODO + echo "FEHLER!"; + exit; + } + + if($tmp['gegenkonto']=="") { + $tmp['gegenkonto']=$this->Firmendaten("steuer_standardkonto"); + } + + return $tmp['gegenkonto']; +} + + + + /** + * @deprecated Use the setValue() function in SystemConfigModule instead
+ * Retrieve data with the getValue() and tryGetValue() functions
+ * Mind the additional namespace parameter + * + * @param string $name + * @param mixed $value + */ + public function SetKonfigurationValue($name,$value) + { + $this->app->DB->Delete( + sprintf( + "DELETE FROM konfiguration WHERE name='%s'", + $name + ) + ); + $this->app->DB->Insert( + sprintf( + "INSERT INTO konfiguration (name,wert,firma,adresse) + VALUES ('%s','%s',%d,%d)", + $name, $value, + isset($this->app->User) && method_exists($this->app->User, 'GetFirma')?$this->app->User->GetFirma():1, + isset($this->app->User) && method_exists($this->app->User, 'GetAdresse')?$this->app->User->GetAdresse():0 + ) + ); + } + + /** + * @deprecated Use the NOT COMPATIBLE setValue() function in SystemConfigModule instead
+ * Retrieve data with the getValue() and tryGetValue() functions
+ * Mind the additional namespace parameter + * + * @param string $name + * @param bool $dezimal + */ + function SetKonfiguration($name,$dezimal=false) + { + + $this->app->DB->Delete("DELETE FROM konfiguration WHERE name='$name' LIMIT 1"); + + if($dezimal) + $value = str_replace(',','.',$this->app->Secure->GetPOST($name)); + else + $value = $this->app->Secure->GetPOST($name); + + $this->app->DB->Insert("INSERT INTO konfiguration (name,wert,firma,adresse) VALUES ('$name','$value','".$this->app->User->GetFirma()."','".$this->app->User->GetAdresse()."')"); + + } + + /** + * @deprecated Use the tryGetLegacyValue() function in SystemConfigModule instead + * + * @param string $name + * + * @return string|bool + */ + function GetKonfiguration($name) + { + + return $this->app->DB->Select("SELECT wert FROM konfiguration WHERE name='$name' LIMIT 1");// AND firma='".$this->app->User->GetFirma()."' LIMIT 1"); + } + + /** + * @param bool $active + * @param string $type + */ + public function setMaintainance($active = true, $type = 'backup') { + $tags = json_encode('update'); + if(!$active) { + if($this->GetKonfiguration('update_maintenance') == '0') { + return; + } + $this->SetKonfigurationValue('update_maintenance', 0); + $this->SetKonfigurationValue('update_maintenance_mode', ''); + //$this->app->DB->Delete("DELETE FROM notification_message WHERE tags = '$tags'"); + return; + } + + if($type !== 'backup') { + return; //@todo + } + $this->SetKonfigurationValue('update_maintenance_mode', $type); + if($this->GetKonfiguration('update_maintenance') == '1') { + $this->SetKonfigurationValue('update_maintenance_time', time()); + return; + } + + /* + $this->app->DB->Insert( + "INSERT INTO notification_message + (user_id, type, title, message, tags, options_json, priority, created_at) + SELECT u.id, 'warning', + 'laufender Backup-Prozess', + 'Bitte schließen Sie Ihre Aufgaben','$tags','',1,NOW() + FROM `user` AS `u` + INNER JOIN `useronline` AS `uo` on u.id = uo.user_id AND uo.login = 1" + );*/ + + $this->SetKonfigurationValue('update_maintenance_time', time()); + $this->SetKonfigurationValue('update_maintenance', 1); + } + + //@refactor Folgebestaetigung Modul + function Folgebestaetigung($adresse) + { + + $sperre = $this->app->DB->Select("SELECT folgebestaetigungsperre FROM adresse WHERE id='$adresse' LIMIT 1"); + if($sperre=="1") return 1; + + // hole alle freigebeben auftraege + $auftragarr = $this->app->DB->SelectArr("SELECT id,belegnr,ihrebestellnummer,DATE_FORMAT(datum,'%d.%m.%Y') as datum2, DATE_FORMAT(lieferdatum,'%d.%m.%Y') as lieferdatum2, + liefertermin_ok + FROM auftrag WHERE adresse='$adresse' AND status='freigegeben' AND (lager_ok!=1 OR liefertermin_ok!=1) ORDER by lieferdatum"); + + $to = $this->app->DB->Select("SELECT email FROM adresse WHERE id='$adresse' LIMIT 1"); + $to_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' LIMIT 1"); + + for($iauftrag=0;$iauftragapp->DB->Select("SELECT projekt FROM auftrag WHERE id='$auftrag' LIMIT 1"); + $folgebestaetigung = $this->app->DB->Select("SELECT folgebestaetigung FROM projekt WHERE id='$projekt' LIMIT 1"); + if($folgebestaetigung!=1) + continue; + + if($auftragarr[$iauftrag]['lieferdatum2']=="00.00.0000") $auftragarr[$iauftrag]['lieferdatum2'] = $this->app->erp->Beschriftung("dokument_lieferdatum_sofort"); + if($auftragarr[$iauftrag]['liefertermin_ok']!="1") + { + $artikeltabelleliefertermin .= "
-Auftrag ".$auftragarr[$iauftrag]['belegnr']." vom ".$auftragarr[$iauftrag]['datum2']." Bestellung/Kommission: ".$auftragarr[$iauftrag]['ihrebestellnummer']." (geplanter Liefertermin: ".$auftragarr[$iauftrag]['lieferdatum2'].")
"; + } + else { + $artikeltabelle .= "
-Auftrag ".$auftragarr[$iauftrag]['belegnr']." vom ".$auftragarr[$iauftrag]['datum2']." Bestellung/Kommission: ".$auftragarr[$iauftrag]['ihrebestellnummer']." (geplanter Liefertermin: ".$auftragarr[$iauftrag]['lieferdatum2'].")
"; + } + //$to = $this->app->DB->Select("SELECT email FROM auftrag WHERE id='$auftrag' LIMIT 1"); + //$to_name = $this->app->DB->Select("SELECT name FROM auftrag WHERE id='$auftrag' LIMIT 1"); + + $arr = $this->app->DB->SelectArr("SELECT ap.nummer, ap.bezeichnung, ap.menge, (SELECT SUM(lp.menge) FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) as lager, + (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') as reserviert, + if(((SELECT SUM(lp.menge) FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) - (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') - ap.menge)>=0,'', + ((SELECT SUM(lp.menge) FROM lager_platz_inhalt lp WHERE lp.artikel=ap.artikel) - (SELECT SUM(lr.menge) FROM lager_reserviert lr WHERE lr.artikel=ap.artikel AND lr.datum>=NOW() AND lr.objekt!='lieferschein') - ap.menge) + ) as fehlend + FROM auftrag_position ap LEFT JOIN artikel a ON a.id=ap.artikel WHERE ap.auftrag='$auftrag' AND a.lagerartikel=1"); + + foreach($arr as $value) + { + $artikel = $value['bezeichnung']; + $nummer = $value['nummer']; + $menge = $value['menge']; + $lager = $value['lager']; + $reserviert= $value['reserviert']; + + if(($lager-$reserviert < $menge) && $auftragarr[$iauftrag]['liefertermin_ok']=="1") + { + $artikeltabelle .= "--Artikel: ".$artikel." (Nummer: $nummer) Menge: ".$menge."
"; + } + else + { + $artikeltabelleliefertermin .= "--Artikel: ".$artikel." (Nummer: $nummer) Menge: ".$menge."
"; + } + } + } + + if($artikeltabelle!="") $artikeltabelle ="Rückstand:

".$artikeltabelle."

"; + if($artikeltabelleliefertermin!="") $artikeltabelle .="Offene Aufträge:

".$artikeltabelleliefertermin; + + $artikeltabelle = $this->ReadyForPDF($artikeltabelle); + + if($artikeltabelle!="") + { + + $text = $this->GetGeschaeftsBriefText('Folgebestaetigung',$sprache, $projekt,"",$auftrag); + $betreff = $this->GetGeschaeftsBriefBetreff('Folgebestaetigung', $sprache,$projekt,"auftrag",$auftrag); + + if($text == "") + { + $text = 'Lieber Kunde, + + anbei übersenden wir Ihnen eine Liste mit den aktuell offenen Aufträgen (Rückstand und Aufträge mit Liefertermin): + + '.$artikeltabelle.' + + Bei Fragen zu Lieferungen wenden Sie sich gerne an unser Kundensupport-Center.'; + + $betreff = "Folgebestätigung für offene Aufträge"; + } else { + $text = str_replace('{ARTIKELTABELLE}',$artikeltabelle,$text); + } + + if($to!="" && $to_name!="") + $this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$to,$to_name,$betreff,$text,"",$projekt); + //echo $text; + } + + } + + + + // prueft datei anhang aus geschaeftsbriefvorlagen, wenn diese fehlen werden die ergänzt + //@refactor Geschaeftsbrief_vorlagen Modul + function GeschaeftsBriefAnhang($subjekt,$sprache="",$projekt="",$dokument="",$dokumentid="") + { + if($dokument!="") + { + $abweichend = $this->app->DB->Select("SELECT abweichendebezeichnung FROM $dokument WHERE id='$dokumentid' LIMIT 1"); + if($abweichend>0 && !preg_match('/_Abweichend/',$subjekt)) + { + $idvorlage = $this->GetGeschaeftsBriefID($subjekt."_Abweichend",$sprache,$projekt); + } + } + + + if($idvorlage <=0) + $idvorlage = $this->GetGeschaeftsBriefID($subjekt,$sprache,$projekt); + + $stichwoerter = $this->app->DB->SelectArr("SELECT * FROM datei_stichwoerter WHERE objekt='geschaeftsbrief_vorlagen' AND parameter='$idvorlage' AND parameter > 0"); + $cstichwoerter = !empty($stichwoerter)?count($stichwoerter):0; + $tmpresult = array(); + for($i=0;$i<$cstichwoerter;$i++) + { + $check = $this->app->DB->Select("SELECT id FROM datei_stichwoerter WHERE datei='".$stichwoerter[$i]['datei']."' AND objekt LIKE '$subjekt' AND parameter='$dokumentid' LIMIT 1"); + if($check<=0) + { + if($dokument!="") + { + $this->app->DB->Insert("INSERT INTO datei_stichwoerter (id,datei,subjekt,objekt,parameter) VALUES ('','".$stichwoerter[$i]['datei']."','".$stichwoerter[$i]['subjekt']."','$subjekt',$dokumentid)"); + } else { + $tmpresult[] = $stichwoerter[$i]['datei']; + } + } + } + return $tmpresult; + } + + + //@refactor Geschaeftsbrief_vorlagen Modul + function GetGeschaeftsBriefText($subjekt,$sprache='',$projekt='',$dokument='',$dokumentid=0) + { + $abweichend = $this->app->DB->Select("SELECT abweichendebezeichnung FROM $dokument WHERE id='$dokumentid' LIMIT 1"); + if($abweichend>0 && !preg_match('/_Abweichend/',$subjekt)) + { + $text = $this->GetGeschaeftsBriefText($subjekt."_Abweichend",$sprache,$projekt,$dokument,$dokumentid); + }else{ + $text = ''; + } + + + + if($text=='') + { + if($sprache==''){ + $sprache = 'deutsch'; + } + + if($projekt > 0){ + $text = $this->app->DB->Select("SELECT text FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' AND projekt='$projekt' LIMIT 1"); + } + + if($text == ''){ + $text = $this->app->DB->Select("SELECT text FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' AND (projekt='0' OR projekt='') LIMIT 1"); + } + + if($text == ''){ + $text = $this->app->DB->Select("SELECT text FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' LIMIT 1"); + } + + if($text == ''){ + $text = $this->app->DB->Select("SELECT text FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' LIMIT 1"); + } + } + + $text = str_replace('{FIRMA}',$this->Firmendaten("name"),$text); + + return $text; + } + + //@refactor Geschaeftsbrief_vorlagen Modul + function GetGeschaeftsBriefBetreff($subjekt,$sprache="",$projekt="",$dokument="",$dokumentid=0) + { + + $abweichend = $this->app->DB->Select("SELECT abweichendebezeichnung FROM $dokument WHERE id='$dokumentid' LIMIT 1"); + if($abweichend>0 && !preg_match('/_Abweichend/',$subjekt)) + { + $text = $this->GetGeschaeftsBriefBetreff($subjekt."_Abweichend",$sprache,$projekt,$dokument,$dokumentid); + } + + if($text=="") + { + if($sprache=="") + $sprache = "deutsch"; + + if($projekt > 0) + $text = $this->app->DB->Select("SELECT betreff FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' AND projekt='$projekt' LIMIT 1"); + + if($text == "") + $text = $this->app->DB->Select("SELECT betreff FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' AND (projekt='0' OR projekt='') LIMIT 1"); + + if($text == "") + $text = $this->app->DB->Select("SELECT betreff FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' LIMIT 1"); + + if($text == "") + $text = $this->app->DB->Select("SELECT betreff FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' LIMIT 1"); + } + + $text = str_replace('{FIRMA}',$this->Firmendaten("name"),$text); + return $text; + } + + //@refactor Geschaeftsbrief_vorlagen Modul + function GetGeschaeftsBriefID($subjekt,$sprache="",$projekt="") + { + + if($sprache=="") + $sprache = "deutsch"; + + if($projekt > 0) + $id = $this->app->DB->Select("SELECT id FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' AND projekt='$projekt' LIMIT 1"); + + if($id == "") + $id = $this->app->DB->Select("SELECT id FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' AND (projekt='0' OR projekt='') LIMIT 1"); + + if($id == "") + $id = $this->app->DB->Select("SELECT id FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND sprache='$sprache' LIMIT 1"); + + if($id == "") + $text = $this->app->DB->Select("SELECT id FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' LIMIT 1"); + + return $id; + } + + + + public function Stornomail($auftrag) + { + if($auftrag > 0){ + $auftragarr = $this->app->DB->SelectRow("SELECT adresse,projekt,email,name,belegnr,keinestornomail,sprache FROM auftrag WHERE id='$auftrag' LIMIT 1"); + } + if(empty($auftragarr)) + { + return; + } + $adresse = $auftragarr['adresse']; + $projekt = $auftragarr['projekt']; + $stornomail = $this->app->DB->Select("SELECT stornomail FROM projekt WHERE id='$projekt' LIMIT 1"); + + // KEINE STORNOMAIL + if($stornomail!=1){ + return; + } + + $to = $auftragarr['email']; + $to_name = $auftragarr['name']; + + $parameter = $auftrag; + + $belegnr = $auftragarr['belegnr']; + $keinestornomail = $auftragarr['keinestornomail']; + + if($belegnr !='' && $keinestornomail==0) + { + $sprache = $auftragarr['sprache']; + if($sprache == '') + { + //$adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$auftrag' LIMIT 1"); + if($adresse > 0){ + $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id = '$adresse' LIMIT 1"); + } + if($sprache == ''){ + $sprache = 'deutsch'; + } + } + + $text = $this->GetGeschaeftsBriefText('Stornierung',$sprache, $projekt,"",$auftrag); + $betreff = $this->GetGeschaeftsBriefBetreff('Stornierung', $sprache,$projekt,"auftrag",$auftrag); + + if($sprache != 'deutsch' && ($text == '' || $betreff == '')) + { + $text = $this->GetGeschaeftsBriefText('Stornierung','deutsch',$projekt,"auftrag",$auftrag); + $betreff = $this->GetGeschaeftsBriefBetreff('Stornierung','deutsch',$projekt,"auftrag",$auftrag); + } + + $text = $this->ParseUserVars('auftrag',$auftrag,$text); + $betreff = $this->ParseUserVars('auftrag',$auftrag,$betreff); + + if($to!='' && $to_name!=''){ + $this->MailSend($this->GetFirmaMail(), $this->GetFirmaAbsender(), $to, $to_name, $betreff, $text, "", $projekt); + } + } + } + + public function ExportlinkZahlungsmail() + { + $exports = $this->app->DB->SelectArr("SELECT * FROM exportlink_sent WHERE mail='0'"); + $cexports = !empty($exports)?count($exports):0; + for($i=0;$i<$cexports;$i++) + //for($i=0;$i<5;$i++) + { + // mail + $adresse = $exports[$i]['adresse']; + $reg= $exports[$i]['reg']; + $artikelid = $exports[$i]['objekt']; + + $to = $this->app->DB->Select("SELECT email FROM adresse WHERE id='$adresse' LIMIT 1"); + $to_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' LIMIT 1"); + $artikel = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikelid' LIMIT 1"); + $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id = '$adresse' LIMIT 1"); + if($sprache == '')$sprache = 'deutsch'; + $projekt=1; + + $text = $this->GetGeschaeftsBriefText('AlternativArtikel',$sprache, $projekt); + $betreff = $this->GetGeschaeftsBriefBetreff('AlternativArtikel', $sprache,$projekt); + + if($sprache != 'deutsch' && ($text == '' || $betreff == '')) + { + $text = $this->GetGeschaeftsBriefText('AlternativArtikel','deutsch',$projekt); + $betreff = $this->GetGeschaeftsBriefBetreff('AlternativArtikel','deutsch',$projekt); + } + + $betreff = str_replace('[ARTIKEL]',$artikel,$betreff); + $text= str_replace('[ARTIKEL]',$artikel,$text); + $text = str_replace('[AUFTRAG]',$auftrag,$text); + + $text = str_replace('[REG]',$reg,$text); + + + $this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$to,$to_name,$betreff,$text,"",$projekt); + echo $to_name." <".$to.">\r\n"; + + $this->app->DB->Update("UPDATE exportlink_sent SET mail=1 WHERE reg='$reg' LIMIT 1"); + + } + } + + + public function AuftragZahlungsmail($id='',$force=0) + { + if(!is_numeric($id)){ + $id = $this->app->Secure->GetGET('id'); + } + else { + $intern=1; + } + if($id > 0) + { + $auftragarr = $this->app->DB->SelectRow("SELECT belegnr,adresse,gesamtsumme,projekt FROM auftrag WHERE id='$id' LIMIT 1"); + } + if(!empty($auftragarr)){ + + $belegnr = $auftragarr['belegnr']; + $adresse = $auftragarr['adresse']; + + $summeimauftrag = 0; + $auftragssumme = $auftragarr['gesamtsumme']; + $projekt = $auftragarr['projekt']; + if($projekt > 0 && $auftragssumme > 0){ + $projektarr = $this->app->DB->SelectRow("SELECT zahlungserinnerung,zahlungsmailbedinungen FROM projekt WHERE id='$projekt' LIMIT 1"); + } + if(!empty($projektarr)) + { + $zahlungsmail = $projektarr['zahlungserinnerung']; + if($zahlungsmail){ + $zahlungsmailbedinungen = $projektarr['zahlungsmailbedinungen']; + + // sind vorbedingungen erfuellt? + $vorbedinungen = 0; + + + if(preg_match('/lager_ok/', $zahlungsmailbedinungen)){ + $lager_ok = $this->app->DB->Select("SELECT lager_ok FROM auftrag WHERE id='$id' LIMIT 1"); + if($lager_ok == 0) + $vorbedinungen++; + } + + // Kundencheck + if(preg_match('/check_ok/', $zahlungsmailbedinungen)){ + $check_ok = $this->app->DB->Select("SELECT check_ok FROM auftrag WHERE id='$id' LIMIT 1"); + if($check_ok == 0) + $vorbedinungen++; + } + + //echo "zahlungsmail $zahlungsmail $vorbedinungen $auftragssumme $belegnr\r\n "; + if(($zahlungsmail > 0) && ($vorbedinungen == 0) && ($auftragssumme > 0) && ($id > 0)){ + //echo "verschickt"; + $this->Zahlungsmail($adresse, $auftragssumme - $summeimauftrag, $id, $force); + } + } + } + } + + if($intern!=1) + { + header("Location: index.php?module=auftrag&action=edit&id=$id"); + exit; + } + } + + + function KalenderMail($event,$betreff="",$text="",$emailcc="") + { + /** @var Kalender $obj */ + $obj = $this->LoadModul('kalender'); + if(!empty($obj) && method_exists($obj,'KalenderMail')) + { + return $obj->KalenderMail($event,$betreff,$text,$emailcc); + } + } + + + function AufgabenMail($aufgabe,$vorabankuendigung=false) + { + /** @var Aufgaben $obj */ + $obj = $this->LoadModul('aufgaben'); + if(!empty($obj) && method_exists($obj,'sendAufgabenMail')) + { + return $obj->sendAufgabenMail($aufgabe,$vorabankuendigung); + } + } + + + function Zahlungsmail($adresse,$rest="",$auftragid="",$force=0) + { + if(!is_numeric($auftragid)) + return; + + $to = $this->app->DB->Select("SELECT email FROM auftrag WHERE id='$auftragid' LIMIT 1"); + $to_name = $this->app->DB->Select("SELECT name FROM auftrag WHERE id='$auftragid' LIMIT 1"); + + //$to = ""; //DEBUG + $belegnr = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$auftragid' LIMIT 1"); + $internetnummer = $this->app->DB->Select("SELECT internet FROM auftrag WHERE id='$auftragid' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$auftragid' LIMIT 1"); + $zahlungsmail = $this->app->DB->Select("SELECT zahlungserinnerung FROM projekt WHERE id='$projekt' LIMIT 1"); + $zahlungsmailcounter = (int)$this->app->DB->Select("SELECT zahlungsmailcounter FROM auftrag WHERE id='$auftragid' LIMIT 1"); + $check_adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$auftragid' LIMIT 1"); + + $sprache = $this->app->DB->Select("SELECT sprache FROM auftrag WHERE id = '$auftragid' LIMIT 1"); + if($sprache == '') + { + $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$auftragid' LIMIT 1"); + $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id = '$adresse' LIMIT 1"); + if($sprache == '')$sprache = 'deutsch'; + } + // wenn der auftrag dem Kunden nicht gehört + //if($adresse!=$check_adresse) return; + + $gesamt = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftragid' LIMIT 1"); + $zahlungok = false; + if($rest!="") + { + + //Falls projekt mail vorhanden sonst globalen firmen standard + if($gesamt-$rest==0) + { + $text = $this->GetGeschaeftsBriefText('ZahlungMiss',$sprache,$projekt,"auftrag",$auftragid); + $betreff = $this->GetGeschaeftsBriefBetreff('ZahlungMiss',$sprache,$projekt,"auftrag",$auftragid); + if($sprache != 'deutsch' && ($text == '' || $betreff == '')) + { + $text = $this->GetGeschaeftsBriefText('ZahlungMiss','deutsch',$projekt,"auftrag",$auftragid); + $betreff = $this->GetGeschaeftsBriefBetreff('ZahlungMiss','deutsch',$projekt,"auftrag",$auftragid); + } + } else { + $text = $this->GetGeschaeftsBriefText('ZahlungDiff',$sprache,$projekt,"auftrag",$auftragid); + $betreff = $this->GetGeschaeftsBriefBetreff('ZahlungDiff',$sprache,$projekt,"auftrag",$auftragid); + if($sprache != 'deutsch' && ($text == '' || $betreff == '')) + { + $text = $this->GetGeschaeftsBriefText('ZahlungDiff','deutsch',$projekt,"auftrag",$auftragid); + $betreff = $this->GetGeschaeftsBriefBetreff('ZahlungDiff','deutsch',$projekt,"auftrag",$auftragid); + } + } + + $rest = number_format($rest, 2, ',', '.'); + + $text= str_replace('{REST}',$rest,$text); + $betreff = str_replace('{FIRMA}',$this->Firmendaten("name"),$betreff); + $text = str_replace('{FIRMA}',$this->Firmendaten("name"),$text); + + + + if($internetnummer>0) + $text= str_replace('{AUFTRAG}',$internetnummer,$text); + else + $text= str_replace('{AUFTRAG}',$belegnr,$text); + + $text= str_replace('{INTERNET}',$internetnummer,$text); + + $text= str_replace('{GESAMT}',$this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftragid' LIMIT 1"),$text); + $gesamtsummecheck = $rest; + $text= str_replace('{DATUM}',$this->app->DB->Select("SELECT DATE_FORMAT(datum,'%d.%m.%Y') FROM auftrag WHERE id='$auftragid' LIMIT 1"),$text); + + } else + { + //TODO nette mail wenn kunde keine vorkasse macht, warum er das nicht macht etc. + $zahlungok = true; + $text = $this->GetGeschaeftsBriefText('ZahlungOK',$sprache,$projekt,"auftrag",$auftragid); + $betreff = $this->GetGeschaeftsBriefBetreff('ZahlungOK',$sprache,$projekt); + if($sprache != 'deutsch' && ($text == '' || $betreff == '')) + { + $text = $this->GetGeschaeftsBriefText('ZahlungOK','deutsch',$projekt,"auftrag",$auftragid); + $betreff = $this->GetGeschaeftsBriefBetreff('ZahlungOK','deutsch',$projekt,"auftrag",$auftragid); + } + + $gesamtsumme = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftragid' LIMIT 1"); + + $text= str_replace('{AUFTRAG}',$belegnr,$text); + $betreff= str_replace('{AUFTRAG}',$belegnr,$betreff); + $text= str_replace('{GESAMT}',$gesamtsumme,$text); + $betreff= str_replace('{GESAMT}',$gesamtsumme,$betreff); + $gesamtsummecheck = $gesamtsumme; + $text= str_replace('{DATUM}',$this->app->DB->Select("SELECT DATE_FORMAT(datum,'%d.%m.%Y') FROM kontoauszuege_zahlungseingang WHERE objekt='auftrag' AND parameter='$auftragid' LIMIT 1"),$text); + $betreff= str_replace('{DATUM}',$this->app->DB->Select("SELECT DATE_FORMAT(datum,'%d.%m.%Y') FROM kontoauszuege_zahlungseingang WHERE objekt='auftrag' AND parameter='$auftragid' LIMIT 1"),$betreff); + $zahlungok = true; + } + + $text = $this->ParseUserVars("auftrag",$auftragid,$text); + $betreff = $this->ParseUserVars("auftrag",$auftragid,$betreff); + + $mahnwesen_erinnerungsmail = (String)$this->app->erp->GetKonfiguration("mahnwesen_erinnerungsmail"); + if($mahnwesen_erinnerungsmail === '') + { + $mahnwesen_erinnerungsmail = 1; + } + $mahnwesen_klaerungsmail = (String)$this->app->erp->GetKonfiguration("mahnwesen_klaerungsmail"); + if($mahnwesen_klaerungsmail === '') + { + $mahnwesen_klaerungsmail = 1; + } + $mahnwesen_skontomail = (String)$this->app->erp->GetKonfiguration("mahnwesen_skontomail"); + if($mahnwesen_skontomail === '') + { + $mahnwesen_skontomail = 1; + } + + $mahnwesen_zahlungserinnerungtage = (String)$this->app->erp->GetKonfiguration("mahnwesen_zahlungserinnerungtage"); + if($mahnwesen_zahlungserinnerungtage === '') + { + $mahnwesen_zahlungserinnerungtage = 6; + } + $mahnwesen_klaerungsmailtage = (String)$this->app->erp->GetKonfiguration("mahnwesen_klaerungsmailtage"); + if($mahnwesen_klaerungsmailtage === '') + { + $mahnwesen_klaerungsmailtage = 11; + } + + $zahlungsmailauftrag = $this->app->DB->Select("SELECT zahlungsmail FROM auftrag WHERE id='$auftragid' LIMIT 1"); + + if($zahlungsmailauftrag=="") $zahlungsmailauftrag = "0000-00-00"; + + if($zahlungsmailauftrag == "0000-00-00") { + $tmpzahlungsmailauftrag = $this->app->DB->Select("SELECT datum FROM auftrag WHERE id='$auftragid' LIMIT 1"); + } else { + $tmpzahlungsmailauftrag = $zahlungsmailauftrag; + } + + //$tage = ceil((mktime($zahlungsmailauftrag) - time())/60/60/24); + $tage = $this->app->DB->Select("SELECT DATEDIFF(NOW(),'$tmpzahlungsmailauftrag')"); + $schwelle = (String)$this->app->erp->GetKonfiguration("mahnwesen_schwelle"); + if($schwelle === '') + { + $schwelle = 1; + } + $schwelle = (float)str_replace(',','.',$schwelle); + if($schwelle < 0)$schwelle = 0; + + if( + $to!="" && + $to_name!="" && + $zahlungsmail=="1" && + ( + $tage > $mahnwesen_klaerungsmailtage || + $tage > $mahnwesen_zahlungserinnerungtage || + $tmpzahlungsmailauftrag=="0000-00-00" || + ($zahlungok && $zahlungsmailauftrag != '00000-00-00') || + $force==1 + ) + ) + { + $zahlungsmailcounter++; + $this->app->DB->Update("UPDATE auftrag SET zahlungsmail=NOW(),zahlungsmailcounter='$zahlungsmailcounter' WHERE id='$auftragid' LIMIT 1"); + // wenn differenz groesser als ein EUR + if($gesamtsummecheck>=$schwelle)// && $zahlungsmailcounter > 1) + { + if($zahlungok && $zahlungsmailauftrag != '00000-00-00')$zahlungsmailcounter--; + if($zahlungsmailcounter<2) + { + if($mahnwesen_erinnerungsmail){ + $this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$to,$to_name,$betreff,$text,"",$projekt); + $this->DokumentCreateQuick($adresse,$betreff,$text,$projekt); + } + } + // automatisch Reservierungen entfernen + elseif(!$zahlungok) { + if($tage > $mahnwesen_klaerungsmailtage) { + if($mahnwesen_klaerungsmail){ + $this->MailSend($this->GetFirmaMail(), $this->GetFirmaAbsender(), + $this->GetFirmaMail(), "Buchhaltung", "Meldung fuer Buchhaltung: Offenen Auftrag $belegnr klären oder stornieren", $text, "", $projekt); + } + $this->app->DB->Update("UPDATE auftrag SET zahlungsmail=NOW(),zahlungsmailcounter='3' WHERE id='$auftragid' LIMIT 1"); + }else{ + $this->app->DB->Update("UPDATE auftrag SET zahlungsmail=NOW(),zahlungsmailcounter='1' WHERE id='$auftragid' LIMIT 1"); + } + } + } + else { + if($mahnwesen_skontomail)$this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$this->GetFirmaMail(),"Buchhaltung","Meldung fuer Buchhaltung: Bitte Skonto geben",$text,"",$projekt); + } + } + + } + + + public function Rechnungsmail($id, $fromautoversand = true) + { + if(!$id){ + return; + } + + $rechnungarr = $this->app->DB->SelectRow( + "SELECT adresse, email, name,belegnr,projekt,sprache,schreibschutz,zuarchivieren + FROM rechnung WHERE id='$id' LIMIT 1" + ); + if(empty($rechnungarr)) { + return; + } + if(!empty($rechnungarr['schreibschutz']) && !empty($rechnungarr['zuarchivieren'])) { + $this->app->erp->PDFArchivieren('rechnung', $id, true); + } + $adresse = $rechnungarr['adresse']; + $to = $rechnungarr['email']; + $to_name = $rechnungarr['name']; + $belegnr = $rechnungarr['belegnr']; + $projekt = $rechnungarr['projekt']; + + $sprache = $rechnungarr['sprache']; + if($sprache=='' && $adresse > 0) { + $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1"); + } + + if($sprache==''){ + $sprache='deutsch'; + } + + $text = $this->GetGeschaeftsBriefText('Rechnung',$sprache,$projekt,"rechnung",$id); + $betreff = $this->GetGeschaeftsBriefBetreff('Rechnung',$sprache,$projekt,"rechnung",$id); + $this->GeschaeftsBriefAnhang('Rechnung',$sprache,$projekt,"rechnung",$id); + if((String)$text === '' && $sprache !== 'deutsch') + { + $sprache = 'deutsch'; + $text = $this->GetGeschaeftsBriefText('Rechnung',$sprache,$projekt,"rechnung",$id); + $betreff = $this->GetGeschaeftsBriefBetreff('Rechnung',$sprache,$projekt,"rechnung",$id); + } + + $text = $this->ParseUserVars('rechnung',$id,$text); // heute mal wieder rein 21.12.2017 BS + $betreff = $this->ParseUserVars('rechnung',$id,$betreff); // 19.01.2018 eingefuegt BW + if($id > 0) + { + $this->app->erp->BriefpapierHintergrunddisable = false; + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projekt); + }else{ + $Brief = new RechnungPDF($this->app,$projekt); + } + $Brief->GetRechnung($id); + $arrtmpfile[] = $Brief->displayTMP(); + + if(!$Brief->DocumentArchiviert()) { + $Brief->ArchiviereDocument(true, true); + } + + $md5arr[] = @md5_file($arrtmpfile[count($arrtmpfile)-1]); + // anhaenge automatisch mitversenden + $resultdateien = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE objekt LIKE 'Rechnung' AND parameter='$id'"); + $cResultdateien = !empty($resultdateien)?count($resultdateien):0; + for($ri=0;$ri<$cResultdateien;$ri++) + { + $dateiname = str_replace(' ','_',$this->app->erp->GetDateiName($resultdateien[$ri]['datei'])); + if($dateiname) + { + $dateiinhalt = $this->app->erp->GetDatei($resultdateien[$ri]['datei']); + if($handle = fopen (rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname, "wb")) + { + fwrite($handle, $dateiinhalt); + fclose($handle); + if(!in_array(rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname, $arrtmpfile)) + { + $md5tmp = @md5_file(rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname); + if(!in_array($md5tmp, $md5arr)) + { + $md5arr[] = $md5tmp; + $arrtmpfile[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname; + } + } + } + } + } + + //$this->DokumentSendShow(TAB1,"rechnung",$rechnung,$adresse); + // temp datei wieder loeschen + + if($to != '') + { + $result = $this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$to,$to_name,$betreff,$text,$arrtmpfile,$projekt); + $this->DokumentCreateQuick($adresse,$betreff,$text,$projekt); + }else{ + $result = false; + } + //$tmpfilearray = array($arrtmpfile); + $this->RunHook('rechnungsmail',5, $id,$betreff,$text,$arrtmpfile, $fromautoversand); + $rechnung_cc = $this->app->DB->Select("SELECT rechnung_cc FROM adresse WHERE id = '$adresse' LIMIT 1"); + if($rechnung_cc != '') + { + $this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$rechnung_cc,$to_name,$betreff,$text,$arrtmpfile,$projekt); + } + + foreach($arrtmpfile as $key=>$_tmpfile) { + unlink($_tmpfile); + } + + $betreff = $this->app->DB->real_escape_string($betreff); + $text = $this->app->DB->real_escape_string($text); + $to_name = $this->app->DB->real_escape_string($to_name); + // als versendet markieren + $this->closeInvoice($id); + //$this->app->DB->Update("UPDATE rechnung SET status='versendet', versendet='1',schreibschutz='1' WHERE id='$id' LIMIT 1"); + if($result) + { + $this->RechnungProtokoll($id,'Rechnung versendet'); + + $betreff = $this->app->DB->real_escape_string($betreff); + $text = $this->app->DB->real_escape_string($text); + $to_name = $this->app->DB->real_escape_string($to_name); + // als versendet markieren + $this->app->DB->Update("UPDATE rechnung SET versendet='1',schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE rechnung SET status='versendet' WHERE status!='storniert' AND id='$id' LIMIT 1"); + + $this->app->DB->Insert("INSERT INTO dokumente_send + (dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet,dateiid) VALUES ('rechnung',NOW(),'".$this->app->User->GetName()."', + '$adresse','$id','email','$betreff','$text','$projekt','$to_name',1,'0')"); + } + } + } + + public function closeInvoice($invoiceId, $status = '') + { + $invoiceArr = $this->app->DB->SelectRow(sprintf('SELECT status FROM rechnung WHERE id = %d', $invoiceId)); + if(empty($invoiceArr) || (!empty($status) && $status !== $invoiceArr['status'])) + { + return; + } + if($invoiceArr['status'] !== 'versendet') + { + $this->RunHook('closeInvoice',1, $invoiceId); + } + $this->app->DB->Update(sprintf("UPDATE rechnung SET versendet=1,schreibschutz=1 WHERE id=%d LIMIT 1",$invoiceId)); + $this->app->DB->Update(sprintf("UPDATE rechnung SET status='versendet' WHERE status!='storniert' AND id=%d LIMIT 1",$invoiceId)); + } + + function DokumentAbschicken() + { + $id = $this->app->Secure->GetGET('id'); + $cmd = $this->app->Secure->GetGET("cmd"); + $sid = $this->app->Secure->GetGET("sid"); + + $type = $this->app->Secure->GetGET("type"); + if($cmd=="getvorlage") + { + $doc = $this->app->DB->SelectRow("SELECT sprache, projekt, abweichendebezeichnung FROM $type WHERE id='$sid' LIMIT 1"); + $data = $this->app->erp->Geschaeftsbriefvorlage($doc['sprache'],$type,$doc['projekt'],"Angebot".($doc['abweichendebezeichnung']=="1"?'_Abweichend':''),$sid); + + $footer = $this->Grussformel($doc['projekt'],$doc['sprache']); + if($footer!="") $data['text'] = $data['text']."\r\n".$footer; + + + if(!empty($data)) + { + echo json_encode(array('subject'=>$data['betreff'],'body'=>$data['text'],'status'=>1)); + } else { + echo json_encode(array('status'=>0)); + } + $this->app->ExitXentral(); + } + + $frame = $this->app->Secure->GetGET('frame'); + + $typ = $this->app->Secure->GetGET('module'); + if($frame!='') + { + echo ""; + $this->app->ExitXentral(); + } + + $this->app->BuildNavigation=false; + $this->app->Tpl->Set('TABTEXT',"Abschicken"); + $docRow = $this->app->DB->SelectRow( + sprintf( + 'SELECT status, adresse, projekt FROM `%s` WHERE id=%d LIMIT 1', + $typ, (int)$id + ) + ); + $status = $docRow['status']; + $adresse = $docRow['adresse']; + $projekt = $docRow['projekt']; + + if($projekt=='' || $projekt==0){ + $projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$adresse' LIMIT 1"); + } + + if($status !=='angelegt') + { + $this->DokumentMask('TAB1',$typ,$id,$adresse,$projekt); + } else + { + switch($typ) + { + case "rechnung": $this->app->Tpl->Set('TAB1',"
Die Rechnung wurde noch nicht freigegeben!
"); break; + case "angebot": $this->app->Tpl->Set('TAB1',"
Das Angebot wurde noch nicht freigegeben!
"); break; + case "auftrag": $this->app->Tpl->Set('TAB1',"
Der Auftrag wurde noch nicht freigegeben!
"); break; + case "lieferschein": $this->app->Tpl->Set('TAB1',"
Der Lieferschein wurde noch nicht freigegeben!
"); break; + case "retoure": $this->app->Tpl->Set('TAB1',"
Die Retoure wurde noch nicht freigegeben!
"); break; + case "bestellung": $this->app->Tpl->Set('TAB1',"
Die Bestellung wurde noch nicht freigegeben!
"); break; + case "gutschrift": $this->app->Tpl->Set('TAB1',"
Die Gutschrift wurde noch nicht freigegeben!
"); break; + case "arbeitsnachweis": $this->app->Tpl->Set('TAB1',"
Der Arbeitsnachweis wurde noch nicht freigegeben!
"); break; + case "preisanfrage": $this->app->Tpl->Set('TAB1',"
Die Preisanfrage wurde noch nicht freigegeben!
"); break; + case "proformarechnung": $this->app->Tpl->Set('TAB1',"
Die Proformarechnung wurde noch nicht freigegeben!
"); break; + case "produktion": $this->app->Tpl->Set('TAB1',"
Die Produktion wurde noch nicht freigegeben!
"); break; + } + $target = 'TAB1'; + $this->RunHook('DokumentAbschickenMeldungAngelegt', 3, $typ, $id, $target); + } + $this->app->Tpl->Set('ID',$id); + $this->app->Tpl->Parse('PAGE','emptytab.tpl'); + } + + /** + * @param int $id + * + * @return string + * + */ + public function GetTrackingRawLink($id) + { + return $this->GetTrackinglink($id, true); + } + + /** + * @param int $id + * @param bool $returnRaw + * + * @return string + */ + public function GetTrackinglink($id, $returnRaw = false) + { + if($id > 0) + { + $versandarr = $this->app->DB->SelectRow("SELECT * FROM versand WHERE id='$id' LIMIT 1"); + } + if(empty($versandarr)) + { + return ''; + } + $adresse = $versandarr['adresse']; + $lieferscheinid = $versandarr['lieferschein']; + if($lieferscheinid > 0){ + $lieferscheinarr = $this->app->DB->SelectRow("SELECT auftragid,projekt FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1"); + } + if(!empty($lieferscheinarr)) + { + $auftrag = $lieferscheinarr['auftragid']; + $projekt = $lieferscheinarr['projekt']; + }else{ + $auftrag = 0; + $projekt = 0; + } + $auftragarr = $this->app->DB->SelectRow("SELECT belegnr,internet,ihrebestellnummer,DATE_FORMAT(datum,'%d.%m.%Y') as datum_de FROM auftrag WHERE id='$auftrag' LIMIT 1"); + if(!empty($auftragarr)){ + $auftragbelegnr = $auftragarr['belegnr']; + $auftraginternet = $auftragarr['internet']; + $ihrebestellnummer = $auftragarr['ihrebestellnummer']; + $auftragdatum = $auftragarr['datum_de']; + }else{ + $auftragbelegnr = ''; + $auftraginternet = ''; + $ihrebestellnummer = ''; + $auftragdatum = ''; + } + + $tracking = $versandarr['tracking']; + $versandunternehmen = $versandarr['versandunternehmen']; + + // FIX fuer selbstabholer Mail + $versandart = $versandarr['versandart']; + if($versandart=='selbstabholer') { + $versandunternehmen='selbstabholer'; + } + + if($versandunternehmen=='dhl' || $versandunternehmen=="dhlpremium" || $versandunternehmen=="intraship"){ + $versandmodul = false; + } + + $typ = $versandunternehmen; + if($typ === ''){ + $typ = $versandart; + } + //$versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul FROM versanddienstleister WHERE aktiv = 1 AND modul = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); + $versandartenmodul = $this->app->DB->SelectArr("SELECT * FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND modul != '' AND type = '".$this->app->DB->real_escape_string($typ)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); + $standard = true; + if($versandartenmodul && @is_file(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) + { + $obj = $this->LoadVersandModul($versandartenmodul[0]['modul'], $versandartenmodul[0]['id']); + if(!empty($obj) && method_exists($obj, 'Trackinglink')) + { + if($obj->Trackinglink($tracking, $notsend, $link, $rawlink)) + { + if($returnRaw) { + return $rawlink; + } + return $link; + } + } + }elseif($versandartenmodul2 = $this->app->DB->SelectArr("SELECT * FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND type = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1")) + { + $obj = $this->LoadVersandModul($versandartenmodul2[0]['modul'], $versandartenmodul2[0]['id']); + if(!empty($obj) && method_exists($obj, 'Trackinglink')) + { + if($obj->Trackinglink($tracking, $notsend, $link, $rawlink)) + { + if($returnRaw) { + return $rawlink; + } + return $link; + } + } + } + if(!$versandmodul && $standard) + { + if($versandunternehmen=="dhl" || $versandunternehmen=="dhlpremium" || $versandunternehmen=="intraship") + { + return 'http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc='.$tracking; + } + else if ($versandunternehmen=="logoix") + { + return 'http://www.logoix.com/cgi-bin/tnt.pl?q='.$tracking; + } + else if ($versandunternehmen=="dpd") + { + return 'https://tracking.dpd.de/parcelstatus/?locale=de_DE&query='.$tracking; + } + else if ($versandunternehmen=="gls") + { + return 'https://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DE03/DE/5004.htm?txtRefNo='.$tracking; + } + } + } + + /** + * @param int $id + */ + public function VersandAbschluss($id) + { + if($id > 0) { + $versandarr = $this->app->DB->SelectRow("SELECT * FROM versand WHERE id='$id' LIMIT 1"); + } + if(empty($versandarr)) { + return; + } + $adresse = $versandarr['adresse']; + $lieferscheinid = $versandarr['lieferschein']; + $rechnung = $versandarr['rechnung']; + + $rechnungarr = $rechnung <=0?null: $this->app->DB->SelectRow( + "SELECT zahlungsweise,projekt FROM rechnung WHERE id='$rechnung' LIMIT 1" + ); + + $rechnung_zahlweise = empty($rechnungarr)?'':$rechnungarr['zahlungsweise']; + $rechnung_projekt = empty($rechnungarr)?0:$rechnungarr['projekt']; + + $lieferscheinarr = $lieferscheinid <= 0?null: $this->app->DB->SelectRow( + "SELECT auftragid,projekt FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1" + ); + + $auftrag = empty($lieferscheinarr)?0: $this->app->DB->Select( + "SELECT auftragid FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1" + ); + + $auftragarr = $auftrag <= 0?null:$this->app->DB->SelectRow( + "SELECT * FROM auftrag WHERE id='$auftrag' LIMIT 1" + ); + + if(!$rechnung && $auftrag) { + //Fallback Zahlungsweise auf Auftrag + $rechnung_zahlweise = $auftragarr['zahlungsweise']; + $rechnung_projekt = $auftragarr['projekt']; + } + + $auftragbelegnr = empty($auftragarr)?'': $auftragarr['belegnr']; + $auftraginternet = empty($auftragarr)?'':$auftragarr['internet']; + $ihrebestellnummer = empty($auftragarr)?'':$auftragarr['ihrebestellnummer']; + + $projekt = empty($lieferscheinarr)?0: $lieferscheinarr['projekt']; + + // wenn shop dann rueckmelden + $shop = empty($auftragarr)?0:$auftragarr['shop']; + + $auftragabgleich = $shop <= 0?0: $this->app->DB->Select( + "SELECT auftragabgleich FROM shopexport WHERE id='$shop' LIMIT 1" + ); + + //Reservierungen löschen + if($lieferscheinid>0) { + $this->app->DB->Delete( + "DELETE FROM lager_reserviert WHERE objekt='lieferschein' AND parameter='$lieferscheinid'" + ); + } + if($auftrag <= 0) { + return; + } + + $this->app->DB->Delete( + "DELETE FROM lager_reserviert WHERE objekt='auftrag' AND parameter='$auftrag'" + ); + + if($shop > 0 && $auftragabgleich=='1') { + try { + $this->app->remote->RemoteUpdateAuftrag($shop, $auftrag); + } + catch(Exception $e) { + $this->AuftragProtokoll($auftag, 'Shoprückmeldung fehlgeschlagen'); + } + } + + try { + $this->sendPaymentStatus($id, $rechnung_zahlweise, $auftrag, $projekt, $rechnung_projekt); + } + catch(Exception $e) { + + } + } + + /** + * @param int $id VersandId + * @param string|null $rechnung_zahlweise + * @param int|null $auftrag + * @param int|null $projekt DeliveryNote ProjectId + * @param int|null $rechnung_projekt + */ + public function sendPaymentStatus( + $id, + $rechnung_zahlweise = null, + $auftrag = null, + $projekt = null, + $rechnung_projekt = null + ) + { + if($auftrag === null) { + $versandarr = $this->app->DB->SelectRow( + sprintf( + 'SELECT rechnung,lieferschein FROM versand WHERE id = %d', + $id + ) + ); + $lieferscheinid = $versandarr['lieferschein']; + $rechnung = $versandarr['rechnung']; + + $rechnungarr = $rechnung <=0?null: $this->app->DB->SelectRow( + "SELECT zahlungsweise,projekt FROM rechnung WHERE id='$rechnung' LIMIT 1" + ); + + $rechnung_zahlweise = empty($rechnungarr)?'':$rechnungarr['zahlungsweise']; + $rechnung_projekt = empty($rechnungarr)?0:$rechnungarr['projekt']; + + $lieferscheinarr = $lieferscheinid <= 0?null: $this->app->DB->SelectRow( + "SELECT auftragid,projekt FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1" + ); + + $auftrag = empty($lieferscheinarr)?0: $this->app->DB->Select( + "SELECT auftragid FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1" + ); + + $auftragarr = $auftrag <= 0?null:$this->app->DB->SelectRow( + "SELECT * FROM auftrag WHERE id='$auftrag' LIMIT 1" + ); + + if(!$rechnung && $auftrag) { + //Fallback Zahlungsweise auf Auftrag + $rechnung_zahlweise = $auftragarr['zahlungsweise']; + $rechnung_projekt = $auftragarr['projekt']; + } + } + if(empty($rechnung_zahlweise)) { + return; + } + try { + if($zahlungsweisenmodule = $this->app->DB->SelectArr( + "SELECT id, modul + FROM zahlungsweisen + WHERE type = '" . $this->app->DB->real_escape_string($rechnung_zahlweise) . "' AND modul <> '' + AND (projekt = '$projekt' OR projekt = 0) + ORDER BY projekt = '$projekt' DESC + LIMIT 1 + ")){ + foreach ($zahlungsweisenmodule as $zahlungsweisenmodul) { + $_zahlungsweisenmodul = preg_replace('/[^a-zA-Z0-9\_]/', '', $zahlungsweisenmodul['modul']); + if(!$_zahlungsweisenmodul){ + continue; + } + if(!file_exists(__DIR__ . '/zahlungsweisen/' . $_zahlungsweisenmodul . '.php')){ + continue; + } + + $class = 'Zahlungsweise_' . $_zahlungsweisenmodul; + if(!class_exists($class)){ + include_once __DIR__ . '/zahlungsweisen/' . $_zahlungsweisenmodul . '.php'; + } + if(!class_exists($class)){ + continue; + } + + $obj = new $class($this->app, $zahlungsweisenmodul['id']); + if($obj && method_exists($obj, 'ZahlungFreigeben')){ + $obj->ZahlungFreigeben($auftrag, $id); + } + return; + } + } + } + catch(Exception $e) { + + } + } + + public function Versandmail($id, $tracking_link = null, $sprache = null, $tracking = '', $forceautoversand = false, $autoversand = true) + { + // $text = $this->app->DB->Select("SELECT text FROM geschaeftsbrief_vorlagen WHERE subjekt='Versand' AND sprache='deutsch' LIMIT 1"); + // $betreff = $this->app->DB->Select("SELECT betreff FROM geschaeftsbrief_vorlagen WHERE subjekt='Versand' AND sprache='deutsch' LIMIT 1"); + + if($id > 0){ + $versandarr = $this->app->DB->SelectRow("SELECT * FROM versand WHERE id='$id' LIMIT 1"); + } + if(empty($versandarr)) + { + return; + } + $adresse = $versandarr['adresse']; + if($adresse > 0) + { + $adressearr = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id = $adresse LIMIT 1"); + } + + $lieferscheinid = $versandarr['lieferschein']; + if($lieferscheinid > 0){ + $lieferscheinarr = $this->app->DB->SelectRow("SELECT * FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1"); + } + if(!empty($lieferscheinarr)){ + $auftrag = $lieferscheinarr['auftragid']; + }else{ + $auftrag = 0; + } + if($auftrag > 0) + { + $auftragarr = $this->app->DB->SelectRow("SELECT email,name,belegnr,internet,ihrebestellnummer,sprache,DATE_FORMAT(datum,'%d.%m.%Y') as datum_de FROM auftrag WHERE id='$auftrag' LIMIT 1"); + } + if(!empty($auftragarr)) + { + $auftragbelegnr = $auftragarr['belegnr']; + $auftraginternet = $auftragarr['internet']; + $ihrebestellnummer = $auftragarr['ihrebestellnummer']; + + $auftragdatum = $auftragarr['datum_de']; + }else{ + $auftragbelegnr = ''; + $auftraginternet = ''; + $ihrebestellnummer = ''; + $auftragdatum = ''; + } + + if(!empty($lieferscheinarr)){ + $projekt = $lieferscheinarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM lieferschein WHERE id='$lieferscheinid' LIMIT 1"); + }else{ + $projekt = 0; + } + + if(is_null($sprache)){ + if(!empty($auftragarr)){ + $sprache = $auftragarr['sprache']; + }else{ + $sprache = ''; + } + } + + if(!empty($auftragarr)){ + $to = $auftragarr['email']; + $to_name = $auftragarr['name']; + }else{ + $to = ''; + $to_name = ''; + } + + + if($to==''){ + if(!empty($adressearr)){ + $to = $adressearr['email']; + } + } + if($to_name==''){ + if(!empty($adressearr)){ + $to_name = $adressearr['name']; + } + } + + if(!$sprache){ + if(!empty($adressearr)){ + $sprache = $adressearr['sprache']; + } + } + if($sprache == ''){ + $sprache = 'deutsch'; + } + $text = $this->GetGeschaeftsBriefText('Versand',(!is_null($sprache) && $sprache?$sprache:'deutsch'),$projekt); + $betreff = $this->GetGeschaeftsBriefBetreff('Versand',(!is_null($sprache) && $sprache?$sprache:'deutsch'),$projekt); + if(((String)$text === "" || (String)$betreff === '') && (!is_null($sprache) && $sprache?$sprache:'deutsch') != 'deutsch') + { + $text = $this->GetGeschaeftsBriefText('Versand','deutsch',$projekt); + $betreff = $this->GetGeschaeftsBriefBetreff('Versand','deutsch',$projekt); + } + + + // wenn Ansprechpartner + if(!empty($lieferscheinarr)){ + $to_lieferschein_name = $lieferscheinarr['ansprechpartner']; + $to_lieferschein_email = $lieferscheinarr['email']; + }else{ + $to_lieferschein_name = ''; + $to_lieferschein_email = ''; + } + + if($to_lieferschein_email!=''){ + $to = $to_lieferschein_email; + + if($to_lieferschein_name!=''){ + $to_name = $to_lieferschein_name; + } + } + if(!empty($adressearr)){ + $trackingsperre = $adressearr['trackingsperre']; + }else{ + $trackingsperre = 0; + } + + $tracking = $versandarr['tracking']; + $keinetrackingmail = $versandarr['keinetrackingmail']; + $versandunternehmen = $versandarr['versandunternehmen']; + + // FIX fuer selbstabholer Mail + $versandart = $versandarr['versandart']; + if($versandart=='selbstabholer') { + $versandunternehmen='selbstabholer'; + } + + $text = str_replace('{BELEGNR}',$auftragbelegnr,$text); + $betreff = str_replace('{BELEGNR}',$auftragbelegnr,$betreff); + + $text = str_replace('{AUFTRAGDATUM}',$auftragdatum,$text); + $betreff = str_replace('{AUFTRAGDATUM}',$auftragdatum,$betreff); + + + $text = str_replace('{INTERNET}',$auftraginternet,$text); + $betreff = str_replace('{INTERNET}',$auftraginternet,$betreff); + + $text = str_replace('{IHREBESTELLNUMMER}',$ihrebestellnummer,$text); + $betreff = str_replace('{IHREBESTELLNUMMER}',$ihrebestellnummer,$betreff); + if(!is_null($tracking_link) && $tracking_link)$text = str_replace('{VERSAND}',$tracking_link.(($tracking && strpos($tracking_link,$tracking) === false)?' ('.$tracking.')':''),$text); + if($versandunternehmen=="dhl" || $versandunternehmen=="dhlpremium" || $versandunternehmen=="intraship") + $versandmodul = false; + + if(!$this->isHTML($text)){ + $text = str_replace("\r\n", "
", $text); + } + + + $typ = $versandunternehmen; + if($typ === ''){ + $typ = $versandart; + } + //$versandartenmodul = $this->app->DB->SelectArr("SELECT id, modul FROM versanddienstleister WHERE aktiv = 1 AND modul = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); + $versandartenmodul = $this->app->DB->SelectArr("SELECT * FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND modul != '' AND type = '".$this->app->DB->real_escape_string($typ)."' AND modul != '' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1"); + $standard = true; + if($versandartenmodul && @is_file(dirname(__FILE__).'/versandarten/'.$versandartenmodul[0]['modul'].'.php')) + { + if($versandartenmodul[0]['versandmail'] == -1) + { + $notsend = 1; + } + elseif($versandartenmodul[0]['versandmail'] && $versandartenmodul[0]['geschaeftsbrief_vorlage']) + { + $subjekt = $this->app->DB->Select("SELECT subjekt FROM geschaeftsbrief_vorlagen WHERE id = '".$versandartenmodul[0]['geschaeftsbrief_vorlage']."' LIMIT 1"); + $text = $this->GetGeschaeftsBriefText($subjekt,(!is_null($sprache) && $sprache?$sprache:'deutsch'),$projekt); + $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,(!is_null($sprache) && $sprache?$sprache:'deutsch'),$projekt); + if(((String)$text === '' || (String)$betreff === '') && (!is_null($sprache) && $sprache?$sprache:'deutsch') != 'deutsch') + { + $text = $this->GetGeschaeftsBriefText($subjekt,'deutsch',$projekt); + $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,'deutsch',$projekt); + } + $text = str_replace('{BELEGNR}',$auftragbelegnr,$text); + $betreff = str_replace('{BELEGNR}',$auftragbelegnr,$betreff); + + $text = str_replace('{AUFTRAGDATUM}',$auftragdatum,$text); + $betreff = str_replace('{AUFTRAGDATUM}',$auftragdatum,$betreff); + + + $text = str_replace('{INTERNET}',$auftraginternet,$text); + $betreff = str_replace('{INTERNET}',$auftraginternet,$betreff); + + $text = str_replace('{IHREBESTELLNUMMER}',$ihrebestellnummer,$text); + $betreff = str_replace('{IHREBESTELLNUMMER}',$ihrebestellnummer,$betreff); + if(!is_null($tracking_link) && $tracking_link)$text = str_replace('{VERSAND}',$tracking_link.(($tracking && strpos($tracking_link,$tracking) === false)?' ('.$tracking.')':''),$text); + } + $obj = $this->LoadVersandModul($versandartenmodul[0]['modul'], $versandartenmodul[0]['id']); + $class_name = 'Versandart_'.$versandartenmodul[0]['modul']; + if(!empty($obj) && method_exists($obj, 'Trackinglink')) + { + if($obj->Trackinglink($tracking, $notsend, $link, $rawlink)) + { + $versandpakete = $this->app->DB->SelectArr("SELECT tracking FROM versandpakete WHERE versand = '$id' AND tracking <> '' ORDER BY nr"); + if($versandpakete) + { + foreach($versandpakete as $kv => $vv) + { + $obj->Trackinglink($vv['tracking'], $tmpnotsend, $tmplink, $tmprawlink); + $link .= ', '.$vv['tracking'].' ('.$tmprawlink.')'; + $tracking .= ', '.$vv['tracking']; + } + } + + $text = str_replace('{VERSAND}', $link ,$text); + $text = str_replace('{VERSANDTYPE}', $versandartenmodul[0]['type'] ,$text); + $text = str_replace('{VERSANDBEZEICHNUNG}', $versandartenmodul[0]['bezeichnung'] ,$text); + $text = str_replace('{TRACKINGNUMMER}', $tracking,$text); + $versandmodul = true; + } + } + }elseif($versandartenmodul2 = $this->app->DB->SelectArr("SELECT * FROM versandarten WHERE aktiv = 1 AND ausprojekt = 0 AND type = '".$this->app->DB->real_escape_string($typ)."' AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt DESC LIMIT 1")) + { + if($versandartenmodul2[0]['versandmail'] == -1) + { + $notsend = 1; + } + elseif($versandartenmodul2[0]['versandmail'] && $versandartenmodul2[0]['geschaeftsbrief_vorlage']) + { + $standard = false; + $subjekt = $this->app->DB->Select("SELECT subjekt FROM geschaeftsbrief_vorlagen WHERE id = '".$versandartenmodul2[0]['geschaeftsbrief_vorlage']."' LIMIT 1"); + $text = $this->GetGeschaeftsBriefText($subjekt,(!is_null($sprache) && $sprache?$sprache:'deutsch'),$projekt); + $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,(!is_null($sprache) && $sprache?$sprache:'deutsch'),$projekt); + if(((String)$text === "" || (String)$betreff === '') && (!is_null($sprache) && $sprache?$sprache:'deutsch') != 'deutsch') + { + $text = $this->GetGeschaeftsBriefText($subjekt,'deutsch',$projekt); + $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,'deutsch',$projekt); + } + $text = str_replace('{BELEGNR}',$auftragbelegnr,$text); + $betreff = str_replace('{BELEGNR}',$auftragbelegnr,$betreff); + + $text = str_replace('{INTERNET}',$auftraginternet,$text); + $betreff = str_replace('{INTERNET}',$auftraginternet,$betreff); + $text = str_replace('{AUFTRAGDATUM}',$auftragdatum,$text); + $betreff = str_replace('{AUFTRAGDATUM}',$auftragdatum,$betreff); + $text = str_replace('{VERSANDTYPE}', $versandartenmodul2[0]['type'] ,$text); + + $text = str_replace('{IHREBESTELLNUMMER}',$ihrebestellnummer,$text); + $betreff = str_replace('{IHREBESTELLNUMMER}',$ihrebestellnummer,$betreff); + if(!is_null($tracking_link) && $tracking_link)$text = str_replace('{VERSAND}',$tracking_link.(($tracking && strpos($tracking_link,$tracking) === false)?' ('.$tracking.')':''),$text); + $notsend = 0; + } + } + if(!$versandmodul && $standard) + { + if(strtolower($versandunternehmen)=='dhl' || strtolower($versandunternehmen)=='dhlpremium' || strtolower($versandunternehmen)=="intraship") + { + $text = str_replace('{VERSAND}','DHL Versand: '.$tracking.' (http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc='.$tracking.')',$text); + $notsend = 0; + } + else if (strtolower($versandunternehmen)=='logoix') + { + $text = str_replace('{VERSAND}','LogoiX Versand: '.$tracking.' (http://www.logoix.com/cgi-bin/tnt.pl?q='.$tracking.')',$text); + $notsend = 0; + } + else if (strtolower($versandunternehmen)=='dpd') + { + $text = str_replace('{VERSAND}','DPD Versand: '.$tracking.' (https://tracking.dpd.de/parcelstatus/?locale=de_DE&query='.$tracking.')',$text); + $notsend = 0; + } + else if (strtolower($versandunternehmen)=='gls') + { + $text = str_replace('{VERSAND}','GLS Versand: '.$tracking.' (https://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DE03/DE/5004.htm?txtRefNo='.$tracking.'&txtAction=71000 )',$text); + $notsend = 0; + } + else if (strtolower($versandunternehmen)=='rma') + { + $notsend = 1; + } + else if(strtolower($versandunternehmen)=='selbstabholer') + { + $notsend = 0; + // selbstabholer + + $text = $this->GetGeschaeftsBriefText('Selbstabholer',$sprache,$projekt); + $betreff = $this->GetGeschaeftsBriefBetreff('Selbstabholer',$sprache,$projekt); + if(((String)$text === '' || (String)$betreff === '') && $sprache != 'deutsch') + { + $text = $this->GetGeschaeftsBriefText('Selbstabholer','deutsch',$projekt); + $betreff = $this->GetGeschaeftsBriefBetreff('Selbstabholer','deutsch',$projekt); + } + + //$text = $this->app->DB->Select("SELECT text FROM geschaeftsbrief_vorlagen WHERE subjekt='Selbstabholer' AND sprache='deutsch' LIMIT 1"); + $text = str_replace('{VERSAND}','',$text); + + // nur wenn option gesetzt ist + $selbstabholermail = $this->app->DB->Select("SELECT selbstabholermail FROM projekt WHERE id='$projekt' LIMIT 1"); + if($selbstabholermail!='1') { + $notsend = 1; + } + } else { + // bei allen anderen lieferarten keine mail + $notsend = $forceautoversand?0:1; + } + } + + if(!(!$versandmodul && $standard && strtolower($versandunternehmen)=='selbstabholer')) + { + if(!$forceautoversand && $this->Projektdaten($projekt,"automailversandbestaetigung")!='1'){ + $notsend = 1; + } + } + + $text = str_replace('{NAME}',$to_name,$text); + + $text = str_replace('{VERSAND}', '' ,$text); + if(!empty($versandart)){ + $text = str_replace('{VERSANDTYPE}', $versandart, $text); + } + $text = $this->app->erp->ParseUserVars('auftrag',$auftrag,$text); + $betreff = $this->app->erp->ParseUserVars('auftrag',$auftrag,$betreff); + + + if($lieferscheinid > 0) + { + $text = $this->app->erp->ParseUserVars('lieferschein',$lieferscheinid,$text); + $betreff = $this->app->erp->ParseUserVars('lieferschein',$lieferscheinid,$betreff); + } + + if($to!='' && $to_name!='' && $trackingsperre!=1 && $notsend==0 && $keinetrackingmail!=1) + { + $this->MailSend($this->GetFirmaMail(),$this->GetFirmaAbsender(),$to,$to_name,$betreff,$text,"",$projekt); + $this->DokumentCreateQuick($adresse, $betreff, $text, $projekt); + + + $this->app->DB->Insert("INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) values ('$auftrag',now(),'".(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')."','Versandmail verschickt')"); + $dateien = null; + $this->RunHook('versandmail', 5, $auftrag, $betreff, $text, $dateien, $autoversand); + } + } + + + function DokumentCreateQuick($adresse,$betreff,$text,$projekt) + { + $data['adresse'] = $adresse; + $data['betreff'] = $betreff; + $data['content'] = $text; + $data['projekt'] = $projekt; + $this->DokumentCreate($data); + } + + function DokumentCreate($data,$adressefromuser=0) + { + if($adressefromuser > 0) + { + if($data['bearbeiter']=="") $data['bearbeiter'] = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adressefromuser' AND id > 0 LIMIT 1"); + } + + $this->app->DB->Insert(' + INSERT INTO + dokumente + SET + adresse_from = "' . $adressefromuser . '", + adresse_to = "' . $data['user'] . '", + typ = "' . $data['typ'] . '", + von = "' . $data['von'] . '", + firma = "' . $data['firma'] . '", + ansprechpartner = "' . $data['ansprechpartner'] . '", + internebezeichnung = "' . $data['internebezeichnung'] . '", + an = "' . $data['an'] . '", + email_an = "' . $data['email_an'] . '", + email_cc = "' . $data['email_cc'] . '", + email_bcc = "' . $data['email_bcc'] . '", + firma_an = "' . $data['firma_an'] . '", + adresse = "' . $data['adresse'] . '", + plz = "' . $data['plz'] . '", + ort = "' . $data['ort'] . '", + land = "' . $data['land'] . '", + datum = NOW(), + betreff = "' . $data['betreff'] . '", + content = "' . $data['content'] . '", + signatur = "' . $data['signatur'] . '", + send_as = "' . $data['send_as'] . '", + email = "' . $data['email'] . '", + printer = "' . $data['printer'] . '", + fax = "' . $data['fax'] . '", + created = NOW(), + uhrzeit = "' . $data['uhrzeit'] . '", + projekt = "' . $data['projekt'] . '", + bearbeiter = "' . $data['bearbeiter'] . '" + '); + + return $this->app->DB->GetInsertID(); + } + + /** + * @param int $projekt + * @param string $feld + * + * @return mixed|null + */ + function Projektdaten($projekt,$feld) + { + return $projekt <= 0?null:$this->app->DB->Select( + sprintf( + 'SELECT `%s` FROM projekt WHERE id=%d LIMIT 1', + $feld, $projekt + ) + ); + } + + function DumpVar($variable) + { + ob_start(); + var_dump($variable); + $result = ob_get_clean(); + file_put_contents($this->GetTMP()."log", "$result\r\n", FILE_APPEND | LOCK_EX); + } + + function VarAsString($variable) + { + ob_start(); + var_dump($variable); + $result = ob_get_clean(); + return $result; + } + + function ImportvorlageLog($importvorlage,$zeitstempel,$tabelle,$datensatz,$ersterdatensatz="0") + { + $this->app->DB->Insert("INSERT INTO importvorlage_log (id,importvorlage,zeitstempel,user,tabelle,datensatz,ersterdatensatz) + VALUES ('','$importvorlage',FROM_UNIXTIME($zeitstempel),'".$this->app->User->GetID()."', + '$tabelle','$datensatz','$ersterdatensatz')"); + } + + function ImportvorlageLogDelete($zeitstempel) + { + $tmp = $this->app->DB->SelectArr("SELECT * FROM importvorlage_log WHERE zeitstempel='$zeitstempel' AND user='".$this->app->User->GetID()."'"); + for($i=0;$iapp->DB->SelectArr("SELECT * FROM adresse WHERE id='$datensatz' LIMIT 1"); + $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id='".$tmp_adresse[0]['projekt']."' LIMIT 1"); + + if($eigenernummernkreis=="1") + { + if($tmp_adresse[0]['kundennummer']!="" && $tmp_adresse[0]['kundennummer']!="0") + { + $this->app->DB->Update("UPDATE projekt SET next_kundennummer='".$tmp_adresse[0]['kundennummer']."' + WHERE id='".$tmp_adresse[0]['projekt']."' LIMIT 1"); + } + if($tmp_adresse[0]['lieferantennummer']!="" && $tmp_adresse[0]['lieferantennummer']!="0") + { + $this->app->DB->Update("UPDATE projekt SET next_lieferantennummer='".$tmp_adresse[0]['lieferantennummer']."' + WHERE id='".$tmp_adresse[0]['projekt']."' LIMIT 1"); + } + if($tmp_adresse[0]['mitarbeiternummer']!="" && $tmp_adresse[0]['mitarbeiternummer']!="0") + { + $this->app->DB->Update("UPDATE projekt SET next_mitarbeiternummer='".$tmp_adresse[0]['mitarbeiternummer']."' + WHERE id='".$tmp_adresse[0]['projekt']."' LIMIT 1"); + } + } else { + if($tmp_adresse[0]['kundennummer']!="" && $tmp_adresse[0]['kundennummer']!="0") + { + $this->FirmendatenSet("next_kundennummer",$tmp_adresse[0]['kundennummer']); + } + if($tmp_adresse[0]['lieferantennummer']!="" && $tmp_adresse[0]['lieferantennummer']!="0") + { + $this->FirmendatenSet("next_lieferantennummer",$tmp_adresse[0]['lieferantennummer']); + } + if($tmp_adresse[0]['mitarbeiternummer']!="" && $tmp_adresse[0]['mitarbeiternummer']!="0") + { + $this->FirmendatenSet("next_mitarbeiternummer",$tmp_adresse[0]['mitarbeiternummer']); + } + } + } + $this->app->DB->Delete("DELETE FROM adresse WHERE id='$datensatz'"); + $this->app->DB->Delete("DELETE FROM ansprechpartner WHERE adresse='$datensatz'"); + $this->app->DB->Delete("DELETE FROM lieferadressen WHERE adresse='$datensatz'"); + $this->app->DB->Delete("DELETE FROM adresse_rolle WHERE adresse='$datensatz'"); + break; + + case "artikel": + + break; + + case "einkaufspreise": + + break; + + + + } + $this->app->DB->Delete("DELETE FROM importvorlage_log WHERE id='".$tmp[$i]['id']."'"); + } + + } + + + function CreatePath($path) { + if (file_exists($path)) + { + return true; + } + $nextDirectoryPath = substr($path, 0, strrpos($path, '/', -2) + 1 ); + + if($this->CreatePath($nextDirectoryPath) && is_writable($nextDirectoryPath)) + { + return mkdir($path); + } + return false; + } + + function ObjektProtokoll($objekt,$id,$action_long,$meldung="") + { + $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->User->GetName():'Import / Cronjob'; + + $this->app->DB->Insert("INSERT INTO objekt_protokoll (id,objekt,objektid,meldung,zeitstempel,bearbeiter,action_long) + VALUES ('','$objekt','$id','$meldung',NOW(),'$bearbeiter','$action_long')"); + + } + + function InternesEvent($userid,$meldung,$type="",$sound=0) + { + //Cronjobs does not have an userid (prevent Exception) + if((int)$userid <= 0) { + return false; + } + /** @var \Xentral\Modules\SystemNotification\Service\NotificationServiceInterface $notification */ + if(empty($this->app->Container) || empty($userid)) + { + return false; + } + $notification = $this->app->Container->get('NotificationService'); + if (!in_array($type, $notification->getValidTypes(), true)) { + $type = 'default'; + } + + return $notification->create($userid, $type, 'Hinweis', $meldung, (bool)$sound); + } + + function EventMitSystemLog($userid, $meldung, $level=-1,$dump="", $type = "", $sound=0, $module="", $action="",$functionname="") + { + $this->SystemLog($meldung, $level, $dump, $module, $action, $functionname); + $this->InternesEvent($userid, $meldung, $type, $sound); + + } + + function SystemLog($meldung="",$level=0,$dump="",$module="",$action="",$functionname="") + { + /** @var Systemlog $obj */ + $obj = $this->app->erp->LoadModul('systemlog'); + if(!empty($obj) && method_exists($obj, 'addSystemLog')){ + return $obj->addSystemLog($meldung,$level,$dump,$module,$action,$functionname); + } + return 0; + } + + + function Protokoll($meldung="",$dump="",$module="",$action="",$functionname="") + { + /** @var Protokoll $obj */ + $obj = $this->app->erp->LoadModul('protokoll'); + if(!empty($obj) && method_exists($obj, 'addProtokoll')){ + return $obj->addProtokoll($meldung,$dump,$module,$action,$functionname); + } + return 0; + } + + function LogRamAndTime($meldung) + { + if(self::$lasttime == 0)self::$lasttime = microtime(true); + $akttime = microtime(true); + $this->LogFile( addslashes((memory_get_peak_usage(true) >> 20). " MB ".(round($akttime - self::$lasttime ,3) )." sek ".$meldung)); + + } + + + function LogFile($meldung,$dump="",$module="",$action="",$functionname="") + { + + $obj = $this->LoadModul('logfile'); + if(!empty($obj) && method_exists($obj,'addLogFile')) { + return $obj->addLogFile($meldung,$dump,$module,$action,$functionname); + } + return null; + } + + + function KundeUpdate($adresse,$typ,$name,$abteilung,$unterabteilung,$ansprechpartner,$adresszusatz,$strasse,$land,$plz,$ort,$email,$telefon,$telefax,$ustid,$partner,$projekt) + { + //echo "Upate"; + $fields = array('typ','name','abteilung','unterabteilung','ansprechpartner','adresszusatz','strasse','land','plz', + 'ort','email','telefon','telefax','ustid','partner','projekt'); + + foreach($fields as $key) + { + $check = $this->app->DB->Select("SELECT $key FROM adresse WHERE id='$adresse' LIMIT 1"); + if($check!=${$key}) + { + $this->app->DB->Update("UPDATE adresse SET $key='".${$key}."' WHERE id='$adresse' LIMIT 1"); + $logfile = $this->app->DB->Select("SELECT `logfile` FROM adresse WHERE id='$adresse' LIMIT 1"); + $this->app->DB->Update("UPDATE adresse SET `logfile`='".$logfile." Update Feld $key alt:$check neu:".${$key}.";' WHERE id='$adresse' LIMIT 1"); + } + + } + return $adresse; + } + + function KundeAnlegen($typ,$name,$abteilung,$unterabteilung,$ansprechpartner,$adresszusatz,$strasse,$land,$plz,$ort,$email,$telefon,$telefax,$ustid,$partner,$projekt, $bundesstaat='', $rechnung_bundesstaat='') + { + $name = $this->app->DB->real_escape_string($name); + $abteilung = $this->app->DB->real_escape_string($abteilung); + $unterabteilung = $this->app->DB->real_escape_string($unterabteilung); + $ansprechpartner = $this->app->DB->real_escape_string($ansprechpartner); + $adresszusatz = $this->app->DB->real_escape_string($adresszusatz); + $strasse = $this->app->DB->real_escape_string($strasse); + $land = $this->app->DB->real_escape_string($land); + $plz = $this->app->DB->real_escape_string($plz); + $ort = $this->app->DB->real_escape_string($ort); + $email = $this->app->DB->real_escape_string($email); + $telefon = $this->app->DB->real_escape_string($telefon); + $telefax = $this->app->DB->real_escape_string($telefax); + $ustid = $this->app->DB->real_escape_string($ustid); + $partner = $this->app->DB->real_escape_string($partner); + $bundesstaat = $this->app->DB->real_escape_string($bundesstaat); + $rechnung_bundesstaat = $this->app->DB->real_escape_string($rechnung_bundesstaat); + + $this->app->DB->Insert("INSERT INTO adresse (id,typ,name,abteilung,unterabteilung,ansprechpartner,adresszusatz,strasse,land,plz,ort,email,telefon,telefax,ustid,partner,projekt,firma,bundesstaat,rechnung_bundesstaat) + VALUES('','$typ','$name','$abteilung','$unterabteilung','$ansprechpartner','$adresszusatz','$strasse','$land','$plz','$ort','$email','$telefon','$telefax','$ustid','$partner','$projekt','".$this->app->User->GetFirma()."','$bundesstaat','$rechnung_bundesstaat')"); + $adresse = $this->app->DB->GetInsertID(); + $this->ObjektProtokoll("adresse",$adresse,"adresse_create","Adresse angelegt"); + $zahlungsweise = $this->Firmendaten('zahlungsweise'); + if($zahlungsweise)$this->app->DB->Update("UPDATE adresse SET zahlungsweise = '".$this->app->DB->real_escape_string($zahlungsweise)."' WHERE id = '$adresse' LIMIT 1"); + if($zahlungsweise == 'rechnung') + { + $zahlungszieltage = $this->Firmendaten('zahlungszieltage'); + $zahlungszieltageskonto = $this->Firmendaten('zahlungszieltageskonto'); + $zahlungszielskonto = $this->Firmendaten('zahlungszielskonto'); + if($zahlungsweise)$this->app->DB->Update("UPDATE adresse SET + zahlungszieltage = '".$this->app->DB->real_escape_string($zahlungszieltage)."', + zahlungszielskonto = '".$this->app->DB->real_escape_string($zahlungszielskonto)."', + zahlungszieltageskonto = '".$this->app->DB->real_escape_string($zahlungszieltageskonto)."' + WHERE id = '$adresse' LIMIT 1"); + } + + $ust_befreit = $this->AdresseUSTCheck($adresse); + $this->app->DB->Update("UPDATE adresse SET ust_befreit='$ust_befreit' WHERE id=$adresse"); + + //adresse Kundennummer verpassen + $this->KundennummerVergeben($adresse); + + $this->AddRolleZuAdresse($adresse, "Kunde", "von", "Projekt", $projekt); + return $adresse; + } + + function IstEU($land) + { + if($land==$this->Firmendaten("land")) + return false; + foreach($this->GetUSTEU() as $euland) + { + if($land==$euland) + return true; + } + return false; + } + + function Steuerbefreit($land,$ustid) + { + if($land==$this->Firmendaten("land")) + return false; + + foreach($this->GetUSTEU() as $euland) + { + if($land==$euland && $ustid!="") + return true; + else if ($land==$euland && $ustid=="") + return false; + } + + // alle anderen laender sind export! + return true; + } + + /** + * @param int $artikel + * @param null|array|int $parents + * + * @return bool + */ + public function IstRohstoffeZirkel($artikel, $parents = null) + { + if($parents !== null && is_numeric($parents)) { + $parents = [$parents]; + } + if(is_array($parents) && count($parents) > 0) { + if(in_array($artikel, $parents)) { + return $artikel; + } + } + $parents[] = $artikel; + + $stueckliste = $this->app->DB->SelectArr( + sprintf( + 'SELECT DISTINCT s.artikel + FROM rohstoffe AS s + INNER JOIN artikel AS a ON s.artikel = a.id + WHERE s.rohstoffvonartikel = %d AND a.geloescht <> 1', + $artikel + ) + ); + if(empty($stueckliste)) { + return false; + } + + foreach($stueckliste as $art) { + if($art['artikel'] == $artikel) { + return true; + } + if($this->IstRohstoffeZirkel($art['artikel'], $parents)) { + return true; + } + } + + return false; + } + + /** + * @param int $artikel + * @param null|int|array $parents + * + * @return bool + */ + public function IstStuecklistenZirkel($artikel, $parents = null) + { + if($parents !== null && is_numeric($parents)) { + $parents = [$parents]; + } + if(is_array($parents) && count($parents) > 0) { + if(in_array($artikel, $parents)) { + return $artikel; + } + } + $parents[] = $artikel; + + $stueckliste = $this->app->DB->SelectArr( + sprintf( + 'SELECT DISTINCT s.artikel + FROM stueckliste AS s + INNER JOIN artikel AS a ON s.artikel = a.id + WHERE s.stuecklistevonartikel = %d AND a.geloescht <> 1', + $artikel + ) + ); + if(empty($stueckliste)) { + return false; + } + + foreach($stueckliste as $art) { + if($art['artikel'] == $artikel) { + return true; + } + if($this->IstStuecklistenZirkel($art['artikel'], $parents)) { + return true; + } + } + + return false; + } + + /** + * @param string $wert + * @param int|array $artikel + * @param null|int|array $shop + * + * @return array|mixed|null + */ + public function GetArtikelShopEinstellung($wert, $artikel, $shop = null) + { + $shopKorrekturwert = null; + if(is_array($shop)) { + $shopKorrekturwert = $shop; + $shop = $shop['id']; + } + $shop = (int)$shop; + if(is_array($artikel)) { + $res = $artikel; + $artikel = $artikel['id']; + } + $artikel = (int)$artikel; + if($artikel <= 0) { + return null; + } + if(empty($res)) { + $res = $this->app->DB->SelectRow( + sprintf('SELECT * FROM artikel WHERE id = %d LIMIT 1', $artikel) + ); + } + if(empty($res)) { + return null; + } + if($shop) { + $artikelarr = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM artikel_onlineshops + WHERE artikel = %d AND aktiv = 1 AND shop = %d AND ausartikel = 0 LIMIT 1', + $artikel, $shop + ) + ); + if(!empty($artikelarr)) { + foreach($artikelarr as $k => $v) { + if(!is_numeric($k) && $k !== 'id' && $k !== 'shop' && $k !== 'artikel'){ + $res[$k] = $v; + } + } + } + if($wert == '' || $wert === 'lagerkorrekturwert') { + if($shopKorrekturwert === null) { + $shopKorrekturwert = $this->app->DB->SelectRow( + sprintf( + 'SELECT lagerkorrekturwert,ueberschreibe_lagerkorrekturwert FROM shopexport WHERE id = %d', + $shop + ) + ); + } + if(!empty($shopKorrekturwert['ueberschreibe_lagerkorrekturwert'])) { + $res['lagerkorrekturwert'] = $shopKorrekturwert['lagerkorrekturwert']; + } + } + } + + if($wert == '') { + return $res; + } + if(isset($res[$wert])) { + return $res[$wert]; + } + + return null; + } + + /** + * @param int|array $artikel + * + * @return array|null + */ + public function GetArtikelshops($artikel) + { + if(is_array($artikel)) { + $artikelarr = $artikel; + $artikel = $artikel['id']; + } + $artikel = (int)$artikel; + if($artikel <= 0) { + return null; + } + $shops = $this->app->DB->SelectArr( + sprintf( + 'SELECT `shop`, `aktiv` FROM `artikel_onlineshops` WHERE `artikel` = %d', + $artikel + ) + ); + if(empty($shops)) { + if(empty($artikelarr)) { + $artikelarr = $this->app->DB->SelectRow( + sprintf( + 'SELECT `shop`, `shop2`, `shop3` FROM `artikel` WHERE `id` = %d LIMIT 1', + $artikel + ) + ); + } + if(empty($artikelarr)) { + return null; + } + $shops = null; + if(!empty($artikelarr['shop'])){ + $shops[] = $artikelarr['shop']; + } + if(!empty($artikelarr['shop2'])){ + $shops[] = $artikelarr['shop2']; + } + if(!empty($artikelarr['shop3'])){ + $shops[] = $artikelarr['shop3']; + } + + return $shops; + } + $res = null; + foreach($shops as $shop) { + if(empty($shop['aktiv'])) { + continue; + } + if(empty($res) || !in_array($shop['shop'], $res)) { + $res[] = $shop['shop']; + } + } + + return $res; + } + +function CheckShopTabelle($artikel) +{ + $artikel = (int)$artikel; + if($artikel <= 0){ + return; + } + $artikelarr = $this->app->DB->SelectRow("SELECT * FROM artikel WHERE id = '$artikel' LIMIT 1"); + if(empty($artikelarr)){ + return; + } + + $shops = null; + if($artikelarr['shop']){ + $shops[] = $artikelarr['shop']; + } + if($artikelarr['shop2']){ + $shops[] = $artikelarr['shop2']; + } + if($artikelarr['shop3']){ + $shops[] = $artikelarr['shop3']; + } + if(!$shops){ + return; + } + $artikelarr['autolagerlampe'] = 0; + $felder = array( + 'lagerkorrekturwert', + 'pseudolager', + 'autolagerlampe', + 'restmenge', + 'lieferzeitmanuell', + 'pseudopreis', + 'generierenummerbeioption', + 'variante_kopie', + 'unikat', + 'unikatbeikopie', + 'autoabgeleicherlaubt' + ); + foreach($felder as $feld){ + if(isset($artikelarr[$feld]) && !empty($artikelarr[$feld])) + { + $inhalt[] = " '".$this->app->DB->real_escape_string($artikelarr[$feld])."' "; + } else { + $inhalt[] = " '' "; + } + } + + foreach($shops as $shop) + { + if(!$this->app->DB->Select("SELECT id FROM artikel_onlineshops WHERE artikel = '$artikel' AND shop = '$shop' LIMIT 1")) + { + $this->app->DB->Insert("INSERT INTO artikel_onlineshops (artikel, shop, aktiv, ausartikel,".implode(', ', $felder).") VALUES ('$artikel','$shop','1','1',".implode(', ', $inhalt).")"); + if(!$this->app->DB->error()) + { + //$this->app->DB->Update("UPDATE artikel SET shop = 0 WHERE artikel = '$artikel' AND shop = '$shop' LIMIT 1"); + //$this->app->DB->Update("UPDATE artikel SET shop2 = 0 WHERE artikel = '$artikel' AND shop2 = '$shop' LIMIT 1"); + //$this->app->DB->Update("UPDATE artikel SET shop3 = 0 WHERE artikel = '$artikel' AND shop3 = '$shop' LIMIT 1"); + } + } + } +} + + function CopyArtikelVariante($artikel,$artikelvon, $optionen, $stuecklistenelement = 0, $option = "") + { + $art = $artikelvon; + if($stuecklistenelement)$art = $stuecklistenelement; + if($artikel != $artikelvon || $stuecklistenelement > 0) + { + $eks = $this->app->DB->SelectArr("SELECT * FROM einkaufspreise WHERE artikel = '$artikel'"); + if(!$eks) + { + $this->app->DB->Insert("INSERT into einkaufspreise (artikel, adresse, objekt, projekt, preis, waehrung,ab_menge, vpe, gueltig_bis, lieferzeit_standard,bezeichnunglieferant, bestellnummer) + SELECT '".$artikel."', adresse, objekt, projekt, preis, waehrung,ab_menge, vpe, gueltig_bis,lieferzeit_standard,bezeichnunglieferant, bestellnummer FROM einkaufspreise WHERE artikel = '".$art."' AND geloescht <> 1 AND (isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' OR gueltig_bis > now())"); + + } + } + + if($artikel != $artikelvon) + { + $stueckliste = $this->app->DB->SelectArr("SELECT s.*, a.variante_kopie FROM stueckliste s INNER JOIN artikel a ON a.id = s.artikel WHERE stuecklistevonartikel = '$artikelvon'"); + if($stueckliste) + { + foreach($stueckliste as $stueck) + { + if($stueck['variante_kopie']) + { + + $idnew = $this->app->DB->MysqlCopyRow("artikel","id",$stueck['artikel']); + $this->KopiereArtikelDateistichwoerter($stueck['artikel'], $idnew); + $this->KopiereArtikelEigenschaften($stueck['artikel'], $idnew); + $nummer = $this->GetNextArtikelnummer('produkt',1,(int)$this->app->DB->Select("SELECT projekt FROM artikel WHERE id = '".$stueck['artikel']."' LIMIT 1")); + $this->app->DB->Update("UPDATE artikel SET variante = 1 , variante_von = '".$stueck['artikel']."' WHERE id = '$idnew' LIMIT 1"); + if($nummer)$this->app->DB->Update("UPDATE artikel SET nummer = '$nummer' WHERE id = '$idnew' LIMIT 1"); + $this->ObjektProtokoll("artikel", $idnew, "artikel_create", "Shopimport: Automatisch Kopie angelegt"); + if($optionen)$this->app->DB->Update("UPDATE artikel SET anabregs_text = '".$optionen."', anabregs_text_en ='".$optionen."' WHERE id = '$idnew' LIMIT 1"); + + $this->app->DB->Insert("INSERT INTO stueckliste (stuecklistevonartikel, artikel, sort, referenz, place, layer, menge, firma, wert,bauform) + SELECT '$artikel', '$idnew', sort, referenz, place, layer, menge, firma, wert,bauform FROM stueckliste WHERE id = '".$stueck['id']."'"); + + + $this->CopyArtikelVariante($idnew, $stueck['artikel'], $stueck['artikel']); + }else{ + $check = $this->app->DB->Select("SELECT id FROM stueckliste WHERE artikel = '".$stueck['artikel']."' AND stuecklistevonartikel = '".$artikel."' LIMIT 1"); + if(!$check) + { + $this->app->DB->Insert("INSERT INTO stueckliste (stuecklistevonartikel, artikel, sort, referenz, place, layer, menge, firma, wert,bauform) + SELECT '$artikel', artikel, sort, referenz, place, layer, menge, firma, wert,bauform FROM stueckliste WHERE id = '".$stueck['id']."'"); + } + } + } + } + } + } + + function GetArticleIDFromShopnumber($shop, $nummer, $herstellernummerUeberspringen = false) + { + $extart = $this->app->DB->Select("SELECT artikelnummernummerkreis FROM shopexport WHERE id = '$shop'"); + $projekt = $this->app->DB->Select("SELECT projekt FROM shopexport WHERE id = '$shop'"); + $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id='$projekt' LIMIT 1"); + if($multiprojekt=='1' || !$eigenernummernkreis){ + $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND IFNULL(geloescht,0) = 0 AND IFNULL(intern_gesperrt,0) = 0 LIMIT 1"); + } + else{ + $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$nummer' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 AND IFNULL(intern_gesperrt,0) = 0 LIMIT 1"); + } + if($j_id){ + return $j_id; + } + + $multiprojekt = $this->app->DB->Select("SELECT multiprojekt FROM shopexport WHERE id='$shop' LIMIT 1"); + + + if(!$j_id) + { + if($multiprojekt=='1' || !$eigenernummernkreis) + $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND nummer <> 'DEL' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE + else + $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$nummer' AND nummer <> 'DEL' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE + + if($j_id) + { + return $j_id; + } + } + + if($herstellernummerUeberspringen){ + return false; + } + if(!$j_id) + { + if($multiprojekt=='1' || !$eigenernummernkreis) + $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='$nummer' AND nummer <> 'DEL' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE + else + $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='$nummer' AND nummer <> 'DEL' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE + if($j_id) + { + return $j_id; + } + } + + + } + + /** + * @param int $auftrag + * @param string $zahlungsstatus + * + * @throws Exception + */ + public function ImportUpdateZahlungsstatus($auftrag, $zahlungsstatus = 'bezahlt') + { + $arr = $this->app->DB->SelectRow( + sprintf( + "SELECT a.shop, a.shopextid,s.modulename,s.shoptyp + FROM auftrag AS a + INNER JOIN shopexport AS s + ON a.shop = s.id AND s.aktiv = 1 AND s.demomodus = 0 AND s.auftragabgleich = 1 + AND (s.shoptyp = 'intern' OR s.shoptyp = 'custom') + LEFT JOIN shopexport_zahlungsstatus sz ON a.shopextid = sz.auftrag + WHERE a.id = %d AND isnull(sz.id) AND a.shop <> 0 AND a.shopextid <> '' + LIMIT 1", + $auftrag + ) + ); + if(empty($arr)) { + return; + } + + $obj = null; + if($arr['shoptyp'] === 'custom') { + $file = dirname(__DIR__) . '/plugins/external/shopimporter/'.$arr['modulename']; + $classa = explode('_',str_replace('_'.$arr['shop'].'.php','', $arr['modulename'])); + foreach($classa as $k => $v) { + $classa[$k] = ucfirst($v); + } + $class = implode('_', $classa); + + if(file_exists($file)) { + if(!class_exists($class)) { + include_once $file; + } + if(class_exists($class)){ + $obj = new $class($this->app, true); + } + } + } + else { + $obj = $this->app->erp->LoadModul($arr['modulename']); + } + if($obj) { + if(method_exists($obj, 'EinstellungenStruktur')) { + $struktur = $obj->EinstellungenStruktur(); + if(isset($struktur['functions']) && $struktur['functions'] + && in_array('updatezahlungsstatus', $struktur['functions'])) { + $erg = $this->app->remote->RemoteCommand( + $arr['shop'], + 'updatezahlungsstatus', + array('auftrag'=>$arr['shopextid'],'zahlungsstatus'=>$zahlungsstatus) + ); + if($erg === 'ok') { + $this->app->DB->Insert( + sprintf( + "INSERT INTO shopexport_zahlungsstatus (shop, auftrag, status) + VALUES (%d,'%s','%s')", + $arr['shop'], + $this->app->DB->real_escape_string($arr['shopextid']), + $this->app->DB->real_escape_string($zahlungsstatus) + ) + ); + } + return; + } + } + } + $this->app->DB->Insert( + sprintf( + "INSERT INTO shopexport_zahlungsstatus (shop, auftrag, status) + VALUES (%d,'%s','')", + $arr['shop'], $this->app->DB->real_escape_string($arr['shopextid']) + ) + ); + } + + function getTaxRatesFromShopOrder($shopid, $warenkorb, $articlearray) + { + $taxrates = array(); + if(!empty($warenkorb['steuersatz_normal'])) + { + if(!in_array($warenkorb['steuersatz_normal'], $taxrates)) + { + $taxrates[] = $warenkorb['steuersatz_normal']; + } + if(!in_array($warenkorb['steuersatz_ermaessigt'], $taxrates)) + { + $taxrates[] = $warenkorb['steuersatz_ermaessigt']; + } + if(!empty($articlearray)) + { + foreach($articlearray as $k => $position) + { + if(!empty($position['steuersatz']) && is_numeric($position['steuersatz']) && !in_array($position['steuersatz'], $taxrates) + ) + { + $taxrates[] = $position['steuersatz']; + } + } + } + } + if(!empty($warenkorb['lieferland'])) + { + $country = $warenkorb['lieferland']; + }elseif(!empty($warenkorb['land'])) + { + $country = $warenkorb['land']; + }else{ + $country = ''; + } + if(!empty($country)) + { + $taxes = array(); + $this->RunHook('getTaxRatesFromShopOrder',2 , $country, $taxes); + if(!empty($taxes)) + { + $taxrates = array_merge($taxrates, $taxes); + } + } + + return $taxrates; + } + + function ImportAuftrag($adresse,$warenkorb,$projekt,$shop="",$auftrag=0) + { + $this->RunHook('ImportAuftragBefore',4, $adresse,$warenkorb,$projekt,$shop); + if(!empty($this->app->stringcleaner)){ + $this->app->stringcleaner->XMLArray_clean($warenkorb); + } + $explodieren = true; + $shopexportArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM shopexport WHERE id = %d LIMIT 1', + (int)$shop + ) + ); + + $angeboteanlegen = $shopexportArr['angeboteanlegen']; + $doctype = 'auftrag'; + + if(isset($warenkorb['benutzergruppe'])){ + $gruppenid = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer ='".$warenkorb['benutzergruppekuerzel']."'"); + if(isset($warenkorb['benutzergruppeanlegen']) && $gruppenid < 1){ + if(!$gruppenid){ + $this->app->DB->Insert("INSERT INTO gruppen (name, art, kennziffer, dta_mail_text, dtavariablen, zahlungszielskonto, zahlungszieltageskonto,webid, aktiv) VALUES ('".$warenkorb['benutzergruppe']."','gruppe','".$warenkorb['benutzergruppekuerzel']."','','',0,0,0,1)"); + } + $gruppenid = $this->app->DB->GetInsertID(); + } + if($gruppenid){ + if(!$this->app->DB->Select("SELECT id FROM adresse_rolle WHERE adresse='$adresse' AND projekt='$projekt' AND subjekt='Mitglied' AND praedikat='von' AND objekt='Gruppe' AND parameter='$gruppenid' LIMIT 1")){ + $this->app->DB->Insert("INSERT INTO adresse_rolle (adresse, projekt, subjekt, praedikat, objekt, parameter, von, bis) VALUES ('$adresse', '$projekt', 'Mitglied', 'von', 'Gruppe', '$gruppenid', 'CURRENT_DATE', '0000-00-00')"); + } + } + } + + if(!empty($warenkorb['doctype']) && $warenkorb['doctype']==='angebot'){ + $angeboteanlegen = 1; + } + + if($shopexportArr['lastschriftdatenueberschreiben'] && isset($warenkorb['bankverbindung']) && is_array($warenkorb['bankverbindung'])){ + $anweisung = array(); + if(isset($warenkorb['bankverbindung']['inhaber'])){ + $anweisung[] = "inhaber='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['inhaber'])."'"; + } + if(isset($warenkorb['bankverbindung']['bank'])){ + $anweisung[] = "bank='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['bank'])."'"; + } + if(isset($warenkorb['bankverbindung']['iban'])){ + $anweisung[] = "iban='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['iban'])."'"; + } + if(isset($warenkorb['bankverbindung']['bic'])){ + $anweisung[] = "swift='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['bic'])."'"; + } + + if(isset($warenkorb['bankverbindung']['firmensepa'])){ + $anweisung[] = "firmensepa='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['firmensepa'])."'"; + } + if(isset($warenkorb['bankverbindung']['mandatsreferenzhinweis'])){ + $anweisung[] = "mandatsreferenzhinweis='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['mandatsreferenzhinweis'])."'"; + } + if(isset($warenkorb['bankverbindung']['mandatsreferenzdatum'])){ + $anweisung[] = "mandatsreferenzdatum='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['mandatsreferenzdatum'])."'"; + } + if(isset($warenkorb['bankverbindung']['mandatsreferenz'])){ + $anweisung[] = "mandatsreferenz='".$this->app->DB->real_escape_string($warenkorb['bankverbindung']['mandatsreferenz'])."'"; + } + + if(count($anweisung) > 0){ + $this->app->DB->Update('UPDATE adresse SET '.implode(', ',$anweisung)." WHERE id='$adresse'"); + } + } + + if($angeboteanlegen) + { + $doctype = 'angebot'; + } + if(empty($auftrag)){ + if($angeboteanlegen) + { + $auftrag = $this->CreateAngebot(); + }else{ + $auftrag = $this->CreateAuftrag(); + } + } + if($shopexportArr['rabatteportofestschreiben']) { + $this->app->DB->Update("UPDATE $doctype SET rabatteportofestschreiben = 1 WHERE id = '$auftrag' LIMIT 1"); + } + if($doctype === 'angebot') + { + $this->AngebotProtokoll($auftrag,'Angebot importiert vom Shop'); + }else{ + $this->AuftragProtokoll($auftrag,'Auftrag importiert vom Shop'); + } + if(isset($warenkorb['subshop']) && $warenkorb['subshop']) + { + $subshopprojekt = $this->app->DB->Select("SELECT projekt FROM shopexport_subshop WHERE shop = '$shop' AND aktiv = 1 AND subshopkennung = '".$this->app->DB->real_escape_string($warenkorb['subshop'])."' LIMIT 1"); + if($subshopprojekt && $this->app->DB->Select("SELECT id FROM projekt WHERE id = '$subshopprojekt' AND geloescht <> 1 LIMIT 1")){ + $projekt = $subshopprojekt; + } + } + $portocheck = $this->app->DB->Select("SELECT portocheck FROM projekt WHERE id = '$projekt'"); + + + if(isset($warenkorb['projekt']) && $warenkorb['projekt'] && is_numeric($warenkorb['projekt'])) + { + if($this->app->DB->Select("SELECT id FROM projekt WHERE id = '".(int)$warenkorb['projekt']."' AND geloescht <> 1 LIMIT 1")) + { + $projekt = $warenkorb['projekt']; + $warenkorbprojekt = $warenkorb['projekt']; + } + } + + $demomodus = $shopexportArr['demomodus']; + if($doctype === 'angebot') + { + $this->LoadAngebotStandardwerte($auftrag,$adresse); + }else{ + $this->LoadAuftragStandardwerte($auftrag,$adresse); + } + $vertriebid = $this->app->DB->Select("SELECT vertrieb FROM adresse WHERE id = '$adresse' LIMIT 1"); + $this->app->DB->Update("UPDATE $doctype SET vertriebid = '$vertriebid' WHERE id = '$auftrag' LIMIT 1"); + $vertrieb = ''; + if($vertriebid){ + $vertrieb = $this->app->DB->real_escape_string($this->app->DB->Select("SELECT name FROM adresse WHERE id = '$vertriebid' LIMIT 1")); + } + + if(strpos($warenkorb['gesamtsumme'],',')!==false) + { + $warenkorb['gesamtsumme'] = str_replace(',','.',$warenkorb['gesamtsumme']); + } + + if(!$this->CheckDateValidate($warenkorb['lieferdatum'])) { + $warenkorb['lieferdatum']=''; + } + + if($warenkorb['lieferung']=='' || $warenkorb['lieferung']==='versandunternehmen'){ + $versand = $this->Firmendaten('versandart'); + } + else{ + $versand = $warenkorb['lieferung']; + } + + + $versandarten = $this->GetVersandartAuftrag($projekt); + if (empty($versandarten) || !array_key_exists($versand, $versandarten)){ + $versand = $this->Firmendaten('versandart'); + } + $bekannteversandart = $this->GetVersandartAuftrag($projekt); + if(!isset($bekannteversandart[$warenkorb['lieferung']])) + { + $versand = $this->Firmendaten('versandart'); + } + + $versandartenmapping = $shopexportArr['versandartenmapping']; + $zahlungsweisenmapping = $shopexportArr['zahlungsweisenmapping']; + $positionsteuersaetzeerlauben = $shopexportArr['positionsteuersaetzeerlauben']; + $steuerfreilieferlandexport = $shopexportArr['steuerfreilieferlandexport']; + + $fastlane = 0; + $autoversandvonMapping = false; + if($versandartenmapping) + { + $extrasel = ''; + $lieferung1 = $this->app->DB->real_escape_string($warenkorb['lieferung']); + $lieferung2 = $this->app->DB->real_escape_string($this->app->erp->ConvertForDBUTF8($warenkorb['lieferung'])); + if($lieferung2 !== '' && $lieferung2 != $lieferung1){ + $extrasel .= " OR versandart_shop = '$lieferung2' "; + } + $lieferung3 = $this->app->DB->real_escape_string($this->app->erp->ConvertForDB($warenkorb['lieferung'])); + if($lieferung3 !== '' && $lieferung3 != $lieferung1){ + $extrasel .= " OR versandart_shop = '$lieferung3' "; + } + $versandarten = $this->app->DB->SelectArr("SELECT * FROM shopexport_versandarten WHERE aktiv = 1 AND shop = '$shop' AND versandart_wawision <> '' AND (versandart_shop = '".$this->app->DB->real_escape_string($warenkorb['lieferung'])."' $extrasel)"); + if(!empty($versandarten)) + { + $found = false; + foreach($versandarten as $vers) + { + $land = !empty($warenkorb['lieferadresse_land'])?$warenkorb['lieferadresse_land']:$warenkorb['land']; + if(!$land){ + $land = $this->Firmendaten("land"); + } + if(strpos($vers['land'],$land) !== false) + { + $versand = $vers['versandart_wawision']; + $warenkorb['autoversand'] = $vers['autoversand']; + $autoversandvonMapping = true; + if($vers['fastlane'] == 1) + { + $fastlane = 1; + } + $found = true; + break; + } + } + if(!$found) + { + //Fallback + foreach($versandarten as $vers) + { + if($vers['land'] == '') + { + $versand = $vers['versandart_wawision']; + $warenkorb['autoversand'] = $vers['autoversand']; + $autoversandvonMapping = true; + $found = true; + if($vers['fastlane'] == 1) + { + $fastlane = 1; + } + break; + } + } + } + if(!$found) + { + $versandarten2 = $this->app->DB->SelectArr("SELECT * FROM shopexport_versandarten WHERE aktiv = 1 AND shop = '$shop' AND versandart_wawision <> '' AND versandart_shop = ''"); + foreach($versandarten2 as $vers) + { + $land = !empty($warenkorb['lieferadresse_land'])?$warenkorb['lieferadresse_land']:$warenkorb['land']; + if(!$land){ + $land = $this->Firmendaten('land'); + } + if(strpos($vers['land'],$land) !== false) + { + $versand = $vers['versandart_wawision']; + $warenkorb['autoversand'] = $vers['autoversand']; + $autoversandvonMapping = true; + $found = true; + if($vers['fastlane'] == 1) + { + $fastlane = 1; + } + break; + } + } + if(!$found) + { + //Fallback + foreach($versandarten2 as $vers) + { + if($vers['land'] == '') + { + $versand = $vers['versandart_wawision']; + $warenkorb['autoversand'] = $vers['autoversand']; + $autoversandvonMapping = true; + $found = true; + if($vers['fastlane'] == 1) + { + $fastlane = 1; + } + break; + } + } + } + + } + }else{ + $checkversand = $this->app->DB->Select("SELECT id FROM shopexport_versandarten WHERE shop = '$shop' AND versandart_shop = '".$this->app->DB->real_escape_string($warenkorb['lieferung'])."' LIMIT 1"); + if(!$checkversand) + { + $this->app->DB->Insert("INSERT INTO shopexport_versandarten (shop, versandart_shop, aktiv) values ('$shop','".$this->app->DB->real_escape_string($warenkorb['lieferung'])."',0)"); + } + } + } + + $empfaengerLand = $warenkorb['land']; + if(!empty($warenkorb['lieferadresse_name']) && !empty($warenkorb['lieferadresse_land']) + && ( + $warenkorb['lieferadresse_name'] !== $warenkorb['name'] + || $warenkorb['lieferadresse_land'] !== $warenkorb['land'] + || $warenkorb['lieferadresse_strasse'] !== $warenkorb['strasse'] + || $warenkorb['lieferadresse_ort'] !== $warenkorb['ort'] + || $warenkorb['lieferadresse_plz'] !== $warenkorb['plz'] + ) + ) { + $warenkorb['abweichendelieferadresse']=1; + if($steuerfreilieferlandexport && !empty($warenkorb['lieferadresse_land'])){ + $empfaengerLand = $warenkorb['lieferadresse_land']; + } + } + + $ust_befreit=0; + if(!empty($empfaengerLand) && $empfaengerLand !== $this->Firmendaten("land")) + { + if($this->IstEU($empfaengerLand)){ + $ust_befreit=1; + } + if($this->Export($empfaengerLand)){ + $ust_befreit=2; + } + } + if(isset($warenkorb['ust_befreit']) && is_numeric($warenkorb['ust_befreit'])) + { + $warenkorb_ustbefreit = (int)$warenkorb['ust_befreit']; + if($warenkorb_ustbefreit >= 0 && $warenkorb_ustbefreit <= 3){ + $ust_befreit = $warenkorb_ustbefreit; + } + } + + if(isset($warenkorb['fastlane'])) + { + $fastlane = $warenkorb['fastlane']; + } + + if($fastlane) + { + $fastlane = 1; + }else{ + $fastlane = 0; + } + + + $warenkorb['zahlungsweise'] = str_replace(array('ü','Ü','ä','Ä','ö','Ö','ß'),array('ü','Ü','ä','Ä','ö','Ö','ß'), $warenkorb['zahlungsweise']); + if($zahlungsweisenmapping) + { + $extrasel = ""; + $zahlungsweise1 = $this->app->DB->real_escape_string($warenkorb['zahlungsweise']); + $zahlungsweise2 = $this->app->DB->real_escape_string($this->app->erp->ConvertForDBUTF8($warenkorb['zahlungsweise'])); + if($zahlungsweise2 !== '' && $zahlungsweise2 != $zahlungsweise1)$extrasel .= " OR zahlweise_shop = '$zahlungsweise2' "; + $zahlungsweise3 = $this->app->DB->real_escape_string($this->app->erp->ConvertForDB($warenkorb['zahlungsweise'])); + if($zahlungsweise3 !== '' && $zahlungsweise3 != $zahlungsweise1)$extrasel .= " OR zahlweise_shop = '$zahlungsweise3' "; + $shopexport_zahlweisen = $this->app->DB->SelectArr("SELECT * FROM shopexport_zahlweisen WHERE shop='$shop' AND aktiv = 1 AND zahlweise_wawision <> '' AND (zahlweise_shop = '".$this->app->DB->real_escape_string($warenkorb['zahlungsweise'])."' $extrasel )"); + if(!$shopexport_zahlweisen) + { + if($warenkorb['zahlungsweise']=="secupay_creditcard") $warenkorb['zahlungsweise']="secupay"; + if($warenkorb['zahlungsweise']=="Amazoncba") $warenkorb['zahlungsweise']="amazon"; + if($warenkorb['zahlungsweise'] == 'sofort_sofortueberweisung')$warenkorb['zahlungsweise'] = 'sofortueberweisung'; + $shopexport_zahlweisen = $this->app->DB->SelectArr("SELECT * FROM shopexport_zahlweisen WHERE aktiv = 1 AND shop='$shop' AND zahlweise_shop = '".$this->app->DB->real_escape_string($warenkorb['zahlungsweise'])."'"); + if(!$shopexport_zahlweisen) + { + $checkzahl = $this->app->DB->Select("SELECT id FROM shopexport_zahlweisen WHERE shop = '$shop' and zahlweise_shop = '".$this->app->DB->real_escape_string($warenkorb['zahlungsweise'])."' LIMIT 1"); + if(!$checkzahl) + { + $this->app->DB->Insert("INSERT INTO shopexport_zahlweisen (shop, zahlweise_shop, aktiv) values ('$shop','".$this->app->DB->real_escape_string($warenkorb['zahlungsweise'])."',0)"); + } + } + } + + $found = false; + if($shopexport_zahlweisen) + { + foreach($shopexport_zahlweisen as $zahlung) + { + $warenkorb['zahlungsweise'] = $zahlung['zahlweise_wawision']; + $warenkorb['vorabbezahltmarkieren'] = $zahlung['vorabbezahltmarkieren']; + if(!$zahlung['autoversand']){ + $warenkorb['autoversand'] = 0; + } + if($zahlung['keinerechnung']){ + $warenkorb['auftragsart'] = 'lieferung'; + } + if($zahlung['fastlane'] == 1) { + $fastlane = 1; + } + $found = true; + break; + } + } + if(!$found) + { + $shopexport_zahlweisen2 = $this->app->DB->SelectArr("SELECT * FROM shopexport_zahlweisen WHERE shop='$shop' AND aktiv = 1 AND zahlweise_wawision <> '' AND zahlweise_shop = ''"); + if($shopexport_zahlweisen2) + { + foreach($shopexport_zahlweisen2 as $zahlung) + { + $warenkorb['zahlungsweise'] = $zahlung['zahlweise_wawision']; + $warenkorb['vorabbezahltmarkieren'] = $zahlung['vorabbezahltmarkieren']; + if(!$zahlung['autoversand']){ + $warenkorb['autoversand'] = 0; + } + if($zahlung['keinerechnung']){ + $warenkorb['auftragsart'] = 'lieferung'; + } + if($zahlung['fastlane'] == 1) { + $fastlane = 1; + } + $found = true; + break; + } + } + } + if($warenkorb['zahlungsweise']==='bar') + { + $versand = 'selbstabholer'; + } + }else{ + if($warenkorb['zahlungsweise'] === 'secupay_creditcard') { + $warenkorb['zahlungsweise']='secupay'; + } + if($warenkorb['zahlungsweise'] === 'Amazoncba') { + $warenkorb['zahlungsweise']='amazon'; + } + if($warenkorb['zahlungsweise'] === 'sofort_sofortueberweisung'){ + $warenkorb['zahlungsweise'] = 'sofortueberweisung'; + } + + $bekanntezahlungsweisen = $this->GetZahlungsweise(); + if(!isset($bekanntezahlungsweisen[$warenkorb['zahlungsweise']])) + { + $warenkorb['zahlungsweise'] = $this->Firmendaten("zahlungsweise"); + } + + if($warenkorb['zahlungsweise']==='bar') + { + $versand = 'selbstabholer'; + } + + $vorabbezahltmarkieren_ohnevorkasse_bar = $shopexportArr['vorabbezahltmarkieren_ohnevorkasse_bar']; + + if($vorabbezahltmarkieren_ohnevorkasse_bar=='1' && ($warenkorb['zahlungsweise']!=='rechnung' && $warenkorb['zahlungsweise']!=='nachnahme' && $warenkorb['zahlungsweise']!=='sofortueberweisung' + && $warenkorb['zahlungsweise']!=='bar' && $warenkorb['zahlungsweise']!=='vorkasse' && $warenkorb['zahlungsweise']!=='paypal')) + { + $warenkorb['vorabbezahltmarkieren']='1'; + } + + if(empty($warenkorb['vorabbezahltmarkieren']) || $warenkorb['vorabbezahltmarkieren']!='1') { + $warenkorb['vorabbezahltmarkieren']='0'; + } + } + + switch($shopexportArr['autoversandoption']){ + case 'rechnungundlieferschein': + $warenkorb['auftragsart'] = 'standardauftrag'; + break; + case 'nurrechnung': + $warenkorb['auftragsart'] = 'rechnung'; + break; + case 'nurlieferschein': + $warenkorb['auftragsart'] = 'lieferung'; + break; + } + + + if(!empty($warenkorb['lieferadresse_name'])){ + $warenkorb['abweichendelieferadresse'] = '1'; + } + else{ + $warenkorb['abweichendelieferadresse'] = '0'; + } + + + //belegnummer fuer auftrag erzeugen + $belegnr = (String)$this->app->DB->Select("SELECT belegnr FROM $doctype WHERE id = '$auftrag' LIMIT 1"); + if($belegnr === '' || $belegnr === '0') + { + if((String)$demomodus === '1' || $doctype === 'angebot') + { + $belegnr = ""; + $demomodus = 1; + }else{ + $belegnr = $this->GetNextNummer($doctype,$projekt,$auftrag); + } + } + + if($warenkorb['bestellnummer']!='') { + $warenkorb['bestellnummer'] = 'Ihre Bestellnummer: '.$warenkorb['bestellnummer']; + } + + + if(!isset($warenkorb['aktion'])) { + $warenkorb['aktion'] = ""; + } + + if(isset($warenkorb['aktionscode']) && $warenkorb['aktionscode']!="") { + $warenkorb['aktion'] = $warenkorb['aktionscode']; + } + + $shopfreitext = $shopexportArr['freitext']; + if($shopfreitext === 'freitext' && !empty($warenkorb['internebemerkung'])) + { + if(empty($warenkorb['freitext'])) + { + $warenkorb['freitext'] = $warenkorb['internebemerkung']; + }else{ + $warenkorb['freitext'] .= "\n".$warenkorb['internebemerkung']; + } + $warenkorb['internebemerkung'] = ''; + if(!empty($warenkorb['internebemerkung'])) + { + $warenkorb['internebemerkung'] = ''; + } + }elseif($shopfreitext === 'internebemerkung' && !empty($warenkorb['freitext'])) + { + if(empty($warenkorb['internebemerkung'])) + { + $warenkorb['internebemerkung'] = $warenkorb['freitext']; + }else{ + $warenkorb['internebemerkung'] .= "\n".$warenkorb['freitext']; + } + $warenkorb['freitext'] = ''; + } + + $checksprache = $this->app->DB->Select("SELECT sprache FROM shopexport_sprachen WHERE shop = '$shop' AND (projekt = '$projekt' OR projekt = 0) AND + (land = '".(isset($warenkorb['land'])?$warenkorb['land']:$this->app->erp->Firmendaten('land'))."' OR land = '') ORDER BY projekt = '$projekt' DESC, land = '".$warenkorb['land']."' DESC LIMIT 1 + "); + if(!isset($warenkorb['kunde_sprache']) || !$warenkorb['kunde_sprache']){ + $warenkorb['kunde_sprache'] = $checksprache; + } + + if($warenkorb['bestellnummer']!=''){ + $warenkorb['freitext'] .= "\r\n" . $warenkorb['bestellnummer']; + } + + $escapearr = array('ansprechpartner','lieferadresse_name', 'lieferadresse_strasse','lieferadresse_unterabteilung','lieferadresse_abteilung','lieferadresse_ansprechpartner','lieferadresse_ort','lieferadresse_adresszusatz','freitext'); + foreach($escapearr as $k) + { + if(isset($warenkorb[$k])){ + $warenkorb[$k] = $this->app->DB->real_escape_string($warenkorb[$k]); + } + } + + if($doctype === 'angebot'){ + $this->app->DB->Update("UPDATE angebot SET anfrage = '".$this->app->DB->real_escape_string($warenkorb['onlinebestellnummer'])."' WHERE id = '$auftrag' LIMIT 1"); + } + + $this->app->DB->Update("UPDATE $doctype SET + belegnr='$belegnr', + datum='{$warenkorb['bestelldatum']}', + lieferdatum='{$warenkorb['lieferdatum']}', + ustid='{$warenkorb['ustid']}', + ust_befreit='{$ust_befreit}', + internet='{$warenkorb['onlinebestellnummer']}', + transaktionsnummer='{$warenkorb['transaktionsnummer']}', + aktion='{$warenkorb['aktion']}', + versandart='{$versand}', + vertrieb='{$vertrieb}', + zahlungsweise='{$warenkorb['zahlungsweise']}', + freitext='{$warenkorb['freitext']}', + bank_inhaber='{$warenkorb['kontoinhaber']}', + bank_institut='{$warenkorb['bank']}', + bank_blz='{$warenkorb['blz']}', + bank_konto='{$warenkorb['kontonummer']}', + ".($doctype !== 'angebot'?"vorabbezahltmarkieren='{$warenkorb['vorabbezahltmarkieren']}',":'')." + autoversand='1', + abweichendelieferadresse='{$warenkorb['abweichendelieferadresse']}', + ansprechpartner='{$warenkorb['ansprechpartner']}', + liefername='{$warenkorb['lieferadresse_name']}', + lieferland='{$warenkorb['lieferadresse_land']}', + lieferstrasse='{$warenkorb['lieferadresse_strasse']}', + lieferabteilung='{$warenkorb['lieferadresse_abteilung']}', + lieferunterabteilung='{$warenkorb['lieferadresse_unterabteilung']}', + lieferansprechpartner='{$warenkorb['lieferadresse_ansprechpartner']}', + lieferort='{$warenkorb['lieferadresse_ort']}', + lieferplz='{$warenkorb['lieferadresse_plz']}', + liefertitel='{$warenkorb['lieferadresse_titel']}', + lieferemail='{$warenkorb['lieferadresse_email']}', + lieferadresszusatz='{$warenkorb['lieferadresse_adresszusatz']}', + packstation_inhaber='{$warenkorb['packstation_inhaber']}', + packstation_station='{$warenkorb['packstation_nummer']}', + packstation_ident='{$warenkorb['packstation_postidentnummer']}', + packstation_plz='{$warenkorb['packstation_plz']}', + packstation_ort='{$warenkorb['packstation_ort']}', + ".($doctype !== 'angebot'?"partnerid='{$warenkorb['affiliate_ref']}',":'')." + ".($doctype !== 'angebot'?"kennen='{$warenkorb['kennen']}',":'')." + status=".((String)$demomodus === '1'?"'angelegt'":"'freigegeben'").", + projekt='$projekt', + shop='$shop', + zahlungszielskonto = 0, + bodyzusatz='{$warenkorb['bodyzusatz']}', + gesamtsumme='{$warenkorb['gesamtsumme']}' WHERE id='$auftrag' LIMIT 1"); + + if(!empty($warenkorb['angebot']) && $warenkorb['angebot']!='') + { + $angebotid = $this->app->DB->Select("SELECT id FROM angebot WHERE belegnr='".$this->app->DB->real_escape_string($warenkorb['angebot'])."' AND belegnr!='' LIMIT 1"); + if($angebotid > 0) + { + $this->app->DB->Update("UPDATE angebot SET auftrag='$belegnr', auftragid='$auftrag' WHERE id='$angebotid' LIMIT 1"); + $this->app->DB->Update("UPDATE auftrag SET angebot='".$this->app->DB->real_escape_string($warenkorb['angebot'])."', angebotid='$angebotid' WHERE id='$auftrag' LIMIT 1"); + } + } + + if($projekt && $doctype === 'auftrag') + { + $bevorzugteslager = $this->app->DB->Select("SELECT l.id FROM projekt p INNER JOIN lager l ON p.standardlager = l.id WHERE p.id = '$projekt' LIMIT 1"); + if($bevorzugteslager){ + $this->app->DB->Update("UPDATE auftrag SET standardlager = '$bevorzugteslager' WHERE id='$auftrag' LIMIT 1"); + } + } + + + if($doctype === 'auftrag' && isset($warenkorb['ust_ok']) && (string)$warenkorb['ust_ok'] === '0') { + $this->app->DB->Update( + sprintf( + 'UPDATE `auftrag` SET `ust_ok` = 0 WHERE `id` = %d', + $auftrag + ) + ); + } + + + if($this->app->DB->error()) + { + $this->app->DB->Update("UPDATE $doctype SET versandart='{$versand}' WHERE id='$auftrag'"); + $this->app->DB->Update("UPDATE $doctype SET datum='{$warenkorb['bestelldatum']}' WHERE id='$auftrag'"); + $this->app->DB->Update("UPDATE $doctype SET shop='$shop' WHERE id='$auftrag'"); + $this->app->DB->Update("UPDATE $doctype SET zahlungsweise='{$warenkorb['zahlungsweise']}' WHERE id='$auftrag' LIMIT 1"); + } + $this->app->DB->Update("UPDATE $doctype SET + name = '".$this->app->DB->real_escape_string($warenkorb['name'])."' + ,strasse = '".$this->app->DB->real_escape_string($warenkorb['strasse'])."' + ,plz = '".$this->app->DB->real_escape_string($warenkorb['plz'])."' + ,ort = '".$this->app->DB->real_escape_string($warenkorb['ort'])."' + ,land = '".$this->app->DB->real_escape_string($warenkorb['land'])."' + ,abteilung = '".$this->app->DB->real_escape_string($warenkorb['abteilung'])."' + ,unterabteilung= '".$this->app->DB->real_escape_string($warenkorb['unterabteilung'])."' + ,ansprechpartner= '".$warenkorb['ansprechpartner']."' + ,adresszusatz= '".$this->app->DB->real_escape_string($warenkorb['adresszusatz'])."' + ,email= '".$this->app->DB->real_escape_string($warenkorb['email'])."' + ,telefon= '".$this->app->DB->real_escape_string($warenkorb['telefon'])."' + ,telefax= '".$this->app->DB->real_escape_string($warenkorb['telefax'])."' + WHERE id='$auftrag' LIMIT 1"); + + if(!empty($warenkorb['anrede'])){ + $query = sprintf("UPDATE `%s` SET `typ` = '%s' WHERE `id` = %d", + $doctype, $this->app->DB->real_escape_string($warenkorb['anrede']), $auftrag); + $this->app->DB->Update($query); + } + if($warenkorb['ustid']){ + $this->app->DB->Update("UPDATE $doctype SET ustid= '" . $this->app->DB->real_escape_string($warenkorb['ustid']) . "' WHERE id='$auftrag' LIMIT 1"); + } + if(!empty($warenkorb['abweichendelieferadresse'])){ + $abweichendeUstId = ''; + if(!empty($warenkorb['lieferadresse_ustid'])){ + $abweichendeUstId = $warenkorb['lieferadresse_ustid']; + } + $this->app->DB->Update("UPDATE $doctype SET ustid= '".$this->app->DB->real_escape_string($abweichendeUstId)."' WHERE id='$auftrag' LIMIT 1"); + } + + if($shopexportArr['vertrieb']) { + $vertriebname = $this->app->DB->SelectRow( + sprintf( + 'SELECT id, name FROM adresse WHERE id = %d AND geloescht <> 1', + $shopexportArr['vertrieb'] + ) + ); + if($vertriebname && $doctype === 'angebot'){ + $this->app->DB->Update( + sprintf( + "UPDATE angebot SET vertriebid = %d, vertrieb = '%s' WHERE id = %d", + + $shopexportArr['vertrieb'], $this->app->DB->real_escape_string($vertriebname['name']), $auftrag + ) + ); + } + elseif($vertriebname && $doctype !== 'angebot') { + $this->app->DB->Update( + sprintf( + "UPDATE auftrag SET vertriebid = %d, vertrieb = '%s' WHERE id = %d", + $shopexportArr['vertrieb'], $this->app->DB->real_escape_string($vertriebname['name']), $auftrag + ) + ); + } + } + + if($fastlane) + { + $this->app->DB->Update("UPDATE $doctype SET fastlane= 1 WHERE id='$auftrag' LIMIT 1"); + } + + if(isset($warenkorb['auftragsart'])){ + $this->app->DB->Update("UPDATE $doctype SET art = '{$warenkorb['auftragsart']}' WHERE id='$auftrag'"); + } + + if(!empty($warenkorb['bundesland'])){ + $this->app->DB->Update("UPDATE $doctype SET bundesland = '".$this->app->DB->real_escape_string($warenkorb['bundesland'])."' WHERE id = '$auftrag' LIMIT 1"); + } + if($this->app->erp->ModulVorhanden('bundesstaaten')) + { + if(!empty($warenkorb['bundesstaat'])) + { + $bundesstaat = $this->app->DB->Select("SELECT iso FROM `bundesstaaten` WHERE land = '".$this->app->DB->real_escape_string($warenkorb['land'])."' AND (iso = '".$this->app->DB->real_escape_string($warenkorb['bundesstaat'])."' OR bundesstaat = '".$this->app->DB->real_escape_string($warenkorb['bundesstaat'])."') AND aktiv = 1 LIMIT 1"); + if($bundesstaat != ''){ + $this->app->DB->Update("UPDATE $doctype SET bundesstaat = '".$this->app->DB->real_escape_string($bundesstaat)."' WHERE id = '$auftrag' LIMIT 1"); + } + } + if(!empty($warenkorb['lieferbundesstaat'])) + { + $bundesstaat = $this->app->DB->Select("SELECT iso FROM `bundesstaaten` WHERE land = '".$this->app->DB->real_escape_string($warenkorb['lieferland'])."' AND (iso = '".$this->app->DB->real_escape_string($warenkorb['lieferadresse_bundesstaat'])."' OR bundesstaat = '".$this->app->DB->real_escape_string($warenkorb['lieferadresse_bundesstaat'])."') AND aktiv = 1 LIMIT 1"); + if($bundesstaat != ''){ + $this->app->DB->Update("UPDATE $doctype SET lieferbundesstaat = '".$this->app->DB->real_escape_string($bundesstaat)."' WHERE id = '$auftrag' LIMIT 1"); + } + } + } + + $keinautoversandwegenkommentar = false; + if((!empty($warenkorb['freitext']) || !empty($warenkorb['internebemerkung'])) && $shopexportArr['autoversandbeikommentardeaktivieren']){ + $keinautoversandwegenkommentar = true; + } + if((isset($warenkorb['autoversand']) && $warenkorb['autoversand'] == '0') || $keinautoversandwegenkommentar){ + $this->app->DB->Update("UPDATE $doctype SET autoversand='0' WHERE id='$auftrag'"); + } + if(!empty($warenkorb['autoversandueberschreiben']) && $warenkorb['autoversandueberschreiben'] == '1'){ + $this->app->DB->Update("UPDATE $doctype SET autoversand='1' WHERE id='$auftrag'"); + } + if(!empty($warenkorb['internebemerkung'])){ + $this->app->DB->Update("UPDATE $doctype set internebemerkung = '".$this->app->DB->real_escape_string( $warenkorb['internebemerkung'])."' WHERE id = '$auftrag' LIMIT 1"); + } + if(!empty($warenkorb['internebezeichnung'])){ + $this->app->DB->Update("UPDATE $doctype set internebezeichnung = '".$this->app->DB->real_escape_string( $warenkorb['internebezeichnung'])."' WHERE id = '$auftrag' LIMIT 1"); + } + + if($this->app->DB->Select("SELECT `ust_ok` FROM `shopexport` WHERE `id` = '{$shop}' LIMIT 1")){ + $this->app->DB->Update("UPDATE `{$doctype}` SET `ust_ok` = 1 WHERE `id` = '{$auftrag}' LIMIT 1"); + }elseif(isset($warenkorb['ust_ok']) && $warenkorb['ust_ok'] == '1'){ + $this->app->DB->Update("UPDATE `{$doctype}` SET `ust_ok` = 1 WHERE `id` = '{$auftrag}' LIMIT 1"); + }elseif($doctype === 'auftrag'){ + $this->app->DB->Update("UPDATE `{$doctype}` SET `ust_ok` = 0 WHERE `id` = '{$auftrag}' LIMIT 1"); + } + + if($warenkorb['zahlungsweise'] === 'rechnung') + { + $fromstandard = true; + $adressezahlungsweise = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id = '$adresse' LIMIT 1"); + if($adressezahlungsweise) + { + if($adressezahlungsweise['zahlungsweise'] === 'rechnung' && $adressezahlungsweise['zahlungszieltage'] > 0){ + $fromstandard = false; + } + } + if($fromstandard) + { + $this->app->DB->Update("UPDATE $doctype SET + zahlungszielskonto='".(float)$this->Firmendaten('zahlungszielskonto')."', + zahlungszieltage='".(float)$this->Firmendaten('zahlungszieltage')."', + zahlungszieltageskonto='".(float)$this->Firmendaten('zahlungszieltageskonto')."' + WHERE id='$auftrag' LIMIT 1"); + } + } + + if(!empty($warenkorb['kunde_sprache'])) + { + $this->app->DB->Update("UPDATE $doctype SET sprache = '".$this->app->DB->real_escape_string($warenkorb['kunde_sprache'])."' WHERE id = '$auftrag' LIMIT 1"); + if(!$this->app->DB->Select("SELECT adressennichtueberschreiben FROM shopexport WHERE id = '$shop' LIMIT 1")) + { + $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$auftrag' LIMIT 1"); + if('' === (String)$this->app->DB->Select("SELECT sprache FROM adresse WHERE id = '$adresse' LIMIT 1")) + { + $this->app->DB->Update("UPDATE adresse SET sprache = '".$this->app->DB->real_escape_string($warenkorb['kunde_sprache'])."' WHERE id = '$adresse' LIMIT 1"); + } + } + } + + if(!empty($warenkorb['anhang'])) + { + if(!is_array($warenkorb['anhang'])){ + $data = $warenkorb['anhang']; + $warenkorb['anhang'] = []; + $warenkorb['anhang'][] = ['datei' => $data, 'endung' => '']; + } + + foreach ($warenkorb['anhang'] as $anhang){ + $endung = ltrim($anhang['endung'],'.'); + $dateilabel = 'Anhang'; + $decodedData = @base64_decode($anhang['datei']); + $tmpdatei = $this->app->erp->GetTMP().'anhangtmp'.microtime(true); + file_put_contents($tmpdatei ,$decodedData); + if(empty($endung)){ + $mimetype = explode('/',mime_content_type($tmpdatei)); + switch ($mimetype[0]){ + case 'image': + if(strpos($mimetype[1],'jpg') !== false || strpos($mimetype[1],'jpeg') !== false){ + $endung = 'jpg'; + } + if(strpos($mimetype[1],'png') !== false){ + $endung = 'png'; + } + if(strpos($mimetype[1],'bmp') !== false){ + $endung = 'bmp'; + } + break; + case 'text': + if(strpos($mimetype[1],'plain') !== false){ + $endung = 'txt'; + } + if(strpos($mimetype[1],'php') !== false){ + $endung = 'php'; + } + break; + default: + $endung = 'pdf'; + break; + } + } + + $datei = $this->app->Conf->WFuserdata.'/'.md5($warenkorb['onlinebestellnummer'].'.'.$endung.microtime(true)); + move_uploaded_file($tmpdatei,$datei); + + if(file_put_contents($datei,$decodedData)) + { + if(@is_file($datei) && @filesize($datei)) + { + if(!empty(trim($anhang['name']))){ + $dateilabel = $this->app->DB->real_escape_string(trim($anhang['name'])); + } + $fileid = $this->CreateDatei($warenkorb['onlinebestellnummer'].'.'.$endung, $dateilabel, '', '', $datei, $this->app->User->GetName()); + $this->AddDateiStichwort($fileid, 'anhang', $doctype, $auftrag); + unlink($datei); + } + } + } + } + + + if(isset($warenkorb['zahlungszielskonto'])){ + $this->app->DB->Update("UPDATE $doctype SET zahlungszielskonto = '".(float)(str_replace(',','.',$warenkorb['zahlungszielskonto']))."' WHERE id = '$auftrag' LIMIT 1"); + } + if(isset($warenkorb['zahlungszieltage'])){ + $this->app->DB->Update("UPDATE $doctype SET zahlungszieltage = '".(int)($warenkorb['zahlungszieltage'])."' WHERE id = '$auftrag' LIMIT 1"); + } + if(isset($warenkorb['zahlungszieltageskonto'])){ + $this->app->DB->Update("UPDATE $doctype SET zahlungszieltageskonto = '".(int)($warenkorb['zahlungszieltageskonto'])."' WHERE id = '$auftrag' LIMIT 1"); + } + if(isset($warenkorb['steuersatz_normal']) && (float)str_replace(',','.',$warenkorb['steuersatz_normal']) > 1){ + $this->app->DB->Update("UPDATE $doctype SET steuersatz_normal = '".(float)(str_replace(',','.',$warenkorb['steuersatz_normal']))."' WHERE id = '$auftrag' LIMIT 1"); + } + if(isset($warenkorb['steuersatz_ermaessigt']) && (float)str_replace(',','.',$warenkorb['steuersatz_ermaessigt']) > 1){ + $this->app->DB->Update("UPDATE $doctype SET steuersatz_ermaessigt = '".(float)(str_replace(',','.',$warenkorb['steuersatz_ermaessigt']))."' WHERE id = '$auftrag' LIMIT 1"); + } + + $this->RunHook('import_auftrag_tax_changed',2, $doctype, $auftrag); + if(isset($warenkorb['steuersatz_normal']) && (float)str_replace(',','.',$warenkorb['steuersatz_normal']) > 1){ + $warenkorb['steuersatz_normal'] = $this->app->DB->Select("SELECT steuersatz_normal FROM $doctype WHERE id = $auftrag LIMIT 1"); + } + if(isset($warenkorb['steuersatz_ermaessigt']) && (float)str_replace(',','.',$warenkorb['steuersatz_ermaessigt']) > 1){ + $warenkorb['steuersatz_ermaessigt'] = $this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $doctype WHERE id = $auftrag LIMIT 1"); + } + + $this->RunHook('import_auftrag_tax_changed',2, $doctype, $auftrag); + if(isset($warenkorb['steuersatz_normal']) && (float)str_replace(',','.',$warenkorb['steuersatz_normal']) > 1){ + $warenkorb['steuersatz_normal'] = $this->app->DB->Select("SELECT steuersatz_normal FROM $doctype WHERE id = $auftrag LIMIT 1"); + } + if(isset($warenkorb['steuersatz_ermaessigt']) && (float)str_replace(',','.',$warenkorb['steuersatz_ermaessigt']) > 1){ + $warenkorb['steuersatz_ermaessigt'] = $this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $doctype WHERE id = $auftrag LIMIT 1"); + } + + $waehrung = 'EUR'; + if(!empty($warenkorb['waehrung'])) { + $waehrung = $this->app->DB->real_escape_string(trim(strtoupper($warenkorb['waehrung']))); + if(!$waehrung) { + $waehrung = 'EUR'; + } + else{ + $this->app->DB->Update("UPDATE $doctype SET waehrung = '$waehrung' WHERE id = '$auftrag' LIMIT 1"); + } + } + + if(isset($warenkorb['auftragsart']) && $warenkorb['auftragsart']){ + $this->app->DB->Update("UPDATE $doctype SET art = '".$this->app->DB->real_escape_string($warenkorb['auftragsart'])."' WHERE id = '$auftrag' LIMIT 1"); + } + if($shop){ + $shoptyp = $shopexportArr['typ']; + $artikelimport = $shopexportArr['artikelimport']; + $artikelimporteinzeln = $shopexportArr['artikelimporteinzeln']; + $projekt = $shopexportArr['projekt']; + if(!empty($subshopprojekt)){ + $projekt = $subshopprojekt; + } + if(!empty($warenkorbprojekt)){ + $projekt = $warenkorbprojekt; + } + $multiprojekt = $shopexportArr['multiprojekt']; + $artikelnummernummerkreis = $shopexportArr['artikelnummernummerkreis']; + $shopbezeichnung = $shopexportArr['bezeichnung']; + $stuecklisteergaenzen = $shopexportArr['stuecklisteergaenzen']; + $artikeltexteuebernehmen = $shopexportArr['artikeltexteuebernehmen']; + } + + if($waehrung !== 'EUR') { + $this->LoadKurs($auftrag, $doctype, $projekt); + } + + if($doctype === 'auftrag'){ + $this->RunHook('ImportAuftrag', 4, $auftrag, $shop, $warenkorb, $projekt); + } + + if(isset($warenkorb['vertrieb'])){ + $this->app->DB->Update("UPDATE $doctype SET vertrieb = '".$warenkorb['vertrieb']."' WHERE id = '$auftrag' LIMIT 1"); + } + if(isset($warenkorb['vertriebid']) && $warenkorb['vertriebid'] > 0){ + $this->app->DB->Update("UPDATE $doctype SET vertriebid = '".$warenkorb['vertriebid']."' WHERE id = '$auftrag' LIMIT 1"); + } + + if(empty($warenkorb['steuerfrei']) && !empty($warenkorb['checksteuerfrei'])) + { + if($doctype === 'angebot' && !$this->AngebotMitUmsatzeuer($auftrag)) + { + $warenkorb['steuerfrei'] = 1; + }elseif($doctype === 'auftrag' && !$this->AuftragMitUmsatzsteuer($auftrag)) + { + $warenkorb['steuerfrei'] = 1; + } + } + + $parentcount = []; + $rabattpositionen = array(); + if(!empty($warenkorb['articlelist'])){ + foreach ($warenkorb['articlelist'] as $key => $value) {//Leerzeichen entfernen in Artikelnummern + unset($warenkorb['articlelist'][$key]['databaseId']); + if(isset($warenkorb['articlelist'][$key]['articleid'])){ + $warenkorb['articlelist'][$key]['articleid'] = trim($value['articleid']); + } + if(isset($warenkorb['articlelist'][$key]['variante_von'])){ + $warenkorb['articlelist'][$key]['variante_von'] = trim($value['variante_von']); + } + } + + //Stücklisten mit einem Element auflösen + foreach ($warenkorb['articlelist'] as $key => $value) { + if($stuecklisteergaenzen){ + $warenkorb['articlelist'][$key]['stuecklisteergaenzen'] = true; + } + if(isset($value['posid']) && $value['posid']) { + $posids[$value['posid']] = $key; + } + if(isset($value['parentid']) && $value['parentid']){ + if(empty($parentcount) || !isset($parentcount[$value['parentid']])){ + $parentcount[$value['parentid']] = 0; + } + $parentcount[$value['parentid']]++; + } + } + } + //if(true || !$stuecklisteergaenzen) + if(true) + { + if(!empty($parentcount)) + { + foreach($parentcount as $k => $v) + { + if($v == 1 && isset($posids[$k])) + { + foreach($warenkorb['articlelist'] as $key=>$value) + { + if(isset($value['parentid']) && $value['parentid'] && $value['parentid'] == $k) + { + if(isset($warenkorb['articlelist'][$posids[$k]]['options']) && $warenkorb['articlelist'][$posids[$k]]['options']) + { + $warenkorb['articlelist'][$key]['options'] = (isset($warenkorb['articlelist'][$key]['options']) && $warenkorb['articlelist'][$key]['options']?$warenkorb['articlelist'][$key]['options'].' ':'').$warenkorb['articlelist'][$posids[$k]]['options']; + } + if((isset($warenkorb['articlelist'][$posids[$k]]['price']) && $warenkorb['articlelist'][$posids[$k]]['price'] != 0) || (isset($warenkorb['articlelist'][$posids[$k]]['price_netto']) && $warenkorb['articlelist'][$posids[$k]]['price_netto'] != 0)) + { + if(isset($warenkorb['articlelist'][$posids[$k]]['price'])){ + $warenkorb['articlelist'][$key]['price'] = $warenkorb['articlelist'][$posids[$k]]['price']; + } + if(isset($warenkorb['articlelist'][$posids[$k]]['price_netto'])){ + $warenkorb['articlelist'][$key]['price_netto'] = $warenkorb['articlelist'][$posids[$k]]['price_netto']; + } + $warenkorb['articlelist'][$key]['quantity'] = $warenkorb['articlelist'][$posids[$k]]['quantity']; + } + if(isset($warenkorb['articlelist'][$posids[$k]]['steuersatz'])) + { + $warenkorb['articlelist'][$key]['steuersatz'] = $warenkorb['articlelist'][$posids[$k]]['steuersatz']; + } + unset($warenkorb['articlelist'][$key]['parentid']); + unset($warenkorb['articlelist'][$posids[$k]]); + } + } + } + } + } + } + + if(!empty($parentcount)) + { + foreach($parentcount as $k => $v) + { + if($v > 1 && isset($posids[$k])) + { + if(((isset($warenkorb['articlelist'][$posids[$k]]['price']) && $warenkorb['articlelist'][$posids[$k]]['price'] > 0) || + (isset($warenkorb['articlelist'][$posids[$k]]['price_netto']) && $warenkorb['articlelist'][$posids[$k]]['price_netto'] > 0))){ + foreach($warenkorb['articlelist'] as $key=>$value) + { + if(isset($value['parentid']) && $value['parentid'] && $value['parentid'] == $k && ((isset($value['price']) && $value['price'] > 0) || (isset($value['price_netto']) && $value['price_netto'] > 0)) ) + { + $warenkorb['articlelist'][$key]['price'] = 0; + $warenkorb['articlelist'][$key]['price_netto'] = 0; + } + } + } + } + } + } + + if(isset($warenkorb['gutscheincode'])){ + $voucher = $this->app->DB->SelectRow( sprintf("SELECT v.id,v.agent_address_id, a.name AS agent_name, v.commission_rate, v.voucher_code FROM voucher v + JOIN adresse a ON a.id=v.agent_address_id + WHERE v.voucher_code<>'' AND v.voucher_code='%s' AND (v.project_id=0 OR v.project_id='%s') AND a.geloescht<>1 LIMIT 1", + $warenkorb['gutscheincode'],$projekt)); + + if(!empty($voucher['id'])){ + $this->app->DB->Insert(sprintf("INSERT INTO commission_rate_receipt (doctype_id,doctype,commission_rate,notice) + VALUES ('%s','%s','%s','%s')",$auftrag,$doctype,$voucher['commission_rate'],'Kommission für Gutschein: '.$voucher['voucher_code'])); + + $this->app->DB->Update(sprintf("UPDATE $doctype SET vertrieb='%s', vertriebid='%s' WHERE id=%s", + $voucher['agent_name'],$voucher['agent_address_id'],$auftrag)); + } + } + + //artikelpositionen buchen + foreach($warenkorb['articlelist'] as $key=>$value) + { + $value['articleid'] = trim($value['articleid']); + if(isset($varj_id)){ + unset($varj_id); + } + if(!isset($warenkorb['articlelist'][$key]['ignorieren'])) + { + // wenn es das produkt in dem projekt gibt + $artikelimporteinzelngesetzt = $this->app->DB->Select("SELECT autoabgleicherlaubt FROM artikel WHERE nummer='{$value['articleid']}' AND projekt='$projekt' LIMIT 1"); + + // pruefe ob auftrag auf anderes projekt gestellt werden muss + if($multiprojekt=="1") + { + $artikelprojekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE nummer='{$value['articleid']}' LIMIT 1");// AND //TODO BENE + if($artikelprojekt > 0) + { + $projekt = $artikelprojekt; + } + } + else{ + $artikelprojekt = $this->app->DB->Select("SELECT projekt FROM artikel WHERE nummer='{$value['articleid']}' AND projekt='$projekt' LIMIT 1");// AND //TODO BENE + } + + $zwangsprojekt = $this->app->DB->Select("SELECT shopzwangsprojekt FROM projekt WHERE id='$artikelprojekt' LIMIT 1"); + + if($zwangsprojekt==1) + { + $this->app->DB->Update("UPDATE $doctype SET projekt='$artikelprojekt' WHERE id='$auftrag'"); + } + + $extart = $shopexportArr['artikelnummernummerkreis']; + + $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id='$projekt' LIMIT 1"); + //$j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='{$value[articleid]}' AND (shop='$shop' OR shop2='$shop' OR shop3='$shop') LIMIT 1"); + + $j_id = null; + if(!empty($value['fremdnummer'])) + { + $j_id = $this->app->DB->Select("SELECT a.id FROM artikelnummer_fremdnummern af INNER JOIN artikel a on af.artikel = a.id WHERE af.nummer='{$value['fremdnummer']}' AND af.aktiv = 1 AND af.nummer <> '' AND (a.projekt='$projekt' OR af.shopid = '$shop') AND a.nummer <> 'DEL' AND IFNULL(a.geloescht,0) = 0 ORDER BY af.shopid = '$shop' DESC,IFNULL(a.intern_gesperrt,0) = 0 DESC, af.id LIMIT 1"); + } + if(empty($j_id)){ + if($multiprojekt == '1' || !$eigenernummernkreis){ + $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='{$value['articleid']}' AND IFNULL(intern_gesperrt,0) = 0 AND IFNULL(geloescht,0) = 0 LIMIT 1"); //TODO BENE + }else{ + $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='{$value['articleid']}' AND IFNULL(intern_gesperrt,0) = 0 AND IFNULL(geloescht,0) = 0 AND projekt='$projekt' LIMIT 1"); //TODO BENE + } + } + + if(!$j_id) + { + if($multiprojekt=='1' || !$eigenernummernkreis){ + $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='{$value['articleid']}' AND nummer <> 'DEL' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE + } + else{ + $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='{$value['articleid']}' AND nummer <> 'DEL' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE + } + } + if(!$j_id) + { + if($multiprojekt=='1' || !$eigenernummernkreis){ + $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='{$value['articleid']}' AND nummer <> 'DEL' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE + } + else{ + $j_id = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='{$value['articleid']}' AND nummer <> 'DEL' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); //TODO BENE + } + + } + + $check = false; + if($j_id) + { + $check = $this->app->DB->Select("SELECT id FROM verkaufspreise WHERE artikel='$j_id' + AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW()) AND ab_menge=1 + AND ((objekt='Standard' AND adresse=0) OR (objekt='' AND adresse=0)) AND geloescht=0 LIMIT 1"); + } + + + if($eigenernummernkreis) + { + $j_umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$j_id' LIMIT 1"); + } else { + $j_umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$j_id' LIMIT 1"); + } + + if($artikelimport || ($artikelimporteinzeln && $artikelimporteinzelngesetzt)) + { + if(isset($value['umsatzsteuer'])) + { + $j_umsatzsteuer = $value['umsatzsteuer']; + }elseif(isset($value['steuersatz'])) + { + + if(round((float)str_replace(',','.',$value['steuersatz']),2) == 7 || round(1+round((float)str_replace(',','.',$value['steuersatz']),2)/100,2) == round($this->GetSteuersatzErmaessigt(true,$auftrag,$doctype),2)) + { + $j_umsatzsteuer="ermaessigt"; + } + if(round((float)str_replace(',','.',$value['steuersatz']),2) == 19 || round(1+round((float)str_replace(',','.',$value['steuersatz']),2)/100,2) == round($this->GetSteuersatzNormal(true,$auftrag,$doctype),2)) + { + $j_umsatzsteuer="normal"; + } + } + if(isset($value['variante_von']) && $value['variante_von'] && $value['variante_von'] != $value['articleid']) + { + $value['variante_von'] = trim($value['variante_von']); + if($multiprojekt=='1' || !$eigenernummernkreis){ + $varj_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='{$value['variante_von']}' AND IFNULL(geloescht,0) = 0 AND IFNULL(intern_gesperrt,0) = 0 LIMIT 1"); + } + else{ + $varj_id = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='{$value['variante_von']}' AND IFNULL(geloescht,0) = 0 AND projekt='$projekt' AND IFNULL(intern_gesperrt,0) = 0 LIMIT 1"); + } + if(!$varj_id) + { + if($multiprojekt=='1' || !$eigenernummernkreis){ + $varj_id = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='{$value['variante_von']}' AND nummer <> 'DEL' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); + } + else{ + $varj_id = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='{$value['variante_von']}' AND nummer <> 'DEL' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); + } + } + if(!$varj_id) + { + if($multiprojekt=='1' || !$eigenernummernkreis){ + $varj_id = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='{$value['variante_von']}' AND nummer <> 'DEL' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); + } + else{ + $varj_id = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='{$value['variante_von']}' AND nummer <> 'DEL' AND projekt='$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); + } + } + + if(!$varj_id) + { + $dataart = []; + if($artikelnummernummerkreis) + { + $variante_von = $value['variante_von']; + $value['variante_von'] = $this->GetNextArtikelnummer('produkt', 1, $projekt); + } + $dataart['nummer'] = $value['variante_von']; + $dataart['generierenummerbeioption'] = 1; + //$dataart['variante'] = 1; + $dataart['projekt'] = $projekt; + $dataart['art'] = 'produkt'; + if(isset($this->app->User)) + { + $dataart['firma'] = $this->app->User->GetFirma(); + }else { + $dataart['firma'] = 1; + } + if($j_umsatzsteuer==='ermaessigt'){ + $dataart['umsatzsteuer'] = 'ermaessigt'; + } + if($j_umsatzsteuer==='befreit'){ + $dataart['umsatzsteuer'] = 'befreit'; + } + $dataart['name_de'] = $value['variantename']; + $dataart['kurztext_de'] = $value['variantekurztext_de']; + if(isset($value['serviceartikel'])){ + $dataart['serviceartikel'] = $value['serviceartikel']; + } + if(isset($value['lagerartikel'])){ + $dataart['lagerartikel'] = $value['lagerartikel']; + } + if(isset($value['anhang'])){ + $dataart['anhang'] = $value['anhang']; + } + + //$dataart['anabregs_text'] = $value['varianteanabregs_text']; + $dataart['metakeywords_de'] = $value['variantemetakeywords_de']; + $dataart['metadescription_de'] = $value['variantemetadescription_de']; + $varj_id = $this->AddArtikel($dataart); + $this->app->erp->ObjektProtokoll('artikel', $varj_id, 'artikel_create','Shopimport: Atikelvariante erstellt'); + $this->AddVerkaufspreis($varj_id, 1, 0, $value['varianteprice']); + $value['articleid'] = $this->GetNextArtikelnummer("produkt", 1, $projekt); + } else { + $warenkorb['articlelist'][$key]['lagerartikel'] = $this->app->DB->Select("SELECT lagerartikel FROM artikel WHERE id = '$varj_id' LIMIT 1"); + $generierenummerbeioption = $this->app->DB->Select("SELECT generierenummerbeioption from artikel where id = '$varj_id' LIMIT 1"); + //$generierenummerbeioption = 1; + if($generierenummerbeioption) + { + $value['generierenummerbeioption'] = true; + $value['articleid'] = $this->GetNextArtikelnummer('produkt', 1, $projekt); + } + } + } + + if(empty($value['name']) && !empty($value['name_de'])){ + $value['name'] = $value['name_de']; + } + if($warenkorb['steuerfrei']==1) + { + if($j_umsatzsteuer==='ermaessigt') + { + $ap = $this->AddPositionManuellPreisNummer($doctype,$auftrag, $projekt, $value['articleid'],$value['quantity'],$value['name'], + isset($value['price_netto'])?$value['price_netto']:$value['price'],'ermaessigt',$value['rabatt'],$shop,$waehrung, $warenkorb['articlelist'][$key],$warenkorb['articlelist']); + }elseif($j_umsatzsteuer==="befreit"){ + $ap = $this->AddPositionManuellPreisNummer($doctype,$auftrag, $projekt, $value['articleid'],$value['quantity'],$value['name'], + isset($value['price_netto'])?$value['price_netto']:$value['price'],'befreit',$value['rabatt'],$shop,$waehrung, $warenkorb['articlelist'][$key],$warenkorb['articlelist']); + } else { + + $ap = $this->AddPositionManuellPreisNummer($doctype,$auftrag, $projekt, $value['articleid'],$value['quantity'],$value['name'], + isset($value['price_netto'])?$value['price_netto']:$value['price'],'normal',$value['rabatt'],$shop,$waehrung, $warenkorb['articlelist'][$key],$warenkorb['articlelist']); + } + } else { + if($j_umsatzsteuer==='ermaessigt') + { + + $ap = $this->AddPositionManuellPreisNummer($doctype,$auftrag, $projekt, $value['articleid'],$value['quantity'],$value['name'], + isset($value['price_netto'])?$value['price_netto']:($value['price']/$this->GetSteuersatzErmaessigt(true,$auftrag,$doctype)),"ermaessigt",$value['rabatt'],$shop,$waehrung, $warenkorb['articlelist'][$key],$warenkorb['articlelist']); + if($positionsteuersaetzeerlauben && !empty($warenkorb['steuersatz_ermaessigt']) && !isset($value['steuersatz'])) + { + $this->app->DB->Update("UPDATE $doctype"."_position SET steuersatz = ".$warenkorb['steuersatz_ermaessigt']." WHERE id = '$ap' LIMIT 1"); + } + }elseif($j_umsatzsteuer==='befreit') + { + $ap = $this->AddPositionManuellPreisNummer($doctype,$auftrag, $projekt, $value['articleid'],$value['quantity'],$value['name'], + isset($value['price_netto'])?$value['price_netto']:($value['price']),'befreit',$value['rabatt'],$shop,$waehrung, $warenkorb['articlelist'][$key],$warenkorb['articlelist']); + } else { + $ap = $this->AddPositionManuellPreisNummer($doctype,$auftrag, $projekt, $value['articleid'],$value['quantity'],$value['name'], + isset($value['price_netto'])?$value['price_netto']:($value['price']/$this->GetSteuersatzNormal(true,$auftrag,$doctype)),"normal",$value['rabatt'],$shop,$waehrung, $warenkorb['articlelist'][$key],$warenkorb['articlelist']); + if($positionsteuersaetzeerlauben && !empty($warenkorb['steuersatz_normal']) && !isset($value['steuersatz'])) + { + $this->app->DB->Update("UPDATE $doctype"."_position SET steuersatz = ".$warenkorb['steuersatz_normal']." WHERE id = '$ap' LIMIT 1"); + } + } + } + if(!empty($ap)){ + $warenkorb['articlelist'][$key]['databaseId'] = $ap; + } + if(!empty($ap) && isset($value['rabatt'])){ + $rabattpositionen[$ap] = $value['rabatt']; + } + if(empty($ap)){ + $this->LogFile('Fehler '.$value['articleid']); + } + if(isset($artap)){ + unset($artap); + } + if(!empty($ap)) + { + if(isset($value['webid'])){ + $this->app->DB->Update("UPDATE $doctype"."_position SET webid = '".$this->app->DB->real_escape_string($value['webid'])."' WHERE id = '$ap' LIMIT 1"); + } + $artap = $this->app->DB->Select("SELECT artikel FROM $doctype"."_position WHERE id = '$ap' LIMIT 1"); + $this->CopyArtikelVariante($artap, ($varj_id?$varj_id:$artap),isset($value['options']) && !empty($value['options'])?$value['options']:(isset($value['anabregs_text'])?$value['anabregs_text']:'')); + if($positionsteuersaetzeerlauben && isset($value['steuersatz']) && is_numeric($value['steuersatz'])){ + $this->app->DB->Update("UPDATE $doctype"."_position SET steuersatz = ".$value['steuersatz']." WHERE id = '$ap' LIMIT 1"); + } + if(isset($value['anhang'])){ + if(!is_array($value['anhang'])){ + $data = $value['anhang']; + $value['anhang'] = []; + $value['anhang'][] = ['datei' => $data, 'endung' => '', 'name' =>'', 'typ' => '', 'titel' => '']; + } + + foreach ($value['anhang'] as $anhang){ + $dateiname = trim($anhang['name']); + if(empty($dateiname)){ + $dateiname = $this->app->DB->Select("SELECT sort FROM $doctype"."_position WHERE id=$ap"); + } + $typ = trim($anhang['typ']); + if(empty($typ)){ + $typ = 'Bild'; + } + $titel = trim($anhang['titel']); + if(empty($titel)){ + $titel = 'Anhang'; + } + + $fileid = $this->addBase64Bild($anhang['datei'],$dateiname,$anhang['endung'],$titel); + if(!empty($fileid)){ + $this->AddDateiStichwort($fileid, $typ, $doctype, $auftrag, false, $ap, 'position'); + } + + } + } + } + if(!empty($value['variante_von']) && !empty($varj_id)) + { + if($artap) + { + $lieferant = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$varj_id' LIMIT 1"); + if($lieferant) + { + $this->app->DB->Update("UPDATE artikel set adresse = '$lieferant' WHERE id = '$artap' LIMIT 1"); + $this->AddEinkaufspreis($artap,1,$lieferant, $value['articleid'], $value['name'],0); + } + $lagerpl = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$varj_id' LIMIT 1"); + $produktion = $this->app->DB->Select("SELECT produktion FROM artikel WHERE id = '$varj_id' LIMIT 1"); + if($produktion){ + $this->app->DB->Update("UPDATE artikel set produktion = '1' WHERE id = '$artap' LIMIT 1"); + } + $stueckliste = $this->app->DB->Select("SELECT stueckliste FROM artikel WHERE id = '$varj_id' LIMIT 1"); + if($stueckliste){ + $this->app->DB->Update("UPDATE artikel set stueckliste = '1' WHERE id = '$artap' LIMIT 1"); + } + if($lagerpl){ + $this->app->DB->Update("UPDATE artikel set lager_platz = '$lagerpl' WHERE id = '$artap' LIMIT 1"); + } + $this->app->DB->Update("UPDATE artikel set variante = 1, variante_von = '$varj_id' WHERE id = '$artap' LIMIT 1"); + } + } + + $ueberspringe = true; + foreach($warenkorb['articlelist'] as $key2=>$value2) + { + if($ueberspringe) + { + if($key == $key2)$ueberspringe = false; + }else{ + if(isset($value['posid'])) + { + if(isset($value2['parentid']) && $value2['parentid'] == $value['posid']) + { + $warenkorb['articlelist'][$key2]['parentap'] = $ap; + $explodieren = false; + } + } + } + } + } else if ($check > 0) + { + // standardpreis aus wawision verwenden + $anummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$j_id' LIMIT 1"); + if(!empty($anummer)){ + $value['articleid'] = $anummer; + } + $ap = $this->AddAuftragPositionNummer($auftrag,$value['articleid'],$value['quantity'],$projekt,"",true, $doctype, $warenkorb['articlelist'][$key]); + if(isset($value['webid'])){ + $this->app->DB->Update("UPDATE $doctype"."_position SET webid = '".$this->app->DB->real_escape_string($value['webid'])."' WHERE id = '$ap' LIMIT 1"); + } + $ueberspringe = true; + foreach($warenkorb['articlelist'] as $key2=>$value2) + { + if($ueberspringe) + { + if($key == $key2){ + $ueberspringe = false; + } + }else{ + if(isset($value['posid'])) + { + if(isset($value2['parentid']) && $value2['parentid'] == $value['posid']) + { + $warenkorb['articlelist'][$key2]['parentap'] = $ap; + } + } + } + } + } + else { + // fehler + if($doctype !== 'angebot') + { + $this->AuftragProtokoll($auftrag,"Artikel nach Import nicht in interner Datenbank gefunden (Artikel: $j_nummer $j_name Menge: $j_menge Preis: $j_preis) bzw. kein Verkaufspreis vorhanden. Bitte prüfen Sie den Haken Automatischer Abgleich in der Shopschnittstelle"); + }else{ + $this->AngebotProtokoll($auftrag,"Artikel nach Import nicht in interner Datenbank gefunden (Artikel: $j_nummer $j_name Menge: $j_menge Preis: $j_preis) bzw. kein Verkaufspreis vorhanden. Bitte prüfen Sie den Haken Automatischer Abgleich in der Shopschnittstelle"); + } + } + if(!empty($ap) && !empty($value['artikeldaten'])){ + $artap = $this->app->DB->Select("SELECT artikel FROM $doctype"."_position WHERE id = '$ap' LIMIT 1"); + unset($value['artikeldaten']['id'],$value['artikeldaten']['nummer']); + foreach($value['artikeldaten'] as $feldname => $wert){ + $query = sprintf("UPDATE artikel SET %s='%s' WHERE id=%d", + $this->app->DB->real_escape_string($feldname), $this->app->DB->real_escape_string($wert), $artap); + $this->app->DB->Update($query); + } + } + } + } + + foreach ($warenkorb['articlelist'] as $item){ + $commands = []; + if(empty($item['databaseId'])){ + continue; + } + if(isset($item['parentInCart']) && !empty($warenkorb['articlelist'][$item['parentInCart']]['databaseId'])){ + $query = sprintf('UPDATE `%s_position` SET `explodiert` = 1 WHERE `id` = %d', + $doctype, $warenkorb['articlelist'][$item['parentInCart']]['databaseId']); + $this->app->DB->Update($query); + $commands[] = sprintf('`explodiert_parent` = %d', $warenkorb['articlelist'][$item['parentInCart']]['databaseId']); + } + if(!empty($item['hidePrice'])){ + $commands[] = '`ohnepreis` = 1'; + } + if(!empty($commands)){ + $query = sprintf('UPDATE `%s_position` SET %s WHERE `id` = %d', + $doctype, implode(', ', $commands), $item['databaseId']); + $this->app->DB->Update($query); + } + } + + if(!empty($warenkorb['versandkostenbrutto']) + && empty($warenkorb['versandkostennetto']) + && !empty($warenkorb['autoversandsteuer']) + && empty($warenkorb['portosteuersatz'])) { + if($doctype !== 'angebot'){ + $positions = $this->app->DB->SelectArr( + sprintf( + "SELECT IFNULL(steuersatz,-1) as steuersatz, umsatzsteuer + FROM auftrag_position + WHERE preis > 0 AND auftrag = %d + GROUP BY steuersatz, umsatzsteuer", $auftrag + ) + ); + } + else { + $positions = $this->app->DB->SelectArr( + sprintf( + "SELECT IFNULL(steuersatz,-1) as steuersatz, umsatzsteuer + FROM angebot_position + WHERE preis > 0 AND angebot = %d + GROUP BY steuersatz, umsatzsteuer", $auftrag + ) + ); + } + if(!empty($positions) + && count($positions) === 1 + && $positions[0]['steuersatz'] < 0 + && $positions[0]['umsatzsteuer'] === 'ermaessigt' + ) { + $warenkorb['portosteuersatz'] = 'ermaessigt'; + } + } + + if($shoptyp!=='wawision') + { + if($warenkorb['zahlungsweise']==='nachnahme') + { + $artikelnachnahme = $shopexportArr['artikelnachnahme']; + $artikelnachnahme_extraartikel = $shopexportArr['artikelnachnahme_extraartikel']; + $nachnahme = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikelnachnahme' LIMIT 1"); + $umsatzsteuer_nachnahme = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikelnachnahme' LIMIT 1"); + $nachnahmepreis = $this->GetVerkaufspreis($artikelnachnahme,1); + if($umsatzsteuer_nachnahme!=='ermaessigt' && $umsatzsteuer_nachnahme!=='befreit') { + $umsatzsteuer_nachnahme='normal'; + } + if(isset($warenkorb['nachnahmepreisnetto'])) + { + $nachnahmepreis = str_replace(',','.',$warenkorb['nachnahmepreisnetto']); + }elseif($warenkorb['nachnahmepreis']) + { + if($umsatzsteuer_nachnahme==='ermaessigt') + { + $nachnahmepreis = str_replace(',','.',$warenkorb['nachnahmepreis'])/$this->GetSteuersatzErmaessigt(true,$auftrag,$doctype); + }elseif($umsatzsteuer_nachnahme==='befreit') + { + $nachnahmepreis = str_replace(',','.',$warenkorb['nachnahmepreis']); + }else{ + $nachnahmepreis = str_replace(',','.',$warenkorb['nachnahmepreis'])/$this->GetSteuersatzNormal(true,$auftrag,$doctype); + } + } + //$warenkorb['zahlungsgebuehr'] //TODO + + if($artikelnachnahme_extraartikel==1) + { + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelnachnahme,1,$nachnahme,$nachnahmepreis,$umsatzsteuer_nachnahme,0,$waehrung); + if($tmpposid>0) + { + $this->app->DB->Update("UPDATE $doctype"."_position SET keinrabatterlaubt=1 WHERE id='$tmpposid' LIMIT 1"); + if(isset($warenkorb['nachnahmepreisnetto']) || isset($warenkorb['nachnahmepreis'])){ + $nachnahmepreis = 0; + } + } + } + } else { + $nachnahmepreis=0; + } + + //porto und nachnahme + $artikelporto = $shopexportArr['artikelporto']; + $artikelportoermaessigt = $shopexportArr['artikelportoermaessigt']; + + if( $artikelportoermaessigt && isset($warenkorb['portosteuersatz']) && $warenkorb['portosteuersatz'] === 'ermaessigt') + { + $artikelporto = $artikelportoermaessigt; + } + + if(empty($artikelporto) && $this->app->DB->Select("SELECT portoartikelanlegen FROM shopexport WHERE id = '$shop' LIMIT 1")) + { + if($warenkorb['versandkostennetto'] != 0 || $warenkorb['versandkostenbrutto'] != 0 || $portocheck == 1){ + $portoartikelarr = array('projekt'=>$projekt,'porto'=>1, 'lagerartikel'=>0,'name_de'=>'Porto','umsatzsteuer'=>'normal'); + $artikelporto = $this->app->erp->InsertUpdateArtikel($portoartikelarr); + if($artikelporto){ + $this->app->DB->Update("UPDATE shopexport SET artikelporto = '$artikelporto' WHERE id = '$shop' AND artikelporto = 0 LIMIT 1"); + } + } + } + $umsatzsteuer_porto = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikelporto' LIMIT 1"); + + $versandname = ''; + if(isset($warenkorb['kunde_sprache']) && $warenkorb['kunde_sprache']){ + if($warenkorb['kunde_sprache'] === 'englisch') { + $versandname = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id = '$artikelporto'"); + } + } + else{ + if($this->app->DB->Select("SELECT adr.id FROM $doctype auf INNER JOIN adresse adr ON auf.adresse = adr.id AND adr.sprache = 'englisch' WHERE auf.id = '$auftrag' LIMIT 1")) { + $versandname = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id = '$artikelporto'"); + } + } + if($versandname === ''){ + $versandname = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikelporto'"); + } + + $sprachen = $this->GetAdressSprachen(); + $belegsprache = $this->app->DB->Select("SELECT sprache FROM $doctype WHERE id = '$auftrag'"); + if(array_key_exists($belegsprache, $sprachen)){ + $belegsprache = $sprachen[$belegsprache]; + } + $uebersetztername = $this->app->DB->Select("SELECT name FROM artikel_texte WHERE artikel='$artikelporto' AND sprache='$belegsprache' AND aktiv='1' AND (shop=0 OR shop='$shop') ORDER BY shop DESC LIMIT 1"); + if($uebersetztername != ''){ + $versandname = $uebersetztername; + } + + $rabattartikel = $shopexportArr['artikelrabatt']; + $rabattname = ''; + if(isset($warenkorb['kunde_sprache']) && $warenkorb['kunde_sprache']){ + if($warenkorb['kunde_sprache'] === 'englisch') { + $rabattname = (String)$this->app->DB->Select("SELECT name_en FROM artikel WHERE id = '$rabattartikel'"); + } + } + else{ + if($this->app->DB->Select("SELECT adr.id FROM $doctype auf INNER JOIN adresse adr ON auf.adresse = adr.id AND adr.sprache = 'englisch' WHERE auf.id = '$auftrag' LIMIT 1")) { + $rabattname = (String)$this->app->DB->Select("SELECT name_en FROM artikel WHERE id = '$rabattartikel'"); + } + } + if($rabattname === ''){ + $rabattname = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$rabattartikel'"); + } + $uebersetztername = $this->app->DB->Select("SELECT name FROM artikel_texte WHERE artikel='$rabattartikel' AND sprache='$belegsprache' AND aktiv='1' AND (shop=0 OR shop='$shop') ORDER BY shop DESC LIMIT 1"); + if($uebersetztername != ''){ + $rabattname = $uebersetztername; + } + + $umsatzsteuer_rabatt = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$rabattartikel' LIMIT 1"); + + + $rabattsteuer = $this->app->DB->Select("SELECT artikelrabattsteuer FROM shopexport WHERE id = '$shop' LIMIT 1"); + if($this->app->DB->error()){ + $rabattsteuer = -1; + } + if(isset($warenkorb['rabattsteuer']) && is_numeric($warenkorb['rabattsteuer'])){ + $rabattsteuer = $warenkorb['rabattsteuer']; + } + //$this->DumpVar("Fall Porto Preis ".$warenkorb[versandkostennetto]); + if(!empty($warenkorb['rabattname'])){ + $rabattname = $warenkorb['rabattname']; + } + if(isset($warenkorb['rabattnetto'])) + { + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $rabattartikel,1,$rabattname,$warenkorb['rabattnetto'],$umsatzsteuer_rabatt,0,$waehrung); + }elseif(isset($warenkorb['rabattbrutto'])) + { + $rabattbrutto = $warenkorb['rabattbrutto']; + if(isset($warenkorb['rabattsteuer']) && is_numeric($warenkorb['rabattsteuer'])){ + $rabattsteuer = $warenkorb['rabattsteuer']; + } + if($warenkorb['steuerfrei'] == '1') { + $rabattsteuer = 0; + } + if($umsatzsteuer_rabatt==='ermaessigt') + { + $rabattsteuerAdd = $rabattsteuer < 0?$this->GetSteuersatzErmaessigt(true,$auftrag,$doctype):(1+$rabattsteuer/100); + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $rabattartikel,1,$rabattname,$warenkorb['rabattbrutto']/$rabattsteuerAdd,$umsatzsteuer_rabatt,0,$waehrung); + }elseif($umsatzsteuer_rabatt==='befreit') + { + $rabattsteuerAdd = $rabattsteuer < 0?1:(1+$rabattsteuer/100); + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $rabattartikel,1,$rabattname,$warenkorb['rabattbrutto']/$rabattsteuerAdd,$umsatzsteuer_rabatt,0,$waehrung); + }else{ + $rabattsteuerAdd = $rabattsteuer < 0?$this->GetSteuersatzNormal(true,$auftrag,$doctype):(1+$rabattsteuer/100); + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $rabattartikel,1,$rabattname,$warenkorb['rabattbrutto']/$rabattsteuerAdd,$umsatzsteuer_rabatt,0,$waehrung); + } + } + if($rabattsteuer >= 0){ + $this->app->DB->Update("UPDATE $doctype"."_position SET steuersatz = '$rabattsteuer' WHERE id = '$tmpposid' LIMIT 1"); + } + if(isset($warenkorb['rabattsteuer']) && is_numeric($warenkorb['rabattsteuer'])){ + $this->app->DB->Update("UPDATE $doctype"."_position SET steuersatz = '".$warenkorb['rabattsteuer']."' WHERE id = '$tmpposid' LIMIT 1"); + if($warenkorb['rabattsteuer'] > 0){ + $ermaessigt = !empty($warenkorb['steuersatz_ermaessigt']) ? $warenkorb['steuersatz_ermaessigt'] : $this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $doctype WHERE id = $auftrag"); + $normal = !empty($warenkorb['steuersatz_normal']) ? $warenkorb['steuersatz_normal'] : $this->app->DB->Select("SELECT steuersatz_normal FROM $doctype WHERE id = $auftrag"); + if($warenkorb['rabattsteuer'] == $ermaessigt){ + $this->app->DB->Update("UPDATE $doctype" . "_position SET umsatzsteuer = 'ermaessigt' WHERE id = '$tmpposid' LIMIT 1"); + }elseif($warenkorb['rabattsteuer'] == $normal){ + $this->app->DB->Update("UPDATE $doctype" . "_position SET umsatzsteuer = 'normal' WHERE id = '$tmpposid' LIMIT 1"); + } + }elseif($warenkorb['rabattsteuer'] == 0) + { + $this->app->DB->Update("UPDATE $doctype" . "_position SET umsatzsteuer = 'befreit' WHERE id = '$tmpposid' LIMIT 1"); + } + } + if($umsatzsteuer_porto!=='ermaessigt') { + $umsatzsteuer_porto='normal'; + } + $umsatzsteuer_porto2 = $umsatzsteuer_porto; + if(!empty($warenkorb['portosteuersatz']) && $artikelnachnahme_extraartikel!='1' && $warenkorb['portosteuersatz'] === 'ermaessigt') + { + $umsatzsteuer_porto2 = 'ermaessigt'; + }elseif(!empty($warenkorb['portosteuersatz']) && $artikelnachnahme_extraartikel!='1' && $warenkorb['portosteuersatz'] === 'normal') + { + $umsatzsteuer_porto2 = 'normal'; + } + + //if($this->Steuerbefreit($warenkorb['land'],$warenkorb['ustid'])) + if($warenkorb['versandkostennetto'] != 0 || $warenkorb['versandkostenbrutto'] != 0 || $portocheck == 1) + { + if($warenkorb['steuerfrei']=='1') + { + if($artikelnachnahme_extraartikel=='1'){ + $tmpposid = $this->AddPositionManuellPreis($doctype, $auftrag, $artikelporto, 1, $versandname, (isset($warenkorb['versandkostennetto']) ? $warenkorb['versandkostennetto'] : $warenkorb['versandkostenbrutto']) - $nachnahmepreis, $umsatzsteuer_porto, 0, $waehrung); + } + else{ + $tmpposid = $this->AddPositionManuellPreis($doctype, $auftrag, $artikelporto, 1, $versandname, isset($warenkorb['versandkostennetto']) ? $warenkorb['versandkostennetto'] : $warenkorb['versandkostenbrutto'], $umsatzsteuer_porto, 0, $waehrung); + } + } + else + { + if($positionsteuersaetzeerlauben && isset($warenkorb['versandkostensteuersatz']) && is_numeric($warenkorb['versandkostensteuersatz'])) + { + if($artikelnachnahme_extraartikel=='1') + { + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, + (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']/(1+$warenkorb['versandkostensteuersatz']/100)))- $nachnahmepreis,$umsatzsteuer_porto,0,$waehrung); + } else { + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, + (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']/(1+$warenkorb['versandkostensteuersatz']/100))),$umsatzsteuer_porto,0,$waehrung); + } + if($tmpposid) + { + $this->app->DB->Update("UPDATE $doctype"."_position SET steuersatz = ".$warenkorb['versandkostensteuersatz']." WHERE id = ".$tmpposid); + } + }elseif($umsatzsteuer_porto2==='ermaessigt') + { + if($artikelnachnahme_extraartikel=='1') + { + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, + (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']/$this->GetSteuersatzErmaessigt(true,$auftrag,$doctype)))- $nachnahmepreis,$umsatzsteuer_porto,0,$waehrung); + } else { + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, + (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']/$this->GetSteuersatzErmaessigt(true,$auftrag,$doctype))),$umsatzsteuer_porto,0,$waehrung); + if($umsatzsteuer_porto2 !== $umsatzsteuer_porto) + { + $this->app->DB->Update("UPDATE $doctype"."_position SET umsatzsteuer = 'ermaessigt' WHERE id = ".$tmpposid); + } + } + }elseif($umsatzsteuer_porto==='befreit'){ + if($artikelnachnahme_extraartikel=='1') + { + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, + (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']))- $nachnahmepreis,$umsatzsteuer_porto,0,$waehrung); + } else { + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, + (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto'])),$umsatzsteuer_porto,0,$waehrung); + } + } else { + //normal + if($artikelnachnahme_extraartikel=='1') + { + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, + (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']/$this->GetSteuersatzNormal(true,$auftrag,$doctype)))- $nachnahmepreis,$umsatzsteuer_porto,0,$waehrung); + } else { + $tmpposid = $this->AddPositionManuellPreis($doctype,$auftrag, $artikelporto,1,$versandname, + (isset($warenkorb['versandkostennetto'])?$warenkorb['versandkostennetto']:($warenkorb['versandkostenbrutto']/$this->GetSteuersatzNormal(true,$auftrag,$doctype))),$umsatzsteuer_porto,0,$waehrung); + if($umsatzsteuer_porto2 !== $umsatzsteuer_porto) + { + $this->app->DB->Update("UPDATE $doctype"."_position SET umsatzsteuer = 'normal' WHERE id = ".$tmpposid); + } + } + } + } + } + + // wenn versandkostennbrutto = 0 und versandkostennetto > 0 TODO neu ausrechnen + + if($tmpposid>0) + { + $this->app->DB->Update("UPDATE $doctype"."_position SET keinrabatterlaubt=1 WHERE id='$tmpposid' LIMIT 1"); + if(isset($warenkorb['versandkostenbeschreibung'])){ + $this->app->DB->Update("UPDATE $doctype" . "_position SET beschreibung='" . $this->app->DB->real_escape_string($warenkorb['versandkostenbeschreibung']) . "' WHERE id='$tmpposid' LIMIT 1"); + } + } + } + + if($waehrung && $waehrung !== 'EUR'){ + $this->app->DB->Update("UPDATE $doctype"."_position SET waehrung='$waehrung' WHERE $doctype='$auftrag' "); + } + + $shoptyp=''; + + if(isset($warenkorb['wawisionpreise']) && $warenkorb['wawisionpreise']) + { + $wpositionen = $this->app->DB->SelectArr("SELECT * FROM $doctype"."_position WHERE auftrag = '$auftrag'"); + if(!empty($wpositionen)) + { + $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$auftrag' LIMIT 1"); + foreach($wpositionen as $wpos) + { + $pr = $this->GetVerkaufspreis($wpos['artikel'], $wpos['menge'], $adresse); + if($pr){ + $this->app->DB->Update("UPDATE $doctype"."_position SET preis = '$pr' WHERE id = '".$wpos['id']."' LIMIT 1"); + } + } + } + } + if(!empty($artikelimport)){ + $this->app->DB->Update("UPDATE $doctype"."_position set rabatt = 0, keinrabatterlaubt = 1, grundrabatt = 0, rabattsync = 1 WHERE $doctype = '$auftrag'"); + } + if(!empty($rabattpositionen)){ + foreach ($rabattpositionen as $key => $value) { + $this->app->DB->Update("UPDATE $doctype" . "_position SET rabatt='$value' WHERE id='$key'"); + } + } + + // wenn reservierung aktiviert ist + if($doctype !== 'angebot') { + $reservierung = $this->app->DB->Select( + sprintf( + "SELECT pr.reservierung + FROM `projekt` AS `pr` + INNER JOIN `auftrag` AS `o` ON o.projekt = pr.id + WHERE o.id = %d LIMIT 1", + $auftrag + ) + ); + if((int)$reservierung >= 1) { + $this->AuftragReservieren($auftrag); + } + + $this->AuftragNeuberechnen($auftrag); + $this->AuftragEinzelnBerechnen($auftrag); + $this->app->DB->Update(" + UPDATE auftrag a + INNER JOIN adresse adr ON a.lieferant = adr.id + SET a.lieferantkdrnummer = if(a.lieferantennummer <> '',a.lieferantennummer,adr.lieferantennummer) + WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 1 AND a.id = '$auftrag' + "); + $this->app->DB->Update(" + UPDATE auftrag a + INNER JOIN adresse adr ON a.adresse = adr.id + SET a.lieferantkdrnummer = if(a.kundennummer <> '',a.kundennummer, adr.kundennummer) + WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 0 AND a.id = '$auftrag' + "); + if(!empty($warenkorb['auftragsstatus'])){ + if($warenkorb['auftragsstatus'] === 'abgeschlossen'){ + $this->app->DB->Update("UPDATE auftrag SET status = 'abgeschlossen', schreibschutz = 1 WHERE id = '$auftrag' LIMIT 1"); + } + if($warenkorb['auftragsstatus'] === 'unbezahlt'){ + $this->app->DB->Insert("INSERT INTO shopimport_checkorder (shop_id, order_id, ext_order) VALUES ('$shop','$auftrag','".$warenkorb['auftrag']."')"); + $this->app->erp->AuftragProtokoll($auftrag, 'Kaufabwicklung noch nicht abgeschlossen'); + } + } + + $this->app->DB->Update( + "UPDATE artikel art + INNER JOIN auftrag_position ap ON art.id = ap.artikel AND ap.auftrag = '$auftrag' + SET art.cache_lagerplatzinhaltmenge = -999" + ); + $this->app->DB->Update( + sprintf( + 'UPDATE artikel_onlineshops AS ao + INNER JOIN auftrag_position AS ap ON ao.artikel = ap.artikel + SET ao.storage_cache = -999, ao.pseudostorage_cache = -999 + WHERE ao.shop = %d AND ap.auftrag = %d', + $shop,$auftrag + ) + ); + $differenz = $this->app->DB->Select( + sprintf( + 'SELECT gesamtbetragfestsetzendifferenz FROM shopexport WHERE id = %d LIMIT 1', + (int)$shop + ) + ); + if($this->app->DB->Select("SELECT gesamtbetragfestsetzen FROM shopexport WHERE id = '$shop' LIMIT 1")) + { + $gesamtsumme = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id = '$auftrag' LIMIT 1"); + if(abs($gesamtsumme - $warenkorb['gesamtsumme']) <= $differenz) + { + $this->app->DB->Update("UPDATE auftrag SET extsoll = '".$warenkorb['gesamtsumme']."', gesamtsumme = '".$warenkorb['gesamtsumme']."' WHERE id = '$auftrag' LIMIT 1"); + } + } + if(!empty($warenkorb['bestelldatum']) && strtotime($warenkorb['bestelldatum']) > 1) + { + $this->app->DB->Update("UPDATE auftrag SET datum = '".$this->app->DB->real_escape_string($warenkorb['bestelldatum'])."' WHERE belegnr <> '' AND id = ".$auftrag); + } + if(!$autoversandvonMapping && + $this->app->DB->Select( + sprintf( + 'SELECT pr.deactivateautoshipping + FROM auftrag a + INNER JOIN projekt AS pr ON a.projekt = pr.id + WHERE a.id = %d AND a.autoversand = 1', + $auftrag + ) + ) + ) { + $this->app->DB->Update( + sprintf( + 'UPDATE auftrag SET autoversand = 0 WHERE id = %d', + $auftrag + ) + ); + } + if(!empty($warenkorb['gesamtsumme'])) { + $gesamtsumme = $this->app->DB->Select( + sprintf( + 'SELECT gesamtsumme FROM auftrag WHERE id = %d LIMIT 1', + $auftrag + ) + ); + if($gesamtsumme != 0 && + abs( + round((float)$warenkorb['gesamtsumme'] - (float)$gesamtsumme, 2) + ) > round((float)$differenz, 2) + ) { + $this->app->DB->Update( + sprintf( + 'UPDATE auftrag SET autoversand = 0 WHERE id = %d LIMIT 1', + (int)$auftrag + ) + ); + $this->AuftragProtokoll($auftrag, 'Online-Shop Differenz erkannt'); + } + } + }else{ + $this->AngebotNeuberechnen($auftrag); + $this->BelegFreigabe('angebot', $auftrag); + if(!empty($warenkorb['bestelldatum']) && strtotime($warenkorb['bestelldatum']) > 1) + { + $this->app->DB->Update("UPDATE angebot SET datum = '".$this->app->DB->real_escape_string($warenkorb['bestelldatum'])."' WHERE id = ".$auftrag); + } + } + + return $auftrag; +} + + + function KundennummerVergeben($adresse,$projekt="") + { + $id = $adresse; + $kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); + $tmp_data_adresse = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); + + if($projekt=="") + $projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$id' AND geloescht=0 LIMIT 1"); + + if($kundennummer==0 || $kundennummer==""){ + // pruefe ob rolle kunden vorhanden + $check = $this->app->DB->Select("SELECT adresse FROM adresse_rolle WHERE adresse='$id' AND subjekt='Kunde' LIMIT 1"); + if($check!="") + { + $kundennummer = $this->GetNextKundennummer($projekt,$tmp_data_adresse); + $this->ObjektProtokoll("adresse",$id,"adresse_next_kundennummer","Kundennummer erhalten: $kundennummer"); + $this->app->DB->Update("UPDATE adresse SET kundennummer='$kundennummer' WHERE id='$id' AND (kundennummer='0' OR kundennummer='') LIMIT 1"); + return $kundennummer; + } + } + } + + + function CheckDateValidate($input="0000-00-00") + { + $inputa = explode('-', $input); + if(count($inputa) == 3 && strlen($inputa[1]) == 2 && strlen($inputa[2]) == 2 && strlen($inputa[0]) == 4 && + checkdate($inputa[1],$inputa[2],$inputa[0])) + { + return true; + } + + $date_format = 'Y-m-d'; + + $input = trim($input); + $time = strtotime($input); + + $is_valid = date($date_format, $time) == $input; + + return $is_valid; + } + + function AdresseUSTCheck($adresse) + { + //wenn land DE + + $land = $this->app->DB->Select("SELECT land FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + if($land ==$this->Firmendaten("land") || $land=="") + return 0; + + foreach($this->GetUSTEU() as $euland) + { + if($land==$euland) + return 1; + } + + // alle anderen laender sind export! + return 2; + } + + + function AutoUSTPruefung($adresse) + { + + // schaue obs heute bereits eine pruefung gegeben hat die erfolgreich war + $ustcheck = $this->app->DB->Select("SELECT id FROM ustprf WHERE DATE_FORMAT(datum_online,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') AND status='erfolgreich' AND adresse='$adresse' LIMIT 1"); + if($ustcheck>0 && is_numeric($ustcheck)) + return 1; + + + $name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + $ustid = $this->app->DB->Select("SELECT ustid FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + $land = $this->app->DB->Select("SELECT land FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + $ort = $this->app->DB->Select("SELECT ort FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + $plz = $this->app->DB->Select("SELECT plz FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + $strasse = $this->app->DB->Select("SELECT strasse FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + + if($land==$this->Firmendaten("land") || $ustid=="") return 0; + + + $ustcheck = $this->app->DB->Select("SELECT id FROM ustprf WHERE status='' AND adresse='$adresse' LIMIT 1"); + if(!($ustcheck>0 && is_numeric($ustcheck))) + { + $this->app->DB->Insert("INSERT INTO ustprf (id,adresse,name,ustid,land,ort,plz,rechtsform,strasse,datum_online,bearbeiter) + VALUES('','$adresse','$name','$ustid','$land','$ort','$plz','$rechtsform','$strasse',NOW(),'".$this->app->User->GetName()."')"); + $ustprf_id = $this->app->DB->GetInsertID(); + } + else + $ustprf_id = $ustcheck; + + + //$this->app->DB->Insert('INSERT INTO ustprf_protokoll (ustprf_id, zeit, bemerkung, bearbeiter) VALUES ('.$ustprf_id.',"'.date("Y-m-d H:i:s").'","AUTO Prüfung gestartet", "'.$this->app->User->GetName().'")'); + + $ustid = str_replace(" ","",$ustid); + $ust = $ustid; + $result = 0; + + $UstStatus = $this->CheckUst("DE263136143", $ust, $name, $ort, $strasse, $plz, $druck="nein"); + if(is_array($UstStatus)) + { + $tmp = new USTID(); + $msg = $tmp->errormessages($UstStatus['ERROR_CODE']); + + if($UstStatus['ERROR_CODE']==200) + { + $this->app->DB->Delete("DELETE FROM ustprf_protokoll WHERE ustprf_id='$ustprf_id' AND bemerkung='UST gültig aber Name, Ort oder PLZ wird anders geschrieben'"); + $this->app->DB->Insert('INSERT INTO ustprf_protokoll (ustprf_id, zeit, bemerkung, bearbeiter) VALUES ('.$ustprf_id.',"'.date("Y-m-d H:i:s").'","UST gültig aber Name, Ort oder PLZ wird anders geschrieben", "'.$this->app->User->GetName().'")'); + } + else + $this->app->DB->Insert('INSERT INTO ustprf_protokoll (ustprf_id, zeit, bemerkung, bearbeiter) VALUES ('.$ustprf_id.',"'.date("Y-m-d H:i:s").'","'.$UstStatus['ERROR_CODE'].'('.$msg.')", "'.$this->app->User->GetName().'")'); + + } else if($UstStatus==1){ + + //$this->app->Tpl->Set(STATUS,"
Vollständig
"); + $result = 1; + + // jetzt brief bestellen! + $UstStatus = $this->CheckUst("DE263136143", $ust, $firmenname, $ort, $strasse, $plz, $druck="ja"); + $this->app->DB->Insert('INSERT INTO ustprf_protokoll (ustprf_id, zeit, bemerkung, bearbeiter) VALUES ('.$ustprf_id.',"'.date("Y-m-d H:i:s").'","Online-Abfrage OK + Brief bestellt", "'.$this->app->User->GetName().'")'); + $this->app->DB->Update('UPDATE ustprf SET datum_online=NOW(), status="erfolgreich" WHERE id='.$ustprf_id.''); + } else { + $this->app->DB->Insert('INSERT INTO ustprf_protokoll (ustprf_id, zeit, bemerkung, bearbeiter) VALUES ('.$ustprf_id.',"'.date("Y-m-d H:i:s").'","'.$UstStatus.'", "'.$this->app->User->GetName().'")'); + $this->app->DB->Update('UPDATE ustprf SET datum_online=NOW(), status="allgemeiner fehler" WHERE id='.$ustprf_id.''); + } + + return $result; + } + + function ArtikelMindestlager($artikel) + { + if($artikel <= 0) { + return 0; + } + // Fall ein 100R in vielen Listen dann muss man alle listen mit mindestmengen nehmen + // Fall das ist eine + $mindestlager = $this->app->DB->Select("SELECT mindestlager FROM artikel WHERE id='$artikel' LIMIT 1"); + if($mindestlager > 0) + { + return $mindestlager; + } + return 0; + } + + function AddChargeLagerOhneBewegung($artikel,$menge,$lagerplatz,$datum,$charge='',$internebemerkung='',$zid=0, $doctype = '', $doctypeid = 0, $isInterim = 0) + { + if($artikel <= 0) { + return null; + } + $zid = (int)$zid; + $this->app->DB->Insert("INSERT INTO lager_charge (artikel,menge,lager_platz,datum,internebemerkung,charge,zwischenlagerid) + VALUES ('$artikel','$menge','$lagerplatz','$datum','$internebemerkung','$charge','$zid')"); + $this->app->DB->Insert("INSERT INTO chargen_log (artikel,lager_platz,eingang,bezeichnung,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid, is_interim) + VALUES ('$artikel','$lagerplatz','1','$charge',NOW(),".$this->app->User->GetAdresse().",'$menge','$internebemerkung','$doctype','$doctypeid',".(int)$isInterim.")"); + $id = $this->app->DB->GetInsertID(); + $bestand = $this->app->DB->Select("SELECT ifnull(sum(menge),0) FROM lager_charge WHERE artikel = '$artikel' AND lager_platz = '$lagerplatz' AND charge = '$charge'"); + $this->app->DB->Update("UPDATE chargen_log SET bestand = '$bestand' WHERE id = '$id' LIMIT 1"); + return $id; + } + + + function AddMindesthaltbarkeitsdatumLagerOhneBewegung($artikel,$menge,$lagerplatz,$mhd,$charge='',$zid=0, $doctype = '', $doctypeid = 0, $internebemerkung = '', $adresse = 0, $isInterim = 0) + { + if($artikel <= 0) { + return 0; + } + if (!$this->CheckDateValidate($mhd)) { + $mhd = date('Y-m-d'); + } + $zid = (int)$zid; + $this->app->DB->Insert("INSERT INTO lager_mindesthaltbarkeitsdatum (artikel,menge,lager_platz,datum,internebemerkung,charge,zwischenlagerid,mhddatum) VALUES ('$artikel','$menge','$lagerplatz',NOW(),'$internebemerkung','$charge','$zid','$mhd')"); + $bestand = (float)$this->app->DB->Select("SELECT ifnull(sum(menge),0) FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$artikel' AND lager_platz = '$lagerplatz' AND mhddatum = '$mhd' AND ifnull(charge,'') = '$charge' "); + $this->app->DB->Insert("INSERT INTO mhd_log (artikel,lager_platz,eingang,mhddatum,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid,bestand,adresse,is_interim) + VALUES ('$artikel','$lagerplatz','1','$mhd',NOW(),".$this->app->User->GetAdresse().",'$menge','$internebemerkung','$doctype','$doctypeid','$bestand','$adresse',".(int)$isInterim.")"); + $insid = $this->app->DB->GetInsertID(); + if($charge != '') { + $this->app->DB->Update("UPDATE mhd_log SET charge = '$charge' WHERE id = '$insid' LIMIT 1"); + } + + return $insid; + } + + +function AddChargeLager($artikel,$menge,$lagerplatz,$datum,$charge="",$internebemerkung="",$zid=0, $doctype = "", $doctypeid = 0, $adresse = 0, $isInterim = 0) +{ + if($artikel <= 0) + { + return; + } + $zid = (int)$zid; + $this->LagerArtikelZusammenfassen($artikel, $lagerplatz); + $this->app->DB->Insert("INSERT INTO lager_charge (artikel,menge,lager_platz,datum,internebemerkung,charge,zwischenlagerid) VALUES ('$artikel','$menge','$lagerplatz','$datum','$internebemerkung','$charge','$zid')"); + $this->app->erp->LagerEinlagern($artikel,$menge,$lagerplatz,$projekt,$internebemerkung,"","",$doctype,$doctypeid,0,0,$adresse); + + $this->Chargenlog($artikel, $lagerplatz, 1, $charge, $menge, $internebemerkung, $doctype, $doctypeid, $adresse,0, $isInterim); + $this->LagerArtikelZusammenfassen($artikel, $lagerplatz); +} + + + function AddMindesthaltbarkeitsdatumLager($artikel,$menge,$lagerplatz,$mhd,$charge="",$zid=0, $doctype = "", $doctypeid = 0) + { + if($artikel <= 0 || (empty($lagerplatz) && empty($zid))) { + return 0; + } + $this->LagerArtikelZusammenfassen($artikel, $lagerplatz); + if ($mhd == '' || $mhd==0 || $mhd=='0000-00-00') { + return 0; + } + + $this->app->DB->Insert("INSERT INTO lager_mindesthaltbarkeitsdatum (artikel,menge,lager_platz,datum,internebemerkung,charge,zwischenlagerid,mhddatum) VALUES ('$artikel','$menge','$lagerplatz',NOW(),'$internebemerkung','$charge','$zid','$mhd')"); + + if(empty($lagerplatz)) { + return 0; + } + + if($menge > 0) { + $this->app->DB->Insert("INSERT INTO lager_platz_inhalt (artikel,menge,lager_platz) VALUES ($artikel','$menge','$lagerplatz')"); + } + + if($charge!='') { + $charge = ' Charge: '.$charge; + } + $bestand = $this->ArtikelImLagerPlatz($artikel,$lagerplatz); + $vpe = ''; + $projekt = 0; + $this->app->DB->Insert("INSERT INTO lager_bewegung (lager_platz, artikel, menge,vpe, eingang,zeit,referenz, bearbeiter,projekt,firma,logdatei,bestand,doctype,doctypeid) + VALUES('$lagerplatz','$artikel','$menge','$vpe','1',NOW(),'MHD eingelagert $charge','".$this->app->User->GetName()."', + '$projekt','".$this->app->User->GetFirma()."',NOW(),'$bestand','$doctype','$doctypeid')"); + $insId = $this->app->DB->GetInsertID(); + $this->LagerArtikelZusammenfassen($artikel, $lagerplatz); + + return $insId; + } + + +function SeriennummernLog($artikel, $lagerplatz, $seriennummer, $eingang, $internebemerkung="",$zid=0,$mhd="",$charge="",$doctype="", $doctypeid=0, $adresse = 0) +{ + if(empty($lagerplatz) || (empty($seriennummer) && empty($artikel))) { + return 0; + } + if($adresse == 0 && $doctypeid != 0 && $doctype != '') + { + $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); + } + $this->app->DB->Insert("INSERT INTO seriennummern_log (artikel,lager_platz,eingang,bezeichnung,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid, adresse) + VALUES ('$artikel','$lagerplatz',$eingang,'$seriennummer',NOW(),".$this->app->User->GetAdresse().",1,'$internebemerkung','$doctype','$doctypeid','$adresse')"); + + return (int)$this->app->DB->GetInsertID(); +} + + function LagerEinlagerVomZwischenlager($zwischenlagerid,$menge,$regal,$projekt,$grund="",$doctype="", $doctypeid=0) + { + if($menge <= 0 || $regal <= 0) { + return; + } + + $zwischenlagerRow = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM zwischenlager WHERE id= %d', + $zwischenlagerid + ) + ); + if(empty($zwischenlagerRow) || empty($zwischenlagerRow['artikel'])) { + return; + } + $artikel = $zwischenlagerRow['artikel']; + $this->LagerArtikelZusammenfassen($artikel); + $referenz = $zwischenlagerRow['grund']; + $vpe = $zwischenlagerRow['vpe']; + $bestellung = $zwischenlagerRow['parameter']; + $paketannahme = $zwischenlagerRow['paketannahme']; + + $this->app->DB->Insert("INSERT INTO lager_platz_inhalt (lager_platz,artikel,menge,vpe,bearbeiter,bestellung,projekt,firma,logdatei) + VALUES ('$regal','$artikel','$menge','$vpe','".$this->app->User->GetName()."','$bestellung','$projekt','".$this->app->User->GetFirma()."',NOW())"); + + $bestand = $this->ArtikelImLagerPlatz($artikel,$regal); + // Bewegung + $this->app->DB->Insert("INSERT INTO lager_bewegung (lager_platz, artikel, menge,vpe, eingang,zeit,referenz, bearbeiter,projekt,firma,logdatei,bestand,paketannahme,doctype,doctypeid) + VALUES('$regal','$artikel','$menge','$vpe','1',NOW(),'$referenz:$grund','".$this->app->User->GetName()."','$projekt','".$this->app->User->GetFirma()."',NOW(),'$bestand','$paketannahme','$doctype','$doctypeid')"); + + $this->app->DB->Update("UPDATE lager_seriennummern SET lager_platz='$regal',zwischenlagerid='0' WHERE zwischenlagerid='$zwischenlagerid'"); + $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET lager_platz='$regal',zwischenlagerid='0' WHERE zwischenlagerid='$zwischenlagerid'"); + $this->app->DB->Update("UPDATE lager_charge SET lager_platz='$regal',zwischenlagerid='0' WHERE zwischenlagerid='$zwischenlagerid'"); + + $menge_db = $zwischenlagerRow['menge']; + if($menge_db - $menge > 0) { + $tmp = $menge_db - $menge; + $this->app->DB->Update("UPDATE zwischenlager SET menge='$tmp' WHERE id='$zwischenlagerid' LIMIT 1"); + } + else { + $this->app->DB->Update("DELETE FROM zwischenlager WHERE id='$zwischenlagerid' LIMIT 1"); + } + $this->LagerArtikelZusammenfassen($artikel); + } + + + function LagerAutoAuslagernArtikel($artikel,$menge,$grund, $doctype = "", $doctypeid = 0, $posid = 0, $projektueberschreiben = "") + { + $this->LagerArtikelZusammenfassen($artikel); + $artikelArr = $this->app->DB->SelectRow("SELECT * FROM artikel WHERE id='$artikel' LIMIT 1"); + $lager_platz = $artikelArr['lager_platz']; + $projekt = $artikelArr['projekt']; + if($projektueberschreiben != ''){ + $projekt = $projektueberschreiben; + } + + $mindesthaltbarkeitsdatum = $artikelArr['mindesthaltbarkeitsdatum']; + $chargenverwaltung = $artikelArr['chargenverwaltung']; + + if($lager_platz > 0){ + $tmparr = $this->app->DB->SelectArr("SELECT lager_platz,menge FROM lager_platz_inhalt WHERE artikel='$artikel' ORDER by lager_platz='$lager_platz' DESC, menge DESC"); + } + else{ + $tmparr = $this->app->DB->SelectArr("SELECT lager_platz,menge FROM lager_platz_inhalt WHERE artikel='$artikel' ORDER by menge DESC"); + } + + $mhdchargemengen = null; + + // build common array + $ctmparr = !empty($tmparr)?count($tmparr):0; + for($i=0;$i<$ctmparr;$i++) + { + $lager_platz_id[] = array('lager_platz'=>$tmparr[$i]['lager_platz'],'menge'=>$tmparr[$i]['menge']); + if($mindesthaltbarkeitsdatum) { + if(!isset($mhdchargemengen[$tmparr[$i]['lager_platz']])) + { + $mhdchargemengen[$tmparr[$i]['lager_platz']] = $this->app->DB->Select("SELECT ifnull(sum(menge),0) FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$artikel' AND lager_platz = '".$tmparr[$i]['lager_platz']."'"); + } + }elseif($chargenverwaltung) { + if(!isset($mhdchargemengen[$tmparr[$i]['lager_platz']])) { + $mhdchargemengen[$tmparr[$i]['lager_platz']] = $this->app->DB->Select("SELECT ifnull(sum(menge),0) FROM lager_charge WHERE artikel = '$artikel' AND lager_platz = '".$tmparr[$i]['lager_platz']."'"); + } + } + } + // auslagern mit mhd/chargen + if($mindesthaltbarkeitsdatum || $chargenverwaltung) + { + $clager_platz_id = !empty($lager_platz_id)?count($lager_platz_id):0; + for($i=0;$i < $clager_platz_id;$i++) + { + if($menge <= 0) + { + return; + } + if(!isset($mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']])) + { + continue; + } + if($lager_platz_id[$i]['menge'] <= 0) + { + continue; + } + + if($lager_platz_id[$i]['menge']>=$menge) + { + if($mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']] >= $menge) + { + // in dem regal ist genug restmenge nehmen + $this->LagerAuslagernRegal($artikel,$lager_platz_id[$i]['lager_platz'],$menge,$projekt,$grund, $doctype, $doctypeid); + $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_platz_id[$i]['lager_platz'],$menge,$projekt,$grund, "", $doctype, $doctypeid,$posid); + $menge = 0; + return; + }else{ + $this->LagerAuslagernRegal($artikel,$lager_platz_id[$i]['lager_platz'],$mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']],$projekt,$grund, $doctype, $doctypeid); + $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_platz_id[$i]['lager_platz'],$mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']],$projekt,$grund, "",$doctype, $doctypeid,$posid); + $menge = round($menge - $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']],8); + $lager_platz_id[$i]['menge'] = round($lager_platz_id[$i]['menge'] - $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']], 8); + $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']] = 0; + } + } else { + if($mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']] >= $lager_platz_id[$i]['menge']) + { + $this->LagerAuslagernRegal($artikel,$lager_platz_id[$i]['lager_platz'],$lager_platz_id[$i]['menge'],$projekt,$grund, $doctype, $doctypeid); + $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_platz_id[$i]['lager_platz'],$lager_platz_id[$i]['menge'],$projekt,$grund, "",$doctype, $doctypeid,$posid); + $menge = round($menge - $lager_platz_id[$i]['menge'],8); + $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']] = round($mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']] - $lager_platz_id[$i]['menge'],8); + $lager_platz_id[$i]['menge'] = 0; + }else{ + $this->LagerAuslagernRegal($artikel,$lager_platz_id[$i]['lager_platz'],$mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']],$projekt,$grund, $doctype, $doctypeid); + $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_platz_id[$i]['lager_platz'],$mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']],$projekt,$grund, "",$doctype, $doctypeid,$posid); + $lager_platz_id[$i]['menge'] = round($lager_platz_id[$i]['menge'] - $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']], 8); + $menge = round($menge - $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']], 8); + $mhdchargemengen[$lager_platz_id[$i]['menge']['lager_platz']] = 0; + } + } + } + } + + //auslagern ohne mhd/charge + $clager_platz_id = !empty($lager_platz_id)?count($lager_platz_id):0; + for($i=0;$clager_platz_id;$i++) + { + if($menge <= 0) + { + return; + } + if($lager_platz_id[$i]['menge'] <= 0) + { + continue; + } + //$regal = $this->app->DB->Select("SELECT lager_platz FROM lager_platz_inhalt WHERE id='".$lager_platz_id[$i]['id']."' LIMIT 1"); + if($lager_platz_id[$i]['menge']>=$menge) + { + // in dem regal ist genug restmenge nehmen + $this->LagerAuslagernRegal($artikel,$lager_platz_id[$i]['lager_platz'],$menge,$projekt,$grund, $doctype, $doctypeid); + $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_platz_id[$i]['lager_platz'],$menge,$projekt,$grund, "", $doctype, $doctypeid,$posid); + $menge = 0; + return; + } else { + // komplettes regal und menge abziegen + $this->LagerAuslagernRegal($artikel,$lager_platz_id[$i]['lager_platz'],$lager_platz_id[$i]['menge'],$projekt,$grund, $doctype, $doctypeid); + $this->LagerAuslagernRegalMHDCHARGESRN($artikel,$lager_platz_id[$i]['lager_platz'],$lager_platz_id[$i]['menge'],$projekt,$grund, "",$doctype, $doctypeid,$posid); + $menge = round($menge - $lager_platz_id[$i]['menge'],8); + } + } + //$this->LagerArtikelZusammenfassen($artikel); + } + + function GetVPEBezeichnung($vpeid) + { + if($vpeid <= 0) + { + return ''; + } + return (String)$this->app->DB->Select("SELECT concat(' (VPE Menge: ',".$this->FormatMenge('menge').",' Gewicht: ',".$this->FormatMenge('gewicht').",' Abmessung: ',".$this->FormatMenge('breite').",' x ',".$this->FormatMenge('laenge').",' x ',".$this->FormatMenge('hoehe').",')') FROM `lager_platz_vpe` WHERE id = '$vpeid' LIMIT 1"); + } + + function LagerAuslagernRegal($artikel,$regal,$menge,$projekt,$grund,$importer="", $doctype = "", $doctypeid = 0, $lager_platz_vpe = 0, $lpiid = 0) + { + if(!$artikel) + { + return -1; + } + $break = false; + $this->RunHook('LagerAuslagernRegal_before',8, $artikel, $menge, $regal, $projekt, $grund, $doctype,$doctypeid, $break); + if($break)return; + + $this->LagerArtikelZusammenfassen($artikel, $regal); + + if($importer==1) + $username = "Import"; + else{ + if(!empty($this->app->User) && method_exists($this->app->User,'GetName')){ + $username = $this->app->DB->real_escape_string($this->app->User->GetName()); + }else{ + $username = 'Cronjob'; + } + } + + // abbrechen wenn es nicht so ist! + $bestand = $this->ArtikelImLagerPlatz($artikel,$regal); + + if($menge > $bestand || $bestand <=0) return -1; + + if($menge > 0) + { + $subwhere = ""; + $vpe_found = false; + if($lager_platz_vpe > 0) + { + $check = $this->app->DB->Select("SELECT id FROM lager_platz_inhalt WHERE lager_platz_vpe = '$lager_platz_vpe' AND menge >= $menge AND artikel='$artikel' AND lager_platz='$regal' ORDER BY id = '$lpiid' DESC LIMIT 1"); + if($check) + { + $vpe_found = true; + $subwhere = " AND id = '$check' "; + } + }else{ + $check = $this->app->DB->Select("SELECT id FROM lager_platz_inhalt WHERE lager_platz_vpe = '0' AND menge >= $menge AND artikel='$artikel' AND lager_platz='$regal' LIMIT 1"); + if($check) + { + $subwhere = " AND id = '$check' "; + } + } + if($check) + { + // lager in diesem Regal anpassen + if($vpe_found)$grund .= $this->GetVPEBezeichnung($lager_platz_vpe); + $this->app->DB->Update("UPDATE lager_platz_inhalt SET menge=menge-$menge WHERE artikel='$artikel' AND lager_platz='$regal' $subwhere LIMIT 1"); + $this->app->DB->Delete( + sprintf( + 'DELETE FROM `lager_platz_inhalt` WHERE `id` = %d AND `menge` <= 0 AND `lager_platz_vpe` <= 0', + $check + ) + ); + // Bewegung buchen + $bestand = $this->ArtikelImLagerPlatz($artikel,$regal); + $this->app->DB->Insert("INSERT INTO lager_bewegung (id,lager_platz,artikel,menge,vpe,eingang,zeit,referenz,bearbeiter,projekt,firma,bestand,doctype,doctypeid) VALUES + ('','$regal','$artikel','$menge','','0',NOW(),'$grund','" . $username. "','$projekt','','$bestand','$doctype','$doctypeid')"); + }else{ + $lpis = $this->app->DB->SelectArr("SELECT id, menge,lager_platz_vpe FROM lager_platz_inhalt WHERE artikel = '$artikel' AND lager_platz='$regal' ORDER BY ".($lager_platz_vpe && $lpiid?" id = '$lpiid' DESC, ":'')." lager_platz_vpe = '$lager_platz_vpe' DESC, id"); + if($lpis) + { + $vpemengen = null; + $_menge = $menge; + foreach($lpis as $v) + { + if($_menge <= 0)break; + if($_menge < $v['menge']) + { + if(!isset($vpemengen[$v['lager_platz_vpe']]))$vpemengen[$v['lager_platz_vpe']] = 0; + $vpemengen[$v['lager_platz_vpe']] += $_menge; + $this->app->DB->Update("UPDATE lager_platz_inhalt SET menge=menge-$_menge WHERE id = '".$v['id']."' LIMIT 1"); + $this->app->DB->Delete(sprintf('DELETE FROM `lager_platz_inhalt` WHERE `id` = %d AND `menge` <= 0', $v['id'])); + $_menge = 0; + break; + }elseif($_menge == $v['menge']) + { + if(!isset($vpemengen[$v['lager_platz_vpe']]))$vpemengen[$v['lager_platz_vpe']] = 0; + $vpemengen[$v['lager_platz_vpe']] += $_menge; + $this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE id = '".$v['id']."' LIMIT 1"); + $_menge = 0; + break; + }elseif($v['menge'] < $_menge) + { + if(!isset($vpemengen[$v['lager_platz_vpe']]))$vpemengen[$v['lager_platz_vpe']] = 0; + $vpemengen[$v['lager_platz_vpe']] += $v['menge']; + $this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE id = '".$v['id']."' LIMIT 1"); + $_menge = round($_menge - $v['menge'],8); + } + } + if($_menge > 0)$menge -= $_menge; + if($menge > 0) + { + $bestand = $this->ArtikelImLagerPlatz($artikel,$regal); + $bestandalt = round($bestand + $menge,8); + + foreach($vpemengen as $vpeid => $m) + { + $bestandalt = round($bestandalt - $m, 8); + $_grund = $grund; + if($vpeid)$_grund = $grund . $this->GetVPEBezeichnung($vpeid); + $this->app->DB->Insert("INSERT INTO lager_bewegung (id,lager_platz,artikel,menge,vpe,eingang,zeit,referenz,bearbeiter,projekt,firma,bestand,doctype,doctypeid) VALUES + ('','$regal','$artikel','$m','','0',NOW(),'$_grund','" . $username. "','$projekt','','$bestandalt','$doctype','$doctypeid')"); + } + } + } + } + } + else + { + $this->Protokoll("Menge $menge fuer Artikel $artikel und lager_platz $regal konnte nicht entnommen werden"); + } + + $this->LagerArtikelZusammenfassen($artikel, $regal); + $this->RunHook('LagerAuslagernRegal_after',7, $artikel, $menge, $regal, $projekt, $grund, $doctype,$doctypeid); + $this->app->DB->Update(sprintf('UPDATE `artikel`SET `laststorage_changed` = NOW() WHERE `id` = %d', $artikel)); + return 1; + } + + function AddBaugruppenChargeMHD($id, $artikel, $anzahl, $chargennummer,$mhd = '') + { + $bezeichnung = ""; + $kommentar = ""; + $typ = ""; + $this->app->DB->Insert("INSERT INTO produktion_charge (bezeichnung, kommentar, artikel, produktion,typ,anzahl,chargennummer,mhd,bearbeiter) VALUES ('$bezeichnung','$kommentar','$artikel','$id','$typ','$anzahl','$chargennummer','$mhd','".$this->app->DB->real_escape_string($this->app->User->GetName())."')"); + echo $this->app->DB->error(); + $newid = $this->app->DB->GetInsertID(); + $baugruppen = $this->app->DB->SelectArr("SELECT pb.id, ifnull(count(pbc.id),0) as co FROM produktion_baugruppen pb + LEFT JOIN produktion_baugruppen_charge pbc ON pbc.baugruppe = pb.id + WHERE pb.produktion = '$id' + GROUP BY pb.id ORDER by count(pbc.id), pb.id + "); + if($baugruppen) + { + $ind = 0; + foreach($baugruppen as $baugruppe) + { + $ind+=$mengeprobaugruppe; + $_mengebaugruppe = $mengeprobaugruppe; + if($anzahl && $ind >= $anzahl)$_mengebaugruppe -= $ind - $anzahl; + if($_mengebaugruppe > 0)$this->app->DB->Insert("INSERT INTO produktion_baugruppen_charge (produktion, baugruppe, charge, chargennummer,mhd,bearbeiter, menge) values ('$id','".$baugruppe['id']."','$newid','$chargennummer','$mhd','".$this->app->DB->real_escape_string($this->app->User->GetName())."','$_mengebaugruppe')"); + if($anzahl && $ind >= $anzahl)break; + } + } + } + +function ChargenMHDAuslagern($artikel, $menge, $lagerplatztyp, $lpid,$typ,$wert, $fifo=0, $projekt=0, $grund="",$doctype="",$doctypeid) +{ + $mindesthaltbarkeitsdatum = $this->app->DB->Select("SELECT mindesthaltbarkeitsdatum FROM artikel WHERE id = '$artikel' LIMIT 1"); + $chargenverwaltung = $this->app->DB->Select("SELECT chargenverwaltung FROM artikel WHERE id = '$artikel' LIMIT 1"); + $subwhere = ''; + $join = ''; + $sperrlagerWhere = ' lp.sperrlager <> 1 '; + if($doctype === 'produktion') { + $sperrlagerWhere = ' (lp.sperrlager <> 1 OR lp.allowproduction = 1) '; + } + switch($lagerplatztyp) + { + case 'lagerplatz': + if($lpid) { + $subwhere = " AND c.lager_platz = '$lpid' "; + } + break; + case 'lager': + if($lpid) { + $join = " INNER JOIN lager_platz lp ON c.lager_platz = lp.id AND lp.lager = '$lpid' AND ".$sperrlagerWhere; + } + break; + case 'projektlager': + if($projekt) { + $join = " INNER JOIN lager_platz lp ON c.lager_platz = lp.id AND lp.projekt = '$projekt' AND ".$sperrlagerWhere; + } + break; + case "poslager": + if($lpid) { + $join = " INNER JOIN lager_platz lp ON c.lager_platz = lp.id AND lp.lager = '$lpid' AND lp.poslager = 1"; + } + break; + } + switch($typ) + { + case 'mhdcharge': + case 'mhd': + if(!$mindesthaltbarkeitsdatum || !$chargenverwaltung)return false; + + if($typ == 'mhdcharge') + { + $mhdcharge = $wert; + if($mhdcharge && strlen($mhdcharge) > 10) + { + $mhd = substr($mhdcharge, 0,10); + if(strpos($mhd,'.') !== false) + { + $mhd = $this->app->String->Convert($mhd,"%1.%2.%3","%3-%2-%1"); + } + $mhdcharge = substr($mhdcharge, 11); + } + }else{ + $mhd = $wert; + $mhdcharge = ""; + } + + $checkarr = $this->app->DB->SelectArr("SELECT c.* FROM lager_mindesthaltbarkeitsdatum c $join WHERE c.artikel = '$artikel' $subwhere ORDER BY mhddatum = '$mhd' DESC, ".($mhdcharge != ''?"charge= '$mdhcharge' DESC,":"")." mhddatum,charge, id "); + if($checkarr) + { + $nochmenge = $menge; + foreach($checkarr as $c) + { + if($nochmenge <= 0)break; + if(!$fifo && $c['mhddatum'] != $mhd)break; + if($nochmenge >= $c['menge']) + { + if($doctype == 'produktion')$this->AddBaugruppenChargeMHD($doctypeid, $artikel, $c['menge'], $c['charge'],$c['mhddatum']); + $this->app->DB->Delete("DELETE FROM `lager_mindesthaltbarkeitsdatum` WHERE id = '".$c['id']."' LIMIT 1"); + if($chargenverwaltung) + { + $checkchargen = $this->app->DB->SelectArr("SELECT * FROM lager_charge WHERE artikel = '$artikel' AND lager_platz = '$lager_platz' AND charge = '".$c['charge']."' ORDER BY id "); + if($checkchargen) + { + $cnochmenge = $c['menge']; + foreach($checkchargen as $cc) + { + if($cnochmenge <= 0)break; + if($cc['menge'] <= $cnochmenge) + { + $this->app->DB->Delete("DELETE FROM lager_charge WHERE id = '".$cc['id']."' LIMIT 1"); + $cnochmenge -= $cc['menge']; + }else{ + $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET menge = menge - '".$cnochmenge."' WHERE id = '".$cc['id']."' LIMIT 1"); + break; + } + } + } + } + $nochmenge -= $c['menge']; + }else{ + if($doctype == 'produktion')$this->AddBaugruppenChargeMHD($doctypeid, $artikel, $nochmenge, $c['charge'],$c['mhddatum']); + $this->app->DB->Update("UPDATE lager_charge SET menge = menge - '".$nochmenge."' WHERE id = '".$c['id']."' LIMIT 1"); + if($chargenverwaltung) + { + $checkchargen = $this->app->DB->SelectArr("SELECT * FROM lager_charge WHERE artikel = '$artikel' AND lager_platz = '$lager_platz' AND charge = '".$c['charge']."' ORDER BY id "); + if($checkchargen) + { + $cnochmenge = $nochmenge; + foreach($checkchargen as $cc) + { + if($cnochmenge <= 0)break; + if($cc['menge'] <= $cnochmenge) + { + $this->app->DB->Delete("DELETE FROM lager_charge WHERE id = '".$cc['id']."' LIMIT 1"); + $cnochmenge -= $cc['menge']; + }else{ + $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET menge = menge - '".$cnochmenge."' WHERE id = '".$cc['id']."' LIMIT 1"); + break; + } + } + } + } + $nochmenge = 0; + break; + } + } + return $menge - $nochmenge; + } + + break; + case 'charge': + if(!$chargenverwaltung)return false; + + $checkarr = $this->app->DB->SelectArr("SELECT c.* FROM lager_charge c $join WHERE c.artikel = '$artikel' $subwhere ORDER BY charge = '$wert' DESC, charge, id "); + if($checkarr) + { + $nochmenge = $menge; + foreach($checkarr as $c) + { + if($nochmenge <= 0)break; + if(!$fifo && $c['charge'] != $wert)break; + if($c['menge'] <= $nochmenge) + { + if($doctype == 'produktion')$this->AddBaugruppenChargeMHD($doctypeid, $artikel, $c['menge'], $c['charge']); + $this->app->DB->Delete("DELETE FROM lager_charge WHERE id = '".$c['id']."' LIMIT 1"); + $nochmenge -= $c['menge']; + }else{ + if($doctype == 'produktion')$this->AddBaugruppenChargeMHD($doctypeid, $artikel, $nochmenge, $c['charge']); + $this->app->DB->Update("UPDATE lager_charge SET menge = menge - $nochmenge WHERE id = '".$c['id']."' LIMIT 1"); + $nochmenge = 0; + break; + } + } + return $menge - $nochmenge; + } + break; + } + return false; +} + + function CreateBelegPositionMHDCHARGESRNArr($doctype,$doctypeid,$pos, $data, $lager_platz = 0) + { + if(!$data) { + return; + } + $first = true; + $sql = "INSERT INTO beleg_chargesnmhd (doctype,doctypeid,pos,type,wert,menge, type2, wert2, lagerplatz) VALUES "; + foreach($data as $k => $v) { + if(!$first) { + $sql .= ', '; + } + $sql .= " ('$doctype','$doctypeid','$pos','".$v['type']."','".$v['wert']."','".$v['menge']."','".$v['type2']."','".$v['wert2']."','$lager_platz') "; + $first = false; + } + $this->app->DB->Insert($sql); + } + + function CreateBelegPositionMHDCHARGESRN($doctype,$doctypeid,$pos,$type,$wert,$menge=1, $type2 = "", $wert2 = "", $lager_platz = 0, $internebemerkung = '') + { + if($type === 'sn' && $menge == 0) { + $menge = 1; + } + $this->app->DB->Insert( + "INSERT INTO beleg_chargesnmhd (doctype,doctypeid,pos,type,wert,menge, type2, wert2) VALUES + ('$doctype','$doctypeid','$pos','$type','$wert','$menge','$type2','$wert2')" + ); + $ind = $this->app->DB->GetInsertID(); + if($lager_platz) { + $this->app->DB->Update("UPDATE beleg_chargesnmhd set lagerplatz = '".$lager_platz."' WHERE id = '$ind' LIMIT 1"); + } + if($internebemerkung != '') { + $this->app->DB->Update("UPDATE beleg_chargesnmhd set internebemerkung = '".$this->app->DB->real_escape_string($internebemerkung)."' WHERE id = '$ind' LIMIT 1"); + } + if($type === 'sn') { + $this->app->erp->SeriennummernLog($this->app->DB->Select("SELECT artikel FROM $doctype"."_position WHERE id = '$pos' LIMIT 1"), $lager_platz, $wert, 0, "",0,"","",$doctype, $doctypeid); + } + return $ind; + } + + function MHDAuslagernLog($artikel, $lager_platz, $mhddatum, $charge, $menge, $internebemerkung = '', $doctype = "", $doctypeid = 0, $lager_chargenid = 0, $adresse = 0) + { + if($artikel <= 0 || $menge == 0) { + return false; + } + if($lager_platz == 0 && $lager_chargenid == 0) { + return false; + } + if(!$adresse && $doctype != '' && $doctypeid > 0) { + $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); + } + if($lager_chargenid) + { + $arr = $this->app->DB->SelectArr("SELECT id, lager_platz, menge, charge,mhddatum FROM lager_mindesthaltbarkeitsdatum WHERE id = '$lager_chargenid' AND artikel = '$artikel' LIMIT 1"); + }else{ + $arr = $this->app->DB->SelectArr("SELECT id, lager_platz, menge, charge,mhddatum FROM lager_mindesthaltbarkeitsdatum + WHERE artikel = '$artikel' AND lager_platz = '$lager_platz' + ".($mhddatum!=''?" AND mhddatum = '$mhddatum'":'')." + ".($charge!=''?" AND charge = '$charge'":'')." AND menge > 0"); + } + if(!$arr) { + return false; + } + foreach($arr as $v) + { + if($menge <= 0) { + return true; + } + if($menge >= $v['menge']) + { + $menge -= $v['menge']; + $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id = '".$v['id']."' LIMIT 1"); + $this->MHDLog($artikel, $v['lager_platz'], 0, $v['mhddatum'], $v['menge'], $internebemerkung, $doctype, $doctypeid, $v['charge']); + }else{ + $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET menge = menge - $menge WHERE id = '".$v['id']."' LIMIT 1"); + $this->MHDLog($artikel, $v['lager_platz'], 0, $v['mhddatum'], $menge, $internebemerkung, $doctype, $doctypeid, $v['charge']); + return true; + } + } + + return $menge <= 0; + } + + function ChargeAuslagernLog($artikel, $lager_platz, $charge, $menge, $internebemerkung = '', $doctype = '', $doctypeid = 0, $lager_chargenid = 0, $adresse = 0, $isInterim = 0) + { + if($artikel <= 0 || $menge == 0) { + return false; + } + if($lager_platz == 0 && $lager_chargenid == 0) { + return false; + } + if(!$adresse && $doctype != '' && $doctypeid > 0) { + $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); + } + if($lager_chargenid) { + $arr = $this->app->DB->SelectArr("SELECT id, lager_platz, menge, charge FROM lager_charge WHERE id = '$lager_chargenid' AND artikel = '$artikel' LIMIT 1"); + }else{ + $arr = $this->app->DB->SelectArr("SELECT id, lager_platz, menge, charge FROM lager_charge WHERE artikel = '$artikel' AND lager_platz = '$lager_platz' AND charge = '$charge' AND menge > 0"); + } + if(!$arr) { + return false; + } + foreach($arr as $v) { + if($menge <= 0) { + return true; + } + if($menge >= $v['menge']) + { + $menge -= $v['menge']; + $this->app->DB->Delete("DELETE FROM lager_charge WHERE id = '".$v['id']."' LIMIT 1"); + $this->Chargenlog($artikel, $v['lager_platz'], 0, $charge, $v['menge'], $internebemerkung, $doctype, $doctypeid, $adresse,0,$isInterim); + }else{ + $this->app->DB->Update("UPDATE lager_charge SET menge = menge - $menge WHERE id = '".$v['id']."' LIMIT 1"); + $this->Chargenlog($artikel, $v['lager_platz'], 0, $charge, $menge, $internebemerkung, $doctype, $doctypeid, $adresse,0,$isInterim); + return true; + } + } + return $menge <= 0; + } + + function Chargenlog($artikel, $lager_platz, $eingang, $charge, $menge, $internebemerkung = '', $doctype = "", $doctypeid = 0, $adresse = 0,$chargen_log_id = 0, $isInterim = 0) + { + if($artikel <= 0) { + return null; + } + if(!$adresse && $doctype != '' && $doctypeid > 0) { + $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); + } + $internebemerkung = $this->app->DB->real_escape_string($internebemerkung); + $bestand = $this->app->DB->Select("SELECT ifnull(sum(menge),0) FROM lager_charge WHERE artikel = '$artikel' AND lager_platz = '$lager_platz' AND charge = '$charge'"); + $this->RunHook('chargenlog_bestand', 4, $artikel, $lager_platz, $charge, $bestand); + if($chargen_log_id) { + $chargen_log_id = $this->app->DB->Select("SELECT id FROM chargen_log WHERE id='$chargen_log_id' AND eingang = '$eingang' AND artikel = '$artikel' AND charge = '$charge' AND doctype = '$doctype' AND doctypeid = '$doctypeid' AND adresse = '$adresse' LIMIT 1"); + } + if($chargen_log_id) + { + $this->app->DB->Update("UPDATE chargen_log SET menge = menge + $menge, bestand = '$bestand' WHERE id = '$chargen_log_id' LIMIT 1"); + return $chargen_log_id; + } + $this->app->DB->Insert("INSERT INTO chargen_log (artikel,lager_platz,eingang,bezeichnung,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid,bestand,adresse,is_interim) + VALUES ('$artikel','$lager_platz','$eingang','".$charge."',NOW(),".(int)$this->app->User->GetAdresse().",'".$menge."','$internebemerkung','$doctype','$doctypeid','$bestand','$adresse',".(int)$isInterim.")"); + return $this->app->DB->GetInsertID(); + } + + function ChargenLogArray($artikel, $lager_platz, $eingang, $data, $internebemerkung = '', $doctype = "", $doctypeid = 0, $adresse = 0) + { + if($artikel <= 0) { + return; + } + if(!$adresse && $doctype != '' && $doctypeid > 0) { + $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); + } + $internebemerkung = $this->app->DB->real_escape_string($internebemerkung); + $sql = "INSERT INTO chargen_log (artikel,lager_platz,eingang,bezeichnung,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid,bestand,adresse) VALUES "; + $first = true; + $useradresse = 0; + if(isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetAdresse')) { + $useradresse = $this->app->User->GetAdresse(); + } + foreach($data as $k => $v) { + $this->RunHook('chargenlog_bestand', 4, $artikel, $lager_platz, $data[$k]['charge'], $data[$k]['bestand']); + if(!$first) { + $sql .= ', '; + } + $sql .= " ('$artikel','$lager_platz','$eingang','".$data[$k]['charge']."',NOW(),".$useradresse.",'".$data[$k]['menge']."','$internebemerkung','$doctype','$doctypeid','".$data[$k]['bestand']."','$adresse') "; + $first = false; + } + $this->app->DB->Insert($sql); + } + + function MHDLog($artikel, $lager_platz, $eingang, $mhd, $menge, $internebemerkung = '', $doctype = '', $doctypeid = 0, $charge = '', $adresse = 0, $isInterim = 0) + { + if($artikel <= 0) { + return; + } + if(!$adresse && $doctype != '' && $doctypeid > 0) { + $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); + } + $internebemerkung = $this->app->DB->real_escape_string($internebemerkung); + $bestand = $this->app->DB->Select("SELECT ifnull(sum(menge),0) FROM lager_mindesthaltbarkeitsdatum WHERE artikel = '$artikel' AND lager_platz = '$lager_platz' AND mhddatum = '$mhd' AND ifnull(charge,'') = '$charge'"); + $this->RunHook('mhdlog_bestand', 4, $artikel, $lager_platz, $mhd, $bestand); + $this->app->DB->Insert("INSERT INTO mhd_log (artikel,lager_platz,eingang,mhddatum,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid,bestand,adresse,is_interim) + VALUES ('$artikel','$lager_platz','$eingang','".$mhd."',NOW(),".(int)$this->app->User->GetAdresse().",'".$menge."','$internebemerkung','$doctype','$doctypeid','$bestand','$adresse',".(int)$isInterim.")"); + $insid = $this->app->DB->GetInsertID(); + if($charge != '') { + $this->app->DB->Update("UPDATE mhd_log SET charge = '$charge' WHERE id = '$insid' LIMIT 1"); + } + } + + function MHDLogArray($artikel, $lager_platz, $eingang, $data, $internebemerkung = '', $doctype = '', $doctypeid = 0, $adresse = 0) + { + if(empty($data)) { + return; + } + $sql = "INSERT INTO mhd_log (artikel,lager_platz,eingang,mhddatum,zeit,adresse_mitarbeiter,menge,internebemerkung,doctype,doctypeid,bestand,adresse,charge) VALUES "; + $first = true; + foreach($data as $k => $v) + { + $this->RunHook('mhdlog_bestand', 4, $artikel, $lager_platz, $data[$k]['mhd'], $data[$k]['bestand']); + if(!$first) { + $sql .= ', '; + } + $sql .= "('$artikel','$lager_platz','$eingang','".$data[$k]['mhd']."',NOW(),".(int)$this->app->User->GetAdresse().",'".$data[$k]['menge']."','$internebemerkung','$doctype','$doctypeid','".$data[$k]['bestand']."','$adresse','".$data[$k]['charge']."')"; + $first = false; + } + $this->app->DB->Insert($sql); + } + + public function removeBatchFromStock($articleId, $storageLocationId, $batch, $amount, $comment = '', $doctype = '', $doctypeid = 0, $docPosId = '') { + if($articleId <= 0 || $storageLocationId <= 0 || $amount <= 0 || empty($batch)) { + return 0; + } + $toRemove = $amount; + while($toRemove > 0) { + $this->app->erp->RunHook( + 'LagerAuslagernRegalMHDCHARGESRN_Charge', + 7, + $articleId, + $storageLocationId, + $toRemove, + $doctype, + $doctypeid, + $dokumentposid, + $extraorder + ); + $lager_chargen = $this->app->DB->SelectArr( + sprintf( + "SELECT id, menge, charge + FROM lager_charge + WHERE artikel=%d AND lager_platz=%d AND menge > 0 AND charge = '%s' + ORDER BY $extraorder id + LIMIT %d", + (int)$articleId, (int)$storageLocationId, $batch, ceil($toRemove) + ) + ); + if(empty($lager_chargen)){ + break; + } + + $chargen_log_arr = null; + foreach ($lager_chargen as $v) { + if($toRemove <= 0){ + break; + } + if($v['menge'] <= $toRemove){ + $this->app->DB->Update("UPDATE lager_charge SET menge = 0 WHERE id='" . $v['id'] . "' AND menge = '" . $v['menge'] . "' LIMIT 1"); + if($this->app->DB->affected_rows() > 0){ + $this->app->DB->Delete("DELETE FROM lager_charge WHERE id='" . $v['id'] . "' AND id > 0 LIMIT 1"); + if(!isset($chargen_log_arr['C' . $v['charge']])){ + $chargen_log_arr['C' . $v['charge']] = array('menge' => 0, 'bestand' => 0); + } + $chargen_log_arr['C' . $v['charge']]['menge'] += $v['menge']; + $toRemove = round($toRemove - $v['menge'], 8); + }else{ + break; + } + }elseif($toRemove > 0){ + $this->app->DB->Update("UPDATE lager_charge SET menge = menge - $toRemove WHERE id='" . $v['id'] . "' AND menge >= '$toRemove' LIMIT 1"); + if($this->app->DB->affected_rows() > 0){ + $this->app->DB->Delete("DELETE FROM lager_charge WHERE id='" . $v['id'] . "' AND id > 0 AND menge <= 0 LIMIT 1"); + if(!isset($chargen_log_arr['C' . $v['charge']])){ + $chargen_log_arr['C' . $v['charge']] = array('menge' => 0, 'bestand' => 0); + } + $chargen_log_arr['C' . $v['charge']]['menge'] += $toRemove; + $toRemove = 0; + break; + } + break; + } + } + if($chargen_log_arr){ + $chargensqla = null; + $bestandsql = "SELECT sum(menge) as bestand, charge FROM lager_charge WHERE artikel='$articleId' AND lager_platz='$storageLocationId' AND menge > 0 "; + foreach ($chargen_log_arr as $chargenkey => $arr) { + $chargensqla[] = "'" . substr($chargenkey, 1) . "'"; + } + $bestandsql .= " AND ifnull(charge,'') in (" . implode(', ', $chargensqla) . ") GROUP BY charge"; + $query = $this->app->DB->Query($bestandsql); + if($query){ + while ($row = $this->app->DB->Fetch_Assoc($query)) { + if(isset($chargen_log_arr['C' . $row['charge']])){ + $chargen_log_arr['C' . $row['charge']]['bestand'] = $row['bestand']; + } + } + } + $data = null; + $data2 = null; + foreach ($chargen_log_arr as $chargenkey => $arr) { + $data[] = array('charge' => substr($chargenkey, 1), 'menge' => $arr['menge'], 'bestand' => $arr['bestand']); + $data2[] = array('type' => 'charge', 'wert' => substr($chargenkey, 1), 'menge' => $arr['menge'], 'type2' => '', 'wert2' => ''); + } + unset($chargen_log_arr); + $this->ChargenLogArray($articleId, $storageLocationId, 0, $data, $comment, $doctype, $doctypeid); + unset($data); + if($doctypeid){ + $this->CreateBelegPositionMHDCHARGESRNArr($doctype, $doctypeid, $docPosId, $data2, $storageLocationId); + } + unset($data2); + } + + } + + return round($amount - $toRemove, 7); + } + + function LagerAuslagernRegalMHDCHARGESRN($artikel,$regal,$menge,$projekt,$grund,$importer="",$dokumenttyp="",$dokumentid="",$dokumentposid="", $chargenauslagern = 1, $mhdauslagern = 1, $seriennummernauslagern = 1) + { + $grundescaped = $this->app->DB->real_escape_string($grund); + if($this->Verbrauchslagervorhanden()) + { + $verbrauchslager = $this->app->DB->Select("SELECT verbrauchslager FROM lager_platz WHERE id = '$regal' LIMIT 1"); + if($verbrauchslager)$this->LagerArtikelZusammenfassen($artikel, $regal); + } + $artikelArr = $this->app->DB->SelectRow( + sprintf('SELECT mindesthaltbarkeitsdatum, chargenverwaltung, seriennummern FROM artikel WHERE id= %d LIMIT 1', + (int)$artikel + ) + ); + $mhd = $artikelArr['mindesthaltbarkeitsdatum']; + $chargenverwaltung = $artikelArr['chargenverwaltung']; + $chargenverwaltung = $chargenverwaltung == 2 || $chargenverwaltung == 1; + $seriennummern = $artikelArr['seriennummern']; + + if($seriennummernauslagern && $seriennummern==='vomprodukteinlagern') { + if($mhd == '1') { + $mhdauslagern = 1; + } + if($chargenverwaltung) { + $chargenauslagern = 1; + } + } + elseif($seriennummern==='vomprodukteinlagern' && !$seriennummernauslagern) { + if($mhd == '1') { + $mhdauslagern = 0; + } + if($chargenverwaltung) { + $chargenauslagern = 0; + } + } + elseif($mhd == '1' && $mhdauslagern && $chargenverwaltung) { + $chargenauslagern = 1; + } + elseif($mhd == '1' && !$mhdauslagern && $chargenverwaltung) { + $chargenauslagern = 0; + } + + $mhd_menge = $menge; + $charge_menge = $menge; + $extraorder = ''; + if($mhd=='1' && $mhdauslagern) { + $timeout=0; + while($mhd_menge > 0 && $timeout < 1000) { + $timeout++; + $this->app->erp->RunHook('LagerAuslagernRegalMHDCHARGESRN_MHD', 7,$artikel, $regal, $menge, $dokumenttyp,$dokumentid,$dokumentposid, $extraorder); + $lager_mindesthaltbarkeitsdatum = $this->app->DB->SelectArr( + sprintf( + "SELECT id,menge,mhddatum, charge + FROM lager_mindesthaltbarkeitsdatum + WHERE artikel=%d AND lager_platz=%d AND menge > 0 + ORDER BY $extraorder mhddatum, datum + LIMIT %d", + (int)$artikel, (int)$regal, ceil($mhd_menge) + ) + ); + if($lager_mindesthaltbarkeitsdatum) + { + $mhd_log_arr = null; + foreach($lager_mindesthaltbarkeitsdatum as $v) + { + if($mhd_menge <= 0) { + break; + } + $charge_menge = 0; + if($v['menge']<=$mhd_menge) + { + $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET menge = 0 WHERE id='".$v['id']."' AND menge = '".$v['menge']."' LIMIT 1"); + if($this->app->DB->affected_rows() > 0) + { + $mhd_menge = round($mhd_menge - $v['menge'],8); + $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id='".$v['id']."' AND id > 0 LIMIT 1"); + if(!isset($mhd_log_arr[$v['mhddatum']]) || !isset($mhd_log_arr[$v['mhddatum']]['C'.$v['charge']])) + { + $mhd_log_arr[$v['mhddatum']]['C'.$v['charge']] = array('menge'=>0, 'bestand'=>0); + } + $mhd_log_arr[$v['mhddatum']]['C'.$v['charge']]['menge'] += $v['menge']; + + if($chargenverwaltung) { + $stockedout = (float)$this->removeBatchFromStock($artikel, $regal, $v['charge'], $v['menge'], $grundescaped, $dokumenttyp, $dokumentid, $dokumentposid); + $charge_menge = round($charge_menge - $stockedout, 7); + } + + }else { + break; + } + }elseif($mhd_menge > 0) + { + $this->app->DB->Update("UPDATE lager_mindesthaltbarkeitsdatum SET menge = menge - $mhd_menge WHERE id='".$v['id']."' AND menge >= '$mhd_menge' LIMIT 1"); + if($this->app->DB->affected_rows() > 0) + { + $this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE id='".$v['id']."' AND id > 0 AND menge <= 0 LIMIT 1"); + if(!isset($mhd_log_arr[$v['mhddatum']]) || !isset($mhd_log_arr[$v['mhddatum']]['C'.$v['charge']])) + { + $mhd_log_arr[$v['mhddatum']]['C'.$v['charge']] = array('menge'=>0, 'bestand'=>0); + } + $mhd_log_arr[$v['mhddatum']]['C'.$v['charge']]['menge'] += $mhd_menge; + if($chargenverwaltung) { + $stockedout = (float)$this->removeBatchFromStock($artikel, $regal, $v['charge'], $mhd_menge, $grundescaped, $dokumenttyp, $dokumentid, $dokumentposid); + $charge_menge = round($charge_menge - $stockedout, 7); + } + $mhd_menge = 0; + } + break; + } + } + if($mhd_log_arr) + { + $mhdsqla = null; + $chargensqla = null; + $bestandsql = "SELECT sum(menge) as bestand, mhddatum, charge FROM lager_mindesthaltbarkeitsdatum WHERE artikel='$artikel' AND lager_platz='$regal' AND menge > 0 "; + foreach($mhd_log_arr as $mhdkey => $arr) + { + $mhdsqla[] = "'".$mhdkey."'"; + foreach($arr as $chargenkey => $arr2) + { + $chargensqla[] = "'".substr($chargenkey, 1)."'"; + } + } + $bestandsql .= " AND mhddatum in (".implode(', ',$mhdsqla).") AND ifnull(charge,'') in (".implode(', ', $chargensqla).") GROUP BY mhddatum, charge"; + $query = $this->app->DB->Query($bestandsql); + if($query) + { + while($row = $this->app->DB->Fetch_Assoc($query)) + { + if(isset($mhd_log_arr[$row['mhddatum']]) && isset($mhd_log_arr[$v['mhddatum']]['C'.$row['charge']])) { + $mhd_log_arr[$v['mhddatum']]['C'.$row['charge']]['bestand'] = $row['bestand']; + } + } + } + $data = null; + $data2 = null; + foreach($mhd_log_arr as $mhdkey => $arr) + { + $mhdsqla[] = "'".$mhdkey."'"; + foreach($arr as $chargenkey => $arr2) + { + $data[] = array('mhd' => $mhdkey, 'charge'=> substr($chargenkey,1), 'menge'=>$arr2['menge'],'bestand'=>$arr2['bestand']); + $data2[] = array('type'=>'mhd','wert'=>$mhdkey,'menge'=>$arr2['menge'],'type2'=>(substr($chargenkey,1) == ''?'':'charge'),'wert2'=>substr($chargenkey,1)); + } + } + unset($mhd_log_arr); + $this->MHDLogArray($artikel, $regal, 0, $data, $grundescaped, $dokumenttyp, $dokumentid); + unset($data); + if($dokumentid) { + $this->CreateBelegPositionMHDCHARGESRNArr($dokumenttyp,$dokumentid,$dokumentposid, $data2, $regal); + } + unset($data2); + } + }else { + break; + } + /* 05.06.2018 Bruno Abfragen zusammengefuehrt + */ + } + } + + + if($chargenverwaltung && $chargenauslagern) + { + while($charge_menge > 0) + { + $this->app->erp->RunHook('LagerAuslagernRegalMHDCHARGESRN_Charge', 7,$artikel, $regal, $menge, $dokumenttyp,$dokumentid,$dokumentposid, $extraorder); + $lager_chargen = $this->app->DB->SelectArr( + sprintf( + "SELECT id, menge, charge + FROM lager_charge + WHERE artikel=%d AND lager_platz=%d AND menge > 0 + ORDER BY $extraorder id + LIMIT %d", + (int)$artikel, (int)$regal, ceil($menge) + ) + ); + if($lager_chargen) + { + $chargen_log_arr = null; + foreach($lager_chargen as $v) + { + if($charge_menge <= 0) { + break; + } + if($v['menge'] <= $charge_menge) + { + $this->app->DB->Update("UPDATE lager_charge SET menge = 0 WHERE id='".$v['id']."' AND menge = '".$v['menge']."' LIMIT 1"); + if($this->app->DB->affected_rows() > 0) + { + $this->app->DB->Delete("DELETE FROM lager_charge WHERE id='".$v['id']."' AND id > 0 LIMIT 1"); + if(!isset($chargen_log_arr['C'.$v['charge']])) + { + $chargen_log_arr['C'.$v['charge']] = array('menge'=>0, 'bestand'=>0); + } + $chargen_log_arr['C'.$v['charge']]['menge'] += $v['menge']; + $charge_menge = round($charge_menge - $v['menge'],8); + }else{ + break; + } + }elseif($charge_menge > 0) + { + $this->app->DB->Update("UPDATE lager_charge SET menge = menge - $charge_menge WHERE id='".$v['id']."' AND menge >= '$charge_menge' LIMIT 1"); + if($this->app->DB->affected_rows() > 0) + { + $this->app->DB->Delete("DELETE FROM lager_charge WHERE id='".$v['id']."' AND id > 0 AND menge <= 0 LIMIT 1"); + if(!isset($chargen_log_arr['C'.$v['charge']])) + { + $chargen_log_arr['C'.$v['charge']] = array('menge'=>0, 'bestand'=>0); + } + $chargen_log_arr['C'.$v['charge']]['menge'] += $charge_menge; + $charge_menge = 0; + } + break; + } + } + if($chargen_log_arr) + { + $chargensqla = null; + $bestandsql = "SELECT sum(menge) as bestand, charge FROM lager_charge WHERE artikel='$artikel' AND lager_platz='$regal' AND menge > 0 "; + foreach($chargen_log_arr as $chargenkey => $arr) + { + $chargensqla[] = "'".substr($chargenkey, 1)."'"; + } + $bestandsql .= " AND ifnull(charge,'') in (".implode(', ', $chargensqla).") GROUP BY charge"; + $query = $this->app->DB->Query($bestandsql); + if($query) + { + while($row = $this->app->DB->Fetch_Assoc($query)) + { + if(isset($chargen_log_arr['C'.$row['charge']])) { + $chargen_log_arr['C'.$row['charge']]['bestand'] = $row['bestand']; + } + } + } + $data = null; + $data2 = null; + foreach($chargen_log_arr as $chargenkey => $arr) + { + $data[] = array('charge'=> substr($chargenkey,1), 'menge'=>$arr['menge'],'bestand'=>$arr['bestand']); + $data2[] = array('type'=>'charge','wert'=>substr($chargenkey,1),'menge'=>$arr['menge'],'type2'=>'','wert2'=>''); + } + unset($chargen_log_arr); + $this->ChargenLogArray($artikel, $regal, 0, $data, $grundescaped, $dokumenttyp, $dokumentid); + unset($data); + if($dokumentid) { + $this->CreateBelegPositionMHDCHARGESRNArr($dokumenttyp,$dokumentid,$dokumentposid, $data2, $regal); + } + unset($data2); + } + unset($lager_chargen); + }else { + break; + } + } + /* 05.06.2018 Bruno Abfragen zusammengefuehrt + + */ + } + + if($this->Verbrauchslagervorhanden()) + { + if($verbrauchslager)$this->LagerArtikelZusammenfassen($artikel, $regal); + } + } + + + function CreateLagerplatz($lager,$lagerplatz_name,$firma="1") + { + $lagerplatz_name = trim($lagerplatz_name); + // pruefe ob es Lagerplatz bereits gibt + $check_id = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$lagerplatz_name' AND lager='$lager' LIMIT 1"); + + if($check_id <= 0) + { + if($firma <= 0) $firma=1; + $this->app->DB->Insert("INSERT INTO lager_platz (id,lager,kurzbezeichnung,firma) VALUES ('','$lager','$lagerplatz_name',$firma)"); + $check_id = $this->app->DB->GetInsertID(); + } + return $check_id; + } + + + function LagerID($lager) + { + + if(is_numeric($lager) && $lager > 0) + { + $lager = $lager + 0; + $lager = $this->app->DB->Select("SELECT id FROM lager_platz WHERE id='$lager' LIMIT 1"); + if($lager > 0) + return $lager; + } + + if($lager !="") + { + $id = $this->app->DB->Select("SELECT id FROM lager_platz WHERE kurzbezeichnung='$lager' LIMIT 1"); + return $id; + } else return ""; + } + + function IsArtikelInZwischenlager($artikel) + { + $check = $this->app->DB->Select("SELECT id FROM zwischenlager WHERE richtung='Eingang' AND artikel='$artikel' LIMIT 1"); + return $check > 0; + } + + function ArtikelIDWennEAN($artikelnummer, $fremdnummern = false) + { + if($artikelnummer!="") + { + // artikelnummer hat hoechste Prio + $nummer = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikelnummer' AND ifnull(geloescht,0) = 0 LIMIT 1"); + if($nummer > 0) + return $nummer; + + // dann ean nummer + $ean = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$artikelnummer' AND ifnull(geloescht,0) = 0 AND nummer != 'DEL' LIMIT 1"); + if($ean > 0) + return $ean; + + // und zum Schluss Hersteller + $herstellernummer = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer='$artikelnummer' AND ifnull(geloescht,0) = 0 AND nummer != 'DEL' LIMIT 1"); + if($herstellernummer > 0) + return $herstellernummer; + + if($fremdnummern) + { + $artikel = $this->app->DB->Select("SELECT art.id FROM artikel art INNER JOIN artikelnummer_fremdnummern af ON art.id = af.artikel AND ifnull(art.geloescht,0) = 0 AND af.aktiv = 1 AND art.nummer <> 'DEL' + INNER JOIN shopexport s ON af.shopid = s.id WHERE af.nummer = '$artikelnummer' LIMIT 1"); + if($artikel) + return $artikel; + } +/* + $id = $this->app->DB->Select("SELECT id FROM artikel WHERE id='$artikelnummer' LIMIT 1"); + if($id > 0) + return $id; + else + return 0; +*/ + } + return 0; + } + + function LagerEinlagern($artikel,$menge,$regal,$projekt,$grund="",$importer="",$paketannahme="",$doctype = "", $doctypeid = 0, $vpeid = 0, $permanenteinventur = 0, $adresse = 0) + { + if(empty($artikel) || empty($regal)){ + return; + } + $break = false; + $this->RunHook('LagerEinlagern_before',8, $artikel, $menge, $regal, $projekt, $grund, $doctype,$doctypeid, $break); + if($break) { + return; + } + if(!$adresse && $doctypeid && $doctype != '') { + $adresse = $this->app->DB->Select("SELECT adresse FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); + } + //$this->LagerArtikelZusammenfassen($artikel); + $vpe = 'einzeln'; + $username = 'Import'; + if($importer!=1) { + $username = $this->app->DB->real_escape_string($this->app->User->GetName()); + } + + if($menge > 0 && is_numeric($menge)) { + // inhalt buchen + $this->app->DB->Insert("INSERT INTO lager_platz_inhalt (id,lager_platz,artikel,menge,vpe,bearbeiter,bestellung,projekt,firma,logdatei) + VALUES ('','$regal','$artikel','$menge','$vpe','".$username."','','$projekt','',NOW())"); + $insid = $this->app->DB->GetInsertID(); + $bestand = $this->ArtikelImLagerPlatz($artikel,$regal); + // Bewegung + if($vpeid) { + $grund .= $this->GetVPEBezeichnung($vpeid); + } + $this->app->DB->Insert("INSERT INTO lager_bewegung (id,lager_platz, artikel, menge,vpe, eingang,zeit,referenz, bearbeiter,projekt,firma,logdatei,bestand,paketannahme,doctype,doctypeid, permanenteinventur, adresse) + VALUES('','$regal','$artikel','$menge','$vpe','1',NOW(),'$grund','".$username."','$projekt','',NOW(),'$bestand','$paketannahme','$doctype','$doctypeid', '$permanenteinventur','$adresse')"); + if($vpeid)$this->app->DB->Update("UPDATE lager_platz_inhalt SET lager_platz_vpe = '$vpeid' WHERE id = '$insid' LIMIT 1"); + $this->LagerArtikelZusammenfassen($artikel, $regal); + $this->app->DB->Update("UPDATE artikel SET cache_lagerplatzinhaltmenge = -999, `laststorage_changed` = NOW() WHERE id = '$artikel' LIMIT 1"); + $this->app->DB->Update( + sprintf( + 'UPDATE artikel_onlineshops SET storage_cache = -999, pseudostorage_cache = -999 WHERE artikel = %d', + $artikel + ) + ); + } + + $this->RunHook('LagerEinlagern_after',7, $artikel, $menge, $regal, $projekt, $grund, $doctype,$doctypeid); + } + + function CreateLagerPlatzInhaltVPE($artikel, $menge, $gewicht, $laenge, $breite, $hoehe, $menge2 = 0, $gewicht2 = 0, $laenge2 = 0, $breite2 = 0, $hoehe2 = 0) + { + $check = $this->app->DB->Select("SELECT id FROM `lager_platz_vpe` WHERE artikel = '$artikel' AND menge = '$menge' AND gewicht = '$gewicht' AND breite = '$breite' AND + hoehe = '$hoehe' ".($menge2 <= 1?" AND (menge2 = '0' OR menge2 = 1) ":" AND menge2 = '$menge2' ")." AND gewicht2 = '$gewicht' AND breite2 = '$breite' AND + hoehe2 = '$hoehe' LIMIT 1 + "); + if($check)return $check; + $this->app->DB->Insert("INSERT INTO `lager_platz_vpe` (artikel, menge, gewicht, laenge, breite, hoehe, menge2, gewicht2, laenge2, breite2, hoehe2 ) + VALUES ('$artikel', '$menge', '$gewicht', '$laenge', '$breite', '$hoehe', '$menge2', '$gewicht2', '$laenge2', '$breite2', '$hoehe2') + "); + return $this->app->DB->GetInsertID(); + } + + function LagerEinlagernDifferenz($artikel,$menge,$regal,$projekt,$grund="",$importer="", $vpeid = 0) + { + $grund = "Differenz: ".$grund; + $this->LagerEinlagern($artikel,$menge,$regal,$projekt,$grund,$importer, "", "", 0, $vpeid); + } + + function LagerArtikelZusammenfassen($artikel, $regal = 0) + { + $fp = $this->app->erp->ProzessLock("lager_artikelzusammenfassen"); + //$this->LagerSync($artikel); + // all einzeln buchungen in einem Baum zusammenfassen + + if($artikel > 0) { + $result = $this->app->DB->SelectArr("SELECT lager_platz,SUM(menge) as gesamt,projekt,max(firma) as firma,max(inventur) as inventur, min(id) as minid,lager_platz_vpe FROM lager_platz_inhalt WHERE artikel='$artikel' ".($regal?" AND lager_platz = '$regal' ":'')." GROUP by lager_platz,lager_platz_vpe having count(id) > 1"); + //echo "DELETE FROM lager_platz_inhalt WHERE artikel='".$artikel."';"; + if($result) { + $cresult = count($result); + for($i=0;$i<$cresult;$i++) { + $this->app->DB->Delete("DELETE FROM lager_platz_inhalt WHERE artikel='$artikel' AND lager_platz = '".$result[$i]['lager_platz']."' AND lager_platz_vpe = '".$result[$i]['lager_platz_vpe']."' "); + if(empty($result[$i]['lager_platz'])) { + continue; + } + $this->app->DB->Insert("INSERT INTO lager_platz_inhalt (id,lager_platz,artikel,menge,projekt,firma,inventur,lager_platz_vpe) VALUES ('".$result[$i]['minid']."','".$result[$i]['lager_platz']."','$artikel', + '".$result[$i]['gesamt']."','".$result[$i]['projekt']."','".$result[$i]['firma']."',".(is_null($result[$i]['inventur'])?"NULL":"'".$result[$i]['inventur']."'").",'".$result[$i]['lager_platz_vpe']."')"); + } + } + } + if($regal) + { + //$this->app->DB->Delete("DELETE lager_platz_inhalt FROM lager_platz_inhalt WHERE lager_platz = '$regal' AND ((menge<='0' and (isnull(inventur) or inventur <= 0)) or menge < 0)"); + }else{ + //$this->app->DB->Delete("DELETE lager_platz_inhalt FROM lager_platz_inhalt WHERE (menge<='0' and (isnull(inventur) or inventur <= 0)) or menge < 0"); + } + if($this->Verbrauchslagervorhanden()) + { + if($regal && $this->app->DB->Select("SELECT verbrauchslager FROM lager_platz WHERE id = '$regal' LIMIT 1")) + { + $this->app->DB->Delete("DELETE lager_platz_inhalt FROM lager_platz_inhalt INNER JOIN lager_platz ON lager_platz.id=lager_platz_inhalt.lager_platz + WHERE lager_platz.verbrauchslager='1' AND lager_platz.id = '$regal'"); + //WHERE lager_platz_inhalt.artikel='".$artikel."' AND lager_platz.verbrauchslager='1'"); + + $this->app->DB->Delete("DELETE lager_charge FROM lager_charge INNER JOIN lager_platz ON lager_platz.id=lager_charge.lager_platz + WHERE lager_platz.verbrauchslager='1' AND lager_platz.id = '$regal'"); + + $this->app->DB->Delete("DELETE lager_seriennummer FROM lager_seriennummer + INNER JOIN lager_platz ON lager_platz.id=lager_seriennummer.lager_platz + WHERE lager_platz.verbrauchslager='1' AND lager_platz.id = '$regal'"); + + $this->app->DB->Delete("DELETE lager_mindesthaltbarkeitsdatum FROM lager_mindesthaltbarkeitsdatum + LEFT JOIN lager_platz ON lager_platz.id=lager_mindesthaltbarkeitsdatum.lager_platz + WHERE lager_platz.verbrauchslager='1' AND lager_platz.id = '$regal'"); + + }else{ + + // loesche verbrauchslager + // aber ebenfalls chargen, seriennummern und mhd + $this->app->DB->Delete("DELETE lager_platz_inhalt FROM lager_platz_inhalt INNER JOIN lager_platz ON lager_platz.id=lager_platz_inhalt.lager_platz + WHERE lager_platz.verbrauchslager='1'"); + //WHERE lager_platz_inhalt.artikel='".$artikel."' AND lager_platz.verbrauchslager='1'"); + + $this->app->DB->Delete("DELETE lager_charge FROM lager_charge INNER JOIN lager_platz ON lager_platz.id=lager_charge.lager_platz + WHERE lager_platz.verbrauchslager='1'"); + + $this->app->DB->Delete("DELETE lager_seriennummer FROM lager_seriennummer + INNER JOIN lager_platz ON lager_platz.id=lager_seriennummer.lager_platz + WHERE lager_platz.verbrauchslager='1'"); + + $this->app->DB->Delete("DELETE lager_mindesthaltbarkeitsdatum FROM lager_mindesthaltbarkeitsdatum + LEFT JOIN lager_platz ON lager_platz.id=lager_mindesthaltbarkeitsdatum.lager_platz + WHERE lager_platz.verbrauchslager='1'"); + } + } + $this->app->erp->ProzessUnlock($fp); + } + + + // pruefe ob es artikel noch im lager gibt bzw. ob es eine reservierung gibt + function LagerFreieMenge($artikel, $mitautolagersperre = false, $standardlager = 0, $projektlager = 0) + { + $summe_im_lager = (float)$this->app->DB->Select( + sprintf( + "SELECT SUM(li.menge) + FROM `lager_platz_inhalt` AS `li` + LEFT JOIN lager_platz AS lp ON lp.id=li.lager_platz + WHERE li.artikel = %d + AND lp.sperrlager!='1'".($mitautolagersperre?' AND lp.autolagersperre != 1':''), + $artikel + ) + ); + if($summe_im_lager <= 0) { + return 0; + } + $artikel_reserviert = (float)$this->app->DB->Select( + "SELECT SUM(lr.menge) + FROM `lager_reserviert` AS `lr` + WHERE lr.artikel = '{$artikel}' + AND (lr.datum >= NOW() OR lr.datum='0000-00-00')"); + + $restmenge = $summe_im_lager - $artikel_reserviert; + if($restmenge <= 0) { + return 0; + } + + if($standardlager > 0) { + $summe_im_lager_standard = (float)$this->app->DB->Select( + sprintf( + "SELECT SUM(li.menge) + FROM `lager_platz_inhalt` AS `li` + INNER JOIN `lager_platz` AS `lp` ON lp.id=li.lager_platz AND lp.lager = %d + WHERE li.artikel = %d + AND lp.sperrlager != '1'".($mitautolagersperre?' AND lp.autolagersperre != 1':''), + $standardlager,$artikel + ) + ); + if($summe_im_lager_standard <= 0) { + return 0; + } + + $artikelReserviertAuftrag = (float)$this->app->DB->Select( + sprintf( + "SELECT SUM(lr.menge) + FROM `lager_reserviert` AS `lr` + INNER JOIN `auftrag` AS `o` ON lr.objekt LIKE 'auftrag' AND lr.parameter = o.id + AND o.standardlager = %d AND o.status = 'freigegeben' + WHERE lr.artikel = %d AND (lr.datum>=NOW() OR lr.datum='0000-00-00')", + $standardlager, $artikel + ) + ); + + $artikelReserviertProduktion = (float)$this->app->DB->Select( + sprintf( + "SELECT SUM(lr.menge) + FROM `lager_reserviert` AS `lr` + INNER JOIN `produktion` AS `p` ON lr.objekt LIKE 'produktion' AND lr.parameter = p.id + AND p.standardlager = %d AND p.status IN ('freigegeben', 'gestartet') + WHERE lr.artikel = %d AND (lr.datum>=NOW() OR lr.datum='0000-00-00')", + $standardlager, $artikel + ) + ); + + $summe_im_lager_standard -= ($artikelReserviertAuftrag + $artikelReserviertProduktion); + if($summe_im_lager_standard <= 0) { + return 0; + } + + if($summe_im_lager_standard < $restmenge) { + return $summe_im_lager_standard; + } + } + elseif($projektlager > 0) { + $summe_im_lager_projekt = (float)$this->app->DB->Select( + sprintf( + "SELECT SUM(li.menge) + FROM `lager_platz_inhalt` AS `li` + INNER JOIN `lager_platz` AS `lp` ON lp.id=li.lager_platz + INNER JOIN `lager` AS `l` ON lp.lager = l.id AND l.projekt = %d + WHERE li.artikel=%d + AND lp.sperrlager!='1'".($mitautolagersperre?' AND lp.autolagersperre != 1':''), + $projektlager, $artikel + ) + ); + + if($summe_im_lager_projekt <= 0) { + return 0; + } + + $artikelReserviertProjektAuftrag = (float)$this->app->DB->Select( + sprintf( + "SELECT SUM(lr.menge) + FROM `lager_reserviert` AS `lr` + INNER JOIN `auftrag` AS `o` ON lr.objekt LIKE 'auftrag' AND lr.parameter = o.id + AND o.projekt = %d AND o.status = 'freigegeben' + WHERE lr.artikel = %d AND (lr.datum>=NOW() OR lr.datum='0000-00-00')", + $projektlager, $artikel + ) + ); + + $artikelReserviertProjektProduktion = (float)$this->app->DB->Select( + sprintf( + "SELECT SUM(lr.menge) + FROM `lager_reserviert` AS `lr` + INNER JOIN `produktion` AS `p` ON lr.objekt LIKE 'produktion' AND lr.parameter = p.id + AND p.projekt = %d AND p.status IN ('freigegeben', 'gestartet') + WHERE lr.artikel = %d AND (lr.datum>=NOW() OR lr.datum='0000-00-00')", + $projektlager, $artikel + ) + ); + + $summe_im_lager_projekt -= ($artikelReserviertProjektAuftrag + $artikelReserviertProjektProduktion); + if($summe_im_lager_projekt <= 0) { + return 0; + } + + if($summe_im_lager_projekt < $restmenge) { + return $summe_im_lager_projekt; + } + } + + return $restmenge; + } + + public function getPreproducedPartlistFromArticle($id) + { + return $this->app->DB->Select( + "SELECT art.preproduced_partlist + FROM artikel AS art + INNER JOIN artikel art2 ON art.preproduced_partlist = art2.id + AND art2.lagerartikel = 1 AND (art2.geloescht = 0 OR art2.geloescht IS NULL) AND art.id != art2.id + WHERE art.id = $id AND art.has_preproduced_partlist" + ); + } + + public function PreproducedPartlistSellableFrom($id, $projektlager = 0, $shopid = 0, $modus = 0) + { + if($id <= 0) { + return 0; + } + $preproduced_partlist = $this->getPreproducedPartlistFromArticle($id); + if($preproduced_partlist <= 0) { + return 0; + } + + return $this->ArtikelAnzahlVerkaufbar($preproduced_partlist, $projektlager, $shopid, $modus); + } + + public function ArtikelAnzahlLagerStueckliste($id, $projektlager = 0, $shopid = 0, $modus = 0) + { + // gehe stueckliste durch und schaue ob es maximal artikel ist + //$offen = $this->app->DB->Select("SELECT SUM(ap.menge) FROM auftrag_position ap LEFT JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$id' AND a.status='freigegeben'"); + if(empty($id)) { + return 0; + } + + $artikel = $this->app->DB->SelectArr("SELECT s.* FROM stueckliste s INNER JOIN artikel a ON s.artikel = a.id WHERE s.stuecklistevonartikel='$id' AND s.art!='it' AND a.lagerartikel = 1 and (a.geloescht = 0 OR a.geloescht IS NULL)"); + + if(empty($artikel)) { + return 0; + } + $offset = $this->PreproducedPartlistSellableFrom($id, $projektlager, $shopid, $modus); + + $stueck = 0; + $kleinste_max_menge = 0; + $cartikel = !empty($artikel)?count($artikel):0; + for($i=0;$i<$cartikel;$i++) { + $artikelid = $artikel[$i]['artikel']; + $mengeimlage = (float)$this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lp.id=lpi.lager_platz + WHERE lpi.artikel='$artikelid' AND lp.sperrlager!=1"); + $mengereserviert = (float)$this->app->DB->Select("SELECT ifnull(SUM(menge),0) FROM lager_reserviert WHERE artikel='$artikelid'"); + $mengeoffen = $modus == 1 ? 0 : (float)$this->app->DB->Select( + "SELECT ifnull(SUM(ap.menge),0) + FROM `auftrag_position` AS `ap` + INNER JOIN `auftrag` AS `a` ON a.id = ap.auftrag + WHERE ap.artikel='{$artikelid}' AND a.status='freigegeben'" + ); + $mengefrei = $mengeimlage - ($mengeoffen > $mengereserviert ? $mengeoffen : $mengereserviert); + + if($projektlager) { + $mengeimlagerprojekt = (float)$this->app->DB->Select("SELECT SUM(lpi.menge) FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lp.id=lpi.lager_platz INNER JOIN lager `lag` ON lp.lager = `lag`.id AND `lag`.projekt = '$projektlager' AND `lag`.geloescht <> 1 + WHERE lpi.artikel='$artikelid' AND lp.sperrlager!=1"); + $mengereserviertprojekt = (float)$this->app->DB->Select("SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r INNER JOIN auftrag a ON r.parameter = a.id AND r.objekt = 'auftrag' AND a.status = 'freigegeben' WHERE r.artikel='$artikelid' AND a.projekt = '$projektlager' "); + $mengeoffenprojekt = $modus == 1 ? 0 : (float)$this->app->DB->Select( + "SELECT ifnull(SUM(ap.menge),0) + FROM `auftrag_position` AS `ap` + INNER JOIN `auftrag` AS `a` ON a.id = ap.auftrag + WHERE ap.artikel='{$artikelid}' AND a.status='freigegeben' AND a.projekt = '{$projektlager}'" + ); + $mengefreiprojekt = $mengeimlage - ($mengeoffenprojekt > $mengereserviertprojekt?$mengeoffenprojekt:$mengereserviertprojekt); + if($mengefreiprojekt < $mengefrei) { + $mengefrei = $mengefreiprojekt; + } + } + + + if($artikel[$i]['menge'] <= 0) { + return $offset; + } + + $max_menge = floor($mengefrei/$artikel[$i]['menge']); + $collect[] = $max_menge; + } + + sort($collect); + $stueck = (float)$collect[0]; + + if($stueck <= 0) { + $stueck=0; + } + + return $stueck+$offset; + } + + function ArtikelAnzahlVerkaufbar($artikelid, $offset = 0, $projektlager = 0, $shopid = 0, $modus=0, $returnArray = false) + { + $ij=0; + if(is_array($artikelid) && isset($artikelid['juststueckliste']) && isset($artikelid['lagerartikel'])) { + $articleRow = $artikelid; + $artikelid = $artikelid['id']; + } + else{ + $lagerartikel[$ij]['id'] = $artikelid; + $articleRow = $this->app->DB->SelectRow( + sprintf( + 'SELECT id, juststueckliste, lagerartikel FROM artikel WHERE id = %d', + $artikelid + ) + ); + } + $lagerartikel[$ij]['juststueckliste'] = $articleRow['juststueckliste'];// $this->app->DB->Select("SELECT juststueckliste FROM artikel WHERE id='$artikelid' LIMIT 1"); + //$lagerartikel[$ij]['name_de'] = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikelid' LIMIT 1"); + //$lagerartikel[$ij]['nummer'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikelid' LIMIT 1"); + //$lagerartikel[$ij]['cache_lagerplatzinhaltmenge'] = $this->app->DB->Select("SELECT cache_lagerplatzinhaltmenge FROM artikel WHERE id='$artikelid' LIMIT 1"); + + $keinestueckliste = false; + if($lagerartikel[$ij]['juststueckliste'] && !$articleRow['lagerartikel']) { + $offen = 0; + $reserviert = 0; + $lagernd = (float)$this->ArtikelAnzahlLagerStueckliste($lagerartikel[$ij]['id'], $projektlager, $shopid, $modus); + } + elseif($lagerartikel[$ij]['juststueckliste']) { + $lagernd = (float)$this->ArtikelAnzahlLagerStueckliste($lagerartikel[$ij]['id'], $projektlager, $shopid, $modus); + $offen = (float)$this->ArtikelAnzahlOffene($lagerartikel[$ij]['id'], $projektlager); + $reserviert = (float)$this->ArtikelAnzahlReserviert($lagerartikel[$ij]['id'], $projektlager); + } + else { + $lagernd = (float)$this->ArtikelAnzahlLager($lagerartikel[$ij]['id'],0 , $projektlager); + $offen = (float)$this->ArtikelAnzahlOffene($lagerartikel[$ij]['id'], $projektlager); + $reserviert = (float)$this->ArtikelAnzahlReserviert($lagerartikel[$ij]['id'], $projektlager); + $keinestueckliste = true; + } + + $lagermenge = $lagernd; + $lagernd += (float)$offset; + + if($modus==1) // lager minus reservierte + { + $blockierte_menge = $reserviert; + } + else { + if($offen > $reserviert) { + $blockierte_menge = $offen; + } + else { + $blockierte_menge = $reserviert; + } + } + + $lagernd -= $blockierte_menge; + $berechneterBestand = $lagernd; + + if($lagernd < 0) { + $lagernd = 0; + } + if($shopid) { + $lagernd += (float)$this->GetArtikelShopEinstellung('lagerkorrekturwert', $artikelid, $shopid); + } + + if ($returnArray === false){ + return $lagernd; + } + + return [ + 'lagernd' => (float)$lagermenge, + 'reserviert' => (float)$reserviert, + 'offene_auftraege' => (float)$offen, + 'offene_bestellungen' => (float)$this->ArtikelAnzahlBestellung($artikelid), + 'berechneter_bestand' => (float)$berechneterBestand, + 'verkaufbar' => (float)$lagernd, + ]; + } + + /** + * @param int $shopId + * @param int $articleId + * + * @return array|null + */ + public function getStorageCacheInfosByShopId(int $shopId, int $articleId) + { + return $this->app->DB->SelectRow( + "SELECT `storage_cache`, `pseudostorage_cache`, `last_storage_transfer`, + HOUR(TIMEDIFF(NOW(), `last_storage_transfer`)) AS `last_storage_transfer_hours` + FROM `artikel_onlineshops` + WHERE `shop` = '{$shopId}' AND `artikel` = '{$articleId}' AND `storage_cache` IS NOT NULL + LIMIT 1" + ); + } + + /** + * @param int $shopId + * @param int $articleId + * @param int $sellable + * @param int $pseudoStorage + * + * @return bool + */ + public function isArticleShopCacheDifferent(int $shopId, int $articleId, int $sellable, int $pseudoStorage): bool + { + $storageCache = $this->app->DB->SelectRow( + "SELECT `storage_cache`, `pseudostorage_cache` + FROM `artikel_onlineshops` + WHERE `shop` = '{$shopId}' AND `artikel` = '{$articleId}' AND `storage_cache` IS NOT NULL + LIMIT 1" + ); + if(empty($storageCache)) { + return true; + } + + return $storageCache['storage_cache'] != $sellable || $storageCache['pseudostorage_cache'] != $pseudoStorage; + } + + /** + * @param int|array $artikelid + * @param bool $print_echo + * @param array $shopByIds + * + * @return string + */ + public function LagerSync($artikelid, $print_echo=false, $shopByIds = []) + { + $ij=0; + $message = ''; + if(!empty($artikelid) && is_array($artikelid) && !empty($artikelid['id'])){ + $artikelid = (int)$artikelid['id']; + } + elseif(!empty($artikelid) && is_array($artikelid)){ + $artikelid = (int)reset($artikelid); + } + if(!is_numeric($artikelid) || $artikelid <= 0){ + return ''; + } + $lagerartikel = $this->app->DB->SelectArr( + "SELECT * FROM `artikel` WHERE `id` = '{$artikelid}' LIMIT 1" + ); + if(empty($lagerartikel)){ + return ''; + } + + $bestandalternativartikel = $lagerartikel[$ij]['bestandalternativartikel']; + + $shops = $this->GetArtikelshops($lagerartikel[$ij]); + if(empty($shops)) { + return $message; + } + + foreach($shops as $shop) { + if($shop <= 0){ + continue; + } + if(!empty($shopByIds[$shop])) { + $shopArr = $shopByIds[$shop]; + } + else { + $shopArr = $this->app->DB->SelectRow( + "SELECT `id`, `projekt`, `lagergrundlage`, `lagerkorrekturwert`, `ueberschreibe_lagerkorrekturwert` + FROM `shopexport` + WHERE `id` = '{$shop}' AND `aktiv` = 1 + LIMIT 1" + ); + } + if(empty($shopArr) && empty($this->app->DB->error())) { + continue; + } + + $shopAricleArr = $this->GetArtikelShopEinstellung('', $lagerartikel[$ij], $shopArr); + if(empty($shopAricleArr['autolagerlampe'])) { + continue; + } + if(isset($shopAricleArr['pseudolager']) && trim($shopAricleArr['pseudolager']) !== '') { + $pseudolager = !empty($shopAricleArr['pseudolager'])?(float)$shopAricleArr['pseudolager']:0; + } + else { + $pseudolager = ''; + } + $this->app->erp->RunHook('remote_send_article_list_pseudostorage', 3, $shop, $artikelid, $pseudolager); + if(is_numeric($pseudolager) && $pseudolager < 0) { + $pseudolager = 0; + } + $projekt = $shopArr['projekt']; + $lagergrundlage = $shopArr['lagergrundlage']; + $projektlager = $this->Projektdaten($projekt, 'projektlager'); + if($projektlager) + { + if($bestandalternativartikel) { + $verkaufbare_menge = (float)$this->ArtikelAnzahlVerkaufbar($bestandalternativartikel,0,$projekt); + $verkaufbare_menge_korrektur = floor($this->ArtikelAnzahlVerkaufbar($bestandalternativartikel,0,$projekt, $shop, $lagergrundlage)); + } + else{ + $verkaufbare_menge = (float)$this->ArtikelAnzahlVerkaufbar($artikelid,0,$projekt); + $verkaufbare_menge_korrektur = floor((float)$this->ArtikelAnzahlVerkaufbar($artikelid,0,$projekt, $shop, $lagergrundlage)); + } + } + else{ + //$verkaufbare_menge = $verkaufbare_menge_alle; + if($bestandalternativartikel) { + $verkaufbare_menge = (float)$this->ArtikelAnzahlVerkaufbar($bestandalternativartikel,0,0); + $verkaufbare_menge_korrektur = floor((float)$this->ArtikelAnzahlVerkaufbar($bestandalternativartikel,0,0,$shop,$lagergrundlage)); + } + else{ + $verkaufbare_menge = (float)$this->ArtikelAnzahlVerkaufbar($artikelid,0,0); + $verkaufbare_menge_korrektur = floor((float)$this->ArtikelAnzahlVerkaufbar($artikelid,0,0,$shop,$lagergrundlage)); + } + } + if($verkaufbare_menge_korrektur < 0) { + $verkaufbare_menge_korrektur = 0; + } + $neuer_status = 'red'; + if ($verkaufbare_menge > 0){ + $neuer_status = 'gruen (Menge: ' . ($verkaufbare_menge . ' Pseudolager: ' . $pseudolager) . ')'; + } + + $isArticleCacheDifferent = $lagerartikel[$ij]['cache_lagerplatzinhaltmenge'] + != ($verkaufbare_menge_korrektur + $pseudolager); + + $storageCache = $isArticleCacheDifferent + ? null : $this->getStorageCacheInfosByShopId((int)$shop, (int)$lagerartikel[$ij]['id']); + + $hasToSendStock = $isArticleCacheDifferent + || $this->isArticleShopCacheDifferent( + (int)$shop, (int)$lagerartikel[$ij]['id'], (int)$verkaufbare_menge_korrektur, (int)$pseudolager + ); + + $needUpdateShopStorageCache = $storageCache && !$isArticleCacheDifferent; + + $isZeroQuantity = (is_numeric($pseudolager) && $pseudolager == 0) || (int)$verkaufbare_menge_korrektur === 0; + + if( + $storageCache !== null + && $isZeroQuantity + && ($storageCache['last_storage_transfer_hours'] === null || $storageCache['last_storage_transfer_hours'] > 48) + ) { + $hasToSendStock = true; + $needUpdateShopStorageCache = true; + } + + if(!$hasToSendStock) { + continue; + } + + if($needUpdateShopStorageCache) { + // to prevent loops + $this->app->DB->Update( + "UPDATE `artikel_onlineshops` + SET `last_storage_transfer` = NOW(), `storage_cache` = {$verkaufbare_menge_korrektur} + WHERE `artikel` = {$lagerartikel[$ij]['id']} AND `shop` = {$shop}" + ); + if(is_numeric($pseudolager)) { + $this->app->DB->Update( + "UPDATE `artikel_onlineshops` + SET `pseudostorage_cache` = {$pseudolager} + WHERE `artikel` = {$lagerartikel[$ij]['id']} AND `shop` = {$shop}" + ); + } + } + + $this->LogFile('*** UPDATE '.$lagerartikel[$ij]['nummer'].' '.$lagerartikel[$ij]['name_de'].' Shop: '.$shop.' Lagernd: '.$verkaufbare_menge.' Korrektur: '.round($verkaufbare_menge_korrektur - $verkaufbare_menge,7).' Pseudolager: '.round($pseudolager,8)); + + $cacheQuantity = $verkaufbare_menge_korrektur + $pseudolager; + $this->app->DB->Update( + "UPDATE `artikel` SET `cache_lagerplatzinhaltmenge` = '{$cacheQuantity}' + WHERE `id`= '{$lagerartikel[$ij]['id']}' LIMIT 1" + ); + + $extnummer = null; + $anzges = 0; + $anzfehler = 0; + if(!empty($extnummer) && is_array($extnummer)) { + foreach($extnummer as $nummer) { + $anzges++; + try { + $this->app->remote->RemoteSendArticleList($shop, array($lagerartikel[$ij]['id']), array($nummer['nummer']), true); + } + catch(Exception $e) { + $this->app->erp->LogFile($this->app->DB->real_escape_string('Lagersync Fehler '.$shop.' '.$nummer['nummer'].' '.$e->getMessage())); + $anzfehler++; + } + } + } + else{ + $anzges++; + try { + $this->app->remote->RemoteSendArticleList($shop,array($lagerartikel[$ij]['id']),!empty($extnummer)? array($extnummer):'',true); + } + catch(Exception $e) { + $this->app->erp->LogFile($this->app->DB->real_escape_string('Lagersync Fehler '.$shop.' '.(!empty($extnummer)? array($extnummer):$lagerartikel[$ij]['nummer']).' '.$e->getMessage())); + $anzfehler++; + } + } + $message .= 'Artikel: '.$lagerartikel[$ij]['name_de'].' ('.$lagerartikel[$ij]['nummer'].') Neuer Status: '.$neuer_status."\r\n"; + + if($print_echo) { + echo '*** UPDATE ' . $lagerartikel[$ij]['nummer'] . ' ' . $lagerartikel[$ij]['name_de'] . ' Lagernd: ' . ($verkaufbare_menge) . ' Korrekturwert: ' . round($verkaufbare_menge_korrektur - $verkaufbare_menge, 7) . "\r\n"; + } + } + + $this->app->DB->Update( + "UPDATE `artikel` SET `laststorage_sync` = NOW() WHERE `id` = {$artikelid}" + ); + + return $message; + } + + + // pruefe ob es artikel noch im lager gibt bzw. ob es eine reservierung gibt + public function LagerCheck($adresse,$artikel,$menge,$objekt='',$parameter='', $juststorage = false) + { + $projektlager = 0; + $standardlager = 0; + if($parameter > 0 && ($objekt==='auftrag' || $objekt==='lieferschein')) + { + $docArr = $this->app->DB->SelectRow(sprintf('SELECT * FROM `%s` WHERE id=%d LIMIT 1', $objekt, (int)$parameter)); + $projekt = $docArr['projekt']; + $auftrag = $parameter; + if($objekt === 'lieferschein') + { + $auftrag = $docArr['auftragid']; + } + if($projekt > 0) + { + $projectArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT projektlager, standardlager,kommissionierverfahren FROM projekt WHERE id=%d', + $projekt + ) + ); + $kommissionierverfahren= $projectArr['kommissionierverfahren']; + if( + !($kommissionierverfahren==='lieferscheinlager' || + $kommissionierverfahren==='lieferscheinlagerscan' || + $kommissionierverfahren==='lieferscheinscan' || + $kommissionierverfahren === 'lieferschein') || $this->app->DB->Select('SELECT IFNULL(COUNT(id),0) FROM lager') <= 1 + ) + { + $standardlager = 0; + } else { + $projektlager = $projectArr['projektlager']; + if($objekt==='auftrag' || $objekt === 'lieferschein') { + $standardlager = $docArr['standardlager']; + } else{ + $standardlager = $this->app->DB->Select(sprintf('SELECT standardlager FROM auftrag WHERE id = %d LIMIT 1', (int)$auftrag)); + } + if($standardlager && !$this->app->DB->Select(sprintf('SELECT id FROM lager WHERE id = %d LIMIT 1', (int)$standardlager))) { + $standardlager = $this->app->DB->Select(sprintf('SELECT id FROM lager WHERE id = %d LIMIT 1', (int)$docArr['standardlager'])); + } + } + } + } + + $articleArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT chargenverwaltung, mindesthaltbarkeitsdatum,seriennummern FROM artikel WHERE id = %d LIMIT 1', + $artikel + ) + ); + + $isBestBefore = !empty($articleArr['mindesthaltbarkeitsdatum']); + $isBatch = !empty($articleArr['chargenverwaltung']); + $isSn = !empty($articleArr['seriennummern']) && $articleArr['seriennummern'] !== 'keine'; + if($juststorage) { + $isBestBefore = false; + $isBatch = false; + $isSn = false; + } + if($standardlager > 0) + { + $summe_im_lager = round( + $this->app->DB->Select( + sprintf( + "SELECT IFNULL(SUM(li.menge),0) + FROM lager_platz_inhalt AS li + INNER JOIN lager_platz AS lp ON lp.id=li.lager_platz + INNER JOIN lager AS lag ON lag.id=lp.lager + WHERE li.artikel= %d AND lp.autolagersperre!=1 AND lp.sperrlager!= 1 AND lag.id=%d", + (int)$artikel, (int)$standardlager + ) + ), + $this->GetLagerNachkommastellen() + ); + if($summe_im_lager > 0 && $isBestBefore) { + $bestBeforeStorage = round( + $this->app->DB->Select( + sprintf( + "SELECT IFNULL(SUM(li.menge),0) + FROM lager_mindesthaltbarkeitsdatum AS li + INNER JOIN lager_platz AS lp ON lp.id=li.lager_platz + INNER JOIN lager AS lag ON lag.id=lp.lager + WHERE li.artikel= %d AND lp.autolagersperre!=1 AND lp.sperrlager!= 1 AND lag.id=%d", + (int)$artikel, (int)$standardlager + ) + ), + $this->GetLagerNachkommastellen() + ); + if($bestBeforeStorage < $summe_im_lager) { + $summe_im_lager = $bestBeforeStorage; + } + }elseif($summe_im_lager > 0 && $isBatch) { + $batchStorage = round( + $this->app->DB->Select( + sprintf( + "SELECT IFNULL(SUM(li.menge),0) + FROM lager_charge AS li + INNER JOIN lager_platz AS lp ON lp.id=li.lager_platz + INNER JOIN lager AS lag ON lag.id=lp.lager + WHERE li.artikel= %d AND lp.autolagersperre!=1 AND lp.sperrlager!= 1 AND lag.id=%d", + (int)$artikel, (int)$standardlager + ) + ), + $this->GetLagerNachkommastellen() + ); + if($batchStorage < $summe_im_lager) { + $summe_im_lager = $batchStorage; + } + } + + $artikel_reserviert = round( + $this->app->DB->Select( + sprintf( + "SELECT SUM(menge) + FROM lager_reserviert + WHERE artikel=%d AND (datum>=NOW() OR datum='0000-00-00')", + (int)$artikel + ) + ), + $this->GetLagerNachkommastellen() + ); + $summe_im_lager_gesamt = round( + $this->app->DB->Select( + sprintf( + "SELECT SUM(li.menge) + FROM lager_platz_inhalt AS li + LEFT JOIN lager_platz lp ON lp.id=li.lager_platz WHERE li.artikel= %d + AND lp.autolagersperre!=1 AND lp.sperrlager!=1", + $artikel + ) + ), + $this->GetLagerNachkommastellen() + ); + }elseif($projektlager > 0) + { + $summe_im_lager = round( + $this->app->DB->Select( + sprintf( + "SELECT SUM(li.menge) + FROM lager_platz_inhalt AS li + INNER JOIN lager_platz AS lp ON lp.id=li.lager_platz + INNER JOIN lager AS lag ON lag.id=lp.lager + WHERE li.artikel=%d + AND lp.autolagersperre!=1 AND lp.sperrlager!= 1 AND lag.projekt=%d", + (int)$artikel, (int)$projekt + ) + ), + $this->GetLagerNachkommastellen() + ); + if($summe_im_lager > 0 && $isBestBefore) { + $bestBeforeStorage = round( + $this->app->DB->Select( + sprintf( + "SELECT SUM(li.menge) + FROM lager_mindesthaltbarkeitsdatum AS li + INNER JOIN lager_platz AS lp ON lp.id=li.lager_platz + INNER JOIN lager AS lag ON lag.id=lp.lager + WHERE li.artikel=%d + AND lp.autolagersperre!=1 AND lp.sperrlager!= 1 AND lag.projekt=%d", + (int)$artikel, (int)$projekt + ) + ), + $this->GetLagerNachkommastellen() + ); + if($bestBeforeStorage < $summe_im_lager) { + $summe_im_lager = $bestBeforeStorage; + } + } elseif($summe_im_lager > 0 && $isBatch) { + $batchStorage = round( + $this->app->DB->Select( + sprintf( + "SELECT SUM(li.menge) + FROM lager_charge AS li + INNER JOIN lager_platz AS lp ON lp.id=li.lager_platz + INNER JOIN lager AS lag ON lag.id=lp.lager + WHERE li.artikel=%d + AND lp.autolagersperre!=1 AND lp.sperrlager!= 1 AND lag.projekt=%d", + (int)$artikel, (int)$projekt + ) + ), + $this->GetLagerNachkommastellen() + ); + if($batchStorage < $summe_im_lager) { + $summe_im_lager = $batchStorage; + } + } + $artikel_reserviert = round($this->app->DB->Select("SELECT SUM(menge) + FROM lager_reserviert WHERE artikel='".$artikel."' AND projekt='$projekt' AND (datum>=NOW() OR datum='0000-00-00')"),$this->GetLagerNachkommastellen()); + } else { + $summe_im_lager = round( + $this->app->DB->Select( + sprintf( + "SELECT SUM(li.menge) + FROM lager_platz_inhalt AS li + LEFT JOIN lager_platz lp ON lp.id=li.lager_platz WHERE li.artikel= %d + AND lp.autolagersperre!=1 AND lp.sperrlager!=1", + $artikel + ) + ), + $this->GetLagerNachkommastellen() + ); + if($summe_im_lager > 0 && $isBestBefore) { + $bestBeforeStorage = round( + $this->app->DB->Select( + sprintf( + "SELECT SUM(li.menge) + FROM lager_mindesthaltbarkeitsdatum AS li + LEFT JOIN lager_platz AS lp ON lp.id=li.lager_platz WHERE li.artikel= %d + AND lp.autolagersperre!=1 AND lp.sperrlager!=1", + $artikel + ) + ), + $this->GetLagerNachkommastellen() + ); + if($bestBeforeStorage < $summe_im_lager) { + $summe_im_lager = $bestBeforeStorage; + } + }elseif($summe_im_lager > 0 && $isBatch) { + $batchStorage = round( + $this->app->DB->Select( + sprintf( + "SELECT SUM(li.menge) + FROM lager_charge AS li + LEFT JOIN lager_platz AS lp ON lp.id=li.lager_platz WHERE li.artikel= %d + AND lp.autolagersperre!=1 AND lp.sperrlager!=1", + $artikel + ) + ), + $this->GetLagerNachkommastellen() + ); + if($batchStorage < $summe_im_lager) { + $summe_im_lager = $batchStorage; + } + } + $artikel_reserviert = round($this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='".$artikel."' AND (datum>=NOW() OR datum='0000-00-00')"),$this->GetLagerNachkommastellen()); + } + + // wenn es reservierungen fuer den Auftrag gibt + if($objekt!='') + { + // auftrag reservierungen + $artikel_fuer_adresse_reserviert = round($this->app->DB->Select("SELECT SUM(menge) + FROM lager_reserviert + WHERE artikel='".$artikel."' ".($adresse > 0?" AND adresse='$adresse'":'')." AND ((objekt='$objekt' AND parameter='$parameter')".($objekt==='lieferschein' && $auftrag > 0?" OR (objekt='auftrag' AND parameter = '$auftrag') ":'').") AND (datum>=NOW() OR datum='0000-00-00')"),$this->GetLagerNachkommastellen()); + } else { + $artikel_fuer_adresse_reserviert = round($this->app->DB->Select("SELECT SUM(menge) + FROM lager_reserviert + WHERE artikel='".$artikel."' ".($adresse > 0?" AND adresse='$adresse'":'')." AND (datum>=NOW() OR datum='0000-00-00') AND objekt!='lieferschein'"),$this->GetLagerNachkommastellen()); + } + + if(round(($summe_im_lager - ($artikel_reserviert -$artikel_fuer_adresse_reserviert)),8) >= round($menge,8)) + { + return 1; + } + + if($standardlager) { + $nichtStandardlager = round($summe_im_lager_gesamt - $summe_im_lager,8); + if($nichtStandardlager > 0 ) { + $artikel_reserviert -= $nichtStandardlager; + if($artikel_reserviert < 0) { + $artikel_reserviert = 0; + } + if(round(($summe_im_lager - ($artikel_reserviert -$artikel_fuer_adresse_reserviert)),8) >= round($menge,8)) + { + return 1; + } + } + } + + if($objekt === 'auftrag' && $artikel_fuer_adresse_reserviert > 0) + { + if($summe_im_lager >= $artikel_fuer_adresse_reserviert) + { + $gesamte_menge_im_auftrag= $this->app->DB->Select("SELECT SUM(menge-geliefert_menge) + FROM auftrag_position WHERE auftrag='$parameter' AND artikel='$artikel'"); + if($artikel_fuer_adresse_reserviert >= $menge && $artikel_fuer_adresse_reserviert >= $gesamte_menge_im_auftrag && $summe_im_lager >= $gesamte_menge_im_auftrag){ + return true; + } + } + } + elseif($objekt === 'lieferschein' && $artikel_fuer_adresse_reserviert > 0) + { + if($summe_im_lager >= $artikel_fuer_adresse_reserviert) + { + $gesamte_menge_im_auftrag= $this->app->DB->Select("SELECT SUM(menge-geliefert) + FROM lieferschein_position WHERE lieferschein='$parameter' AND artikel='$artikel'"); + if($artikel_fuer_adresse_reserviert >= $menge && $artikel_fuer_adresse_reserviert >= $gesamte_menge_im_auftrag && $summe_im_lager >= $gesamte_menge_im_auftrag){ + return true; + } + } + } + + return 0; + } + + function AngebotSuche($parsetarget) + { + $treffer = $this->app->Secure->GetPOST("treffer"); + if($treffer > 0 ) { + $_SESSION['angebottreffer'] = $treffer; + $_SESSION['page'] = 1; + } + else + if(!isset($_SESSION['angebottreffer']) || $_SESSION['angebottreffer'] <= 0) + $_SESSION['angebottreffer'] = 10; + + $this->app->Tpl->Set('TREFFER',$_SESSION['angebottreffer']); + + + $suchwort= $this->app->Secure->GetPOST("suchwort"); + $name= $this->app->Secure->GetPOST("name"); + $plz= $this->app->Secure->GetPOST("plz"); + $angebot= $this->app->Secure->GetPOST("angebot"); + $kundennummer= $this->app->Secure->GetPOST("kundennummer"); + + $_SESSION['angebotsuchwort']=$suchwort; //$this->app->Tpl->Set(SUCHWORT,$_SESSION[angebotsuchwort]); + $_SESSION['angebotname']=$name; $this->app->Tpl->Set('NAME',$_SESSION['angebotname']); + $_SESSION['angebotplz']=$plz; $this->app->Tpl->Set('PLZ',$_SESSION['angebotplz']); + $_SESSION['angebotangebot']=$angebot; $this->app->Tpl->Set('ANGEBOT',$_SESSION['angebotangebot']); + $_SESSION['angebotkundennummer']=$kundennummer; $this->app->Tpl->Set('KUNDENNUMMER',$_SESSION['angebotkundennummer']); + + $suche = $this->app->Secure->GetPOST("suche"); + + //$this->app->YUI->AutoComplete(PROJEKTAUTO,"projekt",array('name','abkuerzung'),"abkuerzung"); + + if(($_SESSION['angebotsuchwort']!='' || $_SESSION['angebotname']!='' || $_SESSION['angebotplz']!='' || $_SESSION['angebotangebot']!='' || $_SESSION['angebotkundennummer']!='') && $suche!=""){ + + //Jeder der in Nachbesserung war egal ob auto oder manuell wandert anschliessend in Manuelle-Freigabe"); + if($suchwort!="") + { + return "SELECT DATE_FORMAT(a.datum,'%d.%m.%y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Angebot, ad.kundennummer as kunde, a.name, p.abkuerzung as projekt, a.status, a.id + FROM angebot a, projekt p, adresse ad WHERE + (a.plz LIKE '%$suchwort%' OR a.name LIKE '%$suchwort%' OR a.belegnr LIKE '%$suchwort%') + AND p.id=a.projekt AND a.adresse=ad.id + order by a.datum DESC, a.id DESC"; + } else { + return "SELECT DATE_FORMAT(a.datum,'%d.%m.%y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Angebot, ad.kundennummer as kunde, a.name, p.abkuerzung as projekt, a.status, a.id + FROM angebot a, projekt p, adresse ad WHERE + (ad.kundennummer LIKE '%{$_SESSION['angebotkundennummer']}%' AND a.plz LIKE '%{$_SESSION['angebotplz']}%' + AND a.name LIKE '%{$_SESSION['angebotname']}%' AND a.belegnr LIKE '%{$_SESSION['angebotangebot']}%' ) + AND p.id=a.projekt AND a.adresse=ad.id + order by a.datum DESC, a.id DESC"; + + } + + /* + return ("SELECT DISTINCT a.nummer, a.name_de as Artikel, p.abkuerzung, a.id FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE + a.name_de LIKE '%$name%' AND + a.nummer LIKE '$nummer%'AND + p.abkuerzung LIKE '%$projekt%' + AND geloescht='0' + ORDER by a.id DESC"); + */ + // SELECT DISTINCT a.name, a.ort, a.telefon, a.email, a.id + // FROM adresse a LEFT JOIN adresse_rolle r ON a.id=r.adresse WHERE r.subjekt='Kunde' ORDER by a.id DESC + + } else { + + return "SELECT DATE_FORMAT(a.datum,'%d.%m.%y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Angebot, ad.kundennummer as kunde, a.name, p.abkuerzung as projekt, a.status, a.id + FROM angebot a, projekt p, adresse ad WHERE p.id=a.projekt AND a.adresse=ad.id order by a.datum DESC, a.id DESC"; + + } + //$this->app->Tpl->Set(INHALT,""); + } + + + + function WebmailSuche($parsetarget,$rolle) + { + $suche = $this->app->Secure->GetPOST("suche"); + + $name = $this->app->Secure->GetPOST("name"); $this->app->Tpl->Set('SUCHENAME',$name); + $nummer = $this->app->Secure->GetPOST("nummer"); $this->app->Tpl->Set('SUCHENUMMER',$nummer); + $typ = $this->app->Secure->GetPOST("typ"); + + $this->app->YUI->AutoComplete('PROJEKTAUTO',"projekt",array('name','abkuerzung'),"abkuerzung"); + + $projekt = $this->app->Secure->GetPOST("projekt"); $this->app->Tpl->Set('SUCHEPROJEKT',$projekt); + $limit = $this->app->Secure->GetPOST("limit"); if($limit=="" || $limit ==0) $limit=10; $this->app->Tpl->Set('SUCHELIMIT',$limit); + + if($name!='' && $suche!='') + { + $_SESSION['name_webmailsuche'] = $name; + } elseif ($suche!="" && $name=='') + $_SESSION['name_webmailsuche'] = ''; + + if($name=='' && $suche!='') + { + $_SESSION['name_artikel'] = $name; + } + + $_SESSION['nummer'] = $nummer; + $_SESSION['projekt'] = $projekt; + + $adresse = $this->app->User->getAdresse(); + + if($name==""){ $name = $_SESSION['name_webmailsuche']; $this->app->Tpl->Set('SUCHENAME',$name);} + if($nummer==""){$nummer= $_SESSION['nummer']; $this->app->Tpl->Set('SUCHENUMMER',$nummer);} + if($projekt==""){$projekt= $_SESSION['projekt']; $this->app->Tpl->Set('SUCHEPROJEKT',$projekt);} + + if($name!="" || $nummer!="" || $projekt!="") $suche ="suche"; + + + $this->app->Tpl->Parse($parsetarget,"webmailsuche.tpl"); + if(($name!="" || $nummer!="" || $projekt!="") && $suche!=""){ + + + return("SELECT DATE_FORMAT(e.empfang,'%d.%m.%Y %H:%i') as zeit,CONCAT(LEFT(e.subject,30),'...') as betreff, e.sender,e.id + FROM emailbackup_mails e + WHERE e.webmail IN (SELECT id FROM emailbackup WHERE emailbackup.adresse = '$adresse' AND emailbackup.geloescht!=1) + AND e.sender LIKE '%$name%' AND + e.subject LIKE '$nummer%' + ORDER BY e.empfang DESC"); + + //p.abkuerzung LIKE '%$projekt%' + + //Jeder der in Nachbesserung war egal ob auto oder manuell wandert anschliessend in Manuelle-Freigabe"); + /* + return("SELECT DATE_FORMAT(tn.zeit,'%d.%m.%Y %H:%i') as zeit,CONCAT(LEFT(tn.betreff,30),'...') as betreff, t.kunde, p.abkuerzung, + tn.id FROM ticket_nachricht tn LEFT JOIN ticket t ON t.schluessel=tn.ticket LEFT JOIN projekt p ON p.id=t.projekt WHERE + t.kunde LIKE '%$name%' AND + tn.betreff LIKE '$nummer%'AND + p.abkuerzung LIKE '%$projekt%' + ORDER by tn.zeit DESC"); + */ + // SELECT DISTINCT a.name, a.ort, a.telefon, a.email, a.id + // FROM adresse a LEFT JOIN adresse_rolle r ON a.id=r.adresse WHERE r.subjekt='Kunde' ORDER by a.id DESC + // $table->Display(INHALT,"auftrag","kundeuebernehmen","In Auftrag einfügen"); + } else { + return "SELECT DATE_FORMAT(e.empfang,'%d.%m.%Y %H:%i') as zeit,CONCAT(LEFT(e.subject,30),'...') as betreff, e.sender,e.id + FROM emailbackup_mails e + WHERE webmail IN (SELECT id FROM emailbackup WHERE emailbackup.adresse = '$adresse' AND emailbackup.geloescht!=1) + ORDER BY e.empfang DESC"; + + // return "SELECT DATE_FORMAT(e.empfang,'%d.%m.%Y %H:%i') as zeit,CONCAT(LEFT(e.subject,30),'...') as betreff, e.sender, + // e.id FROM emailbackup_mails e WHERE + // ORDER by e.empfang DESC"; + } + + + + //$this->app->Tpl->Set(INHALT,""); + } + + + function TicketArchivSuche($parsetarget,$rolle) + { + /** @var Ticket $obj */ + $obj = $this->LoadModul('ticket'); + if(!empty($obj) && method_exists($obj, 'TicketArchivSuche')) + { + return $obj->TicketArchivSuche($parsetarget,$rolle); + } + } + + function ArtikelSuche($parsetarget,$rolle) + { + $suche = $this->app->Secure->GetPOST("suche"); + $suchwort= $this->app->Secure->GetPOST("suchwort"); + /* Auftrage fuer manuelle freigabe */ + + $name = $this->app->Secure->GetPOST("name"); $this->app->Tpl->Set('SUCHENAME',$name); + $nummer = $this->app->Secure->GetPOST("nummer"); $this->app->Tpl->Set('SUCHENUMMER',$nummer); + $typ = $this->app->Secure->GetPOST("typ"); + + $this->app->YUI->AutoComplete('PROJEKTAUTO',"projekt",array('name','abkuerzung'),"abkuerzung"); + + $projekt = $this->app->Secure->GetPOST("projekt"); $this->app->Tpl->Set('SUCHEPROJEKT',$projekt); + $limit = $this->app->Secure->GetPOST("limit"); if($limit=="" || $limit ==0) $limit=10; $this->app->Tpl->Set('SUCHELIMIT',$limit); + + if($name!="" && $suche!="") + { + $_SESSION['name_artikel'] = $name; + } elseif ($suche!="" && $name=="") + $_SESSION['name_artikel'] = ""; + + + if($name=="" && $suche!="") + { + $_SESSION['name_artikel'] = $name; + } + + $_SESSION['nummer'] = $nummer; + $_SESSION['projekt'] = $projekt; + + + if($name==""){ $name = $_SESSION['name_artikel']; $this->app->Tpl->Set('SUCHENAME',$name);} + if($nummer==""){$nummer= $_SESSION['nummer']; $this->app->Tpl->Set('SUCHENUMMER',$nummer);} + if($projekt==""){$projekt= $_SESSION['projekt']; $this->app->Tpl->Set('SUCHEPROJEKT',$projekt);} + + if($name!="" || $nummer!="" || $projekt!="") $suche ="suche"; + + + $this->app->Tpl->Parse($parsetarget,"artikelsuche.tpl"); + if(($name!="" || $nummer!="" || $projekt!="" || $suchwort!="") && $suche!=""){ + if($suchwort!="") + { + + return ("SELECT DISTINCT a.nummer, a.name_de as Artikel, p.abkuerzung, a.id FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE + (a.name_de LIKE '%$suchwort%' OR + a.nummer LIKE '%$suchwort%') + AND geloescht='0' + ORDER by a.id DESC"); + + } else { + return ("SELECT DISTINCT a.nummer, a.name_de as Artikel, p.abkuerzung, a.id FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE + a.name_de LIKE '%$name%' AND + a.nummer LIKE '%$nummer%' AND + p.abkuerzung LIKE '%$projekt%' + AND a.geloescht='0' + ORDER by a.id DESC"); + } + + //Jeder der in Nachbesserung war egal ob auto oder manuell wandert anschliessend in Manuelle-Freigabe"); + + // SELECT DISTINCT a.name, a.ort, a.telefon, a.email, a.id + // FROM adresse a LEFT JOIN adresse_rolle r ON a.id=r.adresse WHERE r.subjekt='Kunde' ORDER by a.id DESC + // $table->Display(INHALT,"auftrag","kundeuebernehmen","In Auftrag einfügen"); + } else { + + return "SELECT DISTINCT a.nummer, a.name_de as Artikel, p.abkuerzung, a.id FROM artikel a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.geloescht='0' + ORDER by a.id DESC"; + + } + //$this->app->Tpl->Set(INHALT,""); + } + + function AdressSuche($parsetarget,$rolle) + { + $suche = $this->app->Secure->GetPOST("suche"); + /* Auftrage fuer manuelle freigabe */ + if($rolle!="") + $this->app->Tpl->Set('SUBHEADING',"$rolle suchen"); + else + $this->app->Tpl->Set('SUBHEADING',"Adresse suchen"); + + $name = $this->app->Secure->GetPOST("name"); $this->app->Tpl->Set('SUCHENAME',$name); + $typ = $this->app->Secure->GetPOST("typ"); + $ansprechpartner = $this->app->Secure->GetPOST("ansprechpartner"); $this->app->Tpl->Set('SUCHEANSPRECHPARTNER',$ansprechpartner); + $abteilung= $this->app->Secure->GetPOST("abteilung"); + $unterabteilung= $this->app->Secure->GetPOST("unterabteilung"); + $adresszusatz= $this->app->Secure->GetPOST("adresszusatz"); + $email= $this->app->Secure->GetPOST("email"); + $telefon= $this->app->Secure->GetPOST("telefon"); + $telefax= $this->app->Secure->GetPOST("telefax"); + $ustid= $this->app->Secure->GetPOST("ustid"); + $land= $this->app->Secure->GetPOST("land"); + $plz= $this->app->Secure->GetPOST("plz"); $this->app->Tpl->Set('SUCHEPLZ',$plz); + $ort= $this->app->Secure->GetPOST("ort"); $this->app->Tpl->Set('SUCHEORT',$ort); + $strasse= $this->app->Secure->GetPOST("strasse"); $this->app->Tpl->Set('SUCHESTRASSE',$strasse); + $kundennummer= $this->app->Secure->GetPOST("kundennummer"); $this->app->Tpl->Set('KUNDENNUMMER',$kundennummer); + + if($name!="" && $suche!="") + { + $_SESSION['name'] = $name; + } elseif ($suche!="" && $name=="") + $_SESSION['name'] = ""; + + + if($name=="" && $suche!="") + { + $_SESSION['name'] = $name; + } + + $_SESSION['ort'] = $ort; + $_SESSION['plz'] = $plz; + + + if($name==""){ $name = $_SESSION['name']; $this->app->Tpl->Set('SUCHENAME',$name);} + if($ort==""){$ort= $_SESSION['ort']; $this->app->Tpl->Set('SUCHEORT',$ort);} + if($plz==""){$plz= $_SESSION['plz']; $this->app->Tpl->Set('SUCHEPLZ',$plz);} + + if($name!="" || $ort!="" || $plz!="") $suche ="suche"; + + $this->app->Tpl->Parse($parsetarget,"kundensuche.tpl"); + + if(($name!="" || $kundennummer!="" || $strasse!="" || $ort!="" || $plz!="") && $suche!=""){ + //Jeder der in Nachbesserung war egal ob auto oder manuell wandert anschliessend in Manuelle-Freigabe"); + return ("SELECT DISTINCT a.kundennummer, a.name, a.ort, a.telefon, a.email, a.id FROM adresse a LEFT JOIN adresse_rolle r ON a.id=r.adresse WHERE + a.name LIKE '%$name%' AND + a.ansprechpartner LIKE '%$ansprechpartner%' AND + a.ort LIKE '%$ort%' AND + a.strasse LIKE '%$strasse%' AND + a.kundennummer LIKE '%$kundennummer%' AND + a.plz LIKE '%$plz%' AND a.geloescht=0 ORDER by a.id DESC"); + //a.plz LIKE '%$plz%' AND r.subjekt='$rolle' ORDER by a.id DESC"); + + // SELECT DISTINCT a.name, a.ort, a.telefon, a.email, a.id + // FROM adresse a LEFT JOIN adresse_rolle r ON a.id=r.adresse WHERE r.subjekt='Kunde' ORDER by a.id DESC + // $table->Display(INHALT,"auftrag","kundeuebernehmen","In Auftrag einfügen"); + } else { + + return "SELECT DISTINCT a.name, a.ort, a.telefon, a.email, a.id + FROM adresse a WHERE a.geloescht=0 ORDER by a.name ASC"; + //FROM adresse a LEFT JOIN adresse_rolle r ON a.id=r.adresse WHERE r.subjekt='$rolle' ORDER by a.id DESC"; + + } + //$this->app->Tpl->Set(INHALT,""); + } + + function string2array ($string, $template){ +//#search defined dividers + preg_match_all ("|%(.+)%|U", $template, $template_matches); +//#replace dividers with "real dividers" + $template = preg_replace ("|%(.+)%|U", "(.+)", $template); +//#search matches + preg_match ("|" . $template . "|", $string, $string_matches); +//#[template_match] => $string_match + foreach ($template_matches[1] as $key => $value){ + $output[$value] = $string_matches[($key + 1)]; + } + return $output; + } + + + function SelectLaenderliste($selected="") + { + if($selected=="") $selected=$this->Firmendaten("land"); + + $laender = $this->GetSelectLaenderliste(true); + $options = ''; + foreach ($laender as $land => $kuerzel) { + $options = $options."\n"; + } + return $options; + } + + + function GetSelectStaatenliste($land = 'DE', $staatenliste=false){ + switch ($land) { + case 'DE': + $staaten = array( + 'Baden-Württemberg' => 'BW', + 'Bayern' => 'BY', + 'Berlin' => 'BE', + 'Brandenburg' => 'BB', + 'Bremen' => 'HB', + 'Hamburg' => 'HH', + 'Hessen' => 'HE', + 'Mecklenburg-Vorpommern' => 'MV', + 'Niedersachsen' => 'NI', + 'Nordrhein-Westfalen' => 'NW', + 'Rheinland-Pfalz' => 'RP', + 'Saarland' => 'SL', + 'Sachsen' => 'SN', + 'Sachsen-Anhalt' => 'ST', + 'Schleswig-Holstein' => 'SH', + 'Thüringen' => 'TH' + ); + break; + + case 'AT': + $staaten = array( + 'Burgenland' => '01', + 'Kärnten' => '02', + 'Niederösterreich' => '03', + 'Oberösterreich' => '04', + 'Salzburg' => '05', + 'Steiermark' => '06', + 'Tirol' => '07', + 'Vorarlberg' => '08', + 'Wien' => '09' + ); + break; + + case 'CH': + $staaten = array( + 'Aargau' => 'AG', + 'Appenzell Ausserrhoden' => 'AR', + 'Appenzell Innerrhoden' => 'AI', + 'Basel-Landschaft' => 'BL', + 'Basel-Stadt' => 'BS', + 'Bern' => 'BE', + 'Freiburg' => 'FR', + 'Genf' => 'GE', + 'Glarus' => 'GL', + 'Graubünden' => 'GR', + 'Jura' => 'JU', + 'Luzern' => 'LU', + 'Neuenburg' => 'NE', + 'Nidwalden' => 'NW', + 'Obwalden' => 'OW', + 'Schaffhausen' => 'SH', + 'Schwyz' => 'SZ', + 'Solothurn' => 'SO', + 'St. Gallen' => 'SG', + 'Tessin' => 'TI', + 'Thurgau' => 'TG', + 'Uri' => 'UR', + 'Waadt' => 'VD', + 'Wallis' => 'VS', + 'Zug' => 'ZG', + 'Zürich' => 'ZH' + ); + break; + + case 'CA': + $staaten = array( + 'Alberta' => 'AB', + 'British Columbia' => 'BC', + 'Manitoba' => 'MB', + 'Neufundland und Labrador' => 'NL', + 'New Brunswick' => 'NB', + 'Nordwest-Territorien' => 'NT', + 'Nova Scotia' => 'NS', + 'Nunavut' => 'NU', + 'Ontario' => 'ON', + 'Prince Edward Island' => 'PE', + 'Quebéc' => 'QC', + 'Saskatchewan' => 'SK', + 'Yukon' => 'YT' + ); + break; + + case 'US': + $staaten = array( + 'Alabama' => 'AL', + 'Alaska' => 'AK', + 'Arizona' => 'AZ', + 'Arkansas' => 'AR', + 'Colorado' => 'CO', + 'Connecticut' => 'CT', + 'Delaware' => 'DE', + 'Florida' => 'FL', + 'Georgia' => 'GA', + 'Hawaii' => 'HI', + 'Idaho' => 'ID', + 'Illinois' => 'IL', + 'Indiana' => 'IN', + 'Iowa' => 'IA', + 'Kalifornien' => 'CA', + 'Kansas' => 'KS', + 'Kentucky' => 'KY', + 'Louisiana' => 'LA', + 'Maine' => 'ME', + 'Maryland' => 'MD', + 'Massachusetts' => 'MA', + 'Michigan' => 'MI', + 'Minnesota' => 'MN', + 'Mississippi' => 'MS', + 'Missouri' => 'MO', + 'Montana' => 'MT', + 'Nebraska' => 'NE', + 'Nevada' => 'NV', + 'New Hampshire' => 'NH', + 'New Jersey' => 'NJ', + 'New Mexico' => 'NM', + 'New York' => 'NY', + 'North Carolina' => 'NC', + 'North Dakota' => 'ND', + 'Ohio' => 'OH', + 'Oklahoma' => 'OK', + 'Oregon' => 'OR', + 'Pennsylvania' => 'PA', + 'Rhode Island' => 'RI', + 'South Carolina' => 'SC', + 'South Dakota' => 'SD', + 'Tennessee' => 'TN', + 'Texas' => 'TX', + 'Utah' => 'UT', + 'Vermont' => 'VT', + 'Virginia' => 'VA', + 'Washington' => 'WA', + 'West Virginia' => 'WV', + 'Wisconsin' => 'WI', + 'Wyoming' => 'WY' + ); + break; + } + + $Values = array(); + while(list($Key,$Val) = each($staaten)) + $Values[$Val] = $Key; + + if($staatenliste) + return $staaten; + else + return $Values; + + +} + + + function FindISOCountry($country) + { + if(strlen($country)==2) return $country; + + $check = $this->GetSelectLaenderliste(); + foreach($check as $iso=>$countryname) + { + if(strtolower($countryname)===strtolower($country)) return $iso; + } + $check = $this->GetSelectLaenderlisteEN(); + foreach($check as $iso=>$countryname) + { + if(strtolower($countryname)===strtolower($country)) return $iso; + } + return -1; + } + + /** + * @param bool $laenderliste + * + * @return array + */ + public function GetSelectLaenderliste($laenderliste=false) + { + if($laenderliste) { + $tmp = $this->app->DB->SelectPairs( + 'SELECT bezeichnung_de, iso FROM laender ORDER BY bezeichnung_de' + ); + } + else { + $tmp = $this->app->DB->SelectPairs( + 'SELECT iso, bezeichnung_de FROM laender ORDER BY bezeichnung_de' + ); + } + if(!empty($tmp)) { + return $tmp; + } + + $laender = array( + 'Afghanistan' => 'AF', + 'Ägypten' => 'EG', + 'Albanien' => 'AL', + 'Algerien' => 'DZ', + 'Amerikanische Jungferninseln' => 'VI', + 'Andorra' => 'AD', + 'Angola' => 'AO', + 'Anguilla' => 'AI', + 'Antarktis' => 'AQ', + 'Antigua und Barbuda' => 'AG', + 'Äquatorialguinea' => 'GQ', + 'Argentinien' => 'AR', + 'Armenien' => 'AM', + 'Aruba' => 'AW', + 'Aserbaidschan' => 'AZ', + 'Äthiopien' => 'ET', + 'Australien' => 'AU', + 'Bahamas' => 'BS', + 'Bahrain' => 'BH', + 'Bangladesch' => 'BD', + 'Barbados' => 'BB', + 'Belgien' => 'BE', + 'Belize' => 'BZ', + 'Benin' => 'BJ', + 'Bermuda' => 'BM', + 'Bhutan' => 'BT', + 'Bolivien' => 'BO', + 'Bosnien und Herzegowina' => 'BA', + 'Botswana' => 'BW', + 'Bouvetinsel' => 'BV', + 'Brasilien' => 'BR', + 'Britisch-Indischer Ozean' => 'IO', + 'Britische Jungferninseln' => 'VG', + 'Brunei Darussalam' => 'BN', + 'Bulgarien' => 'BG', + 'Burkina Faso' => 'BF', + 'Burundi' => 'BI', + 'Chile' => 'CL', + 'China' => 'CN', + 'Cookinseln' => 'CK', + 'Costa Rica' => 'CR', + 'Dänemark' => 'DK', + 'Deutschland' => 'DE', + 'Dominica' => 'DM', + 'Dominikanische Republik' => 'DO', + 'Dschibuti' => 'DJ', + 'Ecuador' => 'EC', + 'El Salvador' => 'SV', + 'Elfenbeinküste' => 'CI', + 'Eritrea' => 'ER', + 'Estland' => 'EE', + 'Falklandinseln' => 'FK', + 'Färöer Inseln' => 'FO', + 'Fidschi' => 'FJ', + 'Finnland' => 'FI', + 'Frankreich' => 'FR', + 'Französisch-Guayana' => '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' => 'GB', + 'Guadeloupe' => 'GP', + 'Guam' => 'GU', + 'Guatemala' => 'GT', + 'Guinea' => 'GN', + 'Guinea-Bissau' => 'GW', + 'Guyana' => 'GY', + 'Haiti' => 'HT', + 'Heard und McDonaldinseln' => 'HM', + 'Honduras' => 'HN', + 'Hongkong' => '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', + 'Kaimaninseln' => 'KY', + 'Kambodscha' => 'KH', + 'Kamerun' => 'CM', + 'Kanada' => 'CA', + 'Kap Verde' => 'CV', + 'Kasachstan' => 'KZ', + 'Katar' => 'QA', + 'Kenia' => 'KE', + 'Kirgisistan' => 'KG', + 'Kiribati' => 'KI', + 'Kokosinseln' => 'CC', + 'Kolumbien' => 'CO', + 'Komoren' => 'KM', + 'Kongo' => 'CG', + 'Kongo, Demokratische Republik' => 'CD', + 'Kosovo' => 'XK', + 'Kroatien' => 'HR', + 'Kuba' => 'CU', + 'Kuwait' => 'KW', + 'Laos' => 'LA', + 'Lesotho' => 'LS', + 'Lettland' => 'LV', + 'Libanon' => 'LB', + 'Liberia' => 'LR', + 'Libyen' => 'LY', + 'Liechtenstein' => 'LI', + 'Litauen' => 'LT', + 'Luxemburg' => 'LU', + 'Macau' => 'MO', + 'Madagaskar' => 'MG', + 'Malawi' => 'MW', + 'Malaysia' => 'MY', + 'Malediven' => 'MV', + 'Mali' => 'ML', + 'Malta' => 'MT', + 'Marianen' => 'MP', + 'Marokko' => 'MA', + 'Marshallinseln' => 'MH', + 'Martinique' => 'MQ', + 'Mauretanien' => 'MR', + 'Mauritius' => 'MU', + 'Mayotte' => 'YT', + 'Mazedonien' => 'MK', + 'Mexiko' => 'MX', + 'Mikronesien' => 'FM', + 'Moldawien' => 'MD', + 'Monaco' => 'MC', + 'Mongolei' => 'MN', + 'Montenegro' => 'ME', + 'Montserrat' => 'MS', + 'Mosambik' => 'MZ', + 'Myanmar' => 'MM', + 'Namibia' => 'NA', + 'Nauru' => 'NR', + 'Nepal' => 'NP', + 'Neukaledonien' => 'NC', + 'Neuseeland' => 'NZ', + 'Nicaragua' => 'NI', + 'Niederlande' => 'NL', + 'Niger' => 'NE', + 'Nigeria' => 'NG', + 'Niue' => 'NU', + 'Nordkorea' => 'KP', + 'Norfolkinsel' => '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', + 'Pitcairninseln' => 'PN', + 'Polen' => 'PL', + 'Portugal' => 'PT', + 'Puerto Rico' => 'PR', + 'Réunion' => 'RE', + 'Ruanda' => 'RW', + 'Rumänien' => 'RO', + 'Russland' => 'RU', + 'Salomonen' => 'SB', + 'Sambia' => 'ZM', + 'Samoa, amerikanisch' => 'AS', + 'Samoa' => 'WS', + 'San Marino' => 'SM', + 'São Tomé und Príncipe' => 'ST', + 'Saudi-Arabien' => 'SA', + 'Schweden' => 'SE', + 'Schweiz' => 'CH', + 'Senegal' => 'SN', + 'Serbien' => 'RS', + 'Seychellen' => 'SC', + 'Sierra Leone' => 'SL', + 'Simbabwe' => 'ZW', + 'Singapur' => 'SG', + 'Slowakei' => 'SK', + 'Slowenien' => 'SI', + 'Somalia' => 'SO', + 'Südgeorgien, südliche Sandwichinseln' => 'GS', + 'Spanien' => 'ES', + 'Sri Lanka' => 'LK', + 'St. Helena' => 'SH', + 'St. Kitts und Nevis' => 'KN', + 'St. Lucia' => 'LC', + 'St. Pierre und Miquelon' => 'PM', + 'St. Vincent und die Grenadinen' => 'VC', + 'Südkorea' => 'KR', + 'Südafrika' => 'ZA', + 'Sudan' => 'SD', + 'Suriname' => 'SR', + 'Svalbard und Jan Mayen' => 'SJ', + 'Swasiland' => 'SZ', + 'Syrien' => 'SY', + 'Tadschikistan' => 'TJ', + 'Taiwan' => 'TW', + 'Tansania' => 'TZ', + 'Thailand' => 'TH', + 'Togo' => 'TG', + 'Tokelau' => 'TK', + 'Tonga' => 'TO', + 'Trinidad und Tobago' => 'TT', + 'Tschad' => 'TD', + 'Tschechien' => 'CZ', + 'Tunesien' => 'TN', + 'Türkei' => 'TR', + 'Turkmenistan' => 'TM', + 'Turks- und Caicosinseln' => 'TC', + 'Tuvalu' => 'TV', + 'Uganda' => 'UG', + 'Ukraine' => 'UA', + 'Ungarn' => 'HU', + 'Uruguay' => 'UY', + 'Usbekistan' => 'UZ', + 'Vanuatu' => 'VU', + 'Vatikanstadt' => 'VA', + 'Venezuela' => 'VE', + 'Vereinigte Arabische Emirate' => 'AE', + 'Vereinigtes Königreich' => 'UK', + 'Vereinigte Staaten von Amerika' => 'US', + 'Vietnam' => 'VN', + 'Wallis und Futuna' => 'WF', + 'Weihnachtsinsel' => 'CX', + 'Weißrussland' => 'BY', + 'Westsahara' => 'EH', + 'Zentralafrikanische Republik' => 'CF', + 'Zypern' => 'CY' + ); + + if($laenderliste) { + return $laender; + } + + return array_flip($laender); + } + + + /** + * @param bool $laenderliste + * + * @return array + */ + public function GetSelectLaenderlisteEN($laenderliste=false) + { + if($laenderliste) { + $tmp = $this->app->DB->SelectPairs( + 'SELECT bezeichnung_en, iso FROM laender ORDER BY bezeichnung_en' + ); + } + else { + $tmp = $this->app->DB->SelectPairs( + 'SELECT iso, bezeichnung_en FROM laender ORDER BY bezeichnung_en' + ); + } + if(!empty($tmp)) { + return $tmp; + } + + $laender = array( + 'Afghanistan' => 'AF', + 'Albania' => 'AL', + 'Algeria' => 'DZ', + 'Andorra' => 'AD', + 'Angola' => 'AO', + 'Anguilla' => 'AI', + 'Antarctica' => 'AQ', + 'Antigua and Barbuda' => 'AG', + 'Argentina' => 'AR', + 'Armenia' => 'AM', + 'Aruba' => 'AW', + 'Australia' => 'AU', + 'Austria' => 'AT', + 'Azerbaijan' => 'AZ', + 'Bahamas' => 'BS', + 'Bahrain' => 'BH', + 'Bangladesh' => 'BD', + 'Barbados' => 'BB', + 'Belarus' => 'BY', + 'Belgium' => 'BE', + 'Belize' => 'BZ', + 'Benin' => 'BJ', + 'Bermuda' => 'BM', + 'Bhutan' => 'BT', + 'Bolivia' => 'BO', + 'Bosnia and Herzegovina' => 'BA', + 'Botswana' => 'BW', + 'Bouvet Island' => 'BV', + 'Brazil' => 'BR', + 'British Indian Ocean Territory' => 'IO', + 'Brunei Darussalam' => 'BN', + 'Bulgaria' => 'BG', + 'Burkina Faso' => 'BF', + 'Burundi' => 'BI', + 'Cabo Verde' => 'CV', + 'Cambodia' => 'KH', + 'Cameroon' => 'CM', + 'Canada' => 'CA', + 'Cayman Islands' => 'KY', + 'Central African Republic' => 'CF', + 'Chad' => 'TD', + 'Chile' => 'CL', + 'China' => 'CN', + 'Christmas Island' => 'CX', + 'Cocos Islands' => 'CC', + 'Colombia' => 'CO', + 'Comoros' => 'KM', + 'Congo' => 'CG', + 'Congo (Democratic Republic)' => 'CD', + 'Cook Islands' => 'CK', + 'Costa Rica' => 'CR', + 'Côte d\'Ivoire' => 'CI', + 'Croatia' => 'HR', + 'Cuba' => 'CU', + 'Cyprus' => 'CY', + 'Czech Republic' => 'CZ', + 'Denmark' => 'DK', + 'Djibouti' => 'DJ', + 'Dominica' => 'DM', + 'Dominican Republic' => 'DO', + 'Ecuador' => 'EC', + 'Egypt' => 'EG', + 'El Salvador' => 'SV', + 'Equatorial Guinea' => 'GQ', + 'Eritrea' => 'ER', + 'Estonia' => 'EE', + 'Ethiopia' => 'ET', + 'Falkland Islands' => 'FK', + 'Faroe Islands' => 'FO', + 'Fiji' => 'FJ', + 'Finland' => 'FI', + 'France' => 'FR', + 'French Guiana' => 'GF', + 'French Polynesia' => 'PF', + 'French Southern Territories' => 'TF', + 'Gabon' => 'GA', + 'Gambia' => 'GM', + 'Georgia' => 'GE', + 'Germany' => 'DE', + 'Ghana' => 'GH', + 'Gibraltar' => 'GI', + 'Greece' => 'GR', + 'Greenland' => 'GL', + 'Grenada' => 'GD', + 'Guadeloupe' => 'GP', + 'Guam' => 'GU', + 'Guatemala' => 'GT', + 'Guinea' => 'GN', + 'Guinea-Bissau' => 'GW', + 'Guyana' => 'GY', + 'Haiti' => 'HT', + 'Heard Island and McDonald Islands' => 'HM', + 'Holy See' => 'VA', + 'Honduras' => 'HN', + 'Hong Kong' => 'HK', + 'Hungary' => 'HU', + 'Iceland' => 'IS', + 'India' => 'IN', + 'Indonesia' => 'ID', + 'Iran' => 'IR', + 'Iraq' => 'IQ', + 'Ireland' => 'IE', + 'Israel' => 'IL', + 'Italy' => 'IT', + 'Jamaica' => 'JM', + 'Japan' => 'JP', + 'Jordan' => 'JO', + 'Kazakhstan' => 'KZ', + 'Kenya' => 'KE', + 'Kiribati' => 'KI', + 'Korea (Democratic Republic)' => 'KP', + 'Korea (Republic of)' => 'KR', + 'Kosovo' => 'XK', + 'Kuwait' => 'KW', + 'Kyrgyzstan' => 'KG', + 'Lao' => 'LA', + 'Latvia' => 'LV', + 'Lebanon' => 'LB', + 'Lesotho' => 'LS', + 'Liberia' => 'LR', + 'Libya' => 'LY', + 'Liechtenstein' => 'LI', + 'Lithuania' => 'LT', + 'Luxembourg' => 'LU', + 'Macao' => 'MO', + 'Macedonia' => 'MK', + 'Madagascar' => 'MG', + 'Malawi' => 'MW', + 'Malaysia' => 'MY', + 'Maldives' => 'MV', + 'Mali' => 'ML', + 'Malta' => 'MT', + 'Marshall Islands' => 'MH', + 'Martinique' => 'MQ', + 'Mauritania' => 'MR', + 'Mauritius' => 'MU', + 'Mayotte' => 'YT', + 'Mexico' => 'MX', + 'Micronesia' => 'FM', + 'Moldova' => 'MD', + 'Monaco' => 'MC', + 'Mongolia' => 'MN', + 'Montenegro' => 'ME', + 'Montserrat' => 'MS', + 'Morocco' => 'MA', + 'Mozambique' => 'MZ', + 'Myanmar' => 'MM', + 'Namibia' => 'NA', + 'Nauru' => 'NR', + 'Nepal' => 'NP', + 'New Caledonia' => 'NC', + 'New Zealand' => 'NZ', + 'Nicaragua' => 'NI', + 'Netherlands' => 'NL', + 'Niger' => 'NE', + 'Nigeria' => 'NG', + 'Niue' => 'NU', + 'Norfolk Island' => 'NF', + 'Northern Mariana Islands' => 'MP', + 'Norway' => 'NO', + 'Oman' => 'OM', + 'Pakistan' => 'PK', + 'Palau' => 'PW', + 'Palestine' => 'PS', + 'Panama' => 'PA', + 'Papua New Guinea' => 'PG', + 'Paraguay' => 'PY', + 'Peru' => 'PE', + 'Philippines' => 'PH', + 'Pitcairn' => 'PN', + 'Poland' => 'PL', + 'Portugal' => 'PT', + 'Puerto Rico' => 'PR', + 'Qatar' => 'QA', + 'Réunion' => 'RE', + 'Romania' => 'RO', + 'Russia' => 'RU', + 'Rwanda' => 'RW', + 'Saint Helena' => 'SH', + 'Saint Kitts and Nevis' => 'KN', + 'Saint Lucia' => 'LC', + 'Saint Pierre and Miquelon' => 'PM', + 'Saint Vincent and the Grenadines' => 'VC', + 'Samoa (American)' => 'AS', + 'Samoa' => 'WS', + 'San Marino' => 'SM', + 'Sao Tome and Principe' => 'ST', + 'Saudi Arabia' => 'SA', + 'Senegal' => 'SN', + 'Serbia' => 'RS', + 'Seychelles' => 'SC', + 'Sierra Leone' => 'SL', + 'Singapore' => 'SG', + 'Slovakia' => 'SK', + 'Slovenia' => 'SI', + 'Solomon Islands' => 'SB', + 'Somalia' => 'SO', + 'South Africa' => 'ZA', + 'South Georgia, South Sandwich Isl.' => 'GS', + 'Spain' => 'ES', + 'Sri Lanka' => 'LK', + 'Sudan' => 'SD', + 'Suriname' => 'SR', + 'Svalbard and Jan Mayen' => 'SJ', + 'Swaziland' => 'SZ', + 'Sweden' => 'SE', + 'Switzerland' => 'CH', + 'Syrian' => 'SY', + 'Taiwan' => 'TW', + 'Tajikistan' => 'TJ', + 'Tanzania' => 'TZ', + 'Thailand' => 'TH', + 'Timor-Leste' => 'TL', + 'Togo' => 'TG', + 'Tokelau' => 'TK', + 'Tonga' => 'TO', + 'Trinidad and Tobago' => 'TT', + 'Tunisia' => 'TN', + 'Turkey' => 'TR', + 'Turkmenistan' => 'TM', + 'Turks and Caicos Islands' => 'TC', + 'Tuvalu' => 'TV', + 'Uganda' => 'UG', + 'Ukraine' => 'UA', + 'United Arab Emirates' => 'AE', + 'United Kingdom' => 'GB', + 'United States of America' => 'US', + 'Uruguay' => 'UY', + 'Uzbekistan' => 'UZ', + 'Vanuatu' => 'VU', + 'Venezuela' => 'VE', + 'Viet Nam' => 'VN', + 'Virgin Islands (Brit.)' => 'VG', + 'Virgin Islands (USA)' => 'VI', + 'Wallis and Futuna' => 'WF', + 'Western Sahara' => 'EH', + 'Yemen' => 'YE', + 'Zambia' => 'ZM', + 'Zimbabwe' => 'ZW', + + ); + + if($laenderliste) { + return $laender; + } + + return array_flip($laender); + } + + /** + * @return array + */ + public function GetAdressSprachen() + { + return array('deutsch'=>'DE','englisch'=>'EN','franzoesisch'=>'FR','hollaendisch'=>'NL','italienisch'=>'IT','spanisch'=>'ES','tschechisch'=>'CZ','daenisch'=>'DK','slowakisch'=>'SK','schwedisch'=>'SW','polnisch'=>'PL' ); + } + + function RMAGrund(){ + $gruende = array( + 'gutschrift' => 'Gutschrift zu ausgewählten Artikeln', + 'ersatzlieferung' => 'Kostenlose Ersatzlieferung veranlassen', + 'ruecksendung' => 'Rücksendung der ausgewählten Artikel', + 'internreparatur' => 'ausgewählte zur internen Reparatur geben', + 'externreparatur' => 'ausgewählte für Reparatur zurückschicken', + 'abgeschlossen' => 'ausgewählte Artikel auf abgeschlossen setzen', + 'offen' => 'ausgewählte Artikel auf offen setzen'); + + return $gruende; + } + + /** + * @param bool $sprachenliste + * + * @return array + */ + public function GetSelectSprachenListe($sprachenliste=false) + { + if($sprachenliste) { + $tmp = $this->app->DB->SelectPairs('SELECT bezeichnung_de, iso FROM sprachen ORDER BY bezeichnung_de'); + } + else { + $tmp = $this->app->DB->SelectPairs('SELECT iso, bezeichnung_de FROM sprachen ORDER BY bezeichnung_de'); + } + if(!empty($tmp) && count($tmp) > 1) { + return array_merge([''], $tmp); + } + + $sprachen = array( + 'Afrikaans' => 'AF', + 'Albanisch' => 'SQ', + 'Arabisch' => 'AR', + 'Armenisch' => 'HY', + 'Aserbeidschanisch' => 'AZ', + 'Bosnisch' =>'BS', + 'Bulgarisch' => 'BG', + 'Chinesisch' => 'ZH', + 'Dänisch' => 'DA', + 'Deutsch' => 'DE', + 'Englisch' => 'EN', + 'Estnisch' => 'ET', + 'Finnisch' => 'FI', + 'Französisch' => 'FR', + 'Georgisch' => 'KA', + 'Griechisch' => 'EL', + 'Holländisch' => 'NL', + 'Isländisch' => 'IS', + 'Italienisch' => 'IT', + 'Japanisch' => 'JA', + 'Kasachisch' => 'KK', + 'Koreanisch' => 'KO', + 'Kroatisch' => 'HR', + 'Lettisch' => 'LV', + 'Litauisch' => 'LT', + 'Norwegisch' => 'NO', + 'Polnisch' => 'PL', + 'Portugiesisch' => 'PT', + 'Rumänisch' => 'RO', + 'Russisch' => 'RU', + 'Schwedisch' => 'SV', + 'Serbisch' => 'SR', + 'Slowakisch' => 'SK', + 'Slowenisch' => 'SL', + 'Spanisch' => 'ES', + 'Tschechisch' => 'CZ', + 'Türkisch' => 'TR', + 'Ukrainisch' => 'UK', + 'Ungarisch' => 'HU', + 'Weißrussisch' => 'BY' + ); + if($sprachenliste) { + return $sprachen; + } + + return array_flip($sprachen); + } + + /** + * @param bool $sprachenliste + * + * @return array + */ + public function GetSelectSprachenListeEN($sprachenliste=false) + { + if($sprachenliste) { + $tmp = $this->app->DB->SelectPairs('SELECT bezeichnung_en, iso FROM sprachen ORDER BY bezeichnung_en'); + } + else { + $tmp = $this->app->DB->SelectPairs('SELECT iso, bezeichnung_en FROM sprachen ORDER BY bezeichnung_en'); + } + if(!empty($tmp) && count($tmp) > 1) { + return array_merge([''], $tmp); + } + + $sprachen = array( + 'Afrikaans' => 'AF', + 'Albanian' => 'SQ', + 'Arabic' => 'AR', + 'Armenian' => 'HY', + 'Azerbaijani' => 'AZ', + 'Bosnian' =>'BS', + 'Bulgarian' => 'BG', + 'Chinese' => 'ZH', + 'Danish' => 'DA', + 'German' => 'DE', + 'English' => 'EN', + 'Estonian' => 'ET', + 'Finnish' => 'FI', + 'French' => 'FR', + 'Georgian' => 'KA', + 'Greek' => 'EL', + 'Dutch' => 'NL', + 'Icelandic' => 'IS', + 'Italian' => 'IT', + 'Japanese' => 'JA', + 'Kazakh' => 'KK', + 'Korean' => 'KO', + 'Croatian' => 'HR', + 'Latvian' => 'LV', + 'Lithuanian' => 'LT', + 'Norwegian' => 'NO', + 'Polish' => 'PL', + 'Portuguese' => 'PT', + 'Romanian' => 'RO', + 'Russian' => 'RU', + 'Swedish' => 'SV', + 'Serbian' => 'SR', + 'Slovak' => 'SK', + 'Slovenian' => 'SL', + 'Spanish' => 'ES', + 'Czech' => 'CZ', + 'Turkish' => 'TR', + 'Ukrainian' => 'UK', + 'Hungarian' => 'HU', + 'Belarusian' => 'BE' + ); + + if($sprachenliste) { + return $sprachen; + } + + return array_flip($sprachen); + } + + function GetFirmaBCC1() + { + return $this->Firmendaten('bcc1'); + } + + function GetFirmaBCC2() + { + return $this->Firmendaten('bcc2'); + } + + function GetFirmaMail() + { + return $this->Firmendaten('email'); + } + + function GetFirmaName() + { + return $this->Firmendaten('name'); + } + + function GetFirmaAbsender() + { + $name = $this->Firmendaten('absendername'); + if($name!='') { + return $name; + } + return $this->Firmendaten('name'); + } + + + function GetSelectEmailMitName($selected="") + { + $own = $this->app->User->GetEmail(); + $name = $this->app->User->GetName(); + + $selected = str_replace(' <',' <',$selected); + $selected = str_replace('>','>',$selected); + + $email_addr[0]['email'] = $this->Firmendaten('email'); + $absendernamefirma[0]['absendername'] = $this->Firmendaten('absendername'); + $firmenname = $this->Firmendaten('name'); + + if($absendernamefirma[0]['absendername']=="") $absendernamefirma[0]['absendername']= $firmenname; + + + $emails = array(); + + if($this->app->User->GetField("email_bevorzugen")=="1") + { + if($own!='' && $name!='') + $emails[] = $name." <".$own.">"; + } + + $i=0; + foreach($email_addr AS $mail) + { + if($absendernamefirma[$i]['absendername']!="" && $mail['email']!="") + $emails[] = $absendernamefirma[$i]['absendername']." <".$mail['email'].">"; + } + + if($this->app->User->GetField("email_bevorzugen")!="1") + { + if($own!='' && $name!='') + $emails[] = $name." <".$own.">"; + } + + $email_addr = $this->app->DB->SelectArr("SELECT if(smtp_frommail!='',smtp_frommail,email) as email,smtp_fromname FROM emailbackup WHERE (smtp_frommail!='' OR email!='') AND (adresse<=0 OR adresse='".$this->app->User->GetAdresse()."') AND geloescht!=1 ORDER BY email"); + foreach($email_addr AS $mail) + { + if($mail['smtp_fromname']!="") $emails[] = $mail['smtp_fromname']." <".$mail['email'].">"; + else $emails[] = $firmenname." <".$mail['email'].">"; + } + + $emails = array_keys(array_flip($emails)); + + + for($i=0;$i{$emails[$i]}"; + } + return $tpl; + } + + + function GetSelectEmail($selected="") + { + $own = $this->app->User->GetEmail(); + $email_addr= $this->Firmendaten("email"); + + $emails = array(); + + if($this->app->User->GetField("email_bevorzugen")=="1") + { + if($own!='') + $emails[] = $own; + } + + if($email_addr!="") + $emails[] = $email_addr; + + $email_addr = $this->app->DB->SelectArr("SELECT if(smtp_frommail!='',smtp_frommail,email) as email FROM emailbackup WHERE (smtp_frommail!='' OR email!='') AND (adresse<=0 OR adresse='".$this->app->User->GetAdresse()."') AND geloescht!=1 ORDER BY email"); + foreach($email_addr AS $mail) + $emails[] = $mail['email']; + + $emails = array_keys(array_flip($emails)); + + for($i=0;$i{$emails[$i]}"; + } + return $tpl; + } + + function GetSelectTicketmail($selected="") + { + /** @var Ticket $obj */ + $obj = $this->LoadModul('ticket'); + if(!empty($obj) && method_exists($obj, 'GetSelectTicketmail')) + { + return $obj->GetSelectTicketmail($selected); + } + return ''; + } + + + function GetSelectDokumentKunde($typ,$adresse,$select) + { + $typ_bezeichnung = ucfirst($typ); + $result = $this->app->DB->SelectArr("SELECT CONCAT('$typ_bezeichnung ',if(status='angelegt','ENTWURF',belegnr),' (Status: ',status,') vom ',DATE_FORMAT(datum,'%d.%m.%Y')) as + result,id FROM $typ WHERE adresse='$adresse' ORDER by datum DESC"); + if(empty($result)) { + return ''; + } + $tmp = ''; + foreach ($result as $row) { + $tmp .= ""; + } + + return $tmp; + } + + + function GetSelectAuftragKunde($adresse,$select="") + { + return $this->GetSelectDokumentKunde("auftrag",$adresse,$select); + } + + function GetSelectRechnungKunde($adresse,$select="") + { + + return $this->GetSelectDokumentKunde("rechnung",$adresse,$select); + } + + function GetSelectArbeitsnachweisKunde($adresse,$select="") + { + return $this->GetSelectDokumentKunde("arbeitsnachweis",$adresse,$select); + } + + + + + function GetSelectAnsprechpartner($adresse, $selected="") + { + $first = $this->app->DB->Select("SELECT CONCAT(ansprechpartner,' <',email,'>') FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + $firstname = $this->app->DB->Select("SELECT ansprechpartner FROM adresse WHERE id='$adresse' LIMIT 1"); + if($firstname=="") $first = $this->app->DB->Select("SELECT CONCAT(name,' <',email,'>') FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + + $others = $this->app->DB->SelectArr("SELECT id, CONCAT(name,' (',bereich,')',' <',email,'>') as name FROM ansprechpartner WHERE adresse='$adresse'"); + + $tpl =""; + + for($i=0;$i{$others[$i]['name']}"; + } + return $tpl; + } + + function GetVorgaenger($projekt,$disableid="") + { + $user = $this->app->DB->SelectArr("SELECT * FROM arbeitspaket WHERE projekt='".$projekt."' AND id!='$disableid' AND art!='material'"); + $tpl[0]="keinen"; + for($i=0;$iapp->DB->SelectArr("SELECT DISTINCT a.id,a.name FROM adresse a INNER JOIN adresse_rolle ar on ar.adresse=a.id AND ar.subjekt='Mitarbeiter' WHERE a.mitarbeiternummer!='' AND a.geloescht!=1 AND (ar.bis = '0000-00-00' or ar.bis >= now()) ORDER by name"); + + for($i=0;$iapp->DB->SelectArr("SELECT * FROM reisekostenart ORDER by nummer"); + for($i=0;$iGetBezahltWieAssoc(); + + foreach($tmp as $key=>$value) + $result .= ""; + return $result; + } + + + + function GetLagerRegalart($selected="") + { + $tmp = array('Fachboden','Palette'); + foreach($tmp as $key=>$value) + { + if($value==$selected) $mark="selected"; else $mark=""; + $tpl .=""; + } + return $tpl; + } + + + function GetLagerABCKategorie($selected="") + { + $tmp = array(''=>'keine','A'=>'A','B'=>'B','C'=>'C'); + foreach($tmp as $key=>$value) + { + if($key==$selected) $mark="selected"; else $mark=""; + $tpl .=""; + } + return $tpl; + } + + + function GetSelectEtiketten($art,$selected="") + { + $user = $this->app->DB->SelectArr("SELECT * FROM etiketten WHERE verwendenals='$art' ORDER by name"); + for($i=0;$i{$user[$i]['name']}"; + } + return $tpl; + } + + function GetKalkulationartAssoc() + { + $user['artikel']="Artikel aus Stammdaten"; + $user['stueckliste']="Stückliste"; + $user['freieposition']="Freie Position"; + $user['maschinenzeit']="Maschinenzeit"; + $user['arbeitszeit']="Arbeitszeit"; + $user['einmalkosten']="Einmalkosten / Werkzeugkosten"; + +// $user['teilprojekt']="Teilprojekt / Aufgabe"; +// $user['hauptpunkt']="Beschriftung für Gruppe"; +// $user['unterpunkt']="Beschriftung für Untergruppe"; + + $user['zwischensumme']="Zwischensumme"; + $user['zwischensummemengex']="Zwischensumme für Menge X"; + +// $user['geplantemenge']="Geplante Menge"; + return $user; + } + + function GetSelectKalkulationart($selected="") + { + $user = $this->GetKalkulationartAssoc(); + foreach($user as $key=>$value) + { + if($key==$selected) $mark="selected"; else $mark=""; + $tpl .=""; + } + return $tpl; + } + + + function GetSelectReisekostenart($selected="") + { + $user = $this->app->DB->SelectArr("SELECT * FROM reisekostenart ORDER by nummer"); + for($i=0;$i{$user[$i]['nummer']}- {$user[$i]['beschreibung']}"; + } + return $tpl; + } + + function GetSelectUserVorlage($selected="",$disableid="") + { + $user = $this->app->DB->SelectArr("SELECT * FROM uservorlage WHERE id!='$disableid' ORDER by bezeichnung"); + for($i=0;$i{$user[$i]['bezeichnung']}"; + } + return $tpl; + } + + function GetSelectUser($selected="",$disableid="") + { + $user = $this->app->DB->SelectArr("SELECT * FROM user WHERE id!='$disableid'"); + for($i=0;$iapp->DB->Select("SELECT name FROM adresse WHERE id='".$user[$i]['adresse']."' LIMIT 1"); + if($user[$i]['id']==$selected) $mark="selected"; else $mark=""; + $tpl .=""; + } + return $tpl; + } + + /** + * @param array $array + * @param string|int $selected + * + * @return string + */ + public function arrayToSelect($array, $selected = '') + { + $tpl = ''; + foreach($array as $id => $konto) { + $mark = ''; + if($selected == $id) { + $mark = 'selected'; + } + $tpl .= ''; + } + + return $tpl; + } + + function GetIPAdapterbox($id) + { + return $this->app->DB->Select("SELECT adapterboxip FROM drucker WHERE id='$id' LIMIT 1"); + } + + function GetStandardPaketmarkendrucker($projekt="",$versandart="") + { + return $this->app->DB->Select("SELECT paketmarkendrucker FROM user WHERE id='".$this->app->User->GetID()."'"); + } + + function GetStandardVersanddrucker($projekt="",$versandart="") + { + return $this->app->DB->Select("SELECT standardversanddrucker FROM user WHERE id='".$this->app->User->GetID()."'"); + } + + function GetInstrashipExport($projekt="") + { + $export = $this->app->DB->Select("SELECT intraship_exportdrucker FROM projekt WHERE id = '$projekt' LIMIT 1"); + if($export)return $export; + return $this->GetStandardVersanddrucker(); + } + + function GetSelectEtikettenDrucker($selected="") + { + if($selected=="") + $selected = $this->app->DB->Select("SELECT standardetikett FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + + $check = $this->app->DB->Select("SELECT id FROM drucker WHERE id='$selected' AND aktiv='1' LIMIT 1"); + if($check!=$selected) $selected=""; + + if($selected=="") + $selected = $this->Firmendaten("standardetikettendrucker"); + + if($selected=="0" || $selected=="") + $tpl .=""; + else + $tpl .=""; + + $drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='2'"); + for($i=0;$i{$drucker[$i]['name']}"; + } + return $tpl; + } + + function GetSelectFax($selected="") + { + if($selected=="") + $selected = $this->app->DB->Select("SELECT standardfax FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + + $check = $this->app->DB->Select("SELECT id FROM drucker WHERE id='$selected' AND aktiv='1' LIMIT 1"); + if($check!=$selected) $selected=""; + + if($selected=="") + $selected = $this->Firmendaten("standardfax"); + + //$tpl .=""; + $drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='1'"); + for($i=0;$i{$drucker[$i]['name']}"; + } + return $tpl; + } + + function GetSelectBonDrucker($selected="") + { + if($selected=="") + $selected = $this->Firmendaten("aufgaben_bondrucker"); + + $drucker = $this->app->DB->SelectArr("SELECT id, bezeichnung FROM adapterbox WHERE verwendenals='bondrucker'"); + + $tpl =""; + for($i=0;$i{$drucker[$i]['bezeichnung']}"; + } + return $tpl; + } + + + function GetPosAdapterbox() + { + $drucker = $this->app->DB->SelectArr("SELECT id, bezeichnung FROM adapterbox WHERE verwendenals='bondrucker' OR verwendenals='rksvlight'"); + for($i=0;$iapp->DB->SelectArr("SELECT id, bezeichnung FROM adapterbox WHERE verwendenals='bondrucker'"); + for($i=0;$i-- kein --"; + $drucker = $this->app->DB->SelectArr("SELECT id, name FROM etiketten"); + for($i=0;$i-- kein --"; + $drucker = $this->app->DB->SelectArr("SELECT id, bezeichnung FROM adapterbox WHERE verwendenals='waage'"); + for($i=0;$i-- kein --"; + $drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='2'"); + for($i=0;$iapp->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='0'"); + for($i=0;$iapp->DB->Select("SELECT standardversanddrucker FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + + $check = $this->app->DB->Select("SELECT id FROM drucker WHERE id='$selected' AND aktiv='1' LIMIT 1"); + if($check!=$selected) $selected=""; + + $tpl =""; + $drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='0'"); + for($i=0;$i{$drucker[$i]['name']}"; + } + return $tpl; + } + + function GetSelectDrucker($selected="") + { + + + if($selected=="") + $selected = $this->app->DB->Select("SELECT standarddrucker FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + + $check = $this->app->DB->Select("SELECT id FROM drucker WHERE id='$selected' AND aktiv='1' LIMIT 1"); + if($check!=$selected) $selected=""; + + if($selected=="") + $selected = $this->Firmendaten("standardversanddrucker"); + + $tpl .=""; + $drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='0'"); + for($i=0;$i{$drucker[$i]['name']}"; + } + return $tpl; + } + function DokumentSendVorlage($id) + { + $betreff = $this->app->DB->Select("SELECT betreff FROM dokumente_send WHERE id='$id' LIMIT 1"); + $text = $this->app->DB->Select("SELECT text FROM dokumente_send WHERE id='$id' LIMIT 1"); + + $this->app->Tpl->Set('BETREFF',$betreff); + $this->app->Tpl->Set('TEXT',$text); + } + + function Geschaeftsbriefvorlage($sprache,$subjekt,$projekt="",$name="",$id="", $intern = false) + { + if($sprache=="") $sprache="deutsch"; + + $this->BeschriftungSprache($sprache); + + $belegnr = ""; + $adresse = ""; + $anschreiben = ""; + + $lowersubjekt = strtolower($subjekt); + if( + $lowersubjekt=="angebot" || + $lowersubjekt=="auftrag" || + $lowersubjekt=="bestellung" || + $lowersubjekt=="produktion" || + $lowersubjekt=="lieferschein" || + $lowersubjekt=="retoure" || + $lowersubjekt=="rechnung" || + $lowersubjekt=="gutschrift" || + $lowersubjekt=="arbeitsnachweis" || + $lowersubjekt=="proformarechnung" + ){ + if($id > 0) { + + if($name=="") + $name = $this->app->DB->Select("SELECT name FROM $lowersubjekt WHERE id='$id' LIMIT 1"); + + $belegnr = $this->app->DB->Select("SELECT belegnr FROM $lowersubjekt WHERE id='$id' LIMIT 1"); + $adresse = $this->app->DB->Select("SELECT adresse FROM $lowersubjekt WHERE id='$id' LIMIT 1"); + $anschreiben = $this->app->DB->Select("SELECT anschreiben FROM $lowersubjekt WHERE id='$id' LIMIT 1"); + $datum = $this->app->DB->Select("SELECT DATE_FORMAT(datum,'%d.%m.%Y') FROM $lowersubjekt WHERE id='$id' LIMIT 1"); + + if($anschreiben=="") + { + $anschreiben = $this->app->DB->Select("SELECT anschreiben FROM adresse WHERE id='$adresse' LIMIT 1"); + } + + if($anschreiben=="") + { + $anschreiben = $this->Beschriftung("dokument_anschreiben"); + } + + if(!$intern)$this->GeschaeftsBriefAnhang($subjekt,$sprache,$projekt,$lowersubjekt,$id); + } + } + + $text = $this->GetGeschaeftsBriefText($subjekt,$sprache,$projekt,$lowersubjekt,$id); + $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,$sprache,$projekt,$lowersubjekt,$id); + + if($text=="") $text = $this->GetGeschaeftsBriefText($subjekt,$sprache,$projekt,$lowersubjekt,$id); + if($betreff=="") $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,$sprache,$projekt,$lowersubjekt,$id); + + if(($text === "" || $betreff === "") && $sprache != 'deutsch') + { + $text = $this->GetGeschaeftsBriefText($subjekt,'deutsch',$projekt,$lowersubjekt,$id); + $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,'deutsch',$projekt,$lowersubjekt,$id); + + if($text=="") $text = $this->GetGeschaeftsBriefText($subjekt,'deutsch',$projekt,$lowersubjekt,$id); + if($betreff=="") $betreff = $this->GetGeschaeftsBriefBetreff($subjekt,'deutsch',$projekt,$lowersubjekt,$id); + } + + $text = str_replace('{BELEGNR}',$belegnr,$text); + $text = str_replace('{DATUM}',$datum,$text); + + $betreff = str_replace('{BELEGNR}',$belegnr,$betreff); + $betreff = str_replace('{DATUM}',$datum,$betreff); + + if($id > 0) + { + $betreff = $this->ParseUserVars($lowersubjekt,$id, $betreff); + $text = $this->ParseUserVars($lowersubjekt,$id, $text); + } + + if($anschreiben=="") { + $anschreiben = $this->app->erp->Beschriftung("dokument_anschreiben"); + } + $betreff = str_replace('{ANSCHREIBEN}',$anschreiben,$betreff); + $text = str_replace('{ANSCHREIBEN}',$anschreiben,$text); + + $betreff = str_replace('{NAME}',$name,$betreff); + $text = str_replace('{NAME}',$name,$text); + + + + if(!$intern)$this->app->Tpl->Set('BETREFF',$betreff); + + if(!$this->isHTML($text) && $this->Firmendaten("briefhtml")=="1"){ + $texthtml = str_replace("\r\n", "
", $text); + if(!$intern)$this->app->Tpl->Set('TEXT',$texthtml); + } else { + if(!$intern)$this->app->Tpl->Set('TEXT',$text); + } + + return array("betreff"=>$betreff,"text"=>$text); + } + + function GetAnsprechpartner($data) + { + // $data: 'Admin ' + // return id, name, email + + $first = strpos($data, '<'); + $last = strpos($data, '>'); + + $name = trim(substr($data, 0, $first)); + $email = trim(substr($data, $first+1, $last-($first+1))); + + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE email='$mail' LIMIT 1"); + if(!(is_numeric($id) && $id<1)) + $id = $this->app->DB->Select("SELECT id FROM adresse WHERE name='$name' LIMIT 1"); + + if(!is_numeric($id)) $id = 0; + + return array('id'=>$id, 'name'=>$name, 'email'=>$email); + } + + + function RemoveReadonly($feld) + { + $this->app->Tpl->Add('JQUERY','$("#'.$feld.'").removeAttr("disabled","disabled");'); + $this->app->Tpl->Add('JQUERY','$("#'.$feld.'").removeAttr("readonly","readonly");'); + $this->app->Tpl->Add('JQUERY','$("#'.$feld.'").css("background-color", "white");'); + } + + + function CommonReadonly() + { + $this->commonreadonly=1; + $this->app->Tpl->Set('COMMONREADONLYINPUT',"readonly disabled style=\"background-color:#eee; border-color:#ddd;\""); + $this->app->Tpl->Set('COMMONREADONLYSELECT',"disabled=\"disabled\" style=\"background-color:#eee;\""); + + } + + + function BriefpapierHintergrundDisable($drucker) + { + $keinhintergrund = $this->app->DB->Select("SELECT keinhintergrund FROM drucker WHERE id='$drucker' LIMIT 1"); + if($keinhintergrund=="1") + $this->app->erp->BriefpapierHintergrunddisable = true; + } + + function BriefpapierHintergrundEnable() + { + $this->app->erp->BriefpapierHintergrunddisable = false; + } + + + function DokumentMask($parsetarget,$typ,$id,$adresse,$projekt="",$popup=false, $intern = false) + { + if(!$intern) + { + $this->app->Tpl->Set('SID',$id); + $this->app->Tpl->Set('TYP',$typ); + + $ansprechpartnerManuell = $this->app->Secure->GetPOST('ansprechpartnermanuellverwenden'); + if($ansprechpartnerManuell == 'on'){ + $ansprechpartner = $this->app->Secure->GetPOST('ansprechpartnermanuell'); + }else{ + $ansprechpartner = $this->app->Secure->GetPOST('ansprechpartner'); + } + + + $betreff = $this->app->Secure->GetPOST("betreff"); + + $projekt_submit = $this->app->Secure->GetPOST("projekt"); + $text = $this->app->Secure->GetPOST("text"); + $art = $this->app->Secure->GetPOST("senden"); + + $tmpcc = $this->app->Secure->GetPOST("cc"); + $tmpbcc = $this->app->Secure->GetPOST("bcc"); + + $vorlage = $this->app->Secure->GetPOST("vorlage"); + if($vorlage!='' && !empty($this->app->User) && method_exists($this->app->User, 'SetParameter')) { + $this->app->User->SetParameter("briefpapier_vorlage",$vorlage); + } + }else{ + $betreff = isset($intern["betreff"])?$intern["betreff"]:''; + $projekt_submit = isset($intern["projekt"])?$intern["projekt"]:$projekt; + $ansprechpartner = isset($intern["ansprechpartner"])?$intern["ansprechpartner"]:$this->app->DB->Select("SELECT concat(if(ansprechpartner <> '',ansprechpartner,name),'<',email,'>') FROM $typ WHERE id = '$id' LIMIT 1"); + $text = isset($intern["text"])?$intern["text"]:''; + $art = isset($intern["senden"])?$intern["senden"]:''; + $tmpcc = isset($intern["cc"])?$intern["cc"]:''; + $tmpbcc = isset($intern["bcc"])?$intern["bcc"]:''; + + $vorlage = isset($intern["vorlage"])?$intern["vorlage"]:''; + if($vorlage!='' && !empty($this->app->User) && method_exists($this->app->User, 'SetParameter')) { + $this->app->User->SetParameter("briefpapier_vorlage",$vorlage); + } + } + $ansprechpartner = str_replace('<','<',$ansprechpartner); + $ansprechpartner = str_replace('>','>',$ansprechpartner); + list($name, $email) = explode('<', trim($ansprechpartner,'>')); + + $betreff = str_replace('\"','"',$betreff); + $betreff = str_replace("\'","'",$betreff); + + + $partnerinfo['email'] = $email; + $partnerinfo['name'] = $name; + + if(!$intern && $this->app->Secure->GetPOST('ansprechpartnermanuellverwenden')=='on'){ + $partnerinfo['email'] = $this->app->Secure->GetPOST("ansprechpartnermanuell"); + $partnerinfo['name'] = ''; + } + + + if($projekt=="" && $projekt_submit!="") + $projekt = $projekt_submit; + + if($projekt=="") + $projekt = $this->app->DB->Select("SELECT projekt FROM $typ WHERE id='$id' LIMIT 1"); //04.07.2018 von Bruno hinzugefuegt + // hole standard projekt von adresse + if($projekt=="") + $projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + + + if($typ!="brieffax") + $projektbriefpapier = $this->app->DB->Select("SELECT projekt FROM $typ WHERE id='$id' LIMIT 1"); + +// START SCHLEIFE + if(!$intern) + { + $tmpsenden = $this->app->Secure->GetPOST("senden"); + }else{ + $tmpsenden = isset($intern['senden'])?$intern['senden']:null; + } + + if(!$intern && $tmpsenden && !empty($this->app->User) && method_exists($this->app->User, 'SetParameter')) { + $this->app->User->SetParameter("dokumente_abschickenmask_".$typ."_brief","0"); + $this->app->User->SetParameter("dokumente_abschickenmask_".$typ."_email","0"); + $this->app->User->SetParameter("dokumente_abschickenmask_".$typ."_sonstiges","0"); + $this->app->User->SetParameter("dokumente_abschickenmask_".$typ."_telefon","0"); + $this->app->User->SetParameter("dokumente_abschickenmask_".$typ."_fax","0"); + } + + for($tmpis=0;$tmpisapp->User) && method_exists($this->app->User, 'SetParameter')){ + $this->app->User->SetParameter('dokumente_abschickenmask_' . $typ . '_' . $art, '1'); + } + + + if($art == "brief") $drucker = $this->app->Secure->GetPOST("drucker_brief"); + else if($art == "fax") $drucker = $this->app->Secure->GetPOST("drucker_fax"); + else if ($art == "email") $drucker = $this->app->Secure->GetPOST("email_from"); + // Hintergrund ausschalten wenn drucker es erfordert + $this->BriefpapierHintergrundDisable($drucker); + if($art === 'email' || (!$intern && $this->app->Secure->GetPOST('sammelpdf'))) { + if($intern) + { + if(isset($intern['dateianhaenge']) && $intern['dateianhaenge'] && is_array($intern['dateianhaenge'])) + { + foreach($intern['dateianhaenge'] as $pk => $pv) + { + if(is_numeric($pv)) + { + $dateiname = str_replace(' ','_',$this->app->erp->GetDateiName($pv)); + }else { + $dateiname = $pv; + if(!file_exists($dateiname))$dateiname = ''; + } + + if($dateiname != '') + { + if(is_numeric($pv)) { + $dateiinhalt = $this->app->erp->GetDatei($pv); + if($handle = fopen (rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname, "wb")) + { + fwrite($handle, $dateiinhalt); + fclose($handle); + $_dateien[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname; + $dateisort = $pk; + if($dateisort)$dateiensort[$dateisort] = count($_dateien)-1; + $zuloeschen[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname; + } + }else{ + $_dateien[] = $dateiname; + $dateisort = $pk; + if($dateisort)$dateiensort[$dateisort] = count($_dateien)-1; + $zuloeschen[] = $dateiname; + } + } + } + } + }else{ + /*if($this->app->Secure->GetPOST('sammelpdf')) + $_dateien = array($tmpfile);*/ + foreach($_POST as $pk => $pv) + { + $pka = explode('_',$pk); + if($pka[0] == 'datei' && isset($pka[1]) && $pka[1] && is_numeric($pka[1])){ + $dateiname = str_replace(' ','_',$this->app->erp->GetDateiName($pka[1])); + if($dateiname) + { + if($this->app->DB->Select("SELECT id FROM datei_stichwoerter WHERE datei=".$pka[1]." AND subjekt='Deckblatt' AND objekt='auftrag' AND parameter='$id'") && $this->app->Secure->GetPOST('sammelpdf')){ + //Datei ist ein Deckblatt, vermerken + $deckblatt=true; + }else{ + $dateiinhalt = $this->app->erp->GetDatei($pka[1]); + + if($handle = fopen (rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname, "wb")) + { + fwrite($handle, $dateiinhalt); + fclose($handle); + $_dateien[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname; + $dateisort = (int)$this->app->Secure->GetPOST('dateisort_'.$pka[1]); + if($dateisort)$dateiensort[$dateisort] = count($_dateien)-1; + $zuloeschen[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname; + } + } + } + } + } + if($this->app->Secure->GetPOST('sammelpdf') && isset($dateiensort)) + { + foreach($dateiensort as $k => $v) + { + if(file_exists($_dateien[$v])) + { + $contenttyp = mime_content_type($_dateien[$v]); + if($contenttyp == 'application/pdf') + { + $sammelpdf[] = file_get_contents($_dateien[$v]); + unset($_dateien[$v]); + } + } + } + } + } + } + // eigentliches dokument + if($typ=="bestellung") + { + // sende + if($this->Firmendaten('hintergrund') == 'kein'){ + $this->app->erp->BriefpapierHintergrunddisable = false; + } + else{ + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + } + if(class_exists('BestellungPDFCustom')) + { + $Brief = new BestellungPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new BestellungPDF($this->app,$projektbriefpapier); + } + $Brief->GetBestellung($id); + + if(isset($sammelpdf)) + { + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + } + + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('BestellungPDFCustom')) + { + $Brief = new BestellungPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new BestellungPDF($this->app,$projektbriefpapier); + } + $Brief->GetBestellung($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + if(isset($sammelpdf)) + { + unlink($tmpfile); + if(class_exists('BestellungPDFCustom')) + { + $Brief = new BestellungPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new BestellungPDF($this->app,$projektbriefpapier); + } + $Brief->GetBestellung($id); + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + $tmpfile = $Brief->displayTMP(); + } + } + // eigentliches dokument + if($typ=="angebot") + { + // sende + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('AngebotPDFCustom')) + { + $Brief = new AngebotPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new AngebotPDF($this->app,$projektbriefpapier); + } + $Brief->GetAngebot($id); + + if(isset($sammelpdf)) + { + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + } + + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('AngebotPDFCustom')) + { + $Brief = new AngebotPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new AngebotPDF($this->app,$projektbriefpapier); + } + $Brief->GetAngebot($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + if(isset($sammelpdf)) + { + unlink($tmpfile); + if(class_exists('AngebotPDFCustom')) + { + $Brief = new AngebotPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new AngebotPDF($this->app,$projektbriefpapier); + } + $Brief->GetAngebot($id); + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + $tmpfile = $Brief->displayTMP(); + } + } + // eigentliches dokument + if($typ=="lieferschein") + { + // sende + if($this->Firmendaten('hintergrund') == 'kein'){ + $this->app->erp->BriefpapierHintergrunddisable = false; + } + else{ + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + } + + if(class_exists('LieferscheinPDFCustom')) + { + $Brief = new LieferscheinPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new LieferscheinPDF($this->app,$projektbriefpapier); + } + $Brief->GetLieferschein($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('LieferscheinPDFCustom')) + { + $Brief = new LieferscheinPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new LieferscheinPDF($this->app,$projektbriefpapier); + } + $Brief->GetLieferschein($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + } + if($typ=="retoure") + { + // sende + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('RetourePDFCustom')) + { + $Brief = new RetourePDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new RetourePDF($this->app,$projektbriefpapier); + } + $Brief->GetRetoure($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('RetourePDFCustom')) + { + $Brief = new RetourePDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new RetourePDF($this->app,$projektbriefpapier); + } + $Brief->GetRetoure($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + } + // eigentliches dokument + if($typ=="arbeitsnachweis") + { + // sende + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('ArbeitsnachweisPDFCustom')) + { + $Brief = new ArbeitsnachweisPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new ArbeitsnachweisPDF($this->app,$projektbriefpapier); + } + $Brief->GetArbeitsnachweis($id); + + if(isset($sammelpdf)) + { + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + } + + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('ArbeitsnachweisPDFCustom')) + { + $Brief = new ArbeitsnachweisPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new ArbeitsnachweisPDF($this->app,$projektbriefpapier); + } + $Brief->GetArbeitsnachweis($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + + if(isset($sammelpdf)) + { + unlink($tmpfile); + if(class_exists('ArbeitsnachweisPDFCustom')) + { + $Brief = new ArbeitsnachweisPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new ArbeitsnachweisPDF($this->app,$projektbriefpapier); + } + $Brief->GetArbeitsnachweis($id); + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + $tmpfile = $Brief->displayTMP(); + } + } + // eigentliches dokument + if($typ=="reisekosten") + { + // sende + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('ReisekostenPDFCustom')) + { + $Brief = new ReisekostenPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new ReisekostenPDF($this->app,$projektbriefpapier); + } + $Brief->GetReisekosten($id); + + if(isset($sammelpdf)) + { + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + } + + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('ReisekostenPDFCustom')) + { + $Brief = new ReisekostenPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new ReisekostenPDF($this->app,$projektbriefpapier); + } + $Brief->GetReisekosten($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + if(isset($sammelpdf)) + { + unlink($tmpfile); + if(class_exists('ReisekostenPDFCustom')) + { + $Brief = new ReisekostenPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new ReisekostenPDF($this->app,$projektbriefpapier); + } + $Brief->GetReisekosten($id); + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + $tmpfile = $Brief->displayTMP(); + } + + + } + + // eigentliches dokument + if($typ=="auftrag") + { + // sende + if(class_exists('AuftragPDFCustom')) + { + $Brief = new AuftragPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new AuftragPDF($this->app,$projektbriefpapier); + } + $Brief->GetAuftrag($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + if(isset($sammelpdf)) + { + unlink($tmpfile); + if(class_exists('AuftragPDFCustom')) + { + $Brief = new AuftragPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new AuftragPDF($this->app,$projektbriefpapier); + } + $Brief->GetAuftrag($id); + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + if($deckblatt){ + $containerpdf = new Fpdi('P','mm','A4'); + foreach($_POST as $pk => $pv){ + $pka = explode('_',$pk); + if($pka[0] == 'datei' && isset($pka[1]) && $pka[1] && is_numeric($pka[1])){ + $dateiname = str_replace(' ','_',$this->app->erp->GetDateiName($pka[1])); + if($dateiname){ + $deckblattdatei = $this->app->DB->Select("SELECT datei FROM datei_stichwoerter WHERE datei=".$pka[1]." AND subjekt='Deckblatt' AND objekt='auftrag' AND parameter='$id'"); + if($deckblattdatei){ + //Zuerst alle Deckblätter der Reihe nach zum PDF Dokument hinzufügen + $deckblattdateitmp = $this->app->erp->GetUSERDATA()."/dms/".$this->app->Conf->WFdbname."/".$deckblattdatei; + $pages_count = $containerpdf->setSourceFile($deckblattdateitmp); + for($j = 1; $j <= $pages_count; $j++) + { + $containerpdf->AddPage(); + $tplIdx = $containerpdf->importPage($j); + $containerpdf->useTemplate($tplIdx, 0, 0); + } + } + } + } + } + + //Anschließend das eigentliche SammelPDF zum PDF mit den Deckblättern hinzufügen + $pages_count = $containerpdf->setSourceFile($Brief->displayTMP()); + for($j = 1; $j <= $pages_count; $j++) + { + $containerpdf->AddPage(); + $tplIdx = $containerpdf->importPage($j); + $containerpdf->useTemplate($tplIdx, 0, 0); + } + $containerpdf->Output($this->app->erp->GetTMP().$this->app->erp->Dateinamen($Brief->filename),'F'); + $tmpfile = $this->app->erp->GetTMP().$this->app->erp->Dateinamen($Brief->filename); + }else{ + $tmpfile = $Brief->displayTMP(); + } + } + } + // eigentliches dokument + if($typ=="rechnung") + { + // sende + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new RechnungPDF($this->app,$projektbriefpapier); + } + $Brief->GetRechnung($id); + + if(isset($sammelpdf)) + { + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + } + + //$Brief->ArchiviereDocument(); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new RechnungPDF($this->app,$projektbriefpapier); + } + $Brief->GetRechnung($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + if(isset($sammelpdf)) + { + unlink($tmpfile); + if(class_exists('RechnungPDFCustom')) + { + $Brief = new RechnungPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new RechnungPDF($this->app,$projektbriefpapier); + } + $Brief->GetRechnung($id); + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + $tmpfile = $Brief->displayTMP(); + } + + //$Brief->ArchiviereDocument(); + + } + + // eigentliches dokument + if($typ=="gutschrift") + { + // sende + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('GutschriftPDFCustom')) + { + $Brief = new GutschriftPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new GutschriftPDF($this->app,$projektbriefpapier); + } + $Brief->GetGutschrift($id); + + if(isset($sammelpdf)) + { + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + } + + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('GutschriftPDFCustom')) + { + $Brief = new GutschriftPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new GutschriftPDF($this->app,$projektbriefpapier); + } + $Brief->GetGutschrift($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + if(isset($sammelpdf)) + { + unlink($tmpfile); + if(class_exists('GutschriftPDFCustom')) + { + $Brief = new GutschriftPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new GutschriftPDF($this->app,$projektbriefpapier); + } + $Brief->GetGutschrift($id); + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + $tmpfile = $Brief->displayTMP(); + } + } + + // eigentliches dokument + if($typ=="anfrage") + { + // sende + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('AnfragePDFCustom')) + { + $Brief = new AnfragePDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new AnfragePDF($this->app,$projektbriefpapier); + } + $Brief->GetAnfrage($id); + + if(isset($sammelpdf)) + { + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + } + + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('AnfragePDFCustom')) + { + $Brief = new AnfragePDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new AnfragePDF($this->app,$projektbriefpapier); + } + $Brief->GetAnfrage($id); + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + if(isset($sammelpdf)) + { + unlink($tmpfile); + if(class_exists('AnfragePDFCustom')) + { + $Brief = new AnfragePDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new AnfragePDF($this->app,$projektbriefpapier); + } + $Brief->GetAnfrage($id); + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + $tmpfile = $Brief->displayTMP(); + } + } + + // eigentliches dokument + if($typ=="preisanfrage") + { + // sende + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('PreisanfragePDFCustom')) + { + $Brief = new PreisanfragePDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new PreisanfragePDF($this->app,$projektbriefpapier); + } + $Brief->GetPreisanfrage($id); + + if(isset($sammelpdf)) + { + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + } + + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('PreisanfragePDFCustom')) + { + $Brief = new PreisanfragePDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new PreisanfragePDF($this->app,$projektbriefpapier); + } + $Brief->GetPreisanfrage($id); + + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + if(isset($sammelpdf)) + { + unlink($tmpfile); + if(class_exists('PreisanfragePDFCustom')) + { + $Brief = new PreisanfragePDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new PreisanfragePDF($this->app,$projektbriefpapier); + } + $Brief->GetPreisanfrage($id); + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + $tmpfile = $Brief->displayTMP(); + } + } + + + + + // eigentliches dokument + if($typ=="produktion") + { + // sende + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('ProduktionPDFCustom')) + { + $Brief = new ProduktionPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new ProduktionPDF($this->app,$projektbriefpapier); + } + $Brief->GetProduktion($id); + + if(isset($sammelpdf)) + { + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + } + + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('ProduktionPDFCustom')) + { + $Brief = new ProduktionPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new ProduktionPDF($this->app,$projektbriefpapier); + } + $Brief->GetProduktion($id); + + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + if(isset($sammelpdf)) + { + unlink($tmpfile); + if(class_exists('ProduktionPDFCustom')) + { + $Brief = new ProduktionPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new ProduktionPDF($this->app,$projektbriefpapier); + } + $Brief->GetProduktion($id); + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + $tmpfile = $Brief->displayTMP(); + } + } + + + // eigentliches dokument + if($typ=="proformarechnung") + { + // sende + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('ProformarechnungPDFCustom')) + { + $Brief = new ProformarechnungPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new ProformarechnungPDF($this->app,$projektbriefpapier); + } + $Brief->GetProformarechnung($id); + + if(isset($sammelpdf)) + { + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + } + + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + unlink($tmpfile); + $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable; + if(class_exists('ProformarechnungPDFCustom')) + { + $Brief = new ProformarechnungPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new ProformarechnungPDF($this->app,$projektbriefpapier); + } + $Brief->GetProformarechnung($id); + + $tmpfile = $Brief->displayTMP(); + $Brief->ArchiviereDocument(true); + if(isset($sammelpdf)) + { + unlink($tmpfile); + if(class_exists('ProformarechnungPDFCustom')) + { + $Brief = new ProformarechnungPDFCustom($this->app,$projektbriefpapier); + }else{ + $Brief = new ProformarechnungPDF($this->app,$projektbriefpapier); + } + $Brief->GetProformarechnung($id); + foreach($sammelpdf as $dat) + { + $Brief->AddPDF($dat); + } + $tmpfile = $Brief->displayTMP(); + } + } + + if($typ!="") + { + if($typ=="brieffax") + $dateien = array($tmpbrief); + else + { + $this->RunHook('DokumentMask', 5, $typ, $id, $tmpfile, $sammelpdf, $art); + if(is_array($tmpfile)) + { + if(isset($tmpbrief) && $tmpbrief) + { + $dateien = array($tmpbrief); + foreach($tmpfile as $v)$dateien[] = $v; + }else{ + $dateien = $tmpfile; + } + }else{ + $dateien = array($tmpbrief,$tmpfile); + } + if(isset($_dateien))foreach ($_dateien as $dat)if($dat)$dateien[] = $dat; + } + } + + if($intern || $this->app->Secure->GetPOST('submit')!='') { + //echo "SENDEN"; + if($art=="fax"){ + $ret = $this->DokumentSend($adresse, $typ, $id, $art, $betreff, $text, $dateien, $drucker, $ansprechpartner, $projekt, $this->app->Secure->GetPOST("faxnummer"), ""); + }else{ + $weitereadressids = ''; + if($typ == 'preisanfrage'){ + $weitereadressids = $this->app->Secure->GetPOST('pran_adressids'); + if($weitereadressids != '' && $adresse > 0){ + $adresse .= ';'.$weitereadressids; + $this->app->erp->RunHook('preisanfrage_mails_abschicken', 13, $adresse, $typ, $id, $art, $betreff, $text, $dateien, $drucker, $ansprechpartner, $projekt, $partnerinfo['email'], $tmpcc, $tmpbcc); + }elseif($weitereadressids == ''){ + $ret = $this->DokumentSend($adresse, $typ, $id, $art, $betreff, $text, $dateien, $drucker, $ansprechpartner, $projekt, $partnerinfo['email'], $partnerinfo['name'], $tmpcc, $tmpbcc); + } + }else{ + $ret = $this->DokumentSend($adresse, $typ, $id, $art, $betreff, $text, $dateien, $drucker, $ansprechpartner, $projekt, $partnerinfo['email'], $partnerinfo['name'], $tmpcc, $tmpbcc); + } + } + if($tmpis == 0)$this->RunHook('dokumentsend_email',6, $typ, $id,$betreff,$text,$dateien, $intern); + if(isset($zuloeschen) && is_array($zuloeschen)) + { + foreach($zuloeschen as $zl)unlink($zl); + unset($zuloeschen); + } + + $this->BriefpapierHintergrundEnable(); + + /* + // NEU ANLEGEN ODER UPDATE + if($typ=="brieffax") + { + $check = $this->app->DB->Select("SELECT id FROM dokumente_send WHERE text='$text' AND betreff='$betreff' AND geloescht=0 AND versendet=0 ORDER by id DESC LIMIT 1"); + } else { + $check = $this->app->DB->Select("SELECT id FROM dokumente_send WHERE dokument='$typ' AND parameter='$id' AND geloescht=0 AND versendet=0 ORDER by id DESC LIMIT 1"); // GEHT bei BE RE LS + } + */ + + //Datei anlegen + + if($this->Firmendaten("belegeinanhang")=="1") { + $fileid = $this->CreateDateiWithStichwort($Brief->filename,$module,"","",$tmpfile,$this->app->User->GetName() ,$typ,$typ,$id, "",false); + /*$fileid = $this->CreateDatei($Brief->filename,$module,"","",$tmpfile,$this->app->User->GetName()); + + $this->AddDateiStichwort($fileid,$typ,$typ,$id,$without_log=false);*/ + } + + if(is_numeric($check) && $check >0) + { + /* + if($typ=="brieffax") + { + // das dokument gibt es so bereits 1:1 hier braucht man nichts machen + //echo "DAS DOKUMENT GIBT ES UNVERSENDET SO"; + $this->app->DB->Update("UPDATE dokumente_send SET versendet=1 WHERE id='$check' LIMIT 1"); + } + else + { + $this->app->DB->Update("UPDATE dokumente_send SET betreff='$betreff', text='$text',versendet=1 WHERE dokument='$typ' AND parameter='$id' AND geloescht=0 AND versendet=0 LIMIT 1"); // GEHT bei RE, LS .. + } + */ + } else { + if($typ=="brieffax") + { + $this->app->DB->Insert("INSERT INTO dokumente_send + (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet,dateiid) VALUES ('','$typ',NOW(),'".$this->app->User->GetName()."', + '$adresse','$parameter','$art','$betreff','$text','$projekt','$ansprechpartner',1,'$fileid')"); + $tmpid = $this->app->DB->GetInsertID(); + $this->app->DB->Update("UPDATE dokumente_send SET parameter='$tmpid' WHERE id='$tmpid' LIMIT 1"); + //echo "INSERT brieffax dokument"; + } else { + //echo "anlegen begleitschreiben RE, LS"; + //TODO ANSPRECHPARTNER + if($weitereadressids == ''){ + $this->app->DB->Insert("INSERT INTO dokumente_send + (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet,dateiid) VALUES ('','$typ',NOW(),'".$this->app->User->GetName()."', + '$adresse','$id','$art','$betreff','$text','$projekt','$ansprechpartner',1,'$fileid')"); + $tmpid = $this->app->DB->GetInsertID(); + } + } + + } + + if($ret == "") + { + if(!$intern)$this->app->Tpl->Set($parsetarget,"
Dokument wurde erfolgreich versendet
"); + + /* Status gezielt von Dokument aendern */ + if($typ=="bestellung") + { + $this->app->DB->Update("UPDATE bestellung SET versendet=1, versendet_am=NOW(), + versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE bestellung SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + $this->BestellungProtokoll($id,"Bestellung versendet"); + //TODO ARCHIVIEREN + } + else if($typ=="angebot") + { + $this->app->DB->Update("UPDATE angebot SET versendet=1, versendet_am=NOW(), + versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE angebot SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + $this->AngebotProtokoll($id,"Angebot versendet"); + //TODO ARCHIVIEREN + } + else if($typ=="lieferschein") + { + $this->app->DB->Update("UPDATE lieferschein SET versendet=1, versendet_am=NOW(), + versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE lieferschein SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + $this->LieferscheinProtokoll($id,"Lieferschein versendet"); + //TODO ARCHIVIEREN + } + else if($typ=="retoure") + { + $this->app->DB->Update("UPDATE retoure SET versendet=1, versendet_am=NOW(), + versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE retoure SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + $this->RetoureProtokoll($id,"Retoure versendet"); + //TODO ARCHIVIEREN + } + else if($typ=="arbeitsnachweis") + { + $this->app->DB->Update("UPDATE arbeitsnachweis SET versendet=1, versendet_am=NOW(), + versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE arbeitsnachweis SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + $this->ArbeitsnachweisProtokoll($id,"Arbeitsnachweis versendet"); + //TODO ARCHIVIEREN + } + else if($typ=="reisekosten") + { + $this->app->DB->Update("UPDATE reisekosten SET versendet=1, versendet_am=NOW(), + versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE reisekosten SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + $this->ReisekostenProtokoll($id,"Reisekosten versendet"); + //TODO ARCHIVIEREN + } + + else if($typ=="auftrag") + { + $this->app->DB->Update("UPDATE auftrag SET versendet=1, versendet_am=NOW(), + versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); + //$this->app->DB->Update("UPDATE auftrag SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + $this->AuftragProtokoll($id,"Auftrag versendet"); + //TODO ARCHIVIEREN + } + else if ($typ=="rechnung") + { + $this->app->DB->Update("UPDATE rechnung SET versendet=1, versendet_am=NOW(), + versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->closeInvoice($id,'freigegeben'); + $this->app->DB->Update("UPDATE rechnung SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + $this->RechnungProtokoll($id,"Rechnung versendet"); + //TODO ARCHIVIEREN + } + else if ($typ=="gutschrift") + { + $this->app->DB->Update("UPDATE gutschrift SET versendet=1, versendet_am=NOW(), + versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE gutschrift SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + $this->GutschriftProtokoll($id,"Gutschrift versendet"); + //TODO ARCHIVIEREN + } + else if ($typ=="proformarechnung") + { + $this->app->DB->Update("UPDATE proformarechnung SET versendet=1, versendet_am=NOW(), + versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE proformarechnung SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + $this->ProformarechnungProtokoll($id,"Proformarechnung versendet"); + //TODO ARCHIVIEREN + } + else if ($typ=="preisanfrage") + { + $this->app->DB->Update("UPDATE preisanfrage SET versendet=1, versendet_am=NOW(), + versendet_per='$art',versendet_durch='".$this->app->User->GetName()."',schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE preisanfrage SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + $this->PreisanfrageProtokoll($id,"Preisanfrage versendet"); + //TODO ARCHIVIEREN + }else if ($typ=="spedition") + { + $this->app->DB->Update("UPDATE spedition SET versendet=1, schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE spedition SET status='versendet' WHERE id='$id' AND status='freigegeben' LIMIT 1"); + $this->app->DB->Insert("INSERT INTO spedition_protokoll (bearbeiter, grund, avi) VALUES ('".$this->app->DB->real_escape_string($this->app->User->GetName())."', 'Spedition versendet', '$id')"); + } + + $this->RunHook('DokumentMaskVersendet', 2, $typ, $id); + } + else { + $this->BelegProtokoll($typ,$id,$ret); + if(!$intern)$this->app->Tpl->Set($parsetarget,"
$ret
"); + } + } elseif ($this->app->Secure->GetPOST("speichern")!="") { + //echo "SPEICHERN"; + // Nur speichern + $action = $this->app->Secure->GetGET("action"); + $module = $this->app->Secure->GetGET("module"); + + if($module=="adresse") + { + $check = $this->app->DB->Select("SELECT id FROM dokumente_send WHERE dokument='brieffax' AND geloescht=0 AND versendet=0 ORDER by id DESC LIMIT 1"); + } else { + $check = $this->app->DB->Select("SELECT id FROM dokumente_send WHERE dokument='$typ' AND parameter='$id' AND geloescht=0 AND versendet=0 ORDER by id DESC LIMIT 1"); // GEHT bei BE RE LS + } + + if($module=="adresse") + { + $typ="brieffax"; + if(is_numeric($check)) + { + $this->app->DB->Insert("UPDATE dokumente_send SET betreff='$betreff',text='$text',bearbeiter='".$this->app->User->GetName()."' WHERE id='$check' LIMIT 1"); + $this->app->Tpl->Set('MESSAGE',"
Die Änderungen wurden gespeichert.
"); + } else { + $this->app->DB->Insert("INSERT INTO dokumente_send + (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet) VALUES ('','$typ',NOW(),'".$this->app->User->GetName()."', + '$adresse','$parameter','$art','$betreff','$text','$projekt','$ansprechpartner',0)"); + $this->app->Tpl->Set('MESSAGE',"
Es wurde ein neues Dokument wurde angelegt, da das alte Dokument bereits versendet worden ist.
"); + } + } else { + + if(is_numeric($check)) + { + $this->app->DB->Update("UPDATE dokumente_send SET betreff='$betreff',text='$text',bearbeiter='".$this->app->User->GetName()."' WHERE id='$check' LIMIT 1"); + $this->app->Tpl->Set('MESSAGE',"
Die Änderungen wurden gespeichert.
"); + } else { + $parameter = $this->app->Secure->GetGET("id"); + $this->app->DB->Insert("INSERT INTO dokumente_send + (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,versendet) VALUES ('','$typ',NOW(),'".$this->app->User->GetName()."', + '$adresse','$parameter','$art','$betreff','$text','$projekt','$ansprechpartner',0)"); + $this->app->Tpl->Set('MESSAGE',"
Es wurde ein neues Dokument wurde angelegt, da das alte Dokument bereits versendet worden ist.
"); + } + } + + }elseif($this->app->Secure->GetPOST("download")!="") { + header("Location: index.php?module=adresse&action=briefpdf&sid=$id&id=$adresse"); + exit; + } + } +// ENDE SCHLEIFE + if(!$intern) + { + $tmp_fax = $this->app->DB->Select("SELECT telefax FROM $typ WHERE id='$id' LIMIT 1"); + $tmp_fax = str_replace('+','00',$tmp_fax); + $n = preg_match_all("/[0-9]/", $tmp_fax, $treffer); + for($i=0;$i<$n;$i++){ + $nummer = $nummer . $treffer[0][$i]; + if($n%2 == 1 && $i%2 == 0 && $i < $n-1){ + $nummer = $nummer . ""; + }elseif($n%2 == 0 && $i%2 == 1 && $i < $n-1){ + $nummer = $nummer . ""; + } + } + $this->app->Tpl->Set('FAXNUMMER',$nummer); + if(!empty($this->app->User) && method_exists($this->app->User, 'GetParameter')){ + if($this->app->User->GetParameter('dokumente_abschickenmask_' . $typ . "_brief") == '1'){ + $this->app->Tpl->Set("BRIEFCHECKED", 'checked'); + } + + if($this->app->User->GetParameter('dokumente_abschickenmask_' . $typ . "_email") == '1') { + $this->app->Tpl->Set("EMAILCHECKED", 'checked'); + } + if($this->app->User->GetParameter('dokumente_abschickenmask_' . $typ . "_fax") == '1') { + $this->app->Tpl->Set("FAXCHECKED", 'checked'); + } + if($this->app->User->GetParameter('dokumente_abschickenmask_' . $typ . "_telefon") == '1') { + $this->app->Tpl->Set("TELEFONCHECKED", 'checked'); + } + if($this->app->User->GetParameter('dokumente_abschickenmask_' . $typ . "_sonstiges") == '1') { + $this->app->Tpl->Set("SONSTIGESCHECKED", 'checked'); + } + + $selected = $this->app->User->GetParameter('drucker_dokumentmask_' . $typ); + $this->app->Tpl->Set('DRUCKER', $this->GetSelectDrucker($selected)); + } + $this->app->Tpl->Set('FAX',$this->GetSelectFax()); + $this->app->Tpl->Set('EMAILEMPFAENGER',$this->GetSelectEmail()); + $projektabkuerzung = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$projekt'"); + $this->app->Tpl->Set('PROJEKT',$projektabkuerzung); + //$this->app->Tpl->Set(PROJEKT,$this->GetProjektSelect($projekt)); + // $this->app->Tpl->Set(ANSPRECHPARTNER,$this->GetSelectAnsprechpartner($adresse,$projekt)); + $tmp_mail = $this->app->DB->Select("SELECT email FROM $typ WHERE id='$id' LIMIT 1"); + $tmp_name = $this->app->DB->Select("SELECT ansprechpartner FROM $typ WHERE id='$id' LIMIT 1"); + if($tmp_name=="") + $tmp_name = $this->app->DB->Select("SELECT name FROM $typ WHERE id='$id' LIMIT 1"); + + //$this->app->Tpl->Set(ANSPRECHPARTNER,$tmp_name." <".$tmp_mail.">"); + + + $this->app->Tpl->Set('ANSPRECHPARTNER',$this->GetAdresseMail($adresse,$id,$typ)); + $this->app->Tpl->Set('SELECTUNSICHTBAR', ''); + $this->app->Tpl->Set('MANUELLUNSICHTBAR', 'display:none;'); + + + //$this->app->YUI->AutoComplete('ansprechpartner', 'emailname'); + $this->app->YUI->AutoComplete('projekt', 'projektname',1); + + $projekt = $this->app->DB->Select("SELECT projekt FROM $typ WHERE id='$id' LIMIT 1"); + $this->DokumentSendShow($parsetarget,$typ,$id,$adresse,$tmpfile,$popup,$projekt); + } + // temp datei wieder loeschen + if(@is_file($tmpfile))unlink($tmpfile); + if(@is_file($tmpbrief))unlink($tmpbrief); + } + + function GetAdresseMail($adresse,$id="",$tabelle="") { + // hole adresse aus feld ansprechpartner + + $tmp_mail = $this->app->DB->Select("SELECT email FROM $tabelle WHERE id='$id' LIMIT 1"); + $tmp_name = $this->app->DB->Select("SELECT ansprechpartner FROM $tabelle WHERE id='$id' LIMIT 1"); + + if($tmp_name=="") + $tmp_name = $this->app->DB->Select("SELECT name FROM $tabelle WHERE id='$id' LIMIT 1"); + + $data[0]['name']=$tmp_name; + $data[0]['email']=$tmp_mail; + + // doppelte eintraege loeschen + + if($data[0]['email']==$tmp_mail) + { + $result = ""; + } + else + $result = ""; + + $data = $this->app->DB->SelectArr("SELECT name, email FROM adresse WHERE id='$adresse' ORDER by name"); + $data2 = $this->app->DB->SelectArr("SELECT name, email FROM ansprechpartner WHERE adresse='$adresse' ORDER by name"); + + foreach($data2 as $item) + { + $check=false; + foreach($data as $check_item) + { + if($item['name']==$check_item['name'] && $item['email']==$check_item['email']) + $check=true; + } + + if($check!=true) + $data[]=array('name'=>$item['name'],'email'=>$item['email']); + } + + for($i=0;$i{$data[$i]['name']} <{$data[$i]['email']}>"; + else + $result .= ""; + } + } + return $result; + } + + + function DokumentSendShow($parsetarget,$dokument,$id,$adresse,$attachments="",$popup=false,$projekt="", $intern = false) + { + $return = null; + + $this->BriefpapierHintergrunddisable = false; + $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + $name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + $name2 = $this->app->DB->Select("SELECT name FROM $dokument WHERE id='$id' LIMIT 1"); + + + $abperfax = $this->app->DB->Select("SELECT abperfax FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + if($abperfax=="1") $this->app->Tpl->Set('ABPERFAX',"checked"); + + $testdata = null;//@todo check query $this->app->DB->SelectArr("SELECT betreff WHERE dokument='".$dokument."' AND parameter='$id' AND parameter!=0 ORDER BY zeit DESC LIMIT 1"); + + if($sprache=="") $sprache="deutsch"; + + + + switch($dokument) + { + case "bestellung": + if($tmp_data[0]['betreff']!="") + $this->DokumentSendVorlage($id); + else + { + $return = $this->Geschaeftsbriefvorlage($sprache,"Bestellung",$projekt,$name2,$id, $intern); + if(!$intern) + { + $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); + }else{ + $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); + } + } + break; + case "angebot": + $return = $this->Geschaeftsbriefvorlage($sprache,"Angebot",$projekt,$name2,$id, $intern); + if(!$intern) + { + $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); + }else{ + $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); + } + break; + case "lieferschein": + $return = $this->Geschaeftsbriefvorlage($sprache,"Lieferschein",$projekt,$name2,$id, $intern); + if(!$intern) + { + $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); + }else{ + $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); + } + break; + case "retoure": + $return = $this->Geschaeftsbriefvorlage($sprache,"Retoure",$projekt,$name2,$id, $intern); + if(!$intern) + { + $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); + }else{ + $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); + } + break; + case "rechnung": + $return = $this->Geschaeftsbriefvorlage($sprache,"Rechnung",$projekt,$name2,$id, $intern); + if(!$intern) + { + $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); + }else{ + $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); + } + break; + case "gutschrift": + $return = $this->Geschaeftsbriefvorlage($sprache,"Gutschrift",$projekt,$name2,$id, $intern); + if(!$intern) + { + $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); + }else{ + $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); + } + break; + + case "auftrag": + $return = $this->Geschaeftsbriefvorlage($sprache,"Auftrag",$projekt,$name2,$id, $intern); + if(!$intern) + { + $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); + }else{ + $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); + } + break; + case "arbeitsnachweis": + $return = $this->Geschaeftsbriefvorlage($sprache,"Auftrag",$projekt,$name2,$id, $intern); + if(!$intern) + { + $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); + }else{ + $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); + } + break; + + case "proformarechnung": + $return = $this->Geschaeftsbriefvorlage($sprache,"Proformarechnung",$projekt,$name2,$id, $intern); + if(!$intern) + { + $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); + }else{ + $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); + } + break; + case "preisanfrage": + $return = $this->Geschaeftsbriefvorlage($sprache,"Preisanfrage",$projekt,$name2,$id, $intern); + if(!$intern) + { + $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); + }else{ + $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); + } + break; + case "produktion": + $return = $this->Geschaeftsbriefvorlage($sprache,"Produktion",$projekt,$name2,$id, $intern); + if(!$intern) + { + $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); + }else{ + $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); + } + break; + + + case "brieffax": + if($testdata!="") + $this->DokumentSendVorlage($id); + else + { + $return = $this->Geschaeftsbriefvorlage($sprache,"Korrespondenz",$projekt,$name2, $intern); + if(!$intern) + { + $this->app->Tpl->Add('TEXT',"\n\n".$this->Grussformel($projekt,$sprache)); + }else{ + $return['text'] .= "\n\n".$this->Grussformel($projekt,$sprache); + } + } + break; + + default: ; + } + + if(!$intern && !empty($this->app->User) && method_exists($this->app->User, 'GetParameter') && + $this->app->User->GetParameter('dokument_absenden_alleartikel')=='1') + { + $tabelle = strtolower($dokument); + $dateianhaenge = $this->app->DB->SelectArr("SELECT DISTINCT ds.id, ds.datei, d.titel,ds.subjekt, ds.objekt, ds.sort FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id where d.geloescht <> 1 AND (ds.parameter = '$id' AND ds.objekt like '$dokument') OR ((ds.parameter IN (SELECT DISTINCT artikel FROM ".$tabelle."_position WHERE ".$tabelle."='$id') ) AND ds.objekt like 'artikel') ORDER BY ds.objekt like '$dokument' DESC, ds.sort"); + } else { + $dateianhaenge = $this->app->DB->SelectArr("SELECT DISTINCT ds.id, ds.datei, d.titel,ds.subjekt, ds.objekt, ds.sort FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id where d.geloescht <> 1 AND ds.parameter = '$id' AND ds.objekt like '$dokument' AND ds.subjekt!='$dokument' ORDER BY ds.sort"); + if($intern)$intern['dateianhaenge'] = $dateianhaenge; + } + if($intern)return $return; + if($dateianhaenge) + { + $sort = 0; + foreach($dateianhaenge as $dk => $dv) + { + $sort++; + if(strtolower($dv['objekt']) == strtolower($dokument)) + { + if($dv['sort'] != $sort)$this->app->DB->Update("UPDATE datei_stichwoerter SET sort = '$sort' WHERE id = '".$dv['id']."' LIMIT 1"); + $dateianhaenge[$dk]['sort'] = $sort; + } + } + foreach($dateianhaenge as $dk => $dv) + { + if(strtolower($dv['subjekt'])=="anhang") $checked="checked"; else $checked=""; + $dateiname = $this->GetDateiName($dv['datei']); + + if($this->app->User->GetParameter("dokument_absenden_sammelpdf")=="1" && strtolower($dv['objekt']) == strtolower($dokument)) + { + $extraspalte = ""; + } else $extraspalte=" "; + + $this->app->Tpl->Add('DATEIANHAENGE',''.$dateiname.''.$extraspalte.''); + + } + } else { + $this->app->Tpl->Add('DATEIANHAENGE','Keine Anhänge vorhanden.
Dateien können unter dem Reiter "Dateien"
als Anhang dem Dokument
angehängt werden.
'); + } + + $module = $this->app->Secure->GetGET("module"); + $id = $this->app->Secure->GetGET("id"); + + if($module=="adresse") + { + //echo "Fall 1"; + // genau das eine dokument + $tmp = $this->app->DB->SelectArr("SELECT DATE_FORMAT(zeit,'%d.%m.%Y %H:%i') as datum, dateiid, text, betreff, ansprechpartner, id, adresse, bearbeiter,art, dokument, parameter, versendet FROM dokumente_send WHERE dokument='".$dokument."' + AND id='$id' AND parameter!=0 AND versendet=1 ORDER by zeit DESC"); + //echo ("SELECT DATE_FORMAT(zeit,'%d.%m.%Y %H:%i') as zeit, text, betreff, id, adresse, bearbeiter,art, dokument, parameter, versendet FROM dokumente_send WHERE dokument='".$dokument."' + // AND id='$id' parameter!=0 AND versendet=1 ORDER by zeit"); + + } + else + { + // alle passenden dokumente + $tmp = $this->app->DB->SelectArr("SELECT DATE_FORMAT(zeit,'%d.%m.%Y %H:%i') as datum, text, dateiid, ansprechpartner, betreff, id, adresse, versendet, parameter, dokument, bearbeiter,art FROM dokumente_send WHERE dokument='".$dokument."' AND parameter='$id' AND parameter!=0 ORDER by zeit DESC"); + //echo "Fall 2"; + + } + + if(count($tmp)>0) + { + $this->app->Tpl->Set('HISTORIE',""); + $this->app->Tpl->Add('HISTORIE'," + + "); + for($i=0;$iapp->DB->Select("SELECT name FROM adresse WHERE id='{$tmp[$i]['adresse']}' AND geloescht=0 LIMIT 1"); + if(is_numeric($tmp[$i]['ansprechpartner'])) + $tmp_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='".$tmp[$i]['ansprechpartner']."'"); + else + $tmp_name = htmlentities($tmp[$i]['ansprechpartner'],ENT_QUOTES, "UTF-8"); + + //$tmp_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='{$tmp[$i]['adresse']}' AND geloescht=0 LIMIT 1"); + + if($tmp[$i]['dateiid'] > 0) $tmppdf = ''; + else $tmppdf=""; + + $this->app->Tpl->Add('HISTORIE',' + + + + + '); + } + $this->app->Tpl->Add('HISTORIE',"
ZeitAnVonArtAnschreibenDokument
'.$tmp[$i]['datum'].''.$tmp_name.''.$tmp[$i]['bearbeiter'].''.ucfirst($tmp[$i]['art']).''.$tmppdf.'
"); + + } else { $this->app->Tpl->Set('HISTORIE',"
Dieses Dokument wurde noch nicht versendet!
"); } + + + for($i=0;$iapp->Tpl->Add('ANHAENGE',"".basename($attachments)." "); + } + if(count($attachments)==0) $this->app->Tpl->Add('ANHAENGE',"keine Anhänge vorhanden"); + + if(count($tmp)>0) + { + $tmp[0]['betreff'] = str_replace('{FIRMA}',$this->Firmendaten("name"),$tmp[0]['betreff']); + $tmp[0]['text'] = str_replace('{FIRMA}',$this->Firmendaten("name"),$tmp[0]['text']); + + $tmp[0]['betreff'] = $this->ParseUserVars($dokument,$id, $tmp[0]['betreff']); + $tmp[0]['text'] = $this->ParseUserVars($dokument,$id, $tmp[0]['text']); + + if($tmp[0]['betreff']!="") + $this->app->Tpl->Set('BETREFF',$tmp[0]['betreff']); + if($tmp[0]['text']!="") + $this->app->Tpl->Set('TEXT',$tmp[0]['text']); + } + + + $tmp = new EasyTable($this->app); + if($dokument == 'spedition'){ + $tmp->Query("SELECT zeit,bearbeiter,grund FROM ".$dokument."_protokoll WHERE avi='$id' ORDER by zeit DESC"); + }else{ + $tmp->Query("SELECT zeit,bearbeiter,grund FROM ".$dokument."_protokoll WHERE $dokument='$id' ORDER by zeit DESC"); + } + $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction"); + + $this->app->YUI->AutoSaveUserParameter("alleartikel","dokument_absenden_alleartikel","window.location.href='index.php?module=$dokument&action=abschicken&id=$id';"); + if(!empty($this->app->User) && method_exists($this->app->User, 'GetParameter') && $this->app->User->GetParameter("dokument_absenden_alleartikel")=="1") + { + $this->app->Tpl->Set("ALLEARTIKEL","checked"); + } + + $this->app->YUI->AutoSaveUserParameter("sammelpdf","dokument_absenden_sammelpdf","window.location.href='index.php?module=$dokument&action=abschicken&id=$id';"); + if(!empty($this->app->User) && method_exists($this->app->User, 'GetParameter') && $this->app->User->GetParameter("dokument_absenden_sammelpdf")=="1") + { + $this->app->Tpl->Set("SAMMELPDF","checked"); + } + + + + $this->app->YUI->CkEditor("text","internal",array("height"=>"450")); + if(is_file('pages/content/dokument_absenden_vorlage.tpl')) + { + $this->app->Tpl->Set('EMPFAENGER',$name); + $pTemplate = (($popup==true) ? 'dokument_absenden_popup.tpl' : 'dokument_absenden_vorlage.tpl'); + $this->app->Tpl->Parse($parsetarget, $pTemplate); + } else { + $this->app->Tpl->Set('EMPFAENGER',$name); + $pTemplate = (($popup==true) ? 'dokument_absenden_popup.tpl' : 'dokument_absenden.tpl'); + if($popup != true) + { + $this->app->Tpl->Add('EMAILHOOK', ''); + $this->RunHook('dokument_absenden_email', 2, $dokument, $id); + } + $this->app->Tpl->Parse($parsetarget, $pTemplate); + } + } + + //art=email,betreff,text,dateien, email_to, email_name_to + function DokumentSend($adresse,$dokument, $parameter, $art,$betreff,$text,$dateien,$drucker="",$ansprechpartner="",$projekt="",$email_to="", $email_name_to="",$cc="",$bcc="") + { + + // $ret muss geleert werden wenn Dokument erfolgreich versendet wurde!! + $ret = "Das Dokument konnte nicht versendet werden! (Bitte wählen Sie eine Versandoption aus um das Dokument zu versenden)"; + + //$text = $this->ParseUserVars($dokument,$parameter,$text); + //$betreff = $this->ParseUserVars($dokument,$parameter,$betreff); + + + if($dokument!="" && $drucker!="") + $this->app->User->SetParameter("drucker_dokumentmask_".$dokument,$drucker); + + + switch($art) + { + case "email": // signatur + dokument als anhang + $ret = ""; + if($email_to!='') { + $to = $email_to; + $to_name = $email_name_to; + }else{ + if($ansprechpartner!=0) + { + $to = $this->app->DB->Select("SELECT email FROM ansprechpartner WHERE id='$ansprechpartner' LIMIT 1"); + $to_name = $this->app->DB->Select("SELECT name FROM ansprechpartner WHERE id='$ansprechpartner' LIMIT 1"); + } else + { + $to = $this->app->DB->Select("SELECT email FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + $to_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + } + } + // wenn emailadresse from email from user name von benutzer sonst firmenname + if($drucker==$this->app->User->GetEmail()) + $from_name = $this->app->User->GetName(); + else { + $from_name = $this->app->DB->Select("SELECT absendername FROM firmendaten WHERE absendername!='' AND email!='' AND email='$drucker' LIMIT 1"); + + if($from_name=="") + $from_name = $this->app->DB->Select("SELECT smtp_fromname FROM emailbackup WHERE smtp_fromname!='' AND smtp_frommail!='' AND smtp_frommail='$drucker' AND geloescht!=1 LIMIT 1"); + } + + if($from_name=="") + $from_name=$this->GetFirmaAbsender(); + + if($drucker=="") + $drucker=$this->GetFirmaMail(); + + + if($dokument=="auftrag") + { + $abweichendeemailab = $this->app->DB->Select("SELECT abweichendeemailab FROM adresse WHERE id='$adresse' AND geloescht!=1 LIMIT 1"); + if($abweichendeemailab!="") $to = $abweichendeemailab; + } + $cc_empfaengerausadresse = $this->app->DB->Select("SELECT ".$dokument."_cc FROM adresse WHERE id='$adresse' AND geloescht!=1 LIMIT 1"); + + $cc_empfaenger = []; + $bcc_empfaenger = []; + + if(!empty($cc_empfaengerausadresse)){ + $cc_empfaenger = explode(',',$cc_empfaengerausadresse); + } + + $text = str_replace('\"','"',$text); + + if($cc!="") { + if (strpos($cc, ',') !== false) { + $tmpcc = explode(',',$cc); + $cc_empfaenger = array_merge($cc_empfaenger, $tmpcc); + } else + $cc_empfaenger[] = trim($cc); + } + if($bcc!="") { + if (strpos($bcc, ',') !== false) { + $tmpbcc = explode(',',$bcc); + $bcc_empfaenger = array_merge($bcc_empfaenger, $tmpbcc); + } else + $bcc_empfaenger[] = trim($bcc); + } + + foreach($cc_empfaenger as $index => $empfaenger){ + $cc_empfaenger[$index] = trim(trim($empfaenger,'>'),'<'); + } + foreach($bcc_empfaenger as $index => $empfaenger){ + $bcc_empfaenger[$index] = trim(trim($empfaenger,'>'),'<'); + } + + if($this->MailSend($drucker,$from_name,$to,$to_name,$betreff,$text,$dateien,$projekt,true,$cc_empfaenger,$bcc_empfaenger)){ + $ret = ""; + $this->RunHook('documentsend_email_success', 8, $dokument, $parameter, $drucker, $to, $to_name, $betreff, $text, $dateien); + } + else { + if($to=="") + $ret = "Keine Empfängeradresse gefunden. E-Mail konnte nicht versendet werden."; + else + $ret = "Die E-Mail konnte nicht versendet werden! (".$this->mail_error.")"; + } + + break; + + case "brief": + foreach($dateien as $key=>$value) + $this->app->printer->Drucken($drucker,$value); + $ret = ""; + break; + + case "fax": + foreach($dateien as $key=>$value) + $this->app->printer->Drucken($drucker,$value,$email_to); + $ret = ""; + break; + + case "telefon": + $ret = ""; + break; + case "sonstiges": + $ret = ""; + break; + + } + + $this->app->erp->RunHook('dokumentsend_ende', 5, $dokument, $parameter, $projekt, $adresse, $art); + + return $ret; + } + + + function NewEvent($beschreibung, $kategorie, $objekt='',$parameter='') + { + + $bearbeiter = $this->app->User->GetName(); + + $this->app->DB->Insert("INSERT INTO event (id,beschreibung,kategorie,zeit,objekt,parameter,bearbeiter) + VALUES('','$beschreibung','$kategorie',NOW(),'$objekt','$parameter','$bearbeiter')"); + + } + + function UpdateChecksumShopartikel($projekt) + { + $tmp = $this->app->DB->SelectArr("SELECT id FROM artikel WHERE shop > 0"); + if(empty($tmp)) { + return; + } + foreach($tmp as $row) { + $this->UpdateArtikelChecksum($row['id'], $projekt); + } + } + + function UpdateArtikelChecksum($artikel,$projekt) + { + $tmp = $this->app->DB->SelectArr("SELECT typ, + nummer, projekt, inaktiv, warengruppe, name_de, name_en, kurztext_de, ausverkauft, + kurztext_en , beschreibung_de, beschreibung_en,standardbild, herstellerlink, hersteller, uebersicht_de,uebersicht_en,links_de,links_en, startseite_de, startseite_en, + lieferzeit , lieferzeitmanuell, wichtig, gewicht, sperrgrund, gueltigbis,umsatzsteuer, klasse, adresse, shop, firma, neu,topseller,startseite, + (SELECT MAX(preis) FROM verkaufspreise WHERE + artikel='$artikel' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND ab_menge = 1 AND (adresse='0' OR adresse='')) as preis + FROM artikel WHERE id='$artikel' LIMIT 1"); + + // artikel='$artikel' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND ab_menge = 1 AND (objekt='Standard' OR objekt='')) as preis + serialize($tmp); + + $checksum = md5(serialize($tmp)); + + $this->app->DB->Update("UPDATE artikel SET checksum='$checksum' WHERE id='$artikel' LIMIT 1"); + } + + function GetStandardMarge() + { + return $this->Firmendaten("standardmarge"); + } + + + function GetStandardStundensatz() + { + return 57.62; + } + + /** @deprecated */ + function GetProjektSelectMitarbeiter($adresse) + { + // Adresse ist Mitglied von Projekt xx + // gibt man kein parameter an soll alles zurueck + // entsprechen weitere parameter filtern die ausgabe + $arr = $this->app->DB->SelectArr("SELECT adresse FROM bla bla where rolle=mitarbeiter von projekt xxx"); + foreach($arr as $value) + { + if($selected==$value) $tmp = "selected"; else $tmp=""; + $ret .= ""; + } + return $ret; + + + } + + function GetArtikelPreisvorlageProjekt($kunde,$projekt,$artikel,$menge) + { + //HACK! + return $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE projekt='$projekt' AND artikel='$artikel'"); + } + + // do not use this function! + function GetAuftragSteuersatz($auftrag) + { + //ermitteln aus Land und UST-ID Prüfung + return 1.19; + } + + function GetSteuersatzAssoc($id,$typ) + { + $steuersatzErmaessigt = $this->GetSteuersatzErmaessigt(false,$id,$typ); + $steuersatzNormal = $this->GetSteuersatzNormal(false,$id,$typ); + + return [ + 0=>'0 %', + $steuersatzErmaessigt=>$steuersatzErmaessigt.' %', + $steuersatzNormal=>$steuersatzNormal.' %' + ]; + } + + function GetSteuersatz($id,$typ) + { + + $tmp[] = 0; + $tmp[] = $this->GetSteuersatzErmaessigt(false,$id,$typ); + $tmp[] = $this->GetSteuersatzNormal(false,$id,$typ); + + return $tmp; + } + + function GetSelectSteuersatz($selected,$id,$typ) + { + $tmp = $this->GetSteuersatz($id,$typ); + $ret = ''; + foreach($tmp as $key=>$value) + { + $tmp = ''; + if($selected==$value) { + $tmp = 'selected'; + } + $ret .= ""; + } + return $ret; + } + + + function GetSteuersatzNormal($komma, $id, $typ) + { + $steuersatz = 0; + if($typ==='provisionsgutschrift'){ + $steuersatz = $this->app->DB->Select("SELECT steuersatz FROM mlm_abrechnung_adresse WHERE id='$id' LIMIT 1"); + } + elseif($typ !== 'lieferschein'){ + $steuersatz = $this->app->DB->Select("SELECT steuersatz_normal FROM $typ WHERE id='$id' LIMIT 1"); + } + + if($komma){ + return ($steuersatz / 100.0) + 1.0; //1.19 + } + + return $steuersatz; + } + + function GetSteuersatzErmaessigt($komma, $id, $typ) + { + $steuersatz = 0; + if($typ !== 'lieferschein'){ + $steuersatz = $this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $typ WHERE id='$id' LIMIT 1"); + } + + if($komma){ + return ($steuersatz / 100.0) + 1.0; //1.19 + } + + return $steuersatz; + } + + function GetSteuersatzBefreit($komma, $id, $typ) + { + if($komma){ + return 1.00; + } + + return 0.00; + } + + + function GetKreditkarten() + { + + return array('MasterCard','Visa','American Express'); + } + + function GetKreditkartenSelect($selected) + { + $ret = ''; + foreach($this->GetKreditkarten() as $value) + { + $tmp = ''; + if($selected==$value) { + $tmp = 'selected'; + } + $ret .= ""; + } + return $ret; + } + + + function GetKundeSteuersatz($kunde) + { + + + } + + function AddUSTIDPruefungKunde($kunde) + { + //gebunden an eine adresse + + + } + + function GetVersandkosten($projekt) + { + + return 3.32; + } + + + + function AuftraegeBerechnen() + { + $this->app->erp->SetKonfigurationValue('last_order_calc',date('d.m.Y H:i:s')); + $this->app->DB->Delete("DELETE r FROM lager_reserviert r LEFT JOIN auftrag a ON r.objekt = 'auftrag' AND r.parameter = a.id AND a.status = 'freigegeben' WHERE r.objekt = 'auftrag' AND isnull(a.id)"); + if(!empty($this->app->User) && method_exists($this->app->User, 'GetID') && $this->app->User->GetID()) + { + $limit = (int)$this->app->erp->Firmendaten('autoversand_maxauftraege'); + }else { + $limit = 0; + } + $auftraege = $this->app->DB->SelectArr("SELECT id FROM auftrag WHERE status='freigegeben' AND inbearbeitung=0 AND autoversand=1 ORDER BY fastlane = 1 DESC, datum ".($limit > 0?" LIMIT $limit ":'')); + if(empty($auftraege)) { + return; + } + foreach($auftraege as $auftrag) { + //$this->app->erp->AuftragNeuberechnen($auftraege[$i][id]); + $this->AuftragEinzelnBerechnen($auftrag['id']); + } + } + + function KalkulationNeuberechnen($id) + { + /** @var Kalkulation $obj */ + $obj = $this->LoadModul('kalkulation'); + if(!empty($obj) && method_exists($obj,'KalkulationNeuberechnen')) + { + $obj->KalkulationNeuberechnen($id); + } + } + + + function AddArtikelAuftrag($artikel,$auftrag,$menge=1) + { + if(!is_numeric($menge)) { + $menge = 1; + } + $articleRow = $this->app->DB->SelectRow("SELECT name_de,anabregs_text FROM artikel WHERE id='$artikel' LIMIT 1"); + $name = $articleRow['name_de']; + $beschreibung = $articleRow['anabregs_text']; + + $this->AddPositionManuell("auftrag",$auftrag, $artikel,$menge,$name,$beschreibung); + } + + function DelArtikelAuftrag($id) + { + //loesche artikel von auftrag und schiebe positionen nach + + + } + + + function GetAuftragStatus($auftrag) + { + + + + } + + + function IsEU($land) + { + foreach($this->GetUSTEU() as $euland) + { + if($land==$euland) + return true; + } + + // alle anderen laender sind export! + return false; + } + + + function Export($land) + { + if($land == '' || $land==$this->Firmendaten('land')){ + return false; + } + + return !$this->IsEU($land); + } + + + function GetEU() + { + return $this->GetUSTEU(false); + } + + function GetUSTEU($ust=false) + { + $isoGreece = 'GR'; + if($ust){ + $isoGreece = 'EL'; + } + + $checklaender = $this->app->DB->Select('SELECT id FROM laender LIMIT 1'); + if($checklaender > 0 ) + { + $laender = $this->app->DB->SelectArr("SELECT iso FROM laender WHERE eu=1 ORDER by iso"); + $ret = null; + foreach($laender as $land) { + if($land['iso'] === 'GR'){ + $ret[] = $isoGreece; + }else{ + $ret[] = $land['iso']; + } + } + return $ret; + } + + return + array('DE','BE','IT','RO', + 'BG','LV','SE', + 'DK','LT','SK', + 'DE','LU','SI', + 'EE','MT','ES', + 'FI','NL','CZ', + 'FR','AT','HU', + $isoGreece,'PL', + 'IE','PT','CY','HR'); + } + + + function CheckUSTFormat($ust) + { + /* + * method not removed for downward compatibility + */ + return USTID::CheckUSTFormat($ust); + } + + + function CheckUst($ust1,$ust2, $firmenname, $ort, $strasse, $plz, $druck="nein") + { + $tmp = new USTID(); + //$status = $tmp->check("DE263136143","SE556459933901","Wind River AB","Kista","Finlandsgatan 52","16493","ja"); + $status = $tmp->check($ust1, $ust2, $firmenname, $ort, $strasse, $plz, $druck,$onlinefehler); + +/* + if($tmp->answer['Erg_Name'] == 'A')$tmp->answer['Erg_Name'] = ''; + if($tmp->answer['Erg_Ort'] == 'A')$tmp->answer['Erg_Ort'] = ''; + if($tmp->answer['Erg_Str'] == 'A')$tmp->answer['Erg_Str'] = ''; + if($tmp->answer['Erg_PLZ'] == 'A')$tmp->answer['Erg_PLZ'] = ''; +*/ + $erg = array( + 'ERG_NAME' => $tmp->answer['Erg_Name'], + 'ERG_ORT' => $tmp->answer['Erg_Ort'], + 'ERG_STR' => $tmp->answer['Erg_Str'], + 'ERG_PLZ' => $tmp->answer['Erg_PLZ'], + 'ERROR_MSG' => $tmp->answer['ErrorMSG'], + 'ERROR_CODE' => $tmp->answer['ErrorCode']); + + return $erg; + } + + + function MailSendNoBCCHTML($from,$from_name,$to,$to_name,$betreff,$text,$files="",$cc="",$bcc="") + { + $from_name = $this->ClearDataBeforeOutput($from_name); + $to_name = $this->ClearDataBeforeOutput($to_name); + //$to = ""; // testmail + $betreff = $this->ReadyForPDF($betreff); + $text = $this->ReadyForPDF($text); + + $this->app->mail->ClearData(); + $countCc = !empty($cc)?count($cc):0; + for($i=0;$i<$countCc;$i++) + { + if($cc[$i]!="" && $cc[$i]!=$to) + $this->app->mail->AddCC($cc[$i]); + } + $countBcc = !empty($bcc)?count($bcc):0; + for($i=0;$i<$countBcc;$i++) + { + if($bcc[$i]!="" && $bcc[$i]!=$to) + $this->app->mail->AddBCC($bcc[$i]); + } + + $this->app->mail->From = $from; + $this->app->mail->FromName = $from_name; + + $this->app->mail->Subject = $betreff; + + if($this->app->Conf->WFtestmode==true){ + $this->app->mail->AddAddress($from, $to_name); + }else{ + $this->app->mail->AddAddress($to, $to_name); + } + + $this->app->mail->Body = utf8_decode(str_replace('\r\n',"\n",$text).nl2br($this->Signatur())); + + $this->app->mail->IsHTML(true); + $cFiles = !empty($files)?count($files):0; + for($i=0;$i<$cFiles;$i++) + { + if(@is_file($files[$i])) + $this->app->mail->AddAttachment($files[$i]); + } + + if(!$this->app->mail->Send()) { + $error = "Mailer Error: " . $this->app->mail->ErrorInfo; + return 0; + } + $error = "Message sent!"; + return 1; + } + + + + function MailSendNoBCC($from,$from_name,$to,$to_name,$betreff,$text,$files="") + { + $from_name = $this->ClearDataBeforeOutput($from_name); + $to_name = $this->ClearDataBeforeOutput($to_name); + $betreff = $this->ReadyForPDF($betreff); + $text = $this->ReadyForPDF($text); + + $this->app->mail->ClearData(); + + $this->app->mail->From = $from; + $this->app->mail->FromName = $from_name; + + $this->app->mail->Subject = $betreff; + if($this->app->mail->Subject=="") $this->app->mail->Subject=$betreff; + + if($this->app->Conf->WFtestmode==true){ + $this->app->mail->AddAddress($from, $to_name); + }else{ + $this->app->mail->AddAddress($to, $to_name); + } + + $this->app->mail->Body = utf8_decode(str_replace('\r\n',"\n",$text).$this->Signatur()); + + + $cFiles = !empty($files)?count($files):0; + for($i=0;$i<$cFiles;$i++) + { + if(@is_file($files[$i])) + $this->app->mail->AddAttachment($files[$i]); + } + if(!$this->app->mail->Send()) { + $error = "Mailer Error: " . $this->app->mail->ErrorInfo; + return 0; + } + $error = "Message sent!"; + return 1; + } + + function MailSend($from,$from_name,$to,$to_name,$betreff,$text,$files="",$projekt="",$signature=true,$cc="",$bcc="", $system = false) + { + $bcc1 = $this->Firmendaten('bcc1'); + $bcc2 = $this->Firmendaten('bcc2'); + + if($bcc1!="") { + $this->MailSendFinal($from,$from_name,$bcc1,"Xentral Kopie 1","KOPIE ".$betreff,$text,$files,$projekt,$signature,'','', $system); + } + if($bcc2!="") $this->MailSendFinal($from,$from_name,$bcc2,"Xentral Kopie 2","KOPIE ".$betreff,$text,$files,$projekt,$signature,'','', $system); + + return $this->MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files,$projekt,$signature,$cc,$bcc, $system); + } + +function MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files="",$projekt="",$signature=true,$cc="",$bcc="", $system = false) +{ + // keine leeren email versenden + if($text=="" && $betreff=="") return; + + $isSystemTemplate = $system && is_file(dirname(__DIR__, 2) .'/classes/Modules/Company/templates/systemmail.tpl'); + if($isSystemTemplate) { + $signature = false; + } + + $from_name = $this->ClearDataBeforeOutput($from_name); + $to_name = $this->ClearDataBeforeOutput($to_name); + $to_name = $this->ReadyForPDF($to_name); + $from_name = $this->ReadyForPDF($from_name); + $this->app->mail->ClearData(); + $ccc = $cc?count($cc):0; + for($i=0;$i<$ccc;$i++) + { + if($cc[$i]!="" && $cc[$i]!=$to) + $this->app->mail->AddCC($cc[$i]); + } + + $cbcc = $bcc?count($bcc):0; + for($i=0;$i<$cbcc;$i++) + { + if($bcc[$i]!="" && $bcc[$i]!=$to) + { + $this->app->mail->AddBCC($bcc[$i]); + } + } + + $bcc3 = $this->Firmendaten('bcc3'); + if($bcc3!="") + { + $this->app->mail->AddBCC($bcc3); + } + + + if($projekt > 0 && $this->Projektdaten($projekt,"absendeadresse")!=""){ + $this->app->mail->From = $this->Projektdaten($projekt, "absendeadresse"); + }else{ + $this->app->mail->From = $from; + } + + if($projekt > 0 && $this->Projektdaten($projekt,"absendename")!=""){ + $this->app->mail->FromName = $this->ReadyForPDF($this->Projektdaten($projekt, "absendename")); + }else{ + $this->app->mail->FromName = $from_name; + } + + $betreff = $this->ReadyForPDF($betreff); + $text = $this->ReadyForPDF($text); + $text = str_replace('€','€',$text); + //$text = htmlentities($text); + + $texthtml = htmlspecialchars_decode( + htmlentities($text, ENT_NOQUOTES, 'UTF-8', false) + , ENT_NOQUOTES + ); + if($texthtml!=$text) + { + $this->app->mail->IsHTML(true); + $text = $texthtml; + } + + $this->app->mail->Subject = $betreff; + + if($this->app->Conf->WFtestmode==true){ + $this->app->mail->AddAddress($from, $to_name); + }else{ + $this->app->mail->AddAddress($to, $to_name); + } + + if($signature) + { + $eigenesignatur = $this->app->DB->Select("SELECT eigenesignatur FROM emailbackup WHERE email='$from' AND email !='' AND geloescht!=1 LIMIT 1"); + //$this->app->erp->LogFile(addslashes("SELECT eigenesignatur FROM emailbackup WHERE email='$from' AND email !='' LIMIT 1")); + if(strlen(trim($this->Signatur($this->app->mail->From))) > 0 && $eigenesignatur == 1) + { + if($this->isHTML($text)) + { + $signaturtext = $this->Signatur($this->app->mail->From); + if($this->isHTML($signaturtext)) + $body = utf8_decode(str_replace('\r\n',"\n",$text))."
".$signaturtext; + else + $body = utf8_decode(str_replace('\r\n',"\n",$text))."
".nl2br($signaturtext); + } + else{ + $body = utf8_decode(str_replace('\r\n',"\n",$text)).$this->Signatur($this->app->mail->From); + } + }else{ + if($projekt > 0 && $this->Projektdaten($projekt,"absendesignatur")!=""){ + if($this->isHTML($text)) + { + $signaturtext = $this->Projektdaten($projekt,"absendesignatur"); + if($this->isHTML($signaturtext)) + $body = utf8_decode(str_replace('\r\n',"\n",$text))."

".$signaturtext; + else + $body = utf8_decode(str_replace('\r\n',"\n",$text))."

".$this->ReadyForPDF(nl2br($signaturtext)); + } else { + $body = utf8_decode(str_replace('\r\n',"\n",$text))."\r\n\r\n".$this->ReadyForPDF($this->Projektdaten($projekt,"absendesignatur")); + } + }else{ + if(strlen(trim($this->Signatur($this->app->mail->From))) > 0 && $eigenesignatur == 0){ + if($this->isHTML($text)) + { + $signaturtext = $this->Signatur($this->app->mail->From); + if($this->isHTML($signaturtext)) + $body = str_replace('\r\n',"\n",$text)."
".$signaturtext; + else + $body = utf8_decode(str_replace('\r\n',"\n",$text))."
".nl2br($signaturtext); + }else{ + $body = utf8_decode(str_replace('\r\n',"\n",$text)).$this->Signatur($this->app->mail->From); + } + }else{ + $body = utf8_decode(str_replace('\r\n',"\n",$text)); + } + } + + } + } else { + $body = utf8_decode(str_replace('\r\n',"\n",$text)); + } + + // wenn html rahmen + if($isSystemTemplate) { + $email_html_template = file_get_contents(dirname(__DIR__, 2) .'/classes/Modules/Company/templates/systemmail.tpl'); + $email_html_template = str_replace( + '{SERVER}', + str_replace('index.php','',$this->app->Location->getServer()), + $email_html_template + ); + } + else{ + $email_html_template = $this->Projektdaten($projekt, "email_html_template"); + if($email_html_template == ""){ + $email_html_template = $this->Firmendaten('email_html_template'); + } + } + if($email_html_template!="" && preg_match("/{CONTENT}/",$email_html_template)) + { + $email_html_template = preg_replace('~\x{00a0}~siu',' ',$email_html_template); + $email_html_template = preg_replace( "#(( |\s|
)+$)#", "", trim($email_html_template) ); + $body = str_replace('{CONTENT}',$body,$email_html_template); + } + + if($this->isHTML($body)) + { + $this->app->mail->IsHTML(true); + $this->app->mail->MsgHTML($body); + } else { + $this->app->mail->Body=$body; + } + + if(is_array($files)) + { + for($i=0;$iapp->mail->AddAttachment($files[$i]); + } + } + $sysMailerSent = false; + $sysMailer = null; + $emailObj = null; + if ($this->app->Container->has('SystemMailer')) { + $sysMailer = $this->app->Container->get('SystemMailer'); + } + + if ($sysMailer !== null) { + $recipients = []; + foreach ($this->app->mail->to as $item) { + $recipients[] = new EmailRecipient($item[0], $item[1]); + } + $ccRecipients = []; + foreach ($this->app->mail->GetCC() as $item) { + $ccRecipients[] = new EmailRecipient($item[0], $item[1]); + } + $bccRecipients = []; + foreach ($this->app->mail->GetBCC() as $item) { + $bccRecipients[] = new EmailRecipient($item[0], $item[1]); + } + $emailObj = $sysMailer->composeEmail( + $recipients, + $this->app->mail->Subject, + $this->app->mail->Body, + $files, + $ccRecipients, + $bccRecipients + ); + $sysMailerSent = $sysMailer->composeAndSendEmail( + $this->app->mail->From, + $this->app->mail->FromName, + $recipients, + $this->app->mail->Subject, + $this->app->mail->Body, + $files, + $ccRecipients, + $bccRecipients + ); + } + if($sysMailerSent === false && !$this->app->mail->Send()) { + $this->app->erp->LogFile("Mailer Error: " . $this->app->mail->ErrorInfo); + $this->MailLogFile(); + $this->mail_error = "Mailer Error: " . $this->app->mail->ErrorInfo; + + if(isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetID')) + { + $this->app->erp->InternesEvent($this->app->User->GetID(),"Fehler bei Mailversand: ".$this->app->mail->ErrorInfo,"alert",1); + } + return 0; + } + // schreiben in post ausgang + $this->MailLogFile(); + $imap_aktiv = $this->app->DB->Select("SELECT imap_sentfolder_aktiv FROM emailbackup WHERE email='".$this->app->mail->From."' AND imap_sentfolder!='' AND geloescht!=1 LIMIT 1"); + if($imap_aktiv=="1" && !preg_match("/Xentral Kopie/",$to_name) && !preg_match("/WaWision Kopie/",$to_name)) + { + $imap_data = $this->app->DB->SelectRow("SELECT * FROM emailbackup WHERE email='".$this->app->mail->From."' AND geloescht!=1 LIMIT 1"); + $imapCopyMessage = $this->app->mail->mailmessage; + if ($sysMailerSent === true && $emailObj !== null) { + /** @var MimeMessageFormatterInterface $formatter */ + $formatter = $this->app->Container->get('MailClientMimeMessageFormatter'); + $imapCopyMessage = $formatter->formatMessage( + $emailObj, + new EmailRecipient($this->app->mail->From, $this->app->mail->FromName) + ); + } + try { + $account = EmailBackupAccount::fromDbState($imap_data); + /** @var MailClientProvider $clientProvider */ + $clientProvider = $this->app->Container->get('MailClientProvider'); + $client = $clientProvider->createMailClientFromAccount($account); + $client->connect(); + $client->appendMessage($imapCopyMessage, $account->getImapOutgoingFolder()); + } catch (Exception $e) {} + + $this->app->erp->LogFile("IMAP Ausgang FROM ".$this->app->mail->From." S $server P $port T $type SP $server_path B ".$imap_data['benutzername']." SF ".$imap_data['imap_sentfolder']); + } + $this->mail_error = ""; + return 1; + } + + + + function MailLogFile() + { + $subject = $this->app->DB->real_escape_string($this->app->mail->Subject); + $body = $this->app->DB->real_escape_string($this->app->mail->Body); + $status = $this->app->DB->real_escape_string($this->app->mail->ErrorInfo); + + if($status!="") { + $status .= " (Host: ".$this->app->mail->Host." User: ".$this->app->mail->Username.") "; + } + + $from = $this->app->DB->real_escape_string($this->app->mail->From); + $to = $this->app->DB->real_escape_string($this->app->mail->to[0][0]); + + $this->app->DB->Insert("INSERT INTO mailausgang (id,`subject`,`body`,`from`,`to`,`status`,zeit) VALUES ('','$subject','$body','$from','$to','$status',NOW())"); + if(method_exists($this->app->mail,'GetCC')){ + $cc = $this->app->mail->GetCC(); + $bcc = $this->app->mail->GetBCC(); + if($cc && count($cc) > 0){ + for ($i=0; $i < count($cc); $i++) { + $this->app->DB->Insert("INSERT INTO mailausgang (id,`subject`,`body`,`from`,`to`,`status`,zeit, art) VALUES ('','$subject','$body','$from','".$cc[$i][0]."','$status',NOW(), '1')"); + } + } + if($bcc && count($bcc) > 0){ + for ($i=0; $i < count($bcc); $i++) { + $this->app->DB->Insert("INSERT INTO mailausgang (id,`subject`,`body`,`from`,`to`,`status`,zeit, art) VALUES ('','$subject','$body','$from','".$bcc[$i][0]."','$status',NOW(), '2')"); + } + } + } + $this->app->DB->Delete("DELETE FROM `mailausgang` WHERE DATE_SUB(CURDATE(), INTERVAL 90 DAY) >= zeit"); + } + + + function isMailAdr($mailadr){ + return preg_match("/^[_a-z0-9!#$%&\\'*+-\/=?^_`.{|}~]+(\.[_a-z0-9!#$%&\'*+-\\/=?^_`.{|}~]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,20})$/i", $mailadr, $treffer)?1:0; + } + + + function BeschriftungSprache($sprache='') + { + $sprache = strtolower(trim($sprache)); + $this->beschriftung_sprache='deutsch'; + } + + function BeschriftungStandardwerte($field,$sprache="deutsch",$getvars=false) + { + $uebersetzung['dokument_rechnung_titel']['deutsch'] = "Rechnung"; + $uebersetzung['dokument_position']['deutsch'] = "Pos"; + $uebersetzung['dokument_anschreiben']['deutsch'] = "Sehr geehrte Damen und Herren"; + $uebersetzung['dokument_artikelnummer']['deutsch'] = "Artikelnr"; + $uebersetzung['dokument_artikel']['deutsch'] = "Artikel"; + $uebersetzung['dokument_lieferdatum']['deutsch'] = "Liefertermin"; + $uebersetzung['dokument_lieferdatumkw']['deutsch'] = "KW"; + $uebersetzung['dokument_artikelnummerkunde']['deutsch'] = "Ihre Artikelnummer"; + $uebersetzung['dokument_menge']['deutsch'] = "Menge"; + $uebersetzung['dokument_gesamt']['deutsch'] = "Gesamt"; + $uebersetzung['dokument_gesamt_total']['deutsch'] = "Gesamt"; + $uebersetzung['dokument_mwst']['deutsch'] = "MwSt."; + $uebersetzung['dokument_zzglmwst']['deutsch'] = "zzgl. MwSt."; + $uebersetzung['dokument_inklmwst']['deutsch'] = "inkl. MwSt."; + $uebersetzung['dokument_gesamtnetto_zzglmwst']['deutsch'] = "Gesamt netto"; + $uebersetzung['dokument_rabatt']['deutsch'] = "Rabatt"; + $uebersetzung['dokument_stueck']['deutsch'] = "Stck"; + $uebersetzung['dokument_einzel']['deutsch'] = "Einzel"; + $uebersetzung['dokument_einheit']['deutsch'] = "Einheit"; + $uebersetzung['dokument_gewicht']['deutsch'] = "Gewicht"; + $uebersetzung['dokument_laenge']['deutsch'] = "Länge"; + $uebersetzung['dokument_breite']['deutsch'] = "Breite"; + $uebersetzung['dokument_hoehe']['deutsch'] = "Höhe"; + $uebersetzung['dokument_optional']['deutsch'] = "Optional: "; + $uebersetzung['dokument_ursprungsregion']['deutsch'] = "Ursprungsregion"; + $uebersetzung['dokument_gewicht']['deutsch'] = "Gewicht"; + $uebersetzung['dokument_gesamtnetto']['deutsch'] = "Gesamt netto"; + $uebersetzung['dokument_seite']['deutsch'] = "Seite"; + $uebersetzung['dokument_seitevon']['deutsch'] = "von"; + $uebersetzung['dokument_datum']['deutsch'] = "Datum"; + $uebersetzung['dokument_angebot_anfrage']['deutsch'] = "Ihre Anfrage"; + $uebersetzung['dokument_angebot']['deutsch'] = "Angebot"; + $uebersetzung['dokument_bestellung']['deutsch'] = "Bestellung"; + $uebersetzung['dokument_bestellung_angebotnummer']['deutsch'] = "Ihr Angebot"; + $uebersetzung['dokument_bestellung_unserekundennummer']['deutsch'] = "Unsere Kunden-Nr."; + $uebersetzung['dokument_bestelldatum']['deutsch'] = "Bestelldatum"; + $uebersetzung['dokument_bestellung_einkauf']['deutsch'] = "Einkauf"; + $uebersetzung['dokument_bestellung_keineartikelnummer']['deutsch'] = "siehe Artikel-Nr."; + $uebersetzung['dokument_lieferdatum_sofort']['deutsch'] = "sofort"; + $uebersetzung['dokument_bestellung_unsereartikelnummer']['deutsch'] = "Unsere Artikel-Nr."; + $uebersetzung['dokument_bestellung_bestellnummer']['deutsch'] = "Best-Nr."; + $uebersetzung['dokument_bestellung_mengeinvpe']['deutsch'] = "Menge in VPE"; + $uebersetzung['dokument_bestellung_bestaetigung']['deutsch'] = "Die Bestellung ist erst nach Eingang einer Bestätigung Ihrerseits gültig. Wird die Bestellung nicht innerhalb einer Woche bestätigt verfällt diese."; + $uebersetzung['dokument_auftrag']['deutsch'] = "Auftrag"; + $uebersetzung['dokument_auftrag_auftragsbestaetigung']['deutsch'] = "Auftragsbestätigung"; + $uebersetzung['dokument_lieferdatum']['deutsch'] = "Lieferdatum"; + $uebersetzung['dokument_lieferschein']['deutsch'] = "Lieferschein"; + $uebersetzung['dokument_retoure']['deutsch'] = "Retoure"; + $uebersetzung['dokument_kommissionierschein']['deutsch'] = "Kommissionierschein"; + $uebersetzung['dokument_ansprechpartner']['deutsch'] = "Ansprechpartner"; + $uebersetzung['dokument_rechnungsdatum']['deutsch'] = "Rechnungsdatum"; + $uebersetzung['dokument_proformarechnungsdatum']['deutsch'] = "Datum"; + $uebersetzung['dokument_auftragsdatum']['deutsch'] = "Auftragsdatum"; + $uebersetzung['dokument_rechnung']['deutsch'] = "Rechnung"; + $uebersetzung['dokument_gutschrift']['deutsch'] = "Gutschrift"; + $uebersetzung['dokument_kalkulation']['deutsch'] = "Kalkulation"; + $uebersetzung['dokument_stueckliste']['deutsch'] = "(Stückliste)"; + $uebersetzung['dokument_proformarechnung']['deutsch'] = "Proformarechnung"; + $uebersetzung['dokument_preisanfrage']['deutsch'] = "Preisanfrage"; + $uebersetzung['dokument_entwurf']['deutsch'] = "Entwurf"; + $uebersetzung['dokument_rechnung_kopie']['deutsch'] = "doppel"; + $uebersetzung['dokument_skonto']['deutsch'] = "Skonto"; + $uebersetzung['dokument_innerhalb']['deutsch'] = "innerhalb"; + $uebersetzung['dokument_tagen']['deutsch'] = "Tagen"; + $uebersetzung['dokument_tagebiszum']['deutsch'] = "Tage bis zum"; + $uebersetzung['dokument_zahlung_per']['deutsch'] = "Bezahlung per"; + $uebersetzung['dokument_offene_lastschriften']['deutsch'] = "Der Betrag wird mit offenen Lastschriften verrechnet."; + $uebersetzung['dokument_auszahlungskonditionen']['deutsch'] = "aus Zahlungskonditionen"; + $uebersetzung['dokument_zahlung_rechnung_anab']['deutsch'] = "Rechnung zahlbar innerhalb von {ZAHLUNGSZIELTAGE} Tagen."; + $uebersetzung['dokument_telefon']['deutsch'] = "Telefon"; + $uebersetzung['dokument_email']['deutsch'] = "E-Mail"; + $uebersetzung['dokument_teillieferung']['deutsch'] = "Teillieferung von Auftrag"; + $uebersetzung['dokument_herstellernummer']['deutsch'] = "Herstellernummer"; + $uebersetzung['dokument_abmessung']['deutsch'] = "Abmessung"; + + $uebersetzung['dokument_zolltarifnummer']['deutsch'] = "Zolltarifnummer"; + $uebersetzung['dokument_ean']['deutsch'] = "EAN"; + $uebersetzung['dokument_mhd']['deutsch'] = "MHD"; + $uebersetzung['dokument_herkunftsland']['deutsch'] = "Herkunftsland"; + $uebersetzung['dokument_charge']['deutsch'] = "Charge"; + $uebersetzung['dokument_seriennummer']['deutsch'] = "S/N"; + $uebersetzung['dokument_ihreartikelnummer']['deutsch'] = "Ihre Artikelnummer"; + $uebersetzung['dokument_projekt']['deutsch'] = "Projekt"; + + $uebersetzung['dokument_skontoanderezahlungsweisen']['deutsch'] = "Skonto {ZAHLUNGSZIELSKONTO} % aus Zahlungskonditionen "; + $uebersetzung['dokument_staffelpreis_von']['deutsch'] = "ab"; + $uebersetzung['dokument_staffelpreis_stueck']['deutsch'] = "St."; + + $uebersetzung['auftrag_bezeichnung_vertrieb']['deutsch'] = "Vertrieb"; + $uebersetzung['auftrag_bezeichnung_bearbeiter']['deutsch'] = "Bearbeiter"; + $uebersetzung['auftrag_bezeichnung_bestellnummer']['deutsch'] = "Ihre Bestellnummer"; + $uebersetzung['beschriftunginternetnummer']['deutsch'] = "Internetnummer"; + $uebersetzung['bezeichnungkundennummer']['deutsch'] = "Kundennummer"; + $uebersetzung['bezeichnungstornorechnung']['deutsch'] = "Stornorechnung"; + $uebersetzung['bezeichnungangebotersatz']['deutsch'] = ""; + $uebersetzung['bezeichnungauftragersatz']['deutsch'] = ""; + $uebersetzung['bezeichnungproformarechnungersatz']['deutsch'] = ""; + $uebersetzung['bezeichnungrechnungersatz']['deutsch'] = ""; + $uebersetzung['bezeichnunglieferscheinersatz']['deutsch'] = ""; + $uebersetzung['bezeichnungbestellungersatz']['deutsch'] = ""; + $uebersetzung['entspricht_rechnungsadresse']['deutsch'] = "entspricht Rechnungsadresse"; + $uebersetzung['entspricht_hauptadresse']['deutsch'] = "entspricht Hauptadresse"; + $uebersetzung['gruppenrechnung_lieferschein_freitext']['deutsch'] = "Lieferschein {BELEGNR} vom {DATUM}"; + $uebersetzung['gruppenrechnung_lieferschein_anzahl']['deutsch'] = "Lieferschein Anzahl: {ANZAHL}"; + + $uebersetzung['proformarechnung_lieferschein_freitext']['deutsch'] = "Lieferschein {BELEGNR} vom {DATUM}"; + $uebersetzung['proformarechnung_lieferschein_anzahl']['deutsch'] = "Lieferschein Anzahl: {ANZAHL}"; + $uebersetzung['proformarechnung_ohnezolltarifnummer']['deutsch'] = "Ohne Zolltarifnummer"; + + + + + $uebersetzung['dokument_zahlungserinnerung']['deutsch'] = "Zahlungserinnerung"; + + $uebersetzung['mahnwesen_betreff']['deutsch'] = "Buchhaltung: Ihre offene Rechnung"; + $uebersetzung['mahnwesen_betreff']['englisch'] = "Accounting: Your outstanding account"; + $uebersetzung['dokument_mahnung1']['deutsch'] = "1. Mahnung"; + $uebersetzung['dokument_mahnung2']['deutsch'] = "2. Mahnung"; + $uebersetzung['dokument_mahnung3']['deutsch'] = "3. Mahnung"; + $uebersetzung['dokument_mahnunginkasso']['deutsch'] = "Inkasso-Mahnung"; + + $uebersetzung['zahlung_proformarechnung_sofort_de']['deutsch'] = "Proformarechnung zahlbar sofort"; + $uebersetzung['zahlung_auftrag_sofort_de']['deutsch'] = "Rechnung zahlbar sofort"; + + for($ifreifeld=1;$ifreifeld<=40;$ifreifeld++) + { + if($this->app->erp->Firmendaten("freifeld".$ifreifeld)!="") + { + $uebersetzung['artikel_freifeld'.$ifreifeld]['deutsch'] = $this->app->erp->Firmendaten("freifeld".$ifreifeld); + $uebersetzung['artikel_freifeld'.$ifreifeld]['englisch'] = $this->app->erp->Firmendaten("freifeld".$ifreifeld); + } + else + { + $uebersetzung['artikel_freifeld'.$ifreifeld]['deutsch'] = "Freifeld ".$ifreifeld; + $uebersetzung['artikel_freifeld'.$ifreifeld]['englisch'] = "Field ".$ifreifeld; + } + } + + + for($ifreifeld=1;$ifreifeld<=20;$ifreifeld++) + { + if($this->app->erp->Firmendaten("projektfreifeld".$ifreifeld)!="") + { + $uebersetzung['projekt_freifeld'.$ifreifeld]['deutsch'] = $this->app->erp->Firmendaten("projektfreifeld".$ifreifeld); + $uebersetzung['projekt_freifeld'.$ifreifeld]['englisch'] = $this->app->erp->Firmendaten("projektfreifeld".$ifreifeld); + } + else + { + $uebersetzung['projekt_freifeld'.$ifreifeld]['deutsch'] = "Freifeld ".$ifreifeld; + $uebersetzung['projekt_freifeld'.$ifreifeld]['englisch'] = "Field ".$ifreifeld; + } + } + + if($this->app->erp->Firmendaten("freitext1inhalt")!="") + { + $uebersetzung['freitext1inhalt']['deutsch'] = $this->app->erp->Firmendaten("freitext1inhalt"); + $uebersetzung['freitext1inhalt']['englisch'] = $this->app->erp->Firmendaten("freitext1inhalt"); + } + else + { + $uebersetzung['freitext1inhalt']['deutsch'] = ''; + $uebersetzung['freitext1inhalt']['englisch'] = ''; + } + if($this->app->erp->Firmendaten("freitext2inhalt")!="") + { + $uebersetzung['freitext2inhalt']['deutsch'] = $this->app->erp->Firmendaten("freitext2inhalt"); + $uebersetzung['freitext2inhalt']['englisch'] = $this->app->erp->Firmendaten("freitext2inhalt"); + } + else + { + $uebersetzung['freitext2inhalt']['deutsch'] = ''; + $uebersetzung['freitext2inhalt']['englisch'] = ''; + } + + + if($getvars) return $uebersetzung; + + + + if(isset($uebersetzung[$field][$sprache])) + return $uebersetzung[$field][$sprache]; + + return ""; + } + + function getUebersetzung($field, $sprache, $id = true) + { + $sprach = strtolower($sprache); + if(empty($this->uebersetzungId)) + { + $arr = $this->app->DB->SelectArr('SELECT id, label, sprache, beschriftung + FROM uebersetzung + WHERE sprache <> "" AND label <> ""'); + if(!empty($arr)) + { + foreach($arr as $row) + { + $this->uebersetzungId[$row['label']][strtolower($row['sprache'])] = $row['id']; + $this->uebersetzungBeschriftung[$row['label']][strtolower($row['sprache'])] = $row['beschriftung']; + } + } + } + + if($id){ + if(!empty($this->uebersetzungId[$field]) && isset($this->uebersetzungId[$field][$sprache])){ + return $this->uebersetzungId[$field][$sprache]; + } + }else{ + if(!empty($this->uebersetzungBeschriftung[$field]) && isset($this->uebersetzungBeschriftung[$field][$sprache])){ + return $this->uebersetzungBeschriftung[$field][$sprache]; + } + } + + return null; + } + + function Beschriftung($field,$sprache='') + { + if($sprache!='') { + $this->BeschriftungSprache($sprache); + } + + if($this->beschriftung_sprache==''){ + $this->beschriftung_sprache = 'deutsch'; + } + + // wenn feld mit artikel_freifeld beginnt dann freifeld draus machen + //$field = str_replace('artikel_freifeld','freifeld',$field); + + // schaue ob es das wort in uebesetzungen gibt + + $check = $this->getUebersetzung($field, $this->beschriftung_sprache); + $uebersetzung = ''; + if($check > 0){ + $uebersetzung = $this->getUebersetzung($field, $this->beschriftung_sprache, false); + } + + if($check > 0 && $uebersetzung!='') + { + // eintrag eindeutig gefunden + return $uebersetzung; + } + // schaueb ob es das wort in firmendaten gibt achtung hier gibtes nur deutsche woerter! + if($this->beschriftung_sprache==='deutsch') + { + $wert = $this->Firmendaten($field); + if($wert!='') { + return $wert; + } + // Gibt es eine Konstante? + return $this->BeschriftungStandardwerte($field,$this->beschriftung_sprache); + } + //gibt es eine Vorlage? + $wert = $this->BeschriftungStandardwerte($field,$this->beschriftung_sprache); + if($wert!='') + { + return $wert; + } + //1. deutsches wort als standard + $wert = $this->BeschriftungDeutschesWort($field); + return $wert; + } + + + + function FirmendatenSet($field,$value) + { + $firmendatenid = $this->app->DB->Select('SELECT MAX(id) FROM firmendaten LIMIT 1'); + $check = $this->app->DB->SelectRow( + sprintf('SELECT id, typ FROM firmendaten_werte WHERE name = \'%s\' LIMIT 1',$field) + ); + if(!empty($check)) + { + if($check['typ'] === 'int' || $check['typ'] === 'tinyint') + { + $this->app->DB->Update("UPDATE firmendaten_werte SET wert = '".(int)$value."' WHERE id = '".$check['id']."'"); + }else{ + $this->app->DB->Update("UPDATE firmendaten_werte SET wert = '".$this->app->DB->real_escape_string($value)."' WHERE id = '".$check['id']."'"); + } + } + $this->app->DB->Update("UPDATE firmendaten SET " . $field . "='$value' WHERE id='" . $firmendatenid . "'"); + $db = $this->app->Conf->WFdbname; + if(!empty($this->firmendaten[$db])) { + $this->firmendaten[$db][$field] = $value; + } + else { + $this->firmendaten = null; + } + } + + function Firmendaten($field,$projekt='', $clearcache = false) + { + if($field === 'mysql55') { + return '1'; + } + if(strpos($field,'next') !== false) + { + $firmendatenid = (int)$this->app->DB->Select('SELECT MAX(id) FROM firmendaten LIMIT 1'); + $firmendaten_value = $this->app->DB->Select( + sprintf( + 'SELECT `%s` FROM firmendaten WHERE id = %d LIMIT 1', + $field, $firmendatenid) + ); + if(!$this->app->DB->error()) { + return $firmendaten_value; + } + $firmendaten_value = $this->app->DB->SelectRow( + sprintf('SELECT id, wert FROM firmendaten_werte WHERE `name` = \'%s\' LIMIT 1', $field) + ); + if(!empty($firmendaten_value)) { + return $firmendaten_value['wert']; + } + return $this->app->DB->Select( + sprintf("SELECT `%s` FROM `firmendaten` WHERE id = %d LIMIT 1",$field, $firmendatenid) + ); + } + $db = $this->app->Conf->WFdbname; + if($clearcache) { + $this->firmendaten = null; + } + if(empty($this->firmendaten[$db])) + { + $firmendatenid = (int)$this->app->DB->Select('SELECT MAX(id) FROM firmendaten LIMIT 1'); + $this->firmendaten[$db] = $this->app->DB->SelectRow( + sprintf('SELECT * FROM firmendaten WHERE id = %d LIMIT 1', $firmendatenid) + ); + $firmendaten_value = $this->app->DB->SelectArr('SELECT id, wert,name,typ FROM firmendaten_werte'); + + if($firmendaten_value) + { + foreach($firmendaten_value as $key => $value) + { + if(!isset($this->firmendaten[$db][$value['name']])) + { + $this->firmendaten[$db][$value['name']] = $value['wert']; + if($value['typ'] === 'int' || $value['typ'] === 'tinyint') { + $this->firmendaten[$db][$value['name']] = (int)$this->firmendaten[$db][$value['name']]; + } + } + } + } + } + $value = null; + if(isset($this->firmendaten[$db][$field])) { + $value = $this->firmendaten[$db][$field]; + } + + // Umstellung 08.01.2015 von DE auf land zursicherheit wenn jemand der Wert DE fehlen sollte. + if($field==='land' && $value=='') { + return 'DE'; + } + if($field==="schriftart" && $value=='') { + return 'Arial'; + } + + return $value; + } + + function TplFirmendaten($field) + { + $ret = $this->Firmendaten($field); + if($ret != "")return $ret; + switch($field) + { + case 'firmenfarbehell': + //return "#42B8C4"; + return '#404040'; + break; + case 'firmenfarbedunkel': + //return "#2F9099"; + return '#2F2F2F'; + break; + case 'firmenfarbeganzdunkel': + return "#018fa3"; + break; + case 'navigationfarbe': + return "#48494b"; + break; + case 'navigationfarbeschrift': + return "#c9c9cb"; + break; + case 'unternavigationfarbe': + return "#d5ecf2"; + break; + case 'unternavigationfarbeschrift': + return $this->TplFirmendaten('firmenfarbeganzdunkel'); + //return "#027d8d"; + break; + case 'firmenfarbe': + return "#48494b"; + break; + case 'tabsnavigationfarbeschrift': + return $this->TplFirmendaten('firmenfarbeganzdunkel'); + //return '#018fa3'; + //return "#26727a"; + break; + case 'tabsnavigationfarbe': + return $this->TplFirmendaten('firmenfarbehell'); + return "#c2e3ea"; + break; + case 'tabsnavigationfarbe2': + return $this->TplFirmendaten('tabsnavigationfarbeschrift'); + break; + case 'navigationfarbe2': + return $this->TplFirmendaten('navigationfarbeschrift'); + break; + case 'navigationfarbeschrift2': + return $this->TplFirmendaten('navigationfarbe'); + break; + } + + + return $ret; +} + +/* +function Firmendaten($field,$projekt="") +{ + $firmendatenid = $this->app->DB->Select("SELECT MAX(id) FROM firmendaten LIMIT 1"); + $value = $this->app->DB->Select("SELECT ".$field." FROM firmendaten WHERE id='".$firmendatenid."' LIMIT 1"); + + // Umstellung 08.01.2015 von DE auf land zursicherheit wenn jemand der Wert DE fehlen sollte. + if($field=="land" && $value=="") $value="DE"; + + return $value; + }*/ + + + function Grusswort($sprache="") + { + //abhaenig von Zeit usw.. passende Grußformel + /* + return "Grüße aus dem sonnigen Ausgburg."; + return "Grüße aus Ausgburg."; + return "Frohe Ostern."; + return "Schöne Feierabend."; + return "Frohe Weihnachten."; + return "Schönes Wochenende."; + */ + if($sprache=="englisch") return "\nKind regards,"; + return "\nMit freundlichen Grüßen"; + + } + + function Grussformel($projekt=0,$sprache="") + { + + if($projekt > 0) + { + $result = $this->app->DB->Select("SELECT absendegrussformel FROM projekt WHERE id='$projekt' LIMIT 1"); + } + + if($result=="") + { + $this->app->erp->BeschriftungSprache($sprache); + + $gruss = $this->app->erp->Beschriftung("mailgrussformel"); + if($gruss!=$this->app->erp->Firmendaten("mailgrussformel")) + { + $result = "

".nl2br($gruss); + } + + if($result=="") + { + $result = $this->app->erp->Firmendaten("mailgrussformel"); + } + } + + //if($sprache=="englisch") $result = "\nKind regards,"; + + $result = str_replace('{MITARBEITER}',$this->app->User->GetName(),$result); + + $data = $this->app->DB->SelectArr("SELECT telefon, telefax,email,mobil FROM adresse WHERE id='".$this->app->User->GetAdresse()."'"); + + $result= str_replace('{MITARBEITER}',$this->app->User->GetName(),$result); + $result = str_replace('{MITARBEITER_TELEFON}',$data[0]['telefon'],$result); + $result = str_replace('{MITARBEITER_TELEFAX}',$data[0]['telefax'],$result); + $result = str_replace('{MITARBEITER_MOBIL}',$data[0]['mobil'],$result); + $result = str_replace('{MITARBEITER_EMAIL}',$data[0]['email'],$result); + + return $result; + //return "\r\n\r\n".$this->ReadyForPDF($signatur); + } + function Signatur($from="",$language="") + { + $signatur = $this->app->DB->Select("SELECT signatur FROM emailbackup WHERE email='$from' AND email!='' AND eigenesignatur=1 AND geloescht!=1 LIMIT 1"); + + if($signatur=="") + { + $firmendatenid = $this->app->DB->Select("SELECT MAX(id) FROM firmendaten LIMIT 1"); + $signatur = base64_decode($this->Beschriftung("signatur",$language)); + } + + $data = $this->app->DB->SelectArr("SELECT telefon, telefax,email,mobil FROM adresse WHERE id='".$this->app->User->GetAdresse()."'"); + + $signatur = str_replace('{MITARBEITER}',$this->app->User->GetName(),$signatur); + $signatur = str_replace('{MITARBEITER_TELEFON}',$data[0]['telefon'],$signatur); + $signatur = str_replace('{MITARBEITER_TELEFAX}',$data[0]['telefax'],$signatur); + $signatur = str_replace('{MITARBEITER_MOBIL}',$data[0]['mobil'],$signatur); + $signatur = str_replace('{MITARBEITER_EMAIL}',$data[0]['email'],$signatur); + + if($this->isHTML($signatur)) return "

".$signatur; + return "\r\n\r\n".$this->ReadyForPDF($signatur); + } + + + function GetQuelleTicket() + { + return array('Telefon','Fax','Brief','Selbstabholer'); + } + + /** @deprecated */ + function GetStatusTicketSelect($status) + { + $stati = array('neu'=>'neu','offen'=>'offen','warten_e'=>'warten auf Intern','warten_kd'=>'warten auf Kunde','klaeren'=>'klären','abgeschlossen'=>'abgeschlossen','spam'=>'Papierkorb'); + + foreach($stati as $key=>$value) + { + if($status==$key) $selected="selected"; else $selected=""; + $ret .=""; + } + return $ret; + } + + /** @depracated */ + function GetPrioTicketSelect($prio) + { + $prios = array('4'=>'niedrig','3'=>'normal','2'=>'hoch'); + + foreach($prios as $key=>$value) + { + if($prio==$key) $selected="selected"; else $selected=""; + $ret .=""; + } + return $ret; + } + + + function GetZeiterfassungArt() + { + return array('arbeit'=>'Arbeit','pause'=>'Pause','urlaub'=>'Urlaub','krankheit'=>'Krankheit','ueberstunden'=>'Freizeitausgleich','feiertag'=>'Feiertag'); + } + + function GetVPE() + { + return array('einzeln'=>'Einzeln','tray'=>'Tray','rolle'=>'Rolle','stueckgut'=>'Stückgut','stange'=>'Stange','palette'=>'Palette'); + } + + function GetUmsatzsteuerklasse() + { + return array('normal'=>'normal','ermaessigt'=>'ermäßgt','befreit'=>'befreit'); + } + + function GetEtikett() + { + $tmp = array('artikel_klein'=>'Artikel klein'); + + $result = $this->app->DB->SelectArr("SELECT * FROM etiketten WHERE (verwendenals='artikel_klein' OR verwendenals='seriennummer') AND ausblenden!=1 ORDER by name"); + if(count($result) > 0) $tmp = array(); + for($i=0;$iLoadModul('waehrungumrechnung'); + if(!empty($obj) && method_exists($obj,'AddWaehrungumrechnung')) + { + return $obj->AddWaehrungumrechnung($waehrung_von, $waehrung_nach, $kurs, $gueltig_bis, $kommentar, $user); + } + } + + function GetWaehrung($onlytable = false) + { + /** @var Waehrungumrechnung $obj */ + $obj = $this->LoadModul('waehrungumrechnung'); + if(!empty($obj) && method_exists($obj,'GetWaehrung')) + { + return $obj->GetWaehrung($onlytable); + } + return array('EUR'=>'EUR','USD'=>'USD','JPY'=>'JPY','BGN'=>'BGN','CZK'=>'CZK','DKK'=>'DKK','GBP'=>'GBP','HUF'=>'HUF','PLN'=>'PLN','RON'=>'RON','SEK'=>'SEK','CHF'=>'CHF','ISK'=>'ISK','NOK'=>'NOK','HRK'=>'HRK','RUB'=>'RUB','TRY'=>'TRY','AUD'=>'AUD','BRL'=>'BRL','CAD'=>'CAD','CNY'=>'CNY','HKD'=>'HKD','IDR'=>'IDR','ILS'=>'ILS','INR'=>'INR','KRW'=>'KRW','MXN'=>'MXN','MYR'=>'MYR','NZD'=>'NZD','PHP'=>'PHP','SGD'=>'SGD','THB'=>'THB','ZAR'=>'ZAR'); + } + + function GetWaehrungUmrechnungskurseTabelle($von = 'EUR') + { + /** @var Waehrungumrechnung $obj */ + $obj = $this->LoadModul('waehrungumrechnung'); + if(!empty($obj) && method_exists($obj,'GetWaehrungUmrechnungskurseTabelle')) + { + return $obj->GetWaehrungUmrechnungskurseTabelle($von); + } + } + + /** + * @param bool $mitstandardlager + * @param bool $forceZwischenlager + * + * @return array + */ + function GetLager($mitstandardlager=false, $forceZwischenlager = false) + { + $tmp = []; + if($forceZwischenlager || $this->Firmendaten('wareneingang_zwischenlager')=='1') { + $tmp['zwischenlager'] = 'Zwischenlager'; + } + if($mitstandardlager) { + $tmp['standardlager'] = 'Standardlager'; + } + + $result = $this->app->DB->SelectArr( + "SELECT lp.id, CONCAT(l.bezeichnung,'->',lp.kurzbezeichnung) as kurzbezeichnung + FROM lager_platz AS lp + INNER JOIN lager AS l ON lp.lager=l.id + WHERE lp.kurzbezeichnung!='' AND lp.geloescht <> 1 AND l.geloescht <> 1 + ORDER BY l.bezeichnung,lp.kurzbezeichnung" + ); + if(empty($result)) { + return $tmp; + } + foreach($result as $row) { + $tmp[$row['id']] = $row['kurzbezeichnung']; + } + + return $tmp; + } + + function GetArtikelart() + { + return array('produkt'=>'Produkt','material'=>'Material','dienstleistung'=>'Dienstleistung','muster'=>'Muster', + 'gebuehr'=>'Gebühr','betriebsstoff'=>'Betriebsstoff','buerobedarf'=>'Bürobedarf', + 'inventar'=>'Inventar','porto'=>'Porto','literatur'=>'Literatur'); + } + + + function StartMessung() + { + $this->start_messung = $this->uniqueTimeStamp(); + } + + function EndeMessung() + { + $this->ende_messung = $this->uniqueTimeStamp(); + } + + function ErgebnisMessung() + { + $differenz = $this->ende_messung-$this->start_messung; + $differenz = $differenz/10; // warum auch immer + $differenz = (int)$differenz; + + echo "Die Ausführung dauerte $differenz ms"; + } + + function uniqueTimeStamp() { + $milliseconds = microtime(); + $timestring = explode(" ", $milliseconds); + $sg = $timestring[1]; + $mlsg = substr($timestring[0], 2, 4); + $timestamp = $sg.$mlsg; + return $timestamp; + } + + /** @deprecated */ + function GetWartezeitTicket($zeit) + { + $timestamp = strToTime($zeit, null); + + + $td = $this->makeDifferenz($timestamp,time()); + return $td['day'][0] . ' ' . $td['day'][1] . ', ' . $td['std'][0] . ' ' . $td['std'][1] . + ', ' . $td['min'][0] . ' ' . $td['min'][1];// . ', ' . $td['sec'][0] . ' ' . $td['sec'][1]; + } + + function makeDifferenz($first, $second){ + + if($first > $second) + $td['dif'][0] = $first - $second; + else + $td['dif'][0] = $second - $first; + + $td['sec'][0] = $td['dif'][0] % 60; // 67 = 7 + + $td['min'][0] = (($td['dif'][0] - $td['sec'][0]) / 60) % 60; + + $td['std'][0] = (((($td['dif'][0] - $td['sec'][0]) /60)- + $td['min'][0]) / 60) % 24; + + $td['day'][0] = floor( ((((($td['dif'][0] - $td['sec'][0]) /60)- + $td['min'][0]) / 60) / 24) ); + + $td = $this->makeString($td); + + return $td; + + } + + + function makeString($td){ + + if ($td['sec'][0] == 1) + $td['sec'][1] = 'Sekunde'; + else + $td['sec'][1] = 'Sekunden'; + + if ($td['min'][0] == 1) + $td['min'][1] = 'Minute'; + else + $td['min'][1] = 'Minuten'; + + if ($td['std'][0] == 1) + $td['std'][1] = 'Stunde'; + else + $td['std'][1] = 'Stunden'; + + if ($td['day'][0] == 1) + $td['day'][1] = 'Tag'; + else + $td['day'][1] = 'Tage'; + + return $td; + } + + + function GetProjektSelect($projekt,$color_selected='') + { + $sql = "SELECT id,name,farbe FROM projekt order by id"; + $tmp = $this->app->DB->SelectArr($sql); + $ctmp = !empty($tmp)?count($tmp):0; + for($i=0;$i<$ctmp;$i++) + { + if($tmp[$i]['farbe']=='') $tmp[$i]['farbe']='white'; + if($projekt==$tmp[$i]['id']){ + $options = (isset($options)?$options:'').""; + $color_selected = $tmp[$i]['farbe']; + } + else{ + $options = (isset($options) ? $options : '') . ""; + } + } + return !empty($options)?$options:''; + } + + /** + * @param int $id + * + * @return string + */ + public function GetAdressName($id) + { + return (String)$this->app->DB->Select( + sprintf('SELECT name FROM adresse WHERE id=%d AND geloescht=0 LIMIT 1', $id) + ); + } + + function GetAdressSubject() + { + return array('Kunde','Lieferant','Mitarbeiter','Mitglied');//'Externer Mitarbeiter','Projektleiter + } + + function GetAdressPraedikat() + { + return array('','von','fuer','ist'); + } + + function GetAdressObjekt() + { + return array('','Projekt'); + } + + + function GetVersandartAuftrag($projekt = 0) + { + $check = $this->app->DB->Select("SELECT COUNT(id) FROM versandarten"); + if($check <=0) + { + + $modul = ""; + + $tmp = array( + 'DHL'=>'DHL','DPD'=>'DPD', + 'express_dpd'=>'Express DPD', + 'export_dpd'=>'Export DPD', + 'gls'=>'GLS', + 'keinversand'=>'Kein Versand', + 'selbstabholer'=>'Selbstabholer', + 'versandunternehmen'=>'Sonstige', + 'spedition'=>'Spedition', + 'Go'=>'GO!', + 'post'=>'Post' + ); + foreach($tmp as $key=>$value) + { + if($key == 'DHL'){$modul='intraship';} + if($key == 'DPD'){$modul='dpdapi';} + if($key == 'express_dpd'){$modul='';} + if($key == 'export_dpd'){$modul='';} + if($key == 'gls'){$modul='glsapi';} + if($key == 'keinversand'){$modul='';} + if($key == 'selbstabholer'){$modul='selbstabholer';} + if($key == 'versandunternehmen'){$modul='';} + if($key == 'spedition'){$modul='';} + if($key == 'Go'){$modul='';} + if($key == 'post'){$modul='post';} + + + $this->app->DB->Insert("INSERT INTO versandarten (id,type,bezeichnung,aktiv,modul) VALUES ('','$key','$value','1','$modul')"); + } + } + + $tmp = $this->app->DB->SelectArr("SELECT type,bezeichnung FROM versandarten WHERE aktiv='1' AND geloescht!='1' AND (projekt = '$projekt' OR projekt = 0) ORDER by bezeichnung"); + if($tmp) + { + for($i=0;$i 0) + { + $result = $this->app->DB->SelectArr("SELECT id,name FROM artikeleigenschaften WHERE projekt='$projekt' AND geloescht!=1 ORDER by name"); + // gibt es keine projekt gruppen dann die ohne projekt verwenden + if(count($result)<=0) + $result = $this->app->DB->SelectArr("SELECT id,name FROM artikeleigenschaften WHERE geloescht!=1 AND projekt <=0 ORDER by name"); + } else + { + $result = $this->app->DB->SelectArr("SELECT id,name FROM artikeleigenschaften WHERE geloescht!=1 AND projekt <=0 ORDER by name"); + } + + if(count($result) > 0) + { + + for($i=0;$i 0) + { + $result = $this->app->DB->SelectArr("SELECT id,bezeichnung FROM artikelkategorien WHERE (projekt='$projekt' OR projekt = 0) AND parent = 0 AND geloescht!=1 ORDER by bezeichnung"); + // gibt es keine projekt gruppen dann die ohne projekt verwenden + if(count($result)<=0) + $result = $this->app->DB->SelectArr("SELECT id,bezeichnung FROM artikelkategorien WHERE geloescht!=1 AND projekt <=0 AND parent = 0 ORDER by bezeichnung"); + } else + { + $result = $this->app->DB->SelectArr("SELECT id,bezeichnung FROM artikelkategorien WHERE geloescht!=1 AND projekt <=0 AND parent = 0 ORDER by bezeichnung"); + } + + if($result && count($result) > 0) + { + + for($i=0;$i"Ware für Verkauf (700000)", + "module"=>"Module / Hardware (600000)", + "produktion"=>"Produktionsmaterial (400000)", + "material"=>"Sonstiges (100000)", + "fremdleistung"=>"Fremdleistung (100000)", + "gebuehr"=>"Gebühr / Miete (100000)"); + } + + + function GetZahlungsstatus() + { + return array('offen','bezahlt'); + } + + /** + * @param null|int $id + * + * @return array + */ + public function GetZahlungsweiseGutschrift($id = null) + { + $zahlungsweise = ''; + $projectId = 0; + $tmp = []; + if($id) { + $returnOrder = $this->app->DB->SelectRow( + sprintf( + 'SELECT `zahlungsweise`, `projekt` FROM `gutschrift` WHERE `id` = %d LIMIT 1', + $id + ) + ); + if(!empty($returnOrder)) { + $projectId = $returnOrder['projekt']; + $zahlungsweise = $returnOrder['zahlungsweise']; + } + } + $extra = $this->app->DB->SelectPairs( + sprintf( + 'SELECT z.`type`, z.`bezeichnung` + FROM `zahlungsweisen` AS `z` + INNER JOIN + ( + SELECT `type`, max(`projekt`) as projekt + FROM `zahlungsweisen` + WHERE `aktiv` = 1 AND `projekt` = 0 OR `projekt` = %d + GROUP BY `type` + ) AS `t` ON z.`type` = t.`type` AND z.`projekt` = t.`projekt`', + $projectId + ) + ); + + + // return array('ueberweisung'=>'Überweisung','bar'=>'Bar','paypal'=>'PayPal'); + + foreach( + [ + 'kreditkarte' => 'Kreditkarte', + 'lastschrift' => 'Verrechnen mit Lastschriften', + 'paypal' => 'Paypal', + 'amazon' => 'Amazon Payments', + 'amazon_bestellung' => 'Amazon Bestellung', + 'secupay' => 'Secupay', + 'sofortueberweisung' => 'Sofortüberweisung', + 'eckarte' => 'EC-Karte', + ] + as $paymentType => $paymentName) { + if(!empty($extra[$paymentType])) { + continue; + } + if($zahlungsweise === $paymentType || $this->Firmendaten('zahlung_'.$paymentType)) { + $tmp[$paymentType] = $paymentName; + } + } + + if(!empty($extra)){ + foreach($extra as $type => $name) { + $tmp[$type] = $name; + } + } + + if($zahlungsweise && empty($tmp[$zahlungsweise])) { + if($zahlungsweise === 'ueberweisung') { + $tmp['ueberweisung'] = 'Überweisung'; + } + else { + $tmp[$zahlungsweise] = ucfirst($zahlungsweise); + } + } + asort($tmp); + + return $tmp; + } + + public function GetZahlungsweise($table = null, $id = null, $projekt = null) + { + $zahlungsweise = ''; + if($projekt === null){ + $projekt = (int)$this->Firmendaten('projekt'); + if(!empty($table) && !empty($id)) + { + $arr = $this->app->DB->SelectRow("SELECT zahlungsweise, projekt FROM $table WHERE id = '$id' LIMIT 1"); + if(!empty($arr)) + { + $zahlungsweise = $arr['zahlungsweise']; + $projekt = (int)$arr['projekt']; + } + } + } + if($this->Firmendaten("zahlung_rechnung") || $zahlungsweise == 'rechnung'){ + $tmp['rechnung'] = "Rechnung"; + } + + if($this->Firmendaten("zahlung_vorkasse") || $zahlungsweise == 'vorkasse'){ + $tmp['vorkasse'] = "Vorkasse"; + } + + if($this->Firmendaten("zahlung_nachnahme") || $zahlungsweise == 'nachnahme'){ + $tmp['nachnahme'] = "Nachnahme"; + } + + if($this->Firmendaten("zahlung_kreditkarte") || $zahlungsweise == 'kreditkarte'){ + $tmp['kreditkarte'] = "Kreditkarte"; + } + + + if($this->Firmendaten("zahlung_eckarte") || $zahlungsweise == 'eckarte'){ + $tmp['eckarte'] = "EC-Karte"; + } + + + if($this->Firmendaten("zahlung_bar") || $zahlungsweise == 'bar'){ + $tmp['bar'] = "Bar"; + } + + if($this->Firmendaten("zahlung_paypal") || $zahlungsweise == 'paypal'){ + $tmp['paypal'] = "Paypal"; + } + + if($this->Firmendaten("zahlung_amazon") || $zahlungsweise == 'amazon'){ + $tmp['amazon'] = "Amazon Payments"; + } + + if($this->Firmendaten("zahlung_amazon_bestellung") || $zahlungsweise == 'amazon_bestellung'){ + $tmp['amazon_bestellung'] = "Amazon Bestellung"; + } + + if($this->Firmendaten("zahlung_secupay") || $zahlungsweise == 'secupay'){ + $tmp['secupay'] = "Secupay"; + } + + if($this->Firmendaten("zahlung_sofortueberweisung") || $zahlungsweise == 'sofortueberweisung'){ + $tmp['sofortueberweisung'] = "Sofortüberweisung"; + } + + if($this->Firmendaten("zahlung_lastschrift") || $zahlungsweise == 'lastschrift'){ + $tmp['lastschrift'] = "Lastschrift"; + } + + if($this->Firmendaten("zahlung_ratenzahlung") || $zahlungsweise == 'ratenzahlung'){ + $tmp['ratenzahlung'] = "Ratenzahlung"; + } + + $extra = $this->app->DB->SelectArr(" + SELECT z.`type`, z.`bezeichnung` + FROM zahlungsweisen z + INNER JOIN + ( + SELECT `type`, max(projekt) as projekt + FROM zahlungsweisen WHERE aktiv=1 AND projekt = 0 OR projekt = $projekt + GROUP BY `type` + ) t ON z.`type` = t.`type` AND z.`projekt` = t.`projekt` + "); + $cextra = !empty($extra)?count($extra):0; + for($i=0;$i<$cextra;$i++) + { + $tmp[$extra[$i]['type']] = $extra[$i]['bezeichnung']; + } + if($zahlungsweise && empty($tmp[$zahlungsweise]))$tmp[$zahlungsweise] = ucfirst($zahlungsweise); + asort($tmp); + return $tmp; + // return array('rechnung'=>'Rechnung','vorkasse'=>'Vorkasse','nachnahme'=>'Nachnahme','kreditkarte'=>'Kreditkarte','einzugsermaechtigung'=>'Einzugsermaechtigung','bar'=>'Bar','paypal'=>'PayPal','lastschrift'=>'Lastschrift'); + } + + function GetPinwandSelect() + { + $tmp = $this->app->DB->SelectArr("SELECT DISTINCT p.id,p.name FROM pinwand p + LEFT JOIN pinwand_user pu ON pu.pinwand=p.id WHERE (pu.user='".$this->app->User->GetID()."' OR p.user='".$this->app->User->GetID()."') ORDER by p.name"); + + $result['0']="Eigene Pinnwand"; + if(empty($tmp)) { + return $result; + } + foreach($tmp as $row) { + $result[$row['id']] = $row['name']; + } + return $result; + } + + function GetSprachenSelect($wert = null) + { + $check = $this->app->DB->Select("SELECT id FROM sprachen WHERE aktiv = 1 LIMIT 1"); + if($check <=0) + { + $this->app->erp->CheckTable("sprachen"); + $this->app->erp->CheckColumn("id", "int(11)", "sprachen", "NOT NULL AUTO_INCREMENT"); + $this->app->erp->CheckColumn("iso", "varchar(2)", "sprachen", "NOT NULL"); + $this->app->erp->CheckColumn("bezeichnung_de", "varchar(255)", "sprachen", "NOT NULL DEFAULT ''"); + $this->app->erp->CheckColumn("bezeichnung_en", "varchar(255)", "sprachen", "NOT NULL DEFAULT ''"); + $this->app->erp->CheckColumn("alias", "varchar(255)", "sprachen", "NOT NULL DEFAULT ''"); + $this->app->erp->CheckColumn("aktiv", "tinyint(1)", "sprachen", "NOT NULL DEFAULT '0'"); + $arr = array('DE'=>array('Deutsch','German','deutsch','1'), + 'EN'=>array('Englisch','English','englisch','1'), + 'FR'=>array('Französisch','French','franzoesisch','1'), + 'NL'=>array('Holländisch','Dutch','hollaendisch','1'), + 'IT'=>array('Italienisch','Italian','italienisch','1'), + 'ES'=>array('Spanisch','Spanish','spanisch','1'), + 'CZ'=>array('Tschechisch','Czech','tschechisch','1'), + 'DK'=>array('Dänisch','Danish','daenisch','1'), + 'SK'=>array('Slowakisch','Slovak','slowakisch','1'), + 'SW'=>array('Schwedisch','Swedish','schwedisch','1'), + 'PL'=>array('Polnisch','Polish','polnisch','1') + ); + foreach($arr as $k => $v) + { + $check = $this->app->DB->SelectArr("SELECT * FROM sprachen WHERE iso = '$k' LIMIT 1"); + if($check) + { + if($check[0]['alias'] != $v[2])$this->app->DB->Update("UPDATE sprachen SET alias = '".$v[2]."', aktiv = 1 WHERE id = '".$check[0]['id']."' LIMIT 1"); + }else{ + $this->app->DB->Insert("INSERT INTO sprachen (iso, bezeichnung_de,bezeichnung_en, alias, aktiv) VALUES ('".$k."','".$v[0]."','".$v[1]."','".$v[2]."','1')"); + } + } + } + $land = $this->Firmendaten('land'); + $tmp = $this->app->DB->SelectArr("SELECT iso,alias, bezeichnung_de,aktiv FROM sprachen WHERE iso <> '' ORDER BY iso = '$land' DESC, bezeichnung_de"); + $deutschfound = false; + $englischfound = false; + for($i=0;$i '') + { + $result[$tmp[$i]['alias']] = $tmp[$i]['bezeichnung_de']; + if($tmp[$i]['alias'] == 'deutsch')$deutschfound = true; + if($tmp[$i]['alias'] == 'englisch')$englischfound = true; + }elseif($wert == $tmp[$i]['iso'] && $wert <> '') + { + $result[$tmp[$i]['iso']] = $tmp[$i]['bezeichnung_de']; + }elseif($tmp[$i]['aktiv']) + { + $result[$tmp[$i]['iso']] = $tmp[$i]['bezeichnung_de']; + } + } + } + if(!$deutschfound)$result['deutsch'] = 'Deutsch'; + if(!$englischfound)$result['englisch'] = 'Englisch'; + return $result; + } + + + function GetTypSelect() + { + $check = $this->app->DB->Select("SELECT COUNT(id) FROM adresse_typ"); + if($check <=0) + { + $tmp = array('firma'=>'Firma','herr'=>'Herr','frau'=>'Frau'); + foreach($tmp as $key=>$value) + { + if($key=="firma") $netto=1;else $netto=0; + $this->app->DB->Insert("INSERT INTO adresse_typ (id,type,bezeichnung,aktiv,netto) VALUES ('','$key','$value','1','$netto')"); + } + } + + $tmp = $this->app->DB->SelectArr("SELECT type,bezeichnung FROM adresse_typ WHERE aktiv='1' AND geloescht!='1' ORDER by bezeichnung"); + + $result['']='Bitte wählen'; + + for($i=0;$i"Privat",'firma_bar'=>"Firma (Kasse/Bar)",'firma_ecr'=>"Firma (EC-Karte)",'firma_cc'=>"Firma (Kreditkarte)",'firma_sonst'=>"Firma (Sonstige)"); + } + + function GetStatusArbeitsnachweis() + { + return array('offen','freigegeben','versendet'); + } + + + function GetStatusAnfrage() + { + return array('offen','abgeschlossen'); + } + + function GetStatusInventur() + { + return array('offen','abgeschlossen'); + } + + function GetStatusReisekosten() + { + return array('offen','freigegeben','versendet','buchhaltung'); + } + + + function GetStatusLieferschein() + { + return array('offen','freigegeben','versendet'); + } + + + function GetStatusAuftrag() + { + return array('offen','freigegeben','abgeschlossen'); + } + + + function GetStatusAngebot() + { + return array('offen','freigegeben','bestellt','angemahnt','empfangen'); + } + + + function GetStatusGutschrift() + { + return array('offen','freigegeben','bezahlt'); + } + + function GetStatusRechnung() + { + return array('offen','freigegeben','gestellt','zahlungserinnerung','mahnung'); + } + + function GetFirmaFieldsCheckbox() + { + $tmp = array('paketmarke_mit_waage','artikel_beschleunigte_suche','internebemerkungminidetails','briefpapier_bearbeiter_ausblenden','briefpapier_vertrieb_ausblenden','versand_gelesen','zahlung_rechnung','zahlung_vorkasse','zahlung_bar','zahlung_lastschrift','zahlung_paypal','zahlung_amazon','artikel_bilder_uebersicht','artikel_baum_uebersicht','internetnummerimbeleg','wiedervorlage_mitarbeiter', + 'zahlung_amazon_bestellung','zahlung_billsafe','zahlung_sofortueberweisung','zahlung_secupay','zahlung_eckarte','zeiterfassung_schliessen','zeiterfassung_pflicht', + 'zahlung_kreditkarte','zahlung_nachnahme','zahlung_ratenzahlung','knickfalz','begrenzen_artikeltabelle','begrenzen_adressetabelle','begrenzen_belege','schnellsuche','schnellsuchecount','versandmail_zwischenspeichern','keinhauptmenurahmen','bordertabnav','steuerfrei_inland_ausblenden','auftragexplodieren_unterstuecklisten', + 'standardaufloesung','immerbruttorechnungen','immernettorechnungen','bestellvorschlaggroessernull','erweiterte_positionsansicht','schnellanlegen','kleinunternehmer','steuerspalteausblenden','api_enable','api_importwarteschlange','warnung_doppelte_nummern','warnung_doppelte_seriennummern','wareneingang_zwischenlager','bestellungohnepreis','zahlung_lastschrift_konditionen','porto_berechnen','breite_artikelbeschreibung','deviceenable','auftrag_eantab','bestellungmitartikeltext','bestellungeigeneartikelnummer','bestellunglangeartikelnummern','steuer_standardkonto_aufwendungen', + 'iconset_dunkel','api_cleanutf8','mahnwesenmitkontoabgleich','briefhtml','absenderunterstrichen','seite_von_ausrichtung_relativ','wareneingang_gross','datatables_export_button_flash','viernachkommastellen_belege','stornorechnung_standard','angebotersatz_standard','geburtstagekalender','footer_zentriert','auftragmarkierenegsaldo','wareneingangauftragzubestellung','freifelderimdokument','zeiterfassung_anderemitarbeiter','zeiterfassung_beschreibungssperre','zeiterfassung_ort','zeiterfassung_kommentar','zeiterfassung_erweitert','footer_reihenfolge_angebot_aktivieren','footer_reihenfolge_auftrag_aktivieren','footer_reihenfolge_rechnung_aktivieren','footer_reihenfolge_gutschrift_aktivieren','footer_reihenfolge_lieferschein_aktivieren','footer_reihenfolge_bestellung_aktivieren','position_quantity_change_price_update', + 'beleg_pos_ean','beleg_pos_charge','beleg_pos_mhd','beleg_pos_sn','beleg_pos_zolltarifnummer', + 'schnellanlegen_ohnefreigabe','langeartikelnummern','noauth','belege_subpositionen', + 'belege_subpositionenstuecklisten','briefpapier_ohnedoppelstrich','bearbeiteremailimdokument', + 'bearbeitertelefonimdokument','seite_belegnr','eigener_skontotext','proformarechnung_ohnebriefpapier', + 'footer_reihenfolge_proformarechnung_aktivieren','zeiterfassung_abrechnenvorausgewaehlt','festetrackingnummer', + 'guenstigste_vk','oneclickrelease','cleaner_logfile','cleaner_protokoll','cleaner_shopimport','cleaner_shopexportlog', + 'cleaner_versandzentrum','cleaner_uebertragungen','cleaner_adapterbox','angebot_auftrag_bestellung_ansprechpartner', + 'ampellager','ampelporto','ampelust','ampelzahlung','ampelnachnahme','ampelautoversand','ampelkunde', + 'ampelliefertermin','ampelkreditlimit','ampelliefersperre','ampelproduktion','freitext1aktiv','freitext2aktiv', + 'reisekosten_ohnebriefpapier','lieferdatumkw','vertriebbearbeiterfuellen','typimdokument','staffelpreiseanzeigen', + 'abmessungimdokument','projektoeffentlich','verkaufspreisevpe','einkaufspreisevpe','apiohnehtmlumwandlung', + 'externeurlsblockieren','auftragabschliessen','belegnummersortierungint', + 'dienstleistungsartikel_nicht_zu_lieferschein','dateienweiterfuehren','systemmailsabschalten','belegeinanhang', + 'lagerbestand_in_auftragspositionen_anzeigen','positionenkaufmaenischrunden','wareneingang_lagerartikel', + 'stuecklistegewichtnurartikel','bestellungabschliessen','gutschriftkursvonrechnung','wareneingangdmsdrucker', + 'dsgvoversandunternehmen','produktionskorrektur_nichtverwenden','disableproductionautostart','closesubproductions', + 'disablecreateproductiononextern', + 'beleg_artikelbild','lieferschein_artikelbild','rechnung_artikelbild','bestellung_artikelbild','gutschrift_artikelbild','angebot_artikelbild', + 'shopexportlog','autoversand_locked_orders','beleg_pos_herkunftsland', + 'loadcurrencyrate','versandzentrum_bild','onlyemployeeprojects','proformainvoice_juststorgearticles' + ); + + return $tmp; + } + + + function GetFirmaFields() + { + $fields = array('additionalcspheader','zahlung_rechnung_de','zahlung_kreditkarte_de','breite_position','breite_menge','breite_nummer','breite_einheit','land','abstand_seiten_unten','beschriftunginternetnummer','breite_artikel','breite_steuer','angebot_anzahltage','angebot_anzahlwiedervorlage','angebot_pipewiedervorlage', + 'zahlung_vorkasse_de','zahlung_nachnahme_de','zahlung_lastschrift_de','zahlung_bar_de','zahlung_paypal_de','zahlung_amazon_de','zahlung_amazon_bestellung_de','zahlung_ratenzahlung_de', + 'zahlung_sofortueberweisung_de','zahlung_billsafe_de','testmailempfaenger','zahlung_secupay_de','zahlung_eckarte_de','abstand_umbruchunten', + 'zahlung_rechnung_sofort_de','api_importwarteschlange_name','footer_farbe','zahlung_auftrag_sofort_de','zahlung_auftrag_de', + 'zahlungszieltage','zahlungszieltageskonto','zahlungszielskonto','api_initkey','api_remotedomain','api_eventurl','steuer_erloese_inland_normal','devicekey','deviceserials','steuer_standardkonto','bcc3', + 'steuer_aufwendung_inland_normal','tabsnavigationfarbe','tabsnavigationfarbeschrift', + 'steuer_erloese_inland_ermaessigt', + 'steuer_aufwendung_inland_ermaessigt', + 'steuer_erloese_inland_steuerfrei', + 'steuer_aufwendung_inland_steuerfrei', + 'steuer_erloese_inland_innergemeinschaftlich', + 'steuer_aufwendung_inland_innergemeinschaftlich', + 'steuer_erloese_inland_eunormal', + 'steuer_erloese_inland_euermaessigt', + 'steuer_erloese_inland_nichtsteuerbar', + 'steuer_aufwendung_inland_nichtsteuerbar', + 'steuer_aufwendung_inland_eunormal', + 'steuer_aufwendung_inland_euermaessigt', + 'steuer_erloese_inland_export', + 'etikettendrucker_wareneingang','schriftgroesseabsender','aufgaben_bondrucker', + 'steuer_aufwendung_inland_import','versandart','zahlungsweise','zahlungsweiselieferant','bezeichnungstornorechnung','steuer_anpassung_kundennummer','abstand_seitenrandlinks','abstand_adresszeilelinks','sepaglaeubigerid','abstand_gesamtsumme_lr', + 'schriftgroesse_gesamt','schriftgroesse_gesamt_steuer','abstand_seitenrandrechts', + + 'bezeichnungangebotersatz', + 'bezeichnungauftragersatz', + 'bezeichnungproformarechnungersatz', + 'bezeichnungrechnungersatz', + 'bezeichnunglieferscheinersatz', + 'bezeichnungbestellungersatz', + 'barcode_x','barcode_y','barcode_x_header','barcode_y_header','abseite2y','mailgrussformel', + 'email_html_template', + 'footer_reihenfolge_angebot', + 'footer_reihenfolge_auftrag', + 'footer_reihenfolge_rechnung', + 'footer_reihenfolge_proformarechnung', + 'footer_reihenfolge_gutschrift', + 'footer_reihenfolge_lieferschein', + 'footer_reihenfolge_bestellung','reihenfolge_zwischenspeicher','adresse_vorlage','eigener_skontotext_re','eigener_skontotext_anab', + 'footer_reihenfolge_bestellung','cleaner_logfile_tage','cleaner_protokoll_tage','cleaner_shopimport_tage','cleaner_versandzentrum_tage','cleaner_uebertragungen_tage','cleaner_adapterbox_tage','begrenzenanzahl_artikeltabelle','begrenzenanzahl_adressetabelle','begrenzenanzahl_belege','versandmails_max','autoversand_maxauftraege' + ,'gewichtzukgfaktor','gewichtbezeichnung','zeiterfassung_schliessentage','freitext1x','freitext1y','freitext1schriftgroesse','freitext1breite','freitext1inhalt', + 'freitext2x','freitext2y','freitext2schriftgroesse','freitext2breite','freitext2inhalt','kommissionskonsignationslager','bezeichnungaktionscodes','belege_stuecklisteneinrueckenmm','ldap_host','ldap_bindname','ldap_searchbase','ldap_filter','systemmailsempfaenger', + 'server_url','server_port','cronjob_limit','cleaner_shopexportlog_tage','poll_repeattime','wareneingangbildtypvorauswahl','wareneingangscanverhalten', 'group_sales', 'group_employee' + ); + + for($ki=1;$ki<=15;$ki++) + { + $fields[]='steuer_art_'.$ki; + $fields[]='steuer_art_'.$ki.'_normal'; + $fields[]='steuer_art_'.$ki.'_ermaessigt'; + $fields[]='steuer_art_'.$ki.'_steuerfrei'; + } + + return $fields; + } + + function GetMLMAuszahlungWaehrung() + { + return array('EUR','CHF'); + } + + function GetWaehrungUmrechnungskurs($von,$nach,$onlytable = false) + { + /** @var Waehrungumrechnung $obj */ + $obj = $this->LoadModul('waehrungumrechnung'); + if(!empty($obj) && method_exists($obj,'GetWaehrungUmrechnungskurs')) + { + return $obj->GetWaehrungUmrechnungskurs($von,$nach,$onlytable); + } + if ($von === 'EUR' && $nach === 'USD') { + return 1.20; + } + if ($von==='EUR' && $nach==='CHF') { + return 1.06; + } + return 0; + } + + function GetSchriftarten() + { + return array( + 'arial' => 'Arial' + ); + } + + function GetFonts() + { + $ret['times'] = array('b' => true,'bi' => true,'i' => true, 'name' => 'Times'); + $ret['arial'] = array('b' => true,'bi' => true,'i' => true, 'name' => 'Arial'); + if(!file_exists(__DIR__.'/pdf/font') || !is_dir(__DIR__.'/pdf/font')) { + return $ret; + } + $handle = opendir(__DIR__.'/pdf/font'); + if(!$handle) { + return $ret; + } + + while (false !== ($entry = readdir($handle))) { + $b = false; + $bi = false; + $i = false; + $pathinfo = pathinfo($entry); + if(isset($pathinfo['extension']) && strtolower($pathinfo['extension']) == 'php') { + if(strpos($entry,'helvetica') !== 0 && strpos($entry,'times') !== 0) + { + $basis = $pathinfo['filename']; + if(substr($pathinfo['filename'],-2) == 'bi') + { + if(file_exists(__DIR__.'/pdf/font/'.substr($pathinfo['filename'],0,strlen($pathinfo['filename'])-2).'.php')) + { + $bi = true; + $basispathinfo = pathinfo(__DIR__.'/pdf/font/'.substr($pathinfo['filename'],0,strlen($pathinfo['filename'])-2)); + $basis = $basispathinfo['basename']; + } + }elseif(substr($pathinfo['filename'],-1) == 'i') + { + if(file_exists(__DIR__.'/pdf/font/'.substr($pathinfo['filename'],0,strlen($pathinfo['filename'])-1).'.php')) + { + $i = true; + $basispathinfo = pathinfo(__DIR__.'/pdf/font/'.substr($pathinfo['filename'],0,strlen($pathinfo['filename'])-1)); + $basis = $basispathinfo['basename']; + } + }elseif(substr($pathinfo['filename'],-1) == 'b') + { + if(file_exists(__DIR__.'/pdf/font/'.substr($pathinfo['filename'],0,strlen($pathinfo['filename'])-1).'.php')) + { + $b = true; + $basispathinfo = pathinfo(__DIR__.'/pdf/font/'.substr($pathinfo['filename'],0,strlen($pathinfo['filename'])-1)); + $basis = $basispathinfo['basename']; + } + + } + if(isset($file))unset($file); + if(isset($name))unset($name); + include_once(__DIR__.'/pdf/font/'.$entry); + if(isset($file)&& file_exists(__DIR__.'/pdf/font/'.$file) && isset($name)) + { + if(!isset($ret[$basis]))$ret[$basis]['name'] = $name; + if(!$bi && !$i && !$b)$ret[$basis]['name'] = $name; + if($bi)$ret[$basis]['bi'] = true; + if($i)$ret[$basis]['i'] = true; + if($b)$ret[$basis]['b'] = true; + } + } + + } + } + closedir($handle); + + return $ret; + } + + function GetMLMAbrechnung() + { + return array('sammelueberweisung'=>'Sammelüberweisung','manuell'=>'Manuelle Auszahlung'); + } + + function GetMLMPositionierung() + { + return array('1'=>'1. Junior Consultant', + '2'=>'2. Consultant', + '3'=>'3. Associate', + '4'=>'4. Manager', + '5'=>'5. Senior Manager', + '6'=>'6. General Director', + '7'=>'7. General Manager', + '8'=>'8. Chief Manager', + '9'=>'9. Vice President', + '10'=>'10. President', + '11'=>'11. ', + '12'=>'12. ', + '13'=>'13. ', + '14'=>'14. ', + '15'=>'15. ' + ); + } + + function GetStatusBestellung() + { + return array('offen','freigegeben','bestellt','angemahnt','empfangen'); + } + + function GetSelectAsso($array, $selected) + { + foreach($array as $key=>$value) + { + if($selected==$key) $tmp = "selected"; else $tmp=""; + $ret .= ""; + } + return $ret; + } + + function GetSelect($array, $selected) + { + foreach($array as $value) + { + if($selected==$value) $tmp = "selected"; else $tmp=""; + $ret .= ""; + } + return $ret; + } + function CreateAdresse($name,$firma="1") + { + $projekt = $this->app->DB->Select("SELECT standardprojekt FROM firma WHERE id='".$this->app->User->GetFirma()."' LIMIT 1"); + + $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + if($projekt_bevorzugt=="1") + { + $projekt = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + } + + $zahlungsweise = $this->StandardZahlungsweise($projekt); + $zahlungsweiselieferant = $this->StandardZahlungsweiseLieferant($projekt); + $versandart = $this->StandardVersandart($projekt); + + $this->app->DB->Insert("INSERT INTO adresse (id,name,firma,zahlungsweise,zahlungsweiselieferant,projekt,versandart) VALUES ('','$name','$firma','$zahlungsweise','$zahlungsweiselieferant','$projekt','$versandart')"); + + $returnId = $this->app->DB->GetInsertID(); + $this->RunHook('AfterAddressCreate', 1, $returnId); + return $returnId; + } + + function CreateLieferadresse($adresse,$data) + { + $this->app->DB->Insert("INSERT INTO lieferadressen (id,adresse) VALUES ('','$adresse')"); + $id = $this->app->DB->GetInsertID(); + if($data['land']=="") $data['land']='DE'; + + $type="lieferadressen"; + $this->app->erp->ObjektProtokoll($type,$id,$type."_create",ucfirst($type)." angelegt"); + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE lieferadressen SET $key='".$value."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + function CreateAnsprechpartner($adresse,$data) + { + $this->app->DB->Insert("INSERT INTO ansprechpartner (id,adresse) VALUES ('','$adresse')"); + $id = $this->app->DB->GetInsertID(); + if($data['land']=="") $data['land']='DE'; + if (!empty($id)) { + $this->app->erp->RunHook('contact_person_created', 1, $id); + } + $type="ansprechpartner"; + $this->app->erp->ObjektProtokoll($type,$id,$type."_create",ucfirst($type)." angelegt"); + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE ansprechpartner SET $key='".$value."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + function CreateAccount($adresse, $data) + { + $this->app->DB->Insert("INSERT INTO adresse_accounts (id, adresse) VALUES ('', '$adresse')"); + $id = $this->app->DB->GetInsertID(); + + if($data['aktiv'] == ""){ + $data['aktiv'] = 0; + } + if($data['art'] == ""){ + $data['art'] = ""; + } + if($data['gueltig_ab'] == "" || $data['gueltig_ab'] == "0000-00-00" || $data['gueltig_ab'] == "00.00.0000"){ + $data['gueltig_ab'] = '0000-00-00'; + }else{ + $data['gueltig_ab'] = date('Y-m-d',strtotime($data['gueltig_ab'])); + } + if($data['gueltig_bis'] == "" || $data['gueltig_bis'] == "0000-00-00" || $data['gueltig_bis'] == "00.00.0000"){ + $data['gueltig_bis'] = "0000-00-00"; + }else{ + $data['gueltig_bis'] = date('Y-m-d',strtotime($data['gueltig_bis'])); + } + + foreach($data as $key => $value){ + $this->app->DB->Update("UPDATE adresse_accounts SET $key = '".$value."' WHERE id = '$id' LIMIT 1"); + } + return $id; + } + + + function FallbackRolle($adresse) + { + if(is_numeric($adresse)) + { + $projekt = $this->app->DB->Select("SELECT ar.parameter FROM adresse_rolle ar INNER JOIN projekt pr ON ar.parameter = pr.id AND pr.geloescht <> 1 WHERE (ar.bis <= CURDATE() OR ar.bis = '0000-00-00') AND ar.adresse='$adresse' AND ar.objekt='Projekt' LIMIT 1"); + if($projekt <=0) + { + $projekt = $this->app->DB->Select("SELECT ar.projekt FROM adresse_rolle ar INNER JOIN projekt pr ON ar.projekt = pr.id AND pr.geloescht <> 1 WHERE (ar.bis <= CURDATE() OR ar.bis = '0000-00-00') AND ar.adresse='$adresse' AND ar.objekt!='Gruppe' LIMIT 1"); + } + return $projekt; + } + } + + function AddRolleZuAdresse($adresse, $subjekt, $praedikat="", $objekt="", $parameter="") + { + if(!$adresse) { + return; + } + $tmp_data_adresse = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); + if(!$tmp_data_adresse) { + return; + } + $projekt = $tmp_data_adresse['projekt']; + if(strtoupper($objekt)=="PROJEKT") + { + $parameter = $this->app->DB->Select("SELECT id FROM projekt WHERE id='$parameter' LIMIT 1"); + if($parameter<=0) $parameter=0; + if($parameter > 0 ) $projekt=$parameter; + else { + $parameter =""; + $projekt = 0; + } + } + + $check = $this->app->DB->Select("SELECT id FROM adresse_rolle WHERE + subjekt='$subjekt' AND objekt='$objekt' AND praedikat='$praedikat' AND parameter='$parameter' AND adresse='$adresse' + AND (bis >= NOW() OR bis='0000-00-00') LIMIT 1"); + + if($check > 0) + return $check; + + // Insert .... + $sql ="INSERT INTO adresse_rolle (id, adresse, subjekt, praedikat, objekt, parameter,von,projekt) + VALUES ('','$adresse','$subjekt','$praedikat','$objekt','$parameter',NOW(),'$projekt')"; + + $this->app->DB->Insert($sql); + $id = $this->app->DB->GetInsertID(); + + + $kundennummer = trim($tmp_data_adresse['kundennummer']); + + // wenn adresse zum erstenmal die rolle erhält wird kundennummer bzw. lieferantennummer vergeben + if($subjekt=="Kunde" && ($kundennummer=="" || is_array($kundennummer))) + { + $kundennummer = $this->GetNextKundennummer($projekt,$tmp_data_adresse); + $this->ObjektProtokoll("adresse",$adresse,"adresse_next_kundennummer","Kundennummer erhalten: $kundennummer"); + $this->app->DB->Update("UPDATE adresse SET kundennummer='$kundennummer' WHERE id='$adresse' AND (kundennummer='0' OR kundennummer='') LIMIT 1"); + } + + $lieferantennummer = trim($this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id='$adresse' LIMIT 1")); + //$data = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); + //$this->LogFile("DEBUG subjekt = $subjekt, projekt=$projekt,adresse=$adresse,lieferantennummer=$lieferantennummer"); + if($subjekt=="Lieferant" && ($lieferantennummer=="" || is_array($lieferantennummer))) + { + $lieferantennummer = $this->GetNextLieferantennummer($projekt,$tmp_data_adresse); + $this->ObjektProtokoll("adresse",$adresse,"adresse_next_lieferantennummer","Lieferantennummer erhalten: $lieferantennummer"); + + $this->app->DB->Update("UPDATE adresse SET lieferantennummer='$lieferantennummer' WHERE id='$adresse' AND (lieferantennummer='0' OR lieferantennummer='') LIMIT 1"); + } + + $mitarbeiternummer = trim($this->app->DB->Select("SELECT mitarbeiternummer FROM adresse WHERE id='$adresse' LIMIT 1")); + if($subjekt=="Mitarbeiter" && ($mitarbeiternummer=="" || is_array($mitarbeiternummer))) + { + $mitarbeiternummer = $this->GetNextMitarbeiternummer($projekt,$tmp_data_adresse); + $this->ObjektProtokoll("adresse",$adresse,"adresse_next_mitarbeiternummer","Mitarbeiternummer erhalten: $mitarbeiternummer"); + + $this->app->DB->Update("UPDATE adresse SET mitarbeiternummer='$mitarbeiternummer' WHERE id='$adresse' AND (mitarbeiternummer='0' OR mitarbeiternummer='') LIMIT 1"); + } + + $this->app->DB->Delete("DELETE FROM adresse_rolle WHERE von > bis AND bis!='0000-00-00'"); + return $id; + } + + + function UpdateArbeitszeit($id,$adr_id, $vonZeit, $bisZeit, $aufgabe, $beschreibung,$ort, $projekt, $paketauswahl,$art,$kunde="",$abrechnen="0",$verrechnungsart="",$kostenstelle="",$abgerechnet="0",$gps="",$internerkommentar="",$auftrag=0,$produktion=0, $preis = 0,$auftragpositionid="") + { + //Update + + $myArr = $this->app->DB->SelectRow("SELECT aufgabe, beschreibung, projekt, kostenstelle FROM arbeitspaket WHERE id = $paketauswahl"); + + if($paketauswahl!=0 && $kunde <=0) + { + $kunde = $this->app->DB->Select("SELECT kunde FROM projekt WHERE id='".$myArr["projekt"]."'"); + $projekt = $myArr["projekt"]; + } + else if($kunde=="NULL") + $kunde = 0; + else if($kunde=="") + $kunde = $this->app->DB->Select("SELECT adresse_abrechnung FROM zeiterfassung WHERE id='$id'"); + + if($auftrag > 0 && $kunde <=0) + $kunde = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$auftrag' LIMIT 1"); + if($produktion > 0 && $kunde <=0) + $kunde = $this->app->DB->Select("SELECT adresse FROM produktion WHERE id='$produktion' LIMIT 1"); + + $this->app->DB->Update("UPDATE zeiterfassung SET aufgabe='$aufgabe',adresse='$adr_id',arbeitspaket='$paketauswahl',ort='$ort',beschreibung='$beschreibung', projekt='$projekt',art='$art', + von='$vonZeit',bis='$bisZeit',adresse_abrechnung='$kunde',abrechnen='$abrechnen',kostenstelle='$kostenstelle', verrechnungsart='$verrechnungsart', abgerechnet='$abgerechnet', ist_abgerechnet='$abgerechnet',gps='$gps',internerkommentar='$internerkommentar',auftrag='$auftrag',produktion='$produktion',auftragpositionid='$auftragpositionid' WHERE id='$id'"); + + // wenn arbeitszeit in arbeistnachweis verwendet wurden ist dann dort auch updaten + + $arbeitsnachweisposid = $this->app->DB->Select("SELECT arbeitsnachweispositionid FROM zeiterfassung WHERE id='$id'"); + if($arbeitsnachweisposid > 0){ + $von = $this->app->DB->Select("SELECT DATE_FORMAT(von,'%H:%i') FROM zeiterfassung WHERE id='$id'"); + $bis = $this->app->DB->Select("SELECT DATE_FORMAT(bis,'%H:%i') FROM zeiterfassung WHERE id='$id'"); + $this->app->DB->Update("UPDATE arbeitsnachweis_position SET bezeichnung='$aufgabe',beschreibung='$beschreibung',ort='$ort', von='$von',bis='$bis', + adresse='$adr_id' WHERE id='$arbeitsnachweisposid' LIMIT 1"); + } + if(!$preis)$preis = $this->app->DB->Select("SELECT stundensatz FROM zeiterfassung WHERE id = '$id' LIMIT 1"); + if(!$preis) + { + $stundensatz = (float)$this->app->DB->Select("SELECT stundensatz FROM `zeiterfassung_kosten` WHERE adresse = '$adr_id' AND (gueltig_ab >= date(von) OR gueltig_ab = '0000-00-00') ORDER by gueltig_ab = '0000-00-00', gueltig_ab LIMIT 1"); + if($stundensatz)$this->app->DB->Update("UPDATE zeiterfassung SET stundensatz = '$stundensatz' WHERE id = '$id' LIMIT 1"); + } + } + + function AddArbeitszeit($adr_id, $vonZeit, $bisZeit, $aufgabe, $beschreibung,$ort, $projekt, $paketauswahl,$art,$kunde="",$abrechnen="",$verrechnungsart="",$kostenstelle="",$abgerechnet="0",$gps="",$aufgabeid=0,$internerkommentar="",$auftrag=0,$produktion=0, $preis = 0,$auftragpositionid="",$serviceauftrag=0) + { + if(str_replace(array('-',':'),'',$vonZeit) == 0 || str_replace(array('-',':'),'',$bisZeit) == 0) + return; + + $insert = ""; + if($paketauswahl==0){ + + if($auftrag > 0 && $kunde <=0) + $kunde = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$auftrag' LIMIT 1"); + + if($produktion > 0 && $kunde <=0) + $kunde = $this->app->DB->Select("SELECT adresse FROM produktion WHERE id='$produktion' LIMIT 1"); + + + + if($abrechnen!="1") $abrechnen=0; + //if($projekt<=0) $projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$kunde' LIMIT 1"); + if($projekt=="") $projekt=0; + $insert = 'INSERT INTO zeiterfassung (adresse, von, bis, aufgabe, beschreibung, projekt, buchungsart,art,adresse_abrechnung,abrechnen,gebucht_von_user,ort,kostenstelle,verrechnungsart,abgerechnet,ist_abgerechnet,gps,aufgabe_id,internerkommentar,auftrag,produktion,auftragpositionid,serviceauftrag) + VALUES ('.$adr_id.',"'.$vonZeit.'","'.$bisZeit.'","'.$aufgabe.'", "'.$beschreibung.'",'.$projekt.', "manuell","'.$art.'","'.$kunde.'","'.$abrechnen.'","'.$this->app->User->GetID().'","'.$ort.'","'.$kostenstelle.'","'.$verrechnungsart.'","'.$abgerechnet.'","'.$abgerechnet.'","'.$gps.'","'.$aufgabeid.'","'.$internerkommentar.'","'.$auftrag.'","'.$produktion.'","'.$auftragpositionid.'","'.$serviceauftrag.'")'; + + }else{ + + $projekt = $this->app->DB->SelectArr("SELECT aufgabe, beschreibung, projekt, kostenstelle FROM arbeitspaket WHERE id = $paketauswahl"); + $myArr = $projekt[0]; + + if($kunde<=0) // wenn kunde angeben wird dann da drauf buchen paralell + $kunde = $this->app->DB->Select("SELECT kunde FROM projekt WHERE id='".$myArr["projekt"]."' LIMIT 1"); + + $insert = 'INSERT INTO zeiterfassung (adresse, von, bis, arbeitspaket, aufgabe, beschreibung, projekt, buchungsart,art,gebucht_von_user,ort,adresse_abrechnung,abrechnen,abgerechnet,ist_abgerechnet,gps,aufgabe_id,internerkommentar,auftrag,produktion,auftragpositionid,serviceauftrag) VALUES + ('.$adr_id.',"'.$vonZeit.'","'.$bisZeit.'",'.$paketauswahl.' , "'.$aufgabe.'", "'.$beschreibung.'",'.$myArr["projekt"].', "AP","'.$art.'","'.$this->app->User->GetID().'","'.$ort.'","'.$kunde.'","'.$abrechnen.'","'.$abgerechnet.'","'.$abgerechnet.'","'.$gps.'","'.$aufgabeid.'","'.$internerkommentar.'","'.$auftrag.'","'.$produktion.'","'.$auftragpositionid.'","'.$serviceauftrag.'")'; + } + $this->app->DB->Insert($insert); + $ret = $this->app->DB->GetInsertID(); + + if(!$preis) + { + $stundensatz = (float)$this->app->DB->Select("SELECT stundensatz + FROM `zeiterfassung_kosten` + WHERE adresse = '$adr_id' AND (gueltig_ab <= curdate() OR gueltig_ab = '0000-00-00') + ORDER BY gueltig_ab DESC LIMIT 1"); + if($stundensatz)$this->app->DB->Update("UPDATE zeiterfassung SET stundensatz = '$stundensatz' WHERE id = '$ret' LIMIT 1"); + } + return $ret; + + // wenn art=="AP" hole projekt und kostenstelle aus arbeitspaket beschreibung + // und update zuvor angelegten datensatz + } + + + /** + * \brief Anlegen eines Arbeitspakets + * + * Diese Funktion legt ein Arbeitspaket an. + * + * \param aufgabe Kurzbeschreibung (ein paar Woerter) + * \param beschreibung Textuelle Beschreibung + * \param projekt Projekt ID + * \param zeit_geplant Stundenanzahl Integer Wert + * \param kostenstelle Kostenstelle + * \param initiator user id des Initiators + * \param abgabedatum Datum fuer Abgabe + * \return Status-Code + * + */ + function CreateArbeitspaket($adresse, $aufgabe,$beschreibung,$projekt,$zeit_geplant,$kostenstelle,$initiator,$abgabedatum="") + { + if(($aufgabe != '') && ($beschreibung != '') && ($projekt != '') && ($zeit_geplant != '') && ($kostenstelle != '') && ($initiator != '')){ + $this->app->DB->Insert('INSERT INTO arbeitspakete (adresse, aufgabe, beschreibung, projekt, zeit_geplant, kostenstelle, initiator, abgabedatum) VALUES ( '.$adresse.',"'.$aufgabe.'", "'.$beschreibung.'", '.$projekt.', '.$zeit_geplant.','.$kostenstelle.', '.$initiator.',"'.$abgabedatum.'")'); + return 1; + } + return 0; + } + + function CreateBenutzerVorlage($felder) + { + $this->app->DB->Insert("INSERT INTO uservorlage (id,bezeichnung,beschreibung) + VALUES ('','{$felder['bezeichnung']}', '{$felder['beschreibung']}')"); + + $id = $this->app->DB->GetInsertID(); + + //standard rechte damit man sich anmelden kann + $this->app->DB->Update("INSERT INTO uservorlagerights (vorlage, module,action,permission) VALUES ('$id','welcome','login',1)"); + $this->app->DB->Update("INSERT INTO uservorlagerights (vorlage, module,action,permission) VALUES ('$id','welcome','logout',1)"); + $this->app->DB->Update("INSERT INTO uservorlagerights (vorlage, module,action,permission) VALUES ('$id','welcome','start',1)"); + $this->app->DB->Update("INSERT INTO uservorlagerights (vorlage, module,action,permission) VALUES ('$id','welcome','startseite',1)"); + $this->app->DB->Update("INSERT INTO uservorlagerights (vorlage, module,action,permission) VALUES ('$id','welcome','settings',1)"); + return $id; + } + + + function CreateBenutzer($felder) + { + $settings = base64_encode(serialize($felder['settings'])); + $firma = $this->app->User->GetFirma(); + + $passwordunenescaped = $felder['passwordunenescaped']; + + $this->app->DB->Insert( + sprintf( + "INSERT INTO `user` + (`username`, `passwordmd5`, `password`, + `description`, `settings`, `parentuser`, `activ`, `type`, `adresse`, + `fehllogins`, `standarddrucker`, `startseite`, + `hwtoken`, `hwkey`, `hwcounter`, `hwdatablock`, + `motppin`, `motpsecret`, `externlogin`, + `gpsstechuhr`, `firma`, `kalender_passwort`, `kalender_aktiv`, `vorlage`, + `projekt_bevorzugen`, `projekt`, `docscan_aktiv`, `docscan_passwort`, `repassword`) + VALUES ( + '%s', MD5('%s'), '', + '%s', '%s', '0', '%d', '%s', %d, + %d, %d, '%s', + %d, '%s', %d, '%s', + '%s', '%s', '%d', + '%d', '%d', '%s', '%d', '%s', + '%d', '%d', '%d', '%s', 0 + )", + $felder['username'], $felder['password'], + $felder['description'], $settings, $felder['activ'], $felder['type'], $felder['adresse'], + $felder['fehllogins'], $felder['standarddrucker'], $felder['startseite'], + $felder['hwtoken'], $felder['hwkey'], $felder['hwcounter'], $felder['hwdatablock'], + $felder['motppin'], $felder['motpsecret'], $felder['externlogin'], + $felder['gpsstechuhr'], $firma, $felder['kalender_passwort'], $felder['kalender_aktiv'], $felder['vorlage'], + $felder['projekt_bevorzugen'], $felder['projekt'], $felder['docscan_aktiv'], $felder['docscan_passwort'] + ) + ); + + $id = $this->app->DB->GetInsertID(); + if(empty($id)) { + return $id; + } + $salt = $this->app->DB->Select("SELECT salt FROM user WHERE id = '$id' LIMIT 1"); + if(!$this->app->DB->error()) { + $salt = hash('sha512',microtime(true)); + $passwordsha512 = hash('sha512', $passwordunenescaped.$salt); + $this->app->DB->Update("UPDATE user SET password='', salt = '$salt', passwordsha512 = '$passwordsha512' WHERE id='$id' LIMIT 1"); + } + + //standard rechte damit man sich anmelden kann + $this->insertDefaultUserRights($id); + $this->AbgleichBenutzerVorlagen($id); + + return $id; + } + + /** + * @param int $userId + */ + public function insertDefaultUserRights($userId) + { + if($userId <= 0) { + return; + } + foreach(['login','logout','start','startseite','settings'] as $action) { + $this->app->DB->Update( + sprintf( + "INSERT INTO `userrights` (`user`, `module`, `action`, `permission`) VALUES (%d, 'welcome', '%s', 1)", + $userId, $action + ) + ); + } + } + + function IsAdresseInGruppe($adresse,$gruppe) + { + + $check = $this->app->DB->Select("SELECT a.parameter FROM adresse_rolle a WHERE + (a.bis='0000-00-00' OR a.bis <=NOW()) AND a.adresse='$adresse' AND a.parameter='$gruppe' AND a.objekt='Gruppe' LIMIT 1"); + + return ($check == $gruppe) && $gruppe > 0; + } + + function IsAdresseSubjekt($adresse,$subjekt) + { + $id = $this->app->DB->Select("SELECT id FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='$subjekt' LIMIT 1"); + return $id > 0?1:0; + } + + function AddOffenenVorgang($adresse, $titel, $href, $beschriftung="", $linkremove="") + { + $sql = "INSERT INTO offenevorgaenge (id,adresse,titel,href,beschriftung,linkremove) VALUES + ('','$adresse','$titel','$href','$beschriftung','$linkremove')"; + $this->app->DB->Insert($sql); + } + + + function RenameOffenenVorgangID($id,$titel) + { + $sql = "UPDATE offenevorgaenge SET titel='$titel' WHERE id='$id' LIMIT 1"; + $this->app->DB->Update($sql); + } + + function RemoveOffenenVorgangID($id) + { + $sql = "DELETE FROM offenevorgaenge WHERE id='$id' LIMIT 1"; + $this->app->DB->Delete($sql); + } + + function CalcNextNummer($nummer) + { + $nummer = trim($nummer); + + //Nummer von rechts abknabbern + for($i=strlen($nummer)-1; $i >= 0; $i--) + { + $checkvalue = $nummer[$i]; + if(is_numeric($checkvalue)) + $nummer_anteil[] = $checkvalue; + else break; + } + // nummer string erstellen + if(isset($nummer_anteil)) + { + $nummer_anteil_string = implode("",$nummer_anteil); + $nummer_anteil_string = strrev($nummer_anteil_string); + $laenge_nummer_anteil_string = strlen($nummer_anteil_string); + } else { + $nummer_anteil_string = 0; + $laenge_nummer_anteil_string = 0; + } + + // buchstaben teil extrahieren + $buchstaben_anteil_string = substr($nummer,0,strlen($nummer) - $laenge_nummer_anteil_string); + if($laenge_nummer_anteil_string == 0)$laenge_nummer_anteil_string = 1; + // nummer erhoehen + $neue_nummer = $nummer_anteil_string+1; + + + // nummer von links auffuellen mit nullern + $neue_nummer = str_pad($neue_nummer, $laenge_nummer_anteil_string, "0", STR_PAD_LEFT); + + //zusammensetzen + return $buchstaben_anteil_string.$neue_nummer; + } + + function GetNextNummer($type,$projekt="",$data="") + { + $doctype = $type; + if(in_array($doctype,['kundennummer', 'lieferantennummer', 'mitarbeiternummer'])) { + $doctype = 'adresse'; + } + $checkprojekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id='$projekt' LIMIT 1"); + + $process_lock = $this->app->erp->ProzessLock("erpapi_getnextnummer"); + + $eigenernummernkreis = 0; + if($eigenernummernkreis=='1') + { + + } else { + // naechste + switch($type) + { + case "preisanfrage": + $belegnr = $this->Firmendaten("next_preisanfrage"); + if($belegnr == "0" || $belegnr == "") $belegnr = 100000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "angebot": + $belegnr = $this->Firmendaten("next_angebot"); + if($belegnr == "0" || $belegnr == "") $belegnr = 100000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "auftrag": + $belegnr = $this->Firmendaten("next_auftrag"); + if($belegnr == "0" || $belegnr=="") $belegnr = 200000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "rechnung": + $belegnr = $this->Firmendaten("next_rechnung"); + if($belegnr == "0" || $belegnr=="") $belegnr = 400000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "gutschrift": + $belegnr = $this->Firmendaten("next_gutschrift"); + if($belegnr == "0" || $belegnr=="") $belegnr = 900000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "lieferschein": + $belegnr = $this->Firmendaten("next_lieferschein"); + if($belegnr == "0" || $belegnr=="") $belegnr = 300000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "retoure": + $belegnr = $this->Firmendaten("next_retoure"); + if($belegnr == "0" || $belegnr=="") $belegnr = 500000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "bestellung": + $belegnr = $this->Firmendaten("next_bestellung"); + if($belegnr == "0" || $belegnr=="") $belegnr = 100000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "arbeitsnachweis": + $belegnr = $this->Firmendaten("next_arbeitsnachweis"); + if($belegnr == "0" || $belegnr=="") $belegnr = 300000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "anfrage": + $belegnr = $this->Firmendaten("next_anfrage"); + if($belegnr == "0" || $belegnr=="") $belegnr = 300000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "preisanfrage": + $belegnr = $this->Firmendaten("next_preisanfrage"); + if($belegnr == "0" || $belegnr=="") $belegnr = 300000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "proformarechnung": + $belegnr = $this->Firmendaten("next_proformarechnung"); + if($belegnr == "0" || $belegnr=="") $belegnr = 300000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "kalkulation": + $belegnr = $this->Firmendaten("next_kalkulation"); + if($belegnr == "0" || $belegnr=="") $belegnr = 300000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "reisekosten": + $belegnr = $this->Firmendaten("next_reisekosten"); + if($belegnr == "0" || $belegnr=="") $belegnr = 300000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "produktion": + $belegnr = $this->Firmendaten("next_produktion"); + if($belegnr == "0" || $belegnr=="") $belegnr = 300000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "kundennummer": + $belegnr = $this->Firmendaten("next_kundennummer"); + if($belegnr == "0" || $belegnr=="") $belegnr = 10000; + while($this->app->DB->Select("SELECT id FROM adresse WHERE kundennummer = '$belegnr' and kundennummer <> '' and geloescht <> 1 LIMIT 1")) + { + $belegnr++; + } + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "lieferantennummer": + $belegnr = $this->Firmendaten("next_lieferantennummer"); + if($belegnr == "0" || $belegnr=="") $belegnr = 70000; + while($this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer = '$belegnr' and lieferantennummer <> '' and geloescht <> 1 LIMIT 1")) + { + $belegnr++; + } + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "mitarbeiternummer": + $belegnr = $this->Firmendaten("next_mitarbeiternummer"); + if($belegnr == "0" || $belegnr=="") $belegnr = 90000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "projektnummer": + $belegnr = $this->Firmendaten("next_projektnummer"); + if($belegnr == "0" || $belegnr=="") $belegnr = 90000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "serviceauftrag": + $belegnr = $this->Firmendaten("next_serviceauftrag"); + if($belegnr == "0" || $belegnr=="") $belegnr = 300000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case "verbindlichkeit": + $belegnr = $this->Firmendaten("next_verbindlichkeit"); + if($belegnr == "0" || $belegnr=="") $belegnr = 10000; + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + case 'receiptdocument': + $belegnr = $this->Firmendaten('next_receiptdocument'); + if($belegnr == '0' || $belegnr=='') { + $belegnr = 10000; + } + $newbelegnr = $this->CalcNextNummer($belegnr); + break; + default: + $belegnr = null; + $newbelegnr = null; + $this->RunHook('next_number', 3, $type, $belegnr, $newbelegnr); + if($belegnr === null && $newbelegnr === null){ + $begelnr = 'Fehler'; + } + break; + } + + $this->FirmendatenSet("next_$type",$newbelegnr); + } + $this->app->erp->ProzessUnlock($process_lock); + + // alle spalten aus Adress als Variable + $doctypeid = $data; + if($doctype === 'adresse') { + if(is_numeric($data)) { + $adresse = $this->app->DB->SelectRow( + sprintf( + 'SELECT a.* FROM `adresse` AS a WHERE a.id=%d LIMIT 1', + $doctypeid + ) + ); + }elseif(is_array($data)) { + if(empty($data['id']) && !empty($data[0])) { + $data = reset($data); + } + if(!empty($data['id'])) { + $adresse = $data; + } + } + } elseif(is_array($data)) { + if(empty($data['id']) && !empty($data[0])) { + $data = reset($data); + } + if(!empty($data['id'])) { + $data = $data['id']; + } + } + if(is_numeric($data)){ + $adresse = $this->app->DB->SelectRow( + sprintf( + "SELECT a.* FROM `%s` b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id=%d LIMIT 1", + $doctype, $data + ) + ); + } + if(!empty($adresse)) { + foreach($adresse as $key=>$value) { + $belegnr = str_ireplace('{ADRESSE_' . strtoupper($key) . '}', $value, $belegnr); + } + } + + $belegnr = str_ireplace('{JAHR}',date('Y'),$belegnr); + $belegnr = str_ireplace('{MONAT}',date('m'),$belegnr); + $belegnr = str_ireplace('{TAG}',date('d'),$belegnr); + $belegnr = str_ireplace('{KW}',date('W'),$belegnr); + return $belegnr; + } + + function InsertUpdateAdresse($data) + { + $created = false; + if(!is_array($data)) { + return false; + } + $projekt = $this->app->DB->Select("SELECT standardprojekt FROM firma WHERE id='".$this->app->User->GetFirma()."' LIMIT 1"); + if(isset($data['projekt'])){ + $projekt = $data['projekt']; + } else { + $data['projekt'] = $projekt; + } + if(isset($data['id'])) + { + $adresse = $this->app->DB->SelectRow("select * from adresse where id = ".$data['id']." limit 1"); + } + if(!isset($adresse) || !$adresse) + { + $where = " geloescht <> 1 "; + if(isset($data['lieferantennummer']) && $data['lieferantennummer'] !== '') + { + if($where != "")$where .= " and "; + $where .= " lieferantennummer like '".$this->app->DB->real_escape_string($data['lieferantennummer'])."' "; + } + if(isset($data['kundennummer']) && $data['kundennummer'] !== '') + { + if($where != "")$where .= " and "; + $where .= " kundennummer like '".$this->app->DB->real_escape_string($data['kundennummer'])."' "; + } + if(isset($data['mitarbeiternummer']) && $data['mitarbeiternummer'] !== '') + { + if($where != "")$where .= " and "; + $where .= " mitarbeiternummer like '".$this->app->DB->real_escape_string($data['mitarbeiternummer'])."' "; + } + if($where != " geloescht <> 1 ") { + $adresse = $this->app->DB->SelectRow("select * from adresse where ".$where." limit 1"); + } + } + if(!isset($adresse) || !$adresse) + { + $this->app->DB->Insert("insert into adresse (id) values ('')"); + $id = $this->app->DB->GetInsertID(); + $created = true; + if($id) + { + $adresse = $this->app->DB->SelectRow("select * from adresse where id = '".$id."' limit 1"); + + } else return false; + if(isset($data['lieferantennummer']) && $data['lieferantennummer'] !== '') + { + $this->AddRolleZuAdresse($id, "Lieferant", "von", "Projekt", $projekt); + } + if(isset($data['kundennummer']) && $data['kundennummer'] !== '') + { + $this->AddRolleZuAdresse($id, "Kunde", "von", "Projekt", $projekt); + } + if(isset($data['mitarbeiternummer']) && $data['mitarbeiternummer'] !== '') + { + $this->AddRolleZuAdresse($id, "Mitarbeiter", "von", "Projekt", $projekt); + } + } + if(!$adresse)return false; + if(isset($adresse['id']))$id = $adresse['id']; + if(isset($data['lieferantennummer']) && $data['lieferantennummer'] !== '') + { + $this->AddRolleZuAdresse($id, "Lieferant", "von", "Projekt", $projekt); + } + if(isset($data['kundennummer']) && $data['kundennummer'] !== '') + { + $this->AddRolleZuAdresse($id, "Kunde", "von", "Projekt", $projekt); + } + if(isset($data['mitarbeiternummer']) && $data['mitarbeiternummer'] !== '') + { + $this->AddRolleZuAdresse($id, "Mitarbeiter", "von", "Projekt", $projekt); + } + + $zielspalten = $this->app->DB->SelectArr("show columns from `adresse`"); + if($zielspalten) + { + foreach($zielspalten as $val)$ziel[$val['Field']] = true; + } + + foreach($data as $k => $v) + { + $k = trim($k); + if(empty($ziel)) + { + $ka = explode(' ',$k); + $k = $ka[0]; + } + if($k !== '' && $k != 'id' && (String)$adresse[$k] !== (String)$v && (empty($ziel) || isset($ziel[$k]))) + { + $sqla[] = $this->app->DB->real_escape_string($k). " = ".(!is_null($v)?"'".$this->app->DB->real_escape_string($v)."'":"NULL")." "; + } + } + + if(!empty($sqla))$this->app->DB->Update("update adresse set ".implode(', ',$sqla)." where id = '".$adresse['id']."' LIMIT 1"); + + if($this->app->DB->error() != '' || empty($sqla)) + { + foreach($data as $k => $v) + { + $k = trim($k); + if(empty($ziel)) + { + $ka = explode(' ',$k); + $k = $ka[0]; + } + if($k !== '' && $k != 'id' && (String)$adresse[$k] !== (String)$v && (empty($ziel) || isset($ziel[$k]))) + { + $this->app->DB->Update("update adresse set ".$this->app->DB->real_escape_string($k)." = ".(!is_null($v)?"'".$this->app->DB->real_escape_string($v)."'":"NULL")." where id = '".$adresse['id']."' LIMIT 1"); + } + } + } + if($created) { + $addressId = $adresse['id']; + $this->RunHook('adresse_create', 1, $addressId); + $this->RunHook('AfterAddressCreate', 1, $addressId); + } + else { + $addressId = $adresse['id']; + $this->RunHook('adresse_update', 1, $addressId); + } + + return $adresse['id']; + } + + public function InsertUpdateArtikel($data, $onlyUpdate = false) { + if(!is_array($data)){ + return false; + } + $created = false; + $projekt = $this->app->erp->Firmendaten('projekt'); + if(isset($data['projekt'])){ + $projekt = $data['projekt']; + } else { + $data['projekt'] = $projekt; + } + if(isset($data['id']) && $data['id']) { + $artikel = $this->app->DB->SelectRow("select * from artikel where id = ".$data['id']." limit 1"); + } + else { + $artikel = null; + } + if(!$artikel && isset($data['nummer']) && $data['nummer'] != '') { + $order = ""; + $where = " geloescht <> 1 AND nummer = '".$this->app->DB->real_escape_string($data['nummer'])."'"; + + if(isset($data['projekt']) && $data['projekt'] && (int)$data['projekt'] > 0) { + if($this->app->DB->Select("SELECT id FROM projekt WHERE eigenernummernkreis = 1 AND id = '".(int)$data['projekt']."'")) { + $where .= " AND projekt = '".(int)$data['projekt']."' "; + }else { + $order .= " ORDER BY projekt = '".(int)$data['projekt']."' DESC "; + } + } + if(isset($data['typ']) && $data['typ'] !== '') { + $kat = (int)str_replace('_kat','',$data['typ']); + if($kat && $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE id = '$kat' AND externenummer = 0 AND geloescht = 0 LIMIT 1")) { + if($order === '') { + $order .= " ORDER BY "; + } + else{ + $order .= " , "; + } + $order .= " typ = '".$kat.'_kat'."' DESC "; + } + } + $artikel = $this->app->DB->SelectRow("select * from artikel where ".$where." $order limit 1"); + } + if(!(isset($artikel['id']) && $artikel['id'] > 0)) { + if($onlyUpdate) { + return false; + } + $this->app->DB->Insert("insert into artikel (id) values (NULL)"); + $created = true; + $id = $this->app->DB->GetInsertID(); + $artikel = $this->app->DB->SelectRow("select * from artikel where id = ".$id." limit 1"); + if(empty($data['nummer'])){ + $data['nummer'] = $this->GetNextArtikelnummer(!empty($data['typ'])?$data['typ']:"", 1, $data['projekt']); + } + } + if(isset($artikel['id']) && $artikel['id'] > 0) { + $id = $artikel['id']; + $zielspalten = $this->app->DB->SelectArr("show columns from `artikel`"); + if($zielspalten) { + foreach($zielspalten as $val) { + $ziel[$val['Field']] = true; + } + } + + foreach($data as $k => $v) { + $k = trim($k); + if(empty($ziel)) { + $ka = explode(' ',$k); + $k = $ka[0]; + } + $artikelValue = isset($artikel[$k])?(String)$artikel[$k]:''; + if($k !== '' && $k !== 'id' && $artikelValue !== (String)$v && (empty($ziel) || isset($ziel[$k]))) { + $sqla[] = $this->app->DB->real_escape_string($k). ' = '.($v !== null?"'".$this->app->DB->real_escape_string($v)."'":'NULL').' '; + } + } + + if(!empty($sqla)) { + $this->app->DB->Update("update artikel set ".implode(', ',$sqla)." where id = '".$id."' LIMIT 1"); + } + if($this->app->DB->error() != '' || empty($sqla)) { + foreach($data as $k => $v) { + if(empty($ziel)){ + $ka = explode(' ',trim($k)); + $k = $ka[0]; + } + $artikelValue = isset($artikel[$k])?(String)$artikel[$k]:''; + if($k !== '' && $k !== 'id' && $artikelValue !== (String)$v && (empty($ziel) || isset($ziel[$k]))) { + $this->app->DB->Update("update artikel set ".$this->app->DB->real_escape_string($k)." = ".($v !== null?"'".$this->app->DB->real_escape_string($v)."'":'NULL')." where id = '".$id."' LIMIT 1"); + } + } + } + if(!empty($data['shop']) || !empty($data['shop2']) || !empty($data['shop3'])) { + $this->CheckShopTabelle($id); + } + $articleId = $id; + if($created) { + $this->app->erp->RunHook('artikel_create', 1, $articleId); + } + else { + $this->app->erp->RunHook('artikel_update', 1, $articleId); + } + return $id; + } + return false; + } + + function GetNextArtikelnummer($artikelart="",$firma="1",$projekt="") + { + // neue artikel nummer holen + $process_lock = $this->app->erp->ProzessLock("erpapi_getnextartikelnummer"); + if(is_numeric($artikelart)) $artikelart = $artikelart."_kat"; + + $check = str_replace("_kat","",$artikelart); + $check = $this->app->DB->Select("SELECT id FROM artikelkategorien WHERE id='$check' AND geloescht!=1 LIMIT 1"); + + if($check > 0) + { + $next_nummer_alt = $this->app->DB->Select("SELECT next_nummer FROM artikelkategorien WHERE id='$check' AND geloescht!=1"); + $externenummer = $this->app->DB->Select("SELECT externenummer FROM artikelkategorien WHERE id='$check' AND geloescht!=1"); + + if($externenummer!="1") + { + if($next_nummer_alt=="") + { + $next_nummer_alt = 100000; + $neue_nummer = $next_nummer_alt; + $this->app->DB->Update("UPDATE artikelkategorien SET next_nummer='$neue_nummer' WHERE id='$check' AND geloescht!=1"); + } else { + $nurbuchstaben = preg_replace("/[^a-zA-Z]/","",$next_nummer_alt); + $nurzahlen = preg_replace("/[^0-9]/","",$next_nummer_alt); + $laenge = strlen($nurzahlen); + + $next_nummer = $this->CalcNextNummer($next_nummer_alt); + //$nurbuchstaben.str_pad($nurzahlen+1, $laenge ,'0', STR_PAD_LEFT); + $neue_nummer = $next_nummer; + + $this->app->DB->Update("UPDATE artikelkategorien SET next_nummer='$next_nummer' WHERE id='$check' AND geloescht!=1"); + } + } else { + // externe nummer holen + // TODO pruefen ob es im Projekt ueberladen gehoert + $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id='$projekt' LIMIT 1"); + if($eigenernummernkreis=="1") + { + $neue_nummer = $this->app->DB->Select("SELECT next_artikelnummer FROM projekt WHERE id='$projekt' LIMIT 1"); + if($this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$this->app->DB->real_escape_string($neue_nummer)."' LIMIT 1"))$neue_nummer = $this->CalcNextNummer($neue_nummer); + $next_nummer = $this->CalcNextNummer($neue_nummer); + $this->app->DB->Update("UPDATE projekt SET next_artikelnummer='".$next_nummer."' WHERE id='$projekt' LIMIT 1"); + } else { + //zentraler nummernkreis mit prefix + $next_nummer = $this->CalcNextNummer($this->Firmendaten("next_artikelnummer")); + $this->FirmendatenSet("next_artikelnummer",$next_nummer); + if($next_nummer_alt!="") $neue_nummer=$next_nummer_alt.$next_nummer; + else $neue_nummer = $next_nummer; + } + + //$nurbuchstaben = preg_replace("/[^a-zA-Z]/","",$next_nummer_alt); + //$neue_nummer = $nurbuchstaben.$next_nummer; + //$neue_nummer = $this->CalcNextNummer($next_nummer_alt); + } + } else { + $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id='$projekt' LIMIT 1"); + if($eigenernummernkreis) + { + $neue_nummer = $this->app->DB->Select("SELECT next_artikelnummer FROM projekt WHERE id='$projekt' LIMIT 1"); + if($this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$this->app->DB->real_escape_string($neue_nummer)."' LIMIT 1"))$neue_nummer = $this->CalcNextNummer($neue_nummer); + $next_nummer = $this->CalcNextNummer($neue_nummer); + $this->app->DB->Update("UPDATE projekt SET next_artikelnummer='".$next_nummer."' WHERE id='$projekt' LIMIT 1"); + }else{ + $firmennummer = $this->app->erp->Firmendaten('next_artikelnummer'); + if($firmennummer) + { + $next_nummer = $firmennummer; + $neue_nummer = $this->CalcNextNummer($next_nummer); + $this->FirmendatenSet('next_artikelnummer', $neue_nummer); + $neue_nummer = $this->app->erp->Firmendaten('next_artikelnummer'); + } else { + switch($artikelart) + { + case "produkt": + $neue_nummer = $this->app->DB->Select("SELECT MAX(nummer) FROM artikel WHERE nummer LIKE '7%'"); + if($neue_nummer=="" || $neue_nummer=="0") $neue_nummer = "700000"; + break; + case "produktion": + $neue_nummer = $this->app->DB->Select("SELECT MAX(nummer) FROM artikel WHERE nummer LIKE '4%'"); + if($neue_nummer=="" || $neue_nummer=="0") $neue_nummer = "400000"; + break; + case "module": + $neue_nummer = $this->app->DB->Select("SELECT MAX(nummer) FROM artikel WHERE nummer LIKE '6%'"); + if($neue_nummer=="" || $neue_nummer=="0") $neue_nummer = "600000"; + break; + default: + $neue_nummer = $this->app->DB->Select("SELECT MAX(CAST(nummer AS UNSIGNED)) FROM artikel WHERE nummer LIKE '1%'"); + if(($neue_nummer=="" || $neue_nummer=="0")) $neue_nummer = "100000"; + } + $neue_nummer = $this->CalcNextNummer($neue_nummer);//$neue_nummer + 1; + } + } + } + $this->app->erp->ProzessUnlock($process_lock); + $neue_nummer = str_replace('{JAHR}',date('Y'),$neue_nummer); + $neue_nummer = str_replace('{MONAT}',date('m'),$neue_nummer); + $neue_nummer = str_replace('{TAG}',date('d'),$neue_nummer); + return $neue_nummer; + } + + function GetNextMitarbeiternummer($projekt="",$data="") + { + return $this->GetNextNummer("mitarbeiternummer",$projekt,$data); + } + + + function GetNextKundennummer($projekt="",$data="") + { + return $this->GetNextNummer("kundennummer",$projekt,$data); + } + + function GetNextLieferantennummer($projekt="",$data="") + { + return $this->GetNextNummer("lieferantennummer",$projekt,$data); + } + + function ArbeitsnachweisProtokoll($id,$text) + { + /** @var Arbeitsnachweis $obj */ + $obj = $this->app->erp->LoadModul('arbeitsnachweis'); + if(!empty($obj) && method_exists($obj, 'addArbeitsnachweisProtokoll')) { + $obj->addArbeitsnachweisProtokoll($id, $text); + } + } + + + function KalkulationProtokoll($id,$text) + { + if(!$id)return; + $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; + $text = $this->app->DB->real_escape_string($text); + $this->app->DB->Insert("INSERT INTO kalkulation_protokoll (id,reisekosten,zeit,bearbeiter,grund) VALUES + ('','$id',NOW(),'".$bearbeiter."','$text')"); + } + + function ReisekostenProtokoll($id,$text) + { + /** @var Reisekosten $obj */ + $obj = $this->app->erp->LoadModul('reisekosten'); + if(!empty($obj) && method_exists($obj, 'AddReisekostenProtokoll')) { + $obj->AddReisekostenProtokoll($id, $text); + } + } + + + function AnfrageProtokoll($id,$text) + { + $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; + $text = $this->app->DB->real_escape_string($text); + $this->app->DB->Insert("INSERT INTO anfrage_protokoll (id,anfrage,zeit,bearbeiter,grund) VALUES + ('','$id',NOW(),'".$bearbeiter."','$text')"); + } + + + function BelegProtokoll($typ,$id,$text) + { + if(!$id)return; + $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; + $text = $this->app->DB->real_escape_string($text); + $this->app->DB->Insert("INSERT INTO ".$typ."_protokoll (id,".$typ.",zeit,bearbeiter,grund) VALUES + ('','$id',NOW(),'".$bearbeiter."','$text')"); + } + + + function PreisanfrageProtokoll($id,$text) + { + /** @var Preisanfrage $obj */ + $obj = $this->app->erp->LoadModul('preisanfrage'); + if(!empty($obj) && method_exists($obj,'addPreisanfrageProtokoll')) { + $obj->addPreisanfrageProtokoll($id, $text); + } + } + + + function ProformarechnungProtokoll($id,$text) + { + if(!$id)return; + $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; + $text = $this->app->DB->real_escape_string($text); + $this->app->DB->Insert("INSERT INTO proformarechnung_protokoll (id,proformarechnung,zeit,bearbeiter,grund) VALUES + ('','$id',NOW(),'".$bearbeiter."','$text')"); + } + + + + function InventurProtokoll($id,$text) + { + /** @var Inventur $obj */ + $obj = $this->LoadModul('inventur'); + if(!empty($obj) && method_exists($obj, 'AddInventurProtokoll')) + { + $obj->AddInventurProtokoll($id,$text); + } + } + + function RetoureProtokoll($id,$text) + { + /** @var Retoure $obj */ + $obj = $this->app->erp->LoadModul('retoure'); + if($obj && method_exists($obj,'addRetoureProtokoll')) { + $obj->addRetoureProtokoll($id, $text); + } + } + + function LieferscheinProtokoll($id,$text) + { + if(!$id)return; + $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; + $text = $this->app->DB->real_escape_string($text); + $this->app->DB->Insert("INSERT INTO lieferschein_protokoll (id,lieferschein,zeit,bearbeiter,grund) VALUES + ('','$id',NOW(),'".$bearbeiter."','$text')"); + } + + + function AuftragProtokoll($id, $text, $bearbeiter = '') + { + if(!$id){ + return; + } + if(empty($bearbeiter)){ + $bearbeiter = ''; + if((isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))){ + $bearbeiter = $this->app->DB->real_escape_string($this->app->User->GetName()); + } + } + $text = $this->app->DB->real_escape_string($text); + $this->app->DB->Insert("INSERT INTO auftrag_protokoll (id,auftrag,zeit,bearbeiter,grund) VALUES + ('','$id',NOW(),'".$bearbeiter."','$text')"); + } + + function AngebotProtokoll($id,$text) + { + if(!$id)return; + $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; + $text = $this->app->DB->real_escape_string($text); + $this->app->DB->Insert("INSERT INTO angebot_protokoll (id,angebot,zeit,bearbeiter,grund) VALUES + ('','$id',NOW(),'".$bearbeiter."','$text')"); + } + + function BestellungProtokoll($id,$text) + { + $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; + $text = $this->app->DB->real_escape_string($text); + $this->app->DB->Insert("INSERT INTO bestellung_protokoll (id,bestellung,zeit,bearbeiter,grund) VALUES + ('','$id',NOW(),'".$bearbeiter."','$text')"); + } + + function RechnungProtokoll($id,$text) + { + if(!$id)return; + $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; + $text = $this->app->DB->real_escape_string($text); + $this->app->DB->Insert("INSERT INTO rechnung_protokoll (id,rechnung,zeit,bearbeiter,grund) VALUES + ('','$id',NOW(),'".$bearbeiter."','$text')"); + } + + function GutschriftProtokoll($id,$text) + { + if(!$id)return; + $bearbeiter = (isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))?$this->app->DB->real_escape_string($this->app->User->GetName()):''; + $text = $this->app->DB->real_escape_string($text); + $this->app->DB->Insert("INSERT INTO gutschrift_protokoll (id,gutschrift,zeit,bearbeiter,grund) VALUES + ('','$id',NOW(),'$bearbeiter','$text')"); + } + + + function LoadArbeitsnachweisStandardwerte($id,$adresse,$projekt="") + { + /** @var Arbeitsnachweis $obj */ + $obj = $this->app->erp->LoadModul('arbeitsnachweis'); + if(!empty($obj) && method_exists($obj, 'LoadArbeitsnachweisStandardwerte')) { + $obj->LoadArbeitsnachweisStandardwerte($id,$adresse,$projekt); + } + } + + + function LoadInventurStandardwerte($id,$adresse,$projekt="") + { + /** @var Inventur $obj */ + $obj = $this->LoadModul('inventur'); + if(!empty($obj) && method_exists($obj, 'LoadInventurStandardwerte')) + { + $obj->LoadInventurStandardwerte($id,$adresse,$projekt); + } + } + + function KundeHatZR($adresse) + { + $verband = $this->GetVerband($adresse); + $zr = $this->app->DB->Select("SELECT zentralregulierung FROM gruppen WHERE id='$verband' LIMIT 1"); + + return $zr=='1'; + } + + function GetVerbandName($gruppe) + { + return $this->app->DB->Select("SELECT CONCAT(kennziffer,' ',name) FROM gruppen WHERE id='$gruppe' LIMIT 1"); + } + + function GetVerband($adresse) + { + return $this->app->DB->Select("SELECT g.id FROM adresse_rolle a INNER JOIN gruppen g ON g.id=a.parameter WHERE + (a.bis='0000-00-00' OR a.bis >=NOW()) AND a.adresse='$adresse' AND a.objekt='Gruppe' AND (g.art='verband' OR g.art='preisgruppe') AND g.aktiv = 1 LIMIT 1"); + } + + function LoadAnfrageStandardwerte($id,$adresse,$projekt="") + { + // standard adresse von lieferant + $arr = $this->app->DB->SelectArr("SELECT *,vertrieb as vertriebid,innendienst as bearbeiterid,'' as bearbeiter FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + + $arr[0]['gruppe'] = $this->GetVerband($adresse); + $field = array('anschreiben','name','abteilung','typ','unterabteilung','strasse','adresszusatz','plz','ort','land','ustid','email','telefon','telefax', + 'kundennummer','projekt','gruppe','vertriebid','bearbeiterid','bearbeiter','titel'); + + foreach($field as $key=>$value) + { + + if($value=="projekt" && $this->app->Secure->POST[$value]!="") + { + if(!is_numeric($this->app->Secure->POST[$value])) + { + $uparr[$value] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung <> '' AND abkuerzung = '".$this->app->DB->real_escape_string($this->app->Secure->POST[$value])."' AND (geloescht = 0 OR isnull(geloescht)) LIMIT 1"); + }else{ + $uparr[$value] = $this->app->Secure->POST[$value]; + } + } else { + if($value == 'bearbeiterid' || $value=='bearbeiter') + { + if($arr[0]['bearbeiterid'])$this->app->Secure->POST[$value] = $arr[0][$value]; + if($arr[0]['bearbeiterid'])$uparr[$value] = $arr[0][$value]; + }else{ + $this->app->Secure->POST[$value] = $arr[0][$value]; + $uparr[$value] = $arr[0][$value]; + } + } + } + + if($projekt!="") { + $this->app->Secure->POST['projekt'] = $projekt; + $uparr['projekt'] = $this->app->Secure->POST['projekt']; + } + + $uparr['adresse']=$adresse; + $this->app->DB->UpdateArr("anfrage",$id,"id",$uparr,true); + $this->LoadAdresseStandard("anfrage",$id,$adresse); + } + + function LoadPreisanfrageStandardwerte($id,$adresse,$projekt="") + { + /** @var Preisanfrage $obj */ + $obj = $this->app->erp->LoadModul('preisanfrage'); + if(!empty($obj) && method_exists($obj,'LoadPreisanfrageStandardwerte')) { + $obj->LoadPreisanfrageStandardwerte($id,$adresse,$projekt); + } + } + + + function LoadProformarechnungStandardwerte($id,$adresse,$projekt="") + { + // standard adresse von lieferant + $arr = $this->app->DB->SelectArr("SELECT *,zollinformationen as verzollinformationen,if(zollinformationen!='',1,0) as verzollungadresse FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + + $field = array('anschreiben','name','abteilung','typ','unterabteilung','strasse','adresszusatz','plz','ort','land','ustid','email','telefon','telefax', + 'kundennummer','projekt','ust_befreit','lieferbedingung','titel','gln','verzollinformationen','verzollungadresse','zahlungsweise','zahlungszieltage','zahlungszieltageskonto','zahlungszielskonto'); + + foreach($field as $key=>$value) + { + + if($value=="projekt" && $this->app->Secure->POST[$value]!="") + { + if(!is_numeric($this->app->Secure->POST[$value])) + { + $uparr[$value] = $this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung <> '' AND abkuerzung = '".$this->app->DB->real_escape_string($this->app->Secure->POST[$value])."' AND (geloescht = 0 OR isnull(geloescht)) LIMIT 1"); + }else{ + $uparr[$value] = $this->app->Secure->POST[$value]; + } + } else { + $this->app->Secure->POST[$value] = $arr[0][$value]; + $uparr[$value] = $arr[0][$value]; + } + } + + if($this->Firmendaten("proformarechnung_ohnebriefpapier")=="1") + $uparr['ohne_briefpapier'] = "1"; + + if($projekt!="") { + $this->app->Secure->POST['projekt'] = $projekt; + $uparr['projekt'] = $this->app->Secure->POST['projekt']; + } + $this->LoadZahlungsweise($adresse,$uparr); + + + $uparr['adresse']=$adresse; + $this->app->DB->UpdateArr("proformarechnung",$id,"id",$uparr,true); + $this->LoadAdresseStandard("proformarechnung",$id,$adresse); + } + + + /** + * @deprecated + */ + function LoadKalkulationStandardwerte($id,$adresse,$projekt="") + { + $obj = $this->LoadModul('kalkulation'); + if(!empty($obj) && method_exists($obj,'LoadKalkulationStandardwerte')) + { + return $obj->LoadKalkulationStandardwerte($id,$adresse,$projekt); + } + } + + /** + * @deprecated + */ + public function LoadReisekostenStandardwerte($id,$adresse,$projekt="") + { + /** @var Reisekosten $obj */ + $obj = $this->LoadModul('reisekosten'); + if(!empty($obj) && method_exists($obj, 'LoadReisekostenStandardwerte')) + { + $obj->LoadReisekostenStandardwerte($id,$adresse,$projekt); + } + } + + function LoadRetoureStandardwerte($id,$adresse,$lieferantenretoure=false) + { + // standard adresse von lieferant + $arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + $field = array('anschreiben','name','abteilung','unterabteilung','strasse','adresszusatz','plz','ort','land','bundesstaat','ustid','email','telefon','telefax','kundennummer','projekt','ust_befreit','typ','titel','lieferbedingung'); + + + $rolle_projekt = $this->app->DB->Select("SELECT parameter FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='Kunde' AND objekt='Projekt' AND (bis ='0000-00-00' OR bis <= NOW()) LIMIT 1"); + + if($rolle_projekt > 0) + { + $arr[0]['projekt'] = $rolle_projekt; + } + + foreach($field as $key=>$value) + { + + if($value=="projekt" && $this->app->Secure->POST[$value]!="" && 0) + { + $uparr[$value] = $this->app->Secure->POST[$value]; + } else { + $this->app->Secure->POST[$value] = str_replace("'", ''',$arr[0][$value]); + $uparr[$value] = str_replace("'", ''',$arr[0][$value]); + } + + } + $uparr['adresse']=$adresse; + + if($lieferantenretoure) + { + $uparr['lieferant']=$adresse; + $uparr['lieferantenretoure'] = 1; + } + + $this->app->DB->UpdateArr("retoure",$id,"id",$uparr,true); + $uparr=null; + + //liefernantenvorlage + $arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); + + // falls von Benutzer projekt ueberladen werden soll + $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + if($projekt_bevorzugt=="1") + { + $uparr['projekt'] = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + $arr[0]['projekt'] = $uparr['projekt']; + $this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr[0]['projekt']."' AND id > 0 LIMIT 1"); + } + + $field = array('versandart'); + foreach($field as $key=>$value) + { + $uparr[$value] = $arr[0][$value]; + $this->app->Secure->POST[$value] = $arr[0][$value]; + } + if($uparr['versandart']=="") + $uparr['versandart']=$this->StandardVersandart($arr[0]['projekt']); + + $this->app->DB->UpdateArr('retoure', $id, 'id', $uparr, true); + + $this->LoadStandardLieferadresse($adresse,$id,"retoure"); + $this->LoadAdresseStandard("retoure",$id,$adresse); + $this->RunHook('erpapi_loadretourestandardwerte',2, $id, $adresse); + } + + function LoadLieferscheinStandardwerte($id,$adresse,$lieferantenretoure=false) + { + $obj = $this->LoadModul('lieferschein'); + if(!empty($obj) && method_exists($obj, 'LoadLieferscheinStandardwerte')){ + $obj->LoadLieferscheinStandardwerte($id,$adresse,$lieferantenretoure); + } + } + + + /** + * @param string $modul + * @param int $id + */ + public function InfoAuftragsErfassung($modul,$id) + { + if(empty($modul) || empty($id)) { + return; + } + $adresse = $this->app->DB->Select( + sprintf('SELECT `adresse` FROM `%s` WHERE `id` = %d LIMIT 1', $modul, $id) + ); + + $this->app->YUI->CkEditor('readonlybox','none'); + $infoauftragserfassung = $this->app->DB->Select( + sprintf('SELECT `infoauftragserfassung` FROM `adresse` WHERE `id`= %d LIMIT 1', $adresse) + ); + $this->app->Tpl->Set( + 'INFOFUERAUFTRAGSERFASSUNG', + "
Info für Angebots- und Auftragserfassung +
" + ); + } + + function MarkerUseredit($feld1,$useredittimestamp) + { + $usereditid = str_replace("useredittimestamp","usereditid",$useredittimestamp); + + return "CONCAT($feld1,' ',IFNULL(if(TIME_TO_SEC(TIMEDIFF(NOW(), $useredittimestamp)) < 45,CONCAT('
(in Bearbeitung von ', (SELECT a2.name FROM user u2 LEFT JOIN adresse a2 ON a2.id=u2.adresse WHERE u2.id=$usereditid LIMIT 1),')'),''),''))"; + } + + function TimeoutUseredit($smodule,$sid,$user) + { + $sid = (int)$sid; + if($sid <= 0)return; + $smodulea = explode(' ',$smodule); + $smodule = $smodulea[0]; + if(!preg_match('/^[a-zA-Z0-9\_]*$/',$smodule,$trefer)) + { + $smodule = ''; + } + if($smodule==='')return; + if(!in_array($smodule, + array('adresse', 'anfrage', 'angebot', 'arbeitsnachweis', 'artikel', 'auftrag', 'bestellung', 'gutschrift', 'inventur', 'lieferschein', 'preisanfrage', 'produktion', 'proformarechnung', 'rechnung', 'retoure', 'spedition') + ))return; + $this->app->DB->Update("UPDATE $smodule SET useredittimestamp=NOW(),usereditid='$user' WHERE id = '$sid' AND (usereditid='$user' OR ifnull(useredittimestamp,'0000-00-00 00:00:00') = '0000-00-00 00:00:00' OR TIME_TO_SEC(TIMEDIFF(NOW(), useredittimestamp)) > 30) LIMIT 1"); + if(!$this->app->DB->error())return;//Bruno 14.12.17 Querys sparen aber bei Fehler altes Verhalten + $useredittimestamp = $this->app->DB->Select("SELECT useredittimestamp FROM $smodule WHERE id='$sid' LIMIT 1"); + if($useredittimestamp=="0000-00-00 00:00:00" || $useredittimestamp=="") + { + $this->app->DB->Select("UPDATE $smodule SET useredittimestamp=NOW(),usereditid='".$user."' WHERE id='$sid' LIMIT 1"); + } + + // nur wenn timediff > 10 + $timediff = $this->app->DB->Select("SELECT TIME_TO_SEC(TIMEDIFF(NOW(), useredittimestamp)) FROM $smodule WHERE id='$sid' LIMIT 1"); + $timeuser = $this->app->DB->Select("SELECT usereditid FROM $smodule WHERE id='$sid' LIMIT 1"); + if($timeuser == $user) + { + $this->app->DB->Select("UPDATE $smodule SET useredittimestamp=NOW() WHERE id='$sid' LIMIT 1"); + } else + { + if($timediff>30) + $this->app->DB->Select("UPDATE $smodule SET useredittimestamp=NOW(),usereditid='$user' WHERE id='$sid' LIMIT 1"); + } + } + + function DisableModul($modul, $id, $backlink='') + { + // Prüfen ob Backlink mit index.php? beginnt; ansonsten ist Open Redirect möglich + if (!empty($backlink) && strpos($backlink, 'index.php?') !== 0) { + unset($backlink); + } + + $user = $this->app->DB->Select("SELECT usereditid FROM $modul WHERE id='$id' LIMIT 1"); + if($this->app->DB->error())return false; + $user_adresse = $this->app->DB->Select("SELECT adresse FROM user WHERE id='$user' LIMIT 1"); + $user_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$user_adresse' LIMIT 1"); + + $this->TimeoutUseredit($modul,$id,$this->app->User->GetID()); + + $timeuser = $this->app->DB->Select("SELECT usereditid FROM $modul WHERE id='$id' LIMIT 1"); + if($timeuser==$this->app->User->GetID() || $timeuser=="") // heute wieder aus dem kommentar in echten quelltext genommen + { + return false; + } else if ($user_adresse > 0) { + + if($this->RechteVorhanden("welcome","unlock")) + { + $id = $this->app->Secure->GetGET("id"); + $open = ""; + } else { + $this->SystemLog("Fehlendes Recht",1,"","welcome","unlock"); + } + + $this->app->Tpl->Set('TAB1',"
Achtung dieses Dokument wird aktuell durch Mitarbeiter: $user_name bearbeitet! $open
"); + $this->app->Tpl->Parse('PAGE',"tabview.tpl"); + return true; + } + + } + + function LockModule($modul = null, $action = null) + { + if(is_null($modul))$modul = $this->app->Secure->GetGET("module"); + if(is_null($action))$action = $this->app->Secure->GetGET("action"); + //in Modul + //if($this->app->erp->LockModul())return; + //benutzen + $time = microtime(true); + $salt = md5(microtime(true)); + $saltjs = ' + + var lockalert = false; + var lockstarttime = '.$time.'; + setInterval(function(){ + lockstarttime = lockstarttime + 1; + },1000 + ); + $(document).ready(function() { + $( window ).unload(function() { + $.ajax({ + url: "index.php?module=ajax&action=moduleunlock&salt='.$salt.'" + }); + }); + window.addEventListener("beforeunload", function(event) { + $.ajax({ + url: "index.php?module=ajax&action=moduleunlock&salt='.$salt.'" + }); + }); + + if(typeof(Storage) !== "undefined") { + // Code for localStorage/sessionStorage. + setInterval(function(){ + + + + if(!localStorage.getItem("lockedmodule")) + { + var data = new Object(); + localStorage.setItem("lockedmodule",JSON.stringify(data)); + + + } + + + + + //if(localStorage.getItem("lockedmodule")){ + + var lockstr = localStorage.getItem("lockedmodule"); + if(lockstr.indexOf("[") > -1) + { + var data = new Object(); + localStorage.setItem("lockedmodule",JSON.stringify(data)); + lockstr = localStorage.getItem("lockedmodule"); + } + var lockedmodule = JSON.parse(lockstr); + if(typeof(lockedmodule["'.$modul.'"]) === "undefined") + { + lockedmodule.'.$modul.' = new Object(); + } + if(typeof(lockedmodule.'.$modul.'.'.$action.') === "undefined") + { + lockedmodule.'.$modul.'.'.$action.' = new Object(); + } + lockedmodule.'.$modul.'.'.$action.'.x'.$salt.' = lockstarttime; + + var ar = lockedmodule.'.$modul.'.'.$action.'; + var k; + for (k in ar) { + var v = ar[k]; + if(k === "x'.$salt.'") + { + lockedmodule.'.$modul.'.'.$action.'.x'.$salt.' = lockstarttime; + + }else{ + if(v > lockstarttime - 1) + { + if(!lockalert){ + lockalert = true; + alert("Sie haben noch ein Tab mit diesem Modul offen!"); + } + } + if(v < lockstarttime - 10) + { + + } + } + + } + var lstr = JSON.stringify(lockedmodule); + localStorage.setItem("lockedmodule", JSON.stringify(lockedmodule)); + + + },1000); + + + } else { + // Sorry! No Web Storage support.. + } + + }); + '; + + if($this->app->Secure->GetPOST("unlock")) + { + if($this->app->erp->RechteVorhanden("welcome","unlock")){ + $this->app->DB->Delete("DELETE FROM module_lock where module like '".addslashes($modul)."' and action like '".addslashes($action)."'"); + } + } + + if($locked = $this->app->DB->SelectRow("SELECT *, now() as aktzeit from module_lock where module like '".addslashes($modul)."' and action like '".addslashes($action)."' limit 1")) + { + if($locked['userid'] && $locked['userid'] != $this->app->User->GetID() && strtotime($locked['aktzeit']) - strtotime($locked['zeit']) < 300) + { + $user_adresse = $this->app->DB->Select("SELECT adresse FROM user WHERE id='",$locked['userid']."' LIMIT 1"); + $user_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$user_adresse' LIMIT 1"); + if($this->RechteVorhanden("welcome","unlock")) + { + $id = $this->app->Secure->GetGET("id"); + //$open = ""; + $open = '
'; + } else { + $this->SystemLog("Fehlendes Recht",1,"","welcome","unlock"); + } + + $this->app->Tpl->Set('TAB1',"
Achtung dieses Modul wird aktuell durch Mitarbeiter: $user_name bearbeitet! $open
"); + $this->app->Tpl->Parse('PAGE',"tabview.tpl"); + return true; + } + + $this->app->DB->Update("UPDATE module_lock set zeit = now(), userid = ".$this->app->User->GetID().", salt = '".$salt."' where module like '".addslashes($modul)."' and action like '".addslashes($action)."'"); + $this->app->Tpl->Add('JAVASCRIPT',$saltjs); + } else { + + $this->app->DB->Insert("INSERT INTO module_lock (module, action, userid, salt, zeit) values ('".addslashes($modul)."','".addslashes($action)."','".$this->app->User->GetID()."','".$salt."', now())"); + $this->app->Tpl->Add('JAVASCRIPT',$saltjs); + } + return false; + } + + /** + * @param int $adresse + * @param int $id + * @param string $type + * @param int $lieferadressenId + */ + public function LoadStandardLieferadresse($adresse,$id,$type, $lieferadressenId = 0) + { + if($lieferadressenId > 0) { + $standardlieferadresse = $this->app->DB->SelectArr( + sprintf( + 'SELECT * FROM lieferadressen WHERE (adresse=%d OR adresse = 0) AND id=%d LIMIT 1', + $adresse, $lieferadressenId + ) + ); + } + else{ + $standardlieferadresse = $this->app->DB->SelectArr("SELECT * FROM lieferadressen WHERE adresse='$adresse' AND standardlieferadresse='1' LIMIT 1"); + } + + if($standardlieferadresse[0]['id'] > 0) + { + foreach($standardlieferadresse[0] as $k => $v)$standardlieferadresse[0][$k] = $this->app->DB->real_escape_string($v); + switch($type) + { + case "angebot": + case "auftrag": + $this->app->DB->Update("UPDATE $type SET abweichendelieferadresse='1', + liefername='".$standardlieferadresse[0]['name']."', + lieferabteilung='".$standardlieferadresse[0]['abteilung']."', + lieferunterabteilung='".$standardlieferadresse[0]['unterabteilung']."', + lieferland='".$standardlieferadresse[0]['land']."', + lieferstrasse='".$standardlieferadresse[0]['strasse']."', + lieferort='".$standardlieferadresse[0]['ort']."', + lieferplz='".$standardlieferadresse[0]['plz']."', + lieferadresszusatz='".$standardlieferadresse[0]['adresszusatz']."', + lieferansprechpartner='".$standardlieferadresse[0]['ansprechpartner']."' + WHERE id='$id' LIMIT 1"); + if($standardlieferadresse[0]['ustid']!="") $this->app->DB->Update("UPDATE $type SET ustid = '".$standardlieferadresse[0]['ustid']."' WHERE id='$id' LIMIT 1"); + if($standardlieferadresse[0]['ust_befreit']!="") $this->app->DB->Update("UPDATE $type SET ust_befreit = '".$standardlieferadresse[0]['ust_befreit']."' WHERE id='$id' LIMIT 1"); + if($standardlieferadresse[0]['lieferbedingung']!="") $this->app->DB->Update("UPDATE $type SET lieferbedingung = '".$standardlieferadresse[0]['lieferbedingung']."' WHERE id='$id' LIMIT 1"); + if($type == 'auftrag')$this->app->DB->Update("UPDATE $type SET liefergln = '".$standardlieferadresse[0]['gln']."' WHERE id='$id' LIMIT 1"); + if($type == 'auftrag')$this->app->DB->Update("UPDATE $type SET lieferemail = '".$standardlieferadresse[0]['email']."' WHERE id='$id' LIMIT 1"); + if($type == 'auftrag')$this->app->DB->Update("UPDATE $type SET lieferbundesstaat = '".$standardlieferadresse[0]['bundesstaat']."' WHERE id='$id' LIMIT 1"); + break; + case "lieferschein": + $this->app->DB->Update("UPDATE lieferschein SET + name='".$standardlieferadresse[0]['name']."', + abteilung='".$standardlieferadresse[0]['abteilung']."', + unterabteilung='".$standardlieferadresse[0]['unterabteilung']."', + land='".$standardlieferadresse[0]['land']."', + strasse='".$standardlieferadresse[0]['strasse']."', + ort='".$standardlieferadresse[0]['ort']."', + plz='".$standardlieferadresse[0]['plz']."', + adresszusatz='".$standardlieferadresse[0]['adresszusatz']."', + lieferbedingung='".$standardlieferadresse[0]['lieferbedingung']."', + ansprechpartner='".$standardlieferadresse[0]['ansprechpartner']."' + WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE $type SET gln = '".$standardlieferadresse[0]['gln']."' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE $type SET bundesstaat = '".$standardlieferadresse[0]['bundesstaat']."' WHERE id='$id' LIMIT 1"); + break; + + } + } + } + + function DisableVerband() + { + $module = $this->app->Secure->GetGET('module'); + $id = $this->app->Secure->GetGET('id'); + if($id <= 0 || !in_array($module,['angebot', 'auftrag', 'rechnung', 'gutschrift'])) { + return; + } + if($module=="angebot" || $module=="auftrag" || $module=="rechnung" || $module=="gutschrift") + { + $docArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT realrabatt, gruppe, adresse FROM `%s`WHERE id = %d', + $module, $id + ) + ); + + $rabatt = !empty($docArr)?$docArr['realrabatt']: $this->app->DB->Select("SELECT realrabatt FROM $module b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1"); + $gruppe = !empty($docArr)?$docArr['gruppe']:$this->app->DB->Select("SELECT gruppe FROM $module b WHERE b.id='$id' LIMIT 1"); + $adresse = !empty($docArr)?$docArr['adresse']:$this->app->DB->Select("SELECT adresse FROM $module WHERE id='$id' LIMIT 1"); + $rabatte_festschreiben = $this->app->DB->Select("SELECT rabatte_festschreiben FROM adresse WHERE id='".$adresse."' LIMIT 1"); + if($rabatt > 0 && $gruppe > 0)//CLAUDI && $this->Firmendaten("modul_verband")=="1") + { + if($rabatte_festschreiben=='1' && $gruppe<=0){ + $this->app->Tpl->Set('RABATTANZEIGE', "
Kundenrabatt: $rabatt%"); + } + else { + if($this->Firmendaten('modul_verband')=='1') //CLAUDI + { + $this->app->Tpl->Set('RABATTANZEIGE',"
Verbandsrabatt: $rabatt%"); + } + else { + $this->app->Tpl->Set('RABATTANZEIGE',"
Preisgruppenrabatt: $rabatt%"); + } + } + } else { + $this->app->Tpl->Set('STARTDISABLEVERBAND',""); + } + + //if(($rabatte_festschreiben!="1" && $gruppe > 0) || $gruppe > 0) // ANZEIGE VERBAND wenn definiert + if($gruppe > 0) { + $gruppenArr = $this->app->DB->SelectRow( + sprintf( + "SELECT CONCAT(name,' ',kennziffer) AS name, internebemerkung + FROM gruppen + WHERE id=%d", + $gruppe + ) + ); + $gruppe = !empty($docArr)?$docArr['gruppe']:$this->app->DB->Select("SELECT gruppe FROM $module WHERE id='$id' LIMIT 1"); + $gruppe_name = !empty($gruppenArr)?$gruppenArr['name']: $this->app->DB->Select("SELECT CONCAT(name,' ',kennziffer) FROM gruppen WHERE id='$gruppe' LIMIT 1"); + $gruppeinternebemerkung = !empty($gruppenArr)?$gruppenArr['internebemerkung']:$this->app->DB->Select("SELECT internebemerkung FROM gruppen WHERE id='$gruppe' LIMIT 1"); + $this->app->Tpl->Set('VERBANDINFO',""); + } + else { + $gruppe_name = ''; + $rabattinformation = $this->app->DB->Select("SELECT rabattinformation FROM adresse WHERE id='$adresse' LIMIT 1"); + $this->app->Tpl->Set('VERBANDINFO',""); + } + + if($this->RechteVorhanden($module,'deleterabatte')) { + $this->app->Tpl->Set('VERBAND'," "); + } + else { + $this->app->Tpl->Set('VERBAND',""); + } + } + } + + + // prueft ob adresse eine filiale ist wenn wird der beleg gekennzeichnet + function LoadAdresseProjektfiliale($table,$id,$adresse) + { + $check = $this->app->DB->Select("SELECT id FROM projekt WHERE filialadresse='$adresse' LIMIT 1"); + if($check > 0) + { + $this->app->DB->Update("UPDATE $table SET projektfiliale=1 WHERE id='$id'"); + } else { + $this->app->DB->Update("UPDATE $table SET projektfiliale=0 WHERE id='$id'"); + } + } + + function LoadAdresseStandard($table,$id,$adresse) + { + + if($table=="auftrag" || $table=="rechnung" || $table=="gutschrift" || $table=="lieferschein" || $table=="anfrage" || $table=="produktion" || $table=="bestellung" || $table=="preisanfrage" || $table=="proformarechnung" || $table=="angebot") + { + $firma = $this->app->DB->Select("SELECT firma FROM $table WHERE id='$id' LIMIT 1"); + if($firma <=0) + { + $firma = $this->app->DB->Select("SELECT MAX(f.id) FROM firma f INNER JOIN firmendaten fd ON f.id = fd.firma LIMIT 1"); + if(!$firma)$firma = $this->app->DB->Select("SELECT max(id) FROM firma LIMIT 1"); + if($firma<=0)$firma = $this->app->DB->Select("SELECT MAX(id) FROM firma LIMIT 1"); + $this->app->DB->Update("UPDATE $table SET firma='$firma' WHERE id='$id' LIMIT 1"); + } + //Sprache + $sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id = '$adresse' LIMIT 1"); + + if($sprache)$this->app->DB->Update("UPDATE $table SET sprache = '".$this->app->DB->real_escape_string($sprache)."' WHERE id = '$id' LIMIT 1"); + if($table == "auftrag" || $table == "rechnung" || $table == "gutschrift" || $table == "lieferschein" || $table == "angebot" || $table=="proformarechnung") + { + $kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id = '$adresse' LIMIT 1"); + + if($kundennummer)$this->app->DB->Update("UPDATE $table SET kundennummer = '".$this->app->DB->real_escape_string($kundennummer)."' WHERE id = '$id' LIMIT 1"); + + }elseif($table == "bestellung") + { + $kundennummerlieferant = $this->app->DB->Select("SELECT kundennummerlieferant FROM adresse WHERE id = '$adresse' LIMIT 1"); + if($kundennummerlieferant)$this->app->DB->Update("UPDATE $table SET kundennummerlieferant = '".$this->app->DB->real_escape_string($kundennummerlieferant)."' WHERE id = '$id' LIMIT 1"); + } + + $this->LoadAdresseProjektfiliale($table,$id,$adresse); + + $checkemail = $this->app->DB->Select("SELECT ".($table==='rechnung' || $table === 'proformarechnung'?'rechnungs':$table)."_email FROM adresse WHERE id='$adresse' LIMIT 1"); + if($checkemail!="") $this->app->DB->Update("UPDATE $table SET email='$checkemail' WHERE id='$id' LIMIT 1"); + } + } + + function LoadAuftragStandardwerte($id,$adresse,$lieferantenauftrag=false) + { + // standard adresse von lieferant + $arr = $this->app->DB->SelectArr("SELECT *,vertrieb as vertriebid,'' as bearbeiter,innendienst as bearbeiterid FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + + if($arr[0]['bearbeiterid'] <=0 ) + $arr[0]['bearbeiterid'] = $this->app->User->GetAdresse(); + + $arr[0]['gruppe'] = $this->GetVerband($adresse); + $field = array('anschreiben','name','vorname','abteilung','ansprechpartner','unterabteilung','strasse','adresszusatz','plz','ort','land','bundesstaat','ustid','email','telefon','telefax','kundennummer','projekt','ust_befreit','gruppe','typ','vertriebid','bearbeiter','gln','bearbeiterid','titel','lieferbedingung'); + + + $rolle_projekt = $this->app->DB->Select("SELECT parameter FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='Kunde' AND objekt='Projekt' AND (bis ='0000-00-00' OR bis <= NOW()) LIMIT 1"); + + if($rolle_projekt > 0) + { + $arr[0]['projekt'] = $rolle_projekt; + } + + + foreach($field as $key=>$value) + { + if($value=="projekt" && $this->app->Secure->POST[$value]!="" && 0) // immer projekt von adresse + { + $uparr[$value] = str_replace("'", ''',$this->app->Secure->POST[$value]); + } else { + $this->app->Secure->POST[$value] = $arr[0][$value]; + $uparr[$value] = str_replace("'", ''',$arr[0][$value]); + } + } + + + $uparr['adresse']=$adresse; + if($lieferantenauftrag) $uparr['lieferant']=$adresse; + + $this->app->DB->UpdateArr("auftrag",$id,"id",$uparr,true); + $uparr=null; + + //liefernantenvorlage + $arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); + if($lieferantenauftrag && $arr) $arr[0]['lieferantkdrnummer']=$arr[0]['lieferantennummer']; + if(!$lieferantenauftrag && $arr) $arr[0]['lieferantkdrnummer']=$arr[0]['kundennummer']; + // falls von Benutzer projekt ueberladen werden soll + $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + if($projekt_bevorzugt=="1") + { + $uparr['projekt'] = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + $arr[0]['projekt'] = $uparr['projekt']; + $arr[0]['standardlager'] = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id='".$uparr['projekt']."' LIMIT 1"); + $this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr[0]['projekt']."' AND id > 0 LIMIT 1"); + } + + $field = array('zahlungsweise','zahlungszieltage','zahlungszieltageskonto','zahlungszielskonto','versandart'); + + $this->LoadZahlungsweise($adresse,$arr); + + if($arr[0]['versandart']==''){ + $arr[0]['versandart'] = $this->StandardVersandart($arr[0]['projekt']); + } + + $this->app->Secure->POST['zahlungsweise'] = strtolower($arr[0]['zahlungsweise']); + $this->app->Secure->POST['zahlungszieltage'] = strtolower($arr[0]['zahlungszieltage']); + $this->app->Secure->POST['zahlungszieltageskonto'] = strtolower($arr[0]['zahlungszieltageskonto']); + $this->app->Secure->POST['zahlungszielskonto'] = strtolower($arr[0]['zahlungszielskonto']); + $this->app->Secure->POST['versandart'] = strtolower($arr[0]['versandart']); + + foreach($arr[0] as $k => $v) + { + if(strpos((String)$v, "'") !== false)$arr[0][$k] = str_replace("'", ''',$v); + } + if(isset($arr[0]['usereditid']))unset($arr[0]['usereditid']); + $this->app->DB->UpdateArr("auftrag",$id,"id",$arr[0], true); + + // must after called after UpdateArr auftrag because ustid can overridden by StandardLieferadresse + $this->LoadStandardLieferadresse($adresse,$id,"auftrag"); + + $this->LoadSteuersaetzeWaehrung($id,"auftrag"); + + $this->LoadAdresseStandard("auftrag",$id,$adresse); + $this->app->DB->Update(" + UPDATE auftrag a + INNER JOIN adresse adr ON a.lieferant = adr.id + SET a.lieferantkdrnummer = if(a.lieferantennummer <> '',a.lieferantennummer,adr.lieferantennummer) + WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 1 AND a.id = '$id' + "); + $this->app->DB->Update(" + UPDATE auftrag a + INNER JOIN adresse adr ON a.adresse = adr.id + SET a.lieferantkdrnummer = if(a.kundennummer <> '',a.kundennummer, adr.kundennummer) + WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 0 AND a.id = '$id' + "); + if($arr[0]['art'])$this->app->DB->Update("UPDATE auftrag SET art = '".$this->app->DB->real_escape_string($arr[0]['art'])."' WHERE id = '$id' LIMIT 1"); + + + $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' LIMIT 1"); + $deactivateAutoversand = (int)$this->app->erp->Projektdaten($projekt,'deactivateautoshipping'); + if($deactivateAutoversand) { + $this->app->DB->Update( + sprintf( + 'UPDATE auftrag SET autoversand = 0 WHERE schreibschutz = 0 AND id = %d', + $id + ) + ); + }else{ + $this->app->DB->Update( + sprintf( + 'UPDATE auftrag SET autoversand = 1 WHERE schreibschutz = 0 AND id = %d', + $id + ) + ); + } + + $this->AuftragEinzelnBerechnen($id); + $this->RunHook('erpapi_loadauftragstandardwerte',3, $id, $adresse, $lieferantenauftrag); + } + + function GetKategorienbaum(&$baum, $parent = 0, $lvl = 0, $shop = 0) + { + if($lvl > 30)return; + $sprachen = $this->GetSelectSprachenListe(true); + $elemente = $this->app->DB->SelectArr("SELECT ak.id, ak.parent, ak.bezeichnung, sk.extid FROM artikelkategorien ak + LEFT JOIN `shopexport_kategorien` sk ON ak.id = sk.kategorie AND sk.shop = '$shop' AND sk.shop > 0 AND sk.aktiv = 1 + WHERE (ak.geloescht = 0 OR isnull(ak.geloescht)) AND ak.parent = '$parent' ORDER BY ak.bezeichnung"); + if($elemente) + { + foreach($elemente as $el) + { + $el['lvl'] = $lvl; + $uebersetzungen = $this->app->DB->SelectArr("SELECT beschriftung,sprache FROM uebersetzung WHERE label='kategorie_".$el['id']."'"); + $texte = array(); + if(is_array($uebersetzungen)){ + foreach ($uebersetzungen as $index => $sprachenarray){ + $kategoriesprache = $sprachenarray['sprache']; + if(array_key_exists(ucfirst($sprachenarray['sprache']),$sprachen)){ + $kategoriesprache = $sprachen[ucfirst($sprachenarray['sprache'])]; + } + $texte[$kategoriesprache] = $sprachenarray['beschriftung']; + } + } + $el['texte'] = $texte; + $baum[] = $el; + $this->GetKategorienbaum($baum, $el['id'], $lvl + 1, $shop); + } + } + } + + function LoadZahlungsweise($adresse,&$arr) + { + //$arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); + + if($arr[0]['zahlungsweise']=="") + $arr[0]['zahlungsweise']=$this->Firmendaten("zahlungsweise"); + + if($arr[0]['zahlungsweise']=="") + $arr[0]['zahlungsweise']="vorkasse"; + + if($arr[0]['zahlungszieltage']==="" && $arr[0]['zahlungsweise']=="rechnung") + $arr[0]['zahlungszieltage']=$this->ZahlungsZielTage(); + + if($arr[0]['zahlungszieltageskonto']==="" && $arr[0]['zahlungsweise']=="rechnung") + $arr[0]['zahlungszieltageskonto']=$this->ZahlungsZielTageSkonto(); + + if($arr[0]['zahlungszielskonto']==="" && $arr[0]['zahlungsweise']=="rechnung") + $arr[0]['zahlungszielskonto']=$this->ZahlungsZielSkonto(); + + } + + + function LoadAngebotStandardwerte($id,$adresse) + { + // standard adresse von lieferant + $arr = $this->app->DB->SelectArr("SELECT *,vertrieb as vertriebid,'' as bearbeiter,innendienst as bearbeiterid FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + + if($arr[0]['bearbeiterid'] <=0 ) + $arr[0]['bearbeiterid'] = $this->app->User->GetAdresse(); + + $arr[0]['gruppe'] = $this->GetVerband($adresse); + + $rolle_projekt = $this->app->DB->Select("SELECT parameter FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='Kunde' AND objekt='Projekt' AND (bis ='0000-00-00' OR bis <= NOW()) LIMIT 1"); + + if($rolle_projekt > 0) + { + $arr[0]['projekt'] = $rolle_projekt; + } + + $field = array('gln','anschreiben','name','abteilung','unterabteilung','strasse','adresszusatz','plz','ort','land','ustid','ust_befreit','email','telefon','telefax','projekt','ansprechpartner','gruppe','typ','vertriebid','bearbeiter','bearbeiterid','titel','lieferbedingung'); + foreach($field as $key=>$value) + { + if($value=="projekt" && $this->app->Secure->POST[$value]!="" && 0) + { + $uparr[$value] = str_replace("'", ''',$this->app->Secure->POST[$value]); + } else { + $this->app->Secure->POST[$value] = str_replace("'", ''',$arr[0][$value]); + $uparr[$value] = str_replace("'", ''',$arr[0][$value]); + } + } + $uparr['adresse'] = $adresse; + $this->app->DB->UpdateArr("angebot",$id,"id",$uparr,true); + $uparr=null; + + //liefernantenvorlage + $arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' LIMIT 1"); + $this->LoadZahlungsweise($adresse,$arr); + + if($arr[0]['versandart']==''){ + $arr[0]['versandart'] = $this->StandardVersandart($arr[0]['projekt']); + } + + // falls von Benutzer projekt ueberladen werden soll + $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + if($projekt_bevorzugt=="1") + { + $uparr['projekt'] = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + $arr[0]['projekt'] = $uparr['projekt']; + $arr[0]['standardlager'] = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id='".$uparr['projekt']."' LIMIT 1"); + $this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr[0]['projekt']."' AND id > 0 LIMIT 1"); + } + + $this->app->Secure->POST['zahlungsweise'] = strtolower($arr[0]['zahlungsweise']); + $this->app->Secure->POST['zahlungszieltage'] = strtolower($arr[0]['zahlungszieltage']); + $this->app->Secure->POST['zahlungszieltageskonto'] = strtolower($arr[0]['zahlungszieltageskonto']); + $this->app->Secure->POST['zahlungszielskonto'] = strtolower($arr[0]['zahlungszielskonto']); + $this->app->Secure->POST['versandart'] = strtolower($arr[0]['versandart']); + + if(isset($arr[0]['usereditid']))unset($arr[0]['usereditid']); + $this->app->DB->UpdateArr("angebot",$id,"id",$arr[0],true); + $this->LoadStandardLieferadresse($adresse,$id,"angebot"); + + $this->LoadSteuersaetzeWaehrung($id,"angebot"); + + $this->LoadAdresseStandard("angebot",$id,$adresse); + } + + function LoadGutschriftStandardwerte($id,$adresse) + { + $obj = $this->LoadModul('gutschrift'); + if(!empty($obj) && method_exists($obj,'LoadGutschriftStandardwerte')) + { + return $obj->LoadGutschriftStandardwerte($id, $adresse); + } + } + + + function BerechneDeckungsbeitrag($id,$typ,$extern=false) + { + + // mit rabatt beruecksichtigen + if($typ==='rechnung' || $typ==='gutschrift' || $typ==='auftrag' || $typ==='angebot') + { + $waehrungProjekt = $this->app->DB->SelectRow( + sprintf( + "SELECT waehrung, projekt,steuersatz_normal, steuersatz_ermaessigt + FROM `%s` + WHERE id=%d + LIMIT 1", + $typ, (int)$id + ) + ); + $waehrung = $waehrungProjekt['waehrung']; + $projectId = $waehrungProjekt['projekt']; + $steuersatzNormal = $waehrungProjekt['steuersatz_normal']; + $steuersatzErmaessigt = $waehrungProjekt['steuersatz_ermaessigt']; + $method = ucfirst($typ).'MitUmsatzsteuer'; + if(!method_exists($this, $method)) { + $method = ucfirst($typ).'MitUmsatzeuer'; + } + $mitumsatzsteuer = method_exists($this, $method)? $this->$method($id):true; + if(!$mitumsatzsteuer) { + $steuersatzNormal = 0; + $steuersatzErmaessigt = 0; + } + $preisberechnung = $this->Projektdaten($projectId,'preisberechnung'); + if($waehrung == '') { + $waehrung = 'EUR'; + } + $ohneeks = $this->app->DB->SelectArr("SELECT id, artikel, menge, preis, rabatt, ekwaehrung, einkaufspreis, waehrung FROM {$typ}_position ap WHERE $typ = '$id' "); + if($this->app->DB->error()){ + $ohneeks = $this->app->DB->SelectArr("SELECT id, artikel, menge, preis, rabatt, ekwaehrung, einkaufspreis FROM {$typ}_position ap WHERE $typ = '$id' "); + } + if(!empty($ohneeks)) + { + foreach($ohneeks as $ek) + { + if($ek['ekwaehrung']=='') + { + $originalwaehrung = $ek['waehrung']; + $originalpreis = $ek['preis']; + $ekpreis = (double)$this->GetEinkaufspreisWaehrung($ek['artikel'],$ek['menge'],$waehrung,$originalwaehrung, $originalpreis); + if($originalwaehrung == '')$originalwaehrung = 'EUR'; + switch($typ) + { + case "rechnung": $explodiertspalte = "explodiert_parent_artikel"; break; + default: $explodiertspalte = "explodiert_parent"; + } + $this->app->DB->Update("UPDATE {$typ}_position SET ekwaehrung = '$originalwaehrung', einkaufspreisurspruenglich = '$originalpreis', einkaufspreis = '$ekpreis' WHERE id = '".$ek['id']."' AND $explodiertspalte = 0 AND einkaufspreis=0 LIMIT 1"); + + }else{ + $ekpreis = $ek['einkaufspreis']; + } + $pdeckungsbeitrag = $ek['preis']*(100-$ek['rabatt'])/100; + $pdeckungsbeitrag = ($pdeckungsbeitrag != 0)?(($pdeckungsbeitrag - $ekpreis) / $pdeckungsbeitrag):1; + $this->app->DB->Update("UPDATE {$typ}_position SET deckungsbeitrag = '$pdeckungsbeitrag' WHERE id = '".$ek['id']."' LIMIT 1"); + } + if($preisberechnung == 3){ + $sql = sprintf( + 'UPDATE `%s` + SET umsatz_netto_einzeln = ROUND(preis * (1 - rabatt / 100),2), + umsatz_netto_gesamt = ROUND(menge * ROUND(preis * (1 - rabatt / 100),2), 2), + umsatz_brutto_einzeln = ROUND(preis * (1 - rabatt / 100),2) * + (1 + IF( + IFNULL(steuersatz,-1) < 0, + IF( + umsatzsteuer = \'befreit\', + 0, + IF(umsatzsteuer = \'ermaessigt\', + %f, + %f + ) + ), + steuersatz + ) / 100), + umsatz_brutto_gesamt = ROUND(menge * ROUND(preis * (1 - rabatt / 100),2), 2) * + (1 + IF( + IFNULL(steuersatz,-1) < 0, + IF( + umsatzsteuer = \'befreit\', + 0, + IF(umsatzsteuer = \'ermaessigt\', + %f, + %f + ) + ), + steuersatz + ) / 100) + WHERE `%s` = %d', + $typ . '_position', + $steuersatzErmaessigt, + $steuersatzNormal, + $steuersatzErmaessigt, + $steuersatzNormal, + $typ, + $id); + }elseif($preisberechnung == 1) { + $sql = sprintf( + 'UPDATE `%s` + SET umsatz_netto_einzeln = preis * (1 - rabatt / 100), + umsatz_netto_gesamt = ROUND(menge * preis * (1 - rabatt / 100), 2), + umsatz_brutto_einzeln = preis * (1 - rabatt / 100) * + (1 + IF( + IFNULL(steuersatz,-1) < 0, + IF( + umsatzsteuer = \'befreit\', + 0, + IF(umsatzsteuer = \'ermaessigt\', + %f, + %f + ) + ), + steuersatz + ) / 100), + umsatz_brutto_gesamt = ROUND(menge * preis * (1 - rabatt / 100), 2) * + (1 + IF( + IFNULL(steuersatz,-1) < 0, + IF( + umsatzsteuer = \'befreit\', + 0, + IF(umsatzsteuer = \'ermaessigt\', + %f, + %f + ) + ), + steuersatz + ) / 100) + WHERE `%s` = %d', + $typ . '_position', + $steuersatzErmaessigt, + $steuersatzNormal, + $steuersatzErmaessigt, + $steuersatzNormal, + $typ, + $id + ); + }else{ + $sql = sprintf( + 'UPDATE `%s` + SET umsatz_netto_einzeln = preis * (1 - rabatt / 100), + umsatz_netto_gesamt = menge * preis * (1 - rabatt / 100), + umsatz_brutto_einzeln = preis * (1 - rabatt / 100) * + (1 + + IF( + IFNULL(steuersatz,-1) < 0, + IF( + umsatzsteuer = \'befreit\', + 0, + IF(umsatzsteuer = \'ermaessigt\', + %f, + %f + ) + ), + steuersatz + ) / 100), + umsatz_brutto_gesamt = menge * preis * (1 - rabatt / 100) * + (1 + IF( + IFNULL(steuersatz,-1) < 0, + IF( + umsatzsteuer = \'befreit\', + 0, + IF(umsatzsteuer = \'ermaessigt\', + %f, + %f + ) + ), + steuersatz + ) / 100) + WHERE `%s` = %d', + $typ . '_position', + $steuersatzErmaessigt, + $steuersatzNormal, + $steuersatzErmaessigt, + $steuersatzNormal, + $typ, + $id + ); + } + $this->app->DB->Update($sql); + } + + $status=$this->app->DB->Select("SELECT status FROM $typ WHERE id='$id' LIMIT 1"); + $deckungsbeitragcalc=$this->app->DB->Select("SELECT deckungsbeitragcalc FROM $typ WHERE id='$id' LIMIT 1"); + //wenn im richtigen status oder noch nicht berechnet + if(1)//($status!="storniert" && $status!="versendet" && $status!="abgeschlossen") || $deckungsbeitragcalc!="1") + { + $deckungsbeitrag = 0; + $deckungsbeitragprozent = 0; + $belegnr = $this->app->DB->Select("SELECT belegnr FROM $typ WHERE id='$id' LIMIT 1"); + if(!$extern) + $this->Protokoll(strtoupper($typ)." BELEG $belegnr"); + + $anzahlStellen = ($this->app->erp->Firmendaten('viernachkommastellen_belege')?4:2); + if($preisberechnung == 3) { + if($typ === 'angebot') + { + $einnahmen = $this->app->DB->Select( + sprintf( + "SELECT SUM(ap.menge*ROUND(ap.preis*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1)),%d)) + FROM `%s` auf + INNER JOIN `%s` ap ON ap.`%s`=auf.id + WHERE auf.id=%d AND ap.optional <> 1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1),0))", + $anzahlStellen, $typ, $typ.'_position', $typ, (int)$id + ) + ); + }else{ + $einnahmen = $this->app->DB->Select(sprintf( + "SELECT SUM(ap.menge*ROUND(ap.preis*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1)),%d)) + FROM `%s` auf + INNER JOIN `%s` ap ON ap.`%s`=auf.id + WHERE auf.id=%d", + $anzahlStellen, $typ, $typ.'_position', $typ, (int)$id + ) + ); + } + }elseif($preisberechnung == 1) { + + if($typ === 'angebot') + { + $einnahmen = $this->app->DB->Select( + sprintf( + "SELECT SUM(ROUND(ap.preis*ap.menge*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1)),%d)) + FROM `%s` auf + INNER JOIN `%s` ap ON ap.`%s`=auf.id + WHERE auf.id=%d AND ap.optional <> 1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1),0))", + $anzahlStellen, $typ, $typ.'_position', $typ, (int)$id + ) + ); + }else{ + $einnahmen = $this->app->DB->Select(sprintf( + "SELECT SUM(ROUND(ap.preis*ap.menge*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1)),%d)) + FROM `%s` auf + INNER JOIN `%s` ap ON ap.`%s`=auf.id + WHERE auf.id=%d", + $anzahlStellen, $typ, $typ.'_position', $typ, (int)$id + ) + ); + } + }else{ + if($typ === 'angebot') + { + $einnahmen = $this->app->DB->Select( + sprintf( + "SELECT SUM(ap.preis*ap.menge*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1))) + FROM `%s` auf + INNER JOIN `%s` ap ON ap.`%s`=auf.id + WHERE auf.id=%d AND ap.optional <> 1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1),0))", + $typ, $typ.'_position', $typ, (int)$id + ) + ); + }else{ + $einnahmen = $this->app->DB->Select(sprintf( + "SELECT SUM(ap.preis*ap.menge*(IF(ap.rabatt > 0, (100-ap.rabatt)/100, 1))) + FROM `%s` auf + INNER JOIN `%s` ap ON ap.`%s`=auf.id + WHERE auf.id=%d", + $typ, $typ.'_position', $typ, (int)$id + ) + ); + } + } + + + $this->app->DB->Update( + sprintf( + "UPDATE `%s` + SET deckungsbeitragcalc=1, + deckungsbeitrag=%f, + erloes_netto=%f, + umsatz_netto=%f + WHERE id= %d + LIMIT 1" + ,$typ,(float)$deckungsbeitragprozent,(float)$deckungsbeitrag,(float)$einnahmen ,(int)$id + ) + ); + } + } + $this->RunHook('BerechneDeckungsbeitragEnde', 3, $id, $typ, $extern); + } + + + function LoadRechnungStandardwerte($id,$adresse) + { + /** @var Rechnung $obj */ + $obj = $this->LoadModul('rechnung'); + if(!empty($obj) && method_exists($obj,'LoadRechnungStandardwerte')){ + return $obj->LoadRechnungStandardwerte($id, $adresse); + } + } + + function LoadBestellungStandardwerte($id,$adresse) + { + /** @var Bestellung $obj */ + $obj = $this->LoadModul('bestellung'); + if(!empty($obj) && method_exists($obj, 'LoadBestellungStandardwerte')) + { + $obj->LoadBestellungStandardwerte($id, $adresse); + } + } + + function CreateArbeitsnachweis($adresse="",$projekt="") + { + /** @var Arbeitsnachweis $obj */ + $obj = $this->app->erp->LoadModul('arbeitsnachweis'); + if(!empty($obj) && method_exists($obj, 'CreateArbeitsnachweis')) { + return $obj->CreateArbeitsnachweis($adresse,$projekt); + } + return 0; + } + + + function CreateInventur($adresse="") + { + /** @var Inventur $obj */ + $obj = $this->LoadModul('inventur'); + if(!empty($obj) && method_exists($obj, 'CreateInventur')) + { + return $obj->CreateInventur($adresse); + } + return 0; + } + + + + + function CreateAnfrage($adresse='') + { + $projekt = $this->GetCreateProjekt($adresse); + + $belegmax = ''; + $ohnebriefpapier = 1; + $this->app->DB->Insert("INSERT INTO anfrage (id,datum,bearbeiter,firma,belegnr,adresse,ohne_briefpapier,bearbeiterid,projekt) + VALUES ('',NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','$adresse','".$ohnebriefpapier."', + '".$this->app->User->GetAdresse()."','$projekt')"); + + $id = $this->app->DB->GetInsertID(); + $this->LoadSteuersaetzeWaehrung($id,"anfrage"); + + $this->SchnellFreigabe("anfrage",$id); + + $this->EventAPIAdd("EventAnfrageCreate",$id,"anfrage","create"); + return $id; + } + + function SchnellFreigabe($beleg,$id) + { + if($id <= 0 || empty($beleg) || $this->app->erp->Firmendaten('schnellanlegen_ohnefreigabe')!='1') { + return; + } + $doc = $this->app->DB->SelectRow(sprintf('SELECT `projekt`, `status`, `belegnr` FROM `%s` WHERE `id` = %d', $beleg, $id)); + if( + empty($doc) + || ($doc['status'] === 'freigegeben' && (string)$doc['belegnr'] !== '0' && (string)$doc['belegnr'] !=='') + ) { + return; + } + + $projekt = $doc['projekt']; + $belegnr = (String)$doc['belegnr']; + $status = $doc['status']; + if($belegnr === '' || $belegnr === '0') { + $belegnr = $this->app->erp->GetNextNummer($beleg,$projekt,$id); + } + $this->app->DB->Update("UPDATE $beleg SET datum=NOW(),belegnr='$belegnr', status='freigegeben' WHERE id='$id' LIMIT 1"); + $methodname = ucfirst($beleg).'Protokoll'; + if(method_exists($this,$methodname) && $status != 'freigegeben') { + $this->app->erp->$methodname($id,ucfirst($beleg).' freigegeben'); + } + + // automatisch eine wiedervorlage anlegen + if($beleg === 'angebot') { + $this->AngebotWiedervorlage($id); + } + if($beleg === 'auftrag') { + $this->app->DB->Update( + sprintf( + 'UPDATE `artikel` AS `a` + INNER JOIN `auftrag_position` AS `ap` ON a.id = ap.artikel AND (a.lagerartikel = 1 OR a.juststueckliste = 1) + SET a.`laststorage_changed` = NOW() WHERE `ap`.auftrag = %d', $id + ) + ); + } + } + + function BelegFreigabe($beleg,$id) + { + if($id <= 0 || empty($beleg)) { + return; + } + $doc = $this->app->DB->SelectRow(sprintf('SELECT `projekt`, `status`, `belegnr` FROM `%s` WHERE `id` = %d', $beleg, $id)); + if( + empty($doc) + || ($doc['status'] === 'freigegeben' && (string)$doc['belegnr'] !== '0' && (string)$doc['belegnr'] !=='') + ) { + return; + } + + $projekt = $doc['projekt']; + $belegnr = (String)$doc['belegnr']; + $status = $doc['status']; + if($belegnr === '' || $belegnr === '0') { + $belegnr = $this->app->erp->GetNextNummer($beleg,$projekt,$id); + } + + if(!empty($this->app->User) && method_exists($this->app->User, 'GetParameter') + && $this->app->User->GetParameter($beleg."_create_entwurfsdatumuebernehmen")=='1'){ + $this->app->DB->Update("UPDATE $beleg SET belegnr='$belegnr', `status`='freigegeben' WHERE id='$id' LIMIT 1"); + } + else{ + $this->app->DB->Update("UPDATE $beleg SET datum=NOW(),belegnr='$belegnr', `status`='freigegeben' WHERE id='$id' LIMIT 1"); + } + + // schutzt fals kein Datum gefunden + $this->app->DB->Update("UPDATE $beleg SET datum=NOW() WHERE id='$id' AND (datum='0000-00-00' OR datum='1970-01-01' OR datum IS NULL OR datum='') LIMIT 1"); + + $methodname = ucfirst($beleg).'Protokoll'; + if(method_exists($this,$methodname) && $status != 'freigegeben') { + $this->app->erp->$methodname($id,ucfirst($beleg).' freigegeben'); + } + + if($status != 'freigeben') { + $_beleg = $beleg; + $_id = $id; + $this->RunHook('BelegFreigabe', 2, $_beleg, $_id); + } + + // automatisch eine wiedervorlage anlegen + if($beleg=='angebot') { + $this->AngebotWiedervorlage($id); + } + if($beleg === 'auftrag') { + $this->app->DB->Update( + sprintf( + 'UPDATE `artikel` AS `a` + INNER JOIN `auftrag_position` AS `ap` ON a.id = ap.artikel AND (a.lagerartikel = 1 OR a.juststueckliste = 1) + SET a.`laststorage_changed` = NOW() WHERE `ap`.auftrag = %d', $id + ) + ); + } + } + + function CreateWiedervorlage($adresse,$bezeichnung,$beschreibung,$intagen=30,$adresse_mitarbeiter=0,$bearbeiter=0,$typ="",$typid=0) + { + if($adresse_mitarbeiter <=0) + $adresse_mitarbeiter = $this->app->User->GetAdresse(); + + if($bearbeiter <= 0) + $bearbeiter = $this->app->User->GetAdresse(); + + $this->app->DB->Insert("INSERT INTO wiedervorlage ( + datum_angelegt, zeit_angelegt,datum_erinnerung, zeit_erinnerung, bezeichnung,beschreibung,abgeschlossen,bearbeiter,adresse_mitarbeiter,module,parameter,adresse) values ( + DATE_FORMAT(NOW(),'%Y-%m-%d'),DATE_FORMAT(NOW(),'%h:%i:00'),DATE_ADD(NOW(), INTERVAL ".$intagen." DAY), + DATE_FORMAT(NOW(),'%h:%i:00'),'".$this->app->DB->real_escape_string( $bezeichnung)."', + '".$this->app->DB->real_escape_string( $beschreibung)."','0','$bearbeiter','$adresse_mitarbeiter','$typ','$typid','$adresse')" + ); + + return $this->app->DB->GetInsertID(); + } + + + + function AngebotWiedervorlage($id) + { + if($this->Firmendaten('angebot_anzahlwiedervorlage')<=0) { + return; + } + $check = $this->app->DB->Select("SELECT id FROM wiedervorlage WHERE module='angebot' AND parameter='$id' LIMIT 1"); + if($check > 0) { + return; + } + + $angebot_pipewiedervorlage = $this->Firmendaten("angebot_pipewiedervorlage"); + $angebot_pipewiedervorlage = strstr($angebot_pipewiedervorlage, ' ', true); + if(!is_numeric($angebot_pipewiedervorlage)) $angebot_pipewiedervorlage = 0; + + $belegnr = $this->app->DB->Select("SELECT belegnr FROM angebot WHERE id='$id' LIMIT 1"); + + $bezeichnung = "Nachfassen beim Angebot $belegnr"; + $beschreibung = "Nachfassen beim Angebot"; + + $adresse = $this->app->DB->Select("SELECT adresse FROM angebot WHERE id='$id' LIMIT 1"); + + $adresse_mitarbeiter = $this->app->DB->Select("SELECT vertriebid FROM angebot WHERE id='$id' LIMIT 1"); + if($adresse_mitarbeiter <=0) $adresse_mitarbeiter = $this->app->User->GetAdresse(); + + $bearbeiter = $this->app->User->GetAdresse(); + + $projekt = $this->app->DB->Select("SELECT projekt FROM angebot WHERE id = '$id' LIMIT 1"); + + $this->app->DB->Insert("INSERT INTO wiedervorlage ( + datum_angelegt, zeit_angelegt,datum_erinnerung, zeit_erinnerung, bezeichnung,beschreibung,abgeschlossen,bearbeiter,adresse_mitarbeiter,module,parameter,adresse,stages,projekt) values ( + DATE_FORMAT(NOW(),'%Y-%m-%d'),DATE_FORMAT(NOW(),'%h:%i:00'),DATE_ADD(NOW(), INTERVAL ".$this->Firmendaten("angebot_anzahlwiedervorlage")." DAY),DATE_FORMAT(NOW(),'%h:%i:00'),'".$this->app->DB->real_escape_string( $bezeichnung)."', + '".$this->app->DB->real_escape_string( $beschreibung)."','0','$bearbeiter','$adresse_mitarbeiter','angebot','$id','$adresse','$angebot_pipewiedervorlage','$projekt')" + ); + } + + function CreatePreisanfrage($adresse="") + { + /** @var Preisanfrage $obj */ + $obj = $this->app->erp->LoadModul('preisanfrage'); + if(!empty($obj) && method_exists($obj,'CreatePreisanfrage')) { + return $obj->CreatePreisanfrage($adresse); + } + return 0; + } + + + function CreateProformarechnung($adresse="") + { + $projekt = $this->GetCreateProjekt($adresse); + + $belegmax = ""; + $ohnebriefpapier = $this->Firmendaten("proformarechnung_ohnebriefpapier"); + $this->app->DB->Insert("INSERT INTO proformarechnung (id,datum,bearbeiter,firma,belegnr,adresse,ohne_briefpapier,bearbeiterid,projekt,zollinformation) + VALUES ('',NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','$adresse','".$ohnebriefpapier."', + '".$this->app->User->GetAdresse()."','$projekt',1)"); + + $id = $this->app->DB->GetInsertID(); + $this->LoadSteuersaetzeWaehrung($id,"proformarechnung"); + $this->EventAPIAdd("EventAnfrageCreate",$id,"proformarechnung","create"); + return $id; + } + + + function CreateKalkulation($adresse="") + { + /** @var Kalkulation $obj */ + $obj = $this->LoadModul('kalkulation'); + if(!empty($obj) && method_exists($obj,'CreateKalkulation')) { + return $obj->CreateKalkulation($adresse); + } + return null; + } + + /** + * @deprecated + */ + public function CreateReisekosten($adresse='') + { + /** @var Reisekosten $obj */ + $obj = $this->LoadModul('reisekosten'); + if(!empty($obj) && method_exists($obj,'CreateReisekosten')) + { + return $obj->CreateReisekosten($adresse); + } + return 0; + } + + function ZeitSollDatumArbeit($adresse,$datum) + { + $erg = $this->app->DB->Select('SELECT stunden FROM mitarbeiterzeiterfassung_sollstunden WHERE datum = "' . $datum . '" + AND adresse = "' . $adresse . '" LIMIT 1'); + if($erg<=0) $erg=0; + return $erg; + } + + + function AnzahlWerktageMonat($datum="") + { + if($datum=="") + $query_date = date('Y-m-d'); + else $query_date=$datum; + + // First day of the month. + $first = date('Y-m', strtotime($query_date)); + + // Last day of the month. + $last = date('t', strtotime($query_date)); + + $anzahlwerktage=0; + for($day=1;$day<=$last;$day++) + { + $checkday = date('w',strtotime($first."-".$day)); + + if($checkday!=0 && $checkday!=6) + $anzahlwerktage++; + } + return $anzahlwerktage; + } + + function ZeitGesamtDatumArbeitAbrechnen($adresse,$datum) + { + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art LIKE 'Arbeit' + AND DATE_FORMAT(z.von,'%Y-%m-%d')='$datum' AND z.adresse='$adresse' AND z.abrechnen=1"; + + $erg=$this->app->DB->Select($sql); + if($erg<=0) $erg=0; + return $erg; + } + function ZeitGesamtAufgabe($id,$adresse=0) + { + + if($adresse<=0) + { + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art LIKE 'Arbeit' AND z.aufgabe_id='$id'"; + } else { + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art LIKE 'Arbeit' AND z.aufgabe_id='$id' AND z.adresse='$adresse'"; + } + + $erg=$this->app->DB->Select($sql); + if($erg<=0) $erg=0; + return $erg; + } + + + + + function ZeitGesamtDatumArbeit($adresse,$datum) + { + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' + AND DATE_FORMAT(z.von,'%Y-%m-%d')='$datum' AND z.adresse='$adresse'"; + + $erg=$this->app->DB->Select($sql); + if($erg<=0) $erg=0; + return $erg; + } + + function ZeitGesamtHeuteArbeit($adresse) + { + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' + AND DATE_FORMAT(z.von,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') AND z.adresse='$adresse'"; + + $erg=$this->app->DB->Select($sql); + if($erg<=0) $erg=0; + return $erg; + } + + function ZeitGesamtArbeit($adresse,$datum) + { + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' + AND DATE_FORMAT(z.von,'%Y-%m-%d')=DATE_FORMAT('$datum','%Y-%m-%d') AND z.adresse='$adresse'"; + + $erg=$this->app->DB->Select($sql); + if($erg<=0) $erg=0; + return $erg; + } + + + function ZeitGesamtDatumPause($adresse,$datum) + { + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art LIKE 'Pause' + AND DATE_FORMAT(z.von,'%Y-%m-%d')='$datum' AND z.adresse='$adresse'"; + + $erg=$this->app->DB->Select($sql); + if($erg <=0) $erg=0; + return $erg; + } + + + function ZeitGesamtHeutePause($adresse) + { + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art LIKE 'Pause' + AND DATE_FORMAT(z.von,'%Y-%m-%d')=DATE_FORMAT(NOW(),'%Y-%m-%d') AND z.adresse='$adresse'"; + + $erg=$this->app->DB->Select($sql); + if($erg <=0) $erg=0; + return $erg; + } + + function ZeitGesamtPause($adresse,$datum) + { + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art LIKE 'Pause' + AND DATE_FORMAT(z.von,'%Y-%m-%d')=DATE_FORMAT('$datum','%Y-%m-%d') AND z.adresse='$adresse'"; + + $erg=$this->app->DB->Select($sql); + if($erg <=0) $erg=0; + return $erg; + } + + + + function ZeitGesamtWocheIst($adresse,$jahr="",$kw="",$datum="") + { + if($datum!="") + { + $jahr = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%Y')"); + $kw = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%u')"); + } + + if($jahr=="") $jahr=date('Y'); + if($kw=="") $kw=date('W'); + + $kw = str_pad($kw, 2, "0", STR_PAD_LEFT); + + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' + AND DATE_FORMAT(z.von,'%Y-%v')='".$jahr."-".$kw."' AND z.adresse='$adresse'"; + + $erg=$this->app->DB->Select($sql); + if($erg <=0) $erg=0; + return $erg; + } + + function ZeitGesamtMonatIst($adresse,$jahr="",$monat="",$datum="") + { + if($datum!="") + { + $jahr = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%Y')"); + $monat = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%m')"); + } + + if($jahr=="") $jahr=date('Y'); + if($monat=="") $monat=date('m'); + + $monat = str_pad($monat, 2, "0", STR_PAD_LEFT); + + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' + AND DATE_FORMAT(z.von,'%Y-%m')='".$jahr."-".$monat."' AND z.adresse='$adresse'"; + + $erg=$this->app->DB->Select($sql); + if($erg <=0) $erg=0; + return $erg; + } + + + function ZeitGesamtWocheSoll($adresse,$jahr="",$kw="",$datum="") + { + return $this->GetArbeitszeitWoche($adresse,$jahr,$kw,$datum); + } + + function ZeitGesamtWocheOffen($adresse,$jahr="",$kw="",$datum="") + { + $ist=$this->ZeitGesamtWocheIst($adresse,$jahr,$kw,$datum); + $soll=$this->ZeitGesamtWocheSoll($adresse,$jahr,$kw,$datum); + return $soll-$ist; + } + + function ZeitUrlaubOffen($adresse, $datum) + { + $monat = date('m', strtotime($datum)); + $jahr = date('Y', strtotime($datum)); + if($this->ModulVorhanden('zeiterfassung_stundenuebersicht')) + { + if(!$jahr || !$monat) + { + $monat = date('m', strtotime($datum)); + $jahr = date('Y', strtotime($datum)); + } + + + $stundenprowoche = $this->app->DB->Select("SELECT stundenprowoche FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $ueberstundentoleranz = $this->app->DB->Select("SELECT ueberstundentoleranz FROM zeiterfassung_stundenuebersicht_jahre wHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $urlaubimjahr = $this->app->DB->Select("SELECT urlaubimjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + $restueberstunden = $this->app->DB->Select("SELECT ueberstundenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + $resturlaub = $this->app->DB->Select("SELECT urlaubvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $restnotiz = $this->app->DB->Select("SELECT notizenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + if($stundenprowoche == ""){ + $stundenprowoche = 0; + } + if($ueberstundentoleranz == ""){ + $ueberstundentoleranz = 0; + } + if($urlaubimjahr == ""){ + $urlaubimjahr = 0; + } + + if($restueberstunden == ""){ + $restueberstunden = 0; + } + if($resturlaub == ""){ + $resturlaub = 0; + } + + + $stundenausadresse = $this->app->DB->Select("SELECT arbeitszeitprowoche FROM adresse WHERE id='$adresse' AND id>0"); + if($stundenprowoche <=0 && $stundenausadresse >0) + $stundenprowoche = $stundenausadresse; + + $this->app->Tpl->Set("STUNDENWOCHE", $stundenprowoche); + $this->app->Tpl->Set("TOLERANZ", $ueberstundentoleranz); + $this->app->Tpl->Set("URLAUBJAHR", $urlaubimjahr); + + $this->app->Tpl->Set("RESTUEBERSTUNDEN", $restueberstunden); + $this->app->Tpl->Set("RESTURLAUB", $resturlaub); + $this->app->Tpl->Set("RESTNOTIZ", $restnotiz); + + $gesamtsummesoll = $this->app->DB->Select("SELECT SUM(soll) FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + + for($i = 1; $i<13; $i++){ + + //IST + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' + AND DATE_FORMAT(z.von,'%Y-%m')='".$jahr."-".($i < 10?'0':'').$i."' AND z.adresse='$adresse'"; + + $aist2[$i] = $this->app->DB->Select($sql); + + if($aist2[$i] <= 0){ + $aist2[$i] = 0; + } + + $aist2[$i] = number_format($aist2[$i], 2, '.', ''); + + if($gesamtsummesoll != 0){ + //SOLL + $asoll2[$i] = $this->app->DB->Select("SELECT soll FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); + $asoll2[$i] = number_format($asoll2[$i], 2, '.', ''); + }else{ + if($stundenprowoche != ""){ + $asoll2[$i] = $this->app->erp->AnzahlWerktageMonat($jahr."-".str_pad($i, 2, "0", STR_PAD_LEFT)."-"."1")*$stundenprowoche/5; + + //NOCH IN DIE DATENBANK SPEICHERN + $asoll2[$i] = number_format($asoll2[$i], 2, '.', ''); + }else{ + $asoll2[$i] = 0.00; + } + } + + //EINGELÖSTE ÜBERSTUNDEN + $aueberstunden2[$i] = $this->app->DB->Select("SELECT ueberstunden_eingeloest FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); + $aueberstunden2[$i] = number_format($aueberstunden2[$i], 2, '.', ''); + + //EINGELÖSTER URLAUB + $aurlaub2[$i] = $this->app->DB->Select("SELECT urlaub_eingeloest FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); + $aurlaub2[$i] = number_format($aurlaub2[$i], 2, '.', ''); + + //NOTIZEN + $anotizen2[$i] = $this->app->DB->Select("SELECT notizen FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); + + + if($aist2[$i] == 0){ + $differenz_stunden2[$i] = -$asoll2[$i]; + }else{ + $differenz_stunden2[$i] = $aist2[$i] - $asoll2[$i]; + } + + + + $differenz_stunden2[$i] = number_format($differenz_stunden2[$i], 2, '.', ''); + + if($aist2[$i] == 0){ + $stunden_minus_toleranz2[$i] = -$asoll2[$i]; + }else{ + if($differenz_stunden2[$i] <= $ueberstundentoleranz){ + $stunden_minus_toleranz2[$i] = 0; + }else{ + $stunden_minus_toleranz2[$i] = $differenz_stunden2[$i] - $ueberstundentoleranz; + } + } + + + $stunden_minus_toleranz2[$i] = number_format($stunden_minus_toleranz2[$i], 2, '.', ''); + + { + if($i == 1){ + $ueberstunden_aktuell2[$i] = $restueberstunden; + $ueberstunden_aktuell2[0] = $restueberstunden; + } + + + + if($stunden_minus_toleranz2[$i] > 0.00){ + //$ueberstunden_aktuell2[$i] += $stunden_minus_toleranz2[$i]; + } + + //if($aueberstunden2[$i] != "" && $aueberstunden2[$i] > 0.00){ + if($aist2[$i]>0.00){ + $ueberstunden_aktuell2[$i] = $ueberstunden_aktuell2[$i-1] - $aueberstunden2[$i] + $stunden_minus_toleranz2[$i]; + + }else{ + if($stunden_minus_toleranz2[$i]>0.00){ + $ueberstunden_aktuell2[$i] = $ueberstunden_aktuell2[$i-1] - $aueberstunden2[$i] - $asoll2[$i] + $stunden_minus_toleranz2[$i]; + }else{ + $ueberstunden_aktuell2[$i] = $ueberstunden_aktuell2[$i-1] - $aueberstunden2[$i] - $asoll2[$i]; + + } + } + } + $ueberstunden_aktuell2[$i] = number_format($ueberstunden_aktuell2[$i], 2, '.', ''); + + if($i == 1){ + $urlaub_aktuell2[0] = $resturlaub + $urlaubimjahr; + } + $urlaub_aktuell2[$i] = $urlaub_aktuell2[$i-1] - $aurlaub2[$i]; + $urlaub_aktuell2[$i] = number_format($urlaub_aktuell2[$i], 2, '.', ''); + if($i == (int)$monat)return $urlaub_aktuell2[$i]; + } + } + + return 0; + } + + function ZeitUrlaubGenommen($adresse, $datum) + { + if($this->ModulVorhanden('zeiterfassung_stundenuebersicht')) + { + if(!$jahr || !$monat) + { + $monat = date('m', strtotime($datum)); + $jahr = date('Y', strtotime($datum)); + } + + + $stundenprowoche = $this->app->DB->Select("SELECT stundenprowoche FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $ueberstundentoleranz = $this->app->DB->Select("SELECT ueberstundentoleranz FROM zeiterfassung_stundenuebersicht_jahre wHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $urlaubimjahr = $this->app->DB->Select("SELECT urlaubimjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + $restueberstunden = $this->app->DB->Select("SELECT ueberstundenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + $resturlaub = $this->app->DB->Select("SELECT urlaubvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $restnotiz = $this->app->DB->Select("SELECT notizenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + if($stundenprowoche == ""){ + $stundenprowoche = 0; + } + if($ueberstundentoleranz == ""){ + $ueberstundentoleranz = 0; + } + if($urlaubimjahr == ""){ + $urlaubimjahr = 0; + } + + if($restueberstunden == ""){ + $restueberstunden = 0; + } + if($resturlaub == ""){ + $resturlaub = 0; + } + + + $stundenausadresse = $this->app->DB->Select("SELECT arbeitszeitprowoche FROM adresse WHERE id='$adresse' AND id>0"); + if($stundenprowoche <=0 && $stundenausadresse >0) + $stundenprowoche = $stundenausadresse; + + $this->app->Tpl->Set("STUNDENWOCHE", $stundenprowoche); + $this->app->Tpl->Set("TOLERANZ", $ueberstundentoleranz); + $this->app->Tpl->Set("URLAUBJAHR", $urlaubimjahr); + + $this->app->Tpl->Set("RESTUEBERSTUNDEN", $restueberstunden); + $this->app->Tpl->Set("RESTURLAUB", $resturlaub); + $this->app->Tpl->Set("RESTNOTIZ", $restnotiz); + + $gesamtsummesoll = $this->app->DB->Select("SELECT SUM(soll) FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + $eingeloest = 0; + for($i = 1; $i<13; $i++){ + + //IST + $sql = "SELECT SUM((TIMESTAMPDIFF(SECOND,z.von, z.bis))/3600) FROM `zeiterfassung` z WHERE z.art NOT LIKE 'Pause' + AND DATE_FORMAT(z.von,'%Y-%m')='".$jahr."-".($i < 10?'0':'').$i."' AND z.adresse='$adresse'"; + + $aist2[$i] = $this->app->DB->Select($sql); + + if($aist2[$i] <= 0){ + $aist2[$i] = 0; + } + + $aist2[$i] = number_format($aist2[$i], 2, '.', ''); + + if($gesamtsummesoll != 0){ + //SOLL + $asoll2[$i] = $this->app->DB->Select("SELECT soll FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); + $asoll2[$i] = number_format($asoll2[$i], 2, '.', ''); + }else{ + if($stundenprowoche != ""){ + $asoll2[$i] = $this->app->erp->AnzahlWerktageMonat($jahr."-".str_pad($i, 2, "0", STR_PAD_LEFT)."-"."1")*$stundenprowoche/5; + + //NOCH IN DIE DATENBANK SPEICHERN + $asoll2[$i] = number_format($asoll2[$i], 2, '.', ''); + }else{ + $asoll2[$i] = 0.00; + } + } + + //EINGELÖSTE ÜBERSTUNDEN + $aueberstunden2[$i] = $this->app->DB->Select("SELECT ueberstunden_eingeloest FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); + $aueberstunden2[$i] = number_format($aueberstunden2[$i], 2, '.', ''); + + //EINGELÖSTER URLAUB + $aurlaub2[$i] = $this->app->DB->Select("SELECT urlaub_eingeloest FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); + $aurlaub2[$i] = number_format($aurlaub2[$i], 2, '.', ''); + $eingeloest += $aurlaub2[$i]; + //NOTIZEN + $anotizen2[$i] = $this->app->DB->Select("SELECT notizen FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$i\" AND jahr = \"$jahr\""); + + + if($aist2[$i] == 0){ + $differenz_stunden2[$i] = -$asoll2[$i]; + }else{ + $differenz_stunden2[$i] = $aist2[$i] - $asoll2[$i]; + } + + + + $differenz_stunden2[$i] = number_format($differenz_stunden2[$i], 2, '.', ''); + + if($aist2[$i] == 0){ + $stunden_minus_toleranz2[$i] = -$asoll2[$i]; + }else{ + if($differenz_stunden2[$i] <= $ueberstundentoleranz){ + $stunden_minus_toleranz2[$i] = 0; + }else{ + $stunden_minus_toleranz2[$i] = $differenz_stunden2[$i] - $ueberstundentoleranz; + } + } + + + $stunden_minus_toleranz2[$i] = number_format($stunden_minus_toleranz2[$i], 2, '.', ''); + + { + if($i == 1){ + $ueberstunden_aktuell2[$i] = $restueberstunden; + $ueberstunden_aktuell2[0] = $restueberstunden; + } + + + + if($stunden_minus_toleranz2[$i] > 0.00){ + //$ueberstunden_aktuell2[$i] += $stunden_minus_toleranz2[$i]; + } + + //if($aueberstunden2[$i] != "" && $aueberstunden2[$i] > 0.00){ + if($aist2[$i]>0.00){ + $ueberstunden_aktuell2[$i] = $ueberstunden_aktuell2[$i-1] - $aueberstunden2[$i] + $stunden_minus_toleranz2[$i]; + + }else{ + if($stunden_minus_toleranz2[$i]>0.00){ + $ueberstunden_aktuell2[$i] = $ueberstunden_aktuell2[$i-1] - $aueberstunden2[$i] - $asoll2[$i] + $stunden_minus_toleranz2[$i]; + }else{ + $ueberstunden_aktuell2[$i] = $ueberstunden_aktuell2[$i-1] - $aueberstunden2[$i] - $asoll2[$i]; + + } + } + } + $ueberstunden_aktuell2[$i] = number_format($ueberstunden_aktuell2[$i], 2, '.', ''); + + if($i == 1){ + $urlaub_aktuell2[0] = $resturlaub + $urlaubimjahr; + } + $urlaub_aktuell2[$i] = $urlaub_aktuell2[$i-1] - $aurlaub2[$i]; + $urlaub_aktuell2[$i] = number_format($urlaub_aktuell2[$i], 2, '.', ''); + if($i == (int)$monat)return $eingeloest; + } + } + + return 0; + } + + function ZeitGesamtMonatSoll($adresse, $jahr = "", $monat = "",$datum="") + { + if($datum!="") + { + $jahr = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%Y')"); + $monat = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%m')"); + } + if($this->ModulVorhanden('mitarbeiterzeiterfassung') && $this->app->DB->Select("SELECT id FROM mitarbeiterzeiterfassung_einstellungen WHERE adresse = '$adresse' LIMIT 1")) + { + if(!$jahr || !$monat) + { + $urlaubkrankheitsstunden = (float)$this->app->DB->Select("SELECT sum(minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND month(datum) = month(now()) and year(datum) = year(now()) AND (instr(kuerzel,'U') OR instr(kuerzel,'K'))"); + + $urlaubkrankheitsstunden += (float)$this->app->DB->Select("SELECT sum(ms.minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden ms + INNER JOIN (SELECT distinct datum FROM arbeitsfreietage) a ON a.datum = ms.datum + WHERE ms.adresse = '$adresse' AND month(ms.datum) = month(now()) and year(ms.datum) = year(now()) AND NOT (instr(ms.kuerzel,'U') OR instr(ms.kuerzel,'K'))"); + $mitarbeiterzeiterfassung_sollstunden = $this->app->DB->Select("SELECT sum(minuten) / 60 as wochenstunden FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND month(datum) = month(now()) and year(datum) = year(now())"); + if($mitarbeiterzeiterfassung_sollstunden)return $mitarbeiterzeiterfassung_sollstunden-$urlaubkrankheitsstunden; + }else{ + $urlaubkrankheitsstunden = (float)$this->app->DB->Select("SELECT sum(minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND month(datum) = $monat and year(datum) = $jahr AND (instr(kuerzel,'U') OR instr(kuerzel,'K'))"); + $urlaubkrankheitsstunden += (float)$this->app->DB->Select("SELECT sum(ms.minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden ms + INNER JOIN (SELECT distinct datum FROM arbeitsfreietage) a ON a.datum = ms.datum + WHERE ms.adresse = '$adresse' AND month(ms.datum) = $monat and year(ms.datum) = $jahr AND NOT (instr(ms.kuerzel,'U') OR instr(ms.kuerzel,'K'))"); + $mitarbeiterzeiterfassung_sollstunden = $this->app->DB->Select("SELECT sum(minuten) / 60 as wochenstunden FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND month(datum) = $monat and year(datum) = $jahr"); + if($mitarbeiterzeiterfassung_sollstunden)return $mitarbeiterzeiterfassung_sollstunden-$urlaubkrankheitsstunden; + } + }elseif($this->ModulVorhanden('zeiterfassung_stundenuebersicht')) + { + if(!$jahr || !$monat) + { + $monat = date('m', strtotime($datum)); + $jahr = date('Y', strtotime($datum)); + } + $stundenprowoche = $this->app->DB->Select("SELECT stundenprowoche FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $ueberstundentoleranz = $this->app->DB->Select("SELECT ueberstundentoleranz FROM zeiterfassung_stundenuebersicht_jahre wHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $urlaubimjahr = $this->app->DB->Select("SELECT urlaubimjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + $restueberstunden = $this->app->DB->Select("SELECT ueberstundenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + $resturlaub = $this->app->DB->Select("SELECT urlaubvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $restnotiz = $this->app->DB->Select("SELECT notizenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + if($stundenprowoche == ""){ + $stundenprowoche = 0; + } + if($ueberstundentoleranz == ""){ + $ueberstundentoleranz = 0; + } + if($urlaubimjahr == ""){ + $urlaubimjahr = 0; + } + + if($restueberstunden == ""){ + $restueberstunden = 0; + } + if($resturlaub == ""){ + $resturlaub = 0; + } + + + $stundenausadresse = $this->app->DB->Select("SELECT arbeitszeitprowoche FROM adresse WHERE id='$adresse' AND id>0"); + if($stundenprowoche <=0 && $stundenausadresse >0) + $stundenprowoche = $stundenausadresse; + + $gesamtsummesoll = $this->app->DB->Select("SELECT SUM(soll) FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + if($gesamtsummesoll != 0){ + $asoll2 = $this->app->DB->Select("SELECT soll FROM zeiterfassung_stundenuebersicht WHERE adresse = \"$adresse\" AND monat = \"$monat\" AND jahr = \"$jahr\""); + return number_format($asoll2, 2, '.', ''); + } + if($stundenprowoche != ""){ + $asoll2 = $this->app->erp->AnzahlWerktageMonat($jahr."-".str_pad($monat, 2, "0", STR_PAD_LEFT)."-"."1")*$stundenprowoche/5; + return number_format($asoll2, 2, '.', ''); + } + return 0.00; + } + return $this->AnzahlWerktageMonat()*$this->ZeitGesamtWocheSoll($adresse)/5; + } + + function GetArbeitszeitTag($adresse,$datum="") + { + if($datum!="") + { + $jahr = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%Y')"); + $kw = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%u')"); + } + if($this->ModulVorhanden('mitarbeiterzeiterfassung')) + { + if($datum!="") + { + $urlaubkrankheitsstunden = (float)$this->app->DB->Select("SELECT sum(minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND datum = '$datum' AND (instr(kuerzel,'U') OR instr(kuerzel,'K'))"); + $urlaubkrankheitsstunden += (float)$this->app->DB->Select("SELECT sum(ms.minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden ms + INNER JOIN (SELECT distinct datum FROM arbeitsfreietage) a ON a.datum = ms.datum + WHERE ms.adresse = '$adresse' AND datum='$datum' AND not (instr(ms.kuerzel,'U') OR instr(ms.kuerzel,'K'))"); + $mitarbeiterzeiterfassung_sollstunden = $this->app->DB->Select("SELECT sum(minuten) / 60 as wochenstunden FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND datum='$datum'"); + if($mitarbeiterzeiterfassung_sollstunden)return $mitarbeiterzeiterfassung_sollstunden-$urlaubkrankheitsstunden; + }else{ + $urlaubkrankheitsstunden = (float)$this->app->DB->Select("SELECT sum(minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND datum='$datum' AND (instr(kuerzel,'U') OR instr(kuerzel,'K'))"); + $urlaubkrankheitsstunden += (float)$this->app->DB->Select("SELECT sum(ms.minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden ms + INNER JOIN (SELECT distinct datum FROM arbeitsfreietage) a ON a.datum = ms.datum + WHERE ms.adresse = '$adresse' AND datum='$datum' AND not (instr(ms.kuerzel,'U') OR instr(ms.kuerzel,'K'))"); + $mitarbeiterzeiterfassung_sollstunden = $this->app->DB->Select("SELECT sum(minuten) / 60 as wochenstunden FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND datum='$datum'"); + if($mitarbeiterzeiterfassung_sollstunden)return $mitarbeiterzeiterfassung_sollstunden-$urlaubkrankheitsstunden; + } + }elseif($this->ModulVorhanden('zeiterfassung_stundenuebersicht')) + { + if(!$jahr || !$monat) + { + $monat = date('m', strtotime($datum)); + $jahr = date('Y', strtotime($datum)); + } + + + $stundenprowoche = $this->app->DB->Select("SELECT stundenprowoche/5 FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $ueberstundentoleranz = $this->app->DB->Select("SELECT ueberstundentoleranz FROM zeiterfassung_stundenuebersicht_jahre wHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $urlaubimjahr = $this->app->DB->Select("SELECT urlaubimjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + $restueberstunden = $this->app->DB->Select("SELECT ueberstundenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + $resturlaub = $this->app->DB->Select("SELECT urlaubvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $restnotiz = $this->app->DB->Select("SELECT notizenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + if($stundenprowoche == ""){ + $stundenprowoche = 0; + } + if($ueberstundentoleranz == ""){ + $ueberstundentoleranz = 0; + } + if($urlaubimjahr == ""){ + $urlaubimjahr = 0; + } + + if($restueberstunden == ""){ + $restueberstunden = 0; + } + if($resturlaub == ""){ + $resturlaub = 0; + } + $stundenausadresse = $this->app->DB->Select("SELECT arbeitszeitprowoche/5 FROM adresse WHERE id='$adresse' AND id>0"); + if($stundenprowoche <=0 && $stundenausadresse >0) + $stundenprowoche = $stundenausadresse; + return $stundenprowoche; + } + + $arbeitszeitprowoche = $this->app->DB->Select("SELECT arbeitszeitprowoche/5 FROM adresse WHERE id='$adresse' LIMIT 1"); + if($arbeitszeitprowoche<=0 || !is_numeric($arbeitszeitprowoche)) { + return 0; + } + return $arbeitszeitprowoche; + } + + + + function GetArbeitszeitWoche($adresse,$jahr,$kw,$datum="") + { + if($datum!="") + { + $jahr = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%Y')"); + $kw = $this->app->DB->Select("SELECT DATE_FORMAT('$datum','%u')"); + } + if($this->ModulVorhanden('mitarbeiterzeiterfassung')) + { + if(!$jahr || !$kw) + { + $urlaubkrankheitsstunden = (float)$this->app->DB->Select("SELECT sum(minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND week(datum,3) = week(now(),3) and year(datum) = year(now()) AND (instr(kuerzel,'U') OR instr(kuerzel,'K'))"); + $urlaubkrankheitsstunden += (float)$this->app->DB->Select("SELECT sum(ms.minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden ms + INNER JOIN (SELECT distinct datum FROM arbeitsfreietage) a ON a.datum = ms.datum + WHERE ms.adresse = '$adresse' AND week(ms.datum,3) = week(now(),3) and year(ms.datum) = year(now()) AND not (instr(ms.kuerzel,'U') OR instr(ms.kuerzel,'K'))"); + $mitarbeiterzeiterfassung_sollstunden = $this->app->DB->Select("SELECT sum(minuten) / 60 as wochenstunden FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND week(datum,3) = week(now(),3) and year(datum) = year(now())"); + if($mitarbeiterzeiterfassung_sollstunden)return $mitarbeiterzeiterfassung_sollstunden-$urlaubkrankheitsstunden; + }else{ + $urlaubkrankheitsstunden = (float)$this->app->DB->Select("SELECT sum(minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND week(datum,3) = $kw and year(datum) = $jahr AND (instr(kuerzel,'U') OR instr(kuerzel,'K'))"); + $urlaubkrankheitsstunden += (float)$this->app->DB->Select("SELECT sum(ms.minuten)/60 FROM mitarbeiterzeiterfassung_sollstunden ms + INNER JOIN (SELECT distinct datum FROM arbeitsfreietage) a ON a.datum = ms.datum + WHERE ms.adresse = '$adresse' AND week(ms.datum,3) = $kw and year(ms.datum) = $jahr AND not (instr(ms.kuerzel,'U') OR instr(ms.kuerzel,'K'))"); + $mitarbeiterzeiterfassung_sollstunden = $this->app->DB->Select("SELECT sum(minuten) / 60 as wochenstunden FROM mitarbeiterzeiterfassung_sollstunden WHERE adresse = '$adresse' AND week(datum,3) = $kw and year(datum) = $jahr"); + if($mitarbeiterzeiterfassung_sollstunden)return $mitarbeiterzeiterfassung_sollstunden-$urlaubkrankheitsstunden; + } + }elseif($this->ModulVorhanden('zeiterfassung_stundenuebersicht')) + { + if(!$jahr || !$monat) + { + $monat = date('m', strtotime($datum)); + $jahr = date('Y', strtotime($datum)); + } + + + $stundenprowoche = $this->app->DB->Select("SELECT stundenprowoche FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $ueberstundentoleranz = $this->app->DB->Select("SELECT ueberstundentoleranz FROM zeiterfassung_stundenuebersicht_jahre wHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $urlaubimjahr = $this->app->DB->Select("SELECT urlaubimjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + $restueberstunden = $this->app->DB->Select("SELECT ueberstundenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + $resturlaub = $this->app->DB->Select("SELECT urlaubvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + $restnotiz = $this->app->DB->Select("SELECT notizenvorjahr FROM zeiterfassung_stundenuebersicht_jahre WHERE adresse = \"$adresse\" AND jahr = \"$jahr\""); + + if($stundenprowoche == ""){ + $stundenprowoche = 0; + } + if($ueberstundentoleranz == ""){ + $ueberstundentoleranz = 0; + } + if($urlaubimjahr == ""){ + $urlaubimjahr = 0; + } + + if($restueberstunden == ""){ + $restueberstunden = 0; + } + if($resturlaub == ""){ + $resturlaub = 0; + } + $stundenausadresse = $this->app->DB->Select("SELECT arbeitszeitprowoche FROM adresse WHERE id='$adresse' AND id>0"); + if($stundenprowoche <=0 && $stundenausadresse >0) + $stundenprowoche = $stundenausadresse; + return $stundenprowoche; + } + + $arbeitszeitprowoche = $this->app->DB->Select("SELECT arbeitszeitprowoche FROM adresse WHERE id='$adresse' LIMIT 1"); + if($arbeitszeitprowoche<=0 || !is_numeric($arbeitszeitprowoche)) { + return 0; + } + return $arbeitszeitprowoche; + } + + + + function AddArbeitsnachweisPositionZeiterfassung($arbeitsnachweis,$zid) + { + $tmp = $this->app->DB->SelectArr("SELECT *,DATE_FORMAT(von,'%Y-%m-%d') as datum,DATE_FORMAT(von,'%H:%i') as von,DATE_FORMAT(bis,'%H:%i') as bis FROM zeiterfassung WHERE id='$zid'"); + $sort = $this->app->DB->Select("SELECT MAX(sort) FROM arbeitsnachweis_position WHERE arbeitsnachweis='$arbeitsnachweis' LIMIT 1"); + $sort = $sort + 1; + + $adresse = $tmp[0]['adresse']; //mitarbeiter + $bezeichnung = $tmp[0]['aufgabe']; + $beschreibung = $tmp[0]['beschreibung']; + $ort = $tmp[0]['ort']; + $arbeitspaket =$tmp[0]['arbeitspaket']; + $datum = $tmp[0]['datum']; + $von=$tmp[0]['von']; + $bis=$tmp[0]['bis']; + + $this->app->DB->Insert("INSERT INTO arbeitsnachweis_position (id,arbeitsnachweis,artikel,bezeichnung,beschreibung,ort,arbeitspaket,datum,von,bis,sort,status,projekt,adresse) + VALUES ('','$arbeitsnachweis','$artikel','$bezeichnung','$beschreibung','$ort','$arbeitspaket','$datum','$von','$bis','$sort','angelegt','$projekt','$adresse')"); + $tmpid = $this->app->DB->GetInsertID(); + //markieren als erledigt + $this->app->DB->Update("UPDATE zeiterfassung SET arbeitsnachweis='$arbeitsnachweis',arbeitsnachweispositionid='$tmpid' WHERE id='$zid'"); + } + + + function CreateAufgabe($adresse,$aufgabe,$kunde=0) + { + $this->app->DB->Insert("INSERT INTO aufgabe (id,adresse,initiator,aufgabe,status,kunde) + VALUES ('','$adresse','".$this->app->User->GetAdresse()."','$aufgabe','offen','$kunde')"); + return $this->app->DB->GetInsertID(); + } + + function AbschlussAufgabe($id) + { + + // einmalig immer weg + $intervall_tage = $this->app->DB->Select("SELECT intervall_tage FROM aufgabe WHERE id='$id'"); + $startdatum = $this->app->DB->Select("SELECT abgabe_bis FROM aufgabe WHERE id='$id'"); + $check = $this->app->DB->Select("SELECT id FROM aufgabe WHERE id='$id' AND ((abgabe_bis <= NOW() AND intervall_tage > 0) OR intervall_tage=0)"); + + if($check<=0) return -1; + + switch($intervall_tage) + { + case 1: //taeglich + $newaufgabe = $this->CopyAufgabe($id); + $newstartdatum =date('Y-m-d H:i:s', strtotime("$startdatum +1 days")); + $this->app->DB->Update("UPDATE aufgabe SET abgabe_bis='$newstartdatum' WHERE id='$newaufgabe'"); + break; + + case 2: //wochen + $newaufgabe = $this->CopyAufgabe($id); + $newstartdatum =date('Y-m-d H:i:s', strtotime("$startdatum +7 days")); + $this->app->DB->Update("UPDATE aufgabe SET abgabe_bis='$newstartdatum' WHERE id='$newaufgabe'"); + break; + case 3: //monatlich + $newaufgabe = $this->CopyAufgabe($id); + $newstartdatum =date('Y-m-d H:i:s', strtotime("$startdatum +1 month")); + $this->app->DB->Update("UPDATE aufgabe SET abgabe_bis='$newstartdatum' WHERE id='$newaufgabe'"); + break; + case 4: // jaehrlich + $newaufgabe = $this->CopyAufgabe($id); + $newstartdatum =date('Y-m-d H:i:s', strtotime("$startdatum +1 year")); + $this->app->DB->Update("UPDATE aufgabe SET abgabe_bis='$newstartdatum' WHERE id='$newaufgabe'"); + break; + } + // aufgaben kopieren und dann wenn intervall_tage 2 = woechen 3 monatlich 4 jaehrlich + // alles kopieren 1:1 neue hat mit dem datum von turnus +1 tag + 7 Tage oder monatlich immer wieder dann rein + + // ab taeglich kann man nur abschliessen abgabe_bis <= heute ist + $this->app->DB->Update("UPDATE aufgabe SET status='abgeschlossen',abgeschlossen_am=NOW() WHERE id='$id' LIMIT 1"); + return 1; + } + + function CopyAufgabe($id) + { + return $this->app->DB->MysqlCopyRow("aufgabe","id",$id); + } + + function CreateRetoure($adresse="") + { + $projekt = $this->GetCreateProjekt($adresse); + + $standardlager = $this->app->DB->Select("SELECT l.id FROM projekt p INNER JOIN lager l ON p.standardlager = l.id WHERE p.id = '$projekt' LIMIT 1"); + + $belegmax = ""; + $ohnebriefpapier = $this->Firmendaten("retoure_ohnebriefpapier"); + $this->app->DB->Insert("INSERT INTO retoure (id,datum,bearbeiter,firma,belegnr,adresse,ohne_briefpapier,projekt) + VALUES ('',NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','$adresse','".$ohnebriefpapier."','".$projekt."')"); + + + $id = $this->app->DB->GetInsertID(); + $this->app->DB->Update("UPDATE retoure SET + liefername = '".$this->app->DB->real_escape_string($this->Firmendaten('name'))."' , + lieferstrasse = '".$this->app->DB->real_escape_string($this->Firmendaten('strasse'))."' , + lieferort = '".$this->app->DB->real_escape_string($this->Firmendaten('ort'))."' , + lieferplz = '".$this->app->DB->real_escape_string($this->Firmendaten('plz'))."' , + lieferland = '".$this->app->DB->real_escape_string($this->Firmendaten('land'))."' , + abweichendelieferadresse = 1 + + WHERE id = '$id' LIMIT 1"); + if(!$id)die($this->app->DB->error()); + if($standardlager)$this->app->DB->Update("UPDATE retoure SET standardlager = '$standardlager' WHERE id = '$id' LIMIT 1"); + $type="retoure"; + $this->app->erp->ObjektProtokoll($type,$id,$type."_create",ucfirst($type)." angelegt"); + $this->SchnellFreigabe($type,$id); + + $this->EventAPIAdd("EventREtoureCreate",$id,"retoure","create"); + return $id; + } + + function CreateLieferschein($adresse="") + { + $obj = $this->LoadModul('lieferschein'); + if(!empty($obj) && method_exists($obj, 'CreateLieferschein')){ + return $obj->CreateLieferschein($adresse); + } + } + + function AddLieferscheinPositionArtikelID($lieferschein, $artikel,$menge,$bezeichnung,$beschreibung,$datum) + { + $obj = $this->LoadModul('lieferschein'); + if(!empty($obj) && method_exists($obj, 'AddLieferscheinPositionArtikelID')){ + $obj->AddLieferscheinPositionArtikelID($lieferschein, $artikel,$menge,$bezeichnung,$beschreibung,$datum); + } + } + + + function AddLieferscheinPosition($lieferschein, $verkauf,$menge,$datum) + { + $obj = $this->LoadModul('lieferschein'); + if(!empty($obj) && method_exists($obj, 'AddLieferscheinPosition')){ + $obj->AddLieferscheinPosition($lieferschein, $verkauf,$menge,$datum); + } + } + + + + function DeleteAnfrage($id) + { + $this->app->DB->Delete("DELETE FROM anfrage_position WHERE anfrage='$id'"); + $this->app->DB->Delete("DELETE FROM anfrage_protokoll WHERE anfrage='$id'"); + $this->app->DB->Delete("DELETE FROM anfrage WHERE id='$id' LIMIT 1"); + } + + + function DeletePreisanfrage($id) + { + /** @var Preisanfrage $obj */ + $obj = $this->app->erp->LoadModul('preisanfrage'); + if(!empty($obj) && method_exists($obj,'DeletePreisanfrage')) { + $obj->DeletePreisanfrage($id); + } + } + + + function DeleteProformarechnung($id) + { + $this->app->DB->Delete("DELETE FROM proformarechnung_lieferschein WHERE proformarechnung='$id'"); + $this->app->DB->Delete("DELETE FROM proformarechnung_position WHERE proformarechnung='$id'"); + $this->app->DB->Delete("DELETE FROM proformarechnung_protokoll WHERE proformarechnung='$id'"); + $this->app->DB->Delete("DELETE FROM proformarechnung WHERE id='$id' LIMIT 1"); + } + + + + function DeleteInventur($id) + { + /** @var Inventur $obj */ + $obj = $this->LoadModul('inventur'); + if(!empty($obj) && method_exists($obj, 'DeleteInventur')) + { + $obj->DeleteInventur($id); + } + } + + + function DeleteKalkulation($id) + { + $this->app->DB->Delete("DELETE FROM kalkulation_position WHERE kalkulation='$id'"); + $this->app->DB->Delete("DELETE FROM kalkulation_protokoll WHERE kalkulation='$id'"); + $this->app->DB->Delete("DELETE FROM kalkulation WHERE id='$id' LIMIT 1"); + } + + + function DeleteReisekosten($id) + { + /** @var Reisekosten $obj */ + $obj = $this->LoadModul('reisekosten'); + if(!empty($obj) && method_exists($obj, 'DeleteReisekosten')) + { + $obj->DeleteReisekosten($id); + } + } + + function DeleteArbeitsnachweis($id) + { + /** @var Arbeitsnachweis $obj */ + $obj = $this->app->erp->LoadModul('arbeitsnachweis'); + if(!empty($obj) && method_exists($obj, 'DeleteArbeitsnachweis')) { + $obj->DeleteArbeitsnachweis($id); + } + } + + function DeleteRetoure($id) + { + $this->app->DB->Delete("DELETE FROM retoure_position WHERE retoure='$id'"); + $this->app->DB->Delete("DELETE FROM retoure_protokoll WHERE retoure='$id'"); + $this->app->DB->Delete("DELETE FROM retoure WHERE id='$id' LIMIT 1"); + } + + function DeleteLieferschein($id) + { + $obj = $this->LoadModul('lieferschein'); + if(!empty($obj) && method_exists($obj, 'DeleteLieferschein')){ + $obj->DeleteLieferschein($id); + } + } + + + + function CreateAuftrag($adresse="") + { + $ohnebriefpapier = $this->Firmendaten("auftrag_ohnebriefpapier"); + $belegmax = ""; + + $projekt = $this->GetCreateProjekt($adresse); + $standardlager = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id = '$projekt' LIMIT 1"); + + $firma = $this->app->DB->Select("SELECT MAX(f.id) FROM firma f INNER JOIN firmendaten fd ON f.id = fd.firma LIMIT 1"); + if(!$firma)$firma = $this->app->DB->Select("SELECT max(id) FROM firma LIMIT 1"); + if(!$firma)$firma = $this->app->DB->Select("SELECT MAX(id) FROM firma LIMIT 1"); + + if($this->StandardZahlungsweise($projekt)=="rechnung") + { + $this->app->DB->Insert("INSERT INTO auftrag (id,datum,bearbeiter,firma,belegnr,autoversand,zahlungsweise,zahlungszieltage, + zahlungszieltageskonto,zahlungszielskonto,status,projekt,adresse,ohne_briefpapier) + VALUES ('',NOW(),'','','$belegmax',1,'".$this->StandardZahlungsweise($projekt)."', + '".$this->ZahlungsZielTage($projekt)."', + '".$this->ZahlungsZielTageSkonto($projekt)."', + '".$this->ZahlungsZielSkonto($projekt)."', + 'angelegt','$projekt','$adresse','".$ohnebriefpapier."')"); + } else { + $this->app->DB->Insert("INSERT INTO auftrag (id,datum,bearbeiter,firma,belegnr,autoversand,zahlungsweise,zahlungszieltage, + zahlungszieltageskonto,zahlungszielskonto,status,projekt,adresse,ohne_briefpapier) + VALUES ('',NOW(),'','','$belegmax',1,'".$this->StandardZahlungsweise($projekt)."', + '0', + '0', + '0', + 'angelegt','$projekt','$adresse','".$ohnebriefpapier."')"); + } + + $id = $this->app->DB->GetInsertID(); + if($standardlager)$this->app->DB->Update("UPDATE auftrag SET standardlager = '$standardlager' WHERE id = '$id' LIMIT 1"); + $this->CheckVertrieb($id,"auftrag"); + $this->CheckBearbeiter($id,"auftrag"); + + $type="auftrag"; + $this->app->erp->ObjektProtokoll($type,$id,$type."_create",ucfirst($type)." angelegt"); + + $this->app->erp->AuftragProtokoll($id,"Auftrag angelegt"); + + $deliverythresholdvatid = $this->getDeliverythresholdvatid($projekt); + if($id > 0 && !empty($deliverythresholdvatid)){ + $deliverythresholdvatid = $this->app->DB->real_escape_string($deliverythresholdvatid); + $this->app->DB->Update("UPDATE auftrag SET deliverythresholdvatid = '$deliverythresholdvatid' WHERE id = $id LIMIT 1"); + } + + $this->SchnellFreigabe("auftrag",$id); + + $this->EventAPIAdd("EventAuftragCreate",$id,"auftrag","create"); + + $this->LoadSteuersaetzeWaehrung($id,"auftrag",$projekt); + return $id; + } + + + function ArtikelIDProjekt($artikelnummer,$projekt=0) + { + $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id='$projekt' LIMIT 1"); + if($eigenernummernkreis=="1") + { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikelnummer' AND projekt='$projekt' AND nummer!='' LIMIT 1"); + if($artikel) { + return $artikel; + } + return $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikelnummer' AND projekt='0' AND nummer!='' LIMIT 1"); + } + + return $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikelnummer' AND nummer!='' LIMIT 1"); + } + + function AddAuftragPositionNummer($auftrag,$nummer,$menge,$projekt,$nullpreis="",$taxfree=false,$typ="", $data = null) + { + $doctype = $typ; + if($doctype !== 'angebot') { + $doctype = 'auftrag'; + } + if($typ === 'produktion'){ + $doctype = $typ; + } + $artikel = 0; + if(!empty($data) && !empty($data['forceartikelid']) && $data['forceartikelid'] > 0) + { + $artikel = (int)$this->app->DB->Select( + sprintf( + 'SELECT id FROM artikel WHERE id = %d AND geloescht = 0 LIMIT 1', + (int)$data['forceartikelid'] + ) + ); + } + if($artikel <= 0) { + $artikel = (int)$this->ArtikelIDProjekt($nummer,$projekt); + } + + $artikeldata = $this->app->DB->SelectRow( + sprintf( + 'SELECT name_de,nummer,anabregs_text,mlmpunkte,mlmbonuspunkte,mlmdirektpraemie,umsatzsteuer + FROM artikel WHERE id=%d LIMIT 1', + $artikel + ) + ); + + $bezeichnunglieferant = $artikeldata['name_de']; + $bestellnummer = $artikeldata['nummer']; + $beschreibung = $artikeldata['anabregs_text']; + + $sprache = $this->app->DB->Select("SELECT sprache FROM $doctype WHERE id='$auftrag' LIMIT 1"); + + $this->RunHook('AARLGPositionenSprache', 6, $doctype, $auftrag, $artikel, $sprache, $bezeichnunglieferant, $beschreibung); + $this->app->erp->LogFile("Add $nummer,$menge $artikel $sprache Name: $bezeichnunglieferant"); + + $verkaufspreisarr = $this->GetVerkaufspreis($artikel, $menge,0,'', $returnwaehrung,true); + if($verkaufspreisarr) + { + $verkaufsid = (int)$verkaufspreisarr['id']; + }else{ + $verkaufsid = (int)$this->app->DB->Select( + sprintf( + "SELECT id + FROM verkaufspreise + WHERE artikel=%d + AND (gueltig_bis='0000-00-00' OR gueltig_bis >=NOW()) AND ab_menge=1 + AND ((objekt='Standard' AND adresse=0) OR (objekt='' AND adresse=0)) AND geloescht=0 + ORDER BY art = 'gruppe' + LIMIT 1", + $artikel + ) + ); + } + + $preis = 0; + $vpe = ''; + $preisVpe = $this->app->DB->SelectRow(sprintf('SELECT preis,vpe FROM verkaufspreise WHERE id=%d LIMIT 1',$verkaufsid)); + if(!empty($preisVpe)){ + $preis = $preisVpe['preis']; + $vpe = $preisVpe['vpe']; + } + + if($nullpreis=='1'){ + $preis = 0; + } + + $umsatzsteuer = $this->app->DB->real_escape_string($artikeldata['umsatzsteuer']); + $mlmpunkte = $artikeldata['mlmpunkte']; + $mlmbonuspunkte = $artikeldata['mlmbonuspunkte']; + $mlmdirektpraemie = $artikeldata['mlmdirektpraemie']; + + $bezeichnunglieferant = $this->app->DB->real_escape_string($bezeichnunglieferant); + $bestellnummer = $this->app->DB->real_escape_string($bestellnummer); + $beschreibung = $this->app->DB->real_escape_string($beschreibung); + + + if($typ=='produktion') + { + } else { + $sort = 1 + (int)$this->app->DB->Select( + sprintf( + 'SELECT IFNULL(MAX(sort),0) FROM `%s` WHERE `%s`= %d LIMIT 1', + $doctype.'_position', $doctype, (int)$auftrag + ) + ); + $this->app->DB->Insert( + sprintf( + "INSERT INTO `%s` (%s,artikel,bezeichnung,nummer,menge,preis, sort,lieferdatum, umsatzsteuer, status,projekt,vpe,punkte,bonuspunkte,mlmdirektpraemie) + VALUES (%d, %d, '%s', '%s', %f, %f, %d, '%s', '%s','angelegt', %d, '%s', %f, %f, %f)", + $doctype.'_position',$doctype,(int)$auftrag, $artikel,$bezeichnunglieferant,$bestellnummer,(float)$menge,(float)$preis,$sort, + $datum,$umsatzsteuer,(int)$projekt,$this->app->DB->real_escape_string($vpe),$mlmpunkte,$mlmbonuspunkte,$mlmdirektpraemie + ) + ); + $insid = $this->app->DB->GetInsertID(); + if(!empty($data) && !empty($data['parentap'])) { + $this->app->DB->Update( + sprintf( + 'UPDATE `%s` AS pp + INNER JOIN artikel art ON pp.artikel = art.id AND (art.stueckliste = 1 OR art.juststueckliste = 1) + SET pp.explodiert = 1 + WHERE pp.id = %d', + $doctype.'_position', (int)$data['parentap'] + ) + ); + $this->app->DB->Update( + sprintf( + 'UPDATE `%s` + SET explodiert_parent = %d + WHERE id = %d', + $doctype.'_position', (int)$data['parentap'], (int)$insid + ) + ); + } + } + return $insid; + } + + function AddArtikelEigenschaft($artikel, $name, $wert, $einheit = '') + { + if($name == ''){ + return; + } + if(!$this->app->DB->Select("SELECT id FROM artikel WHERE id = '$artikel' AND nummer <> 'DEL' AND ifnull(geloescht,0) = 0")){ + return; + } + $checkkategorie = $this->app->DB->Select("SELECT id FROM artikeleigenschaften WHERE name = '$name' AND geloescht <> 1 LIMIT 1"); + if(!$checkkategorie) + { + $this->app->DB->Insert("INSERT INTO artikeleigenschaften (name) values ('$name')"); + $checkkategorie = $this->app->DB->GetInsertID(); + } + $checkwert = $this->app->DB->Select("SELECT id FROM artikeleigenschaftenwerte WHERE artikeleigenschaften = '$checkkategorie' AND artikel = '$artikel' AND wert = '$wert' LIMIT 1"); + if(!$checkwert){ + $this->app->DB->Insert("INSERT INTO artikeleigenschaftenwerte (wert, artikeleigenschaften, artikel, einheit) values ('$wert','$checkkategorie','$artikel','$einheit')"); + } + } + + function KopiereArtikelEigenschaften($vonartikel, $nachartikel) + { + $vonartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND id = '". (int)$vonartikel."' LIMIT 1"); + $nachartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND id = '". (int)$nachartikel."' LIMIT 1"); + if(!$vonartikel || !$nachartikel || $vonartikel == $nachartikel){ + return; + } + $artikeleigenschaftenwerte = $this->app->DB->SelectArr("SELECT id FROM artikeleigenschaftenwerte WHERE artikel = '$vonartikel' ORDER by id"); + if($artikeleigenschaftenwerte) + { + foreach($artikeleigenschaftenwerte as $v) + { + $idnew = $this->app->DB->MysqlCopyRow("artikeleigenschaftenwerte","id",$v['id']); + $this->app->DB->Update("UPDATE artikeleigenschaftenwerte SET artikel = '$nachartikel' WHERE id = '$idnew' LIMIT 1"); + } + } + } + + function KopiereArtikelDateistichwoerter($vonartikel, $nachartikel) + { + $vonartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND id = '". (int)$vonartikel."' LIMIT 1"); + $nachartikel = $this->app->DB->Select("SELECT id FROM artikel WHERE geloescht <> 1 AND id = '". (int)$nachartikel."' LIMIT 1"); + if(!$vonartikel || !$nachartikel || $vonartikel == $nachartikel)return; + $dateistichwoerter = $this->app->DB->SelectArr("SELECT id FROM datei_stichwoerter WHERE objekt LIKE 'Artikel' AND parameter = '$vonartikel' ORDER by id"); + if($dateistichwoerter) + { + foreach($dateistichwoerter as $v) + { + $idnew = $this->app->DB->MysqlCopyRow("datei_stichwoerter","id",$v['id']); + $this->app->DB->Update("UPDATE datei_stichwoerter SET parameter = '$nachartikel' WHERE id = '$idnew' LIMIT 1"); + } + } + } + + function AddPositionManuellPreisNummer($typ,$id,$projekt, $artikelnummer,$menge,$name,$preis,$umsatzsteuer,$rabatt=0,$shop=0,$waehrung='EUR',$data = null, &$fulldata = null) + { + // wenn es Artikel nicht gibt anlegen! bzw. immer updaten wenn name anders ist +// $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikelnummer' AND nummer!='' LIMIT 1"); + $artikelnummershop = $artikelnummer; + $artikel = 0; + $artikelnummernummerkreis = false; + $externeartikelnummer = ""; + $eigenernummernkreis= 0; + $artikeltexteuebernehmen = 0; + $multiprojekt = 0; + $shopArr = null; + if($shop > 0) + { + $shopArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT artikeltexteuebernehmen,multiprojekt,projekt,artikelbeschreibungauswawision, + artikelbeschreibungenuebernehmen,artikelnummernummerkreis,bezeichnung + FROM shopexport + WHERE id= %d', + $shop + ) + ); + $artikeltexteuebernehmen = !empty($shopArr)?$shopArr['artikeltexteuebernehmen']:$this->app->DB->Select("SELECT artikeltexteuebernehmen FROM shopexport WHERE id='$shop' LIMIT 1"); + $multiprojekt = !empty($shopArr)?$shopArr['multiprojekt']:$this->app->DB->Select("SELECT multiprojekt FROM shopexport WHERE id='$shop' LIMIT 1"); + if(!$projekt){ + $projekt = !empty($shopArr)?$shopArr['projekt']:$this->app->DB->Select("SELECT projekt FROM shopexport WHERE id='".$shop."' LIMIT 1"); + } + } + if($projekt){ + $eigenernummernkreis = $this->app->DB->Select("SELECT eigenernummernkreis FROM projekt WHERE id = '$projekt' LIMIT 1"); + } + + if($shop && isset($data['fremdnummer']) && trim((String)$data['fremdnummer']) !== ''){ + $artikel = $this->app->DB->Select("SELECT a.id FROM artikelnummer_fremdnummern af INNER JOIN artikel a on af.artikel = a.id WHERE af.nummer='{$data['fremdnummer']}' AND af.aktiv = 1 AND af.nummer <> '' AND (a.projekt='$projekt' OR af.shopid = '$shop') AND a.nummer <> 'DEL' AND IFNULL(a.geloescht,0) = 0 ORDER BY af.shopid = '$shop' DESC,IFNULL(a.intern_gesperrt,0) = 0 DESC, af.id LIMIT 1"); + } + if(empty($artikel)){ + if($eigenernummernkreis && !$multiprojekt) + { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$artikelnummer."' AND IFNULL(geloescht,0) = 0 AND IFNULL(intern_gesperrt,0) = 0 AND projekt = '$projekt' LIMIT 1"); + } else { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer = '".$artikelnummer."' AND IFNULL(geloescht,0) = 0 AND IFNULL(intern_gesperrt,0) = 0 ORDER BY projekt = '$projekt' DESC LIMIT 1"); + } + } + + if(!$artikel) + { + if($eigenernummernkreis && !$multiprojekt) + { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer = '".$artikelnummer."' AND nummer <> 'DEL' AND projekt = '$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); + } else { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE herstellernummer = '".$artikelnummer."' AND nummer <> 'DEL' ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC, projekt = '$projekt' AND IFNULL(geloescht,0) = 0 DESC LIMIT 1"); + } + if($artikel){ + $artikelnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"); + } + } + + if(!$artikel) + { + if($eigenernummernkreis && !$multiprojekt) + { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE ean = '".$artikelnummer."' AND nummer <> 'DEL' AND projekt = '$projekt' AND IFNULL(geloescht,0) = 0 ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC LIMIT 1"); + } else { + $artikel = $this->app->DB->Select("SELECT id FROM artikel WHERE ean = '".$artikelnummer."' AND nummer <> 'DEL' ORDER BY IFNULL(intern_gesperrt,0) = 0 DESC, projekt = '$projekt' AND IFNULL(geloescht,0) = 0 DESC LIMIT 1"); + } + if($artikel){ + $artikelnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id = '$artikel' LIMIT 1"); + } + } + + if(!$artikel){ + $artikel = $this->ArtikelIDProjekt($artikelnummer,$projekt); + } + if($artikel <=0) + { + if($artikelnummernummerkreis) + { + $externeartikelnummer = $artikelnummer; + $artikelnummer = $this->GetNextArtikelnummer('produkt', 1, $projekt); + } + + //Artikel anlegen + $ean = ''; + if(is_array($data) && isset($data['ean'])){ + $ean = $data['ean']; + } + $artdata = array('name_de'=>$name,'nummer'=>$artikelnummer,'projekt'=>$projekt,'umsatzsteuer'=>$umsatzsteuer,'lagerartikel'=>1,'shop'=>$shop,'firma'=>(isset($this->app->User)?$this->app->User->GetFirma():1),'ean'=>$ean); + if(!is_null($data) && is_array($data)) + { + foreach($data as $k => $v) + { + switch($k) + { + case 'anabregs_text': + case 'anabregs_text_en': + case 'kurztext_de': + case 'kurztext_en': + case 'uebersicht_de': + case 'uebersicht_en': + case 'metadescription_de': + case 'metadescription_en': + case 'metakeywords_de': + case 'metakeywords_en': + if($artikeltexteuebernehmen){ + $artdata[$k] = $v; + } + break; + case 'anabregs_text_de': + //$artdata['anabregs_text'] = $v; + break; + case 'lagerartikel': + case 'serviceartikel': + case 'unikat': + case 'anhang': + $artdata[$k] = $v; + break; + + } + switch($k) + { + case 'options': + $beschreibung = $v; + break; + } + } + + } + $artikel = $this->AddArtikel($artdata); + if(!empty($fulldata['generierenummerbeioption'])){ + $this->ObjektProtokoll('artikel',$artikel, 'artikel_create','Automatisch Kopie angelegt'); + } + + + $this->AddVerkaufspreis($artikel,1,0,$preis,$waehrung); + } else { + $variante_kopietesten = true; + if(!empty($data) && isset($data['stuecklisteergaenzen']) && $data['stuecklisteergaenzen'] && isset($data['posid']) && !empty($fulldata)) + { + $stueckliste = $this->app->DB->Select("SELECT stueckliste FROM artikel WHERE id = '$artikel' LIMIT 1"); + if($stueckliste) + { + $variante_kopietesten = false; + $varkopie = $this->app->DB->Select("SELECT variante_kopie FROM artikel WHERE id = '$artikel' LIMIT 1"); + $copystueckliste = $varkopie; + if(!$copystueckliste) + { + $stuecklistenelemente = $this->app->DB->SelectArr("SELECT a.* FROM stueckliste s INNER JOIN artikel a ON s.artikel = a.id WHERE a.geloescht <> 1 AND s.stuecklistevonartikel = '$artikel' ORDER BY sort"); + if($stuecklistenelemente) + { + foreach($stuecklistenelemente as $v3) + { + if($v3['variante_kopie'])$copystueckliste = true; + } + } + } + if(!$copystueckliste) + { + foreach($fulldata as $k2 => $v2) + { + $cnummer = $v2['articleid']; + if(isset($v2['parentid']) && $v2['parentid'] == $data['posid']) + { + $found = false; + if($stuecklistenelemente) + { + foreach($stuecklistenelemente as $v3) + { + $sfound = false; + if($cnummer == $v3['nummer'])$sfound = true; + if($cnummer == $v3['herstellernummer'])$sfound = true; + if($cnummer == $v3['ean'])$sfound = true; + if(!$sfound) + { + if($this->app->DB->Select("SELECT a.id FROM artikelnummer_fremdnummern af INNER JOIN artikel a on af.artikel = a.id WHERE af.nummer ='".$this->app->DB->real_escape_string($cnummer)."' AND af.nummer <> '' AND af.shopid = '$shop' AND af.aktiv = 1 AND a.nummer <> 'DEL' ORDER by af.id LIMIT 1"))$sfound = true; + } + if(!$sfound)$copystueckliste = true; + } + } + } + } + } + if(!$copystueckliste) + { + foreach($fulldata as $k2 => $v2) + { + if(isset($v2['parentid']) && $v2['parentid'] == $data['posid']) + { + $fulldata[$k2]['ignorieren'] = true; + } + } + }else{ + $neuerartikel['nummer'] = $this->GetNextArtikelnummer($this->app->DB->Select("SELECT typ FROM artikel WHERE id = '$artikel' LIMIT 1"), 1, $projekt); + $neuerartikel['stueckliste'] = 1; + $neuerartikel['variante_kopie'] = $varkopie; + $neuerartikel['projekt'] = $projekt; + $tmpArticleArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT lagerartikel,name_de,lager_platz,produktion,adresse,umsatzsteuer,juststueckliste + FROM artikel + WHERE id = %d', + $artikel + ) + ); + $neuerartikel['lagerartikel'] = !empty($tmpArticleArr)?$tmpArticleArr['lagerartikel']:$this->app->DB->Select("SELECT lagerartikel FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['name_de'] = !empty($tmpArticleArr)?$tmpArticleArr['name_de']:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['lager_platz'] = !empty($tmpArticleArr)?$tmpArticleArr['lager_platz']:$this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['produktion'] = !empty($tmpArticleArr)?$tmpArticleArr['produktion']:$this->app->DB->Select("SELECT produktion FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['adresse'] = !empty($tmpArticleArr)?$tmpArticleArr['adresse']:$this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['umsatzsteuer'] = !empty($tmpArticleArr)?$tmpArticleArr['umsatzsteuer']:$this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['juststueckliste'] = !empty($tmpArticleArr)?$tmpArticleArr['juststueckliste']:$this->app->DB->Select("SELECT juststueckliste FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['anabregs_text'] = isset($value['options']) && !empty($value['options'])?$value['options']:''; + $neuerartikel['bestandalternativartikel'] = $this->app->DB->Select("SELECT bestandalternativartikel FROM artikel WHERE id = '$artikel' LIMIT 1"); + if($this->app->DB->Select("SELECT unikatbeikopie FROM artikel WHERE id = '$artikel' LIMIT 1"))$neuerartikel['unikat'] = 1; + $this->app->DB->Insert("INSERT INTO artikel (id) VALUES ('')"); + $neuerartikel['id'] = $this->app->DB->GetInsertID(); + $neuerartikelid = $this->InsertUpdateArtikel($neuerartikel); + $this->CopyArtikelVariante($neuerartikelid, $artikel,isset($value['options']) && !empty($value['options'])?$value['options']:(isset($value['anabregs_text'])?$value['anabregs_text']:'')); + $stuecklistenelementeneu = $this->app->DB->SelectArr("SELECT a.* FROM stueckliste s INNER JOIN artikel a ON s.artikel = a.id WHERE a.geloescht <> 1 AND s.stuecklistevonartikel = '$neuerartikelid' ORDER BY sort"); + foreach($fulldata as $k2 => $v2) + { + $cnummer = $v2['articleid']; + if(isset($v2['parentid']) && $v2['parentid'] == $data['posid']) + { + $found = false; + if($stuecklistenelementeneu) + { + foreach($stuecklistenelementeneu as $v3) + { + $sfound = false; + if($cnummer == $v3['nummer'])$sfound = true; + if($cnummer == $v3['herstellernummer'])$sfound = true; + if($cnummer == $v3['ean'])$sfound = true; + if(!$sfound) + { + if($this->app->DB->Select("SELECT a.id FROM artikelnummer_fremdnummern af INNER JOIN artikel a on af.artikel = a.id WHERE a.id = '".$v3['id']."' AND af.nummer ='".$this->app->DB->real_escape_string($cnummer)."' AND af.nummer <> '' AND af.shopid = '$shop' AND af.aktiv = 1 AND a.nummer <> 'DEL' ORDER by af.id LIMIT 1"))$sfound = true; + } + if(!$sfound) + { + if($v3['variante_von']) + { + $va = $this->app->DB->SelectRow("SELECT * FROM artikel where id = '".$v3['variante_von']."' LIMIT 1"); + if($va) + { + if($cnummer == $va['nummer'])$sfound = true; + if($cnummer == $va['herstellernummer'])$sfound = true; + if($cnummer == $va['ean'])$sfound = true; + if(!$sfound) + { + if($this->app->DB->Select("SELECT a.id FROM artikelnummer_fremdnummern af INNER JOIN artikel a on af.artikel = a.id WHERE a.id = '".$va['id']."' AND af.nummer ='".$this->app->DB->real_escape_string($cnummer)."' AND af.nummer <> '' AND af.shopid = '$shop' AND af.aktiv = 1 AND a.nummer <> 'DEL' ORDER by af.id LIMIT 1"))$sfound = true; + } + } + } + } + if(!$sfound) + { + $umsatzsteuers = $v2['umsatzsteuer']; + if(!empty($v2['steuersatz']) && round((float)str_replace($v2['steuersatz'],',','.'),2)== 7)$umsatzsteuers = 'ermaessigt'; + $snummer = $this->GetNextArtikelnummer('produkt',1,$projekt); + $artdatas = array('name_de'=>$v2['name'],'nummer'=>$snummer + + ,'projekt'=>$projekt,'umsatzsteuer'=>$umsatzsteuers,'lagerartikel'=>1,'shop'=>$shop,'firma'=>(isset($this->app->User)?$this->app->User->GetFirma():1)); + $this->app->DB->Insert("INSERT INTO artikel (id) VALUES ('')"); + $artdatas['id'] = $this->app->DB->GetInsertID(); + $sneueid = $this->InsertUpdateArtikel($artdatas); + $sort = 1 + (int)$this->app->DB->Select("SELECT max(sort) FROM stueckliste WHERE stuecklistevonartikel = '".$neuerartikelid."'"); + $quant = str_replace($v3['quantity'],',','.'); + if(!$quant)$quant = 1; + $this->app->DB->Insert("INSERT INTO stueckliste (artikel, sort, stuecklistevonartikel, menge) values ('".$sneueid."','".$sort."','".$neuerartikelid."','".$quant."')"); + } + } + } + $fulldata[$k2]['ignorieren'] = true; + } + } + $artikel = $neuerartikelid; + } + } + } + } + + if($variante_kopietesten) + { + if($this->app->DB->Select("SELECT variante_kopie FROM artikel WHERE id = '$artikel' LIMIT 1")) + { + $neuerartikel['nummer'] = $this->GetNextArtikelnummer($this->app->DB->Select("SELECT typ FROM artikel WHERE id = '$artikel' LIMIT 1"), 1, $projekt); + $neuerartikel['stueckliste'] = 1; + $neuerartikel['variante_kopie'] = 1; + $neuerartikel['variante_von'] = $artikel; + $neuerartikel['projekt'] = $projekt; + $neuerartikel['lagerartikel'] = $this->app->DB->Select("SELECT lagerartikel FROM artikel WHERE id = '$artikel' LIMIT 1"); + if(isset($data['lagerartikel']) && $data['lagerartikel']) + { + $neuerartikel['lagerartikel'] = 1; + }elseif(isset($data['lagerartikel']) && ($data['lagerartikel'] === 0 || $data['lagerartikel'] === '0')) + { + $neuerartikel['lagerartikel'] = 1; + } + if(isset($data['serviceartikel']) && $data['serviceartikel']) + { + $neuerartikel['serviceartikel'] = 1; + }elseif(isset($data['serviceartikel']) && ($data['serviceartikel'] === 0 || $data['serviceartikel'] === '0')) + { + $neuerartikel['serviceartikel'] = 1; + } + $tmpArticleArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT name_de,lager_platz,produktion,adresse,umsatzsteuer,juststueckliste,bestandalternativartikel + FROM artikel + WHERE id = %d', + $artikel + ) + ); + $neuerartikel['name_de'] = !empty($tmpArticleArr)?$tmpArticleArr['name_de']:$this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['lager_platz'] = !empty($tmpArticleArr)?$tmpArticleArr['lager_platz']:$this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['produktion'] = !empty($tmpArticleArr)?$tmpArticleArr['produktion']:$this->app->DB->Select("SELECT produktion FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['adresse'] = !empty($tmpArticleArr)?$tmpArticleArr['adresse']:$this->app->DB->Select("SELECT adresse FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['umsatzsteuer'] = !empty($tmpArticleArr)?$tmpArticleArr['umsatzsteuer']:$this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['juststueckliste'] = !empty($tmpArticleArr)?$tmpArticleArr['juststueckliste']:$this->app->DB->Select("SELECT juststueckliste FROM artikel WHERE id = '$artikel' LIMIT 1"); + $neuerartikel['anabregs_text'] = isset($value['options']) && !empty($value['options'])?$value['options']:''; + $neuerartikel['bestandalternativartikel'] = !empty($tmpArticleArr)?$tmpArticleArr['bestandalternativartikel']:$this->app->DB->Select("SELECT bestandalternativartikel FROM artikel WHERE id = '$artikel' LIMIT 1"); + if($this->app->DB->Select("SELECT unikatbeikopie FROM artikel WHERE id = '$artikel' LIMIT 1"))$neuerartikel['unikat'] = 1; + $this->app->DB->Insert("INSERT INTO artikel (id) VALUES ('')"); + $neuerartikel['id'] = $this->app->DB->GetInsertID(); + $neuerartikelid = $this->InsertUpdateArtikel($neuerartikel); + if($neuerartikelid) + { + $this->ObjektProtokoll('artikel', $neuerartikelid,"artikel_create","Automatisch Kopie angelegt"); + $this->KopiereArtikelEigenschaften($artikel, $neuerartikelid); + $this->KopiereArtikelDateistichwoerter($artikel, $neuerartikelid); + $artikel = $neuerartikelid; + $artikelnummer = $neuerartikel['nummer']; + } + } + } + + //$waehrung = 'EUR'; + $datum =""; + $belegsprache = $this->app->DB->Select("SELECT sprache FROM $typ WHERE id = $id"); + $adresssprachen = $this->GetAdressSprachen(); + if(!is_null($data) && isset($data['options']))$beschreibung = $data['options']; + if(empty($beschreibung) && $artikelbeschreibungenuebernehmen)$beschreibung = $this->app->DB->real_escape_string($data['anabregs_text']); + if($artikelbeschreibungauswawision) + { + $beschreibung = $this->app->DB->real_escape_string($this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='$artikel' LIMIT 1")); + if($this->app->DB->Select("SELECT adr.id FROM auftrag auf INNER JOIN adresse adr ON auf.adresse = adr.id AND adr.sprache = 'englisch' WHERE auf.id = '$id' LIMIT 1")) + $beschreibung = $this->app->DB->Select("SELECT anabregs_text_en FROM artikel WHERE id = '$artikel'"); + if(!$beschreibung && $this->app->DB->Select("SELECT variante FROM artikel WHERE id = '$artikel' LIMIT 1")) + { + $variante_von = $this->app->DB->Select("SELECT variante_von FROM artikel WHERE id = '$artikel' LIMIT 1"); + if($variante_von)$beschreibung = $this->app->DB->real_escape_string($this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='$variante_von' LIMIT 1")); + } + if($this->ModulVorhanden('artikel_texte')){ + if(array_key_exists($belegsprache,$adresssprachen)){ + $belegsprache = $adresssprachen[$belegsprache]; + } + $artikelbeschreibung = $this->app->DB->Select("SELECT beschreibung FROM artikel_texte WHERE artikel=$artikel AND sprache='$belegsprache'"); + if($artikelbeschreibung){ + $beschreibung = $artikelbeschreibung; + } + } + } + //$vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $sort = $this->app->DB->Select("SELECT MAX(sort) FROM ".$typ."_position WHERE $typ='$id' LIMIT 1"); + $sort = $sort + 1; + $artikelnummeruebernehmen = $this->app->DB->Select("SELECT artikelnummeruebernehmen FROM shopexport WHERE id = '$shop' LIMIT 1"); + if($artikelnummeruebernehmen)$artikelnummer = $artikelnummershop; + + $artikelbezeichnungauswawision = $this->app->DB->Select("SELECT artikelbezeichnungauswawision FROM shopexport WHERE id = '$shop' LIMIT 1"); + if($artikelbezeichnungauswawision) + { + $name = ''; + if($this->app->DB->Select("SELECT adr.id FROM auftrag auf INNER JOIN adresse adr ON auf.adresse = adr.id AND adr.sprache = 'englisch' WHERE auf.id = '$id' LIMIT 1")) + $name = $this->app->DB->Select("SELECT name_en FROM artikel WHERE id = '$artikel'"); + if($name === '')$name = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id = '$artikel'"); + if($this->ModulVorhanden('artikel_texte')){ + if(array_key_exists($belegsprache,$adresssprachen)){ + $belegsprache = $adresssprachen[$belegsprache]; + } + $artikelbezeichnung = $this->app->DB->Select( + "SELECT name + FROM artikel_texte + WHERE artikel=$artikel AND sprache='$belegsprache' + ORDER BY name <> '' DESC + LIMIT 1" + ); + if($artikelbezeichnung){ + $name = $artikelbezeichnung; + } + } + } + + $name = $this->app->DB->real_escape_string($name); + if($typ === 'retoure') { + $this->app->DB->Insert("INSERT INTO `retoure_position` + (`retoure`,`artikel`,`bezeichnung`,`beschreibung`,`nummer`,`menge`, + `sort`,`lieferdatum`, `status`,`projekt`,`vpe`) + VALUES ('$id','$artikel','$name','$beschreibung','$artikelnummer','$menge', + '$sort','$datum','angelegt','$projekt','$vpe')"); + } + else{ + $this->app->DB->Insert("INSERT INTO " . $typ . "_position (id,$typ,artikel,bezeichnung,beschreibung,nummer,menge,preis, waehrung, + sort,lieferdatum, umsatzsteuer, status,projekt,vpe,rabatt,grundrabatt,rabattsync) + VALUES ('','$id','$artikel','$name','$beschreibung','$artikelnummer','$menge', + '$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe','$rabatt','$rabatt',1)"); + } + $insid = $this->app->DB->GetInsertID(); + + $mlmfelder = $this->app->DB->SelectArr("SELECT mlmpunkte, mlmbonuspunkte, mlmdirektpraemie FROM artikel WHERE id = '$artikel' LIMIT 1"); + if($mlmfelder) + { + $this->app->DB->Update("UPDATE ".$typ."_position SET + punkte = '".$mlmfelder[0]['mlmpunkte']."', + bonuspunkte = '".$mlmfelder[0]['mlmbonuspunkte']."', + mlmdirektpraemie = '".$mlmfelder[0]['mlmdirektpraemie']."' WHERE id = '$insid' LIMIT 1 + "); + } + + + if(isset($neuerartikel['juststueckliste']) && $neuerartikel['juststueckliste']) { + if($typ == 'auftrag') { + $this->AuftragExplodieren($id); + } + } + if($typ == 'auftrag' && is_array($data) && isset($data['parentap'])) { + $this->app->DB->Update("UPDATE auftrag_position set explodiert_parent = '".$data['parentap']."' where id = '$insid'"); + $this->app->DB->Update("UPDATE auftrag_position ap + INNER JOIN artikel art ON ap.artikel = art.id AND (art.juststueckliste = 1 OR art.stueckliste = 1) + SET ap.explodiert = 1 where ap.id = '".$data['parentap']."'"); + } + + if($typ === 'auftrag') { + $this->app->DB->Update(sprintf('UPDATE `artikel`SET `laststorage_changed` = NOW() WHERE `id` = %d', $artikel)); + } + return $insid; + } + + + function AddPositionManuellPreis($typ,$id, $artikel,$menge,$name,$preis,$umsatzsteuer,$rabatt=0,$waehrung='EUR',$beschreibung="") + { + // wenn es Artikel nicht gibt anlegen! bzw. immer updaten wenn name anders ist + $artArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT nummer,mlmpunkte,mlmbonuspunkte,mlmdirektpraemie FROM artikel WHERE id = %d', + $artikel + ) + ); + $bestellnummer = !empty($artArr)?$artArr['nummer']:$this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); + + //$vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $sort = $this->app->DB->Select("SELECT MAX(sort) FROM ".$typ."_position WHERE $typ='$id' LIMIT 1"); + $sort = $sort + 1; + + $mlmpunkte = !empty($artArr)?$artArr['mlmpunkte']:$this->app->DB->Select("SELECT mlmpunkte FROM artikel WHERE id='$artikel' LIMIT 1"); + $mlmbonuspunkte = !empty($artArr)?$artArr['mlmbonuspunkte']:$this->app->DB->Select("SELECT mlmbonuspunkte FROM artikel WHERE id='$artikel' LIMIT 1"); + $mlmdirektpraemie = !empty($artArr)?$artArr['mlmdirektpraemie']:$this->app->DB->Select("SELECT mlmdirektpraemie FROM artikel WHERE id='$artikel' LIMIT 1"); + + $name = $this->app->DB->real_escape_string($name); + $beschreibung = $this->app->DB->real_escape_string($beschreibung); + $bestellnummer = $this->app->DB->real_escape_string($bestellnummer); + + if($typ=="auftrag" || $typ=="angebot" || $typ=="rechnung") + { + $this->app->DB->Insert("INSERT INTO ".$typ."_position (id,$typ,artikel,bezeichnung, + beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe,rabatt,punkte,bonuspunkte,mlmdirektpraemie) + VALUES ('','$id','$artikel','$name','$beschreibung','$bestellnummer','$menge', + '$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe','$rabatt','$mlmpunkte','$mlmbonuspunkte','$mlmdirektpraemie')"); + } else { + $this->app->DB->Insert("INSERT INTO ".$typ."_position (id,$typ,artikel,bezeichnung, + beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe,rabatt) + VALUES ('','$id','$artikel','$name','$beschreibung','$bestellnummer','$menge','$preis', + '$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe','$rabatt')"); + } + return $this->app->DB->GetInsertID(); + } + + + function AddPositionManuell($typ,$id, $artikel,$menge,$name=null,$beschreibung=null,$waehrung='EUR') + { + $artArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT nummer,projekt FROM artikel WHERE id = %d', + $artikel + ) + ); + $bestellnummer = !empty($artArr)?$artArr['nummer']:$this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); + $projekt = !empty($artArr)?$artArr['projekt']:$this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$artikel' LIMIT 1"); + + $adresse = $this->app->DB->Select("SELECT adresse FROM $typ WHERE id='$id' LIMIT 1"); + + + + if($menge<1) + $preis = $this->GetVerkaufspreis($artikel,1,$adresse,$waehrung); + else + $preis = $this->GetVerkaufspreis($artikel,$menge,$adresse,$waehrung); + + $artikelnummerkunde = $this->app->DB->real_escape_string($this->app->DB->Select("SELECT kundenartikelnummer FROM verkaufspreise WHERE adresse='$adresse' AND artikel='$artikel' AND kundenartikelnummer!='' AND ab_menge <='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') ORDER by ab_menge DESC LIMIT 1")); + + + $artikeldata = $this->app->DB->SelectRow("SELECT umsatzsteuer,mlmpunkte,mlmbonuspunkte,mlmdirektpraemie,name_de,anabregs_text FROM artikel WHERE id='$artikel' LIMIT 1"); + $vpe = ''; + $datum = null; + + $sort = (int)$this->app->DB->Select("SELECT IFNULL(MAX(sort),0) FROM ".$typ."_position WHERE $typ='$id' LIMIT 1"); + $sort = $sort + 1; + + $umsatzsteuer = $artikeldata['umsatzsteuer']; + $mlmpunkte = $artikeldata['mlmpunkte']; + $mlmbonuspunkte = $artikeldata['mlmbonuspunkte']; + $mlmdirektpraemie = $artikeldata['mlmdirektpraemie']; + + if($name===null) { + $name = $artikeldata['name_de']; + } + if($beschreibung===null) { + $beschreibung = $artikeldata['anabregs_text']; + } + + if($typ==='auftrag' || $typ==='angebot' || $typ==='rechnung') + { + $this->app->DB->Insert("INSERT INTO ".$typ."_position (id,$typ,artikel,bezeichnung, + beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe,punkte,bonuspunkte,mlmdirektpraemie,artikelnummerkunde) + VALUES ('','$id','$artikel','$name','$beschreibung','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt', + '$vpe','$mlmpunkte','$mlmbonuspunkte','$mlmdirektpraemie','$artikelnummerkunde')"); + } else { + $this->app->DB->Insert("INSERT INTO ".$typ."_position (id,$typ,artikel,bezeichnung, + beschreibung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe) + VALUES ('','$id','$artikel','$name','$beschreibung','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe')"); + } + + $posid = $this->app->DB->GetInsertID(); + + $this->RunHook("erpapi_addpositionmanuell", 5, $typ, $id, $artikel, $menge, $posid); + return $posid; + } + + + + function AddAuftragPosition($auftrag, $verkauf,$menge,$datum) + { + $artikel = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $bezeichnunglieferant = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1"); + $bestellnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); + $preis = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikel' LIMIT 1"); + $sort = $this->app->DB->Select("SELECT MAX(sort) FROM auftrag_position WHERE auftrag='$auftrag' LIMIT 1"); + $sort = $sort + 1; + + $mlmpunkte = $this->app->DB->Select("SELECT mlmpunkte FROM artikel WHERE id='$artikel' LIMIT 1"); + $mlmbonuspunkte = $this->app->DB->Select("SELECT mlmbonuspunkte FROM artikel WHERE id='$artikel' LIMIT 1"); + $mlmdirektpraemie = $this->app->DB->Select("SELECT mlmdirektpraemie FROM artikel WHERE id='$artikel' LIMIT 1"); + + $this->app->DB->Insert("INSERT INTO auftrag_position (id,auftrag,artikel,bezeichnung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, + status,projekt,vpe,punkte,bonuspunkte,mlmdirektpraemie) + VALUES ('','$auftrag','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe', + '$mlmpunkte','$mlmbonuspunkte','$mlmdirektpraemie')"); + } + + + function DeleteAuftrag($id) + { + $belegnr = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1"); + if($belegnr=="" || $belegnr=="0") + { + $positionen = $this->app->DB->SelectArr("SELECT id FROM auftrag_position WHERE auftrag = '$id'"); + if($positionen) + { + foreach($positionen as $pos) + { + $this->app->DB->Delete("DELETE FROM objekt_lager_platz WHERE objekt = 'auftrag' AND parameter = '".$pos['id']."'"); + } + } + $this->app->DB->Delete("DELETE FROM auftrag_position WHERE auftrag='$id'"); + $this->app->DB->Delete("DELETE FROM auftrag_protokoll WHERE auftrag='$id'"); + $this->app->DB->Delete("DELETE FROM auftrag WHERE id='$id' LIMIT 1"); + $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag' AND parameter='$id'"); + } + } + + + function GetCreateProjekt($adresse=0) + { + if($adresse>0) + $tmp_projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$adresse' LIMIT 1"); + + if($tmp_projekt > 0) + $projekt = $tmp_projekt; + + $projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + if($projekt_bevorzugt=="1") + { + $projekt = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1"); + } + + if($projekt <= 0 && $this->app->User->GetType()=="admin") + { + $projekt = $this->app->DB->Select("SELECT standardprojekt FROM firma WHERE id='".$this->app->User->GetFirma()."' LIMIT 1"); + } + else { + if($projekt <=0) + { + $projekt = $this->FallbackRolle($this->app->User->GetAdresse()); + } + } + return $projekt; + } + + + + function CreateAngebot($adresse="") + { + $projekt = $this->GetCreateProjekt($adresse); + $standardlager = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id = '$projekt' LIMIT 1"); + $usereditid = 0; + if(isset($this->app->User) && $this->app->User && method_exists($this->app->User,'GetID'))$usereditid = $this->app->User->GetID(); + $ohnebriefpapier = $this->Firmendaten("angebot_ohnebriefpapier"); + $belegmax = ""; + + $angebotersatz_standard = $this->Firmendaten("angebotersatz_standard"); + if($this->StandardZahlungsweise($projekt)=="rechnung") + { + $this->app->DB->Insert("INSERT INTO angebot (id,datum,gueltigbis,bearbeiter,usereditid,vertrieb,firma,belegnr,autoversand,zahlungsweise, + zahlungszieltage, + zahlungszieltageskonto, + zahlungszielskonto, + status,projekt,adresse,ohne_briefpapier,abweichendebezeichnung ) + VALUES ('',NOW(), DATE_ADD(curdate(), INTERVAL ".((int)$this->Firmendaten("angebot_anzahltage")>0?(int)$this->Firmendaten("angebot_anzahltage"):28)." DAY),'','$usereditid','','".$this->app->User->GetFirma()."','$belegmax',1,'".$this->StandardZahlungsweise($projekt)."', + '".$this->ZahlungsZielTage($projekt)."', + '".$this->ZahlungsZielTageSkonto($projekt)."', + '".$this->ZahlungsZielSkonto($projekt)."', + 'angelegt','$projekt','$adresse','".$ohnebriefpapier."','$angebotersatz_standard')"); + + } else { + $this->app->DB->Insert("INSERT INTO angebot (id,datum,gueltigbis,bearbeiter,usereditid,vertrieb,firma,belegnr,autoversand,zahlungsweise, + zahlungszieltage, + zahlungszieltageskonto, + zahlungszielskonto, + status,projekt,adresse,ohne_briefpapier,abweichendebezeichnung ) + VALUES ('',NOW(), DATE_ADD(curdate(), INTERVAL ".((int)$this->Firmendaten("angebot_anzahltage")>0?(int)$this->Firmendaten("angebot_anzahltage"):28)." DAY),'','$usereditid','','1','$belegmax',1,'".$this->StandardZahlungsweise($projekt)."', + '0', + '0', + '0', + 'angelegt','$projekt','$adresse','".$ohnebriefpapier."','$angebotersatz_standard')"); + } + + $id = $this->app->DB->GetInsertID(); + + $this->CheckVertrieb($id,"angebot"); + $this->CheckBearbeiter($id,"angebot"); + if($standardlager) { + $this->app->DB->Update("UPDATE angebot SET standardlager = '$standardlager' WHERE id = '$id' LIMIT 1"); + } + $type="angebot"; + $this->app->erp->ObjektProtokoll($type,$id,$type."_create",ucfirst($type)." angelegt"); + + $this->app->erp->AngebotProtokoll($id,"Angebot angelegt"); + $this->SchnellFreigabe("angebot",$id); + $this->EventAPIAdd("EventAngebotCreate",$id,"angebot","create"); + $this->LoadSteuersaetzeWaehrung($id,"angebot",$projekt); + + return $id; + } + + + function AddAdressePosition($adresse, $verkauf,$menge,$startdatum, $wiederholend = 1, $zahlzyklus = 1) + { + $adresse = (int)$adresse; + $verkauf = (int)$verkauf; + $menge = (float)str_replace(',','.',$menge); + $lieferdatum = $this->app->String->Convert($startdatum,"%1.%2.%3","%3-%2-%1"); + + $artikel = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $bezeichnung= $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1"); + $bestellnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); + $anabregs_text = $this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='$artikel' LIMIT 1"); + $preis = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $waehrung = $this->app->DB->Select("SELECT waehrung FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikel' LIMIT 1"); + $vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + //$sort = $this->app->DB->Select("SELECT MAX(sort) FROM angebot_position WHERE angebot='$angebot' LIMIT 1"); + $sort = (int)$this->app->DB->Select("SELECT MAX(sort) FROM abrechnungsartikel where adresse = ".$adresse); + $sort = $sort + 1; + $this->app->DB->Insert("INSERT INTO abrechnungsartikel (id,artikel,bezeichnung,nummer,menge,preis, sort, + lieferdatum, steuerklasse, status,projekt,wiederholend,zahlzyklus,adresse,startdatum,waehrung,beschreibung,beschreibungersetzten,dokument,preisart) + VALUES ('','$artikel','$bezeichnung','$bestellnummer','$menge','$preis','$sort','$lieferdatum', + '$umsatzsteuer','angelegt','$projekt','$wiederholend','$zahlzyklus','$adresse','$startdatum','$waehrung','$anabregs_text','1','rechnung','monat')"); + + return $this->app->DB->GetInsertID(); + } + + + function AddAngebotPosition($angebot, $verkauf,$menge,$datum) + { + $artikel = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $bezeichnunglieferant = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1"); + $bestellnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); + $beschreibung = $this->app->DB->Select("SELECT anabregs_text FROM artikel WHERE id='$artikel' LIMIT 1"); + $preis = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $waehrung = $this->app->DB->Select("SELECT waehrung FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikel' LIMIT 1"); + $vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $sort = $this->app->DB->Select("SELECT MAX(sort) FROM angebot_position WHERE angebot='$angebot' LIMIT 1"); + $sort = $sort + 1; + $this->app->DB->Insert("INSERT INTO angebot_position (id,angebot,artikel,beschreibung,bezeichnung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe) + VALUES ('','$angebot','$artikel','$beschreibung','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe')"); + } + + function DeleteBelegPosition($doctype, $posid) + { + $arr = $this->app->DB->SelectArr("SELECT * FROM $doctype"."_position WHERE id = '$posid' LIMIT 1"); + if(!$arr)return false; + $this->app->DB->Delete("DELETE FROM $doctype"."_position WHERE id = '$posid' LIMIT 1"); + $this->app->DB->Update("UPDATE $doctype"."_position SET sort = sort - 1 WHERE $doctype = '".$arr[0][$doctype]."' AND sort > ".$arr[0]['sort']); + $akstort = $this->app->DB->SelectArr("SELECT sort FROM beleg_zwischenpositionen WHERE doctype = '$doctype' AND doctypeid = '".$arr[0][$doctype]."' AND pos = '".$arr[0]['sort']."' ORDER BY sort DESC LIMIT 1"); + $offset = 0; + if($aktsort)$offset = 1 + (int)$aktsort[0]['sort']; + $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos - 1, sort = sort - $offset WHERE doctype = '$doctype' AND doctypeid = '".$arr[0][$doctype]."' AND pos = '".($arr[0]['sort'] + 1)."'"); + $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos - 1 WHERE doctype = '$doctype' AND doctypeid = '".$arr[0][$doctype]."' AND pos > '".($arr[0]['sort'] + 1)."'"); + return true; + } + + + function CopyBestellung($id) + { + $obj = $this->LoadModul('bestellung'); + if(!empty($obj) && method_exists($obj, 'CopyBestellung')) + { + return $obj->CopyBestellung($id); + } + } + + function NextProjektnummer($abkuerzung) + { + $i = 1; + $neu = $abkuerzung.$i; + while($this->app->DB->Select("SELECT id FROM projekt WHERE abkuerzung = '".$this->app->DB->real_escape_string($neu)."' LIMIT 1")) + { + $i++; + $neu =$abkuerzung.$i; + } + return $neu; + } + + + function CopyProjektDaten($fromid , $toid, $data = null) + { + $id = $fromid; + $newid = $toid; + + $arbeitspakete = $this->app->DB->SelectArr("SELECT id,vorgaenger FROM arbeitspaket WHERE projekt = '$id'"); + + for ($i=0; $i < count($data['arbeitspaket']); $i++) { + for ($j=0; $j < count($arbeitspakete); $j++) { + if(($arbeitspakete[$j]['id'] == $data['arbeitspaket'][$i]) && ($arbeitspakete[$j]['vorgaenger'] != '0')){ + if(!in_array($arbeitspakete[$j]['vorgaenger'], $data['arbeitspaket'])){ + $data['arbeitspaket'][] = $arbeitspakete[$j]['vorgaenger']; + } + } + } + } + + + if($arbeitspakete) + { + $alteNeueIds = array(); + + foreach($arbeitspakete as $arbeitspaket) + { + $do = true; + if(is_null($data) || (!is_null($data) && !isset($data['arbeitspaket']) || !is_array($data['arbeitspaket']) || !in_array($arbeitspaket['id'], $data['arbeitspaket'])))$do = false; + if($do) + { + $newpaket = $this->app->DB->MysqlCopyRow('arbeitspaket', 'id', $arbeitspaket['id']); + $alteNeueIds[$arbeitspaket['id']] = $newpaket; + $idtoid[$arbeitspaket['id']] = $newpaket; + $newidtoold[$newpaket] = $arbeitspaket['id']; + $this->app->DB->Update("UPDATE arbeitspaket SET status = 'offen', abgabedatum = '0000-00-00', startdatum = '0000-00-00', projekt = '$newid' WHERE id = '$newpaket' LIMIT 1"); + } + } + foreach($arbeitspakete as $arbeitspaket) + { + if($arbeitspaket['vorgaenger'] && !empty($idtoid[$arbeitspaket['vorgaenger']]) && !empty($idtoid[$arbeitspaket['id']])) + { + $this->app->DB->Update("UPDATE arbeitspaket SET vorgaenger = '".$idtoid[$arbeitspaket['vorgaenger']]."' WHERE id = '".$idtoid[$arbeitspaket['id']]."' LIMIT 1"); + } + } + unset($arbeitspakete); + } + $artikel = $this->app->DB->SelectArr("SELECT id,parent,teilprojekt FROM projekt_artikel WHERE projekt = '$id' and teilprojekt > 0"); + if($artikel) + { + foreach($artikel as $art) + { + $do = true; + if((!isset($idtoid) || !isset($idtoid[$art['teilprojekt']])))$do = false; + if((!is_null($data) && (!isset($data['artikel']) || !is_array($data['artikel']) || !in_array($art['id'], $data['artikel']))))$do = false; + if($do) + { + $newartikel = $this->app->DB->MysqlCopyRow('projekt_artikel', 'id', $art['id']); + $this->app->DB->Update("UPDATE projekt_artikel SET projekt = '$newid' WHERE id = '$newartikel' LIMIT 1"); + $this->app->DB->Update("UPDATE projekt_artikel SET teilprojekt = '".$newidtoold[$art['teilprojekt']]."' WHERE id = '$newartikel' LIMIT 1"); + $idtoidart[$art['id']] = $newpaket; + } + } + foreach($artikel as $art) + { + if($art['parent'] && !empty($idtoidart[$art['parent']]) && !empty($idtoidart[$art['id']])) + { + $this->app->DB->Update("UPDATE projekt_artikel SET parent = '".$idtoidart[$art['parent']]."' WHERE id = '".$idtoidart[$art['id']]."' LIMIT 1"); + } + } + unset($idtoidart); + unset($artikel); + } + $adressrollen = $this->app->DB->SelectArr("SELECT id FROM adresse_rolle WHERE projekt = '$id' AND objekt like 'Projekt' AND (bis = '0000-00-00' OR bis >= date(now()))"); + if($adressrollen) + { + foreach($adressrollen as $rolle) + { + $do = true; + if(!is_null($data) && (!isset($data['adressrollen']) || !is_array($data['adressrollen']) || !in_array($rolle['id'], $data['adressrollen'])))$do = false; + if($do) + { + $newrolle = $this->app->DB->MysqlCopyRow('adresse_rolle', 'id', $rolle['id']); + $this->app->DB->Update("UPDATE adresse_rolle SET projekt = '$newid' , parameter = '$newid' WHERE id = '$newrolle' LIMIT 1"); + } + } + unset($adressrollen); + } + $aufgaben = $this->app->DB->SelectArr("SELECT a.id, a.aufgabe, ap.aufgabe AS teilprojekt, adr.name as mitarbeiter, a.status + FROM aufgabe a + LEFT JOIN projekt p ON p.id=a.projekt + LEFT JOIN adresse adr ON a.adresse=adr.id + LEFT JOIN arbeitspaket ap ON ap.id=a.teilprojekt + WHERE a.projekt = '$id'"); + + if($aufgaben){ + foreach($aufgaben as $aufgabe){ + $do = true; + if((!is_null($data) && (!isset($data['aufgaben']) || !is_array($data['aufgaben']) || !in_array($aufgabe['id'], $data['aufgaben']))))$do = false; + if($do) + { + $newaufgabe = $this->app->DB->MysqlCopyRow('aufgabe', 'id', $aufgabe['id']); + $this->app->DB->Update("UPDATE aufgabe SET projekt = '$newid', angelegt_am = CURDATE() WHERE id = '$newaufgabe' LIMIT 1"); + $altesTeilprojekt = $this->app->DB->Select("SELECT teilprojekt FROM aufgabe WHERE id = '$newaufgabe' LIMIT 1"); + if($altesTeilprojekt != '' && $altesTeilprojekt > 0){ + if(is_array($alteNeueIds)){ + if($alteNeueIds[$altesTeilprojekt] > 0){ + $this->app->DB->Update("UPDATE aufgabe SET teilprojekt = '".$alteNeueIds[$altesTeilprojekt]."' WHERE id = '$newaufgabe' LIMIT 1"); + }else{ + $this->app->DB->Update("UPDATE aufgabe SET teilprojekt = 0 WHERE id = '$newaufgabe' LIMIT 1"); + } + } + } + + } + } + unset($aufgaben); + } + + $wiedervorlagen = $this->app->DB->SelectArr("SELECT id FROM wiedervorlage WHERE projekt = '$id'"); + + if($wiedervorlagen){ + foreach($wiedervorlagen as $wiedervorlage){ + $do = true; + if(!is_null($data) && (!isset($data['wiedervorlagen']) || !is_array($data['wiedervorlagen']) || !in_array($wiedervorlage['id'], $data['wiedervorlagen']))){ + $do = false; + } + if($do){ + $neueWiedervorlage = $this->app->DB->MysqlCopyRow('wiedervorlage', 'id', $wiedervorlage['id']); + $this->app->DB->Update("UPDATE wiedervorlage SET projekt = '$newid', parameter = '$newid' WHERE id = '$neueWiedervorlage' LIMIT 1"); + } + } + unset($wiedervorlagen); + } + } + + /** + * @param $id Project-ID to Copy + * @param null $data unused + * @return int|bool return new Project-Id or false on error + */ + public function CopyProjekt($id, $data = null) + { + $id = (int)$id; + if(!empty($id)){ + $id = $this->app->DB->Select("SELECT id FROM projekt WHERE id = '$id' LIMIT 1"); + } + if(empty($id)){ + return false; + } + + $newid = $this->app->DB->MysqlCopyRow('projekt', 'id', $id); + if(empty($newid)) + { + return false; + } + $abkuerzung = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id = '$id' LIMIT 1"); + $abkuerzungneu = $this->NextProjektnummer($abkuerzung); + if(!empty($abkuerzungneu)){ + $this->app->DB->Update("UPDATE projekt SET abkuerzung = '".$this->app->DB->real_escape_string($abkuerzungneu)."', status = 'gestartet' WHERE id = '$newid' LIMIT 1"); + } + return $newid; + } + + + /** + * @param $doctype + * @param $doctypeid + * @return int|void + */ + public function getNextSort($doctype, $doctypeid) + { + if($doctypeid <= 0 || !is_numeric($doctypeid) || empty($doctype) || !is_string($doctype) || strpos($doctype,'`') !== false) + { + return; + } + return 1 + (int)$this->app->DB->Select('SELECT ifnull(max(sort),0) FROM `'.$doctype.'` WHERE id = '.$doctypeid); + } + + + public function CopyVerbindlichkeit($id){ + /** @var Verbindlichkeit $obj */ + $obj = $this->app->erp->LoadModul('verbindlichkeit'); + if(!empty($obj) && method_exists($obj,'copyLiability')) { + return $obj->copyLiability($id); + } + return 0; + } + + public function CopyAuftrag($id) + { + if($id <= 0) + { + return; + } + // kopiere eintraege aus auftrag_position + $arr = $this->app->DB->SelectArr( + sprintf( + "SELECT NOW() as datum,projekt,freitext,bodyzusatz,adresse,name,shopextid, + standardlager,ansprechpartner,anschreiben, + abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer, + ihrebestellnummer,typ, + versandart,vertrieb,zahlungsweise,zahlungszieltage,lieferdatum,'angelegt' as status, + rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe, + zahlungszieltageskonto,zahlungszielskonto,firma,'angelegt' as status,abweichendelieferadresse,liefername, + lieferabteilung,lieferunterabteilung,ust_befreit,angebotid,kommissionskonsignationslager, + lieferland,lieferstrasse,lieferort,lieferplz,lieferadresszusatz,lieferansprechpartner,autoversand,art, + sprache,anzeigesteuer,waehrung,kurs,kostenstelle,gln,liefergln,bundesstaat,lieferemail, lieferbedingung + FROM auftrag WHERE id=%d LIMIT 1", + $id + ) + ); + if(empty($arr)) { + return; + } + $this->app->DB->Insert('INSERT INTO auftrag (id) VALUES (NULL)'); + $newid = $this->app->DB->GetInsertID(); + $arr[0]['kundennummer'] = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id = '".$arr[0]['adresse']."' LIMIT 1"); + $this->app->DB->UpdateArr('auftrag', $newid, 'id', $arr[0],true); + $pos = $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE auftrag='$id' order by sort, id"); + $cpos = !empty($pos)?count($pos):0; + for($i=0;$i<$cpos;$i++){ + $this->app->DB->Insert("INSERT INTO auftrag_position (id) VALUES('')"); + $newposid = $this->app->DB->GetInsertID(); + $altzuneu[$pos[$i]['id']] = $newposid; + $pos[$i]['auftrag']=$newid; + if($pos[$i]['explodiert_parent'] && isset($altzuneu[$pos[$i]['explodiert_parent']]))$pos[$i]['explodiert_parent'] = $altzuneu[$pos[$i]['explodiert_parent']]; + $this->app->DB->UpdateArr('auftrag_position',$newposid,'id',$pos[$i],true); + if(is_null($pos[$i]['steuersatz'])){ + $this->app->DB->Update("UPDATE auftrag_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); + } + } + $this->CheckFreifelder('auftrag',$newid); + $this->CopyBelegZwischenpositionen('auftrag',$id,'auftrag',$newid); + + $this->app->DB->Update("UPDATE auftrag_position SET geliefert=0, geliefert_menge=0 WHERE auftrag='$newid'"); + $this->LoadSteuersaetzeWaehrung($newid,'auftrag'); + $this->SchnellFreigabe('auftrag',$newid); + return $newid; + } + + function CopyGutschrift($id) + { + $obj = $this->LoadModul('gutschrift'); + if(!empty($obj) && method_exists($obj,'CopyGutschrift')) + { + return $obj->CopyGutschrift($id); + } + } + + + function CopyRechnung($id) + { + $obj = $this->LoadModul('rechnung'); + if(!empty($obj) && method_exists($obj,'CopyRechnung')){ + return $obj->CopyRechnung($id); + } + } + + function CopyPreisanfrage($id) + { + /** @var Preisanfrage $obj */ + $obj = $this->app->erp->LoadModul('preisanfrage'); + if(!empty($obj) && method_exists($obj,'CopyPreisanfrage')) { + return $obj->CopyPreisanfrage($id); + } + return 0; + } + + function CopyProformarechnung($id) + { + $this->app->DB->Insert("INSERT INTO proformarechnung (id) VALUES ('')"); + $newid = $this->app->DB->GetInsertID(); + $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,projekt,freitext,bodyzusatz,adresse,'' as belegnr,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,lieferantennummer,bearbeiter,'angelegt' as status,typ,sprache,waehrung, + firma FROM proformarechnung WHERE id='$id' LIMIT 1"); + + $this->app->DB->UpdateArr('proformarechnung', $newid, 'id',$arr[0],true); + $pos = $this->app->DB->SelectArr("SELECT * FROM proformarechnung_position WHERE proformarechnung='$id'"); + $cpos = !empty($pos)?count($pos):0; + for($i=0;$i<$cpos;$i++) + { + $this->app->DB->Insert("INSERT INTO proformarechnung_position (id) VALUES('')"); + $newposid = $this->app->DB->GetInsertID(); + $pos[$i]['proformarechnung']=$newid; + $this->app->DB->UpdateArr('proformarechnung_position',$newposid,'id',$pos[$i],true); + if(is_null($pos[$i]['steuersatz'])) { + $this->app->DB->Update("UPDATE proformarechnung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); + } + } + $this->CheckFreifelder("proformarechnung",$newid); + $this->CopyBelegZwischenpositionen("proformarechnung",$id,"proformarechnung",$newid); + $this->LoadSteuersaetzeWaehrung($newid,"proformarechnung"); + return $newid; + } + + + function CopyAnfrage($id) + { + $this->app->DB->Insert("INSERT INTO anfrage (id) VALUES ('')"); + $newid = $this->app->DB->GetInsertID(); + $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,projekt,bodyzusatz,freitext,adresse,CONCAT(name,' (Kopie)') as name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,bearbeiter,'angelegt' as status,typ, + firma FROM anfrage WHERE id='$id' LIMIT 1"); + $this->app->DB->UpdateArr('anfrage', $newid, 'id',$arr[0],true); + $pos = $this->app->DB->SelectArr("SELECT * FROM anfrage_position WHERE anfrage='$id'"); + + $cpos = !empty($pos)?count($pos):0; + for($i=0;$i<$cpos;$i++) + { + $this->app->DB->Insert("INSERT INTO anfrage_position (id) VALUES('')"); + $newposid = $this->app->DB->GetInsertID(); + $pos[$i]['anfrage']=$newid; + $this->app->DB->UpdateArr('anfrage_position',$newposid,'id',$pos[$i],true); + if(is_null($pos[$i]['steuersatz'])) { + $this->app->DB->Update("UPDATE anfrage_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); + } + } + $this->CheckFreifelder("anfrage",$newid); + $this->CopyBelegZwischenpositionen("anfrag",$id,"anfrage",$newid); + $this->LoadSteuersaetzeWaehrung($newid,"anfrage"); + return $newid; + } + + function CopyInventur($id) + { + /** @var Inventur $obj */ + $obj = $this->LoadModul('inventur'); + if(!empty($obj) && method_exists($obj, 'CopyInventur')) + { + return $obj->CopyInventur($id); + } + return 0; + } + + /** + * @deprecated + * + */ + public function CopyKalkulation($id) + { + $obj = $this->LoadModul('kalkulation'); + if(!empty($obj) && method_exists($obj,'CopyKalkulation')) + { + return $obj->CopyKalkulation($id); + } + } + + /** + * @deprecated + * + */ + public function CopyReisekosten($id) + { + /** @var Reisekosten $obj */ + $obj = $this->LoadModul('reisekosten'); + if(!empty($obj) && method_exists($obj,'CopyReisekosten')) + { + return $obj->CopyReisekosten($id); + } + return 0; + } + + + /** + * @param $id + * + * @return int|null + */ + public function CopyArbeitsnachweis($id) + { + /** @var Arbeitsnachweis $obj */ + $obj = $this->app->erp->LoadModul('arbeitsnachweis'); + if(!empty($obj) && method_exists($obj, 'CopyArbeitsnachweis')) { + return $obj->CopyArbeitsnachweis($id); + } + return 0; + } + + + /** + * @param $id + * + * @return int|null + */ + public function CopyLieferschein($id) + { + /** @var Lieferschein $obj */ + $obj = $this->LoadModul('lieferschein'); + if(!empty($obj) && method_exists($obj, 'CopyLieferschein')){ + return $obj->CopyLieferschein($id); + } + return null; + } + + /** + * @param int $id + * + * @return int|null + */ + public function CopyRetoure($id) + { + $this->app->DB->Insert("INSERT INTO retoure (id) VALUES ('')"); + $newid = $this->app->DB->GetInsertID(); + $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,projekt,lieferschein,lieferscheinid,bodyzusatz,freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,bearbeiter,'angelegt' as status,typ,standardlager,ansprechpartner,titel,anschreiben, + firma FROM retoure WHERE id='$id' LIMIT 1"); + $this->app->DB->UpdateArr('retoure',$newid,'id',$arr[0],true); + + $pos = $this->app->DB->SelectArr("SELECT * FROM retoure_position WHERE retoure='$id'"); + $cpos = !empty($pos)?count($pos):0; + for($i=0;$i<$cpos;$i++) { + $this->app->DB->Insert("INSERT INTO retoure_position (id) VALUES(NULL)"); + $newposid = $this->app->DB->GetInsertID(); + $altzuneu[$pos[$i]['id']] = $newposid; + $pos[$i]['lagertext']=''; + $pos[$i]['retoure']=$newid; + $pos[$i]['menge_eingang'] = 0; + $pos[$i]['menge_gutschrift'] = 0; + $pos[$i]['geliefert'] = 0; + if($pos[$i]['explodiert_parent'] && isset($altzuneu[$pos[$i]['explodiert_parent']])) { + $pos[$i]['explodiert_parent'] = $altzuneu[$pos[$i]['explodiert_parent']]; + } + $this->app->DB->UpdateArr('retoure_position',$newposid,'id',$pos[$i],true); + } + $this->CheckFreifelder('retoure',$newid); + $this->CopyBelegZwischenpositionen('retoure',$id,'retoure',$newid); + $this->app->DB->Update("UPDATE retoure_position SET geliefert=0, abgerechnet=0 WHERE retoure='$newid'"); + + $this->SchnellFreigabe("retoure",$newid); + return $newid; + } + + function CopyBelegZwischenpositionen($orgtyp,$orgid,$newtyp,$newid, $zwischenpositionen = null) + { + $where = ''; + if($zwischenpositionen) { + foreach($zwischenpositionen as $v) { + $wherea[] = " id = '$v' "; + $where = ' AND ('.implode(' OR ', $wherea).") "; + } + } + + $belegpositionen = $this->app->DB->SelectArr("SELECT * FROM beleg_zwischenpositionen WHERE doctype = '$orgtyp' AND doctypeid = '$orgid' $where "); + if($belegpositionen) { + $cpos = !empty($belegpositionen)?count($belegpositionen):0; + for($i=0;$i<$cpos;$i++) { + $this->app->DB->Insert('INSERT INTO beleg_zwischenpositionen (id) VALUES (NULL)'); + $newposid = $this->app->DB->GetInsertID(); + $belegpositionen[$i]['doctypeid']=$newid; + $belegpositionen[$i]['doctype']=$newtyp; + $this->app->DB->UpdateArr('beleg_zwischenpositionen',$newposid,'id',$belegpositionen[$i],true); + } + } + } + + + function CopyAngebot($id) + { + + // kopiere eintraege aus angebot_position + $this->app->DB->Insert("INSERT INTO angebot (id) VALUES ('')"); + $newid = $this->app->DB->GetInsertID(); + $arr = $this->app->DB->SelectRow("SELECT NOW() as datum,projekt,anfrage,bodyzusatz,freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,vertrieb,zahlungsweise,zahlungszieltage,ust_befreit,lieferdatum,DATE_ADD(curdate(),INTERVAL ".((int)$this->app->erp->Firmendaten("angebot_anzahltage")>0?(int)$this->app->erp->Firmendaten("angebot_anzahltage"):28)." DAY) as gueltigbis,'angelegt' as status,rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe,typ,aktion,titel,ansprechpartner,anschreiben,keinsteuersatz, + zahlungszieltageskonto,standardlager,zahlungszielskonto,firma,abweichendelieferadresse,liefername,lieferabteilung,lieferunterabteilung, + lieferland,lieferstrasse,lieferort,lieferplz,lieferadresszusatz,lieferansprechpartner,liefergln,lieferemail,gln,liefertitel,internebezeichnung,lieferdatumkw,lieferbedingung,gesamtsummeausblenden + ,sprache,anzeigesteuer,waehrung,kurs,kostenstelle + FROM angebot WHERE id='$id' LIMIT 1"); + + $this->app->DB->UpdateArr('angebot', $newid, 'id', $arr, true); + $pos = $this->app->DB->SelectArr("SELECT * FROM angebot_position WHERE angebot='$id'"); + $cpos = !empty($pos)?count($pos):0; + for($i=0;$i<$cpos;$i++) { + + $this->app->DB->Insert("INSERT INTO angebot_position (id) VALUES('')"); + $newposid = $this->app->DB->GetInsertID(); + $pos[$i]['angebot']=$newid; + $this->app->DB->UpdateArr('angebot_position',$newposid,'id',$pos[$i],true); + if(is_null($pos[$i]['steuersatz'])) { + $this->app->DB->Update("UPDATE angebot_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); + } + } + + $this->CopyBelegZwischenpositionen('angebot',$id,'angebot',$newid); + + $this->LoadSteuersaetzeWaehrung($newid,'angebot'); + $this->SchnellFreigabe('angebot',$newid); + return $newid; + } + + + function WeiterfuehrenDateianhang($vonbelegtyp,$vonbelegid,$nachbelegtyp,$nachbelegid){ + + $dateien = $this->app->DB->SelectArr("SELECT datei, subjekt,parameter2,objekt2 FROM datei_stichwoerter WHERE objekt LIKE '$vonbelegtyp' AND parameter = '$vonbelegid'"); + + if($dateien != ""){ + foreach($dateien as $key=>$value){ + $this->app->erp->AddDateiStichwort($value['datei'], $value['subjekt'], $nachbelegtyp, $nachbelegid,false,$value['parameter2'],$value['objekt2']); + } + } + } + + + function WeiterfuehrenAuftragZuLieferschein($id, $positionen = null, $zwischenpositionen = null) + { + if($id <= 0) { + return null; + } + // pruefe ob auftrag status=angelegt, dann vergebe belegnr + $this->CheckClass('FormHandler'); + + $this->RunHook('WeiterfuehrenAuftragZuLieferschein', 1, $id); + $orderArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT projekt,status,belegnr FROM auftrag WHERE id=%d LIMIT 1', + $id + ) + ); + $projekt = $orderArr['projekt']; + $nurlagerartikel = $this->app->DB->Select("SELECT nurlagerartikel FROM projekt WHERE id = '$projekt' LIMIT 1"); + $status = $orderArr['status']; + $checkbelegnr = $orderArr['belegnr']; + if($status === 'angelegt' && $checkbelegnr == ''){ + $belegnr = $this->GetNextNummer("auftrag", $projekt, $id); + + $this->app->DB->Update("UPDATE auftrag SET belegnr='$belegnr', status='freigegeben' WHERE id='$id' LIMIT 1"); + $this->AuftragProtokoll($id, "Auftrag freigegeben"); + + // auftrag abschliessen und event senden + $this->EventAPIAdd("EventAuftragEdit", $id, "auftrag", "edit"); + } + $bundesland = $this->app->DB->Select("SELECT bundesland FROM auftrag WHERE id = '$id' LIMIT 1"); + $bundesstaat = $this->app->DB->Select("SELECT bundesstaat FROM auftrag WHERE id = '$id' LIMIT 1"); + + $arr = $this->app->DB->SelectArr("SELECT datum,ihrebestellnummer,projekt,belegnr as auftrag,bodyzusatz,freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,titel,lieferbedingung,ansprechpartner,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,vertrieb,zahlungsweise,zahlungszieltage,anschreiben, id as auftragid,vertriebid, bearbeiter,bearbeiterid, internebemerkung,projektfiliale,typ,standardlager,ust_befreit,gln, ohne_artikeltext,sprache,kostenstelle,lieferid, + zahlungszieltageskonto,zahlungszielskonto,firma,'angelegt' as status,internebezeichnung,lieferantenauftrag as lieferantenretoure,lieferant,kommissionskonsignationslager FROM auftrag WHERE id='$id' LIMIT 1"); + + + $check_mail = $this->app->DB->Select("SELECT lieferschein_email FROM adresse WHERE id='".$arr[0]['adresse']."'"); + if($check_mail!="") { + $arr[0]['email'] = $check_mail; + } + $arr2 = $this->app->DB->SelectArr("SELECT gln, liefergln FROM auftrag WHERE id = '$id' LIMIT 1"); + $abweichendelieferadresse = $this->app->DB->Select("SELECT abweichendelieferadresse FROM auftrag WHERE id='$id' LIMIT 1"); + $tmparrliefer = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id='$id' LIMIT 1"); + foreach($tmparrliefer[0] as $k => $v) { + $tmparrliefer[0][$k] = $this->app->DB->real_escape_string($v); + } + $versandart = $this->app->DB->Select("SELECT versandart FROM auftrag WHERE id='$id' LIMIT 1"); + + $poswheretmp = ''; + if($this->Firmendaten("dienstleistungsartikel_nicht_zu_lieferschein")=="1"){ + $poswheretmp = ' AND art.dienstleistung = 0'; + } + + if(!empty($positionen)) + { + $posa = null; + foreach($positionen as $v) + { + $posa[] = " ap.id = '$v' "; + } + $poswheretmp .= ' AND ('.implode(' OR ',$posa).') '; + } + + if($nurlagerartikel) + { + $pos = $this->app->DB->SelectArr("SELECT ap.*,art.porto AS artikelporto FROM auftrag_position ap INNER JOIN artikel art ON ap.artikel = art.id AND (art.lagerartikel = 1 OR (art.stueckliste = 1 AND art.juststueckliste = 1)) WHERE ap.auftrag='$id' $poswheretmp order by ap.sort"); + }else{ + $pos = $this->app->DB->SelectArr("SELECT ap.*,art.porto AS artikelporto FROM auftrag_position ap LEFT JOIN artikel art ON ap.artikel = art.id WHERE ap.auftrag='$id' $poswheretmp order by ap.sort"); + } + + if(empty($pos)) + { + return null; + } + $portoartikelArr = []; + $haspositions = false; + foreach($pos as $positem) + { + $portoartikelArr[$positem['id']] = $positem['artikelporto']; + if((int)$positem['artikelporto']===0) + { + $haspositions = true; + } + } + if(!$haspositions){ + return null; + } + + $newid = $this->CreateLieferschein($arr[0]['adresse']); + + if($this->Firmendaten('dateienweiterfuehren')){ + $this->WeiterfuehrenDateianhang("Auftrag", $id, "Lieferschein", $newid); + } + + $this->app->DB->UpdateArr("lieferschein",$newid,'id',$arr[0],true); + + if(!empty($bundesland)){ + $this->app->DB->Update("UPDATE lieferschein SET bundesland='".$this->app->DB->real_escape_string($bundesland)."' WHERE id='$newid' LIMIT 1"); + } + + if(!empty($bundesstaat)){ + $this->app->DB->Update("UPDATE lieferschein SET bundesstaat='".$this->app->DB->real_escape_string($bundesstaat)."' WHERE id='$newid' LIMIT 1"); + } + + $this->app->DB->Update("UPDATE lieferschein SET datum=NOW() WHERE id='$newid' LIMIT 1"); + + + + //lieferadresse wenn abweichend!!!! + if($abweichendelieferadresse && $versandart!="packstation") + { + if($tmparrliefer[0]['lieferemail']=="") { + $tmparrliefer[0]['lieferemail'] = $arr[0]['email']; + } + + //liefername lieferland lieferstrasse lieferort lieferplz lieferadresszusatz + $this->app->DB->Update("UPDATE lieferschein SET name='{$tmparrliefer[0]['liefername']}', abteilung='{$tmparrliefer[0]['lieferabteilung']}', + unterabteilung='{$tmparrliefer[0]['lieferunterabteilung']}',strasse='{$tmparrliefer[0]['lieferstrasse']}',titel='{$tmparrliefer[0]['liefertitel']}', + email='{$tmparrliefer[0]['lieferemail']}', + adresszusatz='{$tmparrliefer[0]['lieferadresszusatz']}', plz='{$tmparrliefer[0]['lieferplz']}',ort='{$tmparrliefer[0]['lieferort']}',land='{$tmparrliefer[0]['lieferland']}',ansprechpartner='{$tmparrliefer[0]['lieferansprechpartner']}' WHERE id='$newid' LIMIT 1"); + if($tmparrliefer[0]['liefergln']!="") + $this->app->DB->Update("UPDATE lieferschein SET gln = '{$tmparrliefer[0]['liefergln']}' WHERE id = '$newid' LIMIT 1"); + if($tmparrliefer[0]['lieferbundesstaat']!='') { + $this->app->DB->Update("UPDATE `lieferschein` SET `bundesstaat` = '{$tmparrliefer[0]['lieferbundesstaat']}' WHERE `id` = '{$newid}' LIMIT 1"); + } + } + + //lieferadresse wenn packstation + if($versandart=="packstation") + { + //packstation_inhaber packstation_station packstation_ident packstation_plz packstation_ort + $this->app->DB->Update("UPDATE lieferschein SET name='{$tmparrliefer[0]['packstation_inhaber']}', unterabteilung='',strasse='Packstation Nr. {$tmparrliefer[0]['packstation_station']}', adresszusatz='{$tmparrliefer[0]['packstation_ident']}', + plz='{$tmparrliefer[0]['packstation_plz']}',ort='{$tmparrliefer[0]['packstation_ort']}' WHERE id='$newid' LIMIT 1"); + } + + $portosorts = null; + $cpos = $pos?count($pos):0; + for($i=0;$i<$cpos;$i++){ + /* nur lager artikel in den Lieferschein */ + $portoartikel = $portoartikelArr[$pos[$i]]; + if($portoartikel==0) { + $this->app->DB->Insert("INSERT INTO lieferschein_position (id) VALUES('')"); + $newposid = $this->app->DB->GetInsertID(); + $auftragzulieferschein[$pos[$i]['id']] = $newposid; + $pos[$i]['lieferschein']=$newid; + $pos[$i]['auftrag_position_id']=$pos[$i]['id']; + if($pos[$i]['explodiert']) { + $pos[$i]['bezeichnung'] = $pos[$i]['bezeichnung'];//." (Stückliste)"; + } + + if($pos[$i]['explodiert_parent'] > 0) { + + $aktlvl = 1; + $aktparent = $pos[$i]['explodiert_parent']; + while(true) + { + if($aktlvl > 10) { + break; + } + $aktparent = $this->app->DB->Select("SELECT explodiert_parent FROM auftrag_position WHERE id = '".$aktparent."' LIMIT 1"); + + if(!$aktparent) { + break; + } + $aktlvl++; + } + if($aktlvl > 1) { + $pos[$i]['bezeichnung'] = str_repeat("*", $aktlvl - 1).$pos[$i]['bezeichnung']; + } + + $pos[$i]['explodiert_parent_artikel'] = $this->app->DB->Select("SELECT artikel FROM auftrag_position WHERE id='".$pos[$i]['explodiert_parent']."' LIMIT 1"); + + $pos[$i]['explodiert_parent'] = isset($auftragzulieferschein[$pos[$i]['explodiert_parent']])?$auftragzulieferschein[$pos[$i]['explodiert_parent']]:0; + } + $this->app->DB->UpdateArr("lieferschein_position",$newposid,'id',$pos[$i],true); + }else{ + $portosorts[] = $i; + } + } + + if($this->Firmendaten('auftragabschliessen')!='1') { + $this->app->DB->Update("UPDATE auftrag SET status='abgeschlossen',schreibschutz='1' WHERE id='$id' LIMIT 1"); + $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge=menge WHERE auftrag='$id'"); + } + + $this->CheckFreifelder("lieferschein",$newid); + + if(!empty($positionen) && !empty($zwischenpositionen)){ + $this->CopyBelegZwischenpositionen('auftrag', $id, 'lieferschein', $newid, $zwischenpositionen); + } + elseif(empty($positionen)) { + $this->CopyBelegZwischenpositionen('auftrag', $id, 'lieferschein', $newid); + } + + if(!empty($portosorts)) { + foreach($portosorts as $k => $v) { + if($v == count($pos) -1) + { + $this->app->DB->Delete("DELETE FROM beleg_zwischenpositionen WHERE doctype = 'lieferschein' AND doctypeid = '$newid' AND pos = '".($v)."' AND postype LIKE 'gruppe'"); + } + elseif($this->app->DB->Select("SELECT id FROM beleg_zwischenpositionen WHERE doctype = 'lieferschein' AND doctypeid = '$newid' AND pos = '".($v+1)."' AND postype LIKE 'gruppe' LIMIT 1")) { + $this->app->DB->Delete("DELETE FROM beleg_zwischenpositionen WHERE doctype = 'lieferschein' AND doctypeid = '$newid' AND pos = '".($v)."' AND postype LIKE 'gruppe'"); + } + } + } + $this->BelegNeusortieren('lieferschein', $newid); + // auftrag freigeben!!! + $this->SchnellFreigabe("lieferschein",$newid); + $this->LieferscheinNeuberechnen($newid); + $this->RunHook('weiterfuehrenauftragzulieferschein_ende', 2, $id, $newid); + return $newid; + } + + function BelegNeusortieren($doctype, $id) + { + $arr = $this->app->DB->SelectArr("SELECT id, sort FROM $doctype"."_position WHERE $doctype = '$id' ORDER BY sort, id"); + if(empty($arr)) { + return; + } + $altsort = 0; + foreach($arr as $k => $v) { + if($v['sort'] > ($k+1)) { + $diff = $v['sort'] - ($k+1); + $this->app->DB->Update("UPDATE $doctype"."_position SET sort = sort - $diff WHERE id = '".$v['id']."' LIMIT 1"); + for($sort = ($k+1); $sort < $v['sort']; $sort++) { + $beleg_zwischenpositionensort = $this->app->DB->SelectArr("SELECT id, sort FROM beleg_zwischenpositionen where doctype = '$doctype' AND doctypeid = '$id' AND pos = '".($sort-1)."' ORDER BY sort DESC LIMIT 1"); + $offset = 0; + if($beleg_zwischenpositionensort) { + $offset = 1 + $beleg_zwischenpositionensort[0]['sort']; + } + $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos - $diff, sort = sort + $offset WHERE doctype = '$doctype' AND doctypeid = '$id' AND pos = '$sort'"); + } + } + } + //Belegpositionen nach letzter Position + $sort = count($arr); + $restpositionen = $this->app->DB->SelectArr("SELECT id FROM beleg_zwischenpositionen where doctype = '$doctype' AND doctypeid = '$id' AND pos > $sort ORDER BY pos, sort"); + if($restpositionen) { + $beleg_zwischenpositionensort = $this->app->DB->SelectArr("SELECT id, sort FROM beleg_zwischenpositionen where doctype = '$doctype' AND doctypeid = '$id' AND pos = '".($sort)."' ORDER BY sort DESC LIMIT 1"); + $offset = 0; + if($beleg_zwischenpositionensort) { + $offset = 1 + $beleg_zwischenpositionensort[0]['sort']; + } + foreach($restpositionen as $k => $v) { + $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = '".$sort."', sort = '".($offset + $k)."' WHERE id = '".$v['id']."' LIMIT 1"); + } + } + //Luecken in Zwischenpositionen + $restpositionen = $this->app->DB->SelectArr("SELECT id,pos,sort FROM beleg_zwischenpositionen where doctype = '$doctype' AND doctypeid = '$id' ORDER BY pos, sort"); + if(empty($restpositionen)) { + return; + } + + $aktpos = -1; + $k2 = -1; + foreach($restpositionen as $k => $v) { + if($v['pos'] != $aktpos) { + $k2 = -1; + $aktpos = $v['pos']; + } + $k2++; + if($v['sort'] > $k2) { + $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET sort = $k2 WHERE id = '".$v['id']."' LIMIT 1"); + } + } + } + + + function CheckFreifelderEinzelPos($table, $id, $force = false, $posid = 0){ + $language = $this->app->erp->GetSpracheBelegISO($table,$id); + $pos = $this->app->DB->SelectRow("SELECT * FROM ".$table."_position WHERE ".$table."='$id' AND id = '$posid' LIMIT 1"); + if(empty($pos)) { + return; + } + + $artikel_id = $pos['artikel']; + + $tmpfreifelder = $this->app->DB->SelectArr("SELECT * FROM artikel WHERE id='".$artikel_id."' LIMIT 1"); + if(empty($tmpfreifelder)) { + return; + } + + $langFreifeld = []; + $freifelderLang = $this->app->DB->SelectArr("SELECT nummer, wert FROM artikel_freifelder WHERE artikel=$artikel_id AND sprache='$language'"); + if(!empty($freifelderLang)) { + foreach($freifelderLang as $freifelderLangRow) { + $langFreifeld[(int)$freifelderLangRow['nummer']] = $freifelderLangRow['wert']; + } + } + for($ifreifeld=1; $ifreifeld<=40; $ifreifeld++) { + $check_language = !empty($langFreifeld[$ifreifeld])?$langFreifeld[$ifreifeld]:''; + $tmpfreifelder[0]['freifeld'.$ifreifeld] = $this->app->DB->real_escape_string(($check_language!=""?$check_language:$tmpfreifelder[0]['freifeld'.$ifreifeld])); + } + + switch($table){ + case "angebot": $kurz="an"; break; + case "auftrag": $kurz="ab"; break; + case "rechnung": $kurz="re"; break; + case "gutschrift": $kurz="gs"; break; + case "lieferschein": $kurz="ls"; break; + case "bestellung": $kurz="be"; break; + case "proformarechnung": $kurz="pr"; break; + case "preisanfrage": $kurz="pa"; break; + case "produktion": $kurz="pd"; break; + } + for($ifreifeld=1; $ifreifeld<=40; $ifreifeld++){ + $pos['freifeld'.$ifreifeld] = $this->app->DB->real_escape_string($pos['freifeld'.$ifreifeld]); + if($this->app->erp->Firmendaten("freifeld".$ifreifeld.$kurz)=="1" && $pos['freifeld'.$ifreifeld] == ""){ + $this->app->DB->Update("UPDATE ".$table."_position SET freifeld".$ifreifeld."='".$tmpfreifelder[0]['freifeld'.$ifreifeld]."' WHERE id='".$pos['id']."'"); + } + elseif($this->app->erp->Firmendaten("freifeld".$ifreifeld.$kurz)=="1" && $pos['freifeld'.$ifreifeld] != ""){ + $this->app->DB->Update("UPDATE ".$table."_position SET freifeld".$ifreifeld."='".($force?$tmpfreifelder[0]['freifeld'.$ifreifeld]:$pos['freifeld'.$ifreifeld])."' WHERE id='".$pos['id']."'"); + } + elseif($this->app->erp->Firmendaten("freifeld".$ifreifeld.$kurz)!="1"){ + $this->app->DB->Update("UPDATE ".$table."_position SET freifeld".$ifreifeld."='' WHERE id='".$pos['id']."'"); + } + } + } + + + // entsprechend der Firmendaten die Freifelder beim Weiterfuehren vom Dokument fuellen + function CheckFreifelder($table,$id, $force = false) + { + $language = $this->app->erp->GetSpracheBelegISO($table,$id); + + $pos = $this->app->DB->SelectArr( + sprintf( + 'SELECT * FROM `%s` WHERE `%s`=%d', + $table.'_position', $table, (int)$id + ) + ); + if(empty($pos)) { + return; + } + + $articles = []; + foreach($pos as $row) { + if((int)$row['artikel'] > 0 && !in_array((int)$row['artikel'], $articles)) { + $articles[] = (int)$row['artikel']; + } + } + $freifelderLangs = []; + $freifelderLangQuery = $this->app->DB->Query('SELECT artikel, nummer, wert FROM artikel_freifelder WHERE artikel IN ('.implode(', ', $articles).") AND sprache='$language'"); + if(!empty($freifelderLangQuery)) { + while ($row = $this->app->DB->Fetch_Assoc($freifelderLangQuery)) { + $freifelderLangs[$row['artikel']][] = $row; + } + $this->app->DB->free($freifelderLangQuery); + } + + $articleQuery = $this->app->DB->Query('SELECT * FROM artikel WHERE id IN ('.implode(', ', $articles).')'); + if(!empty($articleQuery)){ + while ($row = $this->app->DB->Fetch_Assoc($articleQuery)) { + $articles[$row['id']] = $row; + } + $this->app->DB->free($articleQuery); + } + + switch($table) + { + case 'angebot': $kurz='an'; break; + case 'auftrag': $kurz='ab'; break; + case 'rechnung': $kurz='re'; break; + case 'gutschrift': $kurz='gs'; break; + case 'lieferschein': $kurz='ls'; break; + case 'bestellung': $kurz='be'; break; + case 'proformarechnung': $kurz='pr'; break; + case 'preisanfrage': $kurz='pa'; break; + case 'produktion': $kurz='pd'; break; + } + + $cpos = count($pos); + for($i=0;$i<$cpos;$i++) + { + $artikel_id = $pos[$i]['artikel']; + + $tmpfreifelder = !empty($articles[$artikel_id])?[$articles[$artikel_id]]:null; + if(!empty($tmpfreifelder)) + { + $langFreifeld = []; + $freifelderLang = !empty($freifelderLangs[$artikel_id])?$freifelderLangs[$artikel_id]:null; + if(!empty($freifelderLang)) + { + foreach($freifelderLang as $freifelderLangRow) + { + $langFreifeld[(int)$freifelderLangRow['nummer']] = $freifelderLangRow['wert']; + } + } + for($ifreifeld=1;$ifreifeld<=40;$ifreifeld++) + { + $check_language = !empty($langFreifeld[$ifreifeld])?$langFreifeld[$ifreifeld]:''; + $tmpfreifelder[0]['freifeld'.$ifreifeld] = $this->app->DB->real_escape_string(($check_language!=""?$check_language:$tmpfreifelder[0]['freifeld'.$ifreifeld])); + } + + $updateArr = []; + + for($ifreifeld=1;$ifreifeld<=40;$ifreifeld++) + { + $isFreifeldKurz = $this->app->erp->Firmendaten('freifeld'.$ifreifeld.$kurz)=='1'; + $posFreifeld = $pos[$i]['freifeld'.$ifreifeld]; + $posFreifeldEscaped = $this->app->DB->real_escape_string($posFreifeld); + if($isFreifeldKurz && $posFreifeld=='' && $posFreifeld !== $tmpfreifelder[0]['freifeld' . $ifreifeld]){ + $updateArr['freifeld'.$ifreifeld] = $tmpfreifelder[0]['freifeld' . $ifreifeld]; + } + else if($isFreifeldKurz && $pos[$i]['freifeld'.$ifreifeld]!=''){ + $newValue = ($force ? $tmpfreifelder[0]['freifeld' . $ifreifeld] : $posFreifeldEscaped); + if($posFreifeld !== $newValue){ + $updateArr['freifeld'.$ifreifeld] = $newValue; + } + } + else if (!$isFreifeldKurz && $posFreifeld !== '') { + $updateArr['freifeld'.$ifreifeld] = ''; + } + } + if(!empty($updateArr)) { + $this->app->DB->UpdateArr($table.'_position', (int)$pos[$i]['id'], 'id', $updateArr); + } + } + } + } + + function LagerAuslagernObjektLagerPlatz($artikel,$pos, $regal,$menge, $objekt = 'lieferschein') + { + $check = $this->app->DB->SelectArr("SELECT * FROM objekt_lager_platz WHERE lager_platz = '$regal' AND objekt = '$objekt' AND parameter = '$pos' AND artikel = '$artikel' LIMIT 1"); + if($check) + { + $this->app->DB->Update("UPDATE objekt_lager_platz set menge = menge + '".$menge."' WHERE id = '".$check[0]['id']."'"); + }else{ + $this->app->DB->Insert("INSERT into objekt_lager_platz (objekt, lager_platz, parameter, artikel,menge) values ('$objekt', '$regal', '$pos','$artikel' ,'$menge')"); + } + } + + function LagerAuslagernText($artikel,$pos, $regal,$menge, $objekt = 'lieferschein') + { + $this->LagerAuslagernObjektLagerPlatz($artikel,$pos, $regal,$menge, $objekt); + $this->AddLagerPlatzText($pos, $objekt); + } + + function AddLagerPlatzText($parameter, $objekt = 'lieferschein',$return=false) + { + $parameter = (int)$parameter; + $olp = $this->app->DB->SelectArr("SELECT * FROM objekt_lager_platz WHERE objekt = '$objekt' AND parameter = '$parameter' ORDER BY menge DESC"); + $text = ''; + foreach($olp as $k => $v) + { + $kurzbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id = '".$v['lager_platz']."' LIMIT 1"); + if($text != '')$text .= ', '; + if($v['menge'] == round($v['menge']))$v['menge'] = round($v['menge']); + $text .= $kurzbezeichnung.' ('.$v['menge'].')'; + } + + if($return) return $text; + + switch($objekt) + { + case 'lieferschein': + $this->app->DB->Update("UPDATE ".$objekt."_position SET lagertext = '$text' WHERE id = '$parameter' LIMIT 1"); + break; + } + return true; + } + + function WeiterfuehrenLieferscheinZuRechnung($id) + { + $adresse = $this->app->DB->Select("SELECT adresse FROM lieferschein WHERE id='$id' LIMIT 1"); + $newid = $this->CreateRechnung($adresse); + + if($this->Firmendaten('dateienweiterfuehren')){ + $this->WeiterfuehrenDateianhang("Lieferschein", $id, "Rechnung", $newid); + } + + $this->LoadRechnungStandardwerte($newid,$adresse); + if($newid)$this->app->DB->Update("UPDATE lieferschein SET rechnungid = '$newid' WHERE (rechnungid = 0 OR isnull(rechnungid)) AND id = '$id' LIMIT 1"); + if($newid)$this->app->DB->Update("UPDATE lieferschein_position SET abgerechnet = '1' WHERE lieferschein = '$id'"); + if($newid)$this->app->DB->Update("UPDATE rechnung SET lieferschein = '$id' WHERE id = '$newid' LIMIT 1"); + if($this->app->erp->Firmendaten("schnellanlegen_ohnefreigabe")=="1") + { + $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,ihrebestellnummer,projekt, anschreiben, id as lieferschein,bodyzusatz,auftrag,auftragid, internebemerkung, + freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,ansprechpartner,titel,lieferbedingung,plz,ort,land,email,telefon,telefax,betreff,kundennummer,ohne_artikeltext, + versandart, vertriebid,vertrieb,sprache,projektfiliale,typ,internebezeichnung,bearbeiterid,ustid,ust_befreit,kostenstelle, + gln FROM lieferschein WHERE id='$id' LIMIT 1"); + } else { + $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,ihrebestellnummer,projekt, anschreiben, id as lieferschein,bodyzusatz,auftrag,auftragid,internebemerkung, + freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,ansprechpartner,titel,lieferbedingung,plz,ort,land,email,telefon,telefax,betreff,kundennummer,ohne_artikeltext, + versandart, vertriebid,vertrieb,sprache,projektfiliale,typ,internebezeichnung,bearbeiterid,ustid,ust_befreit,kostenstelle, + 'angelegt' as status, gln FROM lieferschein WHERE id='$id' LIMIT 1"); + } + + + $abweichende_rechnungsadresse = $this->app->DB->SelectArr("SELECT abweichende_rechnungsadresse,rechnung_name,rechnung_titel,rechnung_typ,rechnung_strasse,rechnung_ort,rechnung_plz,rechnung_ansprechpartner, + rechnung_land,rechnung_abteilung,rechnung_unterabteilung,rechnung_adresszusatz,rechnung_telefon,rechnung_telefax,rechnung_anschreiben, rechnung_email,rechnung_gln + FROM adresse WHERE id = '$adresse' LIMIT 1"); + if($abweichende_rechnungsadresse && $abweichende_rechnungsadresse[0]['abweichende_rechnungsadresse'] && $abweichende_rechnungsadresse[0]['rechnung_name']) + { + // abweichende Rechnungsadresse sticht + foreach($abweichende_rechnungsadresse[0] as $k => $v) + { + if($k != 'abweichende_rechnungsadresse') + $arr[0][str_replace('rechnung_','',$k)] = $v; + } + } else if ($arr[0]['auftragid']) { + // adresse aus auftrag wenn vorhanden + $abweichende_rechnungsadresse = $this->app->DB->SelectArr("SELECT name as rechnung_name,titel as rechnung_titel,typ as rechnung_typ, + strasse as rechnung_strasse,ort as rechnung_ort,plz as rechnung_plz,ansprechpartner as rechnung_ansprechpartner, + land as rechnung_land,abteilung as rechnung_abteilung,unterabteilung as rechnung_unterabteilung, + adresszusatz as rechnung_adresszusatz,telefon as rechnung_telefon,telefax as rechnung_telefax,anschreiben as rechnung_anschreiben, + email as rechnung_email, gln as rechnung_gln + FROM auftrag WHERE id = '".$arr[0]['auftragid']."' LIMIT 1"); + foreach($abweichende_rechnungsadresse[0] as $k => $v) + { + if($k != 'abweichende_rechnungsadresse') + $arr[0][str_replace('rechnung_','',$k)] = $v; + } + + } + // this is not the different invoice email - this is the forced email for invoices! + $check_mail = $this->app->DB->Select("SELECT rechnungs_email FROM adresse WHERE id='$adresse'"); + if($check_mail!="") $arr[0]['email'] = $check_mail; + + $this->app->DB->UpdateArr('rechnung', $newid, 'id', $arr[0], true); + + + + if($arr[0]['auftragid']) + { + $aufarr = $this->app->DB->SelectArr("SELECT zahlungsweise,zahlungszieltage,zahlungszieltageskonto,zahlungszielskonto,waehrung,steuersatz_normal,steuersatz_ermaessigt FROM auftrag WHERE id = '".$arr[0]['auftragid']."' LIMIT 1"); + if($aufarr) + { + $this->app->DB->UpdateArr('rechnung',$newid,'id',$aufarr[0],true); + } + } + + $pos = $this->app->DB->SelectArr("SELECT * FROM lieferschein_position WHERE lieferschein='$id' order by sort"); + $cpos = !empty($pos)?count($pos):0; + for($i=0;$i<$cpos;$i++) { + $this->app->DB->Insert("INSERT INTO rechnung_position (id) VALUES('')"); + $newposid = $this->app->DB->GetInsertID(); + $lieferscheinzurechnung[$pos[$i]['id']] = $newposid; + if(!empty($pos[$i]['explodiert_parent'])) { + $pos[$i]['explodiert_parent'] = isset($lieferscheinzurechnung[$pos[$i]['explodiert_parent']])?$lieferscheinzurechnung[$pos[$i]['explodiert_parent']]:0; + } + $pos[$i]['rechnung']=$newid; + + if($pos[$i]['auftrag_position_id'] > 0) + { + $tmpap = $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE id='".$pos[$i]['auftrag_position_id']."' LIMIT 1"); + foreach($tmpap[0] as $key=>$value) + { + if($key!="id" && $key!="menge" && ($key!="bezeichnung" && $value!="") && ($key!="beschreibung" && $value!="")) { + $pos[$i][$key]=$value; + } + } + } else { + $pos[$i]['preis']=$this->GetVerkaufspreis($pos[$i]['artikel'],$pos[$i]['menge'],$adresse); + $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='".$pos[$i]['artikel']."' LIMIT 1"); + if($umsatzsteuer=="ermaessigt") { + $pos[$i]['umsatzsteuer']=$umsatzsteuer; + } + if($umsatzsteuer=="befreit") { + $pos[$i]['umsatzsteuer']=$umsatzsteuer; + } + } + $this->app->DB->UpdateArr('rechnung_position',$newposid,'id',$pos[$i],true); + if(is_null($pos[$i]['steuersatz'])) { + $this->app->DB->Update("UPDATE rechnung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); + } + } + + if($this->Firmendaten('dateienweiterfuehren')){ + foreach($lieferscheinzurechnung as $oldpos => $newpos){ + $this->app->DB->Update("UPDATE datei_stichwoerter SET parameter2='$newpos' + WHERE LOWER(objekt)='rechnung' AND parameter='$newid' AND objekt2='position' AND parameter2=".$oldpos); + } + $this->app->DB->Update("UPDATE datei_stichwoerter SET parameter2='0', objekt2='' + WHERE LOWER(objekt)='rechnung' AND parameter='$newid' AND objekt2='position' AND NOT parameter2 IN (".implode(',',$lieferscheinzurechnung).")"); + } + + $portoExistsInInvoice = ($this->app->DB->Select("SELECT rp.id FROM rechnung_position rp INNER JOIN artikel art ON rp.artikel = art.id AND art.porto = 1 AND rp.rechnung='".$newid."' LIMIT 1") > 0? true:false); + + if($arr[0]['auftragid'] && !$portoExistsInInvoice) + { + $portopositionen = $this->app->DB->SelectArr("SELECT ap.* FROM auftrag_position ap INNER JOIN artikel art ON ap.artikel = art.id AND art.porto = 1 AND ap.auftrag='".$arr[0]['auftragid']."' ORDER by ap.sort"); + if($portopositionen) + { + foreach($portopositionen as $portopos) + { + $this->app->DB->Insert("INSERT INTO rechnung_position (id) VALUES('')"); + $newposid = $this->app->DB->GetInsertID(); + $sort = 1+$this->app->DB->Select("SELECT ifnull(max(sort),0) FROM rechnung_position WHERE rechnung = '$newid'"); + $portopos['sort'] = $sort; + unset($portopos['auftrag']); + $portopos['auftrag_position_id'] = $portopos['id']; + unset($portopos['id']); + $portopos['rechnung'] = $newid; + $this->app->DB->UpdateArr('rechnung_position',$newposid,'id',$portopos,true); + if(is_null($portopos['steuersatz'])) { + $this->app->DB->Update("UPDATE rechnung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); + } + } + } + } + + if(!empty($arr[0]['auftragid'])) { + $orderRow = $this->app->DB->SelectRow( + sprintf( + 'SELECT storage_country,deliverythresholdvatid FROM auftrag WHERE id = %d', + $arr[0]['auftragid'] + ) + ); + if(!empty($orderRow['storage_country'])) { + $this->app->DB->Update( + sprintf( + "UPDATE rechnung SET storage_country = '%s' WHERE id = %d", + $this->app->DB->real_escape_string($orderRow['storage_country']), $newid + ) + ); + } + if(!empty($orderRow['deliverythresholdvatid'])) { + $this->app->DB->Update( + sprintf( + "UPDATE rechnung SET deliverythresholdvatid = '%s' WHERE id = %d", + $this->app->DB->real_escape_string($orderRow['deliverythresholdvatid']), $newid + ) + ); + } + } + + $ohnebriefpapier = $this->Firmendaten("rechnung_ohnebriefpapier"); + //$stornorechnung = $this->Firmendaten("stornorechhung_standard"); + + $this->CheckFreifelder("rechnung",$newid); + $this->CopyBelegZwischenpositionen("lieferschein",$id,"rechnung",$newid); + + $this->app->DB->Update("UPDATE rechnung SET ohne_briefpapier='".$ohnebriefpapier."' WHERE id='$newid,' LIMIT 1"); + //$this->app->DB->Update("UPDATE rechnung SET stornorechnung='$stornorechnung', ohne_briefpapier='".$ohnebriefpapier."' WHERE id='$newid,' LIMIT 1"); + + $this->app->DB->Update("UPDATE lieferschein SET schreibschutz='1' WHERE id='$id' LIMIT 1"); + + //$this->SchnellFreigabe("rechnung",$newid); // braucht man nicht wegen create + $this->ANABREGSNeuberechnen($newid,"rechnung"); + return $newid; + } + + + function WeiterfuehrenRechnungZuGutschrift($id, $grund = "Rechnung storniert") + { + $adresse = $this->app->DB->Select("SELECT adresse FROM rechnung WHERE id='$id' LIMIT 1"); + $newid = $this->CreateGutschrift($adresse); + + + if($this->Firmendaten('dateienweiterfuehren')){ + $this->WeiterfuehrenDateianhang("Rechnung", $id, "Gutschrift", $newid); + } + + $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,ihrebestellnummer,projekt, belegnr as rechnung,anschreiben,aktion,ansprechpartner,titel,lieferbedingung,bodyzusatz, + freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,zahlungsweise,zahlungszieltage,ust_befreit, keinsteuersatz, id as rechnungid,rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe,bearbeiter,projektfiliale,typ,internebezeichnung,ohne_artikeltext,kurs, + `kundennummer_buchhaltung`, + zahlungszieltageskonto,zahlungszielskonto,firma,waehrung,steuersatz_normal,steuersatz_zwischen,steuersatz_ermaessigt,steuersatz_starkermaessigt,steuersatz_dienstleistung,'angelegt' as status,gln,kostenstelle, sprache FROM rechnung WHERE id='$id' LIMIT 1"); + + $check_mail = $this->app->DB->Select("SELECT gutschrift_email FROM adresse WHERE id='$adresse'"); + if($check_mail!='') { + $arr[0]['email'] = $check_mail; + } + $arr[0]['deliverythresholdvatid'] = $this->app->DB->Select("SELECT deliverythresholdvatid FROM rechnung WHERE id='$id' LIMIT 1"); + + $this->app->DB->UpdateArr('gutschrift', $newid, 'id', $arr[0], true); + $this->LoadKurs($newid,"gutschrift",$arr[0]['projekt'],true); + + $pos = $this->app->DB->SelectArr("SELECT * FROM rechnung_position WHERE rechnung='$id' order by sort"); + $cpos = !empty($pos)?count($pos):0; + for($i=0;$i<$cpos;$i++) { + $this->app->DB->Insert("INSERT INTO gutschrift_position (id) VALUES('')"); + $newposid = $this->app->DB->GetInsertID(); + $idtoid[$pos[$i]['id']] = $newposid; + if(!empty($pos[$i]['explodiert_parent'])) + { + $pos[$i]['explodiert_parent'] = isset($idtoid[$pos[$i]['explodiert_parent']])?$idtoid[$pos[$i]['explodiert_parent']]:0; + } + $pos[$i]['gutschrift']=$newid; + $this->app->DB->UpdateArr('gutschrift_position', $newposid, 'id', $pos[$i], true); + if(is_null($pos[$i]['steuersatz'])) { + $this->app->DB->Update("UPDATE gutschrift_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); + } + } + + $ohnebriefpapier = $this->Firmendaten('gutschrift_ohnebriefpapier'); + $stornorechnung = $this->Firmendaten('stornorechnung_standard'); + + $this->CopyBelegZwischenpositionen('rechnung',$id,'gutschrift',$newid); + $this->app->DB->Update("UPDATE gutschrift SET stornorechnung='$stornorechnung', ohne_briefpapier='".$ohnebriefpapier."' WHERE id='$newid,' LIMIT 1"); + + $this->app->DB->Update("UPDATE rechnung SET schreibschutz='1',status='storniert',zahlungsstatus='bezahlt' WHERE id='$id' LIMIT 1"); + $this->RechnungProtokoll($id, $grund); + $this->SchnellFreigabe("gutschrift",$newid); + return $newid; + } + + + function WeiterfuehrenAuftragZuAnfrage($auftrag) + { + $anfrageid = $this->app->DB->Select("SELECT anfrageid FROM auftrag WHERE id='$auftrag' LIMIT 1"); + //angebot aus offene Angebote entfernen + + $arr = $this->app->DB->SelectArr("SELECT projekt,aktion,bodyzusatz, + freitext,anschreiben,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,email,telefon,telefax,projektfiliale,typ,internebezeichnung,ansprechpartner,titel, + firma,'angelegt' as status FROM auftrag WHERE id='$auftrag' LIMIT 1"); + $arr[0]['bundesstaat'] = $this->app->DB->Select("SELECT bundesstaat FROM auftrag WHERE id = '$id' LIMIT 1"); + $this->app->DB->UpdateArr('anfrage',$anfrageid,'id',$arr[0],true); + + $this->app->DB->Delete("DELETE FROM anfrage_position WHERE anfrage='$anfrageid'"); + + $pos = $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE auftrag='$auftrag' order by sort"); + $cpos = !empty($pos)?count($pos):0; + for($i=0;$i<$cpos;$i++){ + $this->app->DB->Insert("INSERT INTO anfrage_position (id) VALUES('')"); + $newposid = $this->app->DB->GetInsertID(); + $idtoid[$pos[$i]['id']] = $newposid; + if(!empty($pos[$i]['explodiert_parent'])) + { + $pos[$i]['explodiert_parent'] = isset($idtoid[$pos[$i]['explodiert_parent']])?$idtoid[$pos[$i]['explodiert_parent']]:0; + } + $pos[$i]['anfrage']=$anfrageid; + + // Hole Verkaufspreis ab menge + $this->app->DB->UpdateArr('anfrage_position',$newposid,'id',$pos[$i],true); + if(is_null($pos[$i]['steuersatz'])) { + $this->app->DB->Update("UPDATE anfrage_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); + } + } + $this->app->DB->Update("UPDATE auftrag SET schreibschutz='1' WHERE id='$id' LIMIT 1"); + return $anfrageid; + } + + + function WeiterfuehrenAnfrageZuAngebot($id) + { + + $adresse = $this->app->DB->Select("SELECT adresse FROM anfrage WHERE id='$id' LIMIT 1"); + //angebot aus offene Angebote entfernen + $this->app->DB->Insert("INSERT INTO angebot (id) VALUES ('')"); + $newid = $this->app->DB->GetInsertID(); + + if($this->Firmendaten('dateienweiterfuehren')){ + $this->WeiterfuehrenDateianhang("Anfrage", $id, "Angebot", $newid); + } + + $arr = $this->app->DB->SelectArr("SELECT NOW() as datum,projekt,aktion,bodyzusatz, + freitext,anschreiben,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,projektfiliale,typ,ansprechpartner,titel, + versandart, id as anfrageid,internebezeichnung, + firma,'angelegt' as status FROM anfrage WHERE id='$id' LIMIT 1"); + $this->app->DB->UpdateArr('angebot',$newid,'id',$arr[0],true); + $pos = $this->app->DB->SelectArr("SELECT * FROM anfrage_position WHERE anfrage='$id' order by sort"); + $cpos = !empty($pos)?count($pos):0; + for($i=0;$i<$cpos;$i++) { + $this->app->DB->Insert("INSERT INTO angebot_position (id) VALUES('')"); + $newposid = $this->app->DB->GetInsertID(); + $idtoid[$pos[$i]['id']] = $newposid; + if(!empty($pos[$i]['explodiert_parent'])) + { + $pos[$i]['explodiert_parent'] = isset($idtoid[$pos[$i]['explodiert_parent']])?$idtoid[$pos[$i]['explodiert_parent']]:0; + } + $pos[$i]['angebot']=$newid; + + // Hole Verkaufspreis ab menge + $pos[$i]['preis']=$this->GetVerkaufspreis($pos[$i]['artikel'],$pos[$i]['menge'],$adresse); + $this->app->DB->UpdateArr('angebot_position',$newposid,'id',$pos[$i],true); + if(is_null($pos[$i]['steuersatz'])) { + $this->app->DB->Update("UPDATE angebot_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); + } + } + $this->app->DB->Update("UPDATE anfrage SET schreibschutz='1' WHERE id='$id' LIMIT 1"); + + $this->SchnellFreigabe("angebot",$newid); + return $newid; + } + + + function CheckClass($class) + { + switch($class) + { + case 'FormHandler': + if(isset($this->app->FormHandler) && $this->app->FormHandler) { + return; + } + if(!class_exists('FormHandler') && file_exists(__DIR__ .'/../../phpwf/plugins/class.formhandler.php')) { + include_once dirname(dirname(__DIR__)) .'/phpwf/plugins/class.formhandler.php'; + } + if(class_exists('FormHandler')) { + $this->app->FormHandler = new FormHandler($this->app); + } + break; + case 'LieferscheinPDF': + case 'RechnungPDF': + case 'AuftragPDF': + case 'BestellungPDF': + case 'GutschriftPDF': + case 'AngebotPDF': + case 'MahnwesenPDF': + case 'AnfragePDF': + case 'LayoutvorlagenPDF': + if(class_exists($class)) { + return; + } + if(!defined('FPDF_FONTPATH')) { + define('FPDF_FONTPATH',dirname(__DIR__).'/pdf/font/'); + } + + if(!class_exists('FPDFWAWISION')) + { + if(file_exists(dirname(dirname(__DIR__)).'/conf/user_defined.php')){ + include_once dirname(dirname(__DIR__)).'/conf/user_defined.php'; + } + if(!defined('USEFPDF3')) + { + define('USEFPDF3',true); + } + if(defined('USEFPDF3') && USEFPDF3 && file_exists(__DIR__.'/pdf/fpdf_3.php')) + { + require_once(__DIR__.'/pdf/fpdf_3.php'); + } + else if(defined('USEFPDF2') && USEFPDF2 && file_exists(__DIR__.'/pdf/fpdf_2.php')) + { + require_once(__DIR__.'/pdf/fpdf_2.php'); + } else { + require_once(__DIR__.'/pdf/fpdf.php'); + } + } + + if(!class_exists('PDF_EPS'))require_once(__DIR__ .'/pdf/fpdf_final.php'); + + if(!class_exists('SuperFPDF'))require_once(__DIR__ ."/dokumente/class.superfpdf.php"); + if(!class_exists('Etikett'))require_once(__DIR__ ."/dokumente/class.etikett.php"); + if(!class_exists('Briefpapier')){ + if(file_exists(__DIR__ ."/dokumente/class.briefpapier_custom.php")) + { + require_once(__DIR__ ."/dokumente/class.briefpapier_custom.php"); + }else{ + require_once(__DIR__ ."/dokumente/class.briefpapier.php"); + } + } + if(!class_exists($class)) + { + if(file_exists(__DIR__ .'/dokumente/class.'.strtolower(substr($class,0,strlen($class)-3)).'_custom.php')) + { + require_once(__DIR__ .'/dokumente/class.'.strtolower(substr($class,0,strlen($class)-3)).'_custom.php'); + }elseif(file_exists(__DIR__ .'/dokumente/class.'.strtolower(substr($class,0,strlen($class)-3)).'.php')) + { + require_once(__DIR__ .'/dokumente/class.'.strtolower(substr($class,0,strlen($class)-3)).'.php'); + } + } + break; + } + } + + function WeiterfuehrenAuftragZuRechnung($id, $positionen = null, $zwischenpositionen = null, $newid = 0) + { + // wenn anfrage vorhanden diese markieren als abgerechnet status='abgerechnet' + $orderArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT anfrageid, adresse, status,projekt, belegnr + FROM auftrag + WHERE id = %d + LIMIT 1', + $id + ) + ); + + $anfrageid = $orderArr['anfrageid']; + $adresseid = $orderArr['adresse']; + $abweichende_rechnungsadresse = $this->app->DB->Select("SELECT abweichende_rechnungsadresse + FROM adresse WHERE id='$adresseid' LIMIT 1"); + if($anfrageid > 0) { + $this->app->DB->Update("UPDATE anfrage SET status='abgerechnet',schreibschutz='0' WHERE id='$anfrageid'"); + } + // pruefe ob auftrag status=angelegt, dann vergebe belegnr + $status = $orderArr['status']; + $projekt = $orderArr['projekt']; + $checkbelegnr = $orderArr['belegnr']; + if($status==='angelegt' && $checkbelegnr=='') { + $belegnr = $this->GetNextNummer("auftrag",$projekt,$id); + + $this->app->DB->Update("UPDATE auftrag SET belegnr='$belegnr', status='freigegeben' WHERE id='$id' LIMIT 1"); + $this->AuftragProtokoll($id,"Auftrag freigegeben"); + + // auftrag abschliessen und event senden + $this->EventAPIAdd("EventAuftragEdit",$id,"auftrag","edit"); + } + + + //angebot aus offene Angebote entfernen + if($newid <= 0) { + $newid = $this->CreateRechnung($adresseid); + } + + if($this->Firmendaten('dateienweiterfuehren')){ + $this->WeiterfuehrenDateianhang("Auftrag", $id, "Rechnung", $newid); + } + + $arr = $this->app->DB->SelectArr("SELECT datum,ihrebestellnummer,projekt,gesamtsumme as soll, belegnr as auftrag, id as auftragid,aktion,typ,bodyzusatz, + freitext,anschreiben,adresse,name,abteilung,unterabteilung,ansprechpartner,titel,lieferbedingung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,vertrieb,zahlungsweise,zahlungszieltage,ust_befreit,keinsteuersatz,rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe,bearbeiter,internebemerkung,typ,internebezeichnung,systemfreitext,ohne_artikeltext,sprache,kostenstelle, + `kundennummer_buchhaltung`, + projektfiliale,zahlungszieltageskonto,zahlungszielskonto,firma,einzugsdatum,waehrung,kurs,steuersatz_normal,steuersatz_zwischen,steuersatz_ermaessigt,steuersatz_starkermaessigt,steuersatz_dienstleistung,'angelegt' as status, gln, storage_country + FROM auftrag WHERE id='$id' LIMIT 1"); + + $arr[0]['deliverythresholdvatid'] = $this->app->DB->Select("SELECT deliverythresholdvatid FROM auftrag WHERE id='$id' LIMIT 1"); + // this is not the different invoice email this is the forec mail for invoices + $check_mail = $this->app->DB->Select("SELECT rechnungs_email FROM adresse WHERE id='$adresseid' "); + if($check_mail!="") $arr[0]['email'] = $check_mail; + + + $arr_zahlung = $this->app->DB->SelectArr("SELECT zahlungsweise,zahlungszieltage,zahlungszieltageskonto,zahlungszielskonto,versandart,projekt FROM auftrag WHERE id='$id' LIMIT 1"); + $arr[0]['bundesstaat'] = $this->app->DB->Select("SELECT bundesstaat FROM auftrag WHERE id = '$id' LIMIT 1"); + $this->app->DB->UpdateArr('rechnung',$newid,'id',$arr[0], true); + $bundesland = $this->app->DB->Select("SELECT bundesland FROM auftrag WHERE id = '$id' LIMIT 1"); + if(!empty($bundesland)) { + $this->app->DB->Update("UPDATE rechnung SET bundesland = '".$this->app->DB->real_escape_string($bundesland)."' WHERE id = '$newid' LIMIT 1"); + } + + $lieferscheinid = $this->app->DB->Select("SELECT id FROM lieferschein WHERE auftragid='$id' LIMIT 1"); + + if($lieferscheinid>0) + { + $this->app->DB->Update("UPDATE rechnung SET lieferschein='$lieferscheinid' WHERE id='$newid' LIMIT 1"); + $this->app->DB->Update("UPDATE lieferschein SET rechnungid='$newid' WHERE id='$lieferscheinid' LIMIT 1"); + } + + $this->app->DB->Update("UPDATE rechnung SET datum=NOW() WHERE id='$newid' LIMIT 1"); + + $where = ""; + if($positionen) + { + if($positionen) + { + $posa = null; + foreach($positionen as $v) + { + $posa[] = " id = '$v' "; + } + $where = ' AND ('.implode(' OR ',$posa).') '; + } + } + + $pos = $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE auftrag='$id' $where order by sort"); + $cpos = !empty($pos)?count($pos):0; + $auftragzurechnung= []; + for($i=0;$i<$cpos;$i++){ + $this->app->DB->Insert("INSERT INTO rechnung_position (id) VALUES('')"); + $newposid = $this->app->DB->GetInsertID(); + $auftragzurechnung[$pos[$i]['id']] = $newposid; + $pos[$i]['rechnung']=$newid; + $pos[$i]['auftrag_position_id']=$pos[$i]['id']; + if($positionen){ + $pos[$i]['sort'] = 1+(int)$this->app->DB->Select("SELECT max(sort) FROM rechnung_position WHERE rechnung = '$newid'"); + } + + //if($pos[$i]['explodiert']) $pos[$i]['bezeichnung'] = $pos[$i]['bezeichnung'];//." (Stückliste)"; + if($pos[$i]['explodiert_parent'] > 0) { + $pos[$i]['bezeichnung'] = "*** ".$pos[$i]['bezeichnung']; + if($pos[$i]['explodiert_parent'] > 0){ + $pos[$i]['explodiert_parent_artikel'] = $this->app->DB->Select("SELECT artikel FROM auftrag_position WHERE id='" . $pos[$i]['explodiert_parent'] . "' LIMIT 1"); + } + else { + $pos[$i]['explodiert_parent_artikel'] = 0; + } + + } + $idtoid[$pos[$i]['id']] = $newposid; + if(!empty($pos[$i]['explodiert_parent'])) { + $pos[$i]['explodiert_parent'] = isset($idtoid[$pos[$i]['explodiert_parent']])?$idtoid[$pos[$i]['explodiert_parent']]:0; + } + $this->app->DB->UpdateArr('rechnung_position',$newposid,'id',$pos[$i], true); + if(is_null($pos[$i]['steuersatz'])){ + $this->app->DB->Update("UPDATE rechnung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); + } + } + + if($this->Firmendaten('dateienweiterfuehren')){ + foreach($auftragzurechnung as $oldpos => $newpos){ + $this->app->DB->Update("UPDATE datei_stichwoerter SET parameter2='$newpos' + WHERE LOWER(objekt)='rechnung' AND parameter='$newid' AND objekt2='position' AND parameter2=".$oldpos); + } + $this->app->DB->Update("UPDATE datei_stichwoerter SET parameter2='0', objekt2='' + WHERE LOWER(objekt)='rechnung' AND parameter='$newid' AND objekt2='position' AND NOT parameter2 IN (".implode(',',$auftragzurechnung).")"); + } + $this->CheckFreifelder("rechnung",$newid); + if($positionen) + { + if($zwischenpositionen) { + $this->CopyBelegZwischenpositionen("auftrag",$id,"rechnung",$newid,$zwischenpositionen); + } + } + else{ + $this->CopyBelegZwischenpositionen("auftrag",$id,"rechnung",$newid); + } + // wenn adresse abweichende rechnungsadresse hat diese nehmen! + if($abweichende_rechnungsadresse=="1") + { + $this->LoadRechnungStandardwerte($newid,$adresseid); + $arr_zahlung[0]['vertriebid']=$arr[0]['vertriebid']; + $arr_zahlung[0]['bearbeiterid']=$arr[0]['bearbeiterid']; + $arr_zahlung[0]['bearbeiter']=$arr[0]['bearbeiter']; + $arr_zahlung[0]['vertrieb']=$arr[0]['vertrieb']; + //$this->app->FormHandler->ArrayUpdateDatabase("rechnung",$newid,$arr_zahlung[0],true); + $arr_zahlung[0]['ust_befreit'] = $arr[0]['ust_befreit']; + $arr_zahlung[0]['steuersatz_normal'] = $arr[0]['steuersatz_normal']; + $arr_zahlung[0]['steuersatz_ermaessigt'] = $arr[0]['steuersatz_ermaessigt']; + $this->app->DB->UpdateArr('rechnung', $newid, 'id', $arr_zahlung[0],true); + } + + $this->RunHook('WeiterfuehrenAuftragZuRechnungPositionen', 2, $id, $newid); + if($this->useTaxFromSettings($arr[0]['projekt'])) { + $this->LoadSteuersaetze($newid, 'rechnung', $arr[0]['projekt']); + } + // wenn auftrag vorkasse rechnung als bezahlt markieren wenn genug geld vorhanden + $this->RechnungNeuberechnen($newid); + //summe zahlungseingaenge + $summe_zahlungseingaenge = 0; + $rechnungssumme = $this->app->DB->Select("SELECT `soll` FROM `rechnung` WHERE `id` = '{$newid}' LIMIT 1"); + + //if(($arr[0][zahlungsweise]=="vorkasse" || $arr[0][zahlungsweise]=="paypal" || $arr[0][zahlungsweise]=="kreditkarte") && $summe_zahlungseingaenge >= $rechnungssumme) + if($summe_zahlungseingaenge > 0) { + $summe_zahlungseingaenge -= (float)$this->app->DB->Select( + "SELECT SUM(`ist`) FROM `rechnung` WHERE `auftragid` = {$id} AND `id` != {$newid}" + ); + if($summe_zahlungseingaenge >= $rechnungssumme){ + $this->app->DB->Update("UPDATE `rechnung` SET `ist` = `soll`, `zahlungsstatus` = 'bezahlt' WHERE `id` = '{$newid}'"); + } + elseif($summe_zahlungseingaenge > 0){ + $lastDate = $this->app->DB->Select( + "SELECT MAX(k.buchung) + FROM `kontoauszuege_zahlungseingang` AS `ke` + INNER JOIN `kontoauszuege` AS `k` ON ke.kontoauszuege = k.id + WHERE ke.`objekt` = 'auftrag' AND ke.`parameter` = '{$id}' " + ); + $invoice = $this->app->DB->SelectRow( + "SELECT `skontobetrag`, `zahlungszielskonto`, `zahlungszieltageskonto`, + DATE_SUB(`datum`, INTERVAL `zahlungszieltageskonto` DAY) <= '{$lastdate}' AS `skonto_ok` + FROM `rechnung` WHERE `id`= '{$newid}'" + ); + if(!empty($invoice['skonto_ok'])){ + $minimumPayed = !empty($invoice['skontobetrag']) + ? $invoice['skontobetrag'] : $rechnungssumme * (100 - $invoice['zahlungszielskonto']) / 100; + + if($summe_zahlungseingaenge >= $minimumPayed){ + $this->app->DB->Update( + "UPDATE `rechnung` + SET `ist` = '{$summe_zahlungseingaenge}', `zahlungsstatus` = 'bezahlt' + WHERE `id` = '{$newid}'" + ); + } + } + } + } + // was ist denn bei rechnung bar oder nachnahme wenn ein auftragsguthaben vorhanden ist + + + if($this->Firmendaten("auftragabschliessen")!="1") + $this->app->DB->Update("UPDATE auftrag SET status='abgeschlossen',schreibschutz='1' WHERE id='$id' LIMIT 1"); + else { + // erstmal nicht mehr umstellen + //if($this->app->DB->Select("SELECT id FROM auftrag WHERE art <> 'rechnung' AND id = '$id' LIMIT 1"))$this->app->DB->Update("UPDATE auftrag SET art='lieferung' WHERE id='$id' LIMIT 1"); + } + + // auftrag freigeben!!! + $this->SchnellFreigabe("rechnung",$newid); + + $this->ANABREGSNeuberechnen($newid,"rechnung"); + return $newid; + } + + + /** + * @param int $projectId + * + * @return bool + */ + function useTaxFromSettings($projectId = 0) + { + $fromProject = $projectId <= 0?0:(int)$this->Projektdaten($projectId, 'taxfromdoctypesettings'); + if($fromProject === 1) { + return false; + } + if($fromProject === 2) { + return true; + } + + return !empty($this->Firmendaten('taxfromdoctypesettings')); + } + + function WeiterfuehrenAngebotZuAuftrag($id) + { + $anfrageid = $this->app->DB->Select("SELECT anfrageid FROM angebot WHERE id='$id' LIMIT 1"); + $adresseid = $this->app->DB->Select("SELECT adresse FROM angebot WHERE id='$id' LIMIT 1"); + + if($anfrageid > 0) + $this->app->DB->Update("UPDATE anfrage SET status='beauftrag',schreibschutz='0' WHERE id='$anfrageid' AND status!='abgeschlossen' AND status!='abgerechnet'"); + + //angebot aus offene Angebote entfernen + $this->app->DB->Insert("INSERT INTO auftrag (id) VALUES ('')"); + $newid = $this->app->DB->GetInsertID(); + + if($this->Firmendaten('dateienweiterfuehren')){ + $this->WeiterfuehrenDateianhang("Angebot", $id, "Auftrag", $newid); + } + + $arr = $this->app->DB->SelectArr("SELECT NOW() as datum, projekt,belegnr as angebot,lieferdatum,aktion,bodyzusatz, '1' as autoversand, + freitext,anschreiben,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,vertrieb,ansprechpartner,titel,lieferbedingung, + standardlager,zahlungsweise, zahlungszieltage, id as angebotid, anfrage as ihrebestellnummer, anfrageid,rabatt,rabatt1,rabatt2,rabatt3,rabatt4,rabatt5,gruppe,vertriebid,bearbeiterid,provision,provision_summe,bearbeiter,projektfiliale,typ,internebezeichnung, + zahlungszieltageskonto,zahlungszielskonto,firma,abweichendelieferadresse,liefername,lieferabteilung,lieferunterabteilung,lieferland,lieferstrasse,lieferort,liefergln,lieferemail,ust_befreit,internebemerkung,liefertitel, ohne_artikeltext, + lieferplz,lieferadresszusatz,lieferansprechpartner,ust_befreit,keinsteuersatz,keinporto,'angelegt' as status,lieferdatumkw, + waehrung,steuersatz_normal,steuersatz_zwischen,steuersatz_ermaessigt,steuersatz_starkermaessigt,steuersatz_dienstleistung, gln,sprache,kostenstelle FROM angebot WHERE id='$id' LIMIT 1"); + $arr[0]['bundesstaat'] = $this->app->DB->Select("SELECT bundesstaat FROM angebot WHERE id = '$id' LIMIT 1"); + + $check_mail = $this->app->DB->Select("SELECT auftrag_email FROM adresse WHERE id='$adresseid'"); + if($check_mail!="") $arr[0]['email'] = $check_mail; + $arr[0]['autoversand'] = 1-(int)$this->Projektdaten($arr[0]['projekt'],'deactivateautoshipping'); + $this->app->DB->UpdateArr('auftrag',$newid, 'id', $arr[0], true); + $pos = $this->app->DB->SelectArr("SELECT * FROM angebot_position WHERE angebot='$id' order by sort"); + for($i=0;$iapp->DB->Insert("INSERT INTO auftrag_position (id) VALUES('')"); + $newposid = $this->app->DB->GetInsertID(); + $idtoid[$pos[$i]['id']] = $newposid; + if(!empty($pos[$i]['explodiert_parent'])) + { + $pos[$i]['explodiert_parent'] = isset($idtoid[$pos[$i]['explodiert_parent']])?$idtoid[$pos[$i]['explodiert_parent']]:0; + } + $pos[$i]['auftrag']=$newid; + $this->app->DB->UpdateArr('auftrag_position',$newposid, 'id', $pos[$i], true); + if($pos[$i]['berechnen_aus_teile']) { + $berechnen_aus_teile[$newposid] = true; + } + if(is_null($pos[$i]['steuersatz'])) { + $this->app->DB->Update("UPDATE auftrag_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1"); + } + } + if(isset($berechnen_aus_teile)) + { + foreach($berechnen_aus_teile as $k => $v) + { + $this->app->DB->Update("UPDATE auftrag_position SET preis = 0 WHERE explodiert_parent = '$k' AND auftrag = '$newid'"); + } + } + + //wenn angebot explodiert war dann nicht + if($this->app->DB->Select("SELECT COUNT(id) FROM angebot_position WHERE angebot='$id' AND explodiert_parent > 0") >0 ) + $this->app->DB->Update("UPDATE auftrag_position ap INNER JOIN artikel art ON ap.artikel = art.id SET ap.explodiert = 1 WHERE art.juststueckliste = 1 AND ap.auftrag = '$newid'"); + + + $this->CheckFreifelder("auftrag",$newid); + $this->CopyBelegZwischenpositionen("angebot",$id,"auftrag",$newid); + + $belegnr = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$newid' LIMIT 1"); + $this->app->DB->Update("UPDATE angebot SET status='beauftragt', schreibschutz='1', auftrag='$belegnr',auftragid='$newid' WHERE id='$id' LIMIT 1"); + // wiedervorlagen als abgeschlossen + $this->app->DB->Update("UPDATE wiedervorlage SET abgeschlossen='1' WHERE module='angebot' AND parameter='$id' AND parameter > 0"); + if($this->useTaxFromSettings($arr[0]['projekt'])) { + $this->LoadSteuersaetze($newid, 'auftrag', $arr[0]['projekt']); + } + // auftrag freigeben!!! + $this->SchnellFreigabe("auftrag",$newid); + + $this->app->erp->RunHook('WeiterfuehrenAngebotZuAuftrag', 2, $id, $newid); + return $newid; + } + + function DeleteAngebot($id) + { + $belegnr = $this->app->DB->Select("SELECT belegnr FROM angebot WHERE id='$id' LIMIT 1"); + if($belegnr=="" || $belegnr=="0") + { + $this->app->DB->Delete("DELETE FROM angebot_position WHERE angebot='$id'"); + $this->app->DB->Delete("DELETE FROM angebot_protokoll WHERE angebot='$id'"); + $this->app->DB->Delete("DELETE FROM angebot WHERE id='$id' LIMIT 1"); + } + } + + + function PaketannahmenAbschliessen() + { + $arr = $this->app->DB->SelectArr("SELECT id FROM paketannahme WHERE status!='abgeschlossen'"); + for($i=0;$iapp->erp->LoadModul('verbindlichkeit'); + if(!empty($obj) && method_exists($obj,'createLiability')) { + return $obj->createLiability($adresse); + } + return 0; + } + + + function CreateBestellung($adresse="") + { + /** @var Bestellung $obj */ + $obj = $this->LoadModul('bestellung'); + if(!empty($obj) && method_exists($obj, 'CreateBestellung')) + { + return $obj->CreateBestellung($adresse); + } + } + + function AddBestellungPosition($bestellung, $einkauf,$menge,$datum, $beschreibung = '',$artikel="",$einheit="", $waehrung = '') + { + /** @var Bestellung $obj */ + $obj = $this->LoadModul('bestellung'); + if(!empty($obj) && method_exists($obj, 'AddBestellungPosition')) + { + return $obj->AddBestellungPosition($bestellung, $einkauf,$menge,$datum, $beschreibung,$artikel,$einheit, $waehrung); + } + } + + + function DeleteBestellung($id) + { + /** @var Bestellung $obj */ + $obj = $this->LoadModul('bestellung'); + if(!empty($obj) && method_exists($obj, 'DeleteBestellung')) + { + $obj->DeleteBestellung($id); + } + } + + + function CreateRechnung($adresse="") + { + /** @var Rechnung $obj */ + $obj = $this->LoadModul('rechnung'); + if(!empty($obj) && method_exists($obj,'CreateRechnung')){ + return $obj->CreateRechnung($adresse); + } + } + + + public function GetStandardWaehrung($projekt=0) + { + if(is_array($projekt) && isset($projekt['eigenesteuer']) && isset($projekt['waehrung'])) { + $projekt_arr = $projekt; + } + elseif($projekt > 0) { + $projekt_arr = $this->app->DB->SelectRow( + "SELECT eigenesteuer,waehrung FROM projekt WHERE id='$projekt' LIMIT 1" + ); + } + if(!empty($projekt_arr['eigenesteuer'])) + { + $waehrung = $projekt_arr['waehrung']; + } else { + $waehrung = $this->Firmendaten('waehrung'); + } + return $waehrung; + } + + public function GetStandardSteuersatzErmaessigt($projekt=0) + { + /** @var Steuersaetze $objSteuersaetze */ + $objSteuersaetze = $this->app->loadModule('steuersaetze', false); + if($objSteuersaetze !== null && method_exists($objSteuersaetze, 'checkTaxesToSet')) { + $objSteuersaetze->checkTaxesToSet(); + } + if(is_array($projekt) && isset($projekt['eigenesteuer']) && isset($projekt['steuersatz_ermaessigt'])) { + $projekt_arr = $projekt; + } + elseif($projekt > 0){ + $projekt_arr = $this->app->DB->SelectRow( + "SELECT eigenesteuer,steuersatz_ermaessigt FROM projekt WHERE id='$projekt' LIMIT 1" + ); + } + if(!empty($projekt_arr['eigenesteuer'])) + { + $steuersatz_ermaessigt = $projekt_arr['steuersatz_ermaessigt']; + } + else { + $steuersatz_ermaessigt = $this->Firmendaten('steuersatz_ermaessigt'); + } + return $steuersatz_ermaessigt; + } + + public function GetStandardSteuersatzNormal($projekt=0) + { + /** @var Steuersaetze $objSteuersaetze */ + $objSteuersaetze = $this->app->loadModule('steuersaetze', false); + if($objSteuersaetze !== null && method_exists($objSteuersaetze, 'checkTaxesToSet')) { + $objSteuersaetze->checkTaxesToSet(); + } + if(is_array($projekt) && isset($projekt['eigenesteuer']) && isset($projekt['steuersatz_normal'])) { + $projekt_arr = $projekt; + } + elseif($projekt > 0){ + $projekt_arr = $this->app->DB->SelectRow( + "SELECT eigenesteuer,steuersatz_normal FROM projekt WHERE id='$projekt' LIMIT 1" + ); + } + if(!empty($projekt_arr['eigenesteuer'])) + { + $steuersatz_normal = $projekt_arr['steuersatz_normal']; + } else { + $steuersatz_normal = $this->Firmendaten("steuersatz_normal"); + } + return $steuersatz_normal; + } + + function GetStandardSteuersatzBefreit($projekt=0) + { + return 0.00; + } + + public function LoadSteuersaetze($id,$typ,$projekt='') + { + if($id <= 0 || empty($typ)) { + return; + } + $this->app->erp->StartChangeLog($typ, $id); + /** @var Steuersaetze $objSteuersaetze */ + $objSteuersaetze = $this->app->loadModule('steuersaetze', false); + if($objSteuersaetze !== null && method_exists($objSteuersaetze, 'checkTaxesToSet')) { + $objSteuersaetze->checkTaxesToSet(); + } + + if(!(is_array($projekt) && !empty($projekt['id'])) && $projekt <=0) { + $projekt = $this->app->DB->Select("SELECT projekt FROM `$typ` WHERE id='$id' LIMIT 1"); + } + if(is_array($projekt) && isset($projekt['eigenesteuer']) + && isset($projekt['steuersatz_normal']) && isset($projekt['steuersatz_ermaessigt'])) { + $projekt_arr = $projekt; + } + elseif($projekt > 0) { + $projekt_arr = $this->app->DB->SelectRow( + "SELECT eigenesteuer,steuersatz_normal,steuersatz_ermaessigt FROM projekt WHERE id='$projekt' LIMIT 1" + ); + } + if(!empty($projekt_arr['eigenesteuer'])) { + $steuersatz_normal = $projekt_arr['steuersatz_normal']; + $steuersatz_ermaessigt = $projekt_arr['steuersatz_ermaessigt']; + } + else { + $steuersatz_normal = $this->Firmendaten('steuersatz_normal'); + $steuersatz_ermaessigt = $this->Firmendaten('steuersatz_ermaessigt'); + } + + $this->app->DB->Update("UPDATE $typ SET steuersatz_normal='$steuersatz_normal',steuersatz_ermaessigt='$steuersatz_ermaessigt' WHERE id='$id' LIMIT 1"); + $this->app->erp->WriteChangeLog(); + } + + + function formatMoney($value,$currency,$decimals=2) + { + // Schweizer Franken + $decSeparator = ','; + $thouSeparator = '.'; + + if ($currency === 'CHF') { + $decSeparator = '.'; + $thouSeparator = '\''; + } + + return number_format((float)$value, $decimals, $decSeparator, $thouSeparator); + } + + + + function LoadKurs($id,$typ,$projekt="",$force=false) + { + if($id <= 0 || empty($typ) || $typ === 'bestellung') + { + return; + } + $kurs = 0; + // wenn GS und Kurs aus RE denn nicht neuladen + if($typ==='gutschrift' && $this->app->erp->Firmendaten('gutschriftkursvonrechnung')) + { + $rechnungid = $this->app->DB->Select("SELECT rechnungid FROM gutschrift WHERE id='$id'"); + if($rechnungid > 0) + { + $kurs = $this->app->DB->Select("SELECT kurs FROM rechnung WHERE id='$rechnungid'"); + } + } + + // nur ziehen wenn in den Firmendaten aktiviert + if($this->Firmendaten("loadcurrencyrate")) + { + $waehrung=$this->app->DB->Select("SELECT waehrung FROM $typ WHERE id='$id'"); + $kurs = $this->GetWaehrungUmrechnungskurs($this->Firmendaten('waehrung'),$waehrung); + } + if($kurs<>0) + { + $this->app->DB->Update("UPDATE $typ SET kurs='$kurs' WHERE id='$id' LIMIT 1"); + } + } + + + + public function LoadSteuersaetzeWaehrung($id,$typ,$projekt='') + { + if($id <=0 || empty($typ)) + { + return; + } + $this->LoadSteuersaetze($id,$typ,$projekt); + + $waehrung = $this->GetStandardWaehrung($projekt); + + $this->app->DB->Update("UPDATE $typ SET waehrung='$waehrung' WHERE id='$id' AND waehrung='' LIMIT 1"); // AND waehrung='' + if($typ === 'proformarechnung') { + return; + } + $this->LoadKurs($id,$typ,$projekt); + } + + + function CreateGutschrift($adresse="") + { + $projekt = $this->GetCreateProjekt($adresse); + + $belegmax = ''; + $ohnebriefpapier = $this->Firmendaten('gutschrift_ohnebriefpapier'); + $stornorechnung = (int)$this->Firmendaten('stornorechnung_standard'); + if($stornorechnung !== 0 && $stornorechnung !== 1) { + $stornorechnung = 1; + $this->FirmendatenSet('stornorechnung_standard', '1'); + } + + if($this->StandardZahlungsweise($projekt)=="rechnung") + { + $this->app->DB->Insert("INSERT INTO gutschrift (id,datum,bearbeiter,firma,belegnr,zahlungsweise,zahlungszieltage,status,projekt,adresse,ohne_briefpapier,stornorechnung) + VALUES ('',NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','".$this->StandardZahlungsweise($projekt)."','".$this->ZahlungsZielTage($projekt)."','angelegt','$projekt','$adresse','".$ohnebriefpapier."','$stornorechnung')"); + } else { + $this->app->DB->Insert("INSERT INTO gutschrift (id,datum,bearbeiter,firma,belegnr,zahlungsweise,zahlungszieltage,status,projekt,adresse,ohne_briefpapier,stornorechnung) + VALUES ('',NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','".$this->StandardZahlungsweise($projekt)."','0','angelegt','$projekt','$adresse','".$ohnebriefpapier."','$stornorechnung')"); + } + $id = $this->app->DB->GetInsertID(); + $this->CheckVertrieb($id,"gutschrift"); + $this->CheckBearbeiter($id,"gutschrift"); + + $this->app->erp->GutschriftProtokoll($id,"Gutschrift angelegt"); + + $type="gutschrift"; + $this->app->erp->ObjektProtokoll($type,$id,$type."_create",ucfirst($type)." angelegt"); + $deliverythresholdvatid = $this->getDeliverythresholdvatid($projekt); + if($id > 0 && !empty($deliverythresholdvatid)){ + $deliverythresholdvatid = $this->app->DB->real_escape_string($deliverythresholdvatid); + $this->app->DB->Update("UPDATE gutschrift SET deliverythresholdvatid = '$deliverythresholdvatid' WHERE id = $id LIMIT 1"); + } + $this->SchnellFreigabe("gutschrift",$id); + + + $this->LoadSteuersaetzeWaehrung($id,"gutschrift"); + $this->EventAPIAdd("EventGutschriftCreate",$id,"gutschrift","create"); + return $id; + } + + + function AddGutschritPosition($gutschrift, $verkauf,$menge,$datum) + { + $artikel = $this->app->DB->Select("SELECT artikel FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $bezeichnunglieferant = $this->app->DB->Select("SELECT name_de FROM artikel WHERE id='$artikel' LIMIT 1"); + $bestellnummer = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); + $preis = $this->app->DB->Select("SELECT preis FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $projekt = $this->app->DB->Select("SELECT projekt FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $waehrung = $this->app->DB->Select("SELECT waehrung FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikel' LIMIT 1"); + $vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $sort = $this->app->DB->Select("SELECT MAX(sort) FROM gutschrift_position WHERE rechnung='$gutschrift' LIMIT 1"); + $sort = $sort + 1; + $this->app->DB->Insert("INSERT INTO gutschrift_position (id,gutschrift,artikel,bezeichnung,nummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe) + VALUES ('','$gutschrift','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe')"); + } + + + function AddAuftragPositionManuell($auftrag, $artikel,$preis, $menge,$bezeichnung,$beschreibung="",$waehrung='EUR',$rabatt=0) + { + $bezeichnunglieferant = $bezeichnung; + $artArr = $this->app->DB->SelectRow( + sprintf( + 'SELECT nummer,projekt,umsatzsteuer,mlmpunkte,mlmbonuspunkte,mlmdirektpraemie FROM artikel WHERE id =%d', + $artikel + ) + ); + $bestellnummer = !empty($artArr)?$artArr['nummer']:$this->app->DB->Select("SELECT nummer FROM artikel WHERE id='$artikel' LIMIT 1"); + $projekt = !empty($artArr)?$artArr['projekt']:$this->app->DB->Select("SELECT projekt FROM artikel WHERE id='$artikel' LIMIT 1"); + + if($waehrung!=''){ + $this->app->DB->Update("UPDATE auftrag SET waehrung='$waehrung' WHERE id='$auftrag' AND waehrung='' LIMIT 1"); + } + + $umsatzsteuer = !empty($artArr)?$artArr['umsatzsteuer']:$this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id='$artikel' LIMIT 1"); + + $mlmpunkte = !empty($artArr)?$artArr['mlmpunkte']:$this->app->DB->Select("SELECT mlmpunkte FROM artikel WHERE id='$artikel' LIMIT 1"); + $mlmbonuspunkte = !empty($artArr)?$artArr['mlmbonuspunkte']:$this->app->DB->Select("SELECT mlmbonuspunkte FROM artikel WHERE id='$artikel' LIMIT 1"); + $mlmdirektpraemie = !empty($artArr)?$artArr['mlmdirektpraemie']:$this->app->DB->Select("SELECT mlmdirektpraemie FROM artikel WHERE id='$artikel' LIMIT 1"); + + $keinrabatterlaubt=0; + if($rabatt <> 0) { + $keinrabatterlaubt=1; + } + + + //$vpe = $this->app->DB->Select("SELECT vpe FROM verkaufspreise WHERE id='$verkauf' LIMIT 1"); + $sort = (int)$this->app->DB->Select("SELECT MAX(sort) FROM auftrag_position WHERE auftrag='$auftrag' LIMIT 1"); + $sort++; + $this->app->DB->Insert("INSERT INTO auftrag_position (auftrag,artikel,bezeichnung,nummer,menge,preis, waehrung, sort, umsatzsteuer, status,projekt,vpe,beschreibung,punkte,bonuspunkte,mlmdirektpraemie,rabatt,keinrabatterlaubt) + VALUES ('$auftrag','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$umsatzsteuer','angelegt','$projekt','$vpe','$beschreibung','$mlmpunkte','$mlmbonuspunkte','$mlmdirektpraemie','$rabatt','$keinrabatterlaubt')"); + return $this->app->DB->GetInsertID(); + } + + + function AddRechnungPositionManuell($rechnung, $artikel,$preis, $menge,$bezeichnung,$beschreibung="",$waehrung='EUR',$rabatt=0) + { + $obj = $this->LoadModul('rechnung'); + if(!empty($obj) && method_exists($obj,'AddRechnungPositionManuell')){ + return $obj->AddRechnungPositionManuell($rechnung, $artikel,$preis, $menge,$bezeichnung,$beschreibung,$waehrung,$rabatt); + } + } + + function AddRechnungPosition($rechnung, $verkauf,$menge,$datum) + { + $obj = $this->LoadModul('rechnung'); + if(!empty($obj) && method_exists($obj,'AddRechnungPosition')){ + $obj->AddRechnungPosition($rechnung, $verkauf,$menge,$datum); + } + } + + // Produktion und Auftrag reservieren + function AuftragReservieren($id,$typ="auftrag") + { + $standardlager = 0; + $projektlager = 0; + if($typ==='auftrag' && $id > 0){ + $auftragsArr = $this->app->DB->SelectRow( + sprintf( + "SELECT id, adresse, projekt, belegnr, standardlager,reservationdate FROM auftrag WHERE status='freigegeben' AND id=%d LIMIT 1", + (int)$id + ) + ); + if($this->app->DB->error()) { + $auftragsArr = $this->app->DB->SelectRow( + sprintf( + "SELECT id, adresse, projekt, belegnr, standardlager, NULL AS reservationdate FROM auftrag WHERE status='freigegeben' AND id=%d LIMIT 1", + (int)$id + ) + ); + } + if(empty($auftragsArr)) { + return 0; + } + if(!empty($auftragsArr['reservationdate']) && $auftragsArr['reservationdate'] !== '0000-00-00' + && strtotime($auftragsArr['reservationdate']) > strtotime(date('Y-m-d'))) { + return 0; + } + $id_check = $auftragsArr['id']; + $adresse = $auftragsArr['adresse']; + $projekt = $auftragsArr['projekt']; + if($projekt) { + $projektlager = $this->app->DB->Select( + sprintf( + 'SELECT id FROM projekt WHERE id = %d AND projektlager = 1', + $projekt + ) + ); + } + $belegnr= $auftragsArr['belegnr']; + $standardlager = $auftragsArr['standardlager']; + } + if($typ==='produktion'){ + } + + // nicht reservieren wenn auftrag nicht offen ist + if($id_check!=$id){ + return 0; + } + + + if($typ==='auftrag') + { + $artikelarr= $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE auftrag='$id' AND geliefert!=1"); + $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE parameter='$id' AND objekt='auftrag'"); + + } + + + //schaue artikel fuer artikel an wieviel geliefert wurde und ob bereits reservierungen vorliegen, wenn welche vorliegen auch reservieren auf 9999-01-01 + // Lager Check + $cArtikelarr = !empty($artikelarr)?count($artikelarr):0; + for($k=0;$k<$cArtikelarr; $k++) + { + if(isset($artikelarr[$k]['gelieferte_menge'])){ + $menge = $artikelarr[$k]['menge'] - $artikelarr[$k]['gelieferte_menge']; + } + else{ + $menge = $artikelarr[$k]['menge']; + } + + $artikel = $artikelarr[$k]['artikel']; + // pruefe artikel 12 menge 4 + $articleArr = $this->app->DB->SelectRow( + sprintf( + "SELECT lagerartikel,stueckliste FROM artikel WHERE id=%d LIMIT 1",$artikel + ) + ); + $lagerartikel = $articleArr['lagerartikel']; + $stueckliste = $articleArr['stueckliste']; + if($lagerartikel>=1) + { + // menge = notwendige menge - bereits reserviert + $zu_reservieren = $menge;// - $anzahl_reserviert; + + if($zu_reservieren>0) + { + if($typ==='auftrag'){ + + //if($this->LagerFreieMenge($artikel) < $zu_reservieren) continue; + $lagerfreiemenge = $this->LagerFreieMenge($artikel, true, $standardlager, $projektlager); + if($lagerfreiemenge <=0) { + continue; + } + + // die restliche menge auf den Auftrag reservieren + if($lagerfreiemenge < $zu_reservieren){ + $zu_reservieren = $lagerfreiemenge; + } + + // schaue ob es artikel in reserivierungen fuer diesen auftrag schon gibt dann erhoehe +// $check = $this->app->DB->Select("SELECT menge FROM lager_reserviert WHERE artikel='$artikel' +// AND objekt='auftrag' AND parameter='$id' LIMIT 1"); + $check=0; + + if($check > 0) + { + // wenn schon etwas reserviert ist + $this->app->DB->Update("UPDATE lager_reserviert SET menge = menge + '$zu_reservieren' WHERE + artikel='$artikel' + AND objekt='auftrag' AND parameter='$id'"); + } else { + $this->app->DB->Insert("INSERT INTO lager_reserviert + (id,adresse,artikel,menge,grund,projekt,firma,bearbeiter,datum,objekt,parameter,posid) + VALUES('','$adresse','$artikel','$zu_reservieren','Reservierung für Auftrag $belegnr','$projekt', + '".$this->app->User->GetFirma()."','".$this->app->User->GetName()."','9999-99-99','auftrag','$id','".$artikelarr[$k]['id']."')"); + } + + } + } + } + } + } + + function AnzeigePositionenBrutto($anrede, $doctyp, $projekt, $adresse,$doctypeid=0) + { + // wenn im beleg 3 oder 4 dann zaehlt die einstellung + if($doctypeid > 0 && in_array($doctyp, ['rechnung', 'angebot','auftrag','gutschrift','bestellung'])) { + $anzeigesteuer = $this->app->DB->Select("SELECT anzeigesteuer FROM `$doctyp` WHERE id='$doctypeid' LIMIT 1"); + if($anzeigesteuer==3) { + return false; + } + if($anzeigesteuer==4) { + return true; + } + } + if($adresse) + { + $bruttonetto = $this->app->DB->Select("SELECT anzeigesteuerbelege FROM adresse WHERE id = '$adresse' LIMIT 1"); + if($bruttonetto == 1) { + return false; + } + if($bruttonetto == 2) { + return true; + } + } + if($projekt){ + $bruttonetto = $this->app->DB->Select("SELECT anzeigesteuerbelege FROM projekt WHERE id = '$projekt' LIMIT 1"); + if($bruttonetto == 1) { + return false; + } + if($bruttonetto == 2) { + return true; + } + } + if($this->app->erp->Firmendaten('immerbruttorechnungen',$projekt)) { + return true; + } + return false; + } + + function AnzeigeBelegNettoAdresse($anrede, $doctyp, $projekt, $adresse,$doctypeid=0) + { + // wenn im beleg 3 oder 4 dann zaehlt die einstellung + if($doctypeid > 0 && ($doctyp==='rechnung' || $doctyp==='angebot' || $doctyp==='auftrag' || $doctyp==='gutschrift' || $doctyp==='bestellung')) { + $anzeigesteuer = $this->app->DB->Select("SELECT anzeigesteuer FROM $doctyp WHERE id='$doctypeid' LIMIT 1"); + if($anzeigesteuer==3) { + return true; + } + if($anzeigesteuer==4) { + return false; + } + } + + if($adresse) { + $bruttonetto = $this->app->DB->Select("SELECT anzeigesteuerbelege FROM adresse WHERE id = '$adresse' LIMIT 1"); + if($bruttonetto == 1) { + return 1; + } + if($bruttonetto == 2) { + return 0; + } + } + + if($doctyp==='bestellung' && $this->app->erp->Firmendaten('immerbruttorechnungen',$projekt)!='1' && + $this->Projektdaten($projekt,'anzeigesteuerbelegebestellung') != '1') { + return 1; + } + if($projekt) { + $bruttonetto = $this->Projektdaten($projekt, 'anzeigesteuerbelege');// $this->app->DB->Select("SELECT anzeigesteuerbelege FROM projekt WHERE id = '$projekt' LIMIT 1"); + if($bruttonetto == 1) { + return 1; + } + if($bruttonetto == 2) { + return 0; + } + } + + if($doctyp==='bestellung' && $this->app->erp->Firmendaten('immerbruttorechnungen',$projekt)!='1') { + return 1; + } + + if($this->app->erp->Firmendaten('immerbruttorechnungen',$projekt)!='1' && + ($anrede==='firma' || $doctyp==='bestellung' || $this->app->erp->AnzeigeBelegNetto($anrede,$projekt,$doctyp,$doctypeid) || + $this->app->erp->Firmendaten('immernettorechnungen',$projekt)=='1')) { + return 1; + } + return 0; + } + + + function AnzeigeBelegNetto($typ,$projekt,$doctype="",$doctypeid=0) + { + // wenn im beleg 3 oder 4 dann zaehlt die einstellung + if($doctypeid > 0 && ($doctype==='rechnung' || $doctype==='angebot' || $doctype==='auftrag' || $doctype=='gutschrift' || $doctype=='bestellung')) + { + $anzeigesteuer = $this->app->DB->Select("SELECT anzeigesteuer FROM $doctype WHERE id='$doctypeid' LIMIT 1"); + if($anzeigesteuer==3) { + return 1; + } + } + $orderBy = ''; + if($projekt > 0) { + $orderBy = sprintf(' ORDER BY %d DESC ', (int)$projekt); + } + return (int)$this->app->DB->Select( + sprintf( + 'SELECT netto FROM adresse_typ WHERE type=\'%s\' %s LIMIT 1', + $typ, $orderBy + ) + ); + } + + function AuftragNeuberechnenAllen() + { + $arrAuftrag = $this->app->DB->SelectArr("SELECT id FROM auftrag WHERE status!='abgeschlossen' AND status!='storniert' AND autoversand=1 ORDER BY fastlane = 1 DESC, datum"); + if(empty($arrAuftrag)) { + return; + } + foreach($arrAuftrag as $rowAuftrag) + { + $this->AuftragNeuberechnen($rowAuftrag['id']); + } + } + + function BestellungNeuberechnen($id) + { + $obj = $this->LoadModul('bestellung'); + if(!empty($obj) && method_exists($obj, 'BestellungNeuberechnen')) + { + $obj->BestellungNeuberechnen($id); + } + } + + function LieferscheinNeuberechnen($id) + { + + } + + function AngebotNeuberechnen($id) + { + $this->ANABREGSNeuberechnen($id,"angebot"); + } + + + + function AuftragZahlungaufteilen($auftrag_org,$auftrag_new) + { + $gesamtsumme_new = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$auftrag_new' LIMIT 1"); + $adresse_new = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$auftrag_new' LIMIT 1"); + + //pruefe ob es auf auftrag einen Zahlungseingang gibt + $zahlungen = $this->app->DB->SelectArr("SELECT * FROM kontoauszuege_zahlungseingang WHERE objekt='auftrag' AND parameter='$auftrag_org'"); + for($i=0;$i $gesamtsumme_new) + { + $betrag_new = $zahlungen[$i]['betrag'] - $gesamtsumme_new; + $this->app->DB->Update("UPDATE kontoauszuege_zahlungseingang SET betrag='$betrag_new' WHERE id='".$zahlungen[$i]['id']."' LIMIT 1"); + + $this->app->DB->Insert("INSERT INTO kontoauszuege_zahlungseingang (id,adresse,bearbeiter,betrag,datum,objekt,parameter,kontoauszuege,firma,abgeschlossen,parameter2) + VALUES ('','".$adresse_new."','".$zahlungen[$i]['bearbeiter']."','".$gesamtsumme_new."','".$zahlungen[$i]['datum']."','auftrag','".$auftrag_new."','".$zahlungen[$i]['kontoauszuege']."','".$zahlungen[$i]['firma']."','".$zahlungen[$i]['abgeschlossen']."','".$zahlungen[$i]['parameter2']."')"); + break; + } + } + return; + } + + + function AuftragNeuberechnen($id,$force=false) + { + $this->ANABREGSNeuberechnen($id,"auftrag",$force); + } + + + + function GutschriftNeuberechnen($id) + { + $this->ANABREGSNeuberechnen($id,"gutschrift"); + + // alle zugehoerigen Rechnungen + $rechnungid = $this->app->DB->Select("SELECT rechnungid FROM gutschrift WHERE id='$id' LIMIT 1"); + if($rechnungid > 0 && $this->Firmendaten("mahnwesenmitkontoabgleich")=="1") + { + $this->app->DB->Update("UPDATE rechnung SET ist=0, zahlungsstatus='offen' WHERE id='$rechnungid' AND mahnwesenfestsetzen!=1 LIMIT 1"); + $this->RechnungNeuberechnen($rechnungid); + } + } + + + function DeleteGutschrift($id) + { + $belegnr = $this->app->DB->Select("SELECT belegnr FROM gutschrift WHERE id='$id' LIMIT 1"); + if($belegnr==="" || $belegnr==="0") + { + $this->app->DB->Delete("DELETE FROM gutschrift_position WHERE gutschrift='$id'"); + $this->app->DB->Delete("DELETE FROM gutschrift_protokoll WHERE gutschrift='$id'"); + $this->app->DB->Delete("DELETE FROM gutschrift WHERE id='$id' LIMIT 1"); + } + } + + function Skontofaehig($id, $art, $mitsteuer=true) + { + $name = ucfirst($art).'MitUmsatzeuer'; + if(!method_exists($this->app->erp, $name)) + { + return; + } + $skontofaehig = 0; + $positionen = $this->app->DB->SelectArr("SELECT ap.*,art.keinskonto as artkeinskonto FROM $art"."_position ap INNER JOIN artikel art ON ap.artikel = art.id WHERE $art = '$id' ".($art == 'angebot'?" AND ifnull(ap.optional,0) = 0 ":'')); + $steuerfrei = !$this->$name($id); + + $steuersatzermaessigt = $this->GetSteuersatzErmaessigt(true,$id,$art); + $steuersatznormal = $this->GetSteuersatzNormal(true,$id,$art); + $zahlungszielskonto = $this->app->DB->Select("SELECT zahlungszielskonto FROM $art WHERE id = '$id' LIMIT 1"); + + foreach($positionen as $k => $v) + { + if($v['artkeinskonto'] == 1 && $v['skontobetrag'] !== 0) + { + + }else{ + $steuersatz = 1; + if(!$steuerfrei) + { + if(!is_null($v['steuersatz']) && $v['steuersatz'] >= 0) + { + $steuersatz = 1+ $v['steuersatz']; + }else{ + if($v['umsatzsteuer'] == 'befreit') + { + + }elseif($v['umsatzsteuer'] == 'ermaessigt') + { + $steuersatz = $steuersatzermaessigt; + }else{ + $steuersatz = $steuersatznormal; + } + } + $rabatt = 0; + if(!$v['keinrabatterlaubt'])$rabatt = (float)$v['rabatt']; + } + if($mitsteuer) + $skontofaehig += $v['menge'] * $v['preis']* (1-$rabatt/100) * $steuersatz; + else + $skontofaehig += $v['menge'] * $v['preis']* (1-$rabatt/100); + } + } + return $skontofaehig; + } + + function BerechneSkonto($id, $art, $force = false) + { + if( ($art == '') || ($id <= 0) ){ + return; + } + if($art === 'proformarechnung') { + return; + } + if(!$force + && $this->app->DB->Select( + sprintf( + 'SELECT schreibschutz FROM `%s` WHERE id = %d LIMIT 1', + $art, $id + ) + ) + ) { + return; + } + $name = ucfirst($art).'MitUmsatzeuer'; + if(!method_exists($this->app->erp, $name)) { + return; + } + $positionen = $this->app->DB->SelectArr( + "SELECT ap.*,art.keinskonto as artkeinskonto, art.umsatzsteuer as artumsatzsteuer + FROM $art"."_position ap + INNER JOIN artikel art ON ap.artikel = art.id + WHERE $art = '$id' ".($art == 'angebot'?" AND ifnull(ap.optional,0) = 0 ":'')); + if(empty($positionen)){ + $this->app->DB->Update("UPDATE $art SET skontobetrag = 0 WHERE id = '$id' LIMIT 1"); + return; + } + $steuerfrei = !$this->$name($id); + $skontobetrag = 0; + $docArr = $this->app->DB->SelectRow(sprintf('SELECT * FROM `%s` WHERE id = %d', $art, $id)); + if(!empty($docArr)){ + $steuersatzermaessigt = 1 + $docArr['steuersatz_ermaessigt'] / 100; + $steuersatznormal = 1 + $docArr['steuersatz_normal'] / 100; + $zahlungszielskonto = $docArr['zahlungszielskonto']; + } + else{ + $steuersatzermaessigt = $this->GetSteuersatzErmaessigt(true, $id, $art); + $steuersatznormal = $this->GetSteuersatzNormal(true, $id, $art); + $zahlungszielskonto = $this->app->DB->Select("SELECT zahlungszielskonto FROM $art WHERE id = '$id' LIMIT 1"); + } + foreach($positionen as $k => $v) { + if($v['artkeinskonto'] == 1 && $v['skontobetrag'] !== 0) { + $skontobetragpos = 0; + if(!$v['skontosperre']) { + $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag = 0 WHERE id = '".$v['id']."' LIMIT 1"); + $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_netto_einzeln = 0 WHERE id = '".$v['id']."' LIMIT 1"); + $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_netto_gesamt = 0 WHERE id = '".$v['id']."' LIMIT 1"); + $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_brutto_einzeln = 0 WHERE id = '".$v['id']."' LIMIT 1"); + $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_brutto_einzeln = 0 WHERE id = '".$v['id']."' LIMIT 1"); + } + else { + $skontobetragpos = $v['skontobetrag']; + } + $skontobetrag += $skontobetragpos; + } + else{ + $steuersatz = 1; + if(!$steuerfrei) + { + if(!is_null($v['steuersatz']) && $v['steuersatz'] >= 0) + { + $steuersatz = 1+ $v['steuersatz']/100; + }else{ + if($v['umsatzsteuer'] == '') + { + $v['umsatzsteuer'] = $v['artumsatzsteuer']; + + } + if($v['umsatzsteuer'] === 'befreit') + { + + }elseif($v['umsatzsteuer'] === 'ermaessigt') + { + $steuersatz = $steuersatzermaessigt; + }else{ + $steuersatz = $steuersatznormal; + } + } + } + $rabatt = 0; + if(!empty($v['rabatt'])) { + $rabatt = (float)$v['rabatt']; + } + $skontobetragpos = $v['menge'] * $v['preis']* (1-$rabatt/100) * $steuersatz * $zahlungszielskonto / 100; + $skontobetragNettoEinzeln = $v['preis'] * (1-$rabatt/100) * $zahlungszielskonto / 100; + $skontobetragBruttoEinzeln = $v['preis'] * (1-$rabatt/100) * $steuersatz * $zahlungszielskonto / 100; + $skontobetragNettoGesamt = $v['menge'] * $v['preis'] * (1-$rabatt/100) * $zahlungszielskonto / 100; + + if(empty($v['skontosperre'])) { + $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag = '$skontobetragpos' WHERE id = '".$v['id']."' LIMIT 1"); + $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_brutto_gesamt = '$skontobetragpos' WHERE id = '".$v['id']."' LIMIT 1"); + $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_netto_gesamt = '$skontobetragNettoGesamt' WHERE id = '".$v['id']."' LIMIT 1"); + $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_brutto_einzeln = '$skontobetragBruttoEinzeln' WHERE id = '".$v['id']."' LIMIT 1"); + $this->app->DB->Update("UPDATE $art"."_position SET skontobetrag_netto_einzeln = '$skontobetragNettoEinzeln' WHERE id = '".$v['id']."' LIMIT 1"); + } + else { + $skontobetragpos = $v['skontobetrag']; + } + $skontobetrag += $skontobetragpos; + } + } + $this->app->DB->Update("UPDATE $art SET skontobetrag = '$skontobetrag' WHERE id = '$id' LIMIT 1"); + if(!empty($positionen) && (empty($docArr) || empty($docArr['skontoberechnet']))) { + $this->app->DB->Update("UPDATE $art SET skontoberechnet = '1' WHERE id = '$id' LIMIT 1"); + } + } + + public function ANABREGSNeuberechnen($id,$art,$force=false) + { + if($id <= 0 || empty($art)) + { + return; + } + + //$this->LoadSteuersaetze($id,$art); //03.01.2019 Bruno entfernt, da Shopaufträge umsgestellt werden + //$this->LoadKurs($id,$art); //03.01.2019 Bruno entfernt + $belegarr = $this->app->DB->SelectRow("SELECT * FROM $art WHERE id='$id' LIMIT 1"); + if(empty($belegarr)) + { + return; + } + + $belegnr = $belegarr['belegnr']; + $adresse = $belegarr['adresse']; + $status = $belegarr['status']; + $waehrung = $belegarr['waehrung']; + $rabatteportofestschreiben = 0; + + if($art === 'auftrag' && $belegarr['lieferantkdrnummer'] == '') { + if($belegarr['lieferantenauftrag'] == 1){ + if($belegarr['lieferantenauftrag'] != 1 || empty($belegarr['lieferantkdrnummer'])){ + $this->app->DB->Update(" + UPDATE auftrag a + INNER JOIN adresse adr ON a.lieferant = adr.id + SET a.lieferantkdrnummer = if(a.lieferantennummer <> '',a.lieferantennummer,adr.lieferantennummer) + WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 1 AND a.id = '$id' + "); + } + } + else{ + if($belegarr['lieferantenauftrag'] != 0 || empty($belegarr['lieferantkdrnummer'])){ + $this->app->DB->Update(" + UPDATE auftrag a + INNER JOIN adresse adr ON a.adresse = adr.id + SET a.lieferantkdrnummer = if(a.kundennummer <> '',a.kundennummer, adr.kundennummer) + WHERE a.lieferantkdrnummer = '' AND a.lieferantenauftrag = 0 AND a.id = '$id' + "); + } + } + } + + $schreibschutz = $belegarr['schreibschutz']; + if($force!=true && $schreibschutz=='1'){ + return; + } + //waehrungen + + if($waehrung!='') { + $this->app->DB->Update("UPDATE ".$art."_position SET waehrung='$waehrung' WHERE $art='".$id."' AND waehrung=''"); + } + + if($art==='auftrag') + { + // abweichende lieferadresse name loeschen wenn es keine gibt + $abweichendelieferadresse = $belegarr['abweichendelieferadresse']; + $rabatteportofestschreiben = $belegarr['rabatteportofestschreiben']; + $liefername = $belegarr['liefername']; + if($liefername=='' && $abweichendelieferadresse=='1'){ + $this->app->DB->Update("UPDATE auftrag SET abweichendelieferadresse=0 WHERE id='$id' LIMIT 1"); + } + } + + $this->RunHook('ANABREGSNeuberechnen_1', 2, $art, $id); + + $this->CheckFreifelder($art,$id); + + $artikelarr = $this->app->DB->SelectArr( + sprintf( + 'SELECT pos.*, + art.keinrabatterlaubt as art_keinrabatterlaubt, art.porto AS art_porto, art.rabatt AS art_rabatt, + art.rabatt_prozent AS art_rabatt_prozent + FROM `%s` AS pos + LEFT JOIN artikel AS art ON pos.artikel = art.id + WHERE pos.`%s`= %d + ORDER BY pos.sort', + $art.'_position', $art, (int)$id + ) + ); + $adresse = $belegarr['adresse']; + $cartikelarr = $artikelarr?count($artikelarr):0; + + if($art!=='bestellung')//$this->Firmendaten("modul_verband")=="1") //CLAUDI + { + $grundrabatt = 0; + $rabatt1 = 0; + $rabatt2 = 0; + $rabatt3 = 0; + $rabatt4 = 0; + $rabatt5 = 0; + if($art==='angebot' || $art==='auftrag' || $art==='rechnung' || $art==='gutschrift' || $art==='proformarechnung') + { + $rabattarr = $this->app->DB->SelectRow("SELECT * FROM $art WHERE id='$id' LIMIT 1"); + if(!empty($rabattarr)){ + $grundrabatt = $rabattarr['rabatt']; + $rabatt1 = $rabattarr['rabatt1']; + $rabatt2 = $rabattarr['rabatt2']; + $rabatt3 = $rabattarr['rabatt3']; + $rabatt4 = $rabattarr['rabatt4']; + $rabatt5 = $rabattarr['rabatt5']; + } + + if($grundrabatt>0) $rabattarr[] = ((100-$grundrabatt)/100.0); + if($rabatt1>0) $rabattarr[] = ((100-$rabatt1)/100.0); + if($rabatt2>0) $rabattarr[] = ((100-$rabatt2)/100.0); + if($rabatt3>0) $rabattarr[] = ((100-$rabatt3)/100.0); + if($rabatt4>0) $rabattarr[] = ((100-$rabatt4)/100.0); + if($rabatt5>0) $rabattarr[]= ((100-$rabatt5)/100.0); + + $rabatt=1; + if(!empty($rabattarr)) + { + foreach($rabattarr as $rabattRow) { + if($rabattRow > 0 && $rabattRow < 1) { + $rabatt *= $rabattRow; + } + } + } + + $rabatt=(1-$rabatt)*100; + + if($grundrabatt >= 100 || $rabatt1 >= 100 || $rabatt2 >= 100 || $rabatt3 >= 100 || $rabatt4 >= 100 || $rabatt5 >= 100) + { + $rabatt = 100; + } + + if($rabatt > 0 && $rabattarr['realrabatt'] != $rabatt) { + $this->app->DB->Update( + sprintf( + 'UPDATE `%s` SET realrabatt=%f WHERE id=%d LIMIT 1', + $art,(float)$rabatt, (int)$id + ) + ); + } + } + + + // Rabatt Sync starten + + $cartikelarr = $artikelarr?count($artikelarr):0; + for($i=0;$i<$cartikelarr;$i++) + { + // kopiere rabatte zum ersten mal + if($artikelarr[$i]['rabattsync']!='1') + { + // pruefe ob artikel rabatt bekommen darf + $check_keinrabatterlaubt = $artikelarr[$i]['art_keinrabatterlaubt']; + $check_porto = $artikelarr[$i]['art_porto']; + $check_rabatt = $artikelarr[$i]['art_rabatt']; + + if($check_keinrabatterlaubt!="1" && $check_porto!="1" && $check_rabatt!="1") + { + + $this->app->DB->Update("UPDATE ".$art."_position SET rabattsync='1', + grundrabatt='$grundrabatt', rabatt1='$rabatt1', rabatt2='$rabatt2', rabatt3='$rabatt3', rabatt4='$rabatt4', rabatt5='$rabatt5', + keinrabatterlaubt='0' WHERE id='".$artikelarr[$i]['id']."' AND rabatt=0 AND keinrabatterlaubt!='1' LIMIT 1"); + + + if($this->app->DB->affected_rows() > 0){ + $artikelarr[$i]['rabattsync'] = 1; + $artikelarr[$i]['grundrabatt'] = $grundrabatt; + $artikelarr[$i]['rabatt1'] = $rabatt1; + $artikelarr[$i]['rabatt2'] = $rabatt2; + $artikelarr[$i]['rabatt3'] = $rabatt3; + $artikelarr[$i]['rabatt4'] = $rabatt4; + $artikelarr[$i]['rabatt5'] = $rabatt5; + } + } else { + if($check_porto=="1") + { + $this->app->DB->Update("UPDATE ".$art."_position SET rabattsync='1',keinrabatterlaubt='".($rabatteportofestschreiben?'1':'0')."',rabatt='0' WHERE id='".$artikelarr[$i]['id']."' LIMIT 1"); + $artikelarr[$i]['keinrabatterlaubt'] = $rabatteportofestschreiben?'1':'0'; + $artikelarr[$i]['rabattsync'] = 1; + $artikelarr[$i]['rabatt'] = 0; + } + elseif($check_keinrabatterlaubt=="1") + { + $this->app->DB->Update("UPDATE ".$art."_position SET rabattsync='1',keinrabatterlaubt='1',rabatt='0' WHERE id='".$artikelarr[$i]['id']."' LIMIT 1"); + $artikelarr[$i]['keinrabatterlaubt'] = 1; + $artikelarr[$i]['rabattsync'] = 1; + $artikelarr[$i]['rabatt'] = 0; + } + } + } + $keinrabatterlaubt_sub = $artikelarr[$i]['keinrabatterlaubt']; + if($keinrabatterlaubt_sub=='1') { + $rabatt=0; + }else{ + // rechne rabatt fuer position aus + $posarr = $artikelarr[$i]; + if(!empty($posarr)){ + $grundrabatt_sub = $posarr['grundrabatt']; + $rabatt1_sub = $posarr['rabatt1']; + $rabatt2_sub = $posarr['rabatt2']; + $rabatt3_sub = $posarr['rabatt3']; + $rabatt4_sub = $posarr['rabatt4']; + $rabatt5_sub = $posarr['rabatt5']; + $keinrabatterlaubt_sub = $posarr['keinrabatterlaubt']; + }else{ + $grundrabatt_sub = 0; + $rabatt1_sub = 0; + $rabatt2_sub = 0; + $rabatt3_sub = 0; + $rabatt4_sub = 0; + $rabatt5_sub = 0; + $keinrabatterlaubt_sub = 0; + } + $rabattarr = array(); + + if($grundrabatt_sub>0) $rabattarr[] = ((100-$grundrabatt_sub)/100.0); + if($rabatt1_sub>0) $rabattarr[] = ((100-$rabatt1_sub)/100.0); + if($rabatt2_sub>0) $rabattarr[] = ((100-$rabatt2_sub)/100.0); + if($rabatt3_sub>0) $rabattarr[] = ((100-$rabatt3_sub)/100.0); + if($rabatt4_sub>0) $rabattarr[] = ((100-$rabatt4_sub)/100.0); + if($rabatt5_sub>0) $rabattarr[]= ((100-$rabatt5_sub)/100.0); + + $rabatt=1; + if(!empty($rabattarr)) { + foreach($rabattarr as $rabattRow) + { + if($rabattRow > 0 && $rabattRow < 1) { + $rabatt *= $rabattRow; + } + } + } + + $rabatt=(1-$rabatt)*100; + if($grundrabatt_sub >= 100 || $rabatt1_sub >= 100 || $rabatt2_sub >= 100 || $rabatt3_sub >= 100 || $rabatt4_sub >= 100 || $rabatt5_sub >= 100) + { + $rabatt = 100; + } + } + // wenn kein rabatt fuer die Position erlaubt ist + + if($this->Firmendaten("modul_verband")=="1" && $this->ModulVorhanden('verband')) //CLAUDI + $this->app->DB->Update("UPDATE ".$art."_position SET rabatt='$rabatt' WHERE id='".$artikelarr[$i]['id']."' LIMIT 1"); + elseif($rabatt != 0) { + $this->app->DB->Update("UPDATE ".$art."_position SET rabatt='$rabatt' WHERE id='".$artikelarr[$i]['id']."' AND rabatt=0 LIMIT 1"); + } + } + } + + // rabatt positionen berechnen also die, die auf den gesamten auftrag gehen + $betrag = $this->ANABREGSNeuberechnenGesamtsummeOhnePortoUndKeinRabatt($id,$art); + $cartikelarr = $artikelarr?count($artikelarr):0; + for($i=0;$i<$cartikelarr;$i++) + { + $check_rabatt_artikel = $artikelarr[$i]['art_rabatt']; + if($check_rabatt_artikel=='1') + { + $check_rabatt_artikel_prozente = $artikelarr[$i]['art_rabatt_prozent']; + + if($check_rabatt_artikel_prozente<>0) + { + $this->app->DB->Update("UPDATE ".$art."_position SET menge='1', preis='".((($betrag/100)*$check_rabatt_artikel_prozente)*-1)."' WHERE id='".$artikelarr[$i]['id']."' LIMIT 1"); + } + } + } + + // porto berechnen + $portoRow = $this->app->DB->SelectRow( + sprintf( + 'SELECT tp.* + FROM `%s` AS tp + INNER JOIN artikel AS a ON a.id=tp.artikel + WHERE a.porto=1 AND a.geloescht!=1 AND tp.`%s`= %d + LIMIT 1', + $art.'_position', $art, (int)$id + ) + ); + $portoid = !empty($portoRow['id'])?$portoRow['id']:0; + $portoartikel = !empty($portoRow['artikel'])?$portoRow['artikel']:0; + $keinrabatterlaubt_sub = !empty($portoRow['keinrabatterlaubt'])?$portoRow['keinrabatterlaubt']:0; + + $betrag = $this->ANABREGSNeuberechnenGesamtsummeOhnePorto($id,$art); + if($portoid > 0 && $keinrabatterlaubt_sub!="1" && $this->Firmendaten("porto_berechnen")) + { + $realpreis = false; + $portoberechnen = $this->PortoBerechnen($adresse,$betrag,$portoartikel, $realpreis); + + if($portoberechnen || $realpreis) { + $this->app->DB->Update("UPDATE ".$art."_position SET menge='1',preis='".$this->PortoBerechnen($adresse,$betrag,$portoartikel)."' WHERE id='".$portoid ."' LIMIT 1"); + } + } + $this->ANABREGSNeuberechnenGesamtsumme($id,$art); + + if($art==="auftrag") + { + //tatsaechlicheslieferdatum + $orderRow = $this->app->DB->SelectRow( + sprintf( + 'SELECT tatsaechlicheslieferdatum, projekt, lieferdatum,land FROM auftrag WHERE id = %d LIMIT 1', + (int)$id + ) + ); + $tatsaechlicheslieferdatum = $orderRow['tatsaechlicheslieferdatum']; + $projekt = $orderRow['projekt']; + $differenztage = $this->Projektdaten($projekt,'differenz_auslieferung_tage'); + if($differenztage<0) { + $differenztage=2; + } + $lieferdatum = $orderRow['lieferdatum']; + $land = $orderRow['land']; + if(($tatsaechlicheslieferdatum==='0000-00-00' || $tatsaechlicheslieferdatum=='') && $lieferdatum!=='0000-00-00') + { + while($this->app->DB->Select("SELECT id FROM auftrag WHERE weekday(DATE_SUB(lieferdatum, INTERVAL $differenztage DAY)) >= 5 AND id='$id' LIMIT 1") || + $this->app->DB->Select("SELECT id FROM arbeitsfreietage WHERE datum = DATE_SUB((SELECT lieferdatum FROM auftrag WHERE id = '$id' LIMIT 1), INTERVAL $differenztage DAY) AND (projekt='$projekt' OR projekt=0) AND (land='$land' OR land='') ORDER by land='$land' LIMIT 1")) + { + $differenztage++; + } + + $this->app->DB->Update("UPDATE auftrag SET tatsaechlicheslieferdatum=DATE_SUB(lieferdatum, INTERVAL $differenztage DAY) WHERE id='$id' LIMIT 1"); + } + + $this->EventAPIAdd("EventAuftragEdit",$id,"auftrag","edit"); + } + + $this->BerechneDeckungsbeitrag($id,$art); + $this->BerechneSkonto($id, $art); + + + $teillieferung = false; + $systemfreitext = ''; + if($art === 'rechnung') { + $systemfreitext = $this->app->DB->Select(sprintf('SELECT systemfreitext FROM rechnung WHERE id = %d', $id)); + } + elseif($art === 'auftrag') { + $systemfreitext = $this->app->DB->Select(sprintf('SELECT systemfreitext FROM auftrag WHERE id = %d', $id)); + } + + if($systemfreitext == '' && ($art==='rechnung' || $art==='auftrag')) { + if($art==='auftrag') { + $tmprechnung = $this->app->DB->SelectArr("SELECT projekt, id as auftragid, zahlungsweise,transaktionsnummer,teillieferungvon FROM $art WHERE id='$id' LIMIT 1"); + $teillieferung = ($tmprechnung[0]['teillieferungvon']>0?true:false); + } + else{ + $tmprechnung = $this->app->DB->SelectArr("SELECT projekt, auftragid, zahlungsweise FROM $art WHERE id='$id' LIMIT 1"); + } + + if($tmprechnung[0]['transaktionsnummer']==''){ + $tmprechnung[0]['transaktionsnummer'] = $this->app->DB->Select("SELECT transaktionsnummer FROM auftrag WHERE id='" . $tmprechnung[0]['auftragid'] . "' LIMIT 1"); + } + + } + $this->RunHook('ANABREGSNeuberechnenEnde',2, $id, $art); + } + + /** + * @param array $taxes + * @param array $posTaxes + * + * @return array + */ + public function addErloesFromPos($taxes, $posTaxes) + { + if(empty($taxes) || empty($posTaxes)) { + return $taxes; + } + $posByErloes = []; + $hasErloes = false; + foreach($posTaxes as $posTax) { + if(!empty($posTax['erloese'])) { + $hasErloes = true; + } + $posByErloes[(string)$posTax['steuersatz']][!empty($posTax['erloese'])?(string)$posTax['erloese']:''][] + = $posTax; + } + if(!$hasErloes) { + return $taxes; + } + $taxesToAdd = []; + foreach($taxes as $key => $tax) { + $taxRate = $tax['steuersatz']; + if(empty($posByErloes[$taxRate])) { + continue; + } + if(count($posByErloes[$taxRate]) === 1) { + $erloes = array_keys($posByErloes[$taxRate]); + $taxes[$key]['erloese'] = reset($erloes); + continue; + } + $first = true; + foreach($posByErloes[$taxRate] as $erloes => $positions) { + $brutto = 0.0; + $netto = 0.0; + foreach($positions as $position) { + $brutto += $position['brutto']; + $netto += $postion['netto']; + } + if($first) { + $taxesToAdd[] = $tax; + $taxToaddKey = count($taxesToAdd)-1; + $taxesToAdd[$taxToaddKey]['brutto'] -= $brutto; + $taxesToAdd[$taxToaddKey]['netto'] -= $netto; + $tax['brutto'] = $brutto; + $tax['netto'] = $netto; + $tax['erloese'] = $erloes; + $taxes[$key]['brutto'] = $tax['brutto']; + $taxes[$key]['netto'] = $tax['netto']; + $taxes[$key]['erloese'] = $tax['erloese']; + $first = false; + continue; + } + $taxToaddKey = count($taxesToAdd)-1; + $taxesToAdd[] = $taxesToAdd[$taxToaddKey]; + $taxToaddKey = count($taxesToAdd)-1; + $taxesToAdd[$taxToaddKey]['brutto'] -= $brutto; + $taxesToAdd[$taxToaddKey]['netto'] -= $netto; + $taxesToAdd[$taxToaddKey - 1]['brutto'] = $brutto; + $taxesToAdd[$taxToaddKey - 1]['netto'] = $netto; + $taxesToAdd[$taxToaddKey - 1]['erloese'] = $erloes; + } + } + foreach($taxesToAdd as $tax) { + if($tax['netto'] != 0.0) { + $taxes[] = $tax; + } + } + + return $taxes; + } + + /** + * @param int $artikel + * @param int $ust_befreit + * @param bool|int $aufwendung + * @param float $tmpsteuersatz + * @param string $tmpsteuertext + * @param string $tmperloes + * @param string $umsatzsteuerpos + * @param null|string $ustid + * @param int $projekt + */ + public function getErloesFirmendaten($artikel, $ust_befreit,$aufwendung, &$tmpsteuersatz, &$tmpsteuertext, &$tmperloes, $umsatzsteuerpos, $ustid = null, $projekt = 0) { + $tmperloes = ''; + $artikeldata = $this->app->DB->SelectRow("SELECT * FROM artikel WHERE id = '$artikel' LIMIT 1"); + if(empty($artikeldata)) { + return; + } + $umsatzsteuer = $artikeldata['umsatzsteuer'] === 'ermaessigt'?'ermaessigt':($artikeldata['umsatzsteuer']==='befreit'?'befreit':'normal'); + if($umsatzsteuerpos) { + $umsatzsteuer = $umsatzsteuerpos; + } + switch($ust_befreit) { + case 1: + if($aufwendung) { + if(trim((String)$ustid) !== '') { + $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_euermaessigt'); + return; + } + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_euermaessigt'); + return; + } + $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_eunormal'); + return; + } + if(trim((String)$ustid) !== '') { + $tmperloes = $this->Firmendaten('steuer_erloese_inland_innergemeinschaftlich'); + return; + } + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $this->Firmendaten('steuer_erloese_inland_euermaessigt'); + return; + } + $tmperloes = $this->Firmendaten('steuer_erloese_inland_eunormal'); + return; + break; + case 2: + if($aufwendung) { + $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_import'); + return; + } + $tmperloes = $this->Firmendaten('steuer_erloese_inland_export'); + return; + break; + case 3: + if($aufwendung) { + $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_nichtsteuerbar'); + return; + } + $tmperloes = $this->Firmendaten('steuer_erloese_inland_nichtsteuerbar'); + return; + break; + default: + if($aufwendung) { + if($umsatzsteuer === 'ermaessigt') { + $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_ermaessigt'); + return; + } + if($umsatzsteuer === 'befreit'){ + $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_nichtsteuerbar'); + return; + } + $tmperloes = $this->Firmendaten('steuer_aufwendung_inland_normal'); + return; + } + if($umsatzsteuer === 'ermaessigt') { + $tmperloes = $this->Firmendaten('steuer_erloese_inland_ermaessigt'); + return; + } + if($umsatzsteuer === 'befreit') { + $tmperloes = $this->Firmendaten('steuer_erloese_inland_nichtsteuerbar'); + return; + } + $tmperloes = $this->Firmendaten('steuer_erloese_inland_normal'); + return; + + break; + } + } + + /** + * @param int $artikel + * @param int $ust_befreit + * @param bool|int $aufwendung + * @param float $tmpsteuersatz + * @param string $tmpsteuertext + * @param string $tmperloes + * @param string $umsatzsteuerpos + * @param null|string $ustid + * @param int $projekt + */ + function GetArtikelSteuer($artikel, $ust_befreit,$aufwendung, &$tmpsteuersatz, &$tmpsteuertext, &$tmperloes, $umsatzsteuerpos, $ustid = null, $projekt = 0) + { + $tmperloes = ''; + $artikeldata = $this->app->DB->SelectRow("SELECT * FROM artikel WHERE id = '$artikel' LIMIT 1"); + if(empty($artikeldata)) { + return; + } + $umsatzsteuer = $artikeldata['umsatzsteuer'] === 'ermaessigt'?'ermaessigt':($artikeldata['umsatzsteuer']==='befreit'?'befreit':'normal'); + if($umsatzsteuerpos) { + $umsatzsteuer = $umsatzsteuerpos; + } + $projectRow = null; + if($projekt) { + $projectRow = $this->app->DB->SelectRow( + sprintf( + 'SELECT * FROM projekt WHERE id = %d', + $projekt + ) + ); + } + $tmpsteuertext = ''; + $kategorie = null; + switch($ust_befreit) + { + case 1: + $tmpsteuertext = $artikeldata['steuertext_innergemeinschaftlich']; + if($aufwendung) + { + if(trim((String)$ustid) !== '') + { + $tmperloes = $artikeldata['steuer_aufwendung_inland_innergemeinschaftlich']; + }else{ + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $artikeldata['steuer_aufwendung_inland_euermaessigt']; + }else{ + $tmperloes = $artikeldata['steuer_aufwendung_inland_eunormal']; + } + } + }else{ + if(trim((String)$ustid) !== '') + { + $tmperloes = $artikeldata['steuer_erloese_inland_innergemeinschaftlich']; + }else{ + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $artikeldata['steuer_erloese_inland_euermaessigt']; + }else{ + $tmperloes = $artikeldata['steuer_erloese_inland_eunormal']; + } + } + } + break; + case 2: + $tmpsteuertext = $artikeldata['steuertext_export']; + if($aufwendung) + { + $tmperloes = $artikeldata['steuer_aufwendung_inland_import']; + }else{ + $tmperloes = $artikeldata['steuer_erloese_inland_export']; + } + break; + case 3: + if($aufwendung) + { + $tmperloes = $artikeldata['steuer_aufwendung_inland_nichtsteuerbar']; + }else{ + $tmperloes = $artikeldata['steuer_erloese_inland_nichtsteuerbar']; + } + break; + default: + if($aufwendung) + { + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $artikeldata['steuer_aufwendung_inland_ermaessigt']; + }elseif($umsatzsteuer === 'befreit'){ + $tmperloes = $artikeldata['steuer_aufwendung_inland_nichtsteuerbar']; + }else{ + $tmperloes = $artikeldata['steuer_aufwendung_inland_normal']; + } + }else{ + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $artikeldata['steuer_erloese_inland_ermaessigt']; + }elseif($umsatzsteuer === 'befreit'){ + $tmperloes = $artikeldata['steuer_erloese_inland_nichtsteuerbar']; + }else{ + $tmperloes = $artikeldata['steuer_erloese_inland_normal']; + } + } + break; + } + if(strpos($artikeldata['typ'],'_kat') !== false) + { + $kategorie = $this->app->DB->SelectRow("SELECT * FROM artikelkategorien WHERE id = '".(int)str_replace('_kat','',$artikeldata['typ'])."' LIMIT 1"); + } + if($kategorie && ($tmpsteuertext === '' || $tmpsteuertext === false || is_null($tmpsteuertext))) + { + switch($ust_befreit) + { + case 1: + $tmpsteuertext = $kategorie['steuertext_innergemeinschaftlich']; + break; + case 2: + $tmpsteuertext = $kategorie['steuertext_export']; + break; + } + } + if(!$tmperloes) + { + switch($ust_befreit) + { + case 1: + if($aufwendung) + { + if(trim((String)$ustid) !== '') + { + $tmperloes = $kategorie['steuer_aufwendung_inland_euermaessigt']; + }else{ + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $kategorie['steuer_aufwendung_inland_euermaessigt']; + + }else{ + $tmperloes = $kategorie['steuer_aufwendung_inland_eunormal']; + } + } + }else{ + if(trim((String)$ustid) !== '') + { + $tmperloes = $kategorie['steuer_erloese_inland_innergemeinschaftlich']; + }else{ + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $kategorie['steuer_erloese_inland_euermaessigt']; + }else{ + $tmperloes = $kategorie['steuer_erloese_inland_eunormal']; + } + } + } + break; + case 2: + if($aufwendung) + { + $tmperloes = $kategorie['steuer_aufwendung_inland_import']; + }else{ + $tmperloes = $kategorie['steuer_erloese_inland_export']; + } + break; + case 3: + if($aufwendung) + { + $tmperloes = $kategorie['steuer_aufwendung_inland_nichtsteuerbar']; + }else{ + $tmperloes = $kategorie['steuer_erloese_inland_nichtsteuerbar']; + } + break; + default: + if($aufwendung) + { + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $kategorie['steuer_aufwendung_inland_ermaessigt']; + }elseif($umsatzsteuer == 'befreit'){ + $tmperloes = $kategorie['steuer_aufwendung_inland_nichtsteuerbar']; + }else{ + $tmperloes = $kategorie['steuer_aufwendung_inland_normal']; + } + }else{ + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $kategorie['steuer_erloese_inland_ermaessigt']; + }elseif($umsatzsteuer === 'befreit'){ + $tmperloes = $kategorie['steuer_erloese_inland_nichtsteuerbar']; + }else{ + $tmperloes = $kategorie['steuer_erloese_inland_normal']; + } + } + break; + } + } + if(!$tmperloes && !empty($projectRow)) { + switch($ust_befreit) + { + case 1: + if($aufwendung) + { + if(trim((String)$ustid) !== '') + { + $tmperloes = $projectRow['steuer_aufwendung_inland_euermaessigt']; + }else{ + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $projectRow['steuer_aufwendung_inland_euermaessigt']; + + }else{ + $tmperloes = $projectRow['steuer_aufwendung_inland_eunormal']; + } + } + }else{ + if(trim((String)$ustid) !== '') + { + $tmperloes = $projectRow['steuer_erloese_inland_innergemeinschaftlich']; + }else{ + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $projectRow['steuer_erloese_inland_euermaessigt']; + }else{ + $tmperloes = $projectRow['steuer_erloese_inland_eunormal']; + } + } + } + break; + case 2: + if($aufwendung) + { + $tmperloes = $projectRow['steuer_aufwendung_inland_import']; + }else{ + $tmperloes = $projectRow['steuer_erloese_inland_export']; + } + break; + case 3: + if($aufwendung) + { + $tmperloes = $projectRow['steuer_aufwendung_inland_nichtsteuerbar']; + }else{ + $tmperloes = $projectRow['steuer_erloese_inland_nichtsteuerbar']; + } + break; + default: + if($aufwendung) + { + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $projectRow['steuer_aufwendung_inland_ermaessigt']; + }elseif($umsatzsteuer === 'befreit'){ + $tmperloes = $projectRow['steuer_aufwendung_inland_nichtsteuerbar']; + }else{ + $tmperloes = $projectRow['steuer_aufwendung_inland_normal']; + } + }else{ + if($umsatzsteuer === 'ermaessigt') + { + $tmperloes = $projectRow['steuer_erloese_inland_ermaessigt']; + }elseif($umsatzsteuer === 'befreit'){ + $tmperloes = $projectRow['steuer_erloese_inland_nichtsteuerbar']; + }else{ + $tmperloes = $projectRow['steuer_erloese_inland_normal']; + } + } + break; + } + } + } + + /** + * @param string $typ + * @param int $posid + * @param null|string $tmpsteuersatz + * @param null|string $tmpsteuertext + * @param null|string $erloes + */ + function GetSteuerPosition($typ, $posid,&$tmpsteuersatz = null, &$tmpsteuertext = null, &$erloes = null) + { + if($posid <= 0 || empty($typ)) { + return; + } + $postyp = $typ.'_position'; + $posRow = $this->app->DB->SelectRow( + sprintf( + "SELECT * FROM `%s` WHERE id = %d LIMIT 1", + $postyp, + (int)$posid + ) + ); + + if(empty($posRow['artikel'])) { + return; + } + $projekt = (int)$this->app->DB->Select( + sprintf( + 'SELECT projekt FROM `%s` WHERE id = %d', + $typ, $posRow[$typ] + ) + ); + $artikel = $posRow['artikel']; + + $tmpsteuersatz = $posRow['steuersatz']; + if($tmpsteuersatz === '') { + $tmpsteuersatz = null; + } + $typid = $posRow[$typ]; + if($tmpsteuersatz < 0 || $tmpsteuersatz === null) + { + if($posRow['umsatzsteuer'] === 'ermaessigt') + { + $tmpsteuersatz = $this->GetSteuersatzErmaessigt(false,$typid,$typ); + }elseif($posRow['umsatzsteuer'] === 'befreit') + { + $tmpsteuersatz = 0; + }else{ + $tmpsteuersatz = $this->GetSteuersatzNormal(false,$typid,$typ); + } + } + + $ust_befreit = $this->app->DB->Select("SELECT ust_befreit FROM $typ WHERE id = '$typid' LIMIT 1"); + $aufwendung = false; + switch($typ) + { + case 'bestellung': + case 'anfrage': + $aufwendung = true; + break; + } + + $this->GetArtikelSteuer($artikel, $ust_befreit, $aufwendung,$tmpsteuersatz, $tmpsteuertext, $erloes, $posRow['umsatzsteuer'],null, $projekt); + } + + function PortoBerechnen($adresse,$gesamtsumme,$portoartikel, &$realpreis = false) + { + + // schaue ob Kunde eine Regel hat + $checkportofrei = $this->app->DB->Select("SELECT portofrei_aktiv FROM adresse WHERE id='".$adresse."' LIMIT 1"); + if($checkportofrei=="1") + { + $checkportofreiab = $this->app->DB->Select("SELECT portofreiab FROM adresse WHERE id='".$adresse."' LIMIT 1"); + if($gesamtsumme >= $checkportofreiab) + { + $realpreis = true; + return 0; + } else { + // wenn kundenpreis vorhanden dann den holen sonst verband + $tmppreis = $this->GetVerkaufspreisKunde($portoartikel,1,$adresse); + if($tmppreis > 0) + { + $realpreis = true; + return $tmppreis; + } + else + { + $returnwaehrung = null; + $ret = $this->GetVerkaufspreis($portoartikel,1,$adresse,'EUR',$returnwaehrung); + if($ret || $returnwaehrung)$realpreis = true; + return $ret; + } + } + } else { + $gruppenarray = $this->GetGruppen($adresse); + + for($gi=0;$giapp->DB->Select("SELECT id FROM gruppen WHERE ($sql_erweiterung) AND portofrei_aktiv='1' ORDER BY portofreiab LIMIT 1"); + if($checkgruppeportofrei>0) + { + $checkgruppeportofreiab = $this->app->DB->Select("SELECT portofreiab FROM gruppen WHERE id='".$checkgruppeportofrei."' LIMIT 1"); + if($gesamtsumme >= $checkgruppeportofreiab) + { + $realpreis = true; + return 0; + } else { + // hole kunden preis + // wenn nicht vorhanden dann Standardpreis + $tmppreis = $this->GetVerkaufspreisKunde($portoartikel,1,$adresse); + if($tmppreis > 0) + { + $realpreis = true; + return $tmppreis; + } + else + { + $returnwaehrung = null; + $ret = $this->GetVerkaufspreis($portoartikel,1,$adresse,'EUR',$returnwaehrung); + if($ret || $returnwaehrung)$realpreis = true; + return $ret; + } + + //return $this->GetVerkaufspreis($portoartikel,1,$adresse); + } + } + // oder gruppe hat einen versandpreis? + // billigsten versandpreis bei dem betrag + } + + // sollte nicht passieren + $returnwaehrung = null; + $ret = $this->GetVerkaufspreis($portoartikel,1,$adresse,'EUR',$returnwaehrung); + if($ret || $returnwaehrung)$realpreis = true; + return $ret; + } + + function ANABREGSNeuberechnenGesamtsummeOhnePortoUndKeinRabatt($id,$art) + { + //inkl. kein rabatt erlaubt + if($art === 'bestellung') { + return $this->app->DB->Select( + sprintf( + "SELECT IFNULL(SUM(tp.menge*tp.preis),0) + FROM bestellung_position tp + LEFT JOIN artikel a ON a.id=tp.artikel + WHERE a.porto!='1' AND (a.rabatt!='1' OR a.rabatt IS NULL) AND + (a.keinrabatterlaubt!='1' OR a.keinrabatterlaubt IS NULL) AND tp.bestellung=%d", + (int)$id + ) + ); + } + return $this->app->DB->Select("SELECT SUM(tp.menge*(tp.preis-(tp.preis/100*tp.rabatt))) FROM ".$art."_position tp + LEFT JOIN artikel a ON a.id=tp.artikel WHERE a.porto!='1' AND (a.rabatt!='1' OR a.rabatt IS NULL) AND (a.keinrabatterlaubt!='1' OR a.keinrabatterlaubt IS NULL) AND tp.".$art."='$id'"); + } + + + function BEGesamtsummeOhnePorto($id,$art) + { + //inkl. kein rabatt erlaubt + $summeNetto = $this->app->DB->Select("SELECT SUM(tp.menge*tp.preis) FROM ".$art."_position tp + LEFT JOIN artikel a ON a.id=tp.artikel WHERE a.porto!='1' AND tp.".$art."='$id'"); + return $summeNetto; + } + + function ANABREGSNeuberechnenGesamtsummeOhnePorto($id,$art) + { + //inkl. kein rabatt erlaubt + if($art === 'bestellung') { + return $this->app->DB->Select( + sprintf( + 'SELECT IFNULL(SUM(tp.menge*tp.preis),0) + FROM `%s` AS tp + LEFT JOIN artikel a ON a.id=tp.artikel + WHERE a.porto!=1 AND (a.rabatt!=1 OR a.rabatt IS NULL) AND tp.`%s` = %d + ', + $art.'_position',$art,$id + ) + ); + } + $summeNetto = $this->app->DB->Select("SELECT SUM(tp.menge*(tp.preis-(tp.preis/100*tp.rabatt))) FROM ".$art."_position tp + LEFT JOIN artikel a ON a.id=tp.artikel WHERE a.porto!='1' AND (a.rabatt!='1' OR a.rabatt IS NULL) AND tp.".$art."='$id'"); + return $summeNetto; + } + + + function ANABREGSNeuberechnenGesamtsumme($id,$art,$return_netto=false) + { + + if(empty($id) || empty($art)) { + if($return_netto) { + return 0; + } + return; + } + $docArr = $this->app->DB->SelectRow(sprintf('SELECT * FROM `%s` WHERE id = %d LIMIT 1', $art, $id)); + if(empty($docArr)) { + if($return_netto) { + return 0; + } + return; + } + $projekt = $docArr['projekt']; + $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,"preisberechnung"); + if(!$positionenkaufmaenischrunden) + { + $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); + + $sqlvor = ''; + $sqlnach = ''; + $sqlvor2 = ''; + $sqlnach2 = ''; + if($positionenkaufmaenischrunden) + { + $sqlvor = 'round('; + $sqlnach = ',2)'; + } + if($positionenkaufmaenischrunden == 3) + { + $sqlvor2 = 'round('; + $sqlnach2 = ',2)'; + } + if($art==='angebot') + { + $summeV = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position ap WHERE umsatzsteuer!='ermaessigt' AND umsatzsteuer!='befreit' AND ".$art."='$id' AND optional!=1 AND (isnull(steuersatz) OR steuersatz < 0) AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))"); + if($this->app->DB->error()) + $summeV = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position ap WHERE umsatzsteuer!='ermaessigt' AND umsatzsteuer!='befreit' AND ".$art."='$id' AND optional!=1 AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))"); + $summeR = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position ap WHERE umsatzsteuer='ermaessigt' AND ".$art."='$id' AND optional!=1 AND (isnull(steuersatz) OR steuersatz < 0) AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))"); + if($this->app->DB->error()) + $summeR = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position ap WHERE umsatzsteuer='ermaessigt' AND ".$art."='$id' AND optional!=1 AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))"); + if($positionenkaufmaenischrunden != 1 && $positionenkaufmaenischrunden != 3) + { + $summeS = (float)$this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach." * if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100) FROM ".$art."_position ap WHERE ".$art."='$id' AND optional!=1 AND ((steuersatz >= 0) and not isnull(steuersatz) OR umsatzsteuer='befreit') AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))"); + }else{ + $summeS = (float)$this->app->DB->Select("SELECT ifnull(SUM(".$sqlvor." s.pos * s.steuer".$sqlnach."),0) + + FROM ( + SELECT SUM(menge*(preis-(preis/100*rabatt))) as pos, if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100 as steuer + FROM ".$art."_position + WHERE $art = '$id' AND steuersatz >= 0 AND optional!=1 + GROUP BY if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100 + + ) s"); + } + $summeNetto = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position ap WHERE ".$art."='$id' AND optional!=1 AND (explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))"); + } elseif($art === 'bestellung') { + $summeV = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis)".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer!='ermaessigt' AND umsatzsteuer!='befreit' AND ".$art."='$id' AND (isnull(steuersatz) OR steuersatz < 0)"); + if($this->app->DB->error())$summeV = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis)".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer!='ermaessigt' AND ".$art."='$id'"); + $summeR = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis)".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer='ermaessigt' AND ".$art."='$id' AND (isnull(steuersatz) OR steuersatz < 0)"); + if($this->app->DB->error())$summeR = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis)".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer='ermaessigt' AND ".$art."='$id'"); + if($positionenkaufmaenischrunden != 1 && $positionenkaufmaenischrunden != 3) + { + $summeS = (float)$this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis)".$sqlnach2.$sqlnach." * if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100) FROM ".$art."_position WHERE ".$art."='$id' AND ((steuersatz >= 0) and not isnull(steuersatz) OR umsatzsteuer='befreit')"); + }else{ + $summeS = (float)$this->app->DB->Select("SELECT ifnull(SUM(".$sqlvor." s.pos * s.steuer".$sqlnach."),0) + + FROM ( + SELECT SUM(menge*(preis)) as pos, if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100 as steuer + FROM ".$art."_position + WHERE $art = '$id' AND steuersatz >= 0 + GROUP BY if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100 + + ) s"); + } + $summeNetto = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis)".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE ".$art."='$id'"); + } else { + $summeV = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer!='ermaessigt' AND umsatzsteuer!='befreit' AND ".$art."='$id' AND (isnull(steuersatz) OR steuersatz < 0)"); + if($this->app->DB->error())$summeV = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer!='ermaessigt' AND ".$art."='$id'"); + $summeR = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer='ermaessigt' AND ".$art."='$id' AND (isnull(steuersatz) OR steuersatz < 0)"); + if($this->app->DB->error())$summeR = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE umsatzsteuer='ermaessigt' AND ".$art."='$id'"); + if($positionenkaufmaenischrunden != 1 && $positionenkaufmaenischrunden != 3) + { + $summeS = (float)$this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach." * if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100) FROM ".$art."_position WHERE ".$art."='$id' AND ((steuersatz >= 0) and not isnull(steuersatz) OR umsatzsteuer='befreit')"); + }else{ + $summeS = (float)$this->app->DB->Select("SELECT ifnull(SUM(".$sqlvor." s.pos * s.steuer".$sqlnach."),0) + + FROM ( + SELECT SUM(menge*(preis-(preis/100*rabatt))) as pos, if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100 as steuer + FROM ".$art."_position + WHERE $art = '$id' AND steuersatz >= 0 + GROUP BY if(umsatzsteuer != 'befreit',steuersatz,if(steuersatz < 0 OR isnull(steuersatz),0,steuersatz))/100 + + ) s"); + } + $summeNetto = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*".$sqlvor2."(preis-(preis/100*rabatt))".$sqlnach2.$sqlnach.") FROM ".$art."_position WHERE ".$art."='$id'"); + } + + + $ust_befreit = $docArr['ust_befreit'];// $this->app->DB->Select("SELECT ust_befreit FROM $art WHERE id='$id' LIMIT 1"); + $ustid = $docArr['ustid'];// $this->app->DB->Select("SELECT ustid FROM $art WHERE id='$id' LIMIT 1"); + + //UST ID CHECK + if($ust_befreit==0 || ($ust_befreit==1 && $ustid=="")) + { + if($positionenkaufmaenischrunden == 1 || $positionenkaufmaenischrunden == 3) + { + $betrag = $summeNetto + round($summeV*$this->GetSteuersatzNormal(true,$id,$art)-$summeV,2)+ round($summeR*$this->GetSteuersatzErmaessigt(true,$id,$art)-$summeR,2)+$summeS; + }else{ + $betrag = $summeNetto + ($summeV*$this->GetSteuersatzNormal(true,$id,$art)-$summeV)+ ($summeR*$this->GetSteuersatzErmaessigt(true,$id,$art)-$summeR)+$summeS; + } + } else { + $betrag = $summeNetto; + } + }else{ + $betrag = $this->app->erp->calcBelegBrutto($art, $id); + } + + if($return_netto) return $betrag; + $extsoll = 0; + if($art !== 'bestellung' && $art !== 'proformarechnung'){ + $extsoll = (float)$docArr['extsoll'];//$this->app->DB->Select("SELECT extsoll FROM $art WHERE id = '$id' LIMIT 1"); + } + if($extsoll == 0) + { + if($art==='rechnung' || $art==='gutschrift' || $art==='proformarechnung'){ + if($betrag != $docArr['soll']){ + $this->app->DB->Update("UPDATE $art SET soll='$betrag' WHERE id='$id' LIMIT 1"); + } + } + else{ + if($betrag != $docArr['gesamtsumme']){ + $this->app->DB->Update("UPDATE $art SET gesamtsumme='$betrag' WHERE id='$id' LIMIT 1"); + } + } + } + + } + + + function RechnungZwischensummeSteuersaetzeBrutto2($id,$art="ermaessigt") + { + $projekt = $this->app->DB->Select("SELECT projekt FROM rechnung WHERE id = '$id' LIMIT 1"); + $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,"preisberechnung"); + $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); + $sqlvor = ''; + $sqlnach = ''; + + if($art!="ermaessigt") + $summe = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*(preis-(preis/100*rabatt))".$sqlnach.") FROM rechnung_position WHERE (umsatzsteuer='normal' OR umsatzsteuer='standard' OR umsatzsteuer='') AND rechnung='$id' AND (isnull(steuersatz) OR steuersatz < 0) AND (isnull(erloese) OR erloese = '') "); + else + $summe = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*(preis-(preis/100*rabatt))".$sqlnach.") FROM rechnung_position WHERE umsatzsteuer='$art' AND rechnung='$id' AND (isnull(steuersatz) OR steuersatz < 0) AND isnull(erloese)"); + if($art=="ermaessigt") + $ermaessigt_summe = $summe*$this->GetSteuersatzErmaessigt(true,$id,"rechnung"); + else + $ermaessigt_summe = $summe*$this->GetSteuersatzNormal(true,$id,"rechnung"); + return $positionenkaufmaenischrunden == 1?round($ermaessigt_summe,2):$ermaessigt_summe; + } + + function RechungZwischensummeSpezialSteuer($id, $gruppierenpositionen = false, $gruppierenKostenstelle = false) + { + /** @var Buchhaltungexport $buchhaltungexport */ + $buchhaltungexport = $this->app->loadModule('buchhaltungexport', false); + if($buchhaltungexport !== null && method_exists($buchhaltungexport, 'RechungZwischensummeSpezialSteuer')) { + return $buchhaltungexport->RechungZwischensummeSpezialSteuer($id, $gruppierenpositionen, $gruppierenKostenstelle); + } + + if($id > 0) { + $rechnungarr = $this->app->DB->SelectRow( + sprintf( + 'SELECT `id`, `projekt`, `ust_befreit`, `ustid`, `kostenstelle`, `datum`, + `steuersatz_ermaessigt`, `steuersatz_normal` + FROM `rechnung` WHERE `id` = %d LIMIT 1', + $id + ) + ); + } + $projekt = null; + $ust_befreit = null; + $ustid = null; + $kostenstelle = ''; + if(!empty($rechnungarr)){ + $projekt = $rechnungarr['projekt']; + $ust_befreit = $rechnungarr['ust_befreit']; + $ustid = $rechnungarr['ustid']; + $kostenstelle = $this->app->DB->real_escape_string($rechnungarr['kostenstelle']); + } + + $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,'preisberechnung'); + $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); + $sqlvor = ''; + $sqlnach = ''; + $sqlvor2 = ''; + $sqlnach2 = ''; + if($positionenkaufmaenischrunden == 1){ + $sqlvor = 'round('; + $sqlnach = ',2)'; + } + if($positionenkaufmaenischrunden == 3){ + $sqlvor2 = 'round('; + $sqlnach2 = ',2)'; + } + + if($gruppierenpositionen){ + $arr = $this->app->DB->SelectArr( + "SELECT rp.`nummer`, rp.`bezeichnung`, rp.`artikel`, rp.`steuersatz`,rp.`erloese`, + ".$sqlvor."rp.menge*".$sqlvor2."(preis-(rp.preis/100*rp.rabatt))".$sqlnach2.$sqlnach." as netto, + rp.menge*(rp.preis-(rp.preis/100*rp.rabatt)) as nettoungerundet, + if(rp.umsatzsteuer = 'ermaessigt','ermaessigt',if(rp.umsatzsteuer = 'befreit','befreit','normal')) as usteuer , + sum(rp.einkaufspreis * rp.menge) as summeeinkaufspreis, + IF( + IFNULL(rp.kostenstelle,'') <> '', + rp.kostenstelle, + IF('$kostenstelle' <> '', '$kostenstelle', art.kostenstelle) + ) AS kostenstelle + FROM `rechnung_position` AS rp + LEFT JOIN `artikel` AS art ON rp.artikel = art.id + WHERE rechnung = '$id' group by rp.`steuersatz`,rp.`erloese`, rp.`umsatzsteuer`,rp.`artikel`, rp.`id` "); + }else{ + $arr = $this->app->DB->SelectArr( + "SELECT rp.`artikel`, rp.`steuersatz`,rp.`erloese`, + SUM(" . $sqlvor . "rp.menge*" . $sqlvor2 . "(rp.preis-(rp.preis/100*rp.rabatt))" . $sqlnach2 . $sqlnach . ") as netto, + SUM(rp.menge*(rp.preis-(rp.preis/100*rp.rabatt))) as nettoungerundet, + if(rp.umsatzsteuer = 'ermaessigt','ermaessigt',if(rp.umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + sum(rp.einkaufspreis * rp.menge) as summeeinkaufspreis, + IF( + IFNULL(rp.kostenstelle,'') <> '', + rp.kostenstelle, + IF('$kostenstelle' <> '', '$kostenstelle', art.kostenstelle) + ) AS kostenstelle + FROM `rechnung_position` AS rp + LEFT JOIN artikel AS art ON rp.artikel = art.id + WHERE rp.rechnung = '$id' + group by rp.`steuersatz`,rp.`erloese`, rp.`umsatzsteuer`,rp.`artikel` " + ); + } + + if($arr) { + $steuersatzermaessigt = $this->GetSteuersatzErmaessigt(true,$id,'rechnung'); + $steuersatznormal = $this->GetSteuersatzNormal(true,$id,'rechnung'); + foreach($arr as $k => $v) { + $_ust_befreit = $ust_befreit; + if($v['steuersatz'] !== null && $v['steuersatz'] == 0 && $ust_befreit == 0) { + $ust_befreit = 3; + } + $erloese = $this->Gegenkonto($ust_befreit, $ustid, 'rechnung', $id); + $this->GetArtikelSteuer( + $v['artikel'], $ust_befreit,0, $dummysteuersatz, $tmpsteuertext, $tmperloes,$v['usteuer'], $ustid, $projekt + ); + if(!$this->RechnungMitUmsatzeuer($id)){ + $v['steuersatz'] = 0; + } + if($v['steuersatz'] === null || $v['steuersatz'] < 0) + { + if($v['usteuer'] === 'ermaessigt') + { + $arr[$k]['steuersatz'] = $steuersatzermaessigt; + }elseif($v['usteuer'] === 'befreit'){ + $arr[$k]['steuersatz'] = 1; + }else{ + $arr[$k]['steuersatz'] = $steuersatznormal; + } + }else { + $arr[$k]['steuersatz'] = 1+$v['steuersatz']/100; + } + if($v['erloese'] === null || $v['erloese'] === '') + { + $arr[$k]['erloese'] = $erloese; + if($tmperloes) + { + $arr[$k]['erloese'] = $tmperloes; + }else{ + if($v['usteuer'] === 'befreit' && $ust_befreit == 0) + { + $arr[$k]['erloese'] = $this->Firmendaten("steuer_erloese_inland_nichtsteuerbar"); + } + elseif($v['usteuer'] === 'ermaessigt' && $ust_befreit == 0) + { + $arr[$k]['erloese'] = $this->Firmendaten("steuer_erloese_inland_ermaessigt"); + }elseif($v['usteuer'] === 'ermaessigt' && $ust_befreit == 1 && (String)$ustid === '') + { + $arr[$k]['erloese'] = $this->Firmendaten("steuer_erloese_inland_euermaessigt"); + }elseif($ust_befreit == 1 && (String)$ustid !== ''){ + + $arr[$k]['erloese'] = $this->Firmendaten("steuer_erloese_inland_innergemeinschaftlich"); + }elseif($v['usteuer'] !== 'ermaessigt' && $v['usteuer'] !== 'befreit' && $ust_befreit == 1 && (String)$ustid === '') + { + $arr[$k]['erloese'] = $this->Firmendaten("steuer_erloese_inland_eunormal"); + } + } + } + $arr[$k]['summe'] = $v['nettoungerundet'] * $arr[$k]['steuersatz']; + if($gruppierenpositionen) { + $arr[$k]['summe'] = round($arr[$k]['summe'], 2); + } + $ust_befreit = $_ust_befreit; + } + } + if($gruppierenpositionen) { + return $arr; + } + + return $this->SteuerZusammenfassen($arr, $gruppierenKostenstelle); + } + + function steuerAusBelegPDF($belegtyp, $id){ + $arr = $this->steuerAusBelegArray($belegtyp, $id); + $summe = 0; + $gesamtsumme = 0; + $summen = null; + if($arr) + { + foreach($arr as $k => $v) + { + $summe += $v['netto']; + $gesamtsumme += $v['brutto']; + if(!isset($summen[$v['steuersatz']]))$summen[$v['steuersatz']] = 0; + $summen[$v['steuersatz']] += $v['brutto'] - $v['netto']; + } + } + return array($summe, $gesamtsumme, $summen); + } + + function calcBelegBrutto($belegtyp, $id) + { + $arr = $this->steuerAusBelegArray($belegtyp, $id); + $summe = 0; + $gesamtsumme = 0; + $summen = null; + if($arr) + { + foreach($arr as $k => $v) + { + $gesamtsumme += $v['brutto']; + } + } + return $gesamtsumme; + } + + /** + * @param string $belegtyp + * @param int $id + * @param bool $gruppierenpositionen + * @param bool $ohneporto + * @param bool $mitErloes nur mit gruppierenpositionen + * + * @return array|null + */ + public function steuerAusBelegArray($belegtyp, $id, $gruppierenpositionen = false, $ohneporto = false, $mitErloes = false) + { + $projekt = $this->app->DB->Select( + sprintf( + 'SELECT `projekt` FROM `%s` WHERE id = %d LIMIT 1', + $belegtyp, $id + ) + ); + $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,'preisberechnung'); + $steuerfrei = false; + $funktionsname = ucfirst($belegtyp).'MitUmsatzeuer'; + if(method_exists($this, $funktionsname)) { + $steuerfrei = !$this->$funktionsname($id); + } + $steuersatzermaessigt = $this->GetSteuersatzErmaessigt(false,$id,$belegtyp); + $steuersatznormal = $this->GetSteuersatzNormal(false,$id,$belegtyp); + $join = ''; + if($ohneporto) { + $join = ' INNER JOIN artikel art ON ap.artikel = art AND art.porto <> 1 '; + } + if($positionenkaufmaenischrunden == 2) { + if($gruppierenpositionen) { + if($steuerfrei){ + return $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + 0 as steuersatz , + round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2) as netto, ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, + if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2) as brutto + " . ($mitErloes ? ' ,ap.erloes' : '') . " + FROM `" . $belegtyp . "_position` ap + $join + WHERE ap.$belegtyp = '$id' " + . ($belegtyp === 'angebot' + ? " AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + : '') + ); + } + return $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2) as steuersatz , + round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2) as netto, ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, + if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))*(1+ round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2)/ 100),2) as brutto + " . ($mitErloes ? ' ,ap.erloes' : '') . " + FROM `".$belegtyp."_position` ap + $join + WHERE ap.$belegtyp = '$id' " + .($belegtyp==='angebot' + ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + :'' + ) + ); + } + if($steuerfrei) { + return $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + 0 as steuersatz , + round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) as netto, + sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, + if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + round( sum(round(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)))),2) as brutto + + FROM `" . $belegtyp . "_position` ap $join + WHERE ap.$belegtyp = '$id' " + . ($belegtyp === 'angebot' + ? " AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + : '') . " + group by `steuersatz`, `usteuer` + HAVING round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) <> 0" + ); + } + return $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2) as steuersatz , + round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) as netto, + sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, + if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + round( sum(round(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))*(1+ round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2)/ 100),2)),2) as brutto + + FROM `".$belegtyp."_position` ap $join + WHERE ap.$belegtyp = '$id' " + .($belegtyp==='angebot' + ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + :'' + )." + group by round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2), `usteuer` HAVING round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) <> 0" + ); + } + if($positionenkaufmaenischrunden == 1 || $positionenkaufmaenischrunden == 3) { + $mengevor = ''; + $mengenach = ''; + if($positionenkaufmaenischrunden == 3){ + $mengevor = 'ROUND('; + $mengenach = ',2)'; + } + if($gruppierenpositionen) { + if($steuerfrei){ + return $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + 0 as steuersatz , + round( ap.menge*" . $mengevor . "(ap.preis-(ap.preis/100*ap.rabatt))" . $mengenach . ",2) as netto, + ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, + if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + round( ap.menge*" . $mengevor . "(ap.preis-(ap.preis/100*ap.rabatt))" . $mengenach . ",2) as brutto + " . ($mitErloes ? ' ,ap.erloes' : '') . " + FROM `" . $belegtyp . "_position` ap + $join + WHERE ap.$belegtyp = '$id' " + . ($belegtyp === 'angebot' + ? " AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + : '') + ); + } + return $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2) as steuersatz , + round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2) as netto, + ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, + if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))* + (1+ round( + if(ifnull(ap.`steuersatz`,-1) < 0, + if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt, + if(umsatzsteuer = 'befreit',0,$steuersatznormal) + ) ,ap.`steuersatz` + )".$mengenach.",2)/ 100),2) as brutto + " . ($mitErloes ? ' ,ap.erloes' : '') . " + FROM `".$belegtyp."_position` ap + $join + WHERE ap.$belegtyp = '$id' " + .($belegtyp==='angebot' + ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + :'') + ); + } + + if($steuerfrei){ + $sql = "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + 0 as steuersatz , + round( + sum( + round( + ap.menge* + " . $mengevor . " (ap.preis-(ap.preis/100*ap.rabatt)) " . $mengenach . " + ,2 + ) + ) + ,2 + ) as netto, + sum( + ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) + ) as nettoungerundet, + if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + + round( + sum( + round( + ap.menge*" . $mengevor . " (ap.preis-(ap.preis/100*ap.rabatt)) " . $mengenach . " + ,2 + ) + ) + ,2 + ) + as brutto + + FROM `".$belegtyp."_position` ap + $join + WHERE ap.$belegtyp = '$id' " + .($belegtyp==='angebot' + ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + :'')." + group by `steuersatz`, + `usteuer` + HAVING round(sum(round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2)),2) <> 0"; + return $this->app->DB->SelectArr($sql); + } + if($positionenkaufmaenischrunden == 3) { + return $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + round( + if( + ifnull(ap.`steuersatz`,-1) < 0, + if( + umsatzsteuer = 'ermaessigt', + $steuersatzermaessigt, + if( + umsatzsteuer = 'befreit', + 0, + $steuersatznormal + ) + ) , + ap.`steuersatz` + ),2 + ) as steuersatz , + round(sum(round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2)),2) as netto, + sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, + if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + + round(sum(round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2)),2)+ + round( + sum(round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2)) * + round( + if( + ifnull(ap.`steuersatz`,-1) < 0, + if( + umsatzsteuer = 'ermaessigt', + $steuersatzermaessigt, + if( + umsatzsteuer = 'befreit', + 0, + $steuersatznormal + ) + ) , + ap.`steuersatz` + ),2 + )/100 + ,2 + ) as brutto + FROM `".$belegtyp."_position` ap + $join + WHERE ap.$belegtyp = '$id' " + .($belegtyp==='angebot' + ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + :'')." + group by round( + if( + ifnull(ap.`steuersatz`,-1) < 0, + if( + umsatzsteuer = 'ermaessigt', + $steuersatzermaessigt, + if( + umsatzsteuer = 'befreit', + 0, + $steuersatznormal + ) + ) , + ap.`steuersatz` + ),2 + ), + `usteuer` HAVING round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) <> 0" + ); + } + return $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2) as steuersatz , + round(sum(round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2)),2) as netto, + sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, + if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + + round(sum(round( ap.menge*".$mengevor."(ap.preis-(ap.preis/100*ap.rabatt))".$mengenach.",2)),2) + round( round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) * round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2)/100 ,2) + as brutto + + FROM `".$belegtyp."_position` ap + $join + WHERE ap.$belegtyp = '$id' " + .($belegtyp==='angebot' + ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + :'')." + group by round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2), + `usteuer` + HAVING round(sum(round( ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)),2)),2) <> 0" + ); + } + + if($gruppierenpositionen) { + if($steuerfrei){ + return $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2) as steuersatz , + ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as netto, ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, + 0 as usteuer, + ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as brutto + " . ($mitErloes ? ' ,ap.erloes' : '') . " + FROM `" . $belegtyp . "_position` ap + $join + WHERE ap.$belegtyp = '$id' " + . ($belegtyp === 'angebot' + ? " AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + : '') + ); + } + return $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2) as steuersatz , + ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as netto, ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, + if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))*(1+ round(if(ifnull(ap.`steuersatz`,-1) < 0, if(umsatzsteuer = 'ermaessigt',$steuersatzermaessigt,if(umsatzsteuer = 'befreit',0,$steuersatznormal)) ,ap.`steuersatz`),2)/ 100) as brutto + " . ($mitErloes ? ' ,ap.erloes' : '') . " + FROM `".$belegtyp."_position` ap + $join + WHERE ap.$belegtyp = '$id' " + .($belegtyp==='angebot' + ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + :'') + ); + } + + if($steuerfrei){ + return $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + 0 as steuersatz , + sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as netto, + sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, + if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as brutto + FROM `" . $belegtyp . "_position` ap + $join + WHERE ap.$belegtyp = '$id' " . + ($belegtyp === 'angebot' + ? " AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + : '') . " + group by `steuersatz`, + `usteuer` HAVING sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) <> 0" + ); + } + return $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + round( + if( + ifnull(ap.`steuersatz`,-1) < 0, + if( + ap.umsatzsteuer = 'ermaessigt', + $steuersatzermaessigt, + if(ap.umsatzsteuer = 'befreit', + 0, + $steuersatznormal + ) + ) , + ap.`steuersatz` + ),2) as steuersatz , + sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as netto, + sum(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, + if(ap.umsatzsteuer = 'ermaessigt','ermaessigt',if(ap.umsatzsteuer = 'befreit','befreit','normal')) as usteuer, + sum( + ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))* + (1+ round( + if( + ifnull(ap.`steuersatz`,-1) < 0, + if( + ap.umsatzsteuer = 'ermaessigt', + $steuersatzermaessigt, + if( + ap.umsatzsteuer = 'befreit', + 0, + $steuersatznormal + ) + ) , + ap.`steuersatz` + ),2)/ 100 + ) + ) as brutto + + FROM `".$belegtyp."_position` ap + $join + WHERE ap.$belegtyp = '$id' " + .($belegtyp==='angebot' + ?" AND ap.optional!=1 AND (ap.explodiert_parent = 0 OR 0 = ifnull((SELECT id FROM angebot_position WHERE id = ap.explodiert_parent AND berechnen_aus_teile = 1 LIMIT 1),0))" + :'')." + group by round( + if( + ifnull(ap.`steuersatz`,-1) < 0, + if( + ap.umsatzsteuer = 'ermaessigt', + $steuersatzermaessigt, + if(ap.umsatzsteuer = 'befreit', + 0, + $steuersatznormal + ) + ) , + ap.`steuersatz` + ),2), + `usteuer` HAVING + sum(ap.menge* + (ap.preis-(ap.preis/100*ap.rabatt)) + ) <> 0" + ); + } + + /** + * @param array|null $ret + * @param string $belegtyp + * @param int $id + * + * @return array|null + */ + public function addErloesSteuerBeleg($ret, $belegtyp, $id) { + if(empty($ret) || empty($belegtyp) || empty($id)) { + return $ret; + } + $doc = $this->app->DB->SelectRow( + sprintf( + 'SELECT `ustid`, `ust_befreit`, `projekt` FROM `%s` WHERE `id` = %d', + $belegtyp,$id + ) + ); + $aufwendung = null; + $steuertext = null; + foreach($ret as $key => $row) { + if(!empty($row['erloese']) || empty($row['artikel'])) { + continue; + } + $steuersatz = $row['steuersatz']; + $steuertext = null; + $umsatzsteuerpos = $row['umsatzsteuer']; + $this->GetArtikelSteuer( + $row['artikel'], + $doc['ust_befreit'], + $aufwendung, + $steuersatz, + $steuertext, + $row['erloese'], + $umsatzsteuerpos, + $doc['ustid'], + $doc['projekt'] + ); + if(!empty($row['erloese'])) { + $ret[$key]['erloese'] = $row['erloese']; + continue; + } + $this->getErloesFirmendaten( + $row['artikel'], + $doc['ust_befreit'], + $aufwendung, + $steuersatz, + $steuertext, + $row['erloese'], + $umsatzsteuerpos, + $doc['ustid'], + $doc['projekt'] + ); + if(!empty($row['erloese'])) { + $ret[$key]['erloese'] = $row['erloese']; + continue; + } + } + + return $ret; + } + + /** + * @param string $belegtyp + * @param int $id + * @param bool $gruppierenpositionen + * @param bool $ohneporto + * @param bool $mitErloes nur mit gruppierenpositionen + * + * @return array|null + */ + public function SteuerAusBeleg($belegtyp, $id, $gruppierenpositionen = false, $ohneporto = false, $mitErloes = false) + { + $projekt = $this->app->DB->Select( + sprintf( + 'SELECT `projekt` FROM `%s` WHERE `id` = %d LIMIT 1', + $belegtyp, $id + ) + ); + $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,'preisberechnung'); + if($positionenkaufmaenischrunden) { + $ret = $this->steuerAusBelegArray($belegtyp, $id, $gruppierenpositionen, $ohneporto, $mitErloes); + if($gruppierenpositionen && $mitErloes) { + return $this->addErloesSteuerBeleg($ret, $belegtyp, $id); + } + return $ret; + } + $steuerfrei = false; + $funktionsname = ucfirst($belegtyp).'MitUmsatzeuer'; + if(method_exists($this, $funktionsname)) { + $steuerfrei = !$this->$funktionsname($id); + } + $steuersatzermaessigt = $this->GetSteuersatzErmaessigt(false,$id,$belegtyp); + $steuersatznormal = $this->GetSteuersatzNormal(false,$id,$belegtyp); + $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); + + $sqlvor = ''; + $sqlnach = ''; + if($positionenkaufmaenischrunden == 1) { + $sqlvor = 'round('; + $sqlnach = ',2)'; + } + $sqlvor2 = ''; + $sqlnach2 = ''; + if($positionenkaufmaenischrunden == 3) { + $sqlvor2 = 'round('; + $sqlnach2 = ',2)'; + } + + $join = ''; + if($ohneporto) { + $join = ' INNER JOIN artikel art ON ap.artikel = art AND art.porto <> 1 '; + } + if($gruppierenpositionen) { + $arr = $this->app->DB->SelectArr( + "SELECT ap.`id`,`nummer`, ap.`bezeichnung`, ap.`artikel`, + if(ap.`steuersatz` < 0, null,ap.`steuersatz`) as ssatz , + ".$sqlvor." ap.menge*".$sqlvor2."(ap.preis-(ap.preis/100*ap.rabatt))".$sqlnach2.$sqlnach." as netto, + ap.menge*(ap.preis-(ap.preis/100*ap.rabatt)) as nettoungerundet, + if(umsatzsteuer = 'ermaessigt','ermaessigt',if(umsatzsteuer = 'befreit','befreit','normal')) as usteuer + ".($mitErloes?',ap.erloese ':'')." + FROM `".$belegtyp."_position` ap + $join + WHERE ap.$belegtyp = '$id' + GROUP BY `ssatz`,ap.`erloese`, `usteuer`,ap.`artikel`,ap.`id` " + ); + } + else{ + $arr = $this->app->DB->SelectArr( + "SELECT if(ap.`steuersatz` < 0, null,ap.`steuersatz`) as ssatz , + SUM(".$sqlvor."ap.menge*".$sqlvor2."(ap.preis-(ap.preis/100*ap.rabatt))".$sqlnach2.$sqlnach.") as netto, + SUM(ap.menge*(ap.preis-(ap.preis/100*ap.rabatt))) as nettoungerundet, + if(ap.umsatzsteuer = 'ermaessigt','ermaessigt',if(ap.umsatzsteuer = 'befreit','befreit','normal')) as usteuer + + FROM `".$belegtyp."_position` ap + $join + WHERE ap.$belegtyp = '$id' + group by `ssatz`, `usteuer` " + ); + } + $ret = null; + if($arr) { + if(!$gruppierenpositionen) { + foreach($arr as $k => $v) { + if($steuerfrei) { + $satz = 0; + } + else{ + if(is_null($v['ssatz']) || $v['ssatz'] < 0) { + if($v['usteuer'] === 'ermaessigt') { + $satz = $steuersatzermaessigt; + } + elseif($v['usteuer'] === 'befreit'){ + $satz = 0; + } + else{ + $satz = $steuersatznormal; + } + } + else { + $satz = $v['ssatz']; + } + } + if(!isset($ret[$satz])) { + $ret[$satz] = 0; + } + if(!isset($retgerundet[$satz])){ + $retgerundet[$satz] = 0; + } + $ret[$satz] += $v['nettoungerundet']; + $retgerundet[$satz]+= $v['netto']; + } + unset($arr); + if($ret) { + foreach($ret as $steuersatz => $summe) { + $arr[] = array( + 'steuersatz'=>$steuersatz, + 'netto'=>$retgerundet[$steuersatz], + 'brutto'=>$summe*(1+$steuersatz/100) + ); + } + } + } + else{ + foreach($arr as $k => $v) { + if($steuerfrei) { + $arr[$k]['steuersatz'] = 0; + } + else{ + if(is_null($v['ssatz']) || $v['ssatz'] < 0) { + if($v['usteuer'] === 'ermaessigt') { + $arr[$k]['steuersatz'] = $steuersatzermaessigt; + } + elseif($v['usteuer'] === 'befreit') { + $arr[$k]['steuersatz'] = 0; + } + else{ + $arr[$k]['steuersatz'] = $steuersatznormal; + } + } + else { + $arr[$k]['steuersatz'] = $v['ssatz']; + } + } + unset($arr[$k]['ssatz']); + $arr[$k]['brutto'] = $v['nettoungerundet']*(1+$arr[$k]['steuersatz']/100); + $arr[$k]['umsatzsteuer'] = $arr[$k]['usteuer']; + unset($arr[$k]['usteuer']); + } + } + } + + if($gruppierenpositionen && $mitErloes) { + return $this->addErloesSteuerBeleg($arr, $belegtyp, $id); + } + return $arr; + } + + /** + * @param int $id + * @param bool $gruppierenpositionen + * @param bool $gruppierenkostenstelle + * + * @return array|null + */ + public function GutschriftZwischensummeSpezialSteuer($id, $gruppierenpositionen = false, $gruppierenkostenstelle = false) + { + /** @var Buchhaltungexport $buchhaltungexport */ + $buchhaltungexport = $this->app->loadModule('buchhaltungexport', false); + if($buchhaltungexport !== null && method_exists($buchhaltungexport, 'GutschriftZwischensummeSpezialSteuer')) { + return $buchhaltungexport->GutschriftZwischensummeSpezialSteuer( + $id, $gruppierenpositionen, $gruppierenKostenstelle + ); + } + if($id > 0) + { + $gutschriftarr = $this->app->DB->SelectRow( + "SELECT ust_befreit,ustid,projekt,kostenstelle + FROM gutschrift WHERE id = '$id' LIMIT 1" + ); + } + $ust_befreit = null; + $ustid = null; + $projekt = 0; + $kostenstelle = ''; + if(!empty($gutschriftarr)){ + $ust_befreit = $gutschriftarr['ust_befreit']; + $ustid = $gutschriftarr['ustid']; + $projekt = $gutschriftarr['projekt']; + $kostenstelle = $this->app->DB->real_escape_string($gutschriftarr['kostenstelle']); + } + $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,'preisberechnung'); + $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); + + $sqlvor = ''; + $sqlnach = ''; + if($positionenkaufmaenischrunden) { + $sqlvor = 'round('; + $sqlnach = ',2)'; + } + $sqlvor2 = ''; + $sqlnach2 = ''; + if($positionenkaufmaenischrunden == 3) { + $sqlvor2 = 'round('; + $sqlnach2 = ',2)'; + } + if($gruppierenpositionen) + { + $arr = $this->app->DB->SelectArr( + "SELECT gp.`nummer`, gp.`bezeichnung`, gp.`artikel`, gp.`steuersatz`,gp.`erloese`, + ".$sqlvor.'gp.menge*'.$sqlvor2.'(gp.preis-(gp.preis/100*gp.rabatt))'.$sqlnach2.$sqlnach." as netto, + gp.menge*(gp.preis-(gp.preis/100*gp.rabatt)) as nettoungerundet , + if(gp.umsatzsteuer = 'ermaessigt','ermaessigt',if(gp.umsatzsteuer = 'befreit','befreit','normal')) as usteuer , + sum(gp.einkaufspreis * gp.menge) as summeeinkaufspreis, + IF( + IFNULL(gp.kostenstelle,'') <> '', + gp.kostenstelle, + IF('$kostenstelle' <> '', '$kostenstelle', art.kostenstelle) + ) + AS kostenstelle + FROM `gutschrift_position` AS gp + LEFT JOIN artikel AS art ON gp.artikel = art.id + WHERE gp.gutschrift = '$id' + GROUP BY gp.`steuersatz`,gp.`erloese`, gp.`umsatzsteuer`,gp.`artikel`,gp.`id` " + ); + } + else{ + $arr = $this->app->DB->SelectArr( + "SELECT gp.`artikel`, gp.`steuersatz`,gp.`erloese`, + SUM(".$sqlvor."gp.menge*".$sqlvor2."(gp.preis-(gp.preis/100*gp.rabatt))".$sqlnach2.$sqlnach.") as netto, + SUM(gp.menge*(gp.preis-(gp.preis/100*gp.rabatt))) as nettoungerundet, + if(gp.umsatzsteuer = 'ermaessigt','ermaessigt', + if(gp.umsatzsteuer = 'befreit','befreit','normal')) as usteuer , + sum(gp.einkaufspreis * gp.menge) as summeeinkaufspreis, + IF( + IFNULL(gp.kostenstelle,'')<>'', + gp.kostenstelle, + IF('$kostenstelle' <> '', '$kostenstelle',art.kostenstelle) + ) + AS kostenstelle + FROM `gutschrift_position` AS gp + LEFT JOIN artikel AS art ON gp.artikel = art.id + WHERE gp.gutschrift = '$id' + group by gp.`steuersatz`, gp.`erloese`, gp.`umsatzsteuer`, gp.`artikel` " + ); + } + if($arr) { + $steuersatzermaessigt = $this->GetSteuersatzErmaessigt(true,$id,'gutschrift'); + $steuersatznormal = $this->GetSteuersatzNormal(true,$id,'gutschrift'); + foreach($arr as $k => $v) { + if($v['steuersatz'] !== null && $v['steuersatz'] == 0 && $ust_befreit == 0) { + $ust_befreit = 3; + } + $erloese = $this->Gegenkonto($ust_befreit, $ustid, 'gutschrift', $id); + $this->GetArtikelSteuer( + $v['artikel'], $ust_befreit,0, $dummysteuersatz, $tmpsteuertext, $tmperloes, $v['usteuer'], $ustid, $projekt + ); + if(!$this->GutschriftMitUmsatzeuer($id)){ + $v['steuersatz'] = 0; + } + if($v['steuersatz'] === null || $v['steuersatz'] < 0) + { + if($v['usteuer'] === 'ermaessigt') + { + $arr[$k]['steuersatz'] = $steuersatzermaessigt; + }elseif($v['usteuer'] === 'befreit') + { + $arr[$k]['steuersatz'] = 1; + }else{ + $arr[$k]['steuersatz'] = $steuersatznormal; + } + }else { + $arr[$k]['steuersatz'] = 1+$v['steuersatz']/100; + } + if($v['erloese'] === null || $v['erloese'] === '') + { + $arr[$k]['erloese'] = $erloese; + if($tmperloes) + { + $arr[$k]['erloese'] = $tmperloes; + }else{ + if($v['usteuer'] === 'befreit' && $ust_befreit == 0) + { + $arr[$k]['erloese'] = $this->Firmendaten('steuer_erloese_inland_nichtsteuerbar'); + }elseif($v['usteuer'] === 'ermaessigt' && $ust_befreit == 0) + { + $arr[$k]['erloese'] = $this->Firmendaten('steuer_erloese_inland_ermaessigt'); + }elseif($v['usteuer'] === 'ermaessigt' && $ust_befreit == 1 && (String)$ustid === '') + { + $arr[$k]['erloese'] = $this->Firmendaten('steuer_erloese_inland_euermaessigt'); + }elseif($ust_befreit == 1 && (String)$ustid !== ''){ + + $arr[$k]['erloese'] = $this->Firmendaten('steuer_erloese_inland_innergemeinschaftlich'); + }elseif($v['usteuer'] !== 'ermaessigt' && $v['usteuer'] !== 'befreit' && $ust_befreit == 1 && (String)$ustid === '') + { + $arr[$k]['erloese'] = $this->Firmendaten('steuer_erloese_inland_eunormal'); + } + } + } + $arr[$k]['summe'] = $v['nettoungerundet'] * $arr[$k]['steuersatz']; + if($gruppierenpositionen) { + $arr[$k]['summe'] = round($arr[$k]['summe'], 2); + } + } + } + if($gruppierenpositionen) { + return $arr; + } + + return $this->SteuerZusammenfassen($arr, $gruppierenkostenstelle); + } + + /** + * @param array $arr + * @param bool $gruppierenKostenstelle + * + * @return array + */ + public function SteuerZusammenfassen($arr, $gruppierenKostenstelle = false) + { + if(empty($arr)) { + return $arr; + } + + $tmparr = null; + foreach($arr as $k => $v) { + $kostenstelle = $gruppierenKostenstelle?(String)$v['kostenstelle']:''; + if(empty($tmparr) || !isset($tmparr[$v['erloese']]) + || !isset($tmparr[$v['erloese']]['s'.$v['steuersatz']]) + || !isset($tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]) + || !isset($tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]['s'])) { + $tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]['s'] = 0; + } + if(empty($tmparr) || !isset($tmparr[$v['erloese']]) + || !isset($tmparr[$v['erloese']]['s'.$v['steuersatz']]) + || !isset($tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]) + || !isset($tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]['e'])) { + $tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]['e'] = 0; + } + $tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]['s'] += $v['summe']; + $tmparr[$v['erloese']]['s'.$v['steuersatz']][$kostenstelle]['e'] += $v['summeeinkaufspreis']; + } + foreach($tmparr as $k1 => $v1) { + foreach($v1 as $k2 => $v2) { + foreach($v2 as $kostenstelle => $v3) { + $newarr[] = [ + 'erloese' => $k1, + 'steuersatz' => str_replace('s', '', $k2), + 'summe' => round($v3['s'], 2), + 'summeeinkaufspreis' => round($v3['e'], 2), + 'kostenstelle' => $kostenstelle + ]; + } + } + } + return $newarr; + } + + function RechnungZwischensummeSteuersaetzeBrutto($id,$art="ermaessigt") + { + return number_format($this->RechnungZwischensummeSteuersaetzeBrutto2($id,$art),","); + } + + function GutschriftZwischensummeSteuersaetzeBrutto2($id,$art="ermaessigt") + { + $projekt = $this->app->DB->Select("SELECT projekt FROM gutschrift WHERE id = '$id' LIMIT 1"); + $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,"preisberechnung"); + $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); + + $sqlvor = ''; + $sqlnach = ''; + + if($art!="ermaessigt") + $summe = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*(preis-(preis/100*rabatt))".$sqlnach.") FROM gutschrift_position WHERE (umsatzsteuer='normal' OR umsatzsteuer='') AND gutschrift='$id'"); + else + $summe = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*(preis-(preis/100*rabatt))".$sqlnach.") FROM gutschrift_position WHERE umsatzsteuer='$art' AND gutschrift='$id'"); + if($art == 'befreit')return $summe; + if($art=="ermaessigt") + $ermaessigt_summe = $summe*$this->GetSteuersatzErmaessigt(true,$id,"gutschrift"); + else + $ermaessigt_summe = $summe*$this->GetSteuersatzNormal(true,$id,"gutschrift"); + if($positionenkaufmaenischrunden == 1 || $positionenkaufmaenischrunden == 3)return round($ermaessigt_summe, 2); + return $ermaessigt_summe; + } + + function BelegZwischensummeSteuersaetzeBrutto2($id,$typ="",$art="ermaessigt") + { + $projekt = $this->app->DB->Select("SELECT projekt FROM $typ WHERE id = '$id' LIMIT 1"); + $positionenkaufmaenischrunden = $this->app->erp->Projektdaten($projekt,"preisberechnung"); + $viernachkommastellen_belege = $this->app->erp->Firmendaten('viernachkommastellen_belege'); + + $sqlvor = ''; + $sqlnach = ''; + if($art!="ermaessigt") + $summe = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*(preis-(preis/100*rabatt))".$sqlnach.") FROM ".$typ."_position WHERE (umsatzsteuer='normal' OR umsatzsteuer='') AND ".$typ."='$id'"); + else + $summe = $this->app->DB->Select("SELECT SUM(".$sqlvor."menge*(preis-(preis/100*rabatt))".$sqlnach.") FROM ".$typ."_position WHERE umsatzsteuer='$art' AND ".$typ."='$id'"); + if($art == 'befreit')return $summe; + if($art=="ermaessigt") + $ermaessigt_summe = $summe*$this->GetSteuersatzErmaessigt(true,$id,$typ); + else + $ermaessigt_summe = $summe*$this->GetSteuersatzNormal(true,$id,$typ); + if($positionenkaufmaenischrunden == 1 || $positionenkaufmaenischrunden == 3)return round($ermaessigt_summe, 2); + return $ermaessigt_summe; + } + + function GutschriftZwischensummeSteuersaetzeBrutto($id,$art="ermaessigt") + { + return number_format($this->GutschriftZwischensummeSteuersaetzeBrutto2($id,$art),","); + } + + function RechnungNeuberechnen($id) + { + $this->ANABREGSNeuberechnen($id,"rechnung"); + } + + + function DeleteRechnung($id) + { + /** @var Rechnung $obj */ + $obj = $this->LoadModul('rechnung'); + if(!empty($obj) && method_exists($obj,'DeleteRechnung')){ + $obj->DeleteRechnung($id); + } + } + + + function GetUserKalender($adresse) + { + return $this->app->DB->SelectArr("SELECT id, name, farbe FROM kalender WHERE id IN (SELECT kalender FROM kalender_user WHERE adresse = $adresse);"); + } + + function GetAllKalender($adresse="") + { + return $this->app->DB->SelectArr("SELECT id, name, farbe".($adresse!=""?", IFNULL((SELECT 1 FROM kalender_user WHERE adresse=$adresse AND kalender_user.kalender=kalender.id),0) zugriff":"")." FROM kalender;"); + } + + function GetUserKalenderIds($adresse) + { + $arr = array(); + foreach ($this->GetUserKalender($adresse) as $value) + array_push($arr,$value["id"]); + return $arr; + } + + function GetAllKalenderIds($adresse="") + { + $arr = array(); + foreach ($this->GetAllKalender($adresse) as $value) + array_push($arr,$value["id"]); + return $arr; + } + + function GetKalenderSelect($adresse,$selectedKalender=array()) + { + $arr = $this->GetUserKalender($adresse); + foreach($arr as $value) + { + $tmp = (in_array($value["id"],$selectedKalender))?" selected=\"selected\"":""; + $ret .= ""; + } + return $ret; + } + + function GetKwSelect($selectedKW="") + { + $ret = ''; + foreach(range(1,52) as $kw) + { + $tmp = ($selectedKW==$kw)?" selected=\"selected\"":""; + $ret .= ""; + } + return $ret; + } + + function GetYearSelect($selectedYear="", $yearsBefore=2, $yearsAfter=10) + { + $ret = ''; + foreach(range(date("Y")-$yearsBefore, date("Y")+$yearsAfter) as $year) + { + $tmp = ($selectedYear==$year)?" selected=\"selected\"":""; + $ret .= ""; + } + return $ret; + } + + function DownloadFile($url,$label="tmp",$ending="") + { + if($ending!="") $ending = '.'.$ending; + + $tmpname1 = tempnam($this->GetTMP(),$label); + $tmpname = $tmpname1.$ending; + unlink($tmpname1); + + set_time_limit(0); + //This is the file where we save the information + $fp = fopen ($tmpname, 'w+'); + //Here is the file we are downloading, replace spaces with %20 + $ch = curl_init(str_replace(" ","%20",$url)); + curl_setopt($ch, CURLOPT_TIMEOUT, 50); + // write curl response to file + curl_setopt($ch, CURLOPT_FILE, $fp); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + // get curl response + curl_exec($ch); + curl_close($ch); + fclose($fp); + return $tmpname; + } + + function CreateDateiOhneInitialeVersion($titel,$beschreibung,$nummer,$ersteller,$without_log=false) + { + if(!$without_log) + { + $this->app->DB->Insert("INSERT INTO datei (id,titel,beschreibung,nummer,firma) VALUES + ('','$titel','$beschreibung','$nummer','".$this->app->User->GetFirma()."')"); + } else { + $this->app->DB->InsertWithoutLog("INSERT INTO datei (id,titel,beschreibung,nummer,firma) VALUES + ('','$titel','$beschreibung','$nummer',1)"); + } + + $fileid = $this->app->DB->GetInsertID(); + //$this->AddDateiVersion($fileid,$ersteller,$name,"Initiale Version",$datei,$without_log); + + return $fileid; + } + + function GetDMSPath($id, $path = '', $cache = false) + { + $ids = explode('_', $id, 2); + $id = $ids[0]; + if(isset($ids[1]))$cache = true; + if($path == '') + { + $path = str_replace("index.php", "", $_SERVER['SCRIPT_FILENAME']); + $path = $path."../userdata/dms/"; + if(isset($this->app->Conf->WFuserdata))$path = rtrim($this->app->Conf->WFuserdata,'/').'/dms/'; + $path = $path.$this->app->Conf->WFdbname; + } + if(!is_dir($path))return; + $_path = $path; + $ida = str_split($id, 2); + $path .= '/d'.implode('/d',$ida); + if(is_file($path.'/'.$id))return $path; + if($cache && count($ids) > 0) + { + if(is_file($path.'/'.$ids[0].'_'.$ids[1]))return $path; + if(is_file($_path.'/'.$ids[0].'_'.$ids[1]))return $_path; + } + if($cache && is_dir($path))return $path; + if($cache && is_dir($_path))return $_path; + } + + function CreateDMSPath($path, $id) + { + if($path == '') + { + $path = str_replace("index.php", "", $_SERVER['SCRIPT_FILENAME']); + $path = $path."../userdata/dms/"; + if(isset($this->app->Conf->WFuserdata))$path = rtrim($this->app->Conf->WFuserdata,'/').'/dms/'; + $path = $path.$this->app->Conf->WFdbname; + } + $ids = explode('_', $id, 2); + $id = $ids[0]; + if(!is_dir($path)) + { + $path_b = $path; + if (substr(trim($path), -1) == DIRECTORY_SEPARATOR) { + $path = substr(trim($path), 0, -1); + } + @mkdir($path); + system("chmod 777 ".$path); + $path = $path_b; + mkdir($path,0777,true); + system("chmod 777 ".$path); + } + if(!is_dir($path))return; + $ida = str_split($id, 2); + foreach($ida as $v) + { + $path .= '/d'.$v; + if(!is_dir($path)) + { + if(!@mkdir($path,0777,true)) + { + $path_b = $path; + if (substr(trim($path), -1) == DIRECTORY_SEPARATOR) { + $path = substr(trim($path), 0, -1); + } + system("chmod 777 ".$path); + $path = $path_b; + @mkdir($path,0777,true); + } + if(!is_dir($path))return; + } + if(!is_dir($path))return; + } + return $path; + } + + public function CheckFileSort($objekt, $parameter) + { + $arr = $this->app->DB->SelectArr("SELECT SQL_CALC_FOUND_ROWS s.id, s.sort + FROM datei d + INNER JOIN datei_stichwoerter s ON d.id=s.datei + LEFT JOIN (SELECT datei, max(version) as version FROM datei_version GROUP BY datei ) v2 ON v2.datei=d.id + LEFT JOIN datei_version v ON v.datei=v2.datei AND v.version = v2.version + WHERE s.objekt LIKE '$objekt' AND s.parameter='$parameter' AND d.geloescht=0 + ORDER BY s.sort + "); + if(!$arr)return; + $oldsort = false; + foreach($arr as $v) + { + if($oldsort === false) + { + $oldsort = $v['sort']; + }elseif($v['sort'] <= $oldsort){ + $oldsort = $v['sort'] + 1; + $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = $oldsort WHERE id = '".$v['id']."' LIMIT 1"); + } + } + } + + function CreateDateiWithStichwort($name, $titel,$beschreibung,$nummer,$datei, $ersteller ,$subjekt,$objekt,$parameter, $path = "",$without_log=false) + { + $dateien = $this->app->DB->SelectArr("SELECT dv.datei, dv.id FROM datei_stichwoerter ds + INNER JOIN datei d ON ds.datei = d.id AND ifnull(d.geloescht,0) = 0 + INNER JOIN datei_version dv ON d.id = dv.datei + WHERE ds.subjekt = '".$this->app->DB->real_escape_string($subjekt)."' AND + ds.objekt = '".$this->app->DB->real_escape_string($objekt)."' AND ds.parameter = '".$this->app->DB->real_escape_string($parameter)."'"); + if($dateien) + { + if(is_file($datei)) + { + $md5 = md5_file($datei); + } + else if(is_uploaded_file($datei)) + { + $_datei = $this->app->erp->GetTMP().$datei; + if(move_uploaded_file($datei,$_datei))$datei = $_datei; + $md5 = md5_file($datei); + } + else { + $md5 = md5($datei); + } + if($md5 != '') { + if ($path == "") { + $path = str_replace("index.php", "", $_SERVER['SCRIPT_FILENAME']); + $path = $path . "../userdata/dms/"; + if (isset($this->app->Conf->WFuserdata)) $path = rtrim($this->app->Conf->WFuserdata, '/') . '/dms/'; + $path_only = $path; + $path = $path . $this->app->Conf->WFdbname; + } + foreach($dateien as $v) + { + if(is_file($path."/".$v['id']) && md5_file($path."/".$v['id']) == $md5)return $v['datei']; + } + } + } + $fileid = $this->CreateDatei($name,$titel,$beschreibung,$nummer,$datei,$ersteller,$without_log,$path); + $this->AddDateiStichwort($fileid,$subjekt,$objekt,$parameter,$without_log); + return $fileid; + } + + function CreateDatei($name,$titel,$beschreibung,$nummer,$datei,$ersteller,$without_log=false,$path="") + { + // Anführungszeichen in Unterstriche wandeln + $name = str_replace(['\\\'', '\\"', '\'', '"'], '_', $name); + + if(!$without_log) + { + $this->app->DB->Insert("INSERT INTO datei (id,titel,beschreibung,nummer,firma) VALUES + ('','$titel','$beschreibung','$nummer','".$this->app->User->GetFirma()."')"); + } else { + $this->app->DB->InsertWithoutLog("INSERT INTO datei (id,titel,beschreibung,nummer,firma) VALUES + ('','$titel','$beschreibung','$nummer',1)"); + } + + $fileid = $this->app->DB->GetInsertID(); + $this->AddDateiVersion($fileid,$ersteller,$name,"Initiale Version",$datei,$without_log,$path); + + return $fileid; + } + + function AddDateiVersion($id,$ersteller,$dateiname, $bemerkung,$datei,$without_log=false,$path="") + { + // Anführungszeichen in Unterstriche wandeln + $dateiname = str_replace(['\\\'', '\\"', '\'', '"'], '_', $dateiname); + + // ermittle neue Version + $version = (int)$this->app->DB->Select("SELECT ifnull(max(version),0) FROM datei_version WHERE datei='$id'") + 1; + + $tmpfilesize = 0; + if(@is_file($datei)){ + $tmpfilesize = @filesize($datei); + } + + // speichere werte ab + if(!$without_log) + { + $this->app->DB->Insert("INSERT INTO datei_version (id,datei,ersteller,datum,version,dateiname,bemerkung,size) + VALUES ('','$id','$ersteller',NOW(),'$version','$dateiname','$bemerkung','$tmpfilesize')"); + } else { + $this->app->DB->InsertWithoutLog("INSERT INTO datei_version (id,datei,ersteller,datum,version,dateiname,bemerkung,size) + VALUES ('','$id','$ersteller',NOW(),'$version','$dateiname','$bemerkung','$tmpfilesize')"); + } + + $versionid = $this->app->DB->GetInsertID(); + + $parameter = $this->app->DB->Select("SELECT parameter FROM datei_stichwoerter WHERE datei = '$id' and objekt like 'Artikel' LIMIT 1"); + if($parameter){ + $this->app->DB->Update("UPDATE artikel set bildvorschau = '' WHERE id = '$parameter' LIMIT 1"); + } + + //TODO Das ist keine lösung! + // if($this->app->Conf->WFdbname=="") + // $this->app->Conf->WFdbname="wawision"; + + // Pfad anpassen + if($path=="") + { + $path = str_replace("index.php", "", $_SERVER['SCRIPT_FILENAME']); + $path = $path."../userdata/dms/"; + if(isset($this->app->Conf->WFuserdata)){ + $path = rtrim($this->app->Conf->WFuserdata,'/').'/dms/'; + } + $path_only = $path; + $path = $path.$this->app->Conf->WFdbname; + } else { + $path_only = $path; + } + + if(!is_dir($path)) + { + + $path_b = $path; + if (substr(trim($path), -1) == DIRECTORY_SEPARATOR) { + $path = substr(trim($path), 0, -1); + } + if(!mkdir($path,0777, true) && !is_dir($path)){ + system("chmod 777 " . $path); + $path = $path_b; + //system("mkdir ".$path); + mkdir($path, 0777, true); + system("chmod 777 " . $path); + } + } + $userdata = isset($this->app->Conf->WFuserdata)?$this->app->Conf->WFuserdata:(str_replace('index.php', '', $_SERVER['SCRIPT_FILENAME']).'../userdata'); + + $cachefile = $this->app->erp->GetDMSPath( + $versionid.'_100_100', + $userdata.'/dms/'.$this->app->Conf->WFdbname.'/cache', true + ); + if(is_file($cachefile)) { + @unlink($cachefile); + } + + $path = $this->CreateDMSPath($path, $versionid); + + if(@is_file($datei)) + { + if(copy($datei,$path."/".$versionid)){ + return $versionid; + } + return false; + } + if(@is_uploaded_file($datei)) + { + if(@move_uploaded_file($datei,$path.'/'.$versionid)) + { + if($tmpfilesize == 0) + { + if(@is_file($path.'/'.$versionid)) + { + $tmpfilesize = @filesize($path.'/'.$versionid); + $this->app->DB->Update("UPDATE datei_version SET `size` = '$tmpfilesize' WHERE id = '$versionid'"); + } + } + return $versionid; + } + return false; + } + + // ACHTUNG !!!! ANGRIFFSGEFAHR!!!!! + if($handle = fopen ($path.'/'.$versionid, "wb")) + { + fwrite($handle, $datei); + fclose($handle); + if(@is_file($path.'/'.$versionid)) + { + $tmpfilesize = @filesize($path.'/'.$versionid); + $this->app->DB->Update("UPDATE datei_version SET `size` = '$tmpfilesize' WHERE id = '$versionid'"); + } + return $versionid; + } + return false; + } + + + function AddDateiStichwort($id,$subjekt,$objekt,$parameter,$without_log=false,$parameter2=0,$objekt2='') + { + if(strtolower($objekt) === 'artikel' && $parameter) { + $this->app->DB->Update("UPDATE artikel SET bildvorschau = '' WHERE id = '".$parameter."' LIMIT 1"); + } + $sort = 1 + (int)$this->app->DB->Select("SELECT max(sort) FROM datei_stichwoerter WHERE objekt like '$objekt' AND parameter = '$parameter'"); + if(!$without_log) { + $this->app->DB->Insert("INSERT INTO datei_stichwoerter (id,datei,subjekt,objekt,parameter, sort, parameter2, objekt2) + VALUES ('','$id','$subjekt','$objekt','$parameter','$sort','$parameter2','$objekt2')"); + } else { + $this->app->DB->InsertWithoutLog("INSERT INTO datei_stichwoerter (id,datei,subjekt,objekt,parameter,sort, parameter2, objekt2) + VALUES ('','$id','$subjekt','$objekt','$parameter','$sort','$parameter2','$objekt2')"); + } + } + + function DeleteDateiAll($subjekt,$objekt,$parameter) + { + $dateien = $this->app->DB->SelectArr("SELECT ds.datei FROM datei_stichwoerter ds WHERE ds.subjekt='$subjekt' AND ds.objekt='$objekt' AND ds.parameter='$parameter' group by ds.datei"); + if($dateien) + { + foreach($dateien as $datei) + { + if($datei['datei']){ + $this->DeleteDatei($datei['datei']); + } + } + } + } + + /** + * @param string $path + */ + public function deleteEmptyDmsPath($path) { + $prefix = $this->app->Conf->WFuserdata.'/dms/'.$this->app->Conf->WFdbname.'/'; + if(strpos($path, $prefix) !== 0) { + return; + } + $prefixCache = $prefix.'cache/'; + $isCacheFolder = strpos($path, $prefixCache) === 0; + if($isCacheFolder) { + $prefix = $prefixCache; + } + + $dirRelative = substr($path, strlen($prefix)); + if($dirRelative[0] !== 'd') { + return; + } + $pathArr = explode('/', rtrim($dirRelative,'/')); + + if(substr($pathArr[count($pathArr) - 1],0,1) !== 'd') { + unset($pathArr[count($pathArr) - 1]); + } + if(empty($pathArr) || !is_dir($prefix.'/'.implode('/', $pathArr))) { + return; + } + $glob = glob($prefix.implode('/', $pathArr).'/*'); + if(!empty($glob)) { + return; + } + if(@rmdir($prefix.implode('/', $pathArr)) && count($pathArr) > 1) { + unset($pathArr[count($pathArr) - 1]); + $this->deleteEmptyDmsPath($prefix.implode('/', $pathArr)); + } + } + + function DeleteDatei($id) + { + $id = (int)$id; + if(!$id){ + return false; + } + $error = false; + $versionen = $this->app->DB->SelectArr("SELECT * FROM datei_version WHERE datei = '".$id."'"); + if($versionen) + { + foreach($versionen as $vers) + { + //$path = $this->app->Conf->WFuserdata."/dms/".$this->app->Conf->WFdbname."/".$vers['id']; + $path = $this->GetDMSPath($vers['id'], $this->app->Conf->WFuserdata.'/dms/'.$this->app->Conf->WFdbname); + if($path){ + $path .= '/'.$vers['id']; + } + if($path && file_exists($path)) + { + if(unlink($path)) + { + $this->app->DB->Delete("DELETE FROM datei_version WHERE id = '".$vers['id']."'"); + }else{ + $error = true; + } + }else{ + $this->app->DB->Delete("DELETE FROM datei_version WHERE id = '".$vers['id']."'"); + } + $this->deleteEmptyDmsPath($path); + $cachedir = $this->app->Conf->WFuserdata."/dms/".$this->app->Conf->WFdbname.'/cache/'; + if(is_dir($cachedir)) + { + $caches = glob($this->app->Conf->WFuserdata."/dms/".$this->app->Conf->WFdbname."/cache/".$vers['id'].'_*'); + if(is_array($caches) && count($caches) > 0) + { + foreach($caches as $cache)unlink($cache); + } + } + $cachedir = $this->GetDMSPath($vers['id'], $this->app->Conf->WFuserdata."/dms/".$this->app->Conf->WFdbname."/cache", true); + if(is_dir($cachedir)) + { + $caches = glob($cachedir.'/'.$vers['id'].'_*'); + if(is_array($caches) && count($caches) > 0) + { + foreach($caches as $cache){ + unlink($cache); + } + } + $this->deleteEmptyDmsPath($cachedir); + } + } + } + if(!$error) + { + $ds = $this->app->DB->SelectArr("SELECT id,objekt, parameter FROM datei_stichwoerter WHERE datei = '$id' AND objekt like 'Artikel' AND parameter <> '' AND parameter <> '0'"); + $this->app->DB->Delete("DELETE FROM datei_stichwoerter WHERE datei = '$id'"); + if($ds) + { + foreach($ds as $d) + { + $this->app->DB->Update("UPDATE artikel SET bildvorschau = '' WHERE id = '".$d['parameter']."' LIMIT 1"); + } + } + $this->app->DB->Delete("DELETE FROM datei WHERE id = '$id' LIMIT 1"); + return true; + } + return false; + } + + function GetDateiName($id) + { + $version = $this->app->DB->Select("SELECT MAX(version) FROM datei_version WHERE datei='$id'"); + $newid = $this->app->DB->Select("SELECT dateiname FROM datei_version WHERE datei='$id' AND version='$version' LIMIT 1"); + + return $this->UmlauteEntfernen($newid); + } + + + function GetDateiEndung($id) + { + $version = $this->app->DB->Select("SELECT MAX(version) FROM datei_version WHERE datei='$id'"); + $newid = $this->app->DB->Select("SELECT dateiname FROM datei_version WHERE datei='$id' AND version='$version' LIMIT 1"); + $tmp = pathinfo($newid); + + return strtolower($tmp['extension']); + } + + + function GetDateiSubjektObjektDateiname($subjekt,$objekt,$parameter,$prefix="") + { + $dateien = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE subjekt LIKE '$subjekt' AND objekt LIKE '$objekt' AND parameter='$parameter' GROUP by datei"); + if(empty($dateien)) { + return null; + } + $tmp = []; + foreach($dateien as $datei) { + $tmpname = tempnam($this->GetTMP(), $prefix); + $newname = $tmpname."_".$this->GetDateiName($datei['datei']); + + copy($this->GetDateiPfad($datei['datei']),$newname); + + $tmp[] = $newname; + } + return $tmp; + } + + function GetDateiSubjektObjekt($subjekt,$objekt,$parameter) + { + $dateien = $this->app->DB->SelectArr("SELECT datei FROM datei_stichwoerter WHERE subjekt LIKE '$subjekt' AND objekt LIKE '$objekt' AND parameter='$parameter' GROUP by datei"); + if(empty($dateien)) { + return null; + } + $tmp = []; + foreach($dateien as $datei) { + $tmp[] = $this->GetDateiPfad($datei['datei']); + } + return $tmp; + } + + function GetDateiPfad($id) + { + $version = $this->app->DB->Select("SELECT MAX(version) FROM datei_version WHERE datei='$id'"); + $newid = $this->app->DB->Select("SELECT id FROM datei_version WHERE datei='$id' AND version='$version' LIMIT 1"); + + return $this->GetDateiPfadVersion($newid); + } + + function GetDateiPfadVersion($id) + { + $dateipfad = $this->app->DB->Select("SELECT dateiname FROM datei_version WHERE id ='$id' LIMIT 1"); + if(is_file($dateipfad))return $dateipfad; + + $path = $this->GetDMSPath($id, $this->app->Conf->WFuserdata."/dms/".$this->app->Conf->WFdbname); + if($path)return $path."/".$id; + $path = $this->app->Conf->WFuserdata."/dms/".$this->app->Conf->WFdbname."/".$id; + return $path; + } + + function GetDateiVersion($id) + { + $path = $this->GetDateiPfadVersion($id); + return @file_get_contents($path); + } + + function GetDatei($id) + { + $path = $this->GetDateiPfad($id); + return @file_get_contents($path); + } + + function GetDateiSize($id) { + $path = $this->GetDateiPfad($id); + $size = 0; + if(@is_file($path)) { + $size = @filesize($path); + } + + if($size <= 1024){ + return $size . ' Byte'; + } + if($size <= 1024*1024){ + return number_format(($size / 1024), 2) . ' KB'; + } + return number_format(($size/1024/1024),2).' MB'; + } + + + + function SendDatei($id,$versionid='') { + session_write_close(); + ob_end_clean(); + set_time_limit(0); + + if($versionid>0){ + $newid = $versionid; + } else{ + $version = 0; + $newid = 0; + if((int)$id > 0) { + $version = $this->app->DB->Select("SELECT MAX(version) FROM datei_version WHERE datei='$id'"); + $newid = $this->app->DB->Select("SELECT id FROM datei_version WHERE datei='$id' AND version='$version' LIMIT 1"); + } + } + + + $name = $newid <=0?'':$this->app->DB->Select("SELECT dateiname FROM datei_version WHERE id='$newid' LIMIT 1"); + $path = ''; + if($id > 0){ + $path = $this->GetDateiPfad($id); + if(!@file_exists($path)) { + $path = ''; + } + } + //$name=basename($path); + + //filenames in IE containing dots will screw up the + //filename unless we add this + + if ( strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], "MSIE" ) > 0 ) + { + $header_name = 'Content-Disposition: attachment; filename="' . rawurlencode ( $name ) . '"' ; + } + else { + $header_name = 'Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode ( $name ) ; + } + + $contenttype= $this->content_type($name); + + //required, or it might try to send the serving //document instead of the file + header("Content-Type: $contenttype"); + header("Content-Length: " .(string)(empty($path)?0:@filesize($path)) ); + //header('Content-Disposition: inline; filename="'.$name.'"'); + //$name = $this->Dateinamen($name); + //header('Content-Disposition: attachment; filename="'.$name.'"'); + header($header_name); + + if(!empty($path) && $file = fopen($path, 'rb')){ + while( (!feof($file)) && (connection_status()==0) ){ + print(fread($file, 1024*8)); + flush(); + } + fclose($file); + } + return((connection_status()==0) and !connection_aborted()); + } + + + function content_type($name) { + // Defines the content type based upon the extension of the file + $contenttype = 'application/octet-stream'; + $contenttypes = array( 'html' => 'text/html', + 'htm' => 'text/html', + 'txt' => 'text/plain', + 'gif' => 'image/gif', + 'jpg' => 'image/jpeg', + 'png' => 'image/png', + 'sxw' => 'application/vnd.sun.xml.writer', + 'sxg' => 'application/vnd.sun.xml.writer.global', + 'sxd' => 'application/vnd.sun.xml.draw', + 'sxc' => 'application/vnd.sun.xml.calc', + 'sxi' => 'application/vnd.sun.xml.impress', + 'xls' => 'application/vnd.ms-excel', + 'ppt' => 'application/vnd.ms-powerpoint', + 'doc' => 'application/msword', + 'rtf' => 'text/rtf', + 'zip' => 'application/zip', + 'mp3' => 'audio/mpeg', + 'pdf' => 'application/pdf', + 'tgz' => 'application/x-gzip', + 'gz' => 'application/x-gzip', + 'vcf' => 'text/vcf' ); + + $name = str_replace("§", " ", $name); + foreach ($contenttypes as $type_ext => $type_name) { + if (preg_match ("/$type_ext$/i", $name)) $contenttype = $type_name; + } + return $contenttype; + } + + function getDateiTypen($modul=''){ + $dateiTypen=[]; + + switch($modul){ + case 'artikel': + $dateiTypen[] = ['wert' => 'Shopbild', 'beschriftung' => 'Standard Artikelbild (Shopbild)']; + $dateiTypen[] = ['wert' => 'Gruppenbild', 'beschriftung' => 'Standard Gruppenbild']; + $dateiTypen[] = ['wert' => 'Etikettenbild', 'beschriftung' => 'Etikettenbild']; + $dateiTypen[] = ['wert' => 'Bild', 'beschriftung' => 'Sonstiges Bild']; + $dateiTypen[] = ['wert' => 'Datenblatt', 'beschriftung' => 'Datenblatt']; + $dateiTypen[] = ['wert' => 'Druckbild', 'beschriftung' => 'Druckbild (300dpi)']; + $dateiTypen[] = ['wert' => 'Zertifikat', 'beschriftung' => 'Zertifikat Anhang (PDF)']; + break; + case 'projekt': + $dateiTypen[] = ['wert' => 'Briefpapier1', 'beschriftung' => 'Briefpapier Seite 1']; + $dateiTypen[] = ['wert' => 'Briefpapier2', 'beschriftung' => 'Briefpapier Seite 2']; + break; + case 'verbindlichkeit': + case 'kasse': + $dateiTypen[] = ['wert' => 'Belege', 'beschriftung' => 'Beleg']; + $dateiTypen[] = ['wert' => 'Quittung', 'beschriftung' => 'Quittung']; + break; + } + + $dateiTypen[] = ['wert' => 'Sonstige', 'beschriftung' => 'Sonstige Datei']; + $dateiTypen[] = ['wert' => 'Deckblatt', 'beschriftung' => 'Deckblatt']; + $dateiTypen[] = ['wert' => 'anhang', 'beschriftung' => 'Anhang']; + + //adresse unter defaulttypen, da profilbild nicht als default ausgewählt werden soll OS148717 + switch($modul){ + case 'adresse': + $dateiTypen[] = ['wert' => 'Profilbild', 'beschriftung' => 'Profilbild']; + break; + } + + if($modul !== ''){ + $zusaetzlicheStichworter = $this->app->DB->SelectArr( + "SELECT * FROM datei_stichwortvorlagen WHERE modul='$modul' OR modul='' ORDER by beschriftung" + ); + $cZusaetzlicheStichworter = empty($zusaetzlicheStichworter)?0:count($zusaetzlicheStichworter); + for($i=0;$i<$cZusaetzlicheStichworter;$i++){ + $dateiTypen[] = ['wert' => $zusaetzlicheStichworter[$i]['beschriftung'], 'beschriftung' => $zusaetzlicheStichworter[$i]['beschriftung']]; + } + } + + return $dateiTypen; + } + + function GetEtikettenbild($artikel,$return_dateiid=false) + { + $dateiid = $this->app->DB->Select( + sprintf( + "SELECT datei + FROM datei_stichwoerter + WHERE objekt LIKE 'Artikel' AND parameter = '%d' AND (subjekt LIKE 'Etikettenbild' OR subjekt LIKE 'Bild' OR subjekt LIKE 'Shopbild') + ORDER BY (subjekt like 'Etikettenbild') DESC, (subjekt like 'Bild') DESC + LIMIT 1", + (int)$artikel + ) + ); + + if($artikel <= 0 || $dateiid <= 0) { + return false; + } + + if($return_dateiid) { + return $dateiid; + } + + $filename = $this->GetDateiName($dateiid); + $path_info = pathinfo($filename); + return array('image'=>$this->GetDatei($dateiid),'filename'=>$filename,'extension'=>$path_info['extension']); + } + + + function GetArtikelStandardbild($artikel,$return_dateiid=false) + { + $dateiid = $this->app->DB->Select(sprintf(" + SELECT dv.datei AS datei + FROM datei_stichwoerter AS ds + JOIN (SELECT datei, MAX(id) AS id FROM datei_version GROUP BY datei) AS dv ON dv.datei = ds.datei + WHERE ds.objekt LIKE 'Artikel' AND + ds.parameter = '%d' AND + (ds.subjekt LIKE 'Shopbild' OR ds.subjekt LIKE 'Druckbild' OR ds.subjekt LIKE 'Bild') + ORDER BY ds.subjekt LIKE 'Shopbild' DESC, ds.subjekt LIKE 'Druckbild' DESC + LIMIT 1", + $artikel) + ); + + if($artikel <= 0 || $dateiid <= 0) { + return false; + } + if($return_dateiid) { + return $dateiid; + } + + $filename = $this->GetDateiName($dateiid); + $path_info = pathinfo($filename); + return array('image'=>$this->GetDatei($dateiid),'filename'=>$filename,'extension'=>$path_info['extension']); + } + + function DeleteEmailbackupMail($id,$adresse="") + { + if($adresse > 0) + { + $this->app->DB->Update("UPDATE emailbackup_mails SET geloescht=1 WHERE + webmail IN (SELECT id FROM emailbackup WHERE emailbackup.adresse = '$adresse' AND emailbackup.geloescht!=1) AND id='$id'"); + } else { + $this->app->DB->Update("UPDATE emailbackup_mails SET geloescht=1 WHERE id='$id' LIMIT 1"); + } + } + + function Wochenplan($adr_id,$parsetarget){ + $this->app->Tpl->Set('SUBSUBHEADING', "Wochenplan"); + $this->app->Tpl->Set('INHALT',""); + + $anzWochentage = 5; + $startStunde = 6; + $endStunde = 22; + + $wochentage = $this->getDates($anzWochentage); + + $inhalt = ""; + for($i=$startStunde;$i<=$endStunde;$i++){ // fuelle Zeilen 06:00 bis 22:00 + $zeile = array(); + $zeileCount = 0; + foreach($wochentage as $tag){ // hole Daten fuer Uhrzeit $i und Datum $tage + $result = $this->checkCell($tag, $i, $adr_id); + if($result[0]['aufgabe'] != "") + { + if($result[0]['adresse']==0) $color = '#ccc'; else $color='#BCEE68'; + if($result[0]['prio']==1) $color = 'red'; + + $zeile[$zeileCount] = '
'.$result[0]['aufgabe'].'
'; + } + else + $zeile[$zeileCount] = " "; + $zeileCount++; + } + $inhalt = $inhalt.$this->makeRow($zeile, $anzWochentage,$i.":00"); + } + $this->app->Tpl->Set('WOCHENDATUM', $this->makeRow($wochentage, $anzWochentage)); + $this->app->Tpl->Set('INHALT',$inhalt); + + $this->app->Tpl->Parse($parsetarget,"zeiterfassung_wochenplan.tpl"); + + $this->app->Tpl->Add($parsetarget," + +
".$this->app->User->GetName()."Prio: Sehr Hoch (".$this->app->User->GetName().")Allgemein
"); + } + + function getDates($anzWochentage){ + // hole Datum der Wochentage von Mo bis $anzWochentage + $montag = $this->app->DB->Select("SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE()) day)"); + $week = array(); + for($i=0;$i<$anzWochentage;$i++) + $week[$i] = $this->app->DB->Select("SELECT DATE_ADD('$montag',INTERVAL $i day)"); + return $week; + } + + function makeRow($data, $spalten, $erstefrei="frei"){ + // erzeuge eine Zeile in der Tabelle + // $erstefrei = 1 -> erste Spalte ist leer + + $row = ''; + if($erstefrei=="frei") + $row = $row.' '; + else + $row = $row.''.$erstefrei.''; + for($i=0;$i<$spalten; $i++) + $row = $row.''.$data[$i].''; + $row = $row.''; + return $row; + } + + + function KundeMitUmsatzsteuer($adresse) + { + $addressRow = $this->app->DB->SelectRow("SELECT land, ustid FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + $land = $addressRow['land']; + $ustid = $addressRow['ustid']; + if($land ==$this->Firmendaten('land')){ + return true; + } + + // wenn kunde EU + foreach($this->GetUSTEU() as $value) + { + //echo $value; + if($value==$land && $ustid!='') { + return false; + } + } + + // alle anderen laender = export + return false; + } + + function AuftragMitUmsatzsteuer($auftrag) + { + return $this->AuftragMitUmsatzeuer($auftrag); + } + + function AuftragMitUmsatzeuer($auftrag) + { + $docRow = $this->app->DB->SelectRow(sprintf('SELECT ust_befreit,ustid FROM auftrag WHERE id=%d LIMIT 1', $auftrag)); + return $docRow['ust_befreit'] == 0 + || ($docRow['ust_befreit'] == 1 && + $docRow['ustid'] ==''); + } + + function GutschriftMitUmsatzeuer($gutschrift) + { + $docRow = $this->app->DB->SelectRow(sprintf('SELECT ust_befreit,ustid FROM gutschrift WHERE id=%d LIMIT 1', $gutschrift)); + return $docRow['ust_befreit'] == 0 + || ($docRow['ust_befreit'] == 1 && + $docRow['ustid'] ==''); + } + + function PruefeMengeVPE($table, $posid, $menge) + { + if($posid <= 0)return $menge; + $_menge = $menge; + $beleg = str_replace('_position','',$table); + switch($table) + { + case 'auftrag_position': + case 'angebot_position': + case 'rechnung_position': + case 'gutschrift_position': + if(!$this->app->erp->Firmendaten('verkaufspreisevpe'))return $menge; + $artikel = $this->app->DB->Select("SELECT artikel FROM $table WHERE id = '$posid' LIMIT 1"); + $belegid = $this->app->DB->Select("SELECT $beleg FROM $table WHERE id = '$posid' LIMIT 1"); + $adresse = $this->app->DB->Select("SELECT adresse FROM $beleg WHERE id = '$belegid' LIMIT 1"); + $waehrung = $this->app->DB->Select("SELECT waehrung FROM $beleg WHERE id = '$belegid' LIMIT 1"); + $vp = $this->app->erp->GetVerkaufspreisKunde($artikel,$menge,$adresse,$waehrung,true); + if(!$vp)$vp = $this->app->erp->GetVerkaufspreis($artikel,$menge,$adresse,$waehrung, $returnwaehrung,true, true); + if($vp && $vp['vpe'] > 0) + { + if($vp['vpe'] * ceil($menge / $vp['vpe']) != $_menge) { + $this->app->DB->Update("UPDATE $table SET preis = '" . $vp['preis'] . "' WHERE id = '$posid' LIMIT 1"); + return $vp['vpe'] * ceil($menge / $vp['vpe']); + }else return $_menge; + } + break; + case 'bestellung_position': + if(!$this->app->erp->Firmendaten('einkaufspreisevpe'))return $menge; + $artikel = $this->app->DB->Select("SELECT artikel FROM $table WHERE id = '$posid' LIMIT 1"); + $belegid = $this->app->DB->Select("SELECT $beleg FROM $table WHERE id = '$posid' LIMIT 1"); + $adresse = $this->app->DB->Select("SELECT adresse FROM $beleg WHERE id = '$belegid' LIMIT 1"); + $waehrung = $this->app->DB->Select("SELECT waehrung FROM $beleg WHERE id = '$belegid' LIMIT 1"); + $ep = $this->app->erp->GetEinkaufspreisArr($artikel, $menge, $adresse, $waehrung, true); + if($ep && $ep['vpe'] > 0) + { + if($_menge != $ep['vpe'] * ceil($menge / $ep['vpe'])) { + $this->app->DB->Update("UPDATE $table SET preis = '" . $ep['preis'] . "' WHERE id = '$posid' LIMIT 1"); + return $ep['vpe'] * ceil($menge / $ep['vpe']); + }else return $_menge; + } + break; + } + return $menge; + } + + + + function Belegegesamt($tabellen = null, $where = '') + { + if(is_null($tabellen) || in_array('rechnung', $tabellen))$ret[] = " + select `rechnung`.`id` AS `id`,`rechnung`.`adresse` AS `adresse`,`rechnung`.`datum` AS `datum`,`rechnung`.`belegnr` AS `belegnr`,`rechnung`.`status` AS `status`,`rechnung`.`land` AS `land`,'rechnung' AS `typ`,`rechnung`.`umsatz_netto` AS `umsatz_netto`,`rechnung`.`soll` AS `umsatz_brutto`,`rechnung`.`erloes_netto` AS `erloes_netto`,`rechnung`.`deckungsbeitrag` AS `deckungsbeitrag`,`rechnung`.`provision_summe` AS `provision_summe`,`rechnung`.`vertriebid` AS `vertriebid`,`rechnung`.`gruppe` AS `gruppe`,`rechnung`.`projekt` AS `projekt`,`rechnung`.`waehrung` as `waehrung` + from `rechnung` $where + "; + if(is_null($tabellen) || in_array('gutschrift', $tabellen))$ret[] = " + select `gutschrift`.`id` AS `id`,`gutschrift`.`adresse` AS `adresse`,`gutschrift`.`datum` AS `datum`,`gutschrift`.`belegnr` AS `belegnr`,`gutschrift`.`status` AS `status`,`gutschrift`.`land` AS `land`,'gutschrift' AS `typ`,(`gutschrift`.`umsatz_netto` * -(1)) AS `umsatz_netto`,(`gutschrift`.`soll` * -(1)) AS `umsatz_brutto`,(`gutschrift`.`erloes_netto` * -(1)) AS `erloes_netto`,(`gutschrift`.`deckungsbeitrag` * -(1)) AS `deckungsbeitrag`,(`gutschrift`.`provision_summe` * -(1)) AS `provision_summe`,`gutschrift`.`vertriebid` AS `vertriebid`,`gutschrift`.`gruppe` AS `gruppe`,`gutschrift`.`projekt` AS `projekt`,`gutschrift`.`waehrung` as `waehrung` + from `gutschrift` $where + "; + + if(is_null($tabellen) || in_array('auftrag', $tabellen))$ret[] = " + select `auftrag`.`id` AS `id`,`auftrag`.`adresse` AS `adresse`,`auftrag`.`datum` AS `datum`,`auftrag`.`belegnr` AS `belegnr`,`auftrag`.`status` AS `status`,`auftrag`.`land` AS `land`,'auftrag' AS `typ`,`auftrag`.`umsatz_netto` AS `umsatz_netto`,`auftrag`.`gesamtsumme` AS `umsatz_brutto`,`auftrag`.`erloes_netto` AS `erloes_netto`,`auftrag`.`deckungsbeitrag` AS `deckungsbeitrag`,`auftrag`.`provision_summe` AS `provision_summe`,`auftrag`.`vertriebid` AS `vertriebid`,`auftrag`.`gruppe` AS `gruppe`, `auftrag`.`projekt` AS `projekt`,`auftrag`.`waehrung` as `waehrung` + from `auftrag` $where + "; + if(is_null($tabellen) || in_array('bestellung', $tabellen))$ret[] = " + union all select `bestellung`.`id` AS `id`,`bestellung`.`adresse` AS `adresse`,`bestellung`.`datum` AS `datum`,`bestellung`.`belegnr` AS `belegnr`,`bestellung`.`status` AS `status`,`bestellung`.`land` AS `land`,'bestellung' AS `typ`,`bestellung`.`gesamtsumme` AS `umsatz_netto`,`bestellung`.`gesamtsumme` AS `umsatz_brutto`,'0' AS `erloes_netto`,'0' AS `deckungsbeitrag`,'0' AS `provision_summe`,'0' AS `vertriebid`,'0' AS `gruppe`, `bestellung`.`projekt` AS `projekt`,`bestellung`.`waehrung` as `waehrung` + from `bestellung` $where + "; + if(is_null($tabellen) || in_array('lieferschein', $tabellen))$ret[] = " + union all select `lieferschein`.`id` AS `id`,`lieferschein`.`adresse` AS `adresse`,`lieferschein`.`datum` AS `datum`,`lieferschein`.`belegnr` AS `belegnr`,`lieferschein`.`status` AS `status`,`lieferschein`.`land` AS `land`,'lieferschein' AS `typ`,'0' AS `umsatz_netto`,'0' AS `umsatz_brutto`,'0' AS `erloes_netto`,'0' AS `deckungsbeitrag`,'0' AS `provision_summe`,'0' AS `vertriebid`,'0' AS `gruppe`, `lieferschein`.`projekt` AS `projekt`,'' as `waehrung` + from `lieferschein` $where + "; + return ' ('.implode(' UNION ALL ', $ret).') '; + } + + function SQLPosBrutto($belegtab, $postab, $arttab) + { + return " sum( + (if($belegtab.ust_befreit = 0 OR ($belegtab.ust_befreit = 1 AND $belegtab.ustid <> '' AND $belegtab.ustid <> '0'), + ( if(ifnull($postab.steuersatz,-1) <0, + if($postab.umsatzsteuer = 'befreit',0, + if($postab.umsatzsteuer = 'ermaessigt',$belegtab.steuersatz_ermaessigt, + if($postab.umsatzsteuer = 'normal',$belegtab.steuersatz_normal, + if($arttab.umsatzsteuer = 'befreit',0, + if($arttab.umsatzsteuer = 'ermaessigt',$belegtab.steuersatz_ermaessigt, + $belegtab.steuersatz_normal + ) + ) + ) + ) + ) + ,$postab.steuersatz)),0)/100+1 + ) + * + $postab.menge *($postab.preis * (1-$postab.rabatt/100))) + "; + } + + function RechnungMitUmsatzsteuer($rechnung) + { + $docRow = $this->app->DB->SelectRow(sprintf('SELECT ust_befreit,ustid FROM rechnung WHERE id=%d LIMIT 1', $rechnung)); + return $docRow['ust_befreit'] == 0 + || ($docRow['ust_befreit'] == 1 && + $docRow['ustid'] ==''); + } + + function RechnungMitUmsatzeuer($rechnung) + { + return $this->RechnungMitUmsatzsteuer($rechnung); + } + + + function ProformarechnungMitUmsatzeuer($rechnung) + { + $docRow = $this->app->DB->SelectRow(sprintf('SELECT ust_befreit,ustid FROM proformarechnung WHERE id=%d LIMIT 1', $rechnung)); + return $docRow['ust_befreit'] == 0 + || ($docRow['ust_befreit'] == 1 && + $docRow['ustid'] ==''); + + // wenn lieferant DE dann mit 19% oder 7% einkaufen + // wenn lieferant in der EU kann man mit 0% bezahlen + + // wenn lieferant in der welt sowieso keine steuer sondern zoll + + // wenn wir von privat EU kaufen dann muss mit steuer gekauft werden! (SPAETER KANN ES SEIN) + return false; + } + + + function AngebotMitUmsatzeuer($angebot) + { + return $this->app->DB->Select("SELECT ust_befreit FROM angebot WHERE id='$angebot' LIMIT 1") == 0 + || ($this->app->DB->Select("SELECT ust_befreit FROM angebot WHERE id='$angebot' LIMIT 1") == 1 && + $this->app->DB->Select("SELECT ustid FROM angebot WHERE id='$angebot' LIMIT 1") ==""); + + // wenn lieferant DE dann mit 19% oder 7% einkaufen + // wenn lieferant in der EU kann man mit 0% bezahlen + // wenn lieferant in der welt sowieso keine steuer sondern zoll + + // wenn wir von privat EU kaufen dann muss mit steuer gekauft werden! (SPAETER KANN ES SEIN) + } + + + function BestellungMitUmsatzeuer($bestellung) + { + return $this->app->DB->Select("SELECT ust_befreit FROM bestellung WHERE id='$bestellung' LIMIT 1") == 0; + + // wenn lieferant DE dann mit 19% oder 7% einkaufen + // wenn lieferant in der EU kann man mit 0% bezahlen + + // wenn lieferant in der welt sowieso keine steuer sondern zoll + + // wenn wir von privat EU kaufen dann muss mit steuer gekauft werden! (SPAETER KANN ES SEIN) + + } + + + function BesteuerungKunde($adresse) + { + if($this->AdresseUSTCheck($adresse)==0){ + return 'steuer'; + } + + return ''; + + // steuer muss gezahlt werden! steuer, euexport, exporr + + // wenn kunde im export muss keine steuer bezahlt werden! + + // wenn kunde gepruefte ust id hat && lieferung nach EU geht (aber das land verlaesst!) + + } + + + + function CheckLieferantEU($adresse) + { + // lieferant aus der EU + $land = $this->app->DB->Select("SELECT land FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1"); + + } + + + function CheckKundeEU($adresse) + { + + } + + function checkCell($datum, $stunde, $adr_id){ + // ueberprueft ob in der Stunde eine Aufgabe zu erledigen ist + //echo $datum." ".$stunde."
"; + return $this->app->DB->SelectArr("SELECT aufgabe,adresse,prio + FROM aufgabe + WHERE DATE(startdatum) = '$datum' + AND HOUR(TIME(startzeit)) <= $stunde + AND HOUR(TIME(startzeit)) + stunden >= $stunde + AND (adresse = $adr_id OR adresse = 0) + OR + ((DATE_SUB('$datum', INTERVAL MOD(DATEDIFF('$datum',DATE_FORMAT(startdatum, '%Y:%m:%d')),intervall_tage) day)='$datum' + AND DATE_SUB('$datum', INTERVAL MOD(DATEDIFF('$datum',DATE_FORMAT(startdatum, '%Y:%m:%d')),intervall_tage) day) + > abgeschlossen_am + AND intervall_tage>0 AND (adresse=$adr_id OR adresse=0)) + AND HOUR(TIME(startzeit)) <= $stunde AND HOUR(TIME(startzeit)) + stunden >= $stunde) + OR ( DATE (abgabe_bis) = '$datum' AND abgeschlossen=0 AND adresse = $adr_id AND HOUR(TIME(startzeit)) = $stunde) + LIMIT 1"); // letztes OR von Bene! + } + + function WebmailSetReadStatus($mailid,$boolean) + { + $this->app->DB->Update("UPDATE emailbackup_mails SET gelesen = ".($boolean?1:0)." WHERE id = $mailid"); + } + + function checkPDF($file,$maxSize=0,$x=0,$y=0) + { + + return ""; + } + function checkFile($file,$filetype,$maxSize=0) + { + if($file!='') + { + if(is_array($file)){ + $pfad = $file['tmp_name']; + } + else { + $pfad = $file; + } + } + + $dbtype = mime_content_type($pfad); + + if($dbtype==='application/octet-stream' && $filetype==='application/pdf'){ + return ''; + } + + if($dbtype!=$filetype){ + return "Falscher Dateityp! Es wird $filetype erwartet aber $dbtype wurde übergeben!"; + } + + return ''; + } + + + + public function checkImage($file,$maxSize=0,$x=0,$y=0,$typcheck=2) + { + // Prueft ein Bild auf Dateigroesse, Hoehe und Breite + if($file!='') + { + if(is_array($file)){ + $pfad = $file['tmp_name']; + } + else { + $pfad = $file; + } + } + $typ = GetImageSize($pfad); + $size = $file['size']; + + + if($maxSize==0){ + $fileSizeLimit = 16777216; // 16MB in BYTE, 100MB stehen in der upload_max_size + } + else{ + $fileSizeLimit = $maxSize; + } + + //if(0 < $typ[2] && $typ[2] < 4) + if($typ[2]==$typcheck) + { + if($size<$fileSizeLimit) + { + if($typ[0]>$x && $x!=0){ + $error = 'Das Bild ist zu breit.'; + } + if($typ[1]>$y && $y!=0){ + $error = 'Das Bild ist zu hoch.'; + }else{ + $error = ''; + } + }else{ + $error = 'Die Datei darf eine Größe von ' . ($fileSizeLimit / 8388608) . ' MB nicht überschreiten.'; + } + }else{ + $error = 'Die Datei muss vom korrekten Typ sein'; + } + return $error; + } + + public function uploadSettigsImage($file, $name) + { + if(empty($file) || empty($name) || empty($file['tmp_name'])) + { + return false; + } + $pfad = $file['tmp_name']; + $typ = @GetImageSize($pfad); + + // Bild hochladen + if($filehandle = fopen($pfad,'r')){ + $filedata = fread($filehandle, @filesize($pfad)); + $dbtype = $typ['mime']; + fclose($filehandle); + }else{ + return false; + } + $pfad2 = $this->GetUSERDATA(); + if(!is_dir($pfad2)) + { + if(!mkdir($pfad2) && !is_dir($pfad2)) + { + return false; + } + } + $pfad2 .= '/dms/'; + if(!is_dir($pfad2)) + { + if(!mkdir($pfad2) && !is_dir($pfad2)) + { + return false; + } + } + $pfad2 .= $this->app->Conf->WFdbname; + if(!is_dir($pfad2)) + { + if(!mkdir($pfad2) && !is_dir($pfad2)) + { + return false; + } + } + if(file_put_contents($pfad2.'/'.$name, $filedata)){ + return array('image' => base64_encode($filedata), 'type' => $dbtype); + } + return false; + } + + public function uploadImageIntoDB($file) + { + // Wandelt ein Bild fuer einen LONGBLOB um + $pfad = $file['tmp_name']; + $typ = @GetImageSize($pfad); + + // Bild hochladen + $filehandle = fopen($pfad,'r'); + $filedata = base64_encode(fread($filehandle, @filesize($pfad))); + $dbtype = $typ['mime']; + fclose($filehandle); + return array('image'=>$filedata,'type'=>$dbtype); + } + + + function GetEinkaufspreisWaehrung($id, $menge, $waehrung='', &$originalwaehrung=null, &$originalpreis=null, $adresse = '') + { + $artikelRow = $this->app->DB->SelectRow( + sprintf( + 'SELECT adresse,verwendeberechneterek,berechneterekwaehrung,berechneterek,produktion, stueckliste FROM artikel WHERE id = %d LIMIT 1 ', + (int)$id + ) + ); + if($adresse == '') { + $adresse = $artikelRow['adresse']; + } + if($waehrung == '') { + $waehrung = 'EUR'; + } + if($artikelRow['verwendeberechneterek']) + { + $originalwaehrung = (String)$artikelRow['berechneterekwaehrung']; + if($originalwaehrung === '') { + $originalwaehrung = 'EUR'; + } + $originalpreis = $artikelRow['berechneterek']; + if($originalwaehrung === $waehrung) { + return $originalpreis; + } + $kurs = $this->GetWaehrungUmrechnungskurs($originalwaehrung,$waehrung); + if($kurs==0) { + $kurs=1; + } + return $originalpreis * $kurs; + } + + + // wenn produktionsartikel + $produktion = $artikelRow['produktion']; + $stueckliste = $artikelRow['stueckliste']; + + if($produktion) { + } + else if($stueckliste==1)// && $juststueckliste!=1) + { + $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC LIMIT 1"); + if(!$eka) { + $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC LIMIT 1"); + } + if(!$eka) { + $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge LIMIT 1"); + } + if($eka && $eka[0]['preis'] != 0) + { + if($eka[0]['waehrung'] == '') { + $eka[0]['waehrung'] = 'EUR'; + } + $originalwaehrung = $eka[0]['waehrung']; + $originalpreis = $eka[0]['preis']; + if($eka[0]['waehrung'] == $waehrung) { + return $originalpreis; + } + return $originalpreis * $this->GetWaehrungUmrechnungskurs($originalwaehrung,$waehrung); + } + return $this->GetEinkaufspreisStuecklisteWaehrung($id, $waehrung); + } + + $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC LIMIT 1"); + if(!$eka) { + $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC LIMIT 1"); + } + if(!$eka) { + $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis>=NOW() OR ifnull(gueltig_bis,'0000-00-00')='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge LIMIT 1"); + } + if(!$eka) { + return 0; + } + if($eka[0]['waehrung'] == '') { + $eka[0]['waehrung'] = 'EUR'; + } + $originalwaehrung = $eka[0]['waehrung']; + $originalpreis = $eka[0]['preis']; + if($eka[0]['waehrung'] == $waehrung) { + return $originalpreis; + } + return $originalpreis * $this->GetWaehrungUmrechnungskurs($originalwaehrung,$waehrung); + } + + function GetEinkaufspreisArr($id, $menge, $adresse, $waehrung = "EUR", $auchpreisegrmenge = false) + { + $ek = $this->app->DB->SelectRow("SELECT * FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by waehrung = '$waehrung' DESC, waehrung = '' DESC, ab_menge DESC LIMIT 1"); + if(!$ek && $auchpreisegrmenge)$ek = $this->app->DB->SelectRow("SELECT * FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER by waehrung = '$waehrung' DESC, waehrung = '' DESC, ab_menge ASC LIMIT 1"); + if(!$ek)return; + + if($ek['preis'] <=0) + { + $ek2 = $this->app->DB->SelectRow("SELECT * FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' + AND (gueltig_bis>=NOW() OR ifnull(gueltig_bis,'0000-00-00')='0000-00-00') AND geloescht=0 ORDER by waehrung = '$waehrung' DESC, waehrung = '' DESC,preis LIMIT 1"); + if($ek2)return $ek2; + } + return $ek; + } + + function GetEinkaufspreis($id,$menge,$adresse="") + { + // wenn produktionsartikel + $prodStueckliste = $this->app->DB->SelectRow("SELECT produktion, stueckliste FROM artikel WHERE id='$id' LIMIT 1"); + $produktion = $prodStueckliste['produktion']; + $stueckliste = $prodStueckliste['stueckliste']; + + if($produktion && $stueckliste) { + } + else if($stueckliste==1)// && $juststueckliste!=1) + { + $ek = $this->GetEinkaufspreisStueckliste($id); + } + else { + $ek = $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR ifnull(gueltig_bis,'0000-00-00')='0000-00-00') AND geloescht=0 ORDER by ab_menge DESC LIMIT 1"); + if($ek <=0) + { + $ek = $this->app->DB->Select("SELECT preis FROM einkaufspreise WHERE artikel='$id' AND ab_menge<='$menge' + AND (gueltig_bis>=NOW() OR ifnull(gueltig_bis,'0000-00-00')='0000-00-00') AND geloescht=0 ORDER by preis LIMIT 1"); + + if($ek <=0) + { + $ek = $this->app->DB->Select("SELECT MIN(preis) FROM einkaufspreise WHERE artikel='$id' + AND (gueltig_bis>=NOW() OR ifnull(gueltig_bis,'0000-00-00')='0000-00-00') AND geloescht=0 "); + } + } + } + return $ek; + } + + function Wechselkurs($von,$zu,$datum) + { + return 1.3; + } + + + function Rabatt($betrag,$rabatt) + { + $result = $betrag*(100-$rabatt)/100; + return number_format($result, 4, '.', ''); + } + + function GetGruppen($adresse) + { + $tmp = $this->app->DB->SelectArr("SELECT * FROM adresse_rolle WHERE adresse='$adresse' AND (bis > NOW() OR ifnull(bis,'0000-00-00')='0000-00-00') AND parameter > 0 AND objekt='Gruppe'"); + if(empty($tmp)) { + return null; + } + $result = []; + foreach($tmp as $row) { + $result[] = $row['parameter']; + } + + return $result; + } + + function MonatsListe($sprache = 'deutsch') { + + $monatsListe[1] = 'Januar'; + $monatsListe[2] = 'Februar'; + $monatsListe[3] = 'März'; + $monatsListe[4] = 'April'; + $monatsListe[5] = 'Mai'; + $monatsListe[6] = 'Juni'; + $monatsListe[7] = 'Juli'; + $monatsListe[8] = 'August'; + $monatsListe[9] = 'September'; + $monatsListe[10] = 'Oktober'; + $monatsListe[11] = 'November'; + $monatsListe[12] = 'Dezember'; + + return $monatsListe; + + } + + function IsSpezialVerkaufspreis($artikel,$menge,$adresse=0,$waehrung='EUR') + { + $vkarr = null; + $guenstigste_vk = $this->Firmendaten('guenstigste_vk'); + $gruppenarr = $this->GetGruppen($adresse); + $sql_erweiterung = ''; + if(!empty($gruppenarr)) + { + $sql_erweiterung .= ' OR v.gruppe IN ('.implode(' ', $gruppenarr).') '; + } + if(!$guenstigste_vk) { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <= '$menge' AND + (v.gueltig_bis > NOW() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= curdate() OR v.gueltig_ab = '0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse') + ORDER by ab_menge ASC, preis DESC LIMIT 1"); + } + if(empty($vkarr)) { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <= '$menge' AND + (v.gueltig_bis > NOW() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= curdate() OR v.gueltig_ab = '0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' $sql_erweiterung) + ORDER by ab_menge ASC, preis DESC LIMIT 1"); + } + + if(empty($vkarr)) { + return false; + } + + $letzte_menge = 0;//$vkarr[0][ab_menge]; + foreach($vkarr as $vkrow) { + if($vkrow['adresse']==$adresse && $vkrow['adresse']>0 && $vkrow['art']==='Kunde') { + return true; + } + if($vkrow['gruppe'] > 0 && $vkrow['art']==='Gruppe') { + return true; + } + } + + return false; + } + + var $preisliste; + + function GeneratePreisliste($artikel,$adresse,$rabatt=0, $waehrung = '') + { + $waehrungorig = $waehrung; + $sqlwaehrung = ""; + if($waehrung <> '') + { + if($waehrung == 'EUR') + { + $sqlwaehrung = " AND (v.waehrung = '$waehrung' OR v.waehrung = '') "; + }else{ + $sqlwaehrung = " AND v.waehrung = '$waehrung' "; + } + } + $sqlwaehrung2 = $sqlwaehrung; + if($waehrungorig == '')$sqlwaehrung2 = ''; + $vkarr = null; + $guenstigste_vk = $this->Firmendaten('guenstigste_vk'); + + $keinrabatterlaubt = $this->app->DB->Select("SELECT keinrabatterlaubt FROM artikel WHERE id='".$artikel."' LIMIT 1"); + + $gruppenarray = $this->GetGruppen($adresse); + if($gruppenarray) + { + if(count($gruppenarray)>0) $sql_erweiterung = " OR "; + for($gi=0;$giapp->DB->SelectArr("SELECT v.*,if((v.adresse > 0 OR v.gruppe > 0),v.preis,(v.preis*(100-$rabatt))/100.0) as rabattpreis FROM verkaufspreise v WHERE + (v.gueltig_bis > NOW() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR v.gueltig_ab='0000-00-00') $sqlwaehrung2 AND v.artikel='".$artikel."' AND (v.adresse='$adresse' AND v.art='Kunde') ORDER by rabattpreis ASC"); + if(!$vkarr) + { + $vkarr = $this->app->DB->SelectArr("SELECT v.*,if((v.adresse > 0 OR v.gruppe > 0),v.preis,(v.preis*(100-$rabatt))/100.0) as rabattpreis FROM verkaufspreise v WHERE + (v.gueltig_bis > NOW() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR v.gueltig_ab='0000-00-00') $sqlwaehrung2 AND v.artikel='".$artikel."' AND (v.adresse='$adresse' $sql_erweiterung ) ORDER by rabattpreis ASC"); + } + + } + if(!$vkarr) + { + // reinsortieren + $vkarr = $this->app->DB->SelectArr("SELECT v.*,if((v.adresse > 0 OR v.gruppe > 0),v.preis,(v.preis*(100-$rabatt))/100.0) as rabattpreis FROM verkaufspreise v WHERE + (v.gueltig_bis > NOW() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR v.gueltig_ab='0000-00-00') AND v.artikel='".$artikel."' $sqlwaehrung2 AND (v.adresse='$adresse' $sql_erweiterung OR + ((v.adresse='' OR v.adresse='0') AND v.art='Kunde')) ORDER by rabattpreis ASC"); + } + + $letzter_preis = 0; + + // einmal rueckwaerts aufraeumen + $cvkarr = !empty($vkarr)?count($vkarr):0; + for($vi=0;$vi<$cvkarr;$vi++) + { + // rabatt rausrechnen + if($keinrabatterlaubt!="1") + $vkarr[$vi]['preis'] = $vkarr[$vi]['rabattpreis']; + + if($vkarr[$vi]['preis'] > $letzter_preis && (($vkarr[$vi]['ab_menge'] < $letzte_menge) || $vi==0)) + { + // preis behalten + $letzte_menge = $vkarr[$vi]['ab_menge']; + $letzter_preis = $vkarr[$vi]['preis']; + } else { + // preis loeschen + $vkarr[$vi]['ab_menge']=0; + $vkarr[$vi]['preis']=0; + } + } + + for($vi=0;$vi<$cvkarr;$vi++) + { + if($vkarr[$vi]['ab_menge'] > 0) + $vkarr2[] = $vkarr[$vi]; + } + $vkarr = array_reverse($vkarr2); + // an schluss pruefen und unnötige rausschmeissen + return $vkarr; + } + + /** + * @param int $artikel + * @param float $menge + * @param int $gruppe + * @param null|string $waehrung + * + * @return array|null + */ + public function getVerkaufspreisGruppeArr($artikel, $menge, $gruppe, $waehrung = null) + { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= curdate() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND v.gruppe='$gruppe' AND v.art='Gruppe' + ".($waehrung===null?'':" AND v.waehrung = '$waehrung' ")." + ORDER by ab_menge DESC, preis ASC"); + if(!$vkarr && ($menge < 1)) { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <=1 AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= curdate() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND v.gruppe='$gruppe' AND v.art='Gruppe' + ".($waehrung===null?'':" AND v.waehrung = '$waehrung' ")." + ORDER by ab_menge DESC, preis ASC"); + } + if(empty($vkarr)) { + return null; + } + $letzte_menge = -1; //$vkarr[0][ab_menge]; + $letzter_preis = 99999999999; + + foreach($vkarr as $vk) + { + if(($vk['ab_menge'] > $letzte_menge) && ($vk['preis']<$letzter_preis) && (($menge < 1?1:$menge) >= $vk['ab_menge'])) + { + $letzte_menge = $vk['ab_menge']; + $letzter_preis = $vk['preis']; + $letztesarr = $vk; + } + } + + if(isset($letztesarr)) { + return $letztesarr; + } + return null; + } + + function GetVerkaufspreisGruppe($artikel, $menge, $gruppe = 0,$waehrung='EUR') + { + $vkarr = null; + if($gruppe) + { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= curdate() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND v.gruppe='$gruppe' AND v.art='Gruppe' + ORDER by ab_menge DESC, preis ASC"); + if(!$vkarr && ($menge < 1))$vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <=1 AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= curdate() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND v.gruppe='$gruppe' AND v.art='Gruppe' + ORDER by ab_menge DESC, preis ASC"); + } + if(!$vkarr) + { + return $this->GetVerkaufspreis($artikel, $menge, 0, $waehrung); + } + + $letzte_menge = -1; //$vkarr[0][ab_menge]; + $letzter_preis = 99999999999; + + for($vi=0;$vi $letzte_menge) && ($vkarr[$vi]['preis']<$letzter_preis) && (($menge < 1?1:$menge) >= $vkarr[$vi]['ab_menge'])) + { + $letzte_menge = $vkarr[$vi]['ab_menge']; + $letzter_preis = $vkarr[$vi]['preis']; + if($returnarr)$letztesarr = $vkarr[$vi]; + } + } + + if($returnarr) + { + if(isset($letztesarr))return $letztesarr; + return null; + } + + if($letzter_preis==99999999999) + $letzter_preis=0; + + return $letzter_preis; + } + + function GetVerkaufspreisKunde($artikel,$menge,$adresse=0,$waehrung='EUR',$returnarr = false) + { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= curdate() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND v.adresse='$adresse' AND v.art='Kunde' + ORDER by ab_menge DESC, preis ASC"); + + if(!$vkarr && ($menge < 1))$vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <=1 AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= curdate() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND v.adresse='$adresse' AND v.art='Kunde' + ORDER by ab_menge DESC, preis ASC"); + + $letzte_menge = -1; //$vkarr[0][ab_menge]; + $letzter_preis = 99999999999; + + for($vi=0;$vi $letzte_menge) && ($vkarr[$vi]['preis']<$letzter_preis) && (($menge < 1?1:$menge) >= $vkarr[$vi]['ab_menge'])) + { + $letzte_menge = $vkarr[$vi]['ab_menge']; + $letzter_preis = $vkarr[$vi]['preis']; + if($returnarr)$letztesarr = $vkarr[$vi]; + } + } + + if($returnarr) + { + if(isset($letztesarr))return $letztesarr; + return null; + } + + if($letzter_preis==99999999999) + $letzter_preis=0; + + return $letzter_preis; + } + + function GetVerkaufspreisWaehrung($artikel,$menge,$adresse=0) + { + $gruppenarr = $this->GetGruppen($adresse); + $cgruppenarr = !empty($gruppenarr)?count($gruppenarr):0; + for($i=0;$i<$cgruppenarr;$i++) + { + if($gruppenarr[$i]>0) + $sql_erweiterung .= " OR gruppe='".$gruppenarr[$i]."' "; + } + + $vkarr = null; + $guenstigste_vk = $this->Firmendaten('guenstigste_vk'); + $gruppenarr = $this->GetGruppen($adresse); + $cgruppenarr = !empty($gruppenarr)?count($gruppenarr):0; + for($i=0;$i<$cgruppenarr;$i++) + { + if($gruppenarr[$i]>0) + $sql_erweiterung .= " OR gruppe='".$gruppenarr[$i]."' "; + } + if(!$guenstigste_vk) + { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' AND v.art='Kunde') ORDER by preis ASC, ab_menge DESC"); + + if(!$vkarr && ($menge < 1))$vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <= 1 AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' AND v.art='Kunde') ORDER by preis ASC, ab_menge DESC"); + + if(!$vkarr) + { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' $sql_erweiterung) ORDER by ab_menge DESC, preis ASC"); + if(!$vkarr && ($menge < 1))$this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <=1 AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' $sql_erweiterung) ORDER by ab_menge DESC, preis ASC"); + } + + } + if(!$vkarr) + { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' $sql_erweiterung OR + ((v.adresse='' OR v.adresse='0') AND v.art='Kunde')) ORDER by ab_menge DESC, preis ASC"); + if(!$vkarr && ($menge < 1))$vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <=1 AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' AND (v.adresse='$adresse' $sql_erweiterung OR + ((v.adresse='' OR v.adresse='0') AND v.art='Kunde')) ORDER by ab_menge DESC, preis ASC"); + } + + $letzte_menge = -1; //$vkarr[0][ab_menge]; + $letzter_preis = 99999999999; + $cvkarr = !empty($vkarr)?count($vkarr):0; + for($vi=0;$vi<$cvkarr;$vi++) + { + if(($vkarr[$vi]['ab_menge'] > $letzte_menge) && ($vkarr[$vi]['preis']<$letzter_preis) && (($menge < 1?1:$menge) >= $vkarr[$vi]['ab_menge'])) + { + $letzte_menge = $vkarr[$vi]['ab_menge']; + $letzter_preis = $vkarr[$vi]['preis']; + $waehrung = $vkarr[$vi]['waehrung']; + } + } + + return $waehrung; + } + + + function GetVerkaufspreisBrutto($artikel,$menge,$adresse=0,$waehrung='EUR', &$returnwaehrung = '') + { + $tmp = $this->app->DB->SelectArr("SELECT *,nummer as artikelnummer, name_de as artikel_name_de FROM artikel WHERE id='$artikel' LIMIT 1"); + $projekt = $tmp[0]['projekt']; + if($tmp[0]['umsatzsteuer']=="ermaessigt") + $steuer = ($this->GetStandardSteuersatzErmaessigt($projekt) + 100)/100.0; + elseif($tmp[0]['umsatzsteuer']=="befreit") + $steuer = 1; + else + $steuer = ($this->GetStandardSteuersatzNormal($projekt) + 100)/100.0; + return $this->GetVerkaufspreis($artikel,$menge,$adresse,$waehrung)*$steuer; + } + + function GetSteuersatzBelegpos($doctype, $doctypeid, $pos) + { + $arr = $this->app->DB->SelectArr("SELECT steuersatz, umsatzsteuer, artikel FROM $doctype"."_position WHERE id = '$pos' LIMIT 1"); + if($arr) + { + if(!is_null($arr[0]['steuersatz']) && $arr[0]['steuersatz'] >= 0)return $arr[0]['steuersatz']; + if($arr[0]['umsatzsteuer'] == 'befreit')return 0; + if($arr[0]['umsatzsteuer'] == 'ermaessigt')return (float)$this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); + if($arr[0]['umsatzsteuer'] != '')return (float)$this->app->DB->Select("SELECT steuersatz_normal FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); + $umsatzsteuer = $this->app->DB->Select("SELECT umsatzsteuer FROM artikel WHERE id = '".$arr[0]['artikel']."' LIMIT 1"); + if($umsatzsteuer == 'befreit')return 0; + if($umsatzsteuer == 'ermaessigt')return (float)$this->app->DB->Select("SELECT steuersatz_ermaessigt FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); + return (float)$this->app->DB->Select("SELECT steuersatz_normal FROM $doctype WHERE id = '$doctypeid' LIMIT 1"); + } + } + + function GetVerkaufspreis($artikel,$menge,$adresse=0,$waehrung='', &$returnwaehrung = '',$returnarr = false, $auchpreisegrmenge = false) + { + $waehrungold = $waehrung; + $firmendatenwaehrung = $this->app->erp->Firmendaten('waehrung'); + if($firmendatenwaehrung == '')$firmendatenwaehrung = 'EUR'; + if($waehrung == '')$waehrung = $firmendatenwaehrung; + if($waehrung == $firmendatenwaehrung) + { + $extrasql = " AND (v.waehrung = '$waehrung' OR v.waehrung = '') "; + }else{ + $extrasql = " AND v.waehrung = '$waehrung' "; + } + + $extrasql2 = $extrasql; + if($waehrungold == '')$extrasql2 = ''; + + $vkarr = null; + $guenstigste_vk = $this->Firmendaten('guenstigste_vk'); + $gruppenarr = $this->GetGruppen($adresse); + $sql_erweiterung = ''; + if($gruppenarr) { + for ($i = 0; $i < count($gruppenarr); $i++) { + if ($gruppenarr[$i] > 0) + $sql_erweiterung .= " OR gruppe='" . $gruppenarr[$i] . "' "; + } + } + if(!$guenstigste_vk) + { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND + (v.gueltig_bis >= CURDATE() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR v.gueltig_ab='0000-00-00') AND v.artikel='".$artikel."' $extrasql2 AND (v.adresse='$adresse' AND v.art='Kunde') ORDER by ab_menge DESC, preis ASC"); + + if(!$vkarr && ($menge < 1))$vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <= 1 AND + (v.gueltig_bis >= CURDATE() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR v.gueltig_ab='0000-00-00') AND v.artikel='".$artikel."' $extrasql2 AND (v.adresse='$adresse' AND v.art='Kunde') ORDER by ab_menge DESC, preis ASC"); + + if(!$vkarr) + { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND + (v.gueltig_bis >= CURDATE() OR v.gueltig_bis='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR v.gueltig_ab='0000-00-00') AND v.artikel='".$artikel."' $extrasql2 AND ((v.art <> 'Kunde' AND (0 $sql_erweiterung )) OR + ((v.adresse='$adresse') AND v.art='Kunde')) ORDER by ab_menge DESC, preis ASC"); + if(!$varr && ($menge < 1)) + { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <= 1 AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' $extrasql2 AND ((v.art <> 'Kunde' AND (0 $sql_erweiterung )) OR + ((v.adresse='$adresse') AND v.art='Kunde')) ORDER by ab_menge DESC, preis ASC"); + } + } + } + if(!$vkarr) + { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <='$menge' AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' $extrasql AND ((v.art <> 'Kunde' AND (0 $sql_erweiterung )) OR + ((v.adresse='' OR v.adresse='0' OR v.adresse='$adresse') AND v.art='Kunde')) ORDER by preis ASC, ab_menge DESC"); + + if(!$vkarr && ($menge < 1)) + { + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE v.ab_menge <=1 AND + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' $extrasql AND ((v.art <> 'Kunde' AND (0 $sql_erweiterung )) OR + ((v.adresse='' OR v.adresse='0' OR v.adresse='$adresse') AND v.art='Kunde')) ORDER by preis ASC, ab_menge DESC"); + } + } + + if(!$vkarr && $auchpreisegrmenge){ + $vkarr = $this->app->DB->SelectArr("SELECT * FROM verkaufspreise v WHERE + (v.gueltig_bis >= CURDATE() OR ifnull(v.gueltig_bis,'0000-00-00')='0000-00-00') AND (v.gueltig_ab <= CURDATE() OR ifnull(v.gueltig_ab,'0000-00-00')='0000-00-00') AND v.artikel='".$artikel."' $extrasql AND ((v.art <> 'Kunde' AND (0 $sql_erweiterung )) OR + ((v.adresse='' OR v.adresse='0' OR v.adresse='$adresse') AND v.art='Kunde')) ORDER by ab_menge ASC LIMIT 1"); + }else{ + $auchpreisegrmenge = false; + } + $letzte_menge = -1; //$vkarr[0][ab_menge]; + $letzter_preis = 99999999999; + if($vkarr) + { + for($vi=0;$vi $letzte_menge) && ($vkarr[$vi]['preis']<$letzter_preis) && ((($menge >= 1?$menge:1) >= $vkarr[$vi]['ab_menge'])|| $auchpreisegrmenge)) + { + $letzte_menge = $vkarr[$vi]['ab_menge']; + $letzter_preis = $vkarr[$vi]['preis']; + $letzte_gruppe = $vkarr[$vi]['gruppe']; + if($returnarr)$letztesarr = $vkarr[$vi]; + $returnwaehrung = $vkarr[$vi]['waehrung']?$vkarr[$vi]['waehrung']:'EUR'; + } + } + } + + if($letzter_preis==99999999999) + $letzter_preis=0; + if($returnarr) + { + if(isset($letztesarr))return $letztesarr; + return null; + } + + return $letzter_preis; + } + + function GetEinkaufspreisStatistikWaehrung($id,$waehrung = '', $max=false, $lvl = 0) + { + if($lvl > 5)return 0; + //Falls Einkaufspreis definiert + + $menge = 1; + $eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND adresse='$adresse' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC, preis ".($max?'DESC':'ASC')." LIMIT 1"); + if(!$eka)$eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND ab_menge<='$menge' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC LIMIT 1"); + if(!$eka)$eka = $this->app->DB->SelectArr("SELECT preis, waehrung FROM einkaufspreise WHERE artikel='$id' AND (gueltig_bis>=NOW() OR gueltig_bis='0000-00-00') AND geloescht=0 ORDER BY waehrung = '$waehrung' DESC, waehrung = '', ab_menge DESC LIMIT 1"); + $originalwaehrung = $eka[0]['waehrung']; + $originalpreis = $eka[0]['preis']; + if($eka[0]['waehrung'] == $waehrung)return $originalpreis; + $ep = $originalpreis * $this->GetWaehrungUmrechnungskurs($originalwaehrung,$waehrung); + if($ep)return $ep; + + + + $sql = "SELECT FORMAT( + SUM( + + ( + SELECT e.preis * + + if(e.waehrung != '',ifnull( + (SELECT kurs FROM waehrung_umrechnung WHERE waehrung_von = '$waehrung' AND waehrung_nach = e.waehrung AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1), + ifnull((SELECT 1/kurs FROM waehrung_umrechnung WHERE waehrung_nach = '$waehrung' AND waehrung_von = e.waehrung AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1),1)), + ifnull((SELECT kurs FROM waehrung_umrechnung WHERE waehrung_von = '$waehrung' AND waehrung_nach = 'EUR' AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1), + ifnull((SELECT 1/kurs FROM waehrung_umrechnung WHERE waehrung_nach = '$waehrung' AND waehrung_von = 'EUR' AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1),1)) + + ) + FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') ORDER BY waehrung = '$waehrung' DESC, waehrung = '' DESC, preis ".($min?'ASC':'DESC')." LIMIT 1 + + ) + + *s.menge) + ,2) + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id'"; + + $preis = $this->app->DB->Select($sql); + //Kein Einkaufspreis definiert => Stückliste + + $sql = "SELECT s.artikel + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id' and a.stueckliste = '1' + "; + $startikel = $this->app->DB->SelectArr($sql); + if($startikel) + { + foreach($startikel as $art) + $preis += $this->GetEinkaufspreisStatistikWaehrung($art['artikel'],$waehrung,$max, $lvl + 1); + } + + return $preis; + + } + + + function GetEinkaufspreisStatistik($id,$max=false, $lvl = 0) + { + if($lvl > 5)return 0; + //Falls Einkaufspreis definiert + if($max) + { + $ep = $this->app->DB->Select("SELECT FORMAT(MAX(e.preis),2) FROM einkaufspreise e where e.artikel = $id AND (e.objekt='Standard' OR e.objekt='')"); + if($ep)return $ep; + } else { + $ep = $this->app->DB->Select("SELECT FORMAT(MIN(e.preis),2) FROM einkaufspreise e where e.artikel = $id AND (e.objekt='Standard' OR e.objekt='')"); + if($ep)return $ep; + } + //Kein Einkaufspreis definiert => Stückliste + if($max) { + $preis_max = 0; + $ids = $this->app->DB->SelectArr("SELECT s.artikel from stueckliste s LEFT JOIN artikel a ON a.id=s.artikel WHERE s.stuecklistevonartikel='$id' and a.stueckliste != '1' "); + if($ids) + { + foreach($ids as $v)$subwherea[] = $v['artikel']; + $swhere = " (a.id = ". implode(' OR a.id = ',$subwherea).")"; + $sql = " + + SELECT format( SUM(if (ep>0,ep,vp)),2) + from (SELECT MAX(e.preis) as ep, MAX(v.preis) vp FROM artikel a left join einkaufspreise e on a.id = e.artikel left join verkaufspreise v on a.id = v.artikel + WHERE $swhere ) q + + "; + $preis_max = $this->app->DB->Select($sql); + } + $sql = "SELECT s.artikel + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id' and a.stueckliste = '1' + "; + $startikel = $this->app->DB->SelectArr($sql); + if($startikel) + { + foreach($startikel as $art) + $preis_max += $this->GetEinkaufspreisStatistik($art['artikel'],$max, $lvl + 1); + } + return $preis_max; + } + $sql = " SELECT format( SUM(if (ep>0,ep,vp)),2) + from (SELECT MIN(e.preis) as ep, MIN(v.preis) vp FROM artikel a left join einkaufspreise e on a.id = e.artikel left join verkaufspreise v on a.id = v.artikel + WHERE a.id in ( SELECT s.artikel from stueckliste s LEFT JOIN artikel a ON a.id=s.artikel WHERE s.stuecklistevonartikel='$id' and a.stueckliste != '1') ) q"; + $preis = $this->app->DB->Select($sql); + $sql = "SELECT s.artikel + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id' and a.stueckliste = '1' + "; + $startikel = $this->app->DB->SelectArr($sql); + if($startikel) + { + foreach($startikel as $art) + $preis += $this->GetEinkaufspreisStatistik($art['artikel'],$max, $lvl + 1); + } + + return $preis; + } + + function GetEinkaufspreisStuecklisteWaehrung($id, $waehrung = '', $min = false) + { + if($waehrung == '')$waehrung = 'EUR'; + $sql = "SELECT + SUM( + + ( + SELECT e.preis * + + if(e.waehrung != '',ifnull( + (SELECT kurs FROM waehrung_umrechnung WHERE waehrung_von = '$waehrung' AND waehrung_nach = e.waehrung AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1), + ifnull((SELECT 1/kurs FROM waehrung_umrechnung WHERE waehrung_nach = '$waehrung' AND waehrung_von = e.waehrung AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1),1)), + ifnull((SELECT kurs FROM waehrung_umrechnung WHERE waehrung_von = '$waehrung' AND waehrung_nach = 'EUR' AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1), + ifnull((SELECT 1/kurs FROM waehrung_umrechnung WHERE waehrung_nach = '$waehrung' AND waehrung_von = 'EUR' AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1),1)) + + ) + FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis >= CURDATE() OR ifnull(e.gueltig_bis, '0000-00-00') = '0000-00-00') ORDER BY waehrung = '$waehrung' DESC, waehrung = '' DESC, preis ".($min?'ASC':'DESC')." LIMIT 1 + + ) + + *s.menge) + + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id'"; + + + $preis_max = round((float)$this->app->DB->Select($sql),2); + + $sql = "SELECT + SUM( + + ( + SELECT e.preis * + + if(e.waehrung != '',ifnull( + (SELECT kurs FROM waehrung_umrechnung WHERE waehrung_von = '$waehrung' AND waehrung_nach = e.waehrung AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1), + ifnull((SELECT 1/kurs FROM waehrung_umrechnung WHERE waehrung_nach = '$waehrung' AND waehrung_von = e.waehrung AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1),1)), + ifnull((SELECT kurs FROM waehrung_umrechnung WHERE waehrung_von = '$waehrung' AND waehrung_nach = 'EUR' AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1), + ifnull((SELECT 1/kurs FROM waehrung_umrechnung WHERE waehrung_nach = '$waehrung' AND waehrung_von = 'EUR' AND (gueltig_bis >= curdate() OR isnull(gueltig_bis) OR gueltig_bis = '0000-00-00' ) LIMIT 1),1)) + + ) + FROM verkaufspreise e WHERE e.artikel=s.artikel AND (e.objekt='Standard' OR e.objekt='') AND (e.gueltig_bis >= CURDATE() OR ifnull(e.gueltig_bis, '0000-00-00') = '0000-00-00') ORDER BY waehrung = '$waehrung' DESC, waehrung = '' DESC, preis ".($min?'ASC':'DESC')." LIMIT 1 + + ) + + *s.menge) + + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id' AND a.stueckliste = 1"; + + return round($preis_max + (float)$this->app->DB->Select($sql),2); + + } + + function GetEinkaufspreisStueckliste($id,$max=false) + { + $sql = "SELECT SUM( + (SELECT MAX(e.preis) FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00') AND e.geloescht=0)*s.menge) + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id'"; + + $preis_max = $this->app->DB->Select($sql); + + $sql = "SELECT SUM( + (SELECT MAX(v.preis) FROM verkaufspreise v WHERE v.artikel=s.artikel AND a.stueckliste=1 AND (v.objekt='Standard' OR v.objekt=''))*s.menge) + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id'"; + + $preis_max = $preis_max + $this->app->DB->Select($sql); + + $sql = "SELECT SUM( + (SELECT MIN(e.preis) FROM einkaufspreise e WHERE e.artikel=s.artikel AND (e.gueltig_bis>=NOW() OR e.gueltig_bis='0000-00-00') AND e.geloescht=0)*s.menge) + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id'"; + + $preis = $this->app->DB->Select($sql); + $sql = "SELECT SUM( + (SELECT MIN(v.preis) FROM verkaufspreise v WHERE v.artikel=s.artikel AND a.stueckliste=1 AND (v.objekt='Standard' OR v.objekt=''))*s.menge) + FROM stueckliste s + LEFT JOIN artikel a ON a.id=s.artikel + WHERE s.stuecklistevonartikel='$id'"; + + $preis = $preis + $this->app->DB->Select($sql); + + if($max) return $preis_max; + else return $preis; + } + + + /** + * @param string $name Filename + * @param string $base64encoded if true return base64_encoded File + * @return string Filecontent + */ + public function getSettingsFile($name, $base64encoded = false) + { + if(empty($name)) + { + return ''; + } + $pfad = $this->GetUSERDATA().'/dms/'.$this->app->Conf->WFdbname.'/'.$name; + if(!is_file($name)) + { + $ret = $this->Firmendaten($name); + if(empty($ret)) + { + return ''; + } + if($base64encoded) + { + return $ret; + } + return base64_decode($ret); + } + $ret = (String)file_get_contents($pfad); + if(!$base64encoded) + { + return $ret; + } + return base64_encode($ret); + } + + + /** + * @param array $file File from Formr + * @param string $name Filename + * @return array|bool content and type or false if failed + */ + public function uploadSettigsFile($file, $name) + { + if(empty($file) || empty($name) || empty($file['tmp_name'])) + { + return false; + } + $pfad = $file['tmp_name']; + + $dbtype = mime_content_type($pfad); + // Bild hochladen + $filehandle = fopen($pfad,'r'); + if(!empty($filehandle)){ + $filedata = fread($filehandle, @filesize($pfad)); + fclose($filehandle); + }else{ + return false; + } + $pfad2 = $this->GetUSERDATA(); + if(!is_dir($pfad2)) + { + if(!mkdir($pfad2) && !is_dir($pfad2)) + { + return false; + } + } + $pfad2 .= '/dms/'; + if(!is_dir($pfad2)) + { + if(!mkdir($pfad2) && !is_dir($pfad2)) + { + return false; + } + } + $pfad2 .= $this->app->Conf->WFdbname; + if(!is_dir($pfad2)) + { + if(!mkdir($pfad2) && !is_dir($pfad2)) + { + return false; + } + } + if(file_put_contents($pfad2.'/'.$name,$filedata)) + { + return array('file'=>base64_encode($filedata),'type'=>$dbtype); + } + + return false; + } + + public function uploadFileIntoDB($file) + { + // Wandelt ein Bild fuer einen LONGBLOB um + $pfad = $file['tmp_name']; + + $dbtype = mime_content_type($pfad); + // Bild hochladen + $filehandle = fopen($pfad,'r'); + $filedata = base64_encode(fread($filehandle, @filesize($pfad))); + fclose($filehandle); + return array('file'=>$filedata,'type'=>$dbtype); + } + + // im format hh:mm + public function ZeitinMenge($zeit) + { + $zeit = explode(':', $zeit); + + $komma = round(100/(60/$zeit[1]),0); + + $komma = str_pad($komma, 2 ,'0', STR_PAD_LEFT); + + return $zeit[0].','.$komma; + } + + function get_time_difference($start_time_o, $end_time_o){ + $start_time = explode(':', $start_time_o); + $end_time = explode(':', $end_time_o); + + $start_time_stamp = mktime($start_time[0], $start_time[1], 0, 0, 0, 0); + $end_time_stamp = mktime($end_time[0], $end_time[1], 0, 0, 0, 0); + + $time_difference = $end_time_stamp - $start_time_stamp; + + return gmdate('H:i', $time_difference); + } + + function is_html($str){ + $html = array('A','ABBR','ACRONYM','ADDRESS','APPLET','AREA','B','BASE','BASEFONT','BDO','BIG','BLOCKQUOTE','BODY','BR','BUTTON','CAPTION','CENTER','CITE','CODE','COL','COLGROUP','DD','DEL','DFN','DIR','DIV','DL','DT','EM','FIELDSET','FONT','FORM','FRAME','FRAMESET','H1','H2','H3','H4','H5','H6','HEAD','HR','HTML','I','IFRAME','IMG','INPUT','INS','ISINDEX','KBD','LABEL','LEGEND','LI','LINK','MAP','MENU','META','NOFRAMES','NOSCRIPT','OBJECT','OL','OPTGROUP','OPTION','P','PARAM','PRE','Q','S','SAMP','SCRIPT','SELECT','SMALL','SPAN','STRIKE','STRONG','STYLE','SUB','SUP','TABLE','TBODY','TD','TEXTAREA','TFOOT','TH','THEAD','TITLE','TR','TT','U','UL','VAR'); + return preg_match_all("~(<\/?)\b(".implode('|',$html).")\b([^>]*>)~i",$str,$c); + } + + function ImportCreateLieferadresse($adresse,$data) + { + $this->app->DB->Insert("INSERT INTO lieferadressen (id,adresse) VALUES ('','$adresse')"); + $id = $this->app->DB->GetInsertID(); + + if($data['land']=="") $data['land']='DE'; + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE lieferadressen SET $key='".$this->app->DB->real_escape_string($value)."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + function ImportCreateAnsprechpartner($adresse,$data) + { + $this->app->DB->Insert("INSERT INTO ansprechpartner (id,adresse) VALUES ('','$adresse')"); + $id = $this->app->DB->GetInsertID(); + if (!empty($id)) { + $this->app->erp->RunHook('contact_person_created', 1, $id); + } + if($data['land']=="") $data['land']='DE'; + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE ansprechpartner SET $key='".$this->app->DB->real_escape_string($value)."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + function ImportCreateAdresse($data, $uf8 = true) + { + $this->app->DB->Insert("INSERT INTO adresse (id) VALUES ('')"); + $id = $this->app->DB->GetInsertID(); + + if($data['firma']=="") $data['firma']=1; + if($data['projekt']=="") $data['projekt']=1; + + $columns = $this->app->DB->GetColArray("adresse"); + foreach ($columns as $keyi => $columnname) + $arr_columns[] = $columnname; + + + foreach ($data as $key => $value) { + if(in_array($key, $arr_columns)) + { + if($tmp_fields!="") $tmp_fields .=","; + if($uf8) + { + $tmp_fields .= " $key='".$this->ConvertForDBUTF8($value)."' "; + } else { + $tmp_fields .= " $key='".$value."' "; + } + } + } + $this->app->DB->Update("UPDATE adresse SET $tmp_fields WHERE id='$id'"); + return $id; + } + + + function ImportCreateArtikel($data, $utf8 = true) + { + $this->app->DB->Insert("INSERT INTO artikel (id) VALUES ('')"); + $id = $this->app->DB->GetInsertID(); + + if($data['firma']=="") $data['firma']=1; + if($data['projekt']=="") $data['projekt']=1; + + foreach ($data as $key => $value) { + if($utf8) + { + $this->app->DB->Update("UPDATE artikel SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); + }else{ + $this->app->DB->Update("UPDATE artikel SET $key='".$this->app->DB->real_escape_string( $value)."' WHERE id='$id' LIMIT 1"); + } + } + return $id; + } + + // nicht mehr verwenden + function ImportCreateEinkaufspreis($data) { + $this->app->DB->Insert("INSERT INTO einkaufspreise (id) VALUES ('')"); + $id = $this->app->DB->GetInsertID(); + + if($data['firma']=="") $data['firma']=1; + if($data['projekt']=="") $data['projekt']=1; + + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE einkaufspreise SET $key='".$this->ConvertForDBUFT8($value)."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + // nicht mehr verwenden + function ImportCreateVerkaufspreis($data) { + $this->app->DB->Insert("INSERT INTO verkaufspreise (id) VALUES ('')"); + $id = $this->app->DB->GetInsertID(); + + if($data['firma']=="") $data['firma']=1; + if($data['projekt']=="") $data['projekt']=1; + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE verkaufspreise SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + function ImportCreateUser($data) { + $this->app->DB->Insert("INSERT INTO user (id) VALUES ('')"); + $id = $this->app->DB->GetInsertID(); + + if($data['firma']=="") $data['firma']=1; + if($data['projekt']=="") $data['projekt']=1; + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE user SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + + function ImportCreateBestellung($data) { + $this->app->DB->Insert("INSERT INTO bestellung (id,angelegtam) VALUES ('',NOW())"); + $id = $this->app->DB->GetInsertID(); + + if($data['firma']=="") $data['firma']=1; + if($data['projekt']=="") $data['projekt']=1; + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE bestellung SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + function ImportCreateRechnung($data) { + $this->app->DB->Insert("INSERT INTO rechnung (id,angelegtam) VALUES ('',NOW())"); + $id = $this->app->DB->GetInsertID(); + + if($data['firma']=="") $data['firma']=1; + if($data['projekt']=="") $data['projekt']=1; + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE rechnung SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + function ImportCreateAngebot($data) { + $this->app->DB->Insert("INSERT INTO angebot (id,angelegtam) VALUES ('',NOW())"); + $id = $this->app->DB->GetInsertID(); + + if($data['firma']=="") $data['firma']=1; + if($data['projekt']=="") $data['projekt']=1; + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE angebot SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + function ImportCreateAuftrag($data) { + $this->app->DB->Insert("INSERT INTO auftrag (id,angelegtam) VALUES ('',NOW())"); + $id = $this->app->DB->GetInsertID(); + + if($data['firma']=="") $data['firma']=1; + if($data['projekt']=="") $data['projekt']=1; + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE auftrag SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + function ImportCreateLieferschein($data) { + $this->app->DB->Insert("INSERT INTO lieferschein (id,angelegtam) VALUES ('',NOW())"); + $id = $this->app->DB->GetInsertID(); + + if($data['firma']=="") $data['firma']=1; + if($data['projekt']=="") $data['projekt']=1; + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE lieferschein SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + function ImportCreateGutschrift($data) { + $this->app->DB->Insert("INSERT INTO gutschrift (id,angelegtam) VALUES ('',NOW())"); + $id = $this->app->DB->GetInsertID(); + + if($data['firma']=="") $data['firma']=1; + if($data['projekt']=="") $data['projekt']=1; + + foreach ($data as $key => $value) { + $this->app->DB->Update("UPDATE gutschrift SET $key='".$this->ConvertForDBUTF8($value)."' WHERE id='$id' LIMIT 1"); + } + return $id; + } + + function CheckArtikel($id) + { + $standardlieferant = $this->app->DB->Select("SELECT adresse FROM artikel WHERE id='$id' LIMIT 1"); + $standardlieferant_ek = $this->app->DB->Select("SELECT adresse FROM einkaufspreise WHERE artikel='$id' AND geloescht!=1 AND standard=1 LIMIT 1"); + if($standardlieferant <= 0 || ($standardlieferant_ek!=$standardlieferant && $standardlieferant > 0 && $standardlieferant_ek > 0)) + { + $standardlieferant = $this->app->DB->Select("SELECT adresse FROM einkaufspreise WHERE artikel='$id' AND geloescht!=1 + AND (gueltig_bis='0000-00-00' OR gueltig_bis >= NOW()) ORDER by standard DESC LIMIT 1"); + + if($standardlieferant > 0) + { + $this->app->DB->Update("UPDATE artikel SET adresse='$standardlieferant' WHERE id='$id' LIMIT 1"); + } + } + } + + + function FirmenDatenStandard() + { + + if($this->app->DB->Select("SELECT COUNT(id) FROM firmendaten") > 0) return; + $this->app->DB->Insert("INSERT INTO `firmendaten` (`id`,`firma`, `logo`, `briefpapier`, `signatur`, `datum`, `steuersatz_normal`, `steuersatz_zwischen`, `steuersatz_ermaessigt`, `steuersatz_starkermaessigt`, `steuersatz_dienstleistung`, `deviceserials`, `lizenz`, `schluessel`, `mlm_mindestbetrag`, `mlm_letzter_tag`, `mlm_erster_tag`, `mlm_letzte_berechnung`, `mlm_01`, `mlm_02`, `mlm_03`, `mlm_04`, `mlm_05`, `mlm_06`, `mlm_07`, `mlm_08`, `mlm_09`, `mlm_10`, `mlm_11`, `mlm_12`, `mlm_13`, `mlm_14`, `mlm_15`, `zahlung_rechnung_sofort_de`, `zahlung_rechnung_de`, `zahlung_vorkasse_de`, `zahlung_lastschrift_de`, `zahlung_nachnahme_de`, `zahlung_bar_de`, `zahlung_paypal_de`, `zahlung_amazon_de`, `zahlung_kreditkarte_de`, `zahlung_ratenzahlung_de`, `briefpapier2`, `freifeld1`, `freifeld2`, `freifeld3`, `freifeld4`, `freifeld5`, `freifeld6`, `firmenfarbehell`, `firmenfarbedunkel`, `firmenfarbeganzdunkel`, `navigationfarbe`, `navigationfarbeschrift`, `unternavigationfarbe`, `unternavigationfarbeschrift`, `firmenlogo`, `rechnung_header`, `lieferschein_header`, `angebot_header`, `auftrag_header`, `gutschrift_header`, `bestellung_header`, `arbeitsnachweis_header`, `provisionsgutschrift_header`, `rechnung_footer`, `lieferschein_footer`, `angebot_footer`, `auftrag_footer`, `gutschrift_footer`, `bestellung_footer`, `arbeitsnachweis_footer`, `provisionsgutschrift_footer`, `eu_lieferung_vermerk`, `export_lieferung_vermerk`, `zahlung_amazon_bestellung_de`, `zahlung_billsafe_de`, `zahlung_sofortueberweisung_de`, `zahlung_secupay_de`, `adressefreifeld1`, `adressefreifeld2`, `adressefreifeld3`, `adressefreifeld4`, `adressefreifeld5`, `adressefreifeld6`, `adressefreifeld7`, `adressefreifeld8`, `adressefreifeld9`, `adressefreifeld10`, `zahlung_eckarte_de`, `benutzername`, `passwort`, `host`, `port`,`mailssl`,`devicekey`,`mailanstellesmtp`,`layout_iconbar`,`name`,`firmenfarbe`,`betreffszeile`,`dokumententext`,`bcc1`,`bcc2`) VALUES + (1, 1, '', '', 'LS0NCk11c3RlcmZpcm1hIEdtYkgNCk11c3RlcndlZyA1DQpELTEyMzQ1IE11c3RlcnN0YWR0DQoNClRlbCArNDkgMTIzIDEyIDM0IDU2IDcNCkZheCArNDkgMTIzIDEyIDM0IDU2IDc4DQoNCk5hbWUgZGVyIEdlc2VsbHNjaGFmdDogTXVzdGVyZmlybWEgR21iSA0KU2l0eiBkZXIgR2VzZWxsc2NoYWZ0OiBNdXN0ZXJzdGFkdA0KDQpIYW5kZWxzcmVnaXN0ZXI6IE11c3RlcnN0YWR0LCBIUkIgMTIzNDUNCkdlc2Now6RmdHNmw7xocnVuZzogTWF4IE11c3Rlcm1hbg0KVVN0LUlkTnIuOiBERTEyMzQ1Njc4OQ0KDQpBR0I6IGh0dHA6Ly93d3cubXVzdGVyZmlybWEuZGUvDQo=', '0000-00-00 00:00:00', 19.00, 7.00, 7.00, 7.00, 7.00, '', '', '', 50.00, NULL, NULL, NULL, 15.00, 20.00, 28.00, 32.00, 36.00, 40.00, 44.00, 44.00, 44.00, 44.00, 50.00, 54.00, 45.00, 48.00, 60.00, 'Rechnung zahlbar sofort.', 'Rechnung zahlbar innerhalb {ZAHLUNGSZIELTAGE} Tage bis zum {ZAHLUNGBISDATUM}.', '', '', '', '', '', '', '', '', NULL, '', '', '', '', '', '', '', '', '', '#e0e0e0', '#686868', '', '', NULL, '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '','mustermann3','passwort','smtp.ihr_mail_server.de','25','1','','0','0','Musterfirma GmbH','#ececec','9','9','',''"); + $tmpid = $this->app->DB->GetInsertID(); + + $obj = $this->app->erp->LoadModul('firmendaten'); + if($obj)$obj->FirmendatenBriefpapiervorlage(); + } + + function pruefeDBgen($echo = false) + { + $dir = dirname(__FILE__).'/../objectapi/mysql/_gen'; + if(file_exists($dir)) + { + if ($handle = opendir($dir)) { + while (false !== ($entry = readdir($handle))) + { + if(strpos($entry, 'object.gen.') !== false) + { + $table = str_replace('.php','',str_replace('object.gen.','',$entry)); + $Felder = $this->app->DB->SelectArr("Describe ".addslashes($table)); + if(true) + { + if(isset($class_methods))unset($class_methods); + if($fh = fopen($dir.'/'.$entry, 'r')) + { + $classfound = false; + $fertig = false; + + while(!$fertig && $line = fgets($fh)) + { + + if($classfound) + { + + if(strpos($line, '=') !== false) + { + + $funktion = trim(substr($line, 0,strpos($line, '='))); + $class_methods[] = str_replace(';','',$funktion); + } + elseif(strpos($line, '$this->app->DB->Update') !== false) + { + + $fertig = true; + } + } else { + if(strpos($line,'$sql = "UPDATE') !== false) + { + + $classfound = true; + } + } + + + + } + fclose($fh); + + } + + + $class = 'ObjGen'.ucfirst($table); + } + if($Felder) { + //if(!class_exists($class)) include_once($dir.'/'.$entry); + + //$tmp = ; + //if(class_exists($class)){ + if($classfound && isset($class_methods)) + { + //$class_methods = get_class_methods(new $class($this->app)); + //$class_methods = get_class_methods($class); + //echo "Class: ".$class."\r\n"; + foreach($class_methods as $key => $val) + { + if(strpos($val,'Get') !== false) + { + $found = false; + foreach($Felder as $k => $v) + { + if('get'.strtolower($v['Field']) == strtolower($val))$found = true; + } + if(!$found)$Feldnichtgefunden[$table][] = $val; + //echo "Feld ".substr($val,3)." nicht gefunden\r\n"; + + } + + } + foreach($Felder as $k => $v) + { + if($v['Field'] != 'id'){ + $found = false; + foreach($class_methods as $key => $val) + { + if(strtolower($v['Field']) == strtolower($val))$found = true; + } + if(!$found)$keineFunktion[$table][] = $v['Field']; + } + } + } + + } else { + if($classfound && isset($class_methods)) + $tablenotfound[] = $table; + + } + + $ret = false; + if(isset($tablenotfound))$ret['tablenotfound'] = $tablenotfound; + if(isset($Feldnichtgefunden))$ret['FeldernichtinDatenbank'] = $Feldnichtgefunden; + if(isset($keineFunktion))$ret['FeldernichtinGen'] = $keineFunktion; + if($echo) + { + if($ret){ + print_r($ret); + }else{ + echo "Alles OK"; + } + } + @closedir($handle); + return $ret; + + } + + + + } + @closedir($handle); + return false; + } + @closedir($handle); + } + } + + function pdfmirrorZuArchiv($id) + { + $checkmirror = $this->app->DB->SelectRow("SELECT p.* FROM pdfmirror_md5pool p WHERE id = '$id' LIMIT 1"); + if($checkmirror) + { + $filegroup = @filegroup($this->app->Conf->WFuserdata); + $fileowner = @fileowner($this->app->Conf->WFuserdata); + $dir = $this->app->Conf->WFuserdata."/pdfmirror/".$this->app->Conf->WFdbname."/".$checkmirror['table_name']; + $dir_archiv = $this->app->Conf->WFuserdata."/pdfarchiv/".$this->app->Conf->WFdbname."/".$checkmirror['table_name']; + if(!is_dir($dir)) + { + return false; + } + + $vars = glob($dir."/".($checkmirror['checksum']?$checkmirror['checksum'].'_':'').$checkmirror['table_id'].'_*.pdf'); + if(!$vars) + { + return false; + } + + $path_parts = pathinfo($vars[0]); + + $datei = $path_parts['basename']; + $dateia = explode('_', $path_parts['filename'],($checkmirror['checksum']?4:3)); + $belegnummer = $dateia[($checkmirror['checksum']?3:2)]; + if(strlen($belegnummer) < 3 && !is_numeric($belegnummer)) + { + $belegnr = $this->app->DB->Select("SELECT belegnr FROM ".$this->app->DB->real_escape_string(strtolower($checkmirror['table_name']))." WHERE id = '".$checkmirror['table_id']."' LIMIT 1"); + if($belegnr)$belegnummer.=$belegnr; + + } + + $datum = $dateia[($checkmirror['checksum']?2:1)]; + if(strlen($datum) == 8) + { + $datum = $datum[6].$datum[7].'.'.$datum[4].$datum[5].'.'.$datum[0].$datum[1].$datum[2].$datum[3]; + }else{ + $datum = ''; + } + $doctyporig = $belegnummer.($datum?' von '.$datum:''); + + if(!file_exists($dir."/".$checkmirror['checksum'].'_'.$checkmirror['table_id'])) + if(!is_dir($this->app->Conf->WFuserdata."/pdfarchiv")) + { + mkdir($this->app->Conf->WFuserdata."/pdfarchiv",0700); + if($fileowner && $fileowner != fileowner($this->app->Conf->WFuserdata."/pdfarchiv"))chown($this->app->Conf->WFuserdata."/pdfarchiv", $fileowner); + if($filegroup && $filegroup != filegroup($this->app->Conf->WFuserdata."/pdfarchiv"))chgrp($this->app->Conf->WFuserdata."/pdfarchiv", $filegroup); + + } + if(!is_dir($dir_archiv)) + { + if(!mkdir($dir_archiv, 0700)) + { + //echo "Konnte ".$dir_archiv." nicht erstellen\r\n"; + return false; + } else { + if($fileowner && $fileowner != fileowner($dir_archiv))chown($dir_archiv, $fileowner); + if($filegroup && $filegroup != filegroup($dir_archiv))chgrp($dir_archiv, $filegroup); + } + } + $dir_archivnew = Briefpapier::getPDFfolder($dir_archiv,$checkmirror['table_id'], $datei,false,true); + if($dir_archivnew === false) + { + $dir_archivnew = $dir_archiv."/".$datei; + } + //if(!copy($dir."/".$datei, $dir_archiv."/".$datei)) + if(!copy($dir."/".$datei, $dir_archivnew)) + { + //echo "Kopieren von ".$dir."/".$datei." nach ".$dir_archiv."/".$datei." fehlgeschlagen\r\n"; + return false; + } else { + /* + if($fileowner && $fileowner != fileowner($dir_archiv."/".$datei))chown($dir_archiv."/".$datei, $fileowner); + if($filegroup && $filegroup != filegroup($dir_archiv."/".$datei))chgrp($dir_archiv."/".$datei, $filegroup); */ + } + + $this->app->DB->Insert("INSERT INTO pdfarchiv (zeitstempel,checksum, table_id, table_name, bearbeiter, erstesoriginal, dateiname,doctypeorig, belegnummer) + values ('".$checkmirror['zeitstempel']."','".$this->app->DB->real_escape_string($checkmirror['checksum'])."','".$this->app->DB->real_escape_string($checkmirror['table_id'])."','".$this->app->DB->real_escape_string($checkmirror['table_name'])."','".$this->app->DB->real_escape_string($checkmirror['bearbeiter'])."','".$checkmirror['erstesoriginal']."', + + '".$datei."','".$this->app->DB->real_escape_string($doctyporig)."','".$this->app->DB->real_escape_string($belegnummer)."') + + "); + if($this->app->DB->error()){ + throw new Exception("SQL Error: ".$this->app->DB->error()." SQL: INSERT INTO pdfarchiv (zeitstempel,checksum, table_id, table_name, bearbeiter, erstesoriginal, dateiname,doctypeorig, belegnummer) + values ('" . $checkmirror['zeitstempel'] . "','" . $this->app->DB->real_escape_string($checkmirror['checksum']) . "','" . $this->app->DB->real_escape_string($checkmirror['table_id']) . "','" . $this->app->DB->real_escape_string($checkmirror['table_name']) . "','" . $this->app->DB->real_escape_string($checkmirror['bearbeiter']) . "','" . $checkmirror['erstesoriginal'] . "', + + '" . $datei . "','" . $this->app->DB->real_escape_string($doctyporig) . "','" . $this->app->DB->real_escape_string($belegnummer) . "') + + "); + } + $newid = $this->app->DB->GetInsertID(); + if($newid)$this->app->DB->Update("UPDATE pdfmirror_md5pool set pdfarchiv_id = '$newid' WHERE id = '$id' LIMIT 1"); + return $newid; + } + return false; + } + function AnzeigeAbweichendeBezeichnung($typ) + { + switch($typ) + { + case "auftrag": + $tmp = $this->app->erp->Beschriftung("bezeichnungauftragersatz"); + break; + case "angebot": + $tmp = $this->app->erp->Beschriftung("bezeichnungangebotersatz"); + break; + case "rechnung": + $tmp = $this->app->erp->Beschriftung("bezeichnungrechnungersatz"); + break; + case "lieferschein": + $tmp = $this->app->erp->Beschriftung("bezeichnunglieferscheinersatz"); + break; + case "bestellung": + $tmp = $this->app->erp->Beschriftung("bezeichnungbestellungersatz"); + break; + + + case "proformarechnung": + $tmp = $this->app->erp->Beschriftung("bezeichnungproformarechnungersatz"); + break; + + } + if($tmp == "") $tmp = "Abweichende Bezeichnung"; + $this->app->Tpl->Set('ABWEICHENDEBEZEICHNUNGBESCHRIFTUNG',$tmp); + } + + + + function AnzeigeFreifelderPositionen($form = null) + { + + $module = $this->app->Secure->GetGET('module'); + + switch($module) { + case 'angebot': $kurz='an'; break; + case 'auftrag': $kurz='ab'; break; + case 'rechnung': $kurz='re'; break; + case 'gutschrift': $kurz='gs'; break; + case 'lieferschein': $kurz='ls'; break; + case 'bestellung': $kurz='be'; break; + case 'proformarechnung': $kurz='pr'; break; + case 'preisanfrage': $kurz='pa'; break; + case 'produktion': $kurz='pd'; break; + default: + $kurz = ''; + break; + } + + for($i=1;$i<=40;$i++) { + if($this->Firmendaten('freifeld'.$i.$kurz)!='1') { + $this->app->Tpl->Set('FREIFELD'.$i.'START',''); + } + elseif($this->Firmendaten('freifeld'.$i.'typ') === 'select') { + $id = $this->app->Secure->GetGET('id'); + $options = explode('|',$this->Firmendaten('freifeld'.$i)); + unset($options[0]); + if($form !== null) { + $field = new HTMLSelect('freifeld'.$i,0,'freifeld'.$i,'','','0'); + + foreach($options as $option) { + $option = explode('=>', $option); + $key = trim($option[0]); + $value = !empty($option[1])?trim($option[1]):''; + $field->AddOption($key, $value); + } + $form->NewField($field); + } + }elseif($this->Firmendaten('freifeld'.$i.'typ') === 'checkbox') { + $fieldName = 'freifeld'.$i; + $field = new HTMLCheckbox($fieldName, '','','1'); + $form->NewField($field); + if(!empty($this->app->Secure->GetPOST('nummer')) && empty($this->app->Secure->GetPOST($fieldName))) { + $form->HTMLList[$fieldName]->htmlvalue = '0'; + } + }elseif($this->Firmendaten('freifeld'.$i.'typ') === 'mehrzeilig') { + $field = new HTMLTextarea('freifeld'.$i, 5,75); + $form->NewField($field); + } + } + } + + function OpenstreetmapGetLangLat($apikey,$query) + { + $query = urlencode(html_entity_decode($query)); + $url = sprintf('https://api.openrouteservice.org/geocode/search?text=%s&api_key=%s', $query, $apikey); + + $timeout=0; + while(1) + { + $timeout++; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + 'Content-Type: application/json', + 'Charset: utf-8') + ); + $result = curl_exec($ch); + if(strpos($result,"404 page not")===false) break; + if($timeout > 10) { + $this->app->erp->LogFile("Openstreetmap GetLangLat Timeout: $url"); + break; + } + } + $data = json_decode((string)$result); + return $data->{'features'}[0]->{'geometry'}->{'coordinates'}; + } + + function OpenstreetmapGetDistance($apikey,$coord1,$coord2) + { + $url = "https://api.openrouteservice.org/directions?coordinates=".$coord1[0]."%2C".$coord1[1]."%7C".$coord2[0]."%2C".$coord2[1]."&profile=driving-car&preference=fastest&units=km&language=de&geometry=true&geometry_format=encodedpolyline&geometry_simplify=false&instructions=true&instructions_format=text&elevation=false&options=%7B%7D&api_key=$apikey"; + + $timeout=0; + while(1) + { + $timeout++; + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($ch, CURLOPT_HTTPHEADER, array( + 'Content-Type: application/json', + 'Charset: utf-8') + ); + $result = curl_exec($ch); + if(strpos($result,"404 page not")===false) break; + if($timeout > 10) { + $this->app->erp->LogFile("Openstreetmap Distance Timeout: $url"); + break; + } + + } + $data = json_decode((string)$result); + return $data->{'routes'}[0]->{'summary'}->{'distance'}; + } + + function GetFloat($str) { + if(strstr($str, ',') !== false) { + $str = str_replace(['.',','], ['','.'], $str); // replace dots (thousand seps) with blancs + } + + if(preg_match("#([0-9\.]+)#", $str, $match)) { // search for number that may contain '.' + return (float)$match[0]; + } + return (float)$str; // take some last chances with floatval + } + + + + function CheckboxEntwurfsmodus($doctype,$id) + { + $datumentwurf = $this->app->DB->Select("SELECT datum FROM $doctype WHERE id='$id' LIMIT 1"); + $datumentwurf = str_replace('-','',$datumentwurf); + if($datumentwurf == date('Ymd')) { + return ''; + } + $anzeigedatum = $this->app->DB->Select("SELECT DATE_FORMAT(datum,'%d.%m.%Y') FROM $doctype WHERE id='$id' LIMIT 1"); + + $check = $this->app->User->GetParameter($doctype."_create_entwurfsdatumuebernehmen"); + $extra = " Entwurfsdatum vom $anzeigedatum übernehmen"; + $this->app->YUI->AutoSaveUserParameter($doctype."_create_entwurfsdatumuebernehmen",$doctype."_create_entwurfsdatumuebernehmen"); + + return $extra; + } + + function ZeiterfassungAllowEdit($datum_db) + { + if(!$this->app->erp->Firmendaten('zeiterfassung_schliessen')) { + return true; + } + + if($this->app->erp->RechteVorhanden('zeiterfassung', 'bearbeitenerlauben')) { + return true; + } + + if($datum_db != '--' && $datum_db != '0000-00-00' && $datum_db != '') { + if(strtotime(date('Y-m-d')) - strtotime($datum_db) > 86400*(int)$this->app->erp->Firmendaten('zeiterfassung_schliessentage')) { + return false; + } + } + + return true; + } + + function GetBundeslaender($land = '', $bundesland = '') + { + if($land == '') { + $land = $this->app->erp->Firmendaten('land'); + } + $arr = $this->app->DB->SelectArr("SELECT * FROM bundesstaaten WHERE land = '".$this->app->DB->real_escape_string($land)."' AND iso <> '' ORDER BY land, bundesstaat"); + if(empty($arr)) { + return null; + } + $ret = null; + foreach($arr as $v) + { + if($land == $v['iso'] || $land == '') + { + if($v['aktiv'] || $v['iso'] == $bundesland) + { + $ret[$v['iso']] = $v['bundesland']; + } + } + } + return $ret; + } + + + function GetPlacetelSipuid() + { + $username = $this->app->User->GetUsername(); + $accounts = $this->GetKonfiguration("placetel_list_accounts"); + + $tmp = explode(PHP_EOL,trim($accounts)); + $sipuid = false; + + if($this->RechteVorhanden('placetel','call')) + { + foreach($tmp as $row) { + $subtmp = explode(':',trim($row)); + + if(count($subtmp)>0) + { + $subtmp[0] = trim($subtmp[0]); + $subtmp[1] = trim($subtmp[1]); + + if($subtmp[0]==$username) + { + $sipuid = $subtmp[1]; + break; + } + } + } + } + return $sipuid; + } +} + + +function parse_csv($str,$parse_split_parameter="") +{ + global $parse_split; + if($parse_split_parameter!="") $parse_split=$parse_split_parameter; + //match all the non-quoted text and one series of quoted text (or the end of the string) + //each group of matches will be parsed with the callback, with $matches[1] containing all the non-quoted text, + //and $matches[3] containing everything inside the quotes + $str = preg_replace_callback('/([^"]*)("((""|[^"])*)"|$)/s', 'parse_csv_quotes', $str); + + //remove the very last newline to prevent a 0-field array for the last line + $str = preg_replace('/\n$/', '', $str); + + //split on LF and parse each line with a callback + return array_map('parse_csv_line', explode("\n", $str)); + } + + //replace all the csv-special characters inside double quotes with markers using an escape sequence + function parse_csv_quotes($matches) + { + global $parse_split; + if($parse_split=='') { + $parse_split=';'; + } + //anything inside the quotes that might be used to split the string into lines and fields later, + //needs to be quoted. The only character we can guarantee as safe to use, because it will never appear in the unquoted text, is a CR + //So we're going to use CR as a marker to make escape sequences for CR, LF, Quotes, and Commas. + $str = str_replace(["\r","\n",'""',$parse_split], ["\rR","\rN","\rQ","\rC"], !empty($matches[3])?$matches[3]:''); + + //The unquoted text is where commas and newlines are allowed, and where the splits will happen + //We're going to remove all CRs from the unquoted text, by normalizing all line endings to just LF + //This ensures us that the only place CR is used, is as the escape sequences for quoted text + return preg_replace('/\r\n?/', "\n", !empty($matches[1])?$matches[1]:'') . $str; + } + +//split on comma and parse each field with a callback +function parse_csv_line($line) +{ + global $parse_split; + if($parse_split=="") $parse_split=";"; + return array_map('parse_csv_field', explode($parse_split, $line)); +} + +//restore any csv-special characters that are part of the data +function parse_csv_field($field) { + global $parse_split; + if($parse_split=="") $parse_split=";"; + $field = str_replace("\rC", $parse_split, $field); + $field = str_replace("\rQ", '"', $field); + $field = str_replace("\rN", "\n", $field); + $field = str_replace("\rR", "\r", $field); + return $field; +} + + +function code2utf($num) +{ + if ($num < 128) return chr($num); + if ($num < 2048) return chr(($num >> 6) + 192) . chr(($num & + 63) + 128); + if ($num < 65536) return chr(($num >> 12) + 224) . + chr((($num >> 6) & 63) + 128) . chr(($num & 63) + 128); + if ($num < 2097152) return chr(($num >> 18) + 240) . + chr((($num >> 12) & 63) + 128) . chr((($num >> 6) & 63) + 128) . chr(($num + & 63) + 128); + return ''; +}