OpenXE/www/lib/class.erpapi.php

41215 lines
1.7 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/*
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
*
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
*
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
* to obtain the text of the corresponding license version.
*
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
*/
?>
<?php
use Xentral\Components\MailClient\Client\MimeMessageFormatterInterface;
use Xentral\Core\LegacyConfig\ConfigLoader;
use Xentral\Modules\SystemMailClient\MailClientConfigProvider;
use Xentral\Modules\SystemMailClient\MailClientProvider;
use Xentral\Modules\SystemMailer\Data\EmailBackupAccount;
use Xentral\Components\Mailer\Data\EmailRecipient;
use Xentral\Modules\SuperSearch\Scheduler\SuperSearchFullIndexTask;
class erpAPI
{
var $verbrauchslagervorhanden = null;
var $commonreadonly=0;
var $menucounter=0;
var $mail_error=0;
var $beschriftung_sprache="";
var $check_column_missing_run=false;
var $check_column_missing=array();
var $check_index_missing=array();
var $logtime;
var $firstlogtime;
var $firmendaten;
var $cache;
var $menuquery;
var $BriefpapierHintergrunddisable;
var $kurzueberschrift;
var $kurzueberschrifturl;
var $kurzueberschrift1;
var $kurzueberschrift2;
var $backlink;
var $CheckColumnTableCache;
var $Changelog;
var $aktprozessstarter;
private static $license;
private $modulvorhandenlist = null;
private static $ioncubeproperties = null;
public static $lasttime = 0;
public $uebersetzungId;
public $uebersetzungBeschriftung;
/** @var array $moduleActions */
protected $moduleActions = [];
/** @var string $cronjobObjDb */
protected $cronjobObjDb;
/** @var array $appList */
protected $appList = [];
/** @var ApplicationCore $app */
public function __construct($app)
{
$this->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('&uuml;','&ouml;','&auml;','&Uuml;','&Ouml;','&Auml;','&szlig;','"'),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('&amp;','&lt;','&gt;'), array('&amp;amp;','&amp;lt;','&amp;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: <span style="width: expression(alert('Ping!'));"></span>
$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('#</*\w+:\w[^>]*+>#i', '', $data);
do
{
// Remove really unwanted tags
$old_data = $data;
$data = preg_replace('#</*(?:applet|b(?:ase|gsound|link)|embed|frame(?:set)?|i(?:frame|layer)|l(?:ayer|ink)|meta|object|s(?:cript|tyle)|title|xml)[^>]*+>#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&uuml;r das Modul '.ucfirst($add).' lizenziert, es werden aber '.($anzadmin + $rechte + 1).' ben&ouml;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&uuml;r das Modul '.ucfirst($add).' lizenziert, es werden aber '.($anzadmin + $rechte + $neueuser).' ben&ouml;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']] = (!empty($menu)?count($menu):0)-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']] = (!empty($menu)?count($menu):0)-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', '<a href="'.$this->backlink.'">'.$this->kurzueberschrift.'</a>');
}
if($headline2) {
if(is_string($headline2)) {
$this->kurzueberschrift2 = ' <b>'.(stripos($headline2,'</a>')?$headline2:htmlspecialchars($headline2)).'</b>';
$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 .= '<b>'.htmlspecialchars($v).'</b>';
}
}
$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,'.',',')";
}
static function add_alias(string $text, $alias = false) {
if (empty($alias)) {
return($text);
}
else {
return ($text." as `$alias`");
}
}
// @refactor DbHelper Komponente
function FormatDate(string $spalte, string $alias = null)
{
return $this->add_alias("DATE_FORMAT($spalte,'%d.%m.%Y')", $alias);
}
// @refactor DbHelper Komponente
function FormatDateShort(string $spalte, string $alias = null)
{
return $this->add_alias("DATE_FORMAT($spalte,'%d.%m.%y')", $alias);
}
// @refactor DbHelper Komponente
function FormatDateTimeShort(string $spalte, string $alias = null)
{
return $this->add_alias("DATE_FORMAT($spalte,'%d.%m.%y %H:%i')", $alias);
}
// @refactor DbHelper Komponente
function FormatDateTime(string $spalte, string $alias = null)
{
return $this->add_alias("DATE_FORMAT($spalte,'%d.%m.%Y %H:%i:%s')", $alias);
}
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((!empty($subtmp)?count($subtmp):0)>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 "<a href=\"#\" onclick=call(\"".$typ."-".$typid."\") ><img border=\"0\" width=\"20\" src=\"./themes/".$this->app->Conf->WFconf['defaulttheme']."/images/phone.png\" class=\"iconininput\" alt=\"anrufen\" /></a>";
}
return "<a href=\"tel://$telefon\"><img border=\"0\" width=\"20\" src=\"./themes/".$this->app->Conf->WFconf['defaulttheme']."/images/phone.png\" class=\"iconininput\" alt=\"anrufen\" /></a>";
}
}
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((!empty($messages)?count($messages):0) > 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((!empty($result)?count($result):0)>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'=>(!empty($nachrichten)?count($nachrichten):0),'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(gettype($fp) != 'resource') 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", "<br>", $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 && (!empty($dateien)?count($dateien):0) > 1)
{
for($i = 1; $i < (!empty($dateien)?count($dateien):0); $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('&uuml;','&Uuml;','&auml;','&Auml;','&ouml;','&Ouml;','&szlig;'),
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('<s>'," . $field . ",'</s>')," . $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)
{
$sql = "SELECT COUNT(t.id) FROM ticket t WHERE t.status = 'neu' AND ((t.warteschlange = '') OR (t.warteschlange IN (SELECT w.label FROM warteschlangen w WHERE w.adresse = '".$this->app->User->GetAdresse()."')))";
return (int)$this->app->DB->Select($sql);
}
// @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 && (!empty($snDeliveryNoteStorage)?count($snDeliveryNoteStorage):0) > 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((!empty($_COOKIE)?count($_COOKIE):0) > 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("&apos;","'",$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 '
<h3>Einkaufspreise</h3><div'.($divid!==''?' id="'.$divid.'"':'').'>'.
$table->DisplayNew('return','W&auml;hrung','noAction').'
</div>';
}
return '';
}
/** @deprecated */
function DokumentAbschickenPopup()
{
$module = $this->app->Secure->GetGET("module");
return "var horizontalPadding = 30;
var verticalPadding = 30; $('<iframe id=\"externalSite\" class=\"externalSite\" src=\"index.php?module=$module&action=abschicken&id=%value%\" width=\"1000\"/>').dialog({
title: 'Abschicken',
autoOpen: true,
width:1100,
height: 800,
modal: true,
resizable: true,
close: function(ev, ui) {window.location.href='index.php?module=$module&action=edit&id=%value%';}
}).width(1100 - horizontalPadding).height(800 - verticalPadding);";
}
public function cleanSpoolerAndFixNumbers()
{
$this->app->DB->Delete("DELETE FROM `drucker_spooler` WHERE DATE_SUB(CURDATE(), INTERVAL 10 DAY) >= zeitstempel");
$this->app->DB->Update("UPDATE adresse SET kundennummer='' WHERE kundennummer='0'");
$this->app->DB->Update("UPDATE adresse SET lieferantennummer='' WHERE lieferantennummer='0'");
$this->app->DB->Update("UPDATE adresse SET mitarbeiternummer='' WHERE mitarbeiternummer='0'");
$this->app->DB->Update("UPDATE auftrag SET status='freigegegen' WHERE status='bestellt'");
$this->app->DB->Update("UPDATE auftrag SET status='freigegeben' WHERE status='freigegegen'");
$this->app->DB->Delete("DELETE lh FROM lager_mindesthaltbarkeitsdatum lh INNER JOIN artikel a ON lh.artikel=a.id WHERE a.mindesthaltbarkeitsdatum!='1'");
$this->app->DB->Delete("DELETE FROM lager_mindesthaltbarkeitsdatum WHERE artikel <=0");
// status gesperrt gibt es nicht mehr
$this->app->DB->Update("UPDATE rechnung SET status='versendet' WHERE status='gesperrt'");
// neue bezeichnung
$this->app->DB->Update("UPDATE verbindlichkeit SET umsatzsteuer='inland' WHERE umsatzsteuer='deutschland'");
$this->app->DB->Update("UPDATE verbindlichkeit SET umsatzsteuer='import' WHERE umsatzsteuer='export'");
$this->app->DB->Delete('DELETE FROM lager_platz_inhalt WHERE artikel = 0 OR lager_platz = 0');
$this->app->DB->Delete('DELETE FROM lager_seriennummern WHERE artikel = 0 OR (lager_platz = 0 AND zwischenlagerid = 0)');
$this->app->DB->Delete('DELETE FROM lager_charge WHERE artikel = 0 OR (lager_platz = 0 AND zwischenlagerid = 0)');
$this->app->DB->Delete('DELETE FROM lager_mindesthaltbarkeitsdatum WHERE artikel = 0 OR (lager_platz = 0 AND zwischenlagerid = 0)');
$this->app->DB->Update("UPDATE angebot a JOIN auftrag auf ON a.id=auf.angebotid SET a.auftragid=auf.angebotid");
$this->app->DB->Update("UPDATE artikel SET nummer = CONCAT(nummer, '-DEL') WHERE nummer NOT LIKE '%DEL%' AND geloescht = 1");
$this->SetKonfigurationValue('clean_spooler_and_fix_numbers', date('Y-m-d H:i:s'));
}
// @refactor Installer Komponente
public function migrateIfFirstInstall()
{
if($this->app->DB->Select('SELECT `settings` FROM `user` WHERE `id`= 1') !== 'firstinstall') {
return;
}
$this->FirmendatenVorlage();
$this->app->DB->Update("UPDATE `user` SET `settings` = '' WHERE `id`= 1");
/** @var Firmendaten $obj */
$obj = $this->app->erp->LoadModul('firmendaten');
if($obj !== null && method_exists($obj,'checkPaymentModules')){
$obj->checkPaymentModules();
}
try {
/** @var SuperSearchFullIndexTask $indexTask */
$indexTask = $this->app->Container->get('SuperSearchFullIndexTask');
$indexTask->execute();
$indexTask->cleanup();
} catch (Exception $exception) {
}
}
/**
* @param string $type
*/
public function calledOnceAfterLogin($type)
{
$this->app->User->deleteParameterPrefix('tablesearch\\_');
/* if($this->app->DB->Select('SELECT `settings` FROM `user` WHERE `id`= 1')==='firstinstall') {
$this->UpgradeDatabase();
}*/
$this->app->User->SetParameter('zeiterfassung_create_datumzeiterfassung','');
//TODO Inhalt auf pos.php aus Logout
$this->app->User->SetParameter('pos_list_projekt', '0');
$this->app->User->SetParameter('pos_list_kassierer', '0');
$this->app->User->SetParameter('pos_list_kassierername','0');
$this->app->User->SetParameter('pos_list_lkadresse', '0');
$this->app->User->SetParameter('lohnabrechnung_von','');
$this->app->User->SetParameter('lohnabrechnung_bis','');
$this->app->erp->RunHook('calledonceafterlogin');
$this->CheckGPSStechuhr();
$this->app->User->SetParameter('updatekey',1);
// Alte Realtime-Benachrichtigungen löschen
// Das sind Benachrichtigungen die nur zur Laufzeit relevant sind; z.b. Callcenter-Benachrichtigungen
$notification = $this->app->Container->get('NotificationService');
$notification->deleteByTags(['realtime'], $this->app->User->GetID());
if(
!$this->app->DB->Select(
"SELECT `id` FROM `prozessstarter` WHERE `parameter` = 'cleaner' AND `aktiv` = 1 LIMIT 1"
)
) {
// Drucker spooler loeschen
$cleanSpooler = $this->GetKonfiguration('clean_spooler_and_fix_numbers');
if(empty($cleanSpooler) || ((strtotime($cleanSpooler) + 86400 + 14400) < time())) {
$this->cleanSpoolerAndFixNumbers();
}
$this->app->DB->Delete("DELETE FROM `templatemessage` WHERE `zeitstempel` < DATE_SUB(now(), INTERVAL 1 DAY)");
}
if($this->Firmendaten('zeiterfassung_pflicht')=='1' && $this->RechteVorhanden('zeiterfassung','create')) {
if(date('w')==1) // brauche heute - 2 Tage
{
$checkzeit2=$this->app->DB->Select("SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 3 DAY),'%Y-%m-%d')");
}
else {
$checkzeit2 = $this->app->DB->Select("SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 DAY),'%Y-%m-%d')");
}
$checkzeit = $this->app->DB->Select(
sprintf(
"SELECT DATE_FORMAT(MAX(`bis`),'%%Y-%%m-%%d')
FROM `zeiterfassung`
WHERE `adresse` = %d
AND DATE_FORMAT(`bis`,'%%Y-%%m-%%d')='%s'",
$this->app->User->GetAdresse(), $checkzeit2
)
);
if($checkzeit!=$checkzeit2) {
$msg = $this->base64_url_encode(
"<div class=\"error\">Es wurde keine Zeiterfassung am letzten Werktag gefunden. Bitte diese jetzt nachtragen.</div> ");
header("Location: index.php?module=zeiterfassung&action=create&top=TWVpbiBCZXJlaWNo&msg=$msg");
exit;
}
// am montag auf freitag schauen
// sonst schauen ob es gestern war
}
}
// @refactor in Gpsstechuhr Modul
function CheckGPSStechuhr()
{
$module=$this->app->Secure->GetGET('module');
if($module === 'gpsstechuhr') {
return;
}
if(
$this->app->DB->Select(
sprintf(
'SELECT `gpsstechuhr` FROM `user` WHERE `id` = %d',
$this->app->User->GetID()
)
) <= 0) {
return;
}
if(!$this->ModulVorhanden('gpsstechuhr')) {
return;
}
$check = $this->app->DB->Select(
sprintf(
"SELECT `id`
FROM `gpsstechuhr`
WHERE `user` = %d AND `adresse`= %d
AND DATE_FORMAT(`zeit`,'%%Y-%%m-%%d')= DATE_FORMAT( NOW( ) , '%%Y-%%m-%%d' )
LIMIT 1",
$this->app->User->GetID(), $this->app->User->GetAdresse()
)
);
if($check > 0) {
return;
}
$this->app->Location->execute('index.php?module=gpsstechuhr&action=create');
}
// @refactor DocumentPdf Komponente
function ParseFormVars($fields)
{
foreach($fields as $key)
{
$this->app->Tpl->Set(strtoupper($key),$this->app->Secure->GetPOST($key));
}
}
// @refactor Document Komponente
function Zahlungsweisetext($doctype,$doctypeid)
{
//if($doctype!="rechnung") return;//AUSKOMMENTIEREN?
$doctypeRow = $this->app->DB->SelectRow(sprintf("SELECT * FROM `%s` WHERE id=%d LIMIT 1", $doctype, (int)$doctypeid));
if(empty($doctypeRow['zahlungsweise'])) {
$zahlungsweise = '';
}
$zahlungsweise = !empty($doctypeRow['zahlungsweise'])?$doctypeRow['zahlungsweise']:'';
$zahlungsstatus = !empty($doctypeRow['zahlungsstatus'])?$doctypeRow['zahlungsstatus']:'';
$zahlungszieltage = !empty($doctypeRow['zahlungszieltage'])?$doctypeRow['zahlungszieltage']:'';
$zahlungszieltageskonto = !empty($doctypeRow['zahlungszieltageskonto'])?$doctypeRow['zahlungszieltageskonto']:'';
$zahlungszielskonto = !empty($doctypeRow['zahlungszielskonto'])?$doctypeRow['zahlungszielskonto']:'';
$zahlungszielskontototal=$zahlungszielskonto;
if($doctype === 'auftrag' || $doctype === 'rechnung' || $doctype === 'gutschrift' || $doctype === 'angebot' || $doctype === 'bestellung')
{
if(empty($doctypeRow['skontoberechnet'])) {
$skontobetrag = null;
} else {
$skontobetrag = isset($doctypeRow['skontobetrag'])?$doctypeRow['skontobetrag']:null;
}
if($skontobetrag !== null)
{
if($doctype === 'auftrag' || $doctype === 'angebot' || $doctype === 'bestellung')
{
$soll = !empty($doctypeRow['gesamtsumme'])?$doctypeRow['gesamtsumme']:0;
}else{
$soll = !empty($doctypeRow['soll'])?$doctypeRow['soll']:0;
}
//$zahlungszielskonto = round((100 * $skontobetrag / $soll),2); // den wert lassen sonst sieht es komisch am briefpapier aus Ticket 757670
}
}
$zahlungszieltage = (int) $zahlungszieltage;
$zahlungdatum = $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD(datum, INTERVAL $zahlungszieltage DAY),'%d.%m.%Y') FROM $doctype WHERE id='$doctypeid' LIMIT 1");
$anzeigen = false;
$zahlungsweisetext = "";
$projekt = !empty($doctypeRow['projekt'])?$doctypeRow['projekt']:0;
$zahlungsweiseid = $this->app->DB->SelectRow("SELECT id, modul,freitext FROM zahlungsweisen WHERE type = '$zahlungsweise' AND aktiv = 1 AND geloescht = 0 AND (projekt = 0 OR projekt = '$projekt') ORDER BY projekt = '$projekt' DESC LIMIT 1");
if(!empty($zahlungsweiseid))
{
// if there is an translation then use this
$zahlungsweisetext2 = $this->app->erp->Beschriftung("zahlungsweise_freitext_".$zahlungsweiseid['id']);
$zahlungsweisetext = ($zahlungsweisetext2!=""?$zahlungsweisetext2:$zahlungsweiseid['freitext']);
if($zahlungsweiseid['modul'] != '')
{
$zahlungsweiseid['modul'] = preg_replace('/[^a-zA-Z0-9\_]/','',$zahlungsweiseid['modul']);
$pfad = dirname(__DIR__).'/lib/zahlungsweisen/'.$zahlungsweiseid['modul'].'.php';
if($zahlungsweiseid['modul'] && @is_file($pfad))
{
$classname = 'Zahlungsweise_'.$zahlungsweiseid['modul'];
if(!class_exists($classname)){
include_once($pfad);
}
if(class_exists($classname))
{
$obj = new $classname($this->app, $zahlungsweiseid['id']);
if($obj && method_exists($obj, 'GetZahlungsweiseText'))
{
$zahlungsweisetexttmp = $obj->GetZahlungsweiseText($doctype, $doctypeid);
if($zahlungsweisetexttmp!='') {
if($zahlungsweiseid['modul'] == 'tagxmonat'){
$zahlungsweisetext = $zahlungsweisetexttmp."\r\n";
}
else{
$zahlungsweisetext .= "\r\n".$zahlungsweisetexttmp."\r\n";
}
}
}
}
}
}
}
//$this->RunHook('ZahlungsweisetextZahlungsdatum',4, $doctype, $doctypeid, $zahlungdatum, $zahlungsweisetext);
$zahlungszieltageskonto = (int) $zahlungszieltageskonto;
$zahlungszielskontodatum = $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD(datum, INTERVAL $zahlungszieltageskonto DAY),'%d.%m.%Y') FROM $doctype WHERE id='$doctypeid' LIMIT 1");
$adresse = !empty($doctypeRow['adresse'])?$doctypeRow['adresse']:0;
$skontofaehig = $this->Skontofaehig($doctypeid, $doctype);
$skontofaehig = number_format((float)$skontofaehig,2,',','.');
$skontofaehignetto = $this->Skontofaehig($doctypeid, $doctype,false);
$skontofaehignetto = number_format((float)$skontofaehignetto,2,',','.');
if($zahlungszieltageskonto<=0)
$zahlungszielskontodatum = $zahlungdatum;
$sprache = !empty($doctypeRow['sprache'])?$doctypeRow['sprache']:$this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' LIMIT 1");
$this->app->erp->BeschriftungSprache($sprache);
$zahlungsweise = strtolower($zahlungsweise);
//if($zahlungsweise=="rechnung"&&$zahlungsstatus!="bezahlt")
if($zahlungsweisetext == '')
{
if($doctype==='rechnung'){
if($zahlungsweise==='rechnung' || $zahlungsweise==='einzugsermaechtigung' || $zahlungsweise==='lastschrift')
{
if($zahlungsweise==='rechnung')
{
if($zahlungszieltage==0){
$zahlungsweisetext = $this->app->erp->Beschriftung("zahlung_rechnung_sofort_de");
//if($zahlungsweisetext=='') {
// $zahlungsweisetext = 'Rechnung zahlbar sofort. ';
//}
}else{
$zahlungsweisetext = $this->app->erp->Beschriftung("zahlung_rechnung_de");
//if($zahlungsweisetext=="") $zahlungsweisetext ="Rechnung zahlbar innerhalb von {ZAHLUNGSZIELTAGE} Tagen bis zum {ZAHLUNGBISDATUM}. ";
$zahlungsweisetext = str_replace("{ZAHLUNGSZIELTAGE}",$zahlungszieltage,$zahlungsweisetext);
$zahlungsweisetext = str_replace("{ZAHLUNGBISDATUM}",$zahlungdatum,$zahlungsweisetext);
}
if($this->app->erp->Firmendaten("eigener_skontotext")=="1" && ($zahlungszielskonto>0 || $skontobetrag > 0))
{
$skontotext = $this->app->erp->Beschriftung("eigener_skontotext_re");
$skontotext = str_replace('{ZAHLUNGSZIELSKONTO}',number_format($zahlungszielskonto,2,',','.'),$skontotext);
$skontotext = str_replace('{ZAHLUNGSZIELSKONTOTOTAL}',number_format($zahlungszielskontototal,2,',','.'),$skontotext);
$skontotext = str_replace('{ZAHLUNGSZIELTAGESKONTO}',$zahlungszieltageskonto,$skontotext);
$skontotext = str_replace('{ZAHLUNGSZIELSKONTODATUM}',$zahlungszielskontodatum,$skontotext);
$zahlungsweisetext .= "\n".$skontotext;
}else{
if($zahlungszielskonto!=0)
{
$zahlungsweisetext .="\n".$this->app->erp->Beschriftung("dokument_skonto")." ".number_format($zahlungszielskonto,2,',','.')." % ".$this->app->erp->Beschriftung("dokument_innerhalb")." $zahlungszieltageskonto ".$this->app->erp->Beschriftung("dokument_tagebiszum")." ".$zahlungszielskontodatum;
}
}
}else{
//lastschrift
$zahlungsweisetext = $this->app->erp->Beschriftung("zahlung_".$zahlungsweise."_de");
if($zahlungsweisetext=="") $zahlungsweisetext ="Der Betrag wird von Ihrem Konto abgebucht.";
if($zahlungszielskonto!=0)
$zahlungsweisetext .="\r\n".$this->app->erp->Beschriftung("dokument_skontoanderezahlungsweisen");
//$zahlungsweisetext .="\r\n".$this->app->erp->Beschriftung("dokument_skonto")." $zahlungszielskonto % aus Zahlungskonditionen";
$zahlungsweisetext = str_replace('{ZAHLUNGSZIELSKONTO}',number_format($zahlungszielskonto,2,',','.'),$zahlungsweisetext);
$zahlungsweisetext = str_replace('{ZAHLUNGSZIELSKONTOTOTAL}',number_format($zahlungszielskontototal,2,',','.'),$zahlungsweisetext);
}
}else{
// schauen ob es zahlungsweise gibt
$zahlungsweisetext = $this->Beschriftung("zahlungsweise_freitext_".$this->app->DB->Select("SELECT id FROM zahlungsweisen WHERE type='".$zahlungsweise."' AND aktiv='1' AND type!='' LIMIT 1"));
if($zahlungsweisetext=="")
{
$zahlungsweisetext = $this->app->DB->Select("SELECT freitext FROM zahlungsweisen WHERE type='".$zahlungsweise."' AND aktiv='1' AND type!='' LIMIT 1");
}
if($zahlungsweisetext=="")
$zahlungsweisetext = $this->app->erp->Beschriftung("zahlung_".$zahlungsweise."_de");
if($zahlungsweisetext=="")// || $zahlungsweise=="vorkasse")
{
$zahlweisetmp = ucfirst($zahlungsweise);
if($zahlweisetmp == "Eckarte") $zahlweisetmp = "EC-Karte";
$zahlungsweisetext = $this->app->erp->Beschriftung("dokument_zahlung_per")." ".$zahlweisetmp;
}
}
}
if($doctype=="auftrag"){
//$zahlungstext = "\nZahlungsweise: $zahlungsweise ";
if($zahlungsweise=="lastschrift" || $zahlungsweise=="einzugsermaechtigung")
$zahlungsweise="lastschrift";
if($zahlungsweise=="rechnung")
{
// das ist immer ein Vorschlag und keine Rechnung! Daher hier anderen Text!
if($zahlungszieltage >0) {
$zahlung_auftrag_de = $this->app->erp->Beschriftung("zahlung_auftrag_de");
if(empty($zahlung_auftrag_de)){
$zahlungsweisetext = $this->app->erp->Beschriftung("dokument_zahlung_rechnung_anab");
}
else{
$zahlungsweisetext = $zahlung_auftrag_de;
}
}
else {
$zahlung_auftrag_sofort_de =$this->app->erp->Beschriftung("zahlung_auftrag_sofort_de");
if(empty($zahlung_auftrag_sofort_de))
{
$zahlungsweisetext = $this->app->erp->Beschriftung("dokument_zahlung_rechnung_anab");
}else{
$zahlungsweisetext =$zahlung_auftrag_sofort_de;
}
}
if($this->app->erp->Firmendaten("eigener_skontotext")=="1" && $zahlungszielskonto>0)
{
$skontotext = $this->app->erp->Beschriftung("eigener_skontotext_anab");
$skontotext = str_replace('{ZAHLUNGSZIELSKONTO}',number_format($zahlungszielskonto,2,',','.'),$skontotext);
$skontotext = str_replace('{ZAHLUNGSZIELSKONTOTOTAL}',number_format($zahlungszielskontototal,2,',','.'),$skontotext);
$skontotext = str_replace('{ZAHLUNGSZIELTAGESKONTO}',$zahlungszieltageskonto,$skontotext);
$zahlungsweisetext .= "\n".$skontotext;
} else {
if($zahlungszielskonto>0) $zahlungsweisetext .= "\n".$this->app->erp->Beschriftung("dokument_skonto")." ".number_format($zahlungszielskonto,2,',','.')."% ".$this->app->erp->Beschriftung("dokument_innerhalb")." $zahlungszieltageskonto ".$this->app->erp->Beschriftung("dokument_tagen");
}
}
else {
// schauen ob es zahlungsweise gibt
if($zahlungsweisetext=="")
$zahlungsweisetext = $this->app->erp->Beschriftung("zahlung_".$zahlungsweise."_de");
if($zahlungsweisetext=="")
$zahlungsweisetext = $this->app->erp->Beschriftung("dokument_zahlung_per")." ".ucfirst($zahlungsweise);
// alt
//if($zahlungszielskonto>0) $zahlungsweisetext .= "\n".$this->app->erp->Beschriftung("dokument_skonto")." ".number_format($zahlungszielskonto,2,',','.')."% ";
if($zahlungszielskonto!=0)
$zahlungsweisetext .="\r\n".$this->app->erp->Beschriftung("dokument_skontoanderezahlungsweisen");
if($zahlungsweisetext =='') {
$zahlungsweisetext = "\n".ucfirst($zahlungsweise);
}
}
}
if($doctype==='angebot')
{
if($zahlungsweise==='rechnung')
{
if($zahlungszieltage >0) {
$zahlung_rechnung_de = $this->app->erp->Beschriftung('zahlung_auftrag_de');
if(empty($zahlung_rechnung_de)) {
$zahlungsweisetext = $this->app->erp->Beschriftung('dokument_zahlung_rechnung_anab');
}
else {
$zahlungsweisetext = $zahlung_rechnung_de;
}
}
else {
$zahlungsweisetext = $this->app->erp->Beschriftung("zahlung_auftrag_sofort_de");
}
if($zahlungszielskonto>0 && $this->app->erp->Firmendaten('eigener_skontotext')=='1') {
$skontotext = $this->app->erp->Beschriftung("eigener_skontotext_anab");
$skontotext = str_replace('{ZAHLUNGSZIELSKONTO}',number_format($zahlungszielskonto,2,',','.'),$skontotext);
$skontotext = str_replace('{ZAHLUNGSZIELTAGESKONTO}',$zahlungszieltageskonto,$skontotext);
$zahlungsweisetext .= "\n".$skontotext;
} else {
if($zahlungszielskonto>0) {
$zahlungsweisetext .= "\n".$this->app->erp->Beschriftung("dokument_skonto")." ".number_format($zahlungszielskonto,2,',','.')."% ".$this->app->erp->Beschriftung("dokument_innerhalb")." $zahlungszieltageskonto ".$this->app->erp->Beschriftung("dokument_tagen");
}
}
} else {
$zahlungsweisetext = $this->app->DB->Select("SELECT freitext FROM zahlungsweisen WHERE type='".$zahlungsweise."' AND aktiv='1' AND type!='' LIMIT 1");
if($zahlungsweisetext=="")
$zahlungsweisetext = $this->app->erp->Beschriftung("zahlung_".$zahlungsweise."_de");
if($zahlungsweisetext=="")
$zahlungsweisetext = $this->app->erp->Beschriftung("dokument_zahlung_per")." ".ucfirst($zahlungsweise);
}
}
if($doctype=="rechnung"){
if(1)//$zahlungszielskonto!=0)
{
$zahlungsweisetext = str_replace("{ZAHLUNGSZIELSKONTO}",number_format($zahlungszielskonto,2,',','.'),$zahlungsweisetext);
$zahlungsweisetext = str_replace("{ZAHLUNGSZIELSKONTOTOTAL}",number_format($zahlungszielskontototal,2,',','.'),$zahlungsweisetext);
$zahlungsweisetext = str_replace("{ZAHLUNGSZIELTAGESKONTO}",$zahlungszieltageskonto,$zahlungsweisetext);
$zahlungsweisetext = str_replace("{ZAHLUNGSZIELSKONTODATUM}",$zahlungszielskontodatum,$zahlungsweisetext);
} /*else {
$zahlungsweisetext = str_replace("{ZAHLUNGSZIELSKONTO}","0",$zahlungsweisetext);
$zahlungsweisetext = str_replace("{ZAHLUNGSZIELTAGESKONTO}","0",$zahlungsweisetext);
$zahlungsweisetext = str_replace("{ZAHLUNGSZIELSKONTODATUM}",$zahlungdatum,$zahlungsweisetext);
}*/
}
}
$zahlungsweisetext = str_replace('{SKONTOFAEHIG}',$skontofaehig, $zahlungsweisetext);
$zahlungsweisetext = str_replace('{SKONTOFAEHIGNETTO}',$skontofaehignetto, $zahlungsweisetext);
$zahlungsweisetext = $this->ParseUserVars($doctype,$doctypeid, $zahlungsweisetext);
return $zahlungsweisetext;
}
public function getDeliverythresholdvatid($projektid = null)
{
$vatid = '';
if($projektid > 0){
$vatid = $this->Projektdaten($projektid, 'steuernummer');
if(!empty($vatid)){
return $vatid;
}
}
return $this->Firmendaten('steuernummer');
}
// @refactor DocumentPdf Komponente
public function ParseUserVars($type,$id,$text, $removeuneused = true)
{
if(strpos($text, '}') === false) {
return $text;
}
$liefertext = '';
$liefertextlang = '';
$this->RunHook('parseuservars', 3, $type, $id,$text);
$result = $this->app->DB->SelectArr("SELECT * FROM $type WHERE id='$id' LIMIT 1");
$waehrung = $result[0]['waehrung'];
$text = str_replace('{BELEGART}',ucfirst($type),$text);
$text = str_replace('{FIRMA}',$this->Firmendaten("name"),$text);
if($type === 'rechnung' && !empty($result[0]['belegnr'])) {
$text = str_replace('{RECHNUNG}',$result[0]['belegnr'], $text);
}
if($result[0]['projekt'] > 0){
$projektArr = $this->app->DB->SelectRow("SELECT abkuerzung, name FROM projekt WHERE id='" . $result[0]['projekt'] . "' LIMIT 1");
}else{
$projektArr = null;
}
if(!empty($projektArr)){
$projektabkuerzung = $projektArr['abkuerzung'];
$projektname = $projektArr['name'];
}else{
$projektabkuerzung = '';
$projektname = '';
}
$text = str_replace('{DELIVERYTHRESHOLDVATID}',!empty($result[0]['deliverythresholdvatid'])?$result[0]['deliverythresholdvatid']:'',$text);
$text = str_replace('{PROJEKT}',$projektabkuerzung,$text);
$text = str_replace('{PROJEKTNUMMER}',$projektabkuerzung,$text);
$text = str_replace('{PROJEKTNAME}',$projektname,$text);
$projekt = $result[0]['projekt'];
$versandartbezeichnung = '';
if($result[0]['versandart']!='')
{
$versandartbezeichnung = $this->Beschriftung("versandart_bezeichnung_".$this->app->DB->Select("SELECT id FROM versandarten WHERE type='".$result[0]['versandart']."' LIMIT 1"));
if($versandartbezeichnung=="")
{
$versandartbezeichnung = $this->app->DB->Select("SELECT bezeichnung FROM versandarten WHERE type='".$result[0]['versandart']."' LIMIT 1");
}
}
$text = str_replace('{VERSANDARTBEZEICHNUNG}',$versandartbezeichnung,$text);
if($type==='produktion')
{
$result[0]['kundenname'] = $this->app->DB->Select("SELECT a.name as kundenname FROM produktion p LEFT JOIN adresse a ON a.id=p.adresse WHERE p.id='$id' LIMIT 1");
}
if($type==='gutschrift')
{
$rechnungid = $result[0]['rechnungid'];
$result[0]['auftragid'] = $this->app->DB->Select("SELECT auftragid FROM rechnung WHERE id='".$rechnungid."' LIMIT 1");
$result[0]['rechnung'] = $this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='".$rechnungid."' LIMIT 1");
}
if($type!=='auftrag' && $type!=='bestellung' && $type!=='retoure')
{
$auftragArr = $this->app->DB->SelectRow("SELECT a.*, DATE_FORMAT(datum,'%d.%m.%Y') as datum_de FROM auftrag AS a WHERE id='".$result[0]['auftragid']."' LIMIT 1");
$result[0]['internet'] = $auftragArr['internet'];
$result[0]['abweichendelieferadresse']=$auftragArr['abweichendelieferadresse'];
$result[0]['liefername']=$auftragArr['liefername'];
$result[0]['lieferabteilung']=$auftragArr['lieferabteilung'];
$result[0]['lieferunterabteilung']=$auftragArr['lieferunterabteilung'];
$result[0]['lieferadresszusatz']=$auftragArr['lieferadresszusatz'];
$result[0]['liefertitel']=$auftragArr['liefertitel'];
$result[0]['lieferansprechpartner']=$auftragArr['lieferansprechpartner'];
$result[0]['lieferstrasse']=$auftragArr['lieferstrasse'];
$result[0]['lieferplz']=$auftragArr['lieferplz'];
$result[0]['lieferland']=$auftragArr['lieferland'];
$result[0]['lieferort'] = $auftragArr['lieferort'];
$result[0]['liefergln'] = $auftragArr['liefergln'];
$result[0]['lieferemail'] = $auftragArr['lieferemail'];
}
if($type==='bestellung' || $type==='angebot' || $type==='proformarechnung' || $type==='retoure')
{
$typeArr = $this->app->DB->SelectRow("SELECT * FROM $type WHERE id = '$id' LIMIT 1");
$result[0]['abweichendelieferadresse']=$typeArr['abweichendelieferadresse'];
$result[0]['liefername']=$typeArr['liefername'];
$result[0]['lieferabteilung']=$typeArr['lieferabteilung'];
$result[0]['lieferunterabteilung']=$typeArr['lieferunterabteilung'];
$result[0]['lieferadresszusatz']=$typeArr['lieferadresszusatz'];
$result[0]['liefertitel']=$typeArr['liefertitel'];
$result[0]['lieferansprechpartner']=$typeArr['lieferansprechpartner'];
$result[0]['lieferstrasse']=$typeArr['lieferstrasse'];
$result[0]['lieferplz']=$typeArr['lieferplz'];
$result[0]['lieferland']=$typeArr['lieferland'];
$result[0]['lieferort'] = $typeArr['lieferort'];
$result[0]['liefergln'] = $typeArr['liefergln'];
$result[0]['lieferemail'] = $typeArr['lieferemail'];
if($type === 'proformarechnung')
{
$result[0]['verzollungadresse']=$typeArr['verzollungadresse'];
$result[0]['verzollungname']=$typeArr['verzollungname'];
$result[0]['verzollungabteilung']=$typeArr['verzollungabteilung'];
$result[0]['verzollungunterabteilung']=$typeArr['verzollungunterabteilung'];
$result[0]['verzollungadresszusatz']=$typeArr['verzollungadresszusatz'];
$result[0]['verzollungtitel']=$typeArr['verzollungtitel'];
$result[0]['verzollungansprechpartner']=$typeArr['verzollungansprechpartner'];
$result[0]['verzollungstrasse']=$typeArr['verzollungstrasse'];
$result[0]['verzollungplz']=$typeArr['verzollungplz'];
$result[0]['verzollungland']=$typeArr['verzollungland'];
$result[0]['verzollungort'] = $typeArr['verzollungort'];
$result[0]['verzollunginformationen'] = $typeArr['verzollunginformationen'];
}
}
if($type=="angebot" || $type=="auftrag")
{
$soll = $result[0]['gesamtsumme'];
$skonto = $this->app->DB->Select("SELECT (gesamtsumme/100)*zahlungszielskonto FROM $type WHERE id='".$id."' LIMIT 1");
$skontobetrag = $result[0]['skontobetrag'];
if(!is_null($skontobetrag))$skonto = $skontobetrag;
$text = str_replace('{SOLL}',$this->formatMoney($soll,$waehrung),$text);
$text = str_replace('{SOLLMITSKONTO}',$this->formatMoney($soll-$skonto,$waehrung),$text);
$text = str_replace('{SKONTOBETRAG}',$this->formatMoney((float)$skonto,$waehrung),$text);
}
if($type=="angebot" || $type=="auftrag" || $type=="lieferschein" )
{
if($result[0]['lieferid'] > 0)
{
$lieferhinweis = $this->app->DB->Select("SELECT hinweis FROM lieferadressen WHERE id='".$result[0]['lieferid']."' LIMIT 1");
$text = str_replace('{LIEFERADRESSE_HINWEIS}',$lieferhinweis,$text);
}
}
if($type=="rechnung" || $type=="gutschrift" || $type=="auftrag" || $type=="angebot")
{
$docarr = $result[0];
$soll = null;
$normal = null;
$ermaessigt = null;
$skonto = null;
$skontobetrag = null;
if(!empty($docarr)){
$soll = $docarr['soll'];
$normal = $docarr['steuersatz_normal'];
$ermaessigt = $docarr['steuersatz_ermaessigt'];
$skonto = $docarr['soll']/100*$docarr['zahlungszielskonto'];
$skontobetrag = $docarr['skontobetrag'];
}
if($skontobetrag !== null) {
$skonto = $skontobetrag;
}
$text = str_replace('{SOLL}',$this->formatMoney($soll,$waehrung),$text);
$text = str_replace('{SOLLMITSKONTO}',$this->formatMoney($soll-$skonto,$waehrung),$text);
$text = str_replace('{SKONTOBETRAG}',$this->formatMoney((float)$skonto,$waehrung),$text);
$summe_normal = $this->BelegZwischensummeSteuersaetzeBrutto2($id,$type,"normal");
$summe_ermaessigt = $this->BelegZwischensummeSteuersaetzeBrutto2($id,$type,"ermaessigt");
$text = str_replace('{STEUERNORMAL}',$this->formatMoney($normal,$waehrung),$text);
$text = str_replace('{GESAMTNETTO}',$this->formatMoney(($summe_normal/((100+$normal)/100))+($summe_ermaessigt/((100+$ermaessigt)/100)),$waehrung),$text);
$text = str_replace('{GESAMTNETTONORMAL}',$this->formatMoney($summe_normal/((100+$normal)/100),$waehrung),$text);
$text = str_replace('{STEUERERMAESSIGT}',$this->formatMoney($ermaessigt,$waehrung),$text);
$text = str_replace('{GESAMTNETTOERMAESSIGT}',$this->formatMoney($summe_ermaessigt/((100+$ermaessigt)/100),$waehrung),$text);
} else {
$text = str_replace('{SOLL}',"",$text);
$text = str_replace('{SOLLMITSKONTO}',"",$text);
$text = str_replace('{SKONTOBETRAG}',"",$text);
}
//internet
//transaktionsnummer
if($type==="auftrag")
{
$text = str_replace('{INTERNET}',$result[0]['internet'],$text);
$text = str_replace('{TRANSAKTIONSNUMMER}',$result[0]['transaktionsnummer'],$text);
$text= str_replace('{AUFTRAG}',$result[0]['belegnr'],$text);
$text= str_replace('{GESAMT}',$result[0]['gesamtsumme'],$text);
$text= str_replace('{DATUM}',$this->app->DB->Select("SELECT DATE_FORMAT(datum,'%d.%m.%Y') FROM auftrag WHERE id='$id' LIMIT 1"),$text);
if(strpos($text, '{RECHNUNG}') !== false) {
$rechnungBelegnr = $this->app->DB->Select(
sprintf(
"SELECT belegnr FROM rechnung WHERE auftragid = %d AND auftragid > 0 AND belegnr <> '' LIMIT 1",
$id
)
);
$text = str_replace('{RECHNUNG}', $rechnungBelegnr, $text);
}
}
if($type === 'retoure') {
$orderId = $result[0]['auftragid'] > 0?$result[0]['auftragid']:$result[0]['replacementorder_id'];
if($orderId > 0) {
$order = $this->app->DB->SelectRow(
sprintf(
'SELECT `belegnr`, `internet`, `transaktionsnummer`, `gesamtsumme`
FROM `auftrag` WHERE `id` = %d LIMIT 1',
$orderId
)
);
if(!empty($order['belegnr'])) {
$text= str_replace('{AUFTRAG}', $order['belegnr'], $text);
}
if(!empty($order['internet'])) {
$text = str_replace('{INTERNET}',$order['internet'],$text);
}
if(!empty($order['gesamtsumme'])) {
$text = str_replace('{GESAMT}',$order['gesamtsumme'],$text);
}
if(!empty($order['transaktionsnummer'])) {
$text = str_replace('{TRANSAKTIONSNUMMER}',$order['transaktionsnummer'],$text);
}
if(!empty($order) && strpos($text, '{RECHNUNG}') !== false) {
$rechnungBelegnr = $this->app->DB->Select(
sprintf(
"SELECT `belegnr` FROM `rechnung` WHERE `auftragid` = %d AND `auftragid` > 0 AND `belegnr` <> '' LIMIT 1",
$orderId
)
);
$text = str_replace('{RECHNUNG}', $rechnungBelegnr, $text);
}
}
}
if($type==="rechnung")
{
$zahlungsstatus = $result[0]['zahlungsstatus'];
$bezahlt = $this->Beschriftung("rechnung_footer_bezahlt");
$offen = $this->Beschriftung("rechnung_footer_offen");
if($zahlungsstatus=="offen" || $zahlungsstatus=="")
$text = str_replace('{ZAHLUNGSSTATUS}',$offen,$text);
else if ($zahlungsstatus=="bezahlt")
$text = str_replace('{ZAHLUNGSSTATUS}',$bezahlt,$text);
}
if($type==='rechnung' || $type==='lieferschein' || $type==='retoure' || $type==='gutschrift')
{
$auftragid = $result[0]['auftragid'];
if($auftragid > 0) {
$orderRow = $this->app->DB->SelectRow(
sprintf(
'SELECT internet,transaktionsnummer,DATE_FORMAT(datum,\'%%d.%%m.%%Y\') as datum_de
FROM auftrag WHERE id=%d LIMIT 1',
(int)$auftragid
)
);
if(!empty($orderRow)) {
$text = str_replace(
['{INTERNET}','{TRANSAKTIONSNUMMER}','{AUFTRAGSDATUM}'],
[$orderRow['internet'], $orderRow['transaktionsnummer'], $orderRow['datum_de']],
$text
);
}
}
}
if($type=="rechnung" || $type=="auftrag" || $type=="angebot" || $type=="bestellung")
{
$zahlungszieltage = $result[0]['zahlungszieltage'];
$zahlungszieltageskonto = $result[0]['zahlungszieltageskonto'];
$zahlungszielskonto = $result[0]['zahlungszielskonto'];
$zahlungdatum = $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD(datum, INTERVAL $zahlungszieltage DAY),'%d.%m.%Y') FROM $type WHERE id='$id' LIMIT 1");
$zahlungszielskontodatum = $this->app->DB->Select("SELECT DATE_FORMAT(DATE_ADD(datum, INTERVAL $zahlungszieltageskonto DAY),'%d.%m.%Y') FROM $type WHERE id='$id' LIMIT 1");
$text = str_replace("{ZAHLUNGSZIELTAGE}",$zahlungszieltage,$text);
$text = str_replace("{ZAHLUNGBISDATUM}",$zahlungdatum,$text);
$text = str_replace("{ZAHLUNGSZIELSKONTODATUM}",$zahlungszielskontodatum,$text);
} else {
$text = str_replace("{ZAHLUNGSZIELTAGE}","",$text);
$text = str_replace("{ZAHLUNGBISDATUM}","",$text);
}
if(strpos($text, '}') === false) {
return $text;
}
if ($type=="lieferschein")
{
$rechnungsadresse = '';
$rechnungsid = $this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein='$id' LIMIT 1");
if($rechnungsid > 0)
{
$resultrechnung = $this->app->DB->SelectArr("SELECT * FROM rechnung WHERE id='$rechnungsid' LIMIT 1");
if($resultrechnung[0]['name']!="")
$rechnungsadresse .= $resultrechnung[0]['name']."\r\n";
if($resultrechnung[0]['abteilung']!="")
$rechnungsadresse .= $resultrechnung[0]['abteilung']."\r\n";
if($resultrechnung[0]['unterabteilung']!="")
$rechnungsadresse .= $resultrechnung[0]['unterabteilung']."\r\n";
if($resultrechnung[0]['strasse']!="")
$rechnungsadresse .= $resultrechnung[0]['strasse']."\r\n";
if($resultrechnung[0]['adresszusatz']!="")
$rechnungsadresse .= $resultrechnung[0]['adresszusatz']."\r\n";
if($resultrechnung[0]['ansprechpartner']!="")
$rechnungsadresse .= $resultrechnung[0]['ansprechpartner']."\r\n";
if($resultrechnung[0]['plz']!="")
$rechnungsadresse .= $resultrechnung[0]['land']."-".$resultrechnung[0]['plz']." ".$resultrechnung[0]['ort']."\r\n";
else
$rechnungsadresse .= $resultrechnung[0]['land']." ".$resultrechnung[0]['ort']."\r\n";
}
if($rechnungsid <=0){
$text = str_replace('{RECHNUNGSADRESSE}', "", $text);
}
else{
$text = str_replace('{RECHNUNGSADRESSE}', "Rechnungsadresse: \r\n" . $rechnungsadresse, $text);
if(!empty( $resultrechnung[0]['belegnr'])) {
$text = str_replace('{RECHNUNG}', $resultrechnung[0]['belegnr'], $text);
}
}
}
// Netto gewicht
if($type=="auftrag" || $type=="angebot" || $type=="lieferschein" || $type=="retoure" || $type=="rechnung" || $type=="gutschrift" || $type=="bestellung" | $type=="proformarechnung" || $type=="preisanfrage")
{
$anzahlteile = $this->app->DB->Select("SELECT TRIM(SUM(ap.menge))+0
FROM ".$type."_position ap LEFT JOIN artikel a ON ap.artikel=a.id WHERE ap.$type='$id' AND a.porto!=1 AND a.rabatt!=1 ");
$text = str_replace("{ANZAHLTEILEALLE}",$anzahlteile,$text);
if($type==='bestellung' || $type==='preisanfrage' ) {
$anzahlteilesichtbar = $anzahlteile;
}
else if($type=="auftrag" || $type=="angebot" || $type=="rechnung" || $type=="gutschrift")
{
$anzahlteilesichtbar = $this->app->DB->Select("SELECT TRIM(SUM(ap.menge))+0
FROM " . $type . "_position ap LEFT JOIN artikel a ON ap.artikel=a.id WHERE ap.$type='$id' AND a.porto!=1 AND a.rabatt!=1 AND ap.ausblenden_im_pdf!=1");
} else {
$anzahlteilesichtbar = $this->app->DB->Select("SELECT TRIM(SUM(ap.menge))+0
FROM ".$type."_position ap LEFT JOIN artikel a ON ap.artikel=a.id WHERE ap.$type='$id' AND a.porto!=1 AND a.rabatt!=1");
}
$text = str_replace("{ANZAHLTEILE}",$anzahlteilesichtbar,$text);
$nettogewicht = $this->app->DB->Select(
"SELECT
SUM(
REPLACE(
IF(a.nettogewicht='' OR a.nettogewicht IS NULL OR a.nettogewicht = 0,
a.gewicht,
a.nettogewicht
),',','.') * ap.menge
)
FROM ".$type."_position ap LEFT JOIN artikel a ON ap.artikel=a.id WHERE ap.$type='$id'"
);
$text = str_replace('{NETTOGEWICHT}',number_format((float)$nettogewicht,2,",",""),$text);
$zahlungsweise = '';
if($type !== 'lieferschein'){
$zahlungsweise = $this->app->DB->Select("SELECT zahlungsweise FROM $type WHERE id='$id' LIMIT 1");
}
$text = str_replace("{ZAHLUNGSWEISE}",$zahlungsweise,$text);
} else {
$text = str_replace('{NETTOGEWICHT}',"-",$text);
$text = str_replace("{ZAHLUNGSWEISE}","-",$text);
}
if(isset($result[0]) && $result[0])
{
foreach($result[0] as $key=>$value)
$result[0][$key]=str_replace('NONBLOCKINGZERO','',$result[0][$key]);
}
$result[0]['anschreiben'] = $this->app->DB->Select("SELECT anschreiben FROM `$type` WHERE id='".$id."' LIMIT 1");
if($type === 'adresse') {
$tmpAddr = $result[0];
}
else{
$tmpAddr = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='" . $result[0]['adresse'] . "' LIMIT 1");
}
if(!empty($tmpAddr)) {
$text = str_replace(
['{FREIFELD1}','{FREIFELD2}','{FREIFELD3}'],
[$tmpAddr['freifeld1'],$tmpAddr['freifeld2'],$tmpAddr['freifeld3']],
$text);
$result[0]['kundennummer'] = $tmpAddr['kundennummer'];
$result[0]['verbandsnummer'] = $tmpAddr['verbandsnummer'];
//if($result[0]['anschreiben']==''){ // heute wieder raus 509913
// $result[0]['anschreiben'] = $tmpAddr['anschreiben'];
//}
} else {
$result[0]['kundennummer'] = '';
$result[0]['verbandsnummer'] = '';
}
$result[0]['verband'] = $this->GetVerbandName($this->GetVerband($result[0]['adresse']));
if($result[0]['anschreiben']!="")
$text = str_replace('{ANSCHREIBEN}',$result[0]['anschreiben'],$text);
else
$text = str_replace('{ANSCHREIBEN}',$this->app->erp->Beschriftung("dokument_anschreiben"),$text);
if($result[0]['ansprechpartner']!="")
$text = str_replace('{ANSPRECHPARTNER}',$result[0]['ansprechpartner'],$text);
else
$text = str_replace('{ANSPRECHPARTNER}',"",$text);
if($result[0]['belegnr']!="")
$text = str_replace('{BELEGNR}',$result[0]['belegnr'],$text);
else
$text = str_replace('{BELEGNR}',"",$text);
if($result[0]['belegnr']!="")
$text = str_replace('{BELEGNUMMER}',$result[0]['belegnr'],$text);
else
$text = str_replace('{BELEGNUMMER}',"",$text);
if($result[0]['kundennummer']!="")
$text = str_replace('{KUNDENNUMMER}',$result[0]['kundennummer'],$text);
else
$text = str_replace('{KUNDENNUMMER}',"",$text);
if($result[0]['verbandsnummer']!="")
$text = str_replace('{VERBANDSNUMMER}',$result[0]['verbandsnummer'],$text);
else
$text = str_replace('{VERBANDSNUMMER}',"Keine Nummer",$text);
if($result[0]['verband']!="")
$text = str_replace('{VERBAND}',$result[0]['verband'],$text);
else
$text = str_replace('{VERBAND}',"Kein Verband",$text);
if($type=="rechnung" || $type=="lieferschein")
{
$tmpauftragid = $this->app->DB->Select("SELECT auftragid FROM $type WHERE id='$id' LIMIT 1");
$result[0]['lieferdatum'] = $this->app->DB->Select("SELECT lieferdatum FROM auftrag WHERE id='$tmpauftragid' LIMIT 1");
$result[0]['tatsaechlicheslieferdatum'] = $this->app->DB->Select("SELECT tatsaechlicheslieferdatum FROM auftrag WHERE id='$tmpauftragid' LIMIT 1");
}
if($type==='bestellung'){
$result[0]['lieferdatum'] = $result[0]['gewuenschteslieferdatum'];
$check = $this->app->DB->SelectArr("SELECT a.belegnr, a.id, a.name
FROM bestellung_position bp
INNER JOIN auftrag_position ap ON ap.id = bp.auftrag_position_id
INNER JOIN auftrag a ON ap.auftrag = a.id
WHERE bp.bestellung='$id' GROUP BY a.belegnr, a.id ORDER BY a.belegnr, a.id");
if($check)
{
$tmpauftragbelegnr = array();
foreach($check as $row)
{
$tmpauftragbelegnr[] = ($row['belegnr']?$row['belegnr']:'Entwurf')." ".$row['name'].'';
}
$text = str_replace('{AUFTRAG}',implode('\r\n',$tmpauftragbelegnr),$text);
}
}
$result[0]['tatsaechlicheslieferdatum'] = $this->app->String->Convert($result[0]['tatsaechlicheslieferdatum'],"%1-%2-%3","%3.%2.%1");
if(isset($result[0]['gewuenschteslieferdatum']) && $this->CheckDateValidate($result[0]['gewuenschteslieferdatum'])){
$result[0]['gewuenschteslieferdatum'] = $this->app->String->Convert($result[0]['gewuenschteslieferdatum'],"%1-%2-%3","%3.%2.%1");
} else {
$result[0]['gewuenschteslieferdatum'] = $this->app->erp->Beschriftung("dokument_lieferdatum_sofort");
}
if($result[0]['lieferdatum']!="0000-00-00" && $result[0]['lieferdatum']!="")
{
if($type==="angebot" || $type==="auftrag")
{
$lieferdatumkw = $result[0]['lieferdatumkw'];
}
$ddate = $result[0]['lieferdatum'];
$result[0]['lieferdatum'] = $this->app->String->Convert($result[0]['lieferdatum'],"%1-%2-%3","%3.%2.%1");
$duedt = explode("-", $ddate);
$date = mktime(0, 0, 0, $duedt[1], $duedt[2], $duedt[0]);
$week = date('W/Y', $date);
if($lieferdatumkw==1)
{
$text = str_replace('{LIEFERTERMIN}',$week,$text);
$result[0]['lieferdatum'] = $week;
}
else {
$text = str_replace('{LIEFERTERMIN}',$result[0]['lieferdatum'],$text);
}
$text = str_replace('{LIEFERWOCHE}',$week,$text);
}
else
{
$text = str_replace('{LIEFERTERMIN}',$this->app->erp->Beschriftung("dokument_lieferdatum_sofort"),$text);
$text = str_replace('{LIEFERWOCHE}',$this->app->erp->Beschriftung("dokument_lieferdatum_sofort"),$text);
}
if(isset($result[0]) && isset($result[0]['gueltigbis']) && $result[0]['gueltigbis']!="0000-00-00" && $result[0]['gueltigbis']!="")
{
$ddate = $result[0]['gueltigbis'];
$result[0]['gueltigbis'] = $this->app->String->Convert($result[0]['gueltigbis'],"%1-%2-%3","%3.%2.%1");
$duedt = explode("-", $ddate);
$date = mktime(0, 0, 0, $duedt[1], $duedt[2], $duedt[0]);
$week = date('W/Y', $date);
$text = str_replace('{GUELTIGBIS}',$result[0]['gueltigbis'],$text);
$text = str_replace('{GUELTIGBISWOCHE}',$week,$text);
}
else
{
$text = str_replace('{GUELTIGBIS}',"",$text);
$text = str_replace('{GUELTIGBISWOCHE}',"",$text);
}
if(isset($result[0]) && isset($result[0]['gueltigbis']) && $result[0]['gueltigbis']!="0000-00-00" && $result[0]['gueltigbis']!="")
{
$ddate = $result[0]['gueltigbis'];
$result[0]['gueltigbis'] = $this->app->String->Convert($result[0]['gueltigbis'],"%1-%2-%3","%3.%2.%1");
$duedt = explode("-", $ddate);
$date = mktime(0, 0, 0, (int) $duedt[1], (int) $duedt[2], (int) $duedt[0]);
$week = date('W/Y', $date);
$text = str_replace('{GUELTIGBIS}',$result[0]['gueltigbis'],$text);
$text = str_replace('{GUELTIGBISWOCHE}',$week,$text);
}
else
{
$text = str_replace('{GUELTIGBIS}',"",$text);
$text = str_replace('{GUELTIGBISWOCHE}',"",$text);
}
if(strpos($text, '}') === false) {
return $text;
}
//TRackingnummer
if($type=="rechnung" || $type=="lieferschein")
{
if($type=="rechnung") {
$lieferscheine = $this->app->DB->SelectArr("SELECT id FROM lieferschein WHERE rechnungid='$id'");
if(empty($lieferscheine))
{
$lieferscheine[0]['id'] = $this->app->DB->Select("SELECT lieferschein FROM rechnung WHERE id='$id' AND id > 0 LIMIT 1");
}
}
else
{
$lieferscheine[0]['id']=$id;
}
$clieferscheine = !empty($lieferscheine)?count($lieferscheine):0;
for($li=0;$li<$clieferscheine;$li++)
{
$tracking = $this->app->DB->SelectArr("SELECT tracking FROM versand WHERE lieferschein='".$lieferscheine[$li]['id']."' AND lieferschein > 0 AND tracking!=''");
$ctracking = !empty($tracking)?count($tracking):0;
for($i=0;$i<$ctracking;$i++) {
$tmptracking[] = $tracking[$i]['tracking'];
}
/*
$nve = $this->app->DB->SelectArr("SELECT nve FROM spedition_packstuecke WHERE lieferschein='".$lieferscheine[$li]['id']."' AND nve!='' AND status!='storniert'");
$cnve = !empty($nve)?count($nve):0;
for($i=0;$i<$cnve;$i++) {
$tmpnve[] = $nve[$i]['nve'];
}*/
}
$text = str_replace('{TRACKINGNUMMER}',!empty($tmptracking)?implode(", ",$tmptracking):'',$text);
$text = str_replace('{NVE}',!empty($tmpnve)?implode(", ",$tmpnve):'',$text);
}
if(isset($result[0]['verzollungadresse']) && $result[0]['verzollungadresse']==1)
{
$text = str_replace('{VERZOLLUNGADRESSE}',$result[0]['verzollungadresse'],$text);
$text = str_replace('{VERZOLLUNGNAME}',$result[0]['verzollungname'],$text);
$text = str_replace('{VERZOLLUNGABTEILUNG}',$result[0]['verzollungabteilung'],$text);
$text = str_replace('{VERZOLLUNGUNTERABTEILUNG}',$result[0]['verzollungunterabteilung'],$text);
$text = str_replace('{VERZOLLUNGLAND}',$result[0]['verzollungland'],$text);
$text = str_replace('{VERZOLLUNGSTRASSE}',$result[0]['verzollungstrasse'],$text);
$text = str_replace('{VERZOLLUNGORT}',$result[0]['verzollungort'],$text);
$text = str_replace('{VERZOLLUNGPLZ}',$result[0]['verzollungplz'],$text);
$text = str_replace('{VERZOLLUNGADRESSZUSATZ}',$result[0]['verzollungadresszusatz'],$text);
$text = str_replace('{VERZOLLUNGANSPRECHPARTNER}',$result[0]['verzollungansprechpartner'],$text);
$text = str_replace('{VERZOLLUNGINFORMATIONEN}',$result[0]['verzollunginformationen'],$text);
}
if(strpos($text, '}') === false) {
return $text;
}
$abweichende_rechnungsadresse = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='".$result[0]['adresse']."' AND id >0 LIMIT 1");
if($abweichende_rechnungsadresse)
{
if($abweichende_rechnungsadresse['abweichende_rechnungsadresse']=="1")
{
$abweichende_rechnungsadressetext ="";
$abweichende_rechnungsadressetextlang ="";
$fieldabw = array('rechnung_name','rechnung_ansprechpartner','rechnung_abteilung','rechnung_unterabteilung','rechnung_adresszusatz','rechnung_strasse');
foreach($fieldabw as $keyabw)
{
if($abweichende_rechnungsadresse[$keyabw]!="")
{
$abweichende_rechnungsadressetext .= $abweichende_rechnungsadresse[$keyabw]."\r\n";
$abweichende_rechnungsadressetextlang .= $abweichende_rechnungsadresse[$keyabw].", ";
}
}
if(!empty($abweichende_rechnungsadresse['rechnung_plz']))
{
$abweichende_rechnungsadressetext .= $abweichende_rechnungsadresse['rechnung_land']."-".$abweichende_rechnungsadresse['rechnung_plz']." ".$abweichende_rechnungsadresse['rechnung_ort']."\r\n";
$abweichende_rechnungsadressetextlang .= $abweichende_rechnungsadresse['rechnung_land']."-".$abweichende_rechnungsadresse['rechnung_plz']." ".$abweichende_rechnungsadresse['rechnung_ort']." ";
} else {
$abweichende_rechnungsadressetext .= $abweichende_rechnungsadresse['rechnung_land']." ".$abweichende_rechnungsadresse['rechnung_ort']."\r\n";
$abweichende_rechnungsadressetextlang .= $abweichende_rechnungsadresse['rechnung_land']." ".$abweichende_rechnungsadresse['rechnung_ort']." ";
}
$text = str_replace('{ABWEICHENDE_RECHNUNGSADRESSE}',$abweichende_rechnungsadressetext,$text);
$text = str_replace('{ABWEICHENDE_RECHNUNGSADRESSELANG}',$abweichende_rechnungsadressetextlang,$text);
}
}
if($type=="rechnung" || $type=="lieferschein")
{
$tmpauftragid = $this->app->DB->Select("SELECT auftragid FROM $type WHERE id='$id' LIMIT 1");
$auftragsadresse = $this->app->DB->SelectRow("SELECT * FROM auftrag WHERE id='$tmpauftragid' LIMIT 1");
if(!empty($auftragsadresse)){
$auftragsadressetext = '';
$auftragsadressetextlang = '';
$fieldabw = array('name', 'ansprechpartner', 'abteilung', 'unterabteilung', 'adresszusatz', 'strasse');
foreach ($fieldabw as $keyabw) {
if(!empty($auftragsadresse[$keyabw])){
$auftragsadressetext .= $auftragsadresse[$keyabw] . "\r\n";
$auftragsadressetextlang .= $auftragsadresse[$keyabw] . ", ";
}
}
if(!empty($auftragsadresse['plz'])){
$auftragsadressetext .= $auftragsadresse['land'] . "-" . $auftragsadresse['plz'] . " " . $auftragsadresse['ort'] . "\r\n";
$auftragsadressetextlang .= $auftragsadresse['land'] . "-" . $auftragsadresse['plz'] . " " . $auftragsadresse['ort'] . " ";
}else{
$auftragsadressetext .= $auftragsadresse['land'] . " " . $auftragsadresse['ort'] . "\r\n";
$auftragsadressetextlang .= $auftragsadresse['land'] . " " . $auftragsadresse['ort'] . " ";
}
}
}
if($result[0]['abweichendelieferadresse']=="1")
{
$liefertext ="";
if(!empty($result[0]['liefertitel']))
{
$liefertext .= $result[0]['liefertitel']." ";
$liefertextlang .= $result[0]['liefertitel']." ";
}
if(!empty($result[0]['liefername']))
{
$liefertext .= $result[0]['liefername']."\r\n";
$liefertextlang .= $result[0]['liefername'].", ";
}
if(trim($result[0]['lieferansprechpartner']) !="")
{
$liefertext .= $result[0]['lieferansprechpartner']."\r\n";
$liefertextlang .= $result[0]['lieferansprechpartner'].", ";
}
if($result[0]['lieferabteilung']!="")
{
$liefertext .= $result[0]['lieferabteilung']."\r\n";
$liefertextlang .= $result[0]['lieferabteilung'].", ";
}
if($result[0]['lieferunterabteilung']!="")
{
$liefertext .= $result[0]['lieferunterabteilung']."\r\n";
$liefertextlang .= $result[0]['lieferunterabteilung'].", ";
}
if(trim($result[0]['lieferadresszusatz'])!="")
{
$liefertext .= $result[0]['lieferadresszusatz']."\r\n";
$liefertextlang .= $result[0]['lieferadresszusatz'].", ";
}
if($result[0]['lieferstrasse']!="")
{
$liefertext .= $result[0]['lieferstrasse']."\r\n";
$liefertextlang .= $result[0]['lieferstrasse'].", ";
}
if($result[0]['lieferplz']!="")
{
$liefertext .= $result[0]['lieferland']."-".$result[0]['lieferplz']." ".$result[0]['lieferort']."\r\n";
$liefertextlang .= $result[0]['lieferland']."-".$result[0]['lieferplz']." ".$result[0]['lieferort']." ";
} else {
$liefertext .= $result[0]['lieferland']." ".$result[0]['lieferort']."\r\n";
$liefertextlang .= $result[0]['lieferland']." ".$result[0]['lieferort']." ";
}
if($liefertext=="")
{
$abweichende_rechnungsadresse = $this->app->DB->Select("SELECT abweichende_rechnungsadresse FROM adresse WHERE id='".$result[0]['adresse']."' LIMIT 1");
if($abweichende_rechnungsadresse)
{
$text = str_replace('{LIEFERADRESSE}',($auftragsadressetext!=""?$auftragsadressetext:$this->Beschriftung("entspricht_hauptadresse")),$text);
$text = str_replace('{LIEFERADRESSELANG}',($auftragsadressetextlang!=""?$auftragsadressetextlang:$this->Beschriftung("entspricht_hauptadresse")),$text);
} else {
$text = str_replace('{LIEFERADRESSE}',$this->Beschriftung("entspricht_rechnungsadresse"),$text);
$text = str_replace('{LIEFERADRESSELANG}',$this->Beschriftung("entspricht_rechnungsadresse"),$text);
}
}
else
{
$text = str_replace('{LIEFERADRESSE}',$liefertext,$text);
$text = str_replace('{LIEFERADRESSELANG}',$liefertextlang,$text);
}
$text = str_replace('{LIEFERNAME}',$result[0]['liefername'],$text);
$text = str_replace('{LIEFERABTEILUNG}',$result[0]['lieferabteilung'],$text);
$text = str_replace('{LIEFERUNTERABTEILUNG}',$result[0]['lieferunterabteilung'],$text);
$text = str_replace('{LIEFERLAND}',$result[0]['lieferland'],$text);
$text = str_replace('{LIEFERSTRASSE}',$result[0]['lieferstrasse'],$text);
$text = str_replace('{LIEFERORT}',$result[0]['lieferort'],$text);
$text = str_replace('{LIEFERPLZ}',$result[0]['lieferplz'],$text);
$text = str_replace('{LIEFERADRESSZUSATZ}',$result[0]['lieferadresszusatz'],$text);
$text = str_replace('{LIEFERANSPRECHPARTNER}',$result[0]['lieferansprechpartner'],$text);
} else {
if($result[0]['name']!="")
{
$liefertext .= $result[0]['name']."\r\n";
$liefertextlang .= $result[0]['name'].", ";
}
if($result[0]['ansprechpartner']!="")
{
$liefertext .= $result[0]['ansprechpartner']."\r\n";
$liefertextlang .= $result[0]['ansprechpartner'].", ";
}
if($result[0]['abteilung']!="")
{
$liefertext .= $result[0]['abteilung']."\r\n";
$liefertextlang .= $result[0]['abteilung'].", ";
}
if($result[0]['unterabteilung']!="")
{
$liefertext .= $result[0]['unterabteilung']."\r\n";
$liefertextlang .= $result[0]['unterabteilung'].", ";
}
if($result[0]['strasse']!="")
{
$liefertext .= $result[0]['strasse']."\r\n";
$liefertextlang .= $result[0]['strasse'].", ";
}
if($result[0]['adresszusatz']!="")
{
$liefertext .= $result[0]['adresszusatz']."\r\n";
$liefertextlang .= $result[0]['adresszusatz'].", ";
}
if($result[0]['plz']!="")
{
$liefertext .= $result[0]['land']."-".$result[0]['plz']." ".$result[0]['ort']."\r\n";
$liefertextlang .= $result[0]['land']."-".$result[0]['plz']." ".$result[0]['ort'];
} else {
$liefertext .= $result[0]['land']." ".$result[0]['ort']."\r\n";
$liefertextlang .= $result[0]['land']." ".$result[0]['ort'];
}
if(1)//$type=="bestellung")
{
$abweichende_rechnungsadresse = $this->app->DB->Select("SELECT abweichende_rechnungsadresse FROM adresse WHERE id='".$result[0]['adresse']."' LIMIT 1");
if($abweichende_rechnungsadresse)
{
//$text = str_replace('{LIEFERADRESSE}',$this->Beschriftung("entspricht_hauptadresse"),$text);
//$text = str_replace('{LIEFERADRESSELANG}',$this->Beschriftung("entspricht_hauptadresse"),$text);
$text = str_replace('{LIEFERADRESSE}',($auftragsadressetext!=""?$auftragsadressetext:$this->Beschriftung("entspricht_hauptadresse")),$text);
$text = str_replace('{LIEFERADRESSELANG}',($auftragsadressetextlang!=""?$auftragsadressetextlang:$this->Beschriftung("entspricht_hauptadresse")),$text);
} else {
$text = str_replace('{LIEFERADRESSE}',$this->Beschriftung("entspricht_rechnungsadresse"),$text);
$text = str_replace('{LIEFERADRESSELANG}',$this->Beschriftung("entspricht_rechnungsadresse"),$text);
}
}
else
{
$text = str_replace('{LIEFERADRESSE}',$liefertext,$text);
$text = str_replace('{LIEFERADRESSELANG}',$liefertextlang,$text);
}
$text = str_replace('{LIEFERNAME}',$result[0]['name'],$text);
$text = str_replace('{LIEFERABTEILUNG}',$result[0]['abteilung'],$text);
$text = str_replace('{LIEFERUNTERABTEILUNG}',$result[0]['unterabteilung'],$text);
$text = str_replace('{LIEFERLAND}',$result[0]['land'],$text);
$text = str_replace('{LIEFERSTRASSE}',$result[0]['strasse'],$text);
$text = str_replace('{LIEFERORT}',$result[0]['ort'],$text);
$text = str_replace('{LIEFERPLZ}',$result[0]['plz'],$text);
$text = str_replace('{LIEFERADRESSZUSATZ}',$result[0]['adresszusatz'],$text);
$text = str_replace('{LIEFERANSPRECHPARTNER}',$result[0]['ansprechpartner'],$text);
}
$result[0]['datum'] = $this->app->String->Convert($result[0]['datum'],"%1-%2-%3","%3.%2.%1");
if($result[0]['lieferland']=="") $result[0]['lieferland'] = $result[0]['land'];
foreach($result[0] as $key_i=>$value_i)
{
if($type=="rechnung" && $key_i=="lieferschein") $result[0][$key_i] = $this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='".$result[0][$key_i]."' AND id >0 LIMIT 1");
$text = str_replace('{'.strtoupper($key_i).'}',$result[0][$key_i],$text);
}
if(strpos($text, '}') === false) {
return $text;
}
$belege_check = array();
switch($type)
{
case "rechnung":
$belege_check['rechnung']=$id;
$belege_check['lieferschein']=$this->app->DB->Select("SELECT lieferschein FROM rechnung WHERE id='$id' LIMIT 1");
$belege_check['auftrag']=$this->app->DB->Select("SELECT auftragid FROM rechnung WHERE id='$id' LIMIT 1");
break;
case "lieferschein":
$belege_check['lieferschein']=$id;
$belege_check['auftrag']=$this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$id' LIMIT 1");
$belege_check['rechnung']=$this->app->DB->Select("SELECT id FROM rechnung WHERE lieferschein='$id' LIMIT 1");
break;
case "retoure":
$belege_check['retoure']=$id;
$belege_check['lieferschein']=$this->app->DB->Select("SELECT lieferscheinid FROM retoure WHERE id='$id' LIMIT 1");
$belege_check['auftrag']=$this->app->DB->Select("SELECT auftragid FROM retoure WHERE id='$id' LIMIT 1");
break;
case "gutschrift":
$belege_check['gutschrift']=$id;
$belege_check['rechnung']=$this->app->DB->Select("SELECT rechnungid FROM gutschrift WHERE id='$id' LIMIT 1");
break;
}
if((!empty($belege_check)?count($belege_check):0)>0)
{
foreach($belege_check as $table=>$tableid) {
$belege_arr = $this->app->DB->SelectRow("SELECT * FROM $table WHERE id='".$tableid."'");
if($belege_arr) {
foreach($belege_arr as $key_i=>$value_i)
{
if (strpos($key_i, 'datum') !== false) {
$belege_arr[$key_i] = $this->app->String->Convert($belege_arr[$key_i],"%1-%2-%3","%3.%2.%1");
}
$text = str_replace('{'.strtoupper($table).'_'.strtoupper($key_i).'}',$belege_arr[$key_i],$text);
}
}
}
}
$adresse_arr = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='".$result[0]['adresse']."'");
if($adresse_arr) {
foreach($adresse_arr as $key_i=>$value_i)
{
$text = str_replace('{ADRESSE_'.strtoupper($key_i).'}',$adresse_arr[$key_i],$text);
}
}
$projekt_arr = $this->app->DB->SelectRow("SELECT * FROM projekt WHERE id='".$projekt."' AND id > 0");
if($projekt_arr)
{
foreach($projekt_arr as $key_i=>$value_i) {
$text = str_replace('{PROJEKT_'.strtoupper($key_i).'}',$projekt_arr[$key_i],$text);
}
}
$anzahlfreifelder = 20;
for($i=1;$i<=0;$i++)
{
if($adresse_arr["freifeld".$i]!="")
$text = str_replace('{BESCHRIFTUNG_FREIFELD'.$i.'}',$this->app->erp->Firmendaten("adressefreifeld".$i).": ",$text);
else
$text = str_replace('{BESCHRIFTUNG_FREIFELD'.$i.'}',"",$text);
}
if(strpos($text, '{GRUPPE_') !== false) {
$text = $this->parseGroupSum($type,$id,$text);
}
if(!$removeuneused) {
return $this->ParseIfVars($text);
}
//return $text;
return $this->RemoveUnusedParsevars($this->ParseIfVars($text));
}
/**
* @param string $doctype
* @param int $id
* @param string $text
*
* @return string
*/
public function parseGroupSum($doctype,$id,$text)
{
if($id <= 0 || !in_array($doctype, ['angebot','auftrag','rechnung','gutschrift']) ||
strpos($text, '{GRUPPE_') === false) {
return $text;
}
$zwischenPositionen = $this->app->DB->SelectArr(
sprintf(
"SELECT *
FROM `beleg_zwischenpositionen`
WHERE doctype = '%s' AND doctypeid = %d
AND (postype = 'gruppensumme' OR postype = 'gruppensummemitoptionalenpreisen' OR postype = 'gruppe')
ORDER BY pos, sort",
$doctype, $id
)
);
if(empty($zwischenPositionen)) {
return $text;
}
$method = $doctype.'MitUmsatzeuer';
$withTax = !method_exists($this, $method)?true:$this->$method($id);
$normal = !$withTax?1:$this->GetSteuersatzNormal(true, $id, $doctype);
$reduced = !$withTax?1:$this->GetSteuersatzErmaessigt(true, $id, $doctype);
$positions = $this->app->DB->SelectArr(
sprintf(
'SELECT * FROM `%s` WHERE `%s` = %d ORDER BY sort, id',
$doctype.'_position',
$doctype, $id
)
);
if(empty($positions)) {
return $text;
}
$sortToKey = [];
foreach($positions as $posKey => $position) {
$sortToKey[$position['sort']] = $posKey;
}
$index = 0;
$sums = [];
foreach($zwischenPositionen as $zwischenPosition) {
if($zwischenPosition['postype'] === 'gruppe') {
$index++;
$sums[$index] = ['startpos' => $zwischenPosition['pos'] + 1,'endpos' => $zwischenPosition['pos']];
}
if($zwischenPosition['postype'] === 'gruppensumme' && $index > 0) {
$sums[$index]['endpos'] = $zwischenPosition['pos'];
$sums[$index]['type'] = 'gruppensumme';
}
elseif($zwischenPosition['postype'] === 'gruppensummemitoptionalenpreisen' && $index > 0) {
$sums[$index]['endpos'] = $zwischenPosition['pos'];
$sums[$index]['type'] = 'gruppensummemitoptionalenpreisen';
}
}
if(empty($sums)) {
return $text;
}
foreach($sums as $index => $sum) {
$val = 0;
for($i = $sum['startpos']; $i <= $sum['endpos']; $i++) {
if(!isset($sortToKey[$i])) {
continue;
}
$position = $positions[$sortToKey[$i]];
if($sum['type'] !== 'gruppensummemitoptionalenpreisen'
&& $doctype === 'angebot' && !empty($position['optional'])) {
continue;
}
$price = $position['preis'] * $position['menge'] * (1 - $position['rabatt'] / 100);
if($withTax) {
if($position['steuersatz'] !== null && $position['steuersatz'] >= 0) {
$price *= 1+ $position['steuersatz'] / 100;
}
elseif($position['umsatzsteuer'] === 'ermaessigt') {
$price *= $reduced;
}
elseif($position['umsatzsteuer'] === 'befreit') {
$price *= $normal;
}
}
$val += (float)$price;
}
$text = str_replace('{GRUPPE_'.$index.'}', $val, $text);
}
return $text;
}
// @refactor DocumentPdf Komponente
function RemoveUnusedParsevars($text)
{
return preg_replace('/([^\{]|^)\{([A-Z\_0-9]+)\}([^\}]|$)/','$1$3', $text); // Ersetze {AB_12} aber nicht {{ABC}}, da für Formel reserviert
}
// @refactor DocumentPdf Komponente
function ParseIfVars($text, $removevars = false)
{
if((String)$text === '')
{
return $text;
}
$if = strpos($text, '{IF}');
if($if === false)
{
return $text;
}
$then = strpos($text, '{THEN}', $if);
if($then === false)
{
return $text;
}
$endif = strpos($text, '{ENDIF}', $then);
if($endif === false)
{
return $text;
}
$else = strpos($text, '{ELSE}', $then);
if($else !== false)
{
$elses[] = $else;
while(false !== ($dummy = strpos($text, '{ELSE}', $elses[(!empty($elses)?count($elses):0)-1]+1)))
{
$elses[] = $dummy;
}
}
$ifs[] = $if;
$thens[] = $then;
$endifs[] = $endif;
while(false !== ($dummy = strpos($text, '{IF}', $ifs[(!empty($ifs)?count($ifs):0)-1]+1)))
{
$ifs[] = $dummy;
}
while(false !== ($dummy = strpos($text, '{THEN}', $thens[(!empty($thens)?count($thens):0)-1]+1)))
{
$thens[] = $dummy;
}
while(false !== ($dummy = strpos($text, '{ENDIF}', $endifs[(!empty($endifs)?count($endifs):0)-1]+1)))
{
$endifs[] = $dummy;
}
foreach($ifs as $v)
{
$element[$v] = array('if', $v);
}
foreach($thens as $v)
{
$element[$v] = array('then', $v);
}
foreach($endifs as $v)
{
$element[$v] = array('endif', $v);
}
if(!empty($elses))
{
foreach($elses as $v)
{
$element[$v] = array('else', $v);
}
}
if((!empty($ifs)?(!empty($ifs)?count($ifs):0):0) != (!empty($thens)?count($thens):0) || count($ifs) != (!empty($endifs)?count($endifs):0))
{
return $text;
} //Fehlende Elemente
$stufe = 0;
$maxstufe = 0;
$akt[0] = 0;
$elements = null;
if(!empty($element)){
ksort($element);
foreach ($element as $k => $v) {
if($v[0] == 'if'){
$stufe++;
$akt[$stufe] = 1;
$lastif[$stufe] = $elements ? count($elements) : 0;
}elseif($v[0] == 'then'){
$akt[$stufe] = 2;
}elseif($v[0] == 'else'){
$akt[$stufe] = 3;
}elseif($v[0] == 'endif'){
}
$elements[] = array('pos' => $v[1], 'type' => $v[0], 'stufe' => $stufe, 'akt' => $akt[$stufe]);
if($v[0] == 'endif'){
if(isset($lastif[$stufe])){
$elements[(!empty($elements)?count($elements):0) - 1]['if'] = $lastif[$stufe];
$elements[$lastif[$stufe]]['endif'] = (!empty($elements)?count($elements):0) - 1;
unset($lastif[$stufe]);
$stufe--;
}
}elseif($v[0] == 'then'){
if(isset($lastif[$stufe])){
$elements[(!empty($elements)?count($elements):0) - 1]['if'] = $lastif[$stufe];
$elements[$lastif[$stufe]]['then'] = (!empty($elements)?count($elements):0) - 1;
}
}elseif($v[0] == 'else'){
if(isset($lastif[$stufe])){
$elements[(!empty($elements)?count($elements):0) - 1]['if'] = $lastif[$stufe];
$elements[$lastif[$stufe]]['else'] = (!empty($elements)?count($elements):0) - 1;
}
}
}
}
$ret = '';
$pos = 0;
if(!empty($elements)){
foreach ($elements as $k => $v) {
if(($v['type'] == 'if') && ($v['stufe'] == 1)){
if($v['pos'] > $pos)
{
if($pos >= 0)
{
$ret .= substr($text, $pos, $v['pos'] - $pos);
}
if(is_numeric($matches[1][0]) && is_numeric($matches[2][0]))
{
if($matches[1][0] != $matches[2][0])
{
$check = '';
}
}elseif($matches[1][0] !== $matches[2][0])
{
$check = '';
}
}
if(!isset($v['then']))
{
return $text;
}
$thenpos = $v['then'];
if($thenpos == $k + 1){
$check = strip_tags(substr($text, $v['pos'] + 4, $elements[$thenpos]['pos'] - ($v['pos'] + 4)));
}else{
$check = strip_tags($this->ParseIfVars(substr($text, $v['pos'] + 4, $elements[$thenpos]['pos'] - ($v['pos'] + 4))));
}
$check = $this->RemoveUnusedParsevars($check);
if(trim((String)$check) === '0' || trim((String)$check) === '')
{
$check = '';
}
if($removevars) $check = preg_replace('/\{([^{}]*+|(?R))*\}\s*/', '', $check);
if((String)$check !== ''){
if(preg_match_all('/^(.*)\=\"(.*)\"/', $check, $matches)){
if($matches[1][0] !== $matches[2][0]) $check = '';
}elseif(preg_match_all('/^(.*)\=&quot;(.*)&quot;/', str_replace('&quot,','&quot;', $check), $matches)){
if($matches[1][0] !== $matches[2][0]) $check = '';
}
}
if((String)$check !== ''){
if(isset($v['else'])){
$ret .= $this->ParseIfVars(substr($text, $elements[$v['then']]['pos'] + 6, $elements[$v['else']]['pos'] - ($elements[$v['then']]['pos'] + 6)));
}elseif(isset($v['endif'])){
$ret .= $this->ParseIfVars(substr($text, $elements[$v['then']]['pos'] + 6, $elements[$v['endif']]['pos'] - ($elements[$v['then']]['pos'] + 6)));
}else
{
return $text;
}
$pos = $elements[$v['endif']]['pos'] + 7;
}else{
if(isset($v['else'])){
$ret .= $this->ParseIfVars(substr($text, $elements[$v['else']]['pos'] + 6, $elements[$v['endif']]['pos'] - ($elements[$v['else']]['pos'] + 6)));
}elseif(isset($v['endif'])){
}else
{
return $text;
}
$pos = $elements[$v['endif']]['pos'] + 7;
}
}elseif(($v['type'] == 'endif') && ($v['stufe'] == 1)){
$pos = $v['pos'] + 7;
}
}
}
$toAdd = substr($text, $pos);
$brpatternStart = '/(^<\s*br\s*\/*>)/i';
$brpatternEnd = '/(<\s*br\s*\/*>$)/i';
//Zeilenumbrüche am Anfang
if(preg_match($brpatternStart, $ret)){
while(preg_match($brpatternStart, $ret)){
$ret = preg_replace($brpatternStart, '', $ret);
}
}
//Zeilenumbrüche dazwischen
if( preg_match($brpatternEnd, $ret) && preg_match($brpatternStart, $toAdd)){
while(preg_match($brpatternStart, $toAdd)){
$toAdd = preg_replace($brpatternStart, '', $toAdd);
}
}
$ret .=$toAdd;
return $ret;
}
// @refactor Document Komponente
function CheckBearbeiter($id,$module)
{
if(empty($id) || empty($module)) {
return;
}
if($this->Firmendaten('vertriebbearbeiterfuellen')=='1') {
$this->app->DB->Update("UPDATE $module SET bearbeiter='' WHERE id='$id' AND bearbeiter REGEXP '^[0-9]+$' LIMIT 1");
return;
}
$docArr = $this->app->DB->SelectRow(
sprintf(
'SELECT bearbeiter, adresse FROM `%s` WHERE id = %d',
$module, $id
)
);
if(!empty($docArr)) {
$bearbeiter = $docArr['bearbeiter'];
}
else{
$bearbeiter = $this->app->DB->Select("SELECT bearbeiter FROM $module WHERE id='$id' LIMIT 1");
}
if($bearbeiter=='' || $bearbeiter=='0') {
// pruefe ob es innendienst verantwortlichen gib
$adresse = !empty($docArr)?$docArr['adresse']: $this->app->DB->Select(
"SELECT adresse FROM $module WHERE id='$id' LIMIT 1"
);
$innendienst = empty($adresse)?null:$this->app->DB->Select("SELECT innendienst FROM adresse WHERE id='$adresse' LIMIT 1");
$innendienst_name = empty($innendienst)?null:$this->app->DB->Select("SELECT name FROM adresse WHERE id='$innendienst' LIMIT 1");
if($innendienst_name!='' && $innendienst_name!='0') {
$this->app->DB->Update(
sprintf(
"UPDATE `%s`
SET bearbeiter='%s',bearbeiterid=%d
WHERE id=%d
LIMIT 1",
$module, $this->app->DB->real_escape_string($innendienst_name), $innendienst,$id
)
);
}
else {
$this->app->DB->Update(
sprintf(
"UPDATE `%s`
SET bearbeiter='%s',bearbeiterid=%d
WHERE id=%d
LIMIT 1",
$module, $this->app->DB->real_escape_string($this->app->User->GetName()),
$this->app->User->GetAdresse(), $id
)
);
}
}
else if (is_numeric($bearbeiter)) {
$bearbeiter = $this->app->DB->Select("SELECT name FROM adresse WHERE id='".$bearbeiter."' LIMIT 1");
if(empty($bearbeiter)) {
return;
}
$this->app->DB->Update(
sprintf(
"UPDATE `%s` SET bearbeiter='%s' WHERE id=%d LIMIT 1",
$module, $this->app->DB->real_escape_string($bearbeiter), $id
)
);
}
}
function LoadModul($class)
{
return $this->app->loadModule($class);
}
// @refactor ApplicationCore Klasse
function InstallModul($module)
{
if(!$this->ModulVorhanden($module)) {
return false;
}
if(strpos($module,'cronjob_') === 0) {
$module = substr($module, 8);
if(!$this->ModulVorhanden($module)) {
return false;
}
}
try {
$obj = $this->LoadModul($module);
}
catch(Exception $e) {
return false;
}
if(empty($obj)) {
return false;
}
if(!method_exists($obj, 'Install')) {
return false;
}
try {
return $obj->Install();
}
catch(Exception $e) {
return false;
}
}
// @refactor Document Komponente
function VertriebAendern($table,$id,$cmd="",$sid="")
{
$saction = $this->app->Secure->GetGET("saction");
if ($cmd=="change")
{
if($sid > 0 && $id > 0)
{
$name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$sid' LIMIT 1");
$this->app->DB->Update("UPDATE $table SET vertriebid = $sid, vertrieb='$name' WHERE id='$id' LIMIT 1");
header("Location: index.php?module=$table&action=edit&id=$id&cmd=");
exit;
}
}
else if($cmd!="change" && $cmd!="" && $saction=="" && $cmd!="changeinnendienst")
{
$this->app->erp->MenuEintrag("index.php?module=$table&action=edit&id=$id","Zur&uuml;ck zur &Uuml;bersicht");
$this->app->Tpl->Set('TAB1',"<div class=\"info\">Bitte den neuen Verteter bzw. Verk&auml;ufer f&uuml;r die Abrechnung der Provision ausw&auml;hlen.</div>");
$this->app->YUI->TableSearch('TAB1',"adressevertrieb");
$this->app->Tpl->Parse('PAGE',"tabview.tpl");
return 1;
}
else {
$schreibschutz= $this->app->DB->Select("SELECT schreibschutz FROM $table WHERE id='$id' LIMIT 1");
if($schreibschutz!="1")
{
$this->app->Tpl->Set('VERTRIEBBUTTON',"<a href=\"index.php?module=$table&action=edit&id=$id&cmd=$table\"><img src=\"./themes/new/images/edit.svg\"></a>");
}
return 0;
}
}
// @refactor Document Komponente
function InnendienstAendern($table,$id,$cmd="",$sid="")
{
$saction = $this->app->Secure->GetGET("saction");
if ($cmd=="changeinnendienst")
{
if($sid > 0 && $id > 0)
{
$name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='$sid' LIMIT 1");
$this->app->DB->Update("UPDATE $table SET bearbeiterid = $sid, bearbeiter='$name' WHERE id='$id' LIMIT 1");
header("Location: index.php?module=$table&action=edit&id=$id&cmd=");
exit;
}
}
else if($cmd!="change" && $cmd!="" && $saction=="innendienst")
{
$this->app->erp->MenuEintrag("index.php?module=$table&action=edit&id=$id","Zur&uuml;ck zur &Uuml;bersicht");
$this->app->Tpl->Set('TAB1',"<div class=\"info\">Bitte den neuen Innendienst bzw. Bearbeiter ausw&auml;hlen.</div>");
$this->app->YUI->TableSearch('TAB1',"adresseinnendienst");
$this->app->Tpl->Parse('PAGE',"tabview.tpl");
return 1;
}
else {
$schreibschutz= $this->app->DB->Select("SELECT schreibschutz FROM $table WHERE id='$id' LIMIT 1");
if($schreibschutz!="1")
{
$this->app->Tpl->Set('INNENDIENSTBUTTON',"<a href=\"index.php?module=$table&action=edit&id=$id&cmd=$table&saction=innendienst\"><img src=\"./themes/new/images/edit.svg\"></a>");
}
return 0;
}
}
/** @deprecated @refactor in scripts.js */
function EnableTab($tab)
{
$this->app->Tpl->Add('ADDITIONALJAVASCRIPT',"<script type=\"text/javascript\">
$(document).ready(function() {
$('a[href=\"#$tab\"]').click();
});</script>");
}
// @refactor Document Komponente
function CheckVertrieb($id,$module)
{
if(empty($id) || empty($module)) {
return;
}
if($this->Firmendaten('vertriebbearbeiterfuellen')=='1') {
$this->app->DB->Update("UPDATE $module SET vertrieb='' WHERE id='$id' AND vertrieb REGEXP '^[0-9]+$' LIMIT 1");
return;
}
if($module === 'auftrag'){
$docArr = $this->app->DB->SelectRow(
sprintf(
'SELECT shop,adresse, vertriebid, vertrieb FROM auftrag WHERE id = %d',
$id
)
);
}
else {
$docArr = $this->app->DB->SelectRow(
sprintf(
'SELECT adresse, vertriebid, vertrieb FROM `%s` WHERE id = %d',
$module,
$id
)
);
}
$vertrieb = !empty($docArr)?$docArr['vertriebid']: $this->app->DB->Select("SELECT vertriebid FROM $module WHERE id='$id' LIMIT 1");
// bei shops nicht
if($module==='auftrag') {
$shop = !empty($docArr)?$docArr['shop']:$this->app->DB->Select("SELECT shop FROM auftrag WHERE id='$id' LIMIT 1");
if($shop > 0) {
return;
}
}
if($vertrieb<=0 || $vertrieb=='' || $vertrieb=='0') {
// pruefe ob es innendienst verantwortlichen gib
$adresse = !empty($docArr)?$docArr['adresse']:$this->app->DB->Select("SELECT adresse FROM $module WHERE id='$id' LIMIT 1");
$vertrieb = empty($adresse)?null:$this->app->DB->Select("SELECT vertrieb FROM adresse WHERE id='$adresse' LIMIT 1");
$vertrieb_name = empty($vertrieb)?null: $this->app->DB->Select("SELECT name FROM adresse WHERE id='$vertrieb' LIMIT 1");
if($vertrieb_name!='' && $vertrieb_name!='0') {
$this->app->DB->Update(
sprintf(
"UPDATE `%s`
SET vertriebid=%d,vertrieb='%s'
WHERE id=%d
LIMIT 1",
$module, $vertrieb, $this->app->DB->real_escape_string($vertrieb_name), $id
)
);
}
else {
$checktmp = !empty($docArr)?$docArr['vertrieb']: $this->app->DB->Select("SELECT vertrieb FROM $module WHERE id='$id' LIMIT 1");
if($checktmp=='' || $checktmp=='0') {
if($vertrieb<=0) {
$vertrieb = $this->app->User->GetAdresse(); // falls kein vertrieb in der adresse definiert ist kriegt es der der angelegt war
}
$this->app->DB->Update(
sprintf(
"UPDATE `%s`
SET vertriebid=%d, vertrieb='%s'
WHERE id=%d
LIMIT 1",
$module, $vertrieb, $this->app->DB->real_escape_string($this->app->User->GetName()), $id
)
);
}
}
}
else if (is_numeric($vertrieb)) {
$vertrieb_name = $this->app->DB->Select("SELECT name FROM adresse WHERE id='".$vertrieb."' LIMIT 1");
$this->app->DB->Update(
sprintf(
"UPDATE `%s` SET vertrieb='%s',vertriebid=%d WHERE id=%d LIMIT 1",
$module, $this->app->DB->real_escape_string($vertrieb_name), $vertrieb, $id
)
);
}
}
// @refactor Document Komponente
function CheckBuchhaltung($id,$module)
{
$buchhaltung = $this->app->DB->Select("SELECT buchhaltung FROM $module WHERE id='$id' LIMIT 1");
if($buchhaltung=="")
$this->app->DB->Update("UPDATE $module SET buchhaltung='".$this->app->User->GetName()."' WHERE id='$id' LIMIT 1");
else if (is_numeric($buchhaltung))
{
$buchhaltung = $this->app->DB->Select("SELECT name FROM adresse WHERE id='".$buchhaltung."' LIMIT 1");
$this->app->DB->Update("UPDATE $module SET bearbeiter='".$buchhaltung."' WHERE id='$id' LIMIT 1");
}
}
// @refactor in Lager Modul
function GetArtikelStandardlager($artikel,$send_id=false)
{
if($send_id)
{
$standardlager = $this->app->DB->Select("SELECT a.lager_platz FROM artikel a INNER JOIN lager_platz lp ON lp.id=a.lager_platz
WHERE lp.id > 0 AND lp.kurzbezeichnung!='' AND a.id='".$artikel."' LIMIT 1");
if($standardlager <=0)
{
//lagerplatz wo am meisten drinnen ist
$lagerbezeichnung = $this->app->DB->Select("SELECT lp.id FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lp.id=lpi.lager_platz
WHERE lpi.artikel='".$artikel."' AND lp.autolagersperre!=1 AND lp.sperrlager!='1' ORDER by lpi.menge DESC LIMIT 1");
} else {
$lagerbezeichnung = $this->app->DB->Select("SELECT id FROM lager_platz WHERE id='".$standardlager."' LIMIT 1");
}
return $lagerbezeichnung;
} else {
$standardlager = $this->app->DB->Select("SELECT a.lager_platz FROM artikel a INNER JOIN lager_platz lp ON lp.id=a.lager_platz
WHERE lp.id > 0 AND lp.kurzbezeichnung!='' AND a.id='".$artikel."' LIMIT 1");
if($standardlager <=0)
{
//lagerplatz wo am meisten drinnen ist
$lagerbezeichnung = $this->app->DB->Select("SELECT lp.kurzbezeichnung FROM lager_platz_inhalt lpi INNER JOIN lager_platz lp ON lp.id=lpi.lager_platz
WHERE lpi.artikel='".$artikel."' AND lp.autolagersperre!=1 AND lp.sperrlager!='1' ORDER by lpi.menge DESC LIMIT 1");
} else {
$lagerbezeichnung = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE id='".$standardlager."' LIMIT 1");
}
return $lagerbezeichnung;
}
}
// @refactor in Etiketten Modul
function LieferscheinPositionenDrucken($lieferschein,$etiketten_drucker,$etiketten_art,$etiketten_sort=0)
{
/** @var Etiketten $obj */
$obj = $this->LoadModul('etiketten');
if(!empty($obj) && method_exists($obj, 'LieferscheinPositionenDrucken')) {
$obj->LieferscheinPositionenDrucken($lieferschein,$etiketten_drucker,$etiketten_art,$etiketten_sort);
}
}
// @refactor Document Komponente
function MessageHandlerStandardForm()
{
$module = $this->app->Secure->GetGET("module");
$id = $this->app->Secure->GetGET("id");
if($this->app->Secure->GetPOST("speichern")!="")
{
if($this->app->Secure->GetGET("msg")=="")
{
$msg = $this->app->Secure->GetGET("msg");
$msg = $msg.$this->app->Tpl->Get('MESSAGE');
$msg = base64_encode($msg);
} else {
$msg = $this->app->Secure->GetGET("msg");
}
$msgid = (int)$this->app->Secure->GetGET("msgid");
header("Location: index.php?module=$module&action=edit&id=$id&msg=$msg".($msgid>0?"&msgid=$msgid":''));
exit;
}
}
// @refactor in Secure oder StringCleaner Klasse
function superentities( $str ){
// get rid of existing entities else double-escape
$str = html_entity_decode(stripslashes($str),ENT_QUOTES| ENT_HTML5,'UTF-8');
// $str = str_replace("'","&apos;",$str);
// return $str;
$ar = preg_split('/(?<!^)(?!$)/u', $str ); // return array of every multi-byte character
foreach ($ar as $c){
$o = ord($c);
if ( (strlen($c) > 1) || /* multi-byte [unicode] */
($o <32 || $o > 126) || /* <- control / latin weirdos -> */
($o >33 && $o < 35) ||/* quotes + ambersand */
($o >35 && $o < 40) ||/* quotes + ambersand */
($o >59 && $o < 63) /* html */
) {
// convert to numeric entity
//$c = @mb_encode_numericentity($c,array (0x0, 0xffff, 0, 0xffff), 'UTF-8');
$c = $this->convertToHtml($c);
}
if(!isset($str2))$str2 = '';
$str2 .= $c;
}
return $str2;
}
// @refactor in Secure oder StringCleaner Klasse
function convertToHtml($str) {
// $str = utf8_decode($str);
// $trans_tbl = get_html_translation_table (HTML_ENTITIES,ENT_HTML5);
if (version_compare(PHP_VERSION, '5.3.4') >= 0) {
$trans_tbl = array_flip(get_html_translation_table(HTML_ENTITIES, ENT_COMPAT, 'UTF-8'));
} else {
$trans_tbl = array_flip(get_html_translation_table(HTML_ENTITIES, ENT_COMPAT));
if (!empty($trans_tbl)) {
foreach ($trans_tbl as $key => $entry) {
$trans_tbl[$key] = utf8_encode($entry);
}
}
}
// MS Word strangeness..
// smart single/ double quotes:
$trans_tbl[chr(39)] = '&apos;';
$trans_tbl[chr(145)] = '\'';
$trans_tbl[chr(146)] = '\'';
//$trans_tbl[chr(147)] = '&quot;';
$trans_tbl[chr(148)] = '&quot;';
$trans_tbl[chr(142)] = '&eacute;';
//&#65279;
//$trans_tbl[$this->unicode_chr(65279)] = "BENE";
//$str = str_replace("\xFF\xFE", "BENE", $str);
return strtr ($str, $trans_tbl);
}
// @refactor Installer Komponente
function InitialSetup()
{
//pruefe ob es bereits daten gibt
//$this->app->DB->Select("LOCK TABLES adresse WRITE;");
if($this->app->DB->Select("SELECT COUNT(id) FROM adresse WHERE geloescht!=1")<=0)
{
$mitarbeiternummer = $this->GetNextMitarbeiternummer();
$sql = 'INSERT INTO `adresse` (`id`, `typ`, `marketingsperre`, `trackingsperre`, `rechnungsadresse`, `sprache`, `name`, `abteilung`, `unterabteilung`, `ansprechpartner`, `land`, `strasse`, `ort`, `plz`, `telefon`, `telefax`, `mobil`, `email`, `ustid`, `ust_befreit`, `passwort_gesendet`, `sonstiges`, `adresszusatz`, `kundenfreigabe`, `steuer`, `logdatei`, `kundennummer`, `lieferantennummer`, `mitarbeiternummer`, `konto`, `blz`, `bank`, `inhaber`, `swift`, `iban`, `waehrung`, `paypal`, `paypalinhaber`, `paypalwaehrung`, `projekt`, `partner`, `geloescht`, `firma`) VALUES (NULL, \'\', \'\', \'\', \'\', \'\', \'Administrator\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', NOW(), \'\', \'\', \''.$mitarbeiternummer.'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'1\', \'\', \'\', \'1\');';
$this->app->DB->InsertWithoutLog($sql);
$adresse = $this->app->DB->GetInsertID();
$sql = "INSERT INTO `adresse_rolle` (`id`, `adresse`, `projekt`, `subjekt`, `praedikat`, `objekt`, `parameter`, `von`, `bis`) VALUES
('', '$adresse', 0, 'Mitarbeiter', '', '', '', NOW(), '0000-00-00');";
$this->app->DB->InsertWithoutLog($sql);
$sql = 'INSERT INTO `firma` (`id`, `name`, `standardprojekt`) VALUES (NULL, \'Musterfirma\', \'1\');';
$this->app->DB->InsertWithoutLog($sql);
$salt = hash('sha512', microtime(true));
$sha512 = hash('sha512', 'admin' . $salt);
$sql = 'INSERT INTO `user` (`id`, `username`, `password`, `repassword`, `salt`, `passwordsha512`, `description`, `settings`, `parentuser`, `activ`, `type`, `adresse`, `standarddrucker`, `firma`, `logdatei`,`externlogin`) VALUES (NULL, \'admin\', \'\', \'\', \'' . $salt . '\', \'' . $sha512 . '\', NULL, \'\', NULL, \'1\', \'admin\', \''.$adresse.'\', \'\', \'1\', NOW(),\'1\');';
$this->app->DB->InsertWithoutLog($sql);
$sql = 'INSERT INTO `projekt` (`id`, `name`, `abkuerzung`, `verantwortlicher`, `beschreibung`, `sonstiges`, `aktiv`, `farbe`, `autoversand`, `checkok`, `checkname`, `zahlungserinnerung`, `zahlungsmailbedinungen`, `folgebestaetigung`, `kundenfreigabe_loeschen`, `autobestellung`, `firma`, `logdatei`) VALUES (NULL, \'Hauptprojekt\', \'HAUPTPROJEKT\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'\', \'1\', \'\');';
$this->app->DB->InsertWithoutLog($sql);
}
//$this->app->DB->Select("UNLOCK TABLES;");
}
// @refactor in Lager Modul
function ValidLager($lager)
{
$result = $this->app->DB->Select("SELECT id FROM lager_platz WHERE id='$lager' LIMIT 1");
return $result > 0?1:0;
}
// @refactor in Artikel Modul
function ValidArtikelID($artikel)
{
if($artikel<=0 || $artikel=="" || !is_numeric($artikel)){
return 0;
}
$result = $this->app->DB->Select("SELECT id FROM artikel WHERE id='$artikel' LIMIT 1");
return $result > 0?1:0;
}
// @refactor in Artikel Modul
function ValidArtikelnummer($artikel)
{
if($artikel<=0 || $artikel=="")
return 0;
$result = $this->app->DB->Select("SELECT id FROM artikel WHERE nummer='$artikel' LIMIT 1");
if($result > 0)
return 1;
$result = $this->app->DB->Select("SELECT id FROM artikel WHERE id='$artikel' LIMIT 1");
if($result > 0)
return 1;
$result = $this->app->DB->Select("SELECT id FROM artikel WHERE ean='$artikel' LIMIT 1");
if($result > 0)
return 1;
return 0;
}
// @refactor in UserPermission Komponente
/**
* @return string
*/
public function ProjektleiterRechte()
{
// alle projekte Wo Mitarbeiter ist
$result = $this->app->DB->SelectArr(
sprintf(
"SELECT DISTINCT parameter
FROM adresse_rolle
WHERE subjekt='Projektleiter' AND (IFNULL(bis,'0000-00-00')='0000-00-00' OR bis < NOW())
AND adresse=%d",
$this->app->User->GetAdresse()
)
);
//if($sql!="" && (!empty($result)?count($result):0)>0) $sql .= " OR ";
if(empty($result)) {
return '';
}
$cResult = (!empty($result)?count($result):0);
$sql = '';
for($i=0;$i<$cResult;$i++) {
$sql .= "p.id='".$result[$i]['parameter']."'";
if($i < $cResult - 1){
$sql .= ' OR ';
}
}
return " AND ($sql) ";
}
// @refactor in UserPermission Komponente
/**
* @param int $projekt
*
* @return bool
*/
public function UserProjektRecht($projekt)
{
if($projekt <= 0) {
return true;
}
if($this->app->User->GetType()==='admin') {
return true;
}
if($this->Projektdaten($projekt, 'oeffentlich')) {
return true;
}
if($this->Firmendaten('onlyemployeeprojects')) {
return $this->app->DB->Select(
sprintf(
"SELECT id
FROM adresse_rolle
WHERE (IFNULL(bis,'0000-00-00')='0000-00-00' OR bis <= CURDATE()) AND adresse = %d
AND (parameter = '' OR parameter = '0' OR parameter = '%d')
AND objekt LIKE 'projekt' AND subjekt = 'Mitarbeiter'
LIMIT 1",
$this->app->User->GetAdresse(), $projekt
)
) > 0;
}
return $this->app->DB->Select(
sprintf(
"SELECT id
FROM adresse_rolle
WHERE (IFNULL(bis,'0000-00-00')='0000-00-00' OR bis <= CURDATE()) AND adresse = %d
AND (parameter = '' OR parameter = '0' OR parameter = '%d')
AND objekt LIKE 'projekt'
LIMIT 1",
$this->app->User->GetAdresse(), $projekt
)
) > 0;
}
// @refactor in UserPermission Komponente
/**
* @param string $prefix
* @param bool $cache
* @param string $prefixvertreter
* @param bool $auchprojekte
* @param string $subsql
*
* @return string
*/
public function ProjektRechte($prefix='p.id', $cache = true, $prefixvertreter = '', $auchprojekte = false, $subsql='')
{
$db = $this->app->Conf->WFdbname;
if($this->app->User->GetType()==='admin') {
return '';
}
$addressId = (int)$this->app->User->GetAdresse();
if($cache && !empty($this->cache[$db]) && !empty($this->cache[$db]['projectall_by_user'])
&& isset($this->cache[$db]['projectall_by_user'][$addressId])
) {
$resultalle = $this->cache[$db]['projectall_by_user'][$addressId];
}
else{
// wenn mitarbeiter projektleiter für alles dann darf man alles sehen
if($this->Firmendaten('onlyemployeeprojects')){
$resultalle = $this->app->DB->Select(
sprintf(
"SELECT id
FROM adresse_rolle
WHERE (IFNULL(bis,'0000-00-00')='0000-00-00' OR bis > NOW()) AND adresse= %d
AND (parameter='' OR parameter='0') AND objekt LIKE 'projekt' AND subjekt = 'Mitarbeiter'
LIMIT 1",
$addressId
)
);
}else{
$resultalle = $this->app->DB->Select(
sprintf(
"SELECT id
FROM adresse_rolle
WHERE (IFNULL(bis,'0000-00-00')='0000-00-00' OR bis > NOW()) AND adresse= %d
AND (parameter='' OR parameter='0') AND objekt LIKE 'projekt'
LIMIT 1",
$addressId
)
);
}
if($cache){
$this->cache[$db]['projectall_by_user'][$addressId] = (int)$resultalle;
}
}
if($resultalle > 0) {
return '';
}
if($cache && !empty($this->cache) && isset($this->cache[$db]['projektoeffentlich'])) {
$result = $this->cache[$db]['projektoeffentlich'];
}
else{
// alle oeffentlichen projekte
$result = $this->app->DB->SelectArr('SELECT id FROM projekt WHERE oeffentlich=1');
if($cache) {
$this->cache[$db]['projektoeffentlich'] = $result;
}
}
$cresult = !empty($result)?count($result):0;
for($i=0;$i<$cresult;$i++) {
if(!isset($sql)) {
$sql = '';
}
$sql .= $prefix."='".$result[$i]['id']."'";
if($i < $cresult - 1){
$sql .= ' OR ';
}
}
if($cache && !empty($this->cache[$db]) && !empty($this->cache[$db]['projects_employee'])
&& isset($this->cache[$db]['projects_employee'][$addressId])
) {
$result = $this->cache[$db]['projects_employee'][$addressId];
}
else{
// alle projekte Wo Mitarbeiter ist
if($this->Firmendaten('onlyemployeeprojects')){
$result = $this->app->DB->SelectArr(
sprintf(
"SELECT DISTINCT parameter
FROM adresse_rolle
WHERE (IFNULL(bis,'0000-00-00')='0000-00-00' OR bis < NOW()) AND adresse=%d
AND objekt LIKE 'projekt' AND subjekt = 'Mitarbeiter'",
$addressId
)
);
}else{
$result = $this->app->DB->SelectArr(
sprintf(
"SELECT DISTINCT parameter
FROM adresse_rolle
WHERE (IFNULL(bis,'0000-00-00')='0000-00-00' OR bis < NOW()) AND adresse=%d AND objekt LIKE 'projekt'",
$addressId
)
);
}
if($cache) {
if($result === null) {
$result = [];
}
$this->cache[$db]['projects_employee'][$addressId] = $result;
}
}
$cresult = !empty($result)?count($result):0;
if(isset($sql) && $sql!='' && $cresult > 0) {
$sql .= ' OR ';
}
for($i=0;$i<$cresult;$i++) {
if(!isset($sql)) {
$sql = '';
}
$sql .= $prefix."='".$result[$i]['parameter']."'";
if($i < (!empty($result)?count($result):0) - 1){
$sql .= ' OR ';
}
}
if(!isset($sql)) {
$sql = '0';
}
if($auchprojekte && is_array($auchprojekte)) {
foreach($auchprojekte as $v) {
$sql .= " OR $prefix = '$v' ";
}
}
if($prefixvertreter && !$this->ModulVorhanden('vertriebscockpit')) {
$prefixvertreter = '';
}
if($prefixvertreter != '') {
return " AND ($sql OR $prefixvertreter = '".$addressId."' $subsql) ";
}
return " AND ($sql $subsql) ";
}
// @refactor DocumentContext Komponente
function StandardVersandart($projekt="")
{
if($projekt > 0)
{
$tmp = $this->app->DB->Select("SELECT versandart FROM projekt WHERE id='$projekt' LIMIT 1");
if($tmp != '') {
return $tmp;
}
}
return $this->Firmendaten('versandart');
}
// @refactor DocumentContext Komponente
function StandardZahlungsweiseLieferant($projekt="")
{
if($projekt > 0) {
$tmp = $this->app->DB->Select("SELECT zahlungsweiselieferant FROM projekt WHERE id='$projekt' LIMIT 1");
if($tmp != '') {
return $tmp;
}
}
$tmp = $this->Firmendaten('zahlungsweiselieferant');
if($tmp != '') {
return $tmp;
}
return 'rechnung';
}
// @refactor DocumentContext Komponente
function StandardZahlungsweise($projekt="")
{
if($projekt > 0) {
$tmp = $this->app->DB->Select("SELECT zahlungsweise FROM projekt WHERE id='$projekt' LIMIT 1");
if($tmp != '') {
return $tmp;
}
}
$tmp = $this->Firmendaten('zahlungsweise');
return empty($tmp)?'rechnung':$tmp;
}
// @refactor DocumentContext Komponente
function ZahlungsZielSkonto($projekt="")
{
$tmp = $this->Firmendaten("zahlungszielskonto");
return $tmp <= 0?0:$tmp;
}
// @refactor DocumentContext Komponente
function ZahlungsZielTageSkonto($projekt="")
{
$tmp = $this->Firmendaten("zahlungszieltageskonto");
return $tmp <= 0?0:$tmp;
}
// @refactor DocumentContext Komponente
function ZahlungsZielTage($projekt="")
{
$tmp = $this->Firmendaten("zahlungszieltage");
return $tmp <= 0?0:$tmp;
}
// @refactor ApplicationCore Klasse
/**
* @param string $module
* @param bool $showdeactivated
*
* @return bool
*/
public function ModulVorhanden($module, $showdeactivated = false)
{
if(in_array($module, ['welcome', 'ajax', 'appstore'])) {
return true;
}
if(!$showdeactivated) {
/** @var Appstore $appstore */
$appstore = $this->app->loadModule('appstore', false);
if(!empty($appstore) && method_exists($appstore, 'isModuleDeactivated')
&& $appstore->isModuleDeactivated($module)
) {
return false;
}
}
if(isset($this->modulvorhandenlist) && $this->modulvorhandenlist && isset($this->modulvorhandenlist[$module])) {
return (bool)$this->modulvorhandenlist[$module];
}
if($module==='verband') {
if($this->Firmendaten('modul_verband')!='1') {
$this->modulvorhandenlist[$module] = false;
return false;
}
}
else if($module==='multilevel') {
if($this->Firmendaten('modul_mlm')!='1') {
$this->modulvorhandenlist[$module] = false;
return false;
}
}
else if($module==='verein') {
if($this->Firmendaten('modul_verein')!='1') {
$this->modulvorhandenlist[$module] = false;
return false;
}
}
$subdir = '/../pages/';
$modulefile = $module;
$isModulePage = false;
$isModuleCronjob = false;
if(strpos($module, 'zahlungsweise_') === 0){
$subdir = '/zahlungsweisen/';
$modulefile = substr($module, 14);
}
elseif(strpos($module, 'versandarten_') === 0){
$subdir = '/versandarten/';
$modulefile = substr($module, 13);
}
elseif(strpos($module, 'cronjob_') === 0) {
$subdir = '/../../cronjobs/';
$modulefile = substr($module, 8);
$isModuleCronjob = true;
}
elseif(strpos($module, 'konto_') === 0) {
$subdir = '/../plugins/liveimport/'.substr($module, 6).'/';
$modulefile = substr($module, 6);
}
elseif(strpos($module, 'Transfer') === 0) {
$subdir = '/Transfer/'.$module.'/';
}
elseif(strpos($module, 'Printer') === 0) {
$subdir = '/Printer/'.$module.'/';
}
else {
$isModulePage = true;
}
if(!@is_file(__DIR__.$subdir.$modulefile.'.php')) {
$this->modulvorhandenlist[$module] = false;
return false;
}
if(!$this->IoncubeProperty('modullizenzen')) {
$this->modulvorhandenlist[$module] = true;
return true;
}
if($module === 'chat') {
$this->modulvorhandenlist[$module] = true;
return true;
}
$apps = $this->getAppList();
$hasAppModuleProperty = !empty($apps[$module]) && isset($apps[$module]['Versionen']);
if($hasAppModuleProperty && (string)$apps[$module]['Versionen'] === '') {
$this->modulvorhandenlist[$module] = true;
return true;
}
$ablaufdatum = $this->IoncubeProperty('moduleablaufdatumX'.str_replace('_','X',$module));
if(!empty($ablaufdatum) && strtotime($ablaufdatum) < strtotime(date('Y-m-d'))) {
@unlink(__DIR__.$subdir.$modulefile.'.php');
$this->modulvorhandenlist[$module] = false;
return false;
}
if(!isset($apps[$module])) {
$this->modulvorhandenlist[$module] = true;
return true;
}
$version = $this->Version();
if($hasAppModuleProperty && strpos($apps[$module]['Versionen'], $version) !== false) {
$this->modulvorhandenlist[$module] = true;
return true;
}
if(!empty(erpAPI::Ioncube_Property('moduleX'.str_replace('_','X',$module)))) {
$this->modulvorhandenlist[$module] = true;
return true;
}
if($isModuleCronjob && !empty('moduleX'.str_replace('_','X',substr($module, 8)))) {
$this->modulvorhandenlist[$module] = true;
return true;
}
if(empty(erpAPI::Ioncube_Property('modulecheck'))) {
$this->modulvorhandenlist[$module] = true;
return true;
}
if($isModulePage && strpos($module, 'shopimporter_') === 0 && !empty($this->IoncubeProperty('newversion'))) {
$this->modulvorhandenlist[$module] = true;
return true;
}
$this->modulvorhandenlist[$module] = false;
return false;
}
// @refactor in UserPermission Komponente
/**
* @param string $cmd
*
* @return bool
*/
public function TableSearchAllowed($cmd)
{
$tmp = $this->app->YUI->TableSearch('',$cmd,'allowed');
if(empty($tmp)) {
return true; // dient nur vorruebergeben bis alle faelle in yui class umgestellt sind
}
foreach($tmp as $module=>$value) {
if(empty($value)) {
continue;
}
foreach($tmp[$module] as $action) {
if($this->RechteVorhanden($module,$action)) {
return true;
}
}
}
return false;
}
// @refactor in UserPermission Komponente
/**
* @return array
*/
public function getUserModules()
{
if($this->app->User->GetType() === 'admin') {
return [];
}
$modules = $this->app->DB->SelectFirstCols(
sprintf(
"SELECT `module` FROM `userrights` WHERE `user` = %d AND `module` <> '' AND `permission` = 1 GROUP BY `module`",
$this->app->User->GetID()
)
);
$deactivated = $this->app->DB->SelectFirstCols(
"SELECT DISTINCT `module` FROM `module_status` WHERE `active` = 0 AND `module` <> ''"
);
if(!empty($deactivated)) {
return array_diff($modules, $deactivated);
}
return $modules;
}
/**
* @param string $module
* @param string $action
*
* @return bool
*/
public function RechteVorhanden($module,$action)
{
if(empty($module) || empty($action)) {
return false;
}
if(!@is_file('pages/'.$module.'.php') || !$this->ModulVorhanden($module)) {
return false;
}
if($this->isActionExistsInModule($module,$action) === false) {
return false;
}
if($this->app->User->GetType() === 'admin') {
return true;
}
return (int)$this->app->DB->Select(
sprintf(
"SELECT ur.id
FROM `userrights` AS `ur`
WHERE ur.module='%s' AND ur.action='%s' AND ur.permission=1 AND ur.user = %d
LIMIT 1",
$this->app->DB->real_escape_string($module),
$this->app->DB->real_escape_string($action),
$this->app->User->GetID()
)
) > 0;
}
/**
* @param string $module
* @param array $actionList
*/
public function addActionHandler($module, $actionList)
{
if(empty($module) || empty($actionList) || !is_array($actionList)) {
return;
}
$actions = array_unique(array_keys($actionList));
$actionsInDb = $this->getActionsByModule($module);
$toDelete = array_diff($actionsInDb, $actions);
if(!empty($toDelete)) {
$this->deleteActionEntry($module, $toDelete);
}
$toAdd = array_diff($actions, $actionsInDb);
if(empty($toAdd)) {
return;
}
$this->addActionsToModule($module, $actions);
}
/**
* @param string $module
* @param array $actions
*/
public function addActionsToModule($module, $actions)
{
if(empty($module) || empty($actions)) {
return;
}
foreach($actions as $action) {
$sql =
sprintf(
"INSERT INTO `module_action` (`module`,`action`) VALUES ('%s','%s') ON DUPLICATE KEY UPDATE `module`='%s', `action`='%s'",
$this->app->DB->real_escape_string($module), $this->app->DB->real_escape_string($action),
$this->app->DB->real_escape_string($module), $this->app->DB->real_escape_string($action)
);
$this->app->DB->Insert(
$sql
);
$this->moduleActions[$module][] = $action;
}
}
/**
* @param string $module
* @param array $actions
*/
public function deleteActionEntry($module, $actions)
{
if(empty($module) || empty($actions)) {
return;
}
foreach($actions as $action) {
$this->app->DB->Delete(
sprintf(
"DELETE FROM `module_action` WHERE `module` = '%s' AND `action` = '%s'",
$this->app->DB->real_escape_string($module), $this->app->DB->real_escape_string($action)
)
);
}
$this->moduleActions[$module] = array_diff($this->moduleActions[$module], $actions);
}
/**
* @param string $module
*
* @return array
*/
public function getActionsByModule($module)
{
if(empty($module)) {
return [];
}
if(!isset($this->moduleActions[$module])) {
$this->moduleActions[$module] = $this->app->DB->SelectFirstCols(
sprintf(
"SELECT DISTINCT `action` FROM `module_action` WHERE `module` = '%s' AND `action` <> ''",
$this->app->DB->real_escape_string($module)
)
);
}
return $this->moduleActions[$module];
}
/**
* @param string $module
* @param string $action
*
* @return null|bool
*/
public function isActionExistsInModule($module, $action)
{
$actions = $this->getActionsByModule($module);
if(empty($actions)) {
return null;
}
return in_array($action, $actions);
}
function fixeUmlaute($text) {
return $this->app->String->fixeUmlaute($text);
}
function getUmlauteArray() {
return $this->app->String->getUmlauteArray();
}
/**
* @deprecated use directly htmlentities() instead
*/
function ConvertForDBUTF8($string, $htmlentities = true, $isHtmlTransformation = false)
{
if(!$htmlentities || !$isHtmlTransformation) {
return $string;
}
return htmlentities($string,ENT_QUOTES);
}
/**
* @deprecated use directly htmlentities() and utf8_decode() instead
*/
function ConvertForDB($string, $htmlentities = true, $isHtmlTransformation = false)
{
if(!$isHtmlTransformation) {
return $string;
}
if(!$htmlentities) {
return utf8_decode($string);
}
return htmlentities(utf8_decode($string),ENT_QUOTES);
}
function ConvertForTableSearch($string)
{
$string = $this->unicode_decode($string);
$cmd = $this->app->Secure->GetGET('cmd');
if($cmd==='kontoauszuege'){
return trim(html_entity_decode($string, ENT_QUOTES, 'UTF-8')); //uahlungseingang
}
return $string;
}
// @refactor in HtmlTransformer Komponente
function make_clickable($text)
{
return preg_replace('@(?<![.*">])\b(?:(?:https?|ftp|file)://|[a-z]\.)[-A-Z0-9+&#/%=~_|$?!:,.]*[A-Z0-9+&#/%=~_|$]@i', '<a href="\0">\0</a>', $text);
}
// @refactor in WawiString oder HtmlTransformer Klasse
function unicode_decode($content) {
$ISO10646XHTMLTrans = array(
"&"."#34;" => "&quot;",
"&"."#38;" => "&amp;",
"&"."#39;" => "&apos;",
"&"."#60;" => "&lt;",
"&"."#62;" => "&gt;",
"&"."#128;" => "&euro;",
"&"."#160;" => "",
"&"."#161;" => "&iexcl;",
"&"."#162;" => "&cent;",
"&"."#163;" => "&pound;",
"&"."#164;" => "&curren;",
"&"."#165;" => "&yen;",
"&"."#166;" => "&brvbar;",
"&"."#167;" => "&sect;",
"&"."#168;" => "&uml;",
"&"."#169;" => "&copy;",
"&"."#170;" => "&ordf;",
"&"."#171;" => "&laquo;",
"&"."#172;" => "&not;",
"&"."#173;" => "­",
"&"."#174;" => "&reg;",
"&"."#175;" => "&macr;",
"&"."#176;" => "&deg;",
"&"."#177;" => "&plusmn;",
"&"."#178;" => "&sup2;",
"&"."#179;" => "&sup3;",
"&"."#180;" => "&acute;",
"&"."#181;" => "&micro;",
"&"."#182;" => "&para;",
"&"."#183;" => "&middot;",
"&"."#184;" => "&cedil;",
"&"."#185;" => "&sup1;",
"&"."#186;" => "&ordm;",
"&"."#187;" => "&raquo;",
"&"."#188;" => "&frac14;",
"&"."#189;" => "&frac12;",
"&"."#190;" => "&frac34;",
"&"."#191;" => "&iquest;",
"&"."#192;" => "&Agrave;",
"&"."#193;" => "&Aacute;",
"&"."#194;" => "&Acirc;",
"&"."#195;" => "&Atilde;",
"&"."#196;" => "&Auml;",
"&"."#197;" => "&Aring;",
"&"."#198;" => "&AElig;",
"&"."#199;" => "&Ccedil;",
"&"."#200;" => "&Egrave;",
"&"."#201;" => "&Eacute;",
"&"."#202;" => "&Ecirc;",
"&"."#203;" => "&Euml;",
"&"."#204;" => "&Igrave;",
"&"."#205;" => "&Iacute;",
"&"."#206;" => "&Icirc;",
"&"."#207;" => "&Iuml;",
"&"."#208;" => "&ETH;",
"&"."#209;" => "&Ntilde;",
"&"."#210;" => "&Ograve;",
"&"."#211;" => "&Oacute;",
"&"."#212;" => "&Ocirc;",
"&"."#213;" => "&Otilde;",
"&"."#214;" => "&Ouml;",
"&"."#215;" => "&times;",
"&"."#216;" => "&Oslash;",
"&"."#217;" => "&Ugrave;",
"&"."#218;" => "&Uacute;",
"&"."#219;" => "&Ucirc;",
"&"."#220;" => "&Uuml;",
"&"."#221;" => "&Yacute;",
"&"."#222;" => "&THORN;",
"&"."#223;" => "&szlig;",
"&"."#224;" => "&agrave;",
"&"."#225;" => "&aacute;",
"&"."#226;" => "&acirc;",
"&"."#227;" => "&atilde;",
"&"."#228;" => "&auml;",
"&"."#229;" => "&aring;",
"&"."#230;" => "&aelig;",
"&"."#231;" => "&ccedil;",
"&"."#232;" => "&egrave;",
"&"."#233;" => "&eacute;",
"&"."#234;" => "&ecirc;",
"&"."#235;" => "&euml;",
"&"."#236;" => "&igrave;",
"&"."#237;" => "&iacute;",
"&"."#238;" => "&icirc;",
"&"."#239;" => "&iuml;",
"&"."#240;" => "&eth;",
"&"."#241;" => "&ntilde;",
"&"."#242;" => "&ograve;",
"&"."#243;" => "&oacute;",
"&"."#244;" => "&ocirc;",
"&"."#245;" => "&otilde;",
"&"."#246;" => "&ouml;",
"&"."#247;" => "&divide;",
"&"."#248;" => "&oslash;",
"&"."#249;" => "&ugrave;",
"&"."#250;" => "&uacute;",
"&"."#251;" => "&ucirc;",
"&"."#252;" => "&uuml;",
"&"."#253;" => "&yacute;",
"&"."#254;" => "&thorn;",
"&"."#255;" => "&yuml;",
"&"."#338;" => "&OElig;",
"&"."#339;" => "&oelig;",
"&"."#352;" => "&Scaron;",
"&"."#353;" => "&scaron;",
"&"."#376;" => "&Yuml;",
"&"."#402;" => "&fnof;",
"&"."#710;" => "&circ;",
"&"."#732;" => "&tilde;",
"&"."#913;" => "&Alpha;",
"&"."#914;" => "&Beta;",
"&"."#915;" => "&Gamma;",
"&"."#916;" => "&Delta;",
"&"."#917;" => "&Epsilon;",
"&"."#918;" => "&Zeta;",
"&"."#919;" => "&Eta;",
"&"."#920;" => "&Theta;",
"&"."#921;" => "&Iota;",
"&"."#922;" => "&Kappa;",
"&"."#923;" => "&Lambda;",
"&"."#924;" => "&Mu;",
"&"."#925;" => "&Nu;",
"&"."#926;" => "&Xi;",
"&"."#927;" => "&Omicron;",
"&"."#928;" => "&Pi;",
"&"."#929;" => "&Rho;",
"&"."#931;" => "&Sigma;",
"&"."#932;" => "&Tau;",
"&"."#933;" => "&Upsilon;",
"&"."#934;" => "&Phi;",
"&"."#935;" => "&Chi;",
"&"."#936;" => "&Psi;",
"&"."#937;" => "&Omega;",
"&"."#945;" => "&alpha;",
"&"."#946;" => "&beta;",
"&"."#947;" => "&gamma;",
"&"."#948;" => "&delta;",
"&"."#949;" => "&epsilon;",
"&"."#950;" => "&zeta;",
"&"."#951;" => "&eta;",
"&"."#952;" => "&theta;",
"&"."#953;" => "&iota;",
"&"."#954;" => "&kappa;",
"&"."#955;" => "&lambda;",
"&"."#956;" => "&mu;",
"&"."#957;" => "&nu;",
"&"."#958;" => "&xi;",
"&"."#959;" => "&omicron;",
"&"."#960;" => "&pi;",
"&"."#961;" => "&rho;",
"&"."#962;" => "&sigmaf;",
"&"."#963;" => "&sigma;",
"&"."#964;" => "&tau;",
"&"."#965;" => "&upsilon;",
"&"."#966;" => "&phi;",
"&"."#967;" => "&chi;",
"&"."#968;" => "&psi;",
"&"."#969;" => "&omega;",
"&"."#977;" => "&thetasym;",
"&"."#978;" => "&upsih;",
"&"."#982;" => "&piv;",
"&"."#8194;" => "&ensp;",
"&"."#8195;" => "&emsp;",
"&"."#8201;" => "&thinsp;",
"&"."#8204;" => "&zwnj;",
"&"."#8205;" => "&zwj;",
"&"."#8206;" => "&lrm;",
"&"."#8207;" => "&rlm;",
"&"."#8211;" => "&ndash;",
"&"."#8212;" => "&mdash;",
"&"."#8216;" => "&lsquo;",
"&"."#8217;" => "&rsquo;",
"&"."#8218;" => "&sbquo;",
"&"."#8220;" => "&ldquo;",
"&"."#8221;" => "&rdquo;",
"&"."#8222;" => "&bdquo;",
"&"."#8224;" => "&dagger;",
"&"."#8225;" => "&Dagger;",
"&"."#8226;" => "&bull;",
"&"."#8230;" => "&hellip;",
"&"."#8240;" => "&permil;",
"&"."#8242;" => "&prime;",
"&"."#8243;" => "&Prime;",
"&"."#8249;" => "&lsaquo;",
"&"."#8250;" => "&rsaquo;",
"&"."#8254;" => "&oline;",
"&"."#8260;" => "&frasl;",
"&"."#8364;" => "&euro;",
"&"."#8465;" => "&image;",
"&"."#8472;" => "&weierp;",
"&"."#8476;" => "&real;",
"&"."#8482;" => "&trade;",
"&"."#8501;" => "&alefsym;",
"&"."#8592;" => "&larr;",
"&"."#8593;" => "&uarr;",
"&"."#8594;" => "&rarr;",
"&"."#8595;" => "&darr;",
"&"."#8596;" => "&harr;",
"&"."#8629;" => "&crarr;",
"&"."#8656;" => "&lArr;",
"&"."#8657;" => "&uArr;",
"&"."#8658;" => "&rArr;",
"&"."#8659;" => "&dArr;",
"&"."#8660;" => "&hArr;",
"&"."#8704;" => "&forall;",
"&"."#8706;" => "&part;",
"&"."#8707;" => "&exist;",
"&"."#8709;" => "&empty;",
"&"."#8711;" => "&nabla;",
"&"."#8712;" => "&isin;",
"&"."#8713;" => "&notin;",
"&"."#8715;" => "&ni;",
"&"."#8719;" => "&prod;",
"&"."#8721;" => "&sum;",
"&"."#8722;" => "&minus;",
"&"."#8727;" => "&lowast;",
"&"."#8730;" => "&radic;",
"&"."#8733;" => "&prop;",
"&"."#8734;" => "&infin;",
"&"."#8736;" => "&ang;",
"&"."#8743;" => "&and;",
"&"."#8744;" => "&or;",
"&"."#8745;" => "&cap;",
"&"."#8746;" => "&cup;",
"&"."#8747;" => "&int;",
"&"."#8756;" => "&there4;",
"&"."#8764;" => "&sim;",
"&"."#8773;" => "&cong;",
"&"."#8776;" => "&asymp;",
"&"."#8800;" => "&ne;",
"&"."#8801;" => "&equiv;",
"&"."#8804;" => "&le;",
"&"."#8805;" => "&ge;",
"&"."#8834;" => "&sub;",
"&"."#8835;" => "&sup;",
"&"."#8836;" => "&nsub;",
"&"."#8838;" => "&sube;",
"&"."#8839;" => "&supe;",
"&"."#8853;" => "&oplus;",
"&"."#8855;" => "&otimes;",
"&"."#8869;" => "&perp;",
"&"."#8901;" => "&sdot;",
"&"."#8968;" => "&lceil;",
"&"."#8969;" => "&rceil;",
"&"."#8970;" => "&lfloor;",
"&"."#8971;" => "&rfloor;",
"&"."#9001;" => "&lang;",
"&"."#9002;" => "&rang;",
"&"."#9674;" => "&loz;",
"&"."#9824;" => "&spades;",
"&"."#9827;" => "&clubs;",
"&"."#9829;" => "&hearts;",
"&"."#9830;" => "&diams;"
);
reset($ISO10646XHTMLTrans);
// while(list($UnicodeChar, $XHTMLEquiv) = each($ISO10646XHTMLTrans)) {
foreach($ISO10646XHTMLTrans as $UniccideChar => $XHTMLEquiv)
{
$content = str_replace($UnicodeChar, $XHTMLEquiv, $content);
}
// $content = html_entity_decode($content, ENT_COMPAT, 'UTF-8');
// return translated
return($content);
}
/** @deprecated */
function html_entity_decode_utf8($string)
{
static $trans_tbl;
$string = preg_replace('~&#x([0-9a-f]+);~ei','code2utf(hexdec(“\\1″))', $string);
$string = preg_replace('~&#([0-9]+);~e', 'code2utf(\\1)',$string);
if (!isset($trans_tbl))
{
$trans_tbl = array();
foreach (get_html_translation_table(HTML_ENTITIES) as
$val=>$key)
$trans_tbl[$key] = utf8_encode($val);
}
return strtr($string, $trans_tbl);
}
function GetPlainText($string)
{
/** @var $api $obj */
$obj = $this->LoadModul('api');
if(!empty($obj) && method_exists($obj, 'GetPlainText'))
{
return $obj->GetPlainText($string);
}
}
// @refactor PdfHelper Komponente
function MergePDF($files,$pdftk=0)
{
if($pdftk==1)
{
//PDF Dateien erstellen
$pdffiles = implode(" ",$files);
$tmpname = tempnam($this->GetTMP(),"");
//echo("pdftk $pdffiles cat output ".$dir."/".$abrechnung.".pdf");
system("pdftk $pdffiles cat output ".$tmpname);
$raw_content = file_get_contents($tmpname);
unlink($tmpname);
} else {
$Brief = new SuperFPDF('P','mm','A4');
//$Brief->filename="merge.pdf";
$cfiles = !empty($files)?count($files):0;
for($i=0;$i<$cfiles;$i++)
{
$Brief->AddPDF(file_get_contents($files[$i]));
}
$raw_content = $Brief->displayAnhaenge('S');
}
return $raw_content;
}
// @refactor in WawiString oder HtmlTransformer Klasse
function isHTML($string){
return $string != strip_tags($string);
}
/**
* @deprecated
*/
function RemoveNewlineAfterBreaks($string)
{
return $string;
}
function ReadyForPDF($string="")
{
return $this->app->String->ReadyForPDF($string);
}
/**
* @deprecated
*/
function ColorPicker() {
$colors = array('#004704','#C40046','#832BA8','#FF8128','#7592A0');
$out = "<option value=\"\" style=\"background-color: #FFFFFF;color:red\">Keine</option>";
for($i=0;$i<(!empty($colors)?count($colors):0);$i++)
$out .= "<option value=\"{$colors[$i]}\" style=\"background-color: {$colors[$i]}\">".$colors[$i]."</option>";
return $out;
}
// @refactor in DevTools
function hex_dump($data, $newline="\n")
{
static $from = '';
static $to = '';
static $width = 16; # number of bytes per line
static $pad = '.'; # padding for non-visible characters
if ($from==='')
{
for ($i=0; $i<=0xFF; $i++)
{
$from .= chr($i);
$to .= ($i >= 0x20 && $i <= 0x7E) ? chr($i) : $pad;
}
}
$hex = str_split(bin2hex($data), $width*2);
$chars = str_split(strtr($data, $from, $to), $width);
$offset = 0;
foreach ($hex as $i => $line)
{
echo sprintf('%6X',$offset).' : '.implode(' ', str_split($line,2)) . ' [' . $chars[$i] . ']' . $newline;
$offset += $width;
}
}
/**
* @param string $parsetarget
*/
public function KalenderList($parsetarget)
{
/** @var Kalender $obj */
$obj = $this->LoadModul('kalender');
if(!empty($obj) && method_exists($obj,'showKalenderList')) {
$obj->showKalenderList($parsetarget);
}
}
// @refactor UserPermission Komponente oder Navigation Widget
function CalculateNavigation($navarray)
{
$type = $this->app->User->GetType();
//if($type=="admin") return $navarray['menu']['admin'];
$permissions_module = $this->app->DB->SelectArr("SELECT module,action FROM userrights WHERE user='".$this->app->User->GetID()."' AND permission='1'");
$navigation_alternative = $this->app->DB->SelectArr("SELECT * FROM navigation_alternative WHERE aktiv = 1 AND first != '' AND module != '' AND action != '' AND sec != '' ORDER BY first, sec, prio");
if($navigation_alternative)
{
foreach($navigation_alternative as $v)
{
$alt[$v['first']][$v['sec']][] = $v;
}
}
$permission_module_new=null;
if($permissions_module)
{
for($i=0;$i<(!empty($permissions_module)?count($permissions_module):0);$i++)
{
if(@is_file("./pages/".$permissions_module[$i]["module"].".php") && $this->ModulVorhanden($permissions_module[$i]["module"]))
$permission_module_new[] = $permissions_module[$i]["module"]."_".$permissions_module[$i]["action"];
}
}
// logout ist immer erlaubt
$permission_module_new[] = "welcome_logout";
$menu = 0;
$menu_no=1;
foreach($navarray['menu']['admin'] as $key=>$value){
//echo "haupt:".$value['first'][0]."<br>";
$menu++;
if(count($value['sec'])>0){
foreach($value['sec'] as $secnav){
//echo $secnav[0]." ".$secnav[1]." ".$secnav[2]."<br>";
$und_pos = stripos ( $secnav[2] , '&');
if($und_pos>0)
$secnav_check = substr ( $secnav[2] , 0,stripos ( $secnav[2] , '&') );
else
$secnav_check = $secnav[2];
// pruefe ob recht vorhanden
if(@in_array($secnav[1]."_".$secnav_check,$permission_module_new) || ($type=="admin" && @is_file("./pages/".$secnav[1].".php") && $this->ModulVorhanden($secnav[1])))
{
$navarray['menu']['tmp'][$menu]['sec'][] = array($secnav[0],$secnav[1],$secnav[2]);
$menu_no=0;
}elseif(isset($alt) && isset($alt[$value['first'][0]]) && isset($alt[$value['first'][0]][$secnav[0]])){
foreach($alt[$value['first'][0]][$secnav[0]] as $v)
{
$und_pos = stripos ( $v['action'] , '&');
if($und_pos>0)
$secnav_check = substr ( $v['action'] , 0,stripos ( $v['action'] , '&') );
else
$secnav_check = $v['action'];
if(@in_array($v['module']."_".$secnav_check,$permission_module_new) || ($type=="admin" && @is_file("./pages/".$v['module'].".php")))
{
$navarray['menu']['tmp'][$menu]['sec'][] = array($secnav[0],$v['module'],$v['action']);
$menu_no = 0;
break;
}
}
}else{
}
}
}
if($menu_no==0)
$navarray['menu']['tmp'][$menu]['first'] = array($value['first'][0],$value['first'][1],'main');
$menu_no=1;
}
return $navarray['menu']['tmp'];
}
// @refactor Navigation Widget
function NavigationENT()
{
return $this->Navigation();
}
// @refactor Navigation Widget
function Navigation()
{
// admin menu
$menu = 0;
$navarray['menu']['admin'][++$menu]['first'] = array('Stammdaten','adresse','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Adressen','adresse','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Artikel','artikel','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Projekte','projekt','list');
$navarray['menu']['admin'][++$menu]['first'] = array('Verkauf','auftrag','list');
if($this->ModulVorhanden("anfrage")){
$navarray['menu']['admin'][$menu]['sec'][] = array('Anfrage', 'anfrage', 'list');
}
$navarray['menu']['admin'][$menu]['sec'][] = array('Angebot'.($this->Firmendaten("bezeichnungangebotersatz") && $this->Firmendaten("bezeichnungangebotersatz") != 'Angebot'? ' / '.$this->Firmendaten("bezeichnungangebotersatz"):''),'angebot','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Auftrag','auftrag','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('POS','pos','list');
$navarray['menu']['admin'][++$menu]['first'] = array('Einkauf','auftrag','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Preisanfrage','preisanfrage','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Bestellung','bestellung','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Bestellvorschlag','bestellvorschlag','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Erweiterter Bestellvorschlag','bestellvorschlagapp','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Produktion','produktion','list');
$navarray['menu']['admin'][++$menu]['first'] = array('Lager','lager','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Wareneingang','wareneingang','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Lieferschein','lieferschein','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Lagerverwaltung','lager','list');
if($this->ModulVorhanden('lagermobil')) {
$navarray['menu']['admin'][$menu]['sec'][] = array('Mobile Lagerverwaltung','lagermobil','list');
}
if($this->ModulVorhanden('multiorderpicking')) {
$navarray['menu']['admin'][$menu]['sec'][] = array('Multiorder-Picking','multiorderpicking','list');
}
$navarray['menu']['admin'][$menu]['sec'][] = array('Reservierungen','lager','reservierungen');
$navarray['menu']['admin'][$menu]['sec'][] = array('Inventur','inventur','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Versandzentrum','versanderzeugen','offene');
$navarray['menu']['admin'][$menu]['sec'][] = array('Produktionszentrum','produktionszentrum','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Kommissionieraufkleber','kommissionieraufkleber','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Mindesthaltbarkeit','mhdwarning','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Lagermindestmengen','lagermindestmengen','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Artikelkontingente','artikelkontingente','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Ein- und auslagern','lager','bucheneinlagern');
$navarray['menu']['admin'][$menu]['sec'][] = array('Zwischenlager','lager','buchenzwischenlager');
$navarray['menu']['admin'][++$menu]['first'] = array('Buchhaltung','rechnung','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Rechnungen','rechnung','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Zahlungseingang','zahlungseingang','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Reisekosten','reisekosten','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Arbeitsnachweis','arbeitsnachweis','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Gutschrift / '.$this->Firmendaten("bezeichnungstornorechnung"),'gutschrift','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Proformarechnung','proformarechnung','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Abolauf','rechnungslauf','rechnungslauf');
$navarray['menu']['admin'][$menu]['sec'][] = array('Mahnwesen','mahnwesen','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Dokumenten Scanner','docscan','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Finanzbuchhaltung Export','buchhaltungexport','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Zahlungsverkehr','zahlungsverkehr','ueberweisung');
$navarray['menu']['admin'][$menu]['sec'][] = array('Verbandsabrechnungen','verband','offene');
$navarray['menu']['admin'][$menu]['sec'][] = array('Vertreterabrechnungen','vertreter','list');
if($this->ModulVorhanden('provisionenartikelvertreter'))
{
$navarray['menu']['admin'][$menu]['sec'][] = array('Provisionen','provisionenartikelvertreter','list');
}else{
$navarray['menu']['admin'][$menu]['sec'][] = array('Provisionen','provisionenartikel','list');
}
if($this->Firmendaten("modul_mlm")=="1"){
$navarray['menu']['admin'][$menu]['sec'][] = array('Multilevel', 'multilevel', 'list');
}
$navarray['menu']['admin'][$menu]['sec'][] = array('Lohnabrechnung','lohnabrechnung','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Verbindlichkeiten','verbindlichkeit','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Kassenbuch','kasse','list');
$navarray['menu']['admin'][++$menu]['first'] = array('Controlling','marketing','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Verkaufszahlen','verkaufszahlen','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Umsatzstatistik','umsatzstatistik','allgemein');
$navarray['menu']['admin'][$menu]['sec'][] = array('Statistiken','statistiken','dashboard');
$navarray['menu']['admin'][$menu]['sec'][] = array('Berichte','report','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Management Board','managementboard','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Aktionscodes','aktionscodes','list');
$navarray['menu']['admin'][++$menu]['first'] = array('Verwaltung','rechnung','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Ticketregeln','ticketregeln','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Zeitkonten','zeiterfassung','list');
if(!$this->RechteVorhanden('mitarbeiterzeiterfassung','dashboard')){
$navarray['menu']['admin'][$menu]['sec'][] = array('Antrag einreichen','mitarbeiterzeiterfassung','timemanagementrequest');
}
else{
$navarray['menu']['admin'][$menu]['sec'][] = array('Mitarbeiterzeiterfassung','mitarbeiterzeiterfassung','dashboard');
}
$navarray['menu']['admin'][$menu]['sec'][] = array('Import/Export Zentrale','importvorlage','uebersicht');
$navarray['menu']['admin'][$menu]['sec'][] = array('Seriennummern','seriennummern','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Chargen','chargen','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('RMA Lieferungen','rma','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Service & Support','service','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Etikettendrucker','etikettendrucker','list');
$navarray['menu']['admin'][++$menu]['first'] = array('System','rechnung','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Einstellungen','einstellungen','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Online-Shops / Marktplätze','onlineshops','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Backup','backup','list','recover','delete','reset');
$navarray['menu']['admin'][$menu]['sec'][] = array('Upgrade','upgrade','list','recover','delete','reset');
//$navarray['menu']['admin'][$menu]['sec'][] = array('AppStore','appstore','list');
$navarray['menu']['admin'][++$menu]['first'] = array('Mein Bereich','welcome','main');
$startseite = $this->app->DB->Select("SELECT startseite FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1");
if($startseite!="")
$navarray['menu']['admin'][$menu]['sec'][] = array('Meine Startseite','welcome','startseite');
$navarray['menu']['admin'][$menu]['sec'][] = array('Startseite','welcome','start');
// $navarray['menu']['admin'][$menu]['sec'][] = array('Meine Apps','welcome','meineapps');
if($this->app->User->GetType() === 'admin') {
// $navarray['menu']['admin'][$menu]['sec'][] = ['Learning Dashboard', 'learningdashboard', 'list'];
}
$navarray['menu']['admin'][$menu]['sec'][] = array('Tickets','ticket','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Kalender','kalender','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Pinnwand','welcome','pinwand');
$navarray['menu']['admin'][$menu]['sec'][] = array('Aufgaben','aufgaben','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('E-Mail','webmail','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Chat','chat','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Zeiterfassung','zeiterfassung','create');
// $navarray['menu']['admin'][$menu]['sec'][] = array('Stechuhr','stechuhr','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Wiedervorlage','wiedervorlage','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Wiki','wiki','list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Interner Support', 'internalsupport', 'list');
$navarray['menu']['admin'][$menu]['sec'][] = array('Einstellungen','welcome','settings');
// $navarray['menu']['admin'][$menu]['sec'][] = array('Datenschutz', 'dataprotection','list');
// $navarray['menu']['admin'][$menu]['sec'][] = array('Lizenz','appstore','buy');
$navarray['menu']['admin'][$menu]['sec'][] = array('Abmelden','welcome','logout');
return $this->CalculateNavigation($navarray);
}
// @refactor LicenceManager Komponente
/**
* @return string
*/
public function Branch()
{
$version = 'OSS';
include dirname(dirname(__DIR__)).'/version.php';
switch($version) {
case 'ENT':
return 'Home';
case 'OSS':
return 'Open-Source';
default:
return 'Unknown';
}
}
// @refactor LicenceManager Komponente
/**
* @return string
*/
public function Version()
{
$version = '';
include dirname(dirname(__DIR__)).'/version.php';
return $version;
}
// @refactor LicenceManager Komponente
function RevisionPlain()
{
include(dirname(dirname(__DIR__))."/version.php");
return $version_revision;
}
// @refactor LicenceManager Komponente
function Revision()
{
include(dirname(dirname(__DIR__))."/version.php");
return $version_revision;
}
// @refactor In Wiki Modul
function WikiPage($page)
{
$content = $this->app->DB->Select("SELECT content FROM wiki WHERE name='$page' LIMIT 1");
$str = $this->ReadyForPDF($content);
$wikiparser = new WikiParser();
if (preg_match('/(<[^>].*?>)/e', $str))
{
$str=preg_replace('#(href)="([^:"]*)(?:")#','$1="index.php?module=wiki&action=list&name=$2"',$str);
$content = $str;
} else {
$content = $wikiparser->parse($content);
//$index = $wikiparser->BuildIndex();
}
return $content;
}
/**
* @param string $config
*
* @return array
*/
public function Config2Array($config)
{
/** @var Konten $obj */
$obj = $this->app->loadModule('konten', false);
if($obj === null || !method_exists($obj, 'Config2Array')) {
return [];
}
return $obj->Config2Array($config);
}
// @refactor Payment Komponente
/**
* @param int $konto
*
* @return string
*/
public function LiveImport($konto)
{
$kontoRow = $this->app->DB->SelectRow(
sprintf(
'SELECT liveimport,liveimport_passwort,type
FROM konten
WHERE id=%d
LIMIT 1',
$konto
)
);
if(empty($kontoRow) || empty($kontoRow['type'])) {
return '';
}
$zugangsdaten = $kontoRow['liveimport'];
$zugangsdaten = html_entity_decode($zugangsdaten,ENT_QUOTES,'UTF-8');
$liveimport_passwort = $kontoRow['liveimport_passwort'];
if($liveimport_passwort!='') {
$zugangsdaten = str_replace('{PASSWORT}',$liveimport_passwort,$zugangsdaten);
}
$zugangsdaten = $this->Config2Array($zugangsdaten);
$kontotyp = $kontoRow['type'];
if(!@is_file(dirname(__DIR__)."/plugins/liveimport/$kontotyp/$kontotyp.php")) {
return '';
}
if(!class_exists($kontotyp)){
include_once dirname(__DIR__) . "/plugins/liveimport/$kontotyp/$kontotyp.php";
}
if(!class_exists($kontotyp)) {
return '';
}
$tmp = new $kontotyp();
if(!method_exists($tmp,'Import')) {
return '';
}
if($kontotyp === 'kasse'){
return $tmp->Import($konto, $this->app);
}
if($kontotyp === 'hbci4phpapi'){
return $tmp->Import($zugangsdaten, $konto, $this->app);
}
try {
$r = new ReflectionMethod($tmp, 'Import');
$params = $r->getParameters();
$anzargs = (!empty($params)?count($params):0);
}
catch(Exception $e) {
$anzargs = 1;
}
if($anzargs <= 1){
return $tmp->Import($zugangsdaten);
}
if($anzargs == 2) {
return $tmp->Import($zugangsdaten, $this->app);
}
return $tmp->Import($zugangsdaten, $konto, $this->app);
}
// @refactor PopupTable Widget
function AdresseAlsVerzollungsadresseButton($adresse, $postfix = "")
{
$this->app->Tpl->Set('POPUPWIDTH',"1200");
$this->app->Tpl->Set('ADRESSEVERZOLLUNGADRESSEPOPUP'.$postfix,'
<script>
$(function() {
$("#mehr5'.$postfix.'").button();
});
function closeIframe()
{
$(\'.externalSite\').dialog(\'close\');
return false;
}
</script>
<a id="mehr5'.$postfix.'" style="font-size: 8pt; " href="index.php?module=adresse&action=adressestammdatenpopup&cmd=alsverzollungadresse&id='.$adresse.'&iframe=true'.($postfix?'&postfix='.$postfix:'').'" class="popup" title="Adresse aus Stammdaten einf&uuml;gen">aus Stammdaten</a>');
}
// @refactor PopupTable Widget
function AdresseAlsAnsprechpartner($adresse, $postfix = "")
{
$this->app->Tpl->Set('POPUPWIDTH',"1200");
$this->app->Tpl->Set('ADRESSEANSPRECHPARTNERPOPUP'.$postfix,'
<script>
$(function() {
$("#mehr4'.$postfix.'").button();
});
function closeIframe()
{
$(\'.externalSite\').dialog(\'close\');
return false;
}
</script>
<a id="mehr4'.$postfix.'" style="font-size: 8pt; " href="index.php?module=adresse&action=adressestammdatenpopup&cmd=alsansprechpartner&id='.$adresse.'&iframe=true'.($postfix?'&postfix='.$postfix:'').'" class="popup" title="Adresse aus Stammdaten einf&uuml;gen">aus Stammdaten</a>');
}
// @refactor PopupTable Widget
function AdresseAlsLieferadresseButton($adresse, $postfix = "")
{
$this->app->Tpl->Set('POPUPWIDTH',"1200");
$this->app->Tpl->Set('ADRESSELIEFERADRESSEPOPUP'.$postfix,'
<script>
$(function() {
$("#mehr4'.$postfix.'").button();
});
function closeIframe()
{
$(\'.externalSite\').dialog(\'close\');
return false;
}
</script>
<a id="mehr4'.$postfix.'" style="font-size: 8pt; " href="index.php?module=adresse&action=adressestammdatenpopup&cmd=alslieferadresse&id='.$adresse.'&iframe=true'.($postfix?'&postfix='.$postfix:'').'" class="popup" title="Adresse aus Stammdaten einf&uuml;gen">aus Stammdaten</a>');
}
// @refactor PopupTable Widget
function AnsprechpartnerAlsLieferadresseButton($adresse, $postfix = "")
{
$this->app->Tpl->Set('POPUPWIDTH',"1200");
$this->app->Tpl->Set('ANSPRECHPARTNERLIEFERADRESSEPOPUP'.$postfix,'
<script>
$(function() {
$("#mehr3'.$postfix.'").button();
});
function closeIframe()
{
$(\'.externalSite\').dialog(\'close\');
return false;
}
</script>
<a id="mehr3'.$postfix.'" style="font-size: 8pt; " href="index.php?module=adresse&action=ansprechpartnerpopup&cmd=alslieferadresse&id='.$adresse.'&iframe=true'.($postfix?'&postfix='.$postfix:'').'" class="popup" title="Ansprechpartner als Lieferadresse einf&uuml;gen">Ansprechpartner</a>');
}
// @refactor PopupTable Widget
function LieferadresseButton($adresse, $postfix = "")
{
$this->app->Tpl->Set('POPUPWIDTH',"1200");
$this->app->Tpl->Set('LIEFERADRESSEPOPUP'.$postfix,'
<script>
$(function() {
$("#mehr2'.$postfix.'").button();
});
function closeIframe()
{
$(\'.externalSite\').dialog(\'close\');
return false;
}
</script>
<a id="mehr2'.$postfix.'" style="font-size: 8pt; " href="index.php?module=adresse&action=lieferadressepopup&id='.$adresse.'&iframe=true'.($postfix?'&postfix='.$postfix:'').'" class="popup" title="Lieferadresse einf&uuml;gen">Lieferadresse</a>');
}
// @refactor Cache Komponente
function ClearSqlCache($shortcode, $seconds = 0)
{
if($shortcode == '') {
if($seconds > 0) {
$this->app->DB->Delete(
sprintf(
"DELETE FROM sqlcache WHERE TIMESTAMPDIFF(SECOND,zeitstempel, NOW()) > %d",
$seconds
)
);
return;
}
$this->app->DB->Delete('DELETE FROM sqlcache');
return;
}
if($seconds > 0) {
$this->app->DB->Delete(
sprintf(
"DELETE FROM sqlcache WHERE shortcode = '%s' AND TIMESTAMPDIFF(SECOND,zeitstempel, NOW()) > %d",
$this->app->DB->real_escape_string($shortcode), $seconds
)
);
return;
}
$this->app->DB->Delete(
sprintf(
"DELETE FROM sqlcache WHERE shortcode = '%s'",
$this->app->DB->real_escape_string($shortcode)
)
);
}
// @refactor In Inhalt Modul
function GetNavigationSelect($shop)
{
$oberpunkte = $this->app->DB->SelectArr("SELECT id, bezeichnung, bezeichnung_en, plugin,pluginparameter FROM shopnavigation WHERE parent=0 AND shop='$shop' ORDER BY position");
$tmp = array();
foreach($oberpunkte as $punkt)
{
$tmp["{$punkt["id"]}"]=$punkt["bezeichnung"];
$unterpunkte = $this->app->DB->SelectArr("SELECT id, bezeichnung, bezeichnung_en, plugin,pluginparameter FROM shopnavigation WHERE parent='".$punkt["id"]."' AND shop='$shop' ORDER BY position");
foreach($unterpunkte as $upunkt)
$tmp["{$upunkt["id"]}"]="&nbsp;&nbsp;&nbsp;".$upunkt["bezeichnung"];
}
return $tmp;
}
// @refactor PopupTable Widget
function AnsprechpartnerButton($adresse)
{
$this->app->Tpl->Set('POPUPWIDTH',"1200");
$this->app->Tpl->Set('ANSPRECHPARTNERPOPUP','
<script>
$(function() {
$("#mehr").button();
});
function closeIframe()
{
$(\'.externalSite\').dialog(\'close\');
return false;
}
</script>
<a id="mehr" style="font-size: 8pt; " href="index.php?module=adresse&action=ansprechpartnerpopup&id='.$adresse.'&iframe=true" class="popup" title="Ansprechpartner einf&uuml;gen">Ansprechpartner</a>');
//"<input type=\"button\" value=\"Ansprechpartner einf&uuml;gen\">");
}
// @refactor in Lager Modul
function ArtikelAnzahlLagerPlatz($artikel,$lager_platz, $isProduction = false, $ignoreSperrLager = false)
{
if($isProduction) {
$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' AND (lp.sperrlager!=1 OR lp.allowproduction = 1)");
}
else{
$sperrlagerSQL = $ignoreSperrLager ? '' : "AND lp.sperrlager!='1'";
$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' {$sperrlagerSQL}");
}
if($result <=0) {
return 0;
}
return $result;
}
// @refactor in Lager Modul
function ArtikelAnzahlLagerOhneNachschublager($artikel)
{
return $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 lp.autolagersperre!='1' AND lp.sperrlager!='1'");
}
// @refactor in Lager Modul
function ArtikelAnzahlLagerNurNachschublager($artikel)
{
return $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='$artikel' AND lp.autolagersperre='1'");
}
// @refactor in Lager Modul
function ArtikelAnzahlLagerPOS($artikel,$lager)
{
return $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='$artikel' AND lp.lager='$lager' AND lp.poslager='1'");
}
// @refactor in Lager Modul
function ArtikelAnzahlLager($artikel,$lager=0, $projektlager = 0)
{
if($lager<=0)
{
if($projektlager)
{
return $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.geloescht <> 1
WHERE lpi.artikel='$artikel' AND lp.sperrlager!='1' AND lag.projekt = '$projektlager'");
}
return $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 lp.sperrlager!='1'");
}
else
{
return $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='$artikel' AND lp.lager='$lager' AND lp.sperrlager!='1'");
}
}
// @refactor in Lager Modul
function ArtikelAnzahlOffene($artikel, $projekt = 0)
{
return $this->app->DB->Select("SELECT SUM(ap.menge) FROM auftrag_position ap INNER JOIN auftrag a ON a.id=ap.auftrag WHERE ap.artikel='$artikel' AND a.status='freigegeben'".($projekt?" AND a.projekt = '$projekt' ":''));
// return $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$artikel'");
}
// @refactor in Lager Modul
function ArtikelAnzahlBestellung($artikel)
{
return $this->app->DB->Select("SELECT SUM(bp.menge-bp.geliefert) FROM bestellung_position bp INNER JOIN bestellung b ON b.id=bp.bestellung
WHERE bp.artikel='$artikel' AND (b.status='freigegeben' OR b.status='versendet')");
// return $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$artikel'");
}
// @refactor in Lager Modul
function ArtikelAnzahlReserviert($artikel, $auftragprojekt = 0)
{
if($auftragprojekt)
{
return $this->app->DB->Select("SELECT SUM(r.menge) FROM lager_reserviert r INNER JOIN auftrag a ON r.objekt = 'auftrag' AND r.parameter = a.id AND a.status = 'freigegeben' WHERE r.artikel='$artikel'");
}
return $this->app->DB->Select("SELECT SUM(menge) FROM lager_reserviert WHERE artikel='$artikel'");
}
/**
* @deprecated
*/
function MaxArtikelbezeichnung($delta=0)
{
return 100000; // die funktion kann man mal komplett entfernen TODO
return 50+$delta;
}
// @refactor in Secure oder StringCleaner Klasse
function CleanStringUTF8($value, $withhtmlentities = true)
{
$value=trim($value);
$value = $this->app->Secure->stripallslashes($value);
$value = $this->app->Secure->smartstripslashes($value);
//$value = htmlspecialchars($value,ENT_QUOTES);
// $value = str_replace('"','&Prime;',$value);
// $value = str_replace("'",'&prime;',$value);
//$value = $this->ConvertForDB($value);
if($withhtmlentities)$value = $this->ConvertForDBUTF8($value);
return $value;
}
// @refactor in Secure oder StringCleaner Klasse
function CleanString($value, $withhtmlentities = true)
{
$value=trim($value);
$value = $this->app->Secure->stripallslashes($value);
$value = $this->app->Secure->smartstripslashes($value);
//$value = htmlspecialchars($value,ENT_QUOTES);
// $value = str_replace('"','&Prime;',$value);
// $value = str_replace("'",'&prime;',$value);
//$value = $this->ConvertForDB($value);
$value = $this->ConvertForDB($value, $htmlentities);
return $value;
}
// @refactor in Secure oder StringCleaner Klasse
function CleanDataBeforImportUTF8($data, $withhtmlentities = true)
{
if(is_array($data))
{
foreach($data as $key=>$value)
{
if(!is_array($data[$key]) && is_string($value))
$data[$key] = $this->CleanStringUTF8($value, $withhtmlentities);
}
return $data;
}
if(is_string($data)) {
$data = $this->CleanStringUTF8($data, $withhtmlentities);
}
return $data;
}
// @refactor in Secure oder StringCleaner Klasse
function CleanDataBeforImport($data, $htmlentities = true)
{
if(is_array($data))
{
foreach($data as $key=>$value)
{
if(!is_array($data[$key]) && is_string($value))
$data[$key] = $this->CleanString($value, $htmlentities);
}
return $data;
}
if(is_string($data)) {
$data = $this->CleanString($data, $htmlentities);
}
return $data;
}
/**
* @deprecated
*/
function GetStandardProjekt()
{
return $this->app->DB->Select("SELECT standardprojekt FROM firma WHERE id='".$this->app->User->GetFirma()."' LIMIT 1");
}
// @refactor Firmendaten Modul
function Standardprojekt($table,$id)
{
if(!$id)return;
$projekt = $this->app->DB->Select("SELECT projekt FROM `$table` WHERE id='$id' LIMIT 1");
if($projekt<1)
{
$standardprojekt = $this->app->DB->Select("SELECT standardprojekt FROM firma WHERE id='".$this->app->User->GetFirma()."' LIMIT 1");
$this->app->DB->Update("UPDATE `$table` SET projekt='".$standardprojekt."' WHERE id='".$id."' LIMIT 1");
}
}
function GetLagerNachkommastellen()
{
return 4;
}
// @refactor ProcessManager
function SetCheckCronjob($value)
{
if(!$value)
{
$this->app->erp->SetKonfigurationValue('checkcronjob_deaktiviert', 1);
}else{
$this->app->erp->SetKonfigurationValue('checkcronjob_deaktiviert', '');
$this->app->erp->SetKonfigurationValue('checkcronjob_db', $this->app->Conf->WFdbname);
$this->app->erp->SetKonfigurationValue('checkcronjob_host', $this->app->Conf->WFdbhost);
$datei = $this->app->Conf->WFuserdata.'/cronjobkey.txt';
if(file_exists($datei))
{
$key = trim(file_get_contents($datei));
if($key != '')
{
$this->app->erp->SetKonfigurationValue('checkcronjob_key', $key);
}else{
$dbkey = $this->app->erp->GetKonfiguration('checkcronjob_key');
if($dbkey != '')
{
if(!file_put_contents($datei, $dbkey))
{
$this->app->erp->SetKonfigurationValue('checkcronjob_key', '');
}
}else{
$dbkey = sha1(microtime(true));
if(file_put_contents($datei, $dbkey))
{
$this->app->erp->SetKonfigurationValue('checkcronjob_key', $dbkey);
}
}
}
}else{
$dbkey = $this->app->erp->GetKonfiguration('checkcronjob_key');
if($dbkey != '')
{
if(!file_put_contents($datei, $dbkey))
{
$this->app->erp->SetKonfigurationValue('checkcronjob_key', '');
}
}else{
$dbkey = sha1(microtime(true));
if(file_put_contents($datei, $dbkey))
{
$this->app->erp->SetKonfigurationValue('checkcronjob_key', $dbkey);
}
}
}
}
}
/**
* @return bool
*/
public function isMarkedAsBlockedByBackup()
{
return $this->app->erp->GetKonfiguration('update_maintenance') == '1'
&& $this->app->erp->GetKonfiguration('update_maintenance_mode') === 'backup';
}
/**
* @return bool
*/
public function canRunCronjob($parameterToReset = [])
{
if(!$this->isMarkedAsBlockedByBackup()) {
return true;
}
if(empty($parameterToReset)) {
return false;
}
$this->app->DB->Update(
sprintf(
"UPDATE `prozessstarter`
SET `letzteausfuerhung` = NOW(), `mutex` = 0, `mutexcounter` = 0
WHERE `parameter` IN ('%s')",
implode("', '", $parameterToReset)
)
);
return false;
}
/**
* @return bool
*/
public function isSystemBlockedByBackup()
{
if(!$this->isMarkedAsBlockedByBackup()) {
return false;
}
$maintenanceMode = $this->app->erp->GetKonfiguration('update_maintenance_mode');
if($maintenanceMode !== 'backup') {
return false;
}
$backUpCrons = $this->app->DB->SelectFirstCols(
"SELECT `id` FROM `prozessstarter` WHERE `aktiv` = 1 AND `mutex` = 1 AND `parameter` = 'backup'"
);
if(empty($backUpCrons)) {
return false;
}
if(empty($this->cronjobObj)) {
/** @var Prozessstarter cronjobObj */
$this->loadCronjobObj();
}
if(empty($this->cronjobObj)) {
$this->app->erp->SetKonfigurationValue('update_maintenance', 0);
$this->app->erp->SetKonfigurationValue('update_maintenance_mode','');
return true;
}
if(!method_exists($this->cronjobObj,'removeKilledCronjobs')) {
$this->app->erp->SetKonfigurationValue('update_maintenance', 0);
$this->app->erp->SetKonfigurationValue('update_maintenance_mode','');
return true;
}
$this->cronjobObj->removeKilledCronjobs();
$runningCronjobs = $this->cronjobObj->getAllRunningCronjobs();
if(empty($runningCronjobs)) {
$this->app->erp->SetKonfigurationValue('update_maintenance', 0);
$this->app->erp->SetKonfigurationValue('update_maintenance_mode','');
return true;
}
foreach($runningCronjobs as $runningCronjob){
if(in_array($runningCronjob['task_id'], $backUpCrons)) {
return false;
}
}
$this->app->erp->SetKonfigurationValue('update_maintenance', 0);
$this->app->erp->SetKonfigurationValue('update_maintenance_mode','');
return true;
}
// @refactor ProcessManager
/**
* @param bool $checkMaintenance
*
* @return bool
*/
public function CheckCronjob($checkMaintenance = true)
{
if(!empty(erpAPI::Ioncube_Property('isdevelopmentversion'))) {
if (empty($this->app->erp->GetKonfiguration('last_isdevelopmentversion'))) {
$this->app->erp->SetKonfigurationValue('last_isdevelopmentversion', '1');
$this->app->erp->SetKonfigurationValue('checkcronjob_deaktiviert', '1');
return false;
}
}
elseif (!empty($this->app->erp->GetKonfiguration('last_isdevelopmentversion'))) {
$this->app->erp->SetKonfigurationValue('last_isdevelopmentversion', '');
$this->app->erp->SetKonfigurationValue('checkcronjob_deaktiviert', '1');
return false;
}
if($this->app->erp->GetKonfiguration('checkcronjob_deaktiviert') == '1') {
return false;
}
$maintenanceMode = $this->app->erp->GetKonfiguration('update_maintenance_mode');
if($checkMaintenance && $maintenanceMode !== 'backup') {
$checkMaintenance = false;//@todo not backupmode check
}
if($checkMaintenance && $this->app->erp->GetKonfiguration('update_maintenance') == '1') {
$timeMaintenance = (int)$this->app->erp->GetKonfiguration('update_maintenance_time');
if(empty($timeMaintenance)) {
$this->app->erp->SetKonfigurationValue('update_maintenance_time', time());
return false;
}
if(time() - $timeMaintenance < 600) {
return false;
}
if($this->isSystemBlockedByBackup()) {
return false;
}
$this->app->erp->SetKonfigurationValue('update_maintenance', 0);
$this->app->erp->SetKonfigurationValue('update_maintenance_mode','');
}
$datei = $this->app->Conf->WFuserdata.'/cronjobkey.txt';
$confdb = $this->app->Conf->WFdbname;
if($confdb == '') {
return true;
}
$confhost = $this->app->Conf->WFdbhost;
$dbdb = $this->app->erp->GetKonfiguration('checkcronjob_db');
$dbhost = $this->app->erp->GetKonfiguration('checkcronjob_host');
$dbkey = $this->app->erp->GetKonfiguration('checkcronjob_key');
if($dbdb == '')
{
$this->app->erp->SetKonfigurationValue('checkcronjob_db', $confdb);
$dbdb = $confdb;
}
if($dbhost == '')
{
$this->app->erp->SetKonfigurationValue('checkcronjob_host', $confhost);
$dbhost = $confhost;
}
$dbs = ConfigLoader::loadAllWithActiveCronjobs();
if(!empty($dbs) && (!empty($dbs)?count($dbs):0) > 1){
foreach($dbs as $v) {
if($v->WFdbhost === $confhost && $v->WFdbname === $confdb) {
return true;
}
}
}
if($dbdb != $confdb)return false;
if($dbhost != $confhost)return false;
if(file_exists($datei))
{
$key = trim(file_get_contents($datei));
if($key != '' && $dbkey == '')
{
$this->app->erp->SetKonfigurationValue('checkcronjob_key', $key);
}
if($key != $dbkey)return false;
}else{
if($dbkey == '')
{
$dbkey = sha1(microtime(true));
}
if(file_put_contents($datei, $dbkey))
{
$this->app->erp->SetKonfigurationValue('checkcronjob_key', $dbkey);
}
}
return true;
}
// @refactor FileManager
function RemoveFile($file){
if($file == '')return;
if(strpos($file,'cronjobs') !== false)
{
$filea = pathinfo($file);
$parameter = $filea['filename'];
if($this->app->DB->Select("SELECT id FROM prozessstarter WHERE parameter = '".$this->app->DB->real_escape_string($parameter)."' LIMIT 1"))return;
}
if(file_exists(__DIR__ . '/../../'.$file))@unlink(__DIR__ . '/../../'.$file);
}
// @refactor FileManager
function RemoveFolder($folder)
{
if($folder == '')return;
if(strpos($folder,'..') !== false)return;
$folder = rtrim($folder, '/');
$folderabs = __DIR__.'/../../'.$folder;
if(!is_dir($folderabs))return;
if($handle = opendir($folderabs))
{
while (false !== ($entry = readdir($handle))) {
if($entry != '.' && $entry != '..')
{
if(is_dir($folderabs.'/'.$entry))
{
$this->RemoveFolder($folder.'/'.$entry);
}else
{
$this->RemoveFile($folder.'/'.$entry);
}
}
}
closedir($handle);
}
if(is_dir($folder)){
@rmdir($folder);
}
}
// @refactor Installer Komponente
function fixDatabaseNullIDs($table)
{
$query = $this->CheckAlterTable("SELECT * FROM `$table` WHERE id = '0'");
if(!$query)return;
while($val = $this->app->DB->Fetch_Assoc($query))
{
$maxid = 1+(int)$this->app->DB->Select("SELECT max(id) FROM `$table`");
$this->app->DB->Update("UPDATE `$table` set id = '$maxid' WHERE id = '0' LIMIT 1");
}
$this->app->DB->free($query);
$doppelteids = $this->app->DB->SelectArr("SELECT id, count(*) as co FROM `$table` GROUP BY id HAVING COUNT(*) > 1");
if($doppelteids)
{
foreach($doppelteids as $val)
{
$maxid = 1+(int)$this->app->DB->Select("SELECT max(id) FROM `$table`");
$doppelte = $this->app->DB->SelectArr("SELECT * FROM `$table` WHERE id = '".$val['id']."'");
for($i = 1; $i < $val['co']; $i++)
{
$this->app->DB->Update("UPDATE `$table` SET id = '$maxid' WHERE id = '".$val['id']."' LIMIT 1");
$maxid++;
}
}
}
$this->CheckAlterTable("ALTER TABLE `$table` ADD PRIMARY KEY(`id`);");
$maxid = 1+(int)$this->app->DB->Select("SELECT max(id) FROM `$table`");
$this->CheckAlterTable("ALTER TABLE `$table` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=".$maxid);
}
// @refactor Changelog Komponente/Modul
function StartChangeLog($table, $tableid = 0, $module = '', $action = '', $bearbeiter = ''){
$this->Changelog = null;
if($module == '' && isset($this->app->Secure) && $this->app->Secure && method_exists($this->app->Secure, 'GetGET'))$module = $this->app->Secure->GetGET('module');
if($action == '' && isset($this->app->Secure) && $this->app->Secure && method_exists($this->app->Secure, 'GetGET'))$action = $this->app->Secure->GetGET('action');
if($table == '')$table = $module;
if($table == '')return;
if($tableid <= 0 && isset($this->app->Secure) && $this->app->Secure && method_exists($this->app->Secure, 'GetGET'))$tableid = (int)$this->app->Secure->GetGET('id');
if($tableid <= 0)return;
if($bearbeiter == '' && isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetName'))$bearbeiter = $this->app->User->GetName();
$arr = $this->app->DB->SelectRow("SELECT * FROM $table WHERE id = '$tableid' LIMIT 1");
if(!$arr)return;
$this->Changelog = array('data'=>$arr,'module'=>$module,'action'=>$action,'bearbeiter'=>$bearbeiter,'table'=>$table,'tableid'=>$tableid);
}
// @refactor Changelog Komponente/Modul
function WriteChangeLog()
{
if(!isset($this->Changelog) || !$this->Changelog)return;
$arr = $this->app->DB->SelectRow("SELECT * FROM ".$this->Changelog['table']." WHERE id = '".$this->Changelog['tableid']."' LIMIT 1");
if(!$arr)
{
$this->Changelog = null;
return;
}
$changes = null;
foreach($arr as $k => $v)
{
if($k != 'zeitstempel' && $k != 'useredittimestamp' && $k != 'usereditid')
{
if((String)$v != (String)$this->Changelog['data'][$k])
{
$changes[$k] = array('oldvalue'=>(String)$this->Changelog['data'][$k], 'newvalue'=>(String)$v);
}
}
}
$change_log = null;
if($changes)
{
$this->app->DB->Insert("INSERT INTO change_log (`bearbeiter`, `module`, `action`, `tabelle`, `tableid`, `zeitstempel`) VALUES (
'".$this->app->DB->real_escape_string($this->Changelog['bearbeiter'])."',
'".$this->app->DB->real_escape_string($this->Changelog['module'])."',
'".$this->app->DB->real_escape_string($this->Changelog['action'])."',
'".$this->app->DB->real_escape_string($this->Changelog['table'])."',
'".(int)$this->Changelog['tableid']."',now())");
$change_log = $this->app->DB->GetInsertID();
$this->Changelog = null;
if(!$change_log)return;
foreach($changes as $k => $v)
{
$this->app->DB->Insert("INSERT INTO change_log_field (change_log, fieldname, oldvalue, newvalue) VALUES ('$change_log',
'".$this->app->DB->real_escape_string($k)."',
'".$this->app->DB->real_escape_string($v['oldvalue'])."',
'".$this->app->DB->real_escape_string($v['newvalue'])."')");
}
}
$this->Changelog = null;
return $change_log;
}
// @refactor Installer Komponente
function CheckFirmendaten()
{
$check = $this->app->DB->Select("SELECT count(id) FROM firmendaten_werte");
if(!$check)
{
$altefirmendatenspalten = $this->app->DB->SelectArr("show columns from firmendaten");
if($altefirmendatenspalten){
foreach($altefirmendatenspalten as $zeile)
{
if($zeile['Field'] != 'id')
{
$type = strtolower($zeile['Type']);
$name = $zeile['Field'];
$typ = '';
$typ1 = '';
$typ2 = '';
$default_value = '';
$default_null = false;
$darf_null = false;
if(is_null($zeile['Default']))
{
$default_null = true;
}else{
$default_value = $zeile['Default'];
}
if(strtoupper($zeile['Null']) == 'YES')$darf_null = true;
if(substr($type ,0,3) == 'int')
{
$typ = 'int';
$typ1 = (int)str_replace(array('int(',')'),array('',''),$type);
}elseif(substr($type ,0,7) == 'tinyint')
{
$typ = 'tinyint';
$typ1 = (int)str_replace(array('tinyint(',')'),array('',''),$type);
}elseif(substr($type ,0,7) == 'varchar')
{
$typ = 'varchar';
$typ1 = (int)str_replace(array('varchar(',')'),array('',''),$type);
}elseif(substr($type ,0,8) == 'datetime')
{
$typ = 'datetime';
}elseif(substr($type ,0,4) == 'date')
{
$typ = 'date';
}elseif(substr($type ,0,7) == 'decimal')
{
$typ = 'decimal';
$decimala = explode(',',str_replace(array('decimal(',')'),array('',''),$type));
$typ1 = (int)$decimala[0];
$typ2 = (int)$decimala[1];
}
if($typ)
{
$wert = $this->app->DB->Select("SELECT $name FROM firmendaten LIMIT 1");
$this->AddNeuenFirmendatenWert($name, $typ, $typ1, $typ2, $wert, $default_value, $default_null, $darf_null);
}
}
}
}
}
}
public function activateCleanerOnce()
{
$activatedCleanerOnce = (string)$this->GetKonfiguration('cleaner_activated_one');
if($activatedCleanerOnce === '1') {
return;
}
$tables = [
'logfile' => 60,
'shopexportlog' => 30,
'versandzentrum' => 90,
'uebertragungen' => 90,
'adapterbox' => 20,
'protokoll' => 90
];
foreach($tables as $col => $days) {
if(!$this->Firmendaten('cleaner_'.$col)) {
$this->FirmendatenSet('cleaner_'.$col, '1');
}
if(!$this->Firmendaten('cleaner_'.$col.'_tage')) {
$this->FirmendatenSet('cleaner_'.$col.'_tage', $days);
}
}
$cleanerCronjob = $this->app->DB->SelectRow(
"SELECT `id`, `aktiv` FROM `prozessstarter` WHERE `parameter` = 'cleaner' ORDER BY `aktiv` DESC LIMIT 1"
);
if(!empty($cleanerCronjob) && empty($cleanerCronjob['aktiv'])) {
$this->app->DB->Update(
sprintf(
"UPDATE `prozessstarter` SET `aktiv` = 1 WHERE `id` = %d AND `parameter` = 'cleaner' LIMIT 1",
$cleanerCronjob['id']
)
);
}
$this->SetKonfigurationValue('cleaner_activated_one', '1');
}
// @refactor Installer Komponente
function StandardFirmendatenWerte()
{
$this->NeueFirmendatenWerteSammeln(true);
$this->AddNeuenFirmendatenWert( 'absender', 'varchar', '1024', '', 'Musterfirma GmbH | Musterweg 5 | 12345 Musterstadt', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'sichtbar', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'barcode', 'int', '1', '', '1', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'schriftgroesse', 'int', '1', '', '9', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'schriftgroesse_gesamt', 'int', '1', '', '9', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'schriftgroesse_gesamt_steuer', 'int', '1', '', '8', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'zeilenuntertext', 'int', '1', '', '7', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'infobox', 'int', '1', '', '8', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'spaltenbreite', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_0_0', 'varchar', '512', '', 'Sitz der Gesellschaft / Lieferanschrift', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_0_1', 'varchar', '512', '', 'Musterfirma GmbH', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_0_2', 'varchar', '512', '', 'Musterweg 5', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_0_3', 'varchar', '512', '', 'D-12345 Musterstadt', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_0_4', 'varchar', '512', '', 'Telefon +49 123 12 34 56 7', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_0_5', 'varchar', '512', '', 'Telefax +49 123 12 34 56 78', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_1_0', 'varchar', '64', '', 'Bankverbindung', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_1_1', 'varchar', '64', '', 'Musterbank', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_1_2', 'varchar', '64', '', 'Konto 123456789', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_1_3', 'varchar', '64', '', 'BLZ 72012345', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_1_4', 'varchar', '64', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_1_5', 'varchar', '64', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_2_0', 'varchar', '64', '', 'IBAN DE1234567891234567891', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_2_1', 'varchar', '64', '', 'BIC/SWIFT DETSGDBWEMN', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_2_2', 'varchar', '64', '', 'Ust-IDNr. DE123456789', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_2_3', 'varchar', '64', '', 'E-Mail: info@musterfirma-gmbh.de', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_2_4', 'varchar', '64', '', 'Internet: http://www.musterfirma.de', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_2_5', 'varchar', '64', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_3_0', 'varchar', '64', '', 'Geschäftsführer', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_3_1', 'varchar', '64', '', 'Max Musterman', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_3_2', 'varchar', '64', '', 'Handelsregister: HRB 12345', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_3_3', 'varchar', '64', '', 'Amtsgericht: Musterstadt', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_3_4', 'varchar', '64', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'footer_3_5', 'varchar', '64', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'hintergrund', 'varchar', '64', '', 'kein', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'bcc3', 'varchar', '255', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'logo_type', 'varchar', '64', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'briefpapier_type', 'varchar', '64', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'email', 'varchar', '64', '', 'mail@ihr_mail_server.de', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'absendername', 'varchar', '64', '', 'Meine Firma', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'strasse', 'varchar', '64', '', 'Musterweg 5', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'plz', 'varchar', '64', '', '12345', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'ort', 'varchar', '64', '', 'Musterstadt', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'steuernummer', 'varchar', '64', '', 'DE123456789', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'startseite_wiki', 'varchar', '64', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'projekt', 'int', '11', '', '1', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'next_preisanfrage', 'varchar', '64', '', '100000', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_angebot', 'varchar', '64', '', '100003', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_auftrag', 'varchar', '64', '', '200005', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_gutschrift', 'varchar', '64', '', '900000', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_lieferschein', 'varchar', '64', '', '300001', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_retoure', 'varchar', '64', '', '500001', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_bestellung', 'varchar', '64', '', '100002', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_rechnung', 'varchar', '64', '', '400001', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_kundennummer', 'varchar', '64', '', '10003', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_lieferantennummer', 'varchar', '64', '', '70002', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_mitarbeiternummer', 'varchar', '64', '', '90001', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_waren', 'varchar', '64', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_sonstiges', 'varchar', '64', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'next_produktion', 'varchar', '64', '', '400000', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'breite_position', 'int', '11', '', '10', '10', 0, 0);
$this->AddNeuenFirmendatenWert( 'breite_menge', 'int', '11', '', '10', '10', 0, 0);
$this->AddNeuenFirmendatenWert( 'breite_nummer', 'int', '11', '', '20', '20', 0, 0);
$this->AddNeuenFirmendatenWert( 'breite_einheit', 'int', '11', '', '15', '15', 0, 0);
$this->AddNeuenFirmendatenWert( 'skonto_ueberweisung_ueberziehen', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'kleinunternehmer', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuerfrei_inland_ausblenden', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuerspalteausblenden', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'mahnwesenmitkontoabgleich', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'porto_berechnen', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'auftrag_eantab', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'immernettorechnungen', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'erweiterte_positionsansicht', 'int', '1', '', '1', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'schnellanlegen', 'int', '1', '', '1', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'schnellanlegen_ohnefreigabe', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'bestellvorschlaggroessernull', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'versand_gelesen', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'versandart', 'varchar', '64', '', 'versandunternehmen', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlungsweise', 'varchar', '64', '', 'rechnung', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlungsweiselieferant', 'varchar', '64', '', 'rechnung', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_lastschrift_konditionen', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'breite_artikelbeschreibung', 'tinyint', '1', '', '1', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'langeartikelnummern', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'deviceenable', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'etikettendrucker_wareneingang', 'int', '11', '', '2', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'aufgaben_bondrucker', 'int', '11', '', '2', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'waehrung', 'varchar', '64', '', 'EUR', 'EUR', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_breite1', 'int', '11', '', '50', '50', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_breite4', 'int', '11', '', '40', '40', 0, 0);
$this->AddNeuenFirmendatenWert( 'boxausrichtung', 'varchar', '64', '', 'L', 'R', 0, 0);
$this->AddNeuenFirmendatenWert( 'branch', 'varchar', '64', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'version', 'varchar', '64', '', '15.4.f7412d4', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'standard_datensaetze_datatables', 'int', '11', '', '0', '10', 0, 0);
$this->AddNeuenFirmendatenWert( 'auftrag_bezeichnung_vertrieb', 'varchar', '64', '', 'Vertrieb', 'Vertrieb', 0, 0);
$this->AddNeuenFirmendatenWert( 'auftrag_bezeichnung_bearbeiter', 'varchar', '64', '', 'Bearbeiter', 'Bearbeiter', 0, 0);
$this->AddNeuenFirmendatenWert( 'auftrag_bezeichnung_bestellnummer', 'varchar', '64', '', 'Ihre Bestellnummer', 'Ihre Bestellnummer', 0, 0);
$this->AddNeuenFirmendatenWert( 'bezeichnungkundennummer', 'varchar', '64', '', 'Kundennummer', 'Kundennummer', 0, 0);
$this->AddNeuenFirmendatenWert( 'bezeichnungstornorechnung', 'varchar', '64', '', 'Stornorechnung', 'Stornorechnung', 0, 0);
$this->AddNeuenFirmendatenWert( 'bestellungohnepreis', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'bestellungmitartikeltext', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'bestellungeigeneartikelnummer', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'bestellunglangeartikelnummern', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'rechnung_gutschrift_ansprechpartner', 'int', '1', '', '0', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'angebot_auftrag_bestellung_ansprechpartner', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'api_initkey', 'varchar', '1024', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'api_remotedomain', 'varchar', '1024', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'api_eventurl', 'varchar', '1024', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'api_enable', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'api_cleanutf8', 'tinyint', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'api_importwarteschlange', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'api_importwarteschlange_name', 'varchar', '64', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'wareneingang_zwischenlager', 'int', '1', '', '0', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'modul_mlm', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'modul_verband', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'modul_mhd', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'mhd_warnung_tage', 'int', '11', '', '3', '3', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_anzahlmonate', 'int', '11', '', '11', '11', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_01_punkte', 'int', '11', '', '2999', '2999', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_02_punkte', 'int', '11', '', '3000', '3000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_03_punkte', 'int', '11', '', '5000', '5000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_04_punkte', 'int', '11', '', '10000', '10000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_05_punkte', 'int', '11', '', '15000', '15000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_06_punkte', 'int', '11', '', '25000', '25000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_07_punkte', 'int', '11', '', '50000', '50000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_08_punkte', 'int', '11', '', '100000', '100000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_09_punkte', 'int', '11', '', '150000', '150000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_10_punkte', 'int', '11', '', '200000', '200000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_11_punkte', 'int', '11', '', '250000', '250000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_12_punkte', 'int', '11', '', '300000', '300000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_13_punkte', 'int', '11', '', '350000', '350000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_14_punkte', 'int', '11', '', '400000', '400000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_15_punkte', 'int', '11', '', '450000', '450000', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_01_mindestumsatz', 'int', '11', '', '50', '50', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_02_mindestumsatz', 'int', '11', '', '50', '50', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_03_mindestumsatz', 'int', '11', '', '50', '50', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_04_mindestumsatz', 'int', '11', '', '50', '50', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_05_mindestumsatz', 'int', '11', '', '100', '100', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_06_mindestumsatz', 'int', '11', '', '100', '100', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_07_mindestumsatz', 'int', '11', '', '100', '100', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_08_mindestumsatz', 'int', '11', '', '100', '100', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_09_mindestumsatz', 'int', '11', '', '100', '100', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_10_mindestumsatz', 'int', '11', '', '100', '100', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_11_mindestumsatz', 'int', '11', '', '100', '100', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_12_mindestumsatz', 'int', '11', '', '100', '100', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_13_mindestumsatz', 'int', '11', '', '100', '100', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_14_mindestumsatz', 'int', '11', '', '100', '100', 0, 0);
$this->AddNeuenFirmendatenWert( 'mlm_15_mindestumsatz', 'int', '11', '', '100', '100', 0, 0);
$this->AddNeuenFirmendatenWert( 'standardaufloesung', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'standardversanddrucker', 'int', '11', '', '1', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'standardetikettendrucker', 'int', '11', '', '2', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'wareneingangdmsdrucker', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'externereinkauf', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'schriftart', 'varchar', '64', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'knickfalz', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'artikeleinheit', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'artikeleinheit_standard', 'varchar', '64', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'abstand_boxrechtsoben_lr', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlungszieltage', 'int', '11', '', '14', '14', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlungszielskonto', 'int', '11', '', '2', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'zahlungszieltageskonto', 'int', '11', '', '10', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'lieferdatumkw', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'eigener_skontotext', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'eigener_skontotext_re', 'varchar', '512', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'eigener_skontotext_anab', 'varchar', '512', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_rechnung', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_vorkasse', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_nachnahme', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_kreditkarte', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_paypal', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_bar', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_lastschrift', 'int', '1', '', '1', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_amazon', 'int', '1', '', '1', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_ratenzahlung', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'briefpapier2vorhanden', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'briefpapier_ohnedoppelstrich', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'artikel_suche_kurztext', 'int', '1', '', '1', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'artikel_suche_variante_von', 'int', '1', '', '1', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'adresse_freitext1_suche', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'iconset_dunkel', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'warnung_doppelte_nummern', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'warnung_doppelte_seriennummern', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'next_arbeitsnachweis', 'varchar', '64', '', '300000', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'next_reisekosten', 'varchar', '64', '', '31000', '', 1, 1);
$receiptDocumentNumber = $this->app->erp->GetKonfiguration('receiptdocument_number');
if(empty($receiptDocumentNumber)) {
$receiptDocumentNumber= '300000';
}
$this->AddNeuenFirmendatenWert( 'next_receiptdocument', 'varchar', '64', '', $receiptDocumentNumber, '', 1, 1);
$this->AddNeuenFirmendatenWert( 'next_anfrage', 'varchar', '64', '', '50000', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'next_artikelnummer', 'varchar', '64', '', '1000000', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'seite_von_ausrichtung', 'varchar', '64', '', 'R', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'seite_von_sichtbar', 'int', '1', '', '1', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'seite_belegnr', 'int', '1', '', '1', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'parameterundfreifelder', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'firmenlogotype', 'varchar', '64', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'firmenlogoaktiv', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'projektnummerimdokument', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'bearbeiteremailimdokument', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'typimdokument', 'int', '1', '', '0', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'staffelpreiseanzeigen', 'int', '1', '', '0', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'auftragabschliessen', 'int', '1', '', '0', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'dateienweiterfuehren', 'int', '1', '', '0', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'systemmailsabschalten', 'int', '1', '', '0', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'lagerbestand_in_auftragspositionen_anzeigen', 'int', '1', '', '0', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'systemmailsempfaenger', 'varchar', '255', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'bearbeitertelefonimdokument', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'herstellernummerimdokument', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'abmessungimdokument', 'int', '1', '', '0', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'standardmarge', 'int', '11', '', '30', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'steuer_standardkonto_aufwendungen', 'int', '1', '', '1', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_standardkonto', 'varchar', '10', '', '1370', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_erloese_inland_normal', 'varchar', '10', '', '4400', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_aufwendung_inland_normal', 'varchar', '10', '', '5400', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_erloese_inland_ermaessigt', 'varchar', '10', '', '4300', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_aufwendung_inland_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_erloese_inland_steuerfrei', 'varchar', '10', '', '4110', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_aufwendung_inland_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_erloese_inland_innergemeinschaftlich', 'varchar', '10', '', '4125', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_aufwendung_inland_innergemeinschaftlich', 'varchar', '10', '', '5425', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_erloese_inland_eunormal', 'varchar', '10', '', '4315', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_aufwendung_inland_eunormal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_erloese_inland_export', 'varchar', '10', '', '4120', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_aufwendung_inland_import', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_anpassung_kundennummer', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_1', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_1_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_1_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_1_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_2', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_2_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_2_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_2_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_3', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_3_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_3_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_3_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_4', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_4_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_4_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_4_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_5', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_5_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_5_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_5_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_6', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_6_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_6_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_6_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_7', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_7_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_7_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_7_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_8', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_8_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_8_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_8_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_9', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_9_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_9_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_9_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_10', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_10_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_10_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_10_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_11', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_11_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_11_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_11_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_12', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_12_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_12_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_12_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_13', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_13_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_13_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_13_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_14', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_14_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_14_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_14_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_15', 'varchar', '30', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_15_normal', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_15_ermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_art_15_steuerfrei', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'rechnung_ohnebriefpapier', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'reisekosten_ohnebriefpapier', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'lieferschein_ohnebriefpapier', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'angebot_ohnebriefpapier', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'auftrag_ohnebriefpapier', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'gutschrift_ohnebriefpapier', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'bestellung_ohnebriefpapier', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'arbeitsnachweis_ohnebriefpapier', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'proformarechnung_ohnebriefpapier', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'abstand_adresszeileoben', 'int', '11', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'abstand_boxrechtsoben', 'int', '11', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'wareneingang_kamera_waage', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'briefhtml', 'tinyint', '1', '', '1', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'seite_von_ausrichtung_relativ', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'absenderunterstrichen', 'tinyint', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'schriftgroesseabsender', 'int', '11', '', '7', '7', 0, 0);
$this->AddNeuenFirmendatenWert( 'datatables_export_button_flash', 'tinyint', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'land', 'varchar', '2', '', 'DE', 'DE', 0, 0);
$this->AddNeuenFirmendatenWert( 'modul_finanzbuchhaltung', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'testmailempfaenger', 'varchar', '128', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'immerbruttorechnungen', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'sepaglaeubigerid', 'varchar', '64', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'viernachkommastellen_belege', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'bezeichnungangebotersatz', 'varchar', '64', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'stornorechnung_standard', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'angebotersatz_standard', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'angebot_anzahltage', 'int', '1', '', '28', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'angebot_anzahlwiedervorlage', 'int', '1', '', '14', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'angebot_pipewiedervorlage', 'varchar', '250', '', '', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'modul_verein', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'abstand_gesamtsumme_lr', 'int', '11', '', '100', '100', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_amazon_bestellung', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_billsafe', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_sofortueberweisung', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_secupay', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'artikel_bilder_uebersicht', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'artikel_baum_uebersicht', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_erloese_inland_nichtsteuerbar', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_erloese_inland_euermaessigt', 'varchar', '10', '', '4310', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_aufwendung_inland_nichtsteuerbar', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'steuer_aufwendung_inland_euermaessigt', 'varchar', '10', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'abstand_seitenrandlinks', 'int', '11', '', '15', '15', 0, 0);
$this->AddNeuenFirmendatenWert( 'abstand_umbruchunten', 'int', '11', '', '37', '37', 0, 0);
$this->AddNeuenFirmendatenWert( 'abstand_adresszeilelinks', 'int', '11', '', '15', '15', 0, 0);
$this->AddNeuenFirmendatenWert( 'wareneingang_gross', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'wareneingangbildtypvorauswahl', 'varchar', '255', '', 'Shopbild', 'Shopbild', 0, 0);
$this->AddNeuenFirmendatenWert( 'wareneingangscanverhalten', 'varchar', '255', '', 'Shopbild', 'Shopbild', 0, 0);
$this->AddNeuenFirmendatenWert( 'wareneingang_lagerartikel', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'barcode_x_header', 'int', '11', '', '12', '12', 0, 0);
$this->AddNeuenFirmendatenWert( 'barcode_x', 'int', '11', '', '12', '12', 0, 0);
$this->AddNeuenFirmendatenWert( 'barcode_y_header', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'abstand_seiten_unten', 'int', '11', '', '34', '34', 0, 0);
$this->AddNeuenFirmendatenWert( 'mailgrussformel', 'varchar', '1024', '', '\r\n\r\n\r\nF&uuml;r R&uuml;ckfragen stehe ich Ihnen gerne zur Verf&uuml;gung.\r\n\r\nMit freundlichen Gr&uuml;ßen\r\n{MITARBEITER}', '\r\n\r\n\r\nF&uuml;r R&uuml;ckfragen stehe ich Ihnen gerne zur Verf&uuml;gung.\r\n\r\nMit freundlichen Gr&uuml;ßen\r\n{MITARBEITER}', 0, 0);
$this->AddNeuenFirmendatenWert( 'geburtstagekalender', 'tinyint', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'bezeichnungproformarechnungersatz', 'varchar', '64', '', 'Lieferschein mit Preis', 'Lieferschein mit Preis', 0, 0);
$this->AddNeuenFirmendatenWert( 'bezeichnungauftragersatz', 'varchar', '64', '', 'Proformarechnung', 'Proformarechnung', 0, 0);
$this->AddNeuenFirmendatenWert( 'bezeichnungrechnungersatz', 'varchar', '64', '', 'Quittung', 'Quittung', 0, 0);
$this->AddNeuenFirmendatenWert( 'bezeichnunglieferscheinersatz', 'varchar', '64', '', 'Alternative Beschriftung', 'Alternative Beschriftung', 0, 0);
$this->AddNeuenFirmendatenWert( 'bezeichnungbestellungersatz', 'varchar', '64', '', 'Alternative Beschriftung', 'Alternative Beschriftung', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_zentriert', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_farbe', 'int', '11', '', '30', '30', 0, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_einzugsermaechtigung', 'int', '1', '', '0', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'zahlung_eckarte', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'abseite2y', 'int', '11', '', '50', '50', 0, 0);
$this->AddNeuenFirmendatenWert( 'artikel_freitext1_suche', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'artikel_artikelnummer_suche', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'next_kalkulation', 'varchar', '128', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'next_preisanfrage', 'varchar', '128', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'next_proformarechnung', 'varchar', '128', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'next_serviceauftrag', 'varchar', '128', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'next_verbindlichkeit', 'varchar', '128', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'zahlung_auftrag_sofort_de', 'text', '', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'zahlung_auftrag_de', 'text', '', '', '', '', 1, 1);
for($i = 1; $i <= 20; $i++)
{
$this->AddNeuenFirmendatenWert( 'adressefreifeld'.$i.'typ', 'varchar', '16', '', 'einzeilig', 'einzeilig', 0, 0);
$this->AddNeuenFirmendatenWert( 'adressefreifeld'.$i.'spalte', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'adressefreifeld'.$i.'sort', 'int', '11', '', '0', '0', 0, 0);
}
for($i = 1; $i <= 40; $i++)
{
$this->AddNeuenFirmendatenWert( 'freifeld'.$i.'typ', 'varchar', '16', '', 'einzeilig', 'einzeilig', 0, 0);
$this->AddNeuenFirmendatenWert( 'freifeld'.$i.'spalte', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'freifeld'.$i.'sort', 'int', '11', '', '0', '0', 0, 0);
}
for($i = 1; $i <= 20; $i++)
{
$this->AddNeuenFirmendatenWert( 'projektfreifeld'.$i, 'varchar', '256', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'projektfreifeld'.$i.'typ', 'varchar', '16', '', 'einzeilig', 'einzeilig', 0, 0);
$this->AddNeuenFirmendatenWert( 'projektfreifeld'.$i.'spalte', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'projektfreifeld'.$i.'sort', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'projektfreifeld'.$i.'tabelle', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'projektfreifeld'.$i.'breite', 'int', '11', '', '10', '10', 0, 0);
}
$this->AddNeuenFirmendatenWert( 'beleg_artikelbild', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'lieferschein_artikelbild', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'rechnung_artikelbild', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'bestellung_artikelbild', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'gutschrift_artikelbild', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'angebot_artikelbild', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'wareneingangauftragzubestellung', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'freifelderimdokument', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'internetnummerimbeleg', 'int', '1', '', '', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'vertriebbearbeiterfuellen', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'beschriftunginternetnummer', 'varchar', '64', '', 'Internetnummer', 'Internetnummer', 0, 0);
$this->AddNeuenFirmendatenWert( 'briefpapier_bearbeiter_ausblenden', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'briefpapier_vertrieb_ausblenden', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'wiedervorlage_mitarbeiter', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'auftragmarkierenegsaldo', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'breite_artikel', 'int', '11', '', '76', '76', 1, 1);
$this->AddNeuenFirmendatenWert( 'breite_steuer', 'int', '11', '', '15', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'next_projektnummer', 'varchar', '255', '', '1000', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'zeiterfassung_anderemitarbeiter', 'int', '1', '', '1', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'auftragexplodieren_unterstuecklisten', 'int', '1', '', '0', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'dienstleistungsartikel_nicht_zu_lieferschein', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'zeiterfassung_beschreibungssperre', 'int', '1', '', '0', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'zeiterfassung_kommentar', 'int', '1', '', '1', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'zeiterfassung_erweitert', 'int', '1', '', '1', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'zeiterfassung_ort', 'int', '1', '', '1', '', 1, 1);
$this->AddNeuenFirmendatenWert( 'zeiterfassung_abrechnenvorausgewaehlt', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_angebot', 'varchar', '2048', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_auftrag', 'varchar', '2048', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_rechnung', 'varchar', '2048', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_gutschrift', 'varchar', '2048', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_lieferschein', 'varchar', '2048', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_bestellung', 'varchar', '2048', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_proformarechnung', 'varchar', '2048', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_angebot_aktivieren', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_auftrag_aktivieren', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_rechnung_aktivieren', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_gutschrift_aktivieren', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_lieferschein_aktivieren', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_bestellung_aktivieren', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_reihenfolge_proformarechnung_aktivieren', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'beleg_pos_ean', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'beleg_pos_charge', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'beleg_pos_mhd', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'beleg_pos_sn', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'beleg_pos_zolltarifnummer', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'beleg_pos_herkunftsland', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'noauth', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'reihenfolge_zwischenspeicher', 'varchar', '2048', '', "{ADRESSE_NAME}\r\n{ADRESSE_ANSPRECHPARTNER}\r\n{ADRESSE_ABTEILUNG}\r\n{ADRESSE_UNTERABTEILUNG}\r\n{ADRESSE_ADRESSZUSATZ}\r\n{ADRESSE_STRASSE}\r\n{ADRESSE_LAND}-{ADRESSE_PLZ} {ADRESSE_ORT}",'', 0, 0);
$this->AddNeuenFirmendatenWert( 'adresse_vorlage', 'varchar', '64', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'belege_subpositionen', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'belege_stuecklisteneinrueckenmm', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'belege_subpositionenstuecklisten', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'guenstigste_vk', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'festetrackingnummer', 'tinyint', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'oneclickrelease', 'tinyint', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'loadcurrencyrate', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_logfile', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_logfile_tage', 'int', '11', '', '60', '60', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_shopexportlog', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_shopexportlog_tage', 'int', '11', '', '30', '30', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_versandzentrum', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_versandzentrum_tage', 'int', '11', '', '90', '90', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_uebertragungen', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_uebertragungen_tage', 'int', '11', '', '90', '90', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_adapterbox', 'tinyint', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_adapterbox_tage', 'int', '11', '', '20', '20', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_protokoll', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_protokoll_tage', 'int', '11', '', '90', '90', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_shopimport', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'tabsnavigationfarbe', 'varchar', '32', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'tabsnavigationfarbeschrift', 'varchar', '32', '', '#000', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'cleaner_shopimport_tage', 'int', '11', '', '90', '90', 0, 0);
$this->AddNeuenFirmendatenWert( 'paketmarke_mit_waage', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'artikel_beschleunigte_suche', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'internebemerkungminidetails', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'navigationfarbeschrift2', 'varchar', '32', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'gewichtzukgfaktor', 'varchar', '32', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'gewichtbezeichnung', 'varchar', '32', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'begrenzen_artikeltabelle', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'begrenzen_adressetabelle', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'begrenzen_belege', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'versandmail_zwischenspeichern', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'begrenzenanzahl_artikeltabelle', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'begrenzenanzahl_adressetabelle', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'begrenzenanzahl_belege', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'versandmails_max', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'autoversand_maxauftraege', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'autoversand_locked_orders', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'schnellsuche', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'schnellsuchecount', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'zeiterfassung_schliessen', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'zeiterfassung_schliessentage', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'zeiterfassung_pflicht', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'ampellager', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'ampelporto', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'ampelust', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'ampelzahlung', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'ampelnachnahme', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'ampelautoversand', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'ampelkunde', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'ampelliefertermin', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'ampelkreditlimit', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'ampelliefersperre', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'ampelproduktion', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'keinhauptmenurahmen', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'bordertabnav', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'navigationfarbe2', 'varchar', '32', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'freitext1x', 'varchar', '32', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'freitext1y', 'varchar', '32', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'freitext1schriftgroesse', 'varchar', '32', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'freitext1breite', 'varchar', '32', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'freitext1aktiv', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'freitext1inhalt', 'varchar', '2048', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'freitext2x', 'varchar', '32', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'freitext2y', 'varchar', '32', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'freitext2schriftgroesse', 'varchar', '32', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'freitext2breite', 'varchar', '32', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'freitext2aktiv', 'int', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'freitext2inhalt', 'varchar', '2048', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'kommissionskonsignationslager', 'varchar', '255', '', 'Kommissions-/Konsignationslager', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'bezeichnungaktionscodes', 'varchar', '255', '', 'Aktionscode', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'produktionsverhalten','varchar','64','','explodieren','',0,0);
$this->AddNeuenFirmendatenWert( 'projektoeffentlich', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'verkaufspreisevpe', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'einkaufspreisevpe', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'barcode', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'tabellenbeschriftung', 'int', '1', '', '8', '8', 0, 0);
$this->AddNeuenFirmendatenWert( 'tabelleninhalt', 'int', '1', '', '8', '8', 0, 0);
$this->AddNeuenFirmendatenWert( 'freitext', 'int', '1', '', '8', '8', 0, 0);
$this->AddNeuenFirmendatenWert( 'brieftext', 'varchar', '64', '', '9', '9', 0, 0);
$this->AddNeuenFirmendatenWert( 'abstand_betreffzeileoben', 'int', '11', '', '15', '15', 0, 0);
$this->AddNeuenFirmendatenWert( 'abstand_name_beschreibung', 'int', '11', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'abstand_seitenrandrechts', 'int', '11', '', '15', '15', 0, 0);
$this->AddNeuenFirmendatenWert( 'abstand_artikeltabelleoben', 'int', '11', '', '10', '10', 0, 0);
$this->AddNeuenFirmendatenWert( 'footersichtbar', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_breite2', 'int', '11', '', '40', '40', 0, 0);
$this->AddNeuenFirmendatenWert( 'footer_breite3', 'int', '11', '', '55', '55', 0, 0);
$this->AddNeuenFirmendatenWert( 'ldap_host', 'varchar', '2048', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'ldap_bindname', 'varchar', '2048', '', 'uid=%user%,cn=users,cn=accounts,dc=eigenerdcname,dc=de', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'ldap_searchbase', 'varchar', '2048', '', 'cn=accounts,dc=eigenerdcname,dc=de', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'ldap_filter', 'varchar', '2048', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'firmenhoherformularkontrast', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'positionenkaufmaenischrunden', 'int', '1', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'stuecklistegewichtnurartikel', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'bestellungabschliessen', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'gutschriftkursvonrechnung', 'tinyint', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'position_quantity_change_price_update', 'int', '1', '', '1', '1', 0, 0);
$belege = array('an','ab','re','gs','ls','be','pr','pa','pd');
foreach($belege as $value)
{
for($i=1;$i<=40;$i++)
$this->AddNeuenFirmendatenWert( 'freifeld'.$i.$value, 'tinyint', '1', '', '0', '0', 0, 0);
}
$this->AddNeuenFirmendatenWert( 'apiohnehtmlumwandlung', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'externeurlsblockieren', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'additionalcspheader', 'varchar', '255', '', '', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'dsgvoversandunternehmen', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'belegnummersortierungint', 'tinyint', '1', '', '0', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'belegeinanhang', 'tinyint', '1', '', '0', '0', 0, 0);
for($i = 1; $i <= 5; $i++)
{
$this->AddNeuenFirmendatenWert( 'artikeltabellezusatz'.$i, 'varchar', '255', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'adressetabellezusatz'.$i, 'varchar', '255', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'auftragtabellezusatz'.$i, 'varchar', '255', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'lieferscheintabellezusatz'.$i, 'varchar', '255', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'rechnungtabellezusatz'.$i, 'varchar', '255', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'produktiontabellezusatz'.$i, 'varchar', '255', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'bestellungtabellezusatz'.$i, 'varchar', '255', '', '', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'erwbestellvorschlagtabellezusatz'.$i, 'varchar', '255', '', '', '', 0, 0);
}
$this->AddNeuenFirmendatenWert( 'produktionskorrektur_nichtverwenden', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'disableproductionautostart', 'int', '1', '', '0', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'closesubproductions', 'int', '1', '', '1', '1', 0, 0);
$this->AddNeuenFirmendatenWert( 'disablecreateproductiononextern', 'int', '1', '', '0', '', 0, 0);
$this->AddNeuenFirmendatenWert( 'server_url', 'varchar', '255', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'server_port', 'varchar', '5', '', '', '', 1, 0);
$this->AddNeuenFirmendatenWert( 'cronjob_limit', 'int', '11', '', '3', '3', 1, 0);
$this->AddNeuenFirmendatenWert( 'poll_repeattime', 'int', '11', '', '5', '5', 1, 0);
$this->AddNeuenFirmendatenWert( 'versandzentrum_bild', 'tinyint', '1', '', '0', '0', 1, 0);
$this->AddNeuenFirmendatenWert( 'proformainvoice_juststorgearticles', 'tinyint', '1', '', '1', '1', 1, 0);
$this->AddNeuenFirmendatenWert( 'onlyemployeeprojects', 'tinyint', '1', '', '0', '0', 1, 0);
$this->AddNeuenFirmendatenWert( 'taxfromdoctypesettings', 'tinyint', '1', '', '0', '0', 1, 0);
$this->AddNeuenFirmendatenWert( 'group_sales', 'varchar', '255', '', '', '0', 0, 0);
$this->AddNeuenFirmendatenWert( 'group_employee', 'varchar', '255', '', '', '0', 0, 0);
$this->NeueFirmendatenWerteSammeln(false);
}
// @refactor Artikel Modul
public function getArtikelCachedfelder()
{
return array(
'lager_verfuegbar'=>'Menge',
'ek_netto'=>'Preis',
'ek_brutto'=>'Preis',
'vk_netto'=>'Preis',
'vk_brutto'=>'Preis',
'inzulauf'=>'Menge',
'imsperrlager'=>'Menge',
'eigenschaften'=>'Eigenschaften',
'inproduktion'=>'Menge',
);
}
// @refactor Artikel Modul
public function getZusatzfelderArtikel()
{
$artikelzusatzfelder = array(''=>'','vk_netto'=>'VK netto','vk_brutto'=>'VK brutto','ek_netto'=>'EK netto','ek_brutto'=>'EK brutto',
'pseudopreis'=>'Pseudo Preis / UVP','lager_verfuegbar'=>'Lager verf&uuml;gbar','inzulauf'=>'in Zulauf','imsperrlager'=>'im Sperrlager', 'inproduktion'=>'in Produktion',
'eigenschaften'=>'Eigenschaften','ean'=>'EAN','hersteller'=>'Hersteller','herstellernummer'=>'Hersteller Nr.','zolltarifnummer'=>'Zolltarifnummer');
for($i = 1; $i <= 40; $i++) {
$freifeldname = $this->app->erp->Firmendaten('freifeld' . $i);
if($freifeldname != '') {
if($this->app->erp->Firmendaten('freifeld'.$i.'typ') === 'select') {
$freifeldname = explode('|', $freifeldname);
$freifeldname = trim(reset($freifeldname));
}
} else {
$freifeldname ='Freifeld ' . $i;
}
$artikelzusatzfelder['freifeld' . $i] = $freifeldname;
}
return $artikelzusatzfelder;
}
/**
* @param string $typ
*
* @return array
*/
public function getFreifeldNameArr($typ)
{
if($typ === 'adresse') {
$prefix = 'adresse';
}
elseif($typ === 'artikel') {
$prefix = '';
}
else {
return [];
}
$freifelder = [];
for($i = 1; $i <= 40; $i++) {
$freifeldname = $this->app->erp->Firmendaten($prefix.'freifeld' . $i);
if($freifeldname != '') {
if($this->app->erp->Firmendaten($prefix.'freifeld'.$i.'typ') === 'select') {
$freifeldname = explode('|', $freifeldname);
$freifeldname = trim(reset($freifeldname));
}
} else {
$freifeldname ='Freifeld ' . $i;
}
$freifelder['freifeld' . $i] = $freifeldname;
}
return $freifelder;
}
// @refactor Auftrag Modul
public function getZusatzfelderAuftrag()
{
return array(''=>'','internet'=>'Internet','lieferdatum'=>'Wunsch Liefertermin','tatsaechlicheslieferdatum'=>'Auslieferung Lager','versandart'=>'Versandart','vertrieb'=>'Vertrieb','bearbeiter'=>'Bearbeiter','umsatz_netto'=>'Betrag (netto)');
}
// @refactor Rechnung Modul
public function getZusatzfelderRechnung()
{
return array(''=>'','internet'=>'Internet','versandart'=>'Versandart','umsatz_netto'=>'Betrag (netto)');
}
// @refactor Auftrag Modul
public function getZusatzfelderLieferschein()
{
return array(''=>'','internet'=>'Internet','versandart'=>'Versandart');
}
public function getZusatzfelderProduktion()
{
return array(''=>'','datumauslieferung'=>'Auslieferung Lager','datumbereitstellung'=>'Bereitstellung Start','datumproduktion'=>'Produktion Start',
'datumproduktionende'=>'Produktion Ende','charge'=>'Charge','mhd'=>'MHD','artikelkategorie'=>'Artikelkategorie');
}
public function getZusatzfelderBestellung()
{
return array(''=>'','bestaetigteslieferdatum'=>'Best&auml;tigtes Lieferdatum','gewuenschteslieferdatum'=>'Wunsch Liefertermin');
}
public function getZusatzfelderErwBestellvorschlag()
{
$erwBestellvorschlagZusatzfelder = array(''=>'');
for($i = 1; $i <= 40; $i++) {
$freifeldname = $this->app->erp->Firmendaten('freifeld' . $i);
if($freifeldname != '') {
if($this->app->erp->Firmendaten('freifeld'.$i.'typ') === 'select') {
$freifeldname = explode('|', $freifeldname);
$freifeldname = trim(reset($freifeldname));
}
} else {
$freifeldname ='Freifeld ' . $i;
}
$erwBestellvorschlagZusatzfelder['freifeld' . $i] = $freifeldname;
}
return $erwBestellvorschlagZusatzfelder;
}
// @refactor In Adresse Modul
public function getZusatzfelderAdresse()
{
$adressezusatzfelder = array(''=>'','telefon'=>'Telefon','telefax'=>'Fax','mobil'=>'Mobil','ansprechpartner'=>'Ansprechpartner','abteilung'=>'Abteilung','unterabteilung'=>'Unterabteilung','ustid'=>'Ust-ID','steuernummer'=>'Steuernummer','gln'=>'GLN','mitarbeiternummer'=>'Mitarbeiternummer');
for($i = 1; $i <= 20; $i++)
{
$freifeldname = $this->app->erp->Firmendaten('adressefreifeld' . $i);
if($freifeldname != '') {
if($this->app->erp->Firmendaten('adressefreifeld'.$i.'typ') === 'select') {
$freifeldname = explode('|', $freifeldname);
$freifeldname = trim(reset($freifeldname));
}
} else {
$freifeldname ='Freifeld ' . $i;
}
$adressezusatzfelder['freifeld'.$i] = $freifeldname;
}
return $adressezusatzfelder;
}
function BelegeimportAusfuehren($idliste = null, $uebertragungen = false)
{
/** @var Api $api */
$api = $this->LoadModul('api');
if(!empty($api) && method_exists($api, 'BelegeimportAusfuehren')) {
return $api->BelegeimportAusfuehren($idliste, $uebertragungen);
}
}
function BelegeimportDatei($_datei = null, $uebertragungen = false)
{
/** @var Api $api */
$api = $this->LoadModul('api');
if(!empty($api) && method_exists($api, 'BelegeimportDatei')) {
return $api->BelegeimportDatei($_datei, $uebertragungen);
}
}
/**
* @return int
*/
public function GetVersandmailsMax()
{
/** @var Firmendaten $obj */
$obj = $this->app->erp->LoadModul('firmendaten');
if(empty($obj) || !method_exists($obj, 'getMaxTrackingMailToSend')) {
return 0;
}
return $obj->getMaxTrackingMailToSend();
}
/**
* @return int
*/
public function GetAutoversandMaxAuftraege()
{
/** @var Firmendaten $obj */
$obj = $this->app->erp->LoadModul('firmendaten');
if(empty($obj) || !method_exists($obj, 'getMaxAutoOrderSend')) {
return 0;
}
return $obj->getMaxAutoOrderSend();
}
// @refactor In Firmendaten Modul
public function CheckSchnellsuche($cmd, $anz, $time)
{
if(!($anz > 10000 || ($anz > 5000 && $time > 1)) ||
!in_array($cmd, array('artikeltabelle','ticket_offene','webmail_listall','emailtabelle')) ||
$this->Firmendaten('schnellsuche') || $this->GetKonfiguration('firmendaten_schnellsuche_gesetzt')) {
return;
}
if($this->Firmendaten('schnellsuche') && !$this->GetKonfiguration('firmendaten_schnellsuche_gesetzt')) {
$this->SetKonfigurationValue('firmendaten_schnellsuche_gesetzt',1);
return;
}
$this->SetKonfigurationValue('firmendaten_schnellsuche_gesetzt',1);
$this->FirmendatenSet('schnellsuche',1);
}
// @refactor In Firmendaten Modul
public function CheckBegrenzungLiveTabelle($cmd, $anz, $time)
{
if(!($anz > 10000 || ($anz > 5000 && $time > 1))) {
return;
}
$spalte = $this->GetBegrenzungLivetabelleColumn($cmd);
if(empty($spalte) || $this->Firmendaten($spalte[0]) || $this->GetKonfiguration('firmendaten_'.$spalte[0].'_gesetzt')) {
return;
}
$this->SetKonfigurationValue('firmendaten_'.$spalte[0].'_gesetzt',1);
$this->FirmendatenSet($spalte[0],1);
}
// @refactor In Firmendaten Modul
public function GetBegrenzungLivetabelleColumn($cmd)
{
switch($cmd)
{
case 'adressetabelle':
return array('begrenzen_adressetabelle','begrenzenanzahl_adressetabelle');
break;
case 'artikeltabelle':
case 'artikeltabellebilder':
case 'kundeartikelpreise':
return array('begrenzen_artikeltabelle','begrenzenanzahl_artikeltabelle');
break;
case 'rechnungen':
case 'rechnungenoffene':
case 'rechnungeninbearbeitung':
case 'auftraege':
case 'auftraegeinbearbeitung':
case 'lieferscheine':
case 'lieferscheineoffene':
case 'gutschriften':
case 'gutschrifteninbearbeitung':
case 'gutschriftenoffene':
return array('begrenzen_belege','begrenzenanzahl_belege');
break;
}
}
// @refactor In Firmendaten Modul
public function BegrenzungLivetabelle($cmd, $limit)
{
$spalte = $this->GetBegrenzungLivetabelleColumn($cmd);
if(empty($spalte) || !$this->Firmendaten($spalte[0])) {
return false;
}
$limit2 = (int)$this->Firmendaten($spalte[1]);
return $limit > $limit2?$limit:$limit2;
}
// @refactor Installer Komponente
function NeueFirmendatenWerteSammeln($aktiv)
{
$this->firmendatenwertesammeln = $aktiv;
if($aktiv) {
return;
}
if(empty($this->firmendatenwertelist) || !is_array($this->firmendatenwertelist)) {
return;
}
$firmendaten_werte = $this->app->DB->SelectArr("SELECT name FROM firmendaten_werte ORDER by name");
$firmendaten = $this->app->DB->SelectArr("SELECT * FROM firmendaten ORDER by id DESC LIMIT 1");
if($firmendaten_werte) {
foreach($firmendaten_werte as $value) {
$firmendatenexistieren[] = $value['name'];
}
}
foreach($this->firmendatenwertelist as $key => $value) {
if(!isset($firmendatenexistieren) || !in_array($value['name'], $firmendatenexistieren)) {
$name = $value['name'];
$typ = $value['typ'];
$typ1 = $value['typ1'];
$typ2 = $value['typ2'];
$wert = $value['wert'];
$default_value = $value['default_value'];
$default_null = $value['default_null'];
$darf_null = $value['darf_null'];
if(isset($firmendaten) && isset($firmendaten[0][$name]))$wert = $firmendaten[0][$name];
$this->app->DB->Insert("INSERT INTO firmendaten_werte (name, typ, typ1, typ2, wert, default_value, default_null, darf_null)
values ('".$this->app->DB->real_escape_string($name)."','".$this->app->DB->real_escape_string($typ)."','".$this->app->DB->real_escape_string($typ1)."','".$this->app->DB->real_escape_string($typ2)."','".$this->app->DB->real_escape_string($wert)."','".$this->app->DB->real_escape_string($default_value)."','".(int)($default_null)."','".(int)($darf_null)."')
");
}
unset($this->firmendatenwertelist[$key]);
}
}
// @refactor Installer Komponente
function FirmendatenVorlage()
{
$this->FirmendatenSet("angebot_header","{ANSCHREIBEN},<br /><br />hiermit bieten wir Ihnen an:");
$this->FirmendatenSet("angebot_footer","{IF}{GUELTIGBIS}{THEN}Das Angebot ist g&uuml;ltig bis zum: {GUELTIGBIS}{ELSE}{ENDIF}<br /><br />{IF}{LIEFERADRESSELANG}{THEN}Ihre Lieferadresse: {LIEFERADRESSELANG}{ELSE}{ENDIF}<br /><br />Dieses Formular wurde maschinell erstellt und ist ohne Unterschrift g&uuml;ltig.");
$this->FirmendatenSet(
'rechnung_header',
'{ANSCHREIBEN},<br /><br />anbei Ihre Rechnung.<br /><br />{IF}{INTERNET}{THEN}Bestellnummer: {INTERNET}<br />{ELSE}{ENDIF}{IF}{TRANSAKTIONSNUMMER}{THEN}Transaktionsnummer: {TRANSAKTIONSNUMMER}<br />{ELSE}{ENDIF}{IF}{USTID}{THEN}Ihre USt-ID: {USTID}<br />{ELSE}{ENDIF}{IF}{LIEFERBEDINGUNG}{THEN}Lieferbedingung: {LIEFERBEDINGUNG}<br />{ELSE}{ENDIF}'
);
$this->FirmendatenSet(
'rechnung_footer',
'{IF}{LIEFERADRESSE}{THEN}<strong>Lieferadresse:</strong><br />{LIEFERADRESSE}{ELSE}{ENDIF}<br />Dieses Formular wurde maschinell erstellt und ist ohne Unterschrift g&uuml;ltig.'
);
$this->FirmendatenSet("lieferschein_header","{ANSCHREIBEN},<br /><br />wir liefern Ihnen:<br /><br />{IF}{TRACKINGNUMMER}{THEN}Trackingnummer/n:{TRACKINGNUMMER}{ELSE}{ENDIF}<br />&nbsp;");
$this->FirmendatenSet("auftrag_header","{ANSCHREIBEN},<br /><br />vielen Dank f&uuml;r Ihren Auftrag.<br /><br />{IF}{LIEFERTERMIN}{THEN}Ihr Wunschliefertermin: {LIEFERTERMIN}{ELSE}{ENDIF} / {IF}{LIEFERWOCHE}{THEN}Lieferwoche: {LIEFERWOCHE}{ELSE}{ENDIF}<br /><br />{IF}{LIEFERBEDINGUNG}{THEN}Lieferbedingung: {LIEFERBEDINGUNG}{ELSE}{ENDIF}");
$this->FirmendatenSet("gutschrift_header","{ANSCHREIBEN},<br /><br />anbei Ihre {ART}:");
$this->FirmendatenSet("bestellung_header","{ANSCHREIBEN},<br /><br />wir bestellen hiermit:<br /><br />Unsere Auftragsnummer: {BESTELLUNGBESTAETIGTABNUMMER}<br /><strong>Lieferadresse: </strong>{LIEFERADRESSELANG}<br /><br /><strong>Bitte liefern Sie bis zum: </strong>{GEWUENSCHTESLIEFERDATUM}<br />&nbsp;");
$this->FirmendatenSet("proformarechnung_header","{IF}{USTID}{THEN}Ihre USt-ID:{USTID}{ELSE}{ENDIF}<br />&nbsp;");
$this->FirmendatenSet("proformarechnung_footer","Dieses Formular wurde maschinell erstellt und ist ohne Unterschrift gültig.");
$this->FirmendatenSet("arbeitsnachweis_header","{ANSCHREIBEN},<br /><br />wir liefern Ihnen:");
$this->FirmendatenSet("provisionsgutschrift_header","{ANSCHREIBEN},<br /><br />,");
$this->FirmendatenSet("lieferschein_footer","Dieses Formular wurde maschinell erstellt und ist ohne Unterschrift gültig.");
$this->FirmendatenSet("auftrag_footer","{IF}{LIEFERADRESSE}{THEN}<strong>Lieferadresse:</strong><br />{LIEFERADRESSE}{ELSE}{ENDIF}<br /><br />{IF}{ABWEICHENDE_RECHNUNGSADRESSE}{THEN}<strong>Abweichende Rechnungsadresse:</strong><br />{ABWEICHENDE_RECHNUNGSADRESSE}{ELSE}{ENDIF}<br /><br />Dieses Formular wurde maschinell erstellt und ist ohne Unterschrift g&uuml;ltig.");
$this->FirmendatenSet("gutschrift_footer","Dieses Formular wurde maschinell erstellt und ist ohne Unterschrift gültig.");
$this->FirmendatenSet("arbeitsnachweis_footer","Dieses Formular wurde maschinell erstellt und ist ohne Unterschrift gültig.");
$this->FirmendatenSet("provisionsgutschrift_footer","Dieses Formular wurde maschinell erstellt und ist ohne Unterschrift gültig.");
$this->FirmendatenSet("eu_lieferung_vermerk","Steuerfrei nach § 4 Nr. 1b i.V.m. § 6 a UStG. Ihre USt-IdNr. {USTID} Land: {LAND}");
$this->FirmendatenSet("export_lieferung_vermerk","Steuerfrei (Drittland) gem. §4 Nr. 1a UStG");
$this->FirmendatenSet("bestellung_footer","Dieses Formular wurde maschinell erstellt und ist ohne Unterschrift gültig.");
}
// @refactor Installer Komponente
function AddNeuenFirmendatenWert($name, $typ, $typ1, $typ2, $wert, $default_value, $default_null, $darf_null)
{
if($name == '' || $typ == '')return false;
if(isset($this->firmendatenwertesammeln) && $this->firmendatenwertesammeln)
{
$this->firmendatenwertelist[] = array('name'=>$name, 'typ'=>$typ,'typ1'=>$typ1,'typ2'=>$typ2,'wert'=>$wert,'default_value'=>$default_value,'default_null'=>$default_null,'darf_null'=>$darf_null);
return;
}
$check = $this->app->DB->Select("SELECT id FROM firmendaten_werte WHERE name = '".$this->app->DB->real_escape_string($name)."' LIMIT 1");
if($check)return false;
$wert_alt = $this->app->DB->Select("SELECT $name FROM firmendaten LIMIT 1");
if(!$this->app->DB->error())
{
$wert = $wert_alt;
}
$this->app->DB->Insert("INSERT INTO firmendaten_werte (name, typ, typ1, typ2, wert, default_value, default_null, darf_null)
values ('".$this->app->DB->real_escape_string($name)."','".$this->app->DB->real_escape_string($typ)."','".$this->app->DB->real_escape_string($typ1)."','".$this->app->DB->real_escape_string($typ2)."','".$this->app->DB->real_escape_string($wert)."','".$this->app->DB->real_escape_string($default_value)."','".(int)($default_null)."','".(int)($darf_null)."')
");
return $this->app->DB->GetInsertID();
}
// @refactor Installer Komponente
function CheckGeschaeftsbriefvorlagen($subjekt,$sprache,$betreff,$text)
{
if($sprache=="") $sprache="deutsch";
if($sprache=="deutsch" || $sprache=="")
$check = $this->app->DB->Select("SELECT id FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND subjekt!='' LIMIT 1");
else if($sprache!="")
$check = $this->app->DB->Select("SELECT id FROM geschaeftsbrief_vorlagen WHERE subjekt='$subjekt' AND subjekt!='' AND sprache='$sprache' LIMIT 1");
if($check <=0)
{
$this->app->DB->Insert("INSERT INTO geschaeftsbrief_vorlagen (sprache, betreff, text, subjekt, projekt, firma) VALUES ('$sprache', '$betreff', '$text', '$subjekt', '0', 1)");
}
}
// START deprecated database upgrade functions
public function ensureDatabaseUpgradeProperty()
{
/* if ($this->app->DatabaseUpgrade === null) {
$this->app->DatabaseUpgrade = new DatabaseUpgrade($this->app);
}*/
}
function CheckTable($table, $pk = 'id')
{
/* $this->ensureDatabaseUpgradeProperty();
$this->app->DatabaseUpgrade->CheckTable($table, $pk);*/
}
function UpdateColumn($column,$type,$table,$default="NOT NULL")
{
/* $this->ensureDatabaseUpgradeProperty();
$this->app->DatabaseUpgrade->UpdateColumn($column,$type,$table,$default);*/
}
public function emptyTableCache()
{
/* $this->ensureDatabaseUpgradeProperty();
$this->app->DatabaseUpgrade->emptyTableCache();*/
}
public function DeleteColumn($column,$table)
{
/* $this->ensureDatabaseUpgradeProperty();
$this->app->DatabaseUpgrade->DeleteColumn($column,$table);*/
}
public function CheckColumn($column,$type,$table,$default="")
{
/* $this->ensureDatabaseUpgradeProperty();
$this->app->DatabaseUpgrade->CheckColumn($column,$type,$table,$default);*/
}
/**
* @param string $table
* @param array $columns
*/
public function dropIndex($table, $columns)
{
/* $this->ensureDatabaseUpgradeProperty();
$this->app->DatabaseUpgrade->dropIndex($table, $columns);*/
}
protected function ChangeFirmendatenToMyIsam()
{
/* $this->ensureDatabaseUpgradeProperty();
$this->app->DatabaseUpgrade->ChangeFirmendatenToMyIsam();*/
}
public function CheckDoubleIndex($table, $indexe)
{
/* $this->ensureDatabaseUpgradeProperty();
return $this->app->DatabaseUpgrade->CheckDoubleIndex($table,$indexe);*/
}
public function CheckFulltextIndex($table, $column)
{
/* $this->ensureDatabaseUpgradeProperty();
return $this->app->DatabaseUpgrade->CheckFulltextIndex($table,$column);*/
}
public function CheckIndex($table, $column, $unique = false)
{
/* $this->ensureDatabaseUpgradeProperty();
return $this->app->DatabaseUpgrade->CheckIndex($table,$column,$unique);*/
}
public function CheckAlterTable($sql, $force = false)
{
/* $this->ensureDatabaseUpgradeProperty();
return $this->app->DatabaseUpgrade->CheckAlterTable($sql,$force);*/
}
// END deprecated database upgrade functions
// @refactor Welcome Modul
function CheckFav($bezeichnung, $url)
{
if($this->app->erp->GetKonfiguration('checkFav'. md5($url))) {
return;
}
$this->app->erp->SetKonfigurationValue('checkFav'. md5($url),1);
$user = $this->app->DB->SelectArr(
"SELECT u.id
FROM `user` u
LEFT JOIN `userrights` ur ON u.id = ur.`user` AND ur.module = 'amazon' AND ur.action = 'list'
WHERE NOT isnull(ur.id) OR u.type = 'admin'"
);
if(empty($user)) {
return;
}
foreach($user as $vu) {
$u = $vu['id'];
$eigenlinks = $this->app->DB->Select("SELECT uk.`value` FROM `userkonfiguration` uk WHERE `name` = 'welcome_links_eigen' AND `user` = '$u' LIMIT 1");
$index = 1;
$check2 = null;
$check3 = null;
if($eigenlinks)
{
for($i = 1; $i <= 8; $i++)
{
$link = $this->app->DB->SelectRow("SELECT uk.`value`, uk.id FROM `userkonfiguration` uk WHERE `name` = 'welcome_linklink".$i."' AND `user` = '$u' LIMIT 1");
if(!$link)
{
$link = array('id'=>0, 'link'=>'');
}
if(stripos($link['value'], $url) !== false)
{
$index = 9;
break;
}
if($link['value'] != '')
{
if($index == $i)$index++;
}else{
$check2 = $link['id'];
$check3 = $this->app->DB->Select("SELECT uk.id FROM `userkonfiguration` uk WHERE `name` = 'welcome_linkname".$i."' AND `user` = '$u' LIMIT 1");
break;
}
}
}else{
$check = $this->app->DB->Select("SELECT id FROM `userkonfiguration` uk WHERE `name` = 'welcome_links_eigen' AND `user` = '$u' LIMIT 1");
if($check)
{
$this->app->DB->Update("UPDATE `userkonfiguration` SET `value` = '1' WHERE id = '$check' LIMIT 1");
}else{
$this->app->DB->Insert("INSERT INTO `userkonfiguration` (`user`, `value`, `name`) VALUES ('$u', '1', 'welcome_links_eigen')");
}
if(!$this->app->DB->Select("SELECT id FROM `userkonfiguration` WHERE `user` = '$u' AND `name` LIKE 'welcome\_linklink_%'"))
{
$index = 2;
$this->app->DB->Insert("INSERT INTO `userkonfiguration` (`user`, `value`, `name`) VALUES ('$u', 'index.php?module=welcome&action=settings', 'welcome_linklink1')");
$this->app->DB->Insert("INSERT INTO `userkonfiguration` (`user`, `value`, `name`) VALUES ('$u', 'Eigene Einstellungen', 'welcome_linkname1')");
}
}
if($index <= 8)
{
if($check2)
{
$this->app->DB->Update("UPDATE `userkonfiguration` SET `value` = '".$this->app->DB->real_escape_string($url)."' WHERE id = '$check2' LIMIT 1");
}else
{
$this->app->DB->Insert("INSERT INTO `userkonfiguration` (`user`, `value`, `name`) VALUES ('$u', '".$this->app->DB->real_escape_string($url)."', 'welcome_linklink".$index."')");
}
if($check3)
{
$this->app->DB->Update("UPDATE `userkonfiguration` SET `value` = '".$this->app->DB->real_escape_string($bezeichnung)."' WHERE id = '$check3' LIMIT 1");
}else{
$this->app->DB->Insert("INSERT INTO `userkonfiguration` (`user`, `value`, `name`) VALUES ('$u', '".$this->app->DB->real_escape_string($bezeichnung)."', 'welcome_linkname".$index."')");
}
}
}
}
/**
* @param string $parameter
* @param string $target
* @param bool $withForm
*/
public function checkActiveCronjob($parameter, $target = 'MESSAGE', $withForm = true)
{
/** @var Prozessstarter $obj */
$obj = $this->app->erp->LoadModul('prozessstarter');
if($obj && method_exists($obj,'checkActiveCronjob')) {
$obj->checkActiveCronjob($parameter, $target, $withForm);
}
}
// @refactor Installer Komponente
/**
* @param string $bezeichnung
* @param string $art
* @param string $periode
* @param string $startzeit
* @param string $typ
* @param string $parameter
* @param int $aktiv
*
* @return bool|int|string|null
*/
public function CheckProzessstarter($bezeichnung,$art='periodisch',$periode='1440',$startzeit='',$typ='cronjob',$parameter='',$aktiv=0)
{
if($parameter === '') {
return false;
}
$check = $this->app->DB->SelectRow(
sprintf(
"SELECT `id`, `recommended_period` FROM `prozessstarter` WHERE `parameter` LIKE '%s' LIMIT 1",
$this->app->DB->real_escape_string($parameter)
)
);
if(!empty($check)) {
if((int)$check['recommended_period'] !== (int)$periode) {
$this->app->DB->Update(
sprintf(
'UPDATE `prozessstarter` SET `recommended_period` = %d WHERE `id` = %d',
$periode, $check['id']
)
);
}
return false;
}
$sql = sprintf(
"INSERT INTO `prozessstarter` (`bezeichnung`,`art`,`periode`,`recommended_period`,
`startzeit`,`typ`,`parameter`,`aktiv`)
VALUES ('%s','%s','%d','%d','%s','%s','%s','%d')",
$this->app->DB->real_escape_string($bezeichnung),
$this->app->DB->real_escape_string($art),
$periode,
$periode,
$this->app->DB->real_escape_string($startzeit),
$this->app->DB->real_escape_string($typ),
$this->app->DB->real_escape_string($parameter),
(int)(bool)$aktiv
);
$this->app->DB->Insert($sql);
return $this->app->DB->GetInsertID();
}
// @refactor Firmendaten Modul
function ArtikelFreifeldBezeichnungen()
{
for($i = 1; $i <= 40; $i++) {
$freifeldbezeichnung = $this->app->erp->Firmendaten('freifeld'.$i);
if($freifeldbezeichnung == '') {
$this->app->Tpl->Set('FREIFELD' . $i . 'BEZEICHNUNG', 'Freifeld '.$i);
continue;
}
$freifeldtyp = $this->app->erp->Firmendaten('freifeld'.$i.'typ');
if($freifeldtyp === 'select') {
$freifeldbezeichnung = explode('|', $freifeldbezeichnung);
$freifeldbezeichnung = trim(reset($freifeldbezeichnung));
}
$this->app->Tpl->Set('FREIFELD' . $i . 'BEZEICHNUNG', $freifeldbezeichnung);
}
}
// @refactor Firmendaten Modul
function ProjektFreifeldBezeichnungen()
{
for($i = 1; $i <= 20; $i++) {
if($this->app->erp->Firmendaten('projektfreifeld'.$i)!='') {
$this->app->Tpl->Set('PROJEKTFREIFELD' . $i . 'BEZEICHNUNG', $this->app->erp->Firmendaten('projektfreifeld' . $i));
}
else {
$this->app->Tpl->Set('PROJEKTFREIFELD' . $i . 'BEZEICHNUNG', "Freifeld $i");
}
}
}
// @refactor DateHelper Komponente
function IstWerktag($datum)
{
if($this->IstFreierTag($datum)) return false;
else return true;
}
// @refactor Arbeitsfreietage Modul
function IstFreierTag($datum) {
$tmp = explode('-',$datum);
$jahr = $tmp[0];
$monat = $tmp[1];
$tag = $tmp[2];
// Parameter in richtiges Format bringen
if(strlen($tag) == 1) {
$tag = "0$tag";
}
if(strlen($monat) == 1) {
$monat = "0$monat";
}
// Wochentag berechnen
$datum = getdate(mktime(0, 0, 0, $monat, $tag, $jahr));
$wochentag = $datum['wday'];
// Prüfen, ob Wochenende
if($wochentag == 0 || $wochentag == 6) {
return true;
}
// Feste Feiertage werden nach dem Schema ddmm eingetragen
$feiertage[] = "0101"; // Neujahrstag
$feiertage[] = "0105"; // Tag der Arbeit
$feiertage[] = "0310"; // Tag der Deutschen Einheit
$feiertage[] = "2512"; // Erster Weihnachtstag
$feiertage[] = "2612"; // Zweiter Weihnachtstag
// Bewegliche Feiertage berechnen
$tage = 60 * 60 * 24;
$ostersonntag = easter_date($jahr);
$feiertage[] = date("dm", $ostersonntag - 2 * $tage); // Karfreitag
$feiertage[] = date("dm", $ostersonntag + 1 * $tage); // Ostermontag
$feiertage[] = date("dm", $ostersonntag + 39 * $tage); // Himmelfahrt
$feiertage[] = date("dm", $ostersonntag + 50 * $tage); // Pfingstmontag
$feiertage[] = date("dm", $ostersonntag + 60 * $tage); // Frohnleichnahm
// Prüfen, ob Feiertag
$code = $tag.$monat;
return in_array($code, $feiertage);
}
// @refactor Firmendaten Modul
function NeueArtikelNummer($artikelart="",$firma="",$projekt="")
{
return $this->GetNextArtikelnummer($artikelart,$firma,$projekt);
}
// @refactor Adapterbox Modul
function GetAdapterboxAPIDisplay($deviceiddest,$ausgabe)
{
// hole baudrate aus einstellungen
$art = "display";
if(!isset($ausgabe[0])) $ausgabe[0] = "";
if(!isset($ausgabe[1])) $ausgabe[1] = "";
// alte zeilen loeschen
$anzahlzeichen = 19;
$ausgabe[0] = str_pad(substr(trim($ausgabe[0]),0,$anzahlzeichen+1), $anzahlzeichen+1, " ", STR_PAD_RIGHT);
$ausgabe[1] = str_pad(substr(trim($ausgabe[1]),0,$anzahlzeichen), $anzahlzeichen, " ", STR_PAD_RIGHT);
$text = implode($ausgabe);
//$ausgabe[0] = "012345678901234567890";
//$job = '<display>'.$disbase64.'</display>';
$job = '<display><text>'.$text.'</text></display>';
$result = $this->AdapterboxAPI($deviceiddest,$art,$job,false);
return unserialize(base64_decode($result));
}
// @refactor Adapterbox Modul
function GetAdapterboxAPIBondrucker($deviceiddest,$bonbase64)
{
// hole baudrate aus einstellungen
$art = "bondrucker";
$job = '<label>'.$bonbase64.'</label>';
$result = $this->AdapterboxAPI($deviceiddest,$art,$job,false);
return unserialize(base64_decode($result));
}
// @refactor Adapterbox Modul
function GetAdapterboxAPIImage($deviceiddest,$width=0,$height=0)
{
//480x360
//800x600
//960x720
// hole baudrate aus einstellungen
$art = "kamera";
$job = '<image><settings width="'.$width.'" height="'.$height.'"></settings></image>';
$result = $this->AdapterboxAPI($deviceiddest,$art,$job,true);
return unserialize(base64_decode($result));
}
// @refactor Adapterbox Modul
function GetAdapterboxAPIRFID($deviceiddest)
{
$art = "metratecrfid";
$job="";
$result = $this->AdapterboxAPI($deviceiddest,$art,$job,true, 3);
if(rand(0,100) == 0)$this->app->DB->Delete("DELETE FROM device_jobs WHERE art = 'metratecrfid' AND zeitstempel < DATE_SUB(now(), INTERVAL 5 MINUTE)");//Hin und wieder alte Einträge entfernen
return $result;
}
// @refactor Adapterbox Modul
function GetAdapterboxAPIRKSVlight($deviceiddest,$parameters)
{
$art = "rksvlight";
$job = '<rksvlight>'.$parameters.'</rksvlight>';
$result = $this->AdapterboxAPI($deviceiddest,$art,$job,true);
return $result;
}
// @refactor Adapterbox Modul
function GetAdapterboxAPIWaage($deviceiddest)
{
$baud = $this->app->DB->Select("SELECT baudrate FROM adapterbox WHERE seriennummer='$deviceiddest' LIMIT 1");
if($baud=="") $baud=1;
$model = $this->app->DB->Select("SELECT model FROM adapterbox WHERE seriennummer='$deviceiddest' LIMIT 1");
if($model=="") $model="marel";
switch($model)
{
case "marel":
$timeout = 2;
$chars = 100;
break;
case "pce":
$timeout = 10;
$chars = 15;
break;
case "sartorius":
$timeout = 20;
$chars = 150;
break;
}
// hole baudrate aus einstellungen
//$baud = 2; // 1 = 4800, 2 = 9600
//$model = "marel";
$art = "waage";
if($model=="sartorius")
$job = '<waage><settings baud="'.$baud.'" chars="'.$chars.'" timeout="'.$timeout.'" parity="1"></settings></waage>';
else
$job = '<waage><settings baud="'.$baud.'" chars="'.$chars.'" timeout="'.$timeout.'"></settings></waage>';
$result = $this->AdapterboxAPI($deviceiddest,$art,$job,true);
// gewicht string entpacken
//$result = base64_decode(urldecode($result));
if($model=="marel")
{
$result = explode("kg",$result);
$last_string = $result[(!empty($result)?count($result):0)-2];
$result = explode(" ",$last_string);
return $result[(!empty($result)?count($result):0)-2];
}
if($model=="sartorius")
{
$matches = array();
$regex = "/N*+([\. 0-9_]*)g/";
preg_match_all($regex, $result, $matches);
return trim($matches[1][0]);
}
if($model=="pce")
{
if (strpos($result, 'kg') !== false) {
// neue PCE-PB N Serie
$result = explode("kg",$result);
$result[0] = str_replace('+','',$result[0]);
$result[0] = str_replace('-','',$result[0]);
return trim($result[0]);
}
//altes modell
$result = explode("Kg",$result);
$last_string = $result[(!empty($result)?count($result):0)-2];
$result = explode(" ",$last_string);
$tmp = $result[(!empty($result)?count($result):0)-2];
preg_match_all("/\d+/",$tmp,$result);
return (int)$result[0][count($result[0])-1]/1000;
}
return $result;
}
// @refactor Payment Komponente
function SendPaypalFromAuftrag($auftrag, $test = false)
{
$konten = $this->app->DB->SelectArr("SELECT * FROM konten WHERE type = 'paypal' AND aktiv = 1");
if(empty($konten) || (!empty($konten)?count($konten):0) != 1) {
return false;
}
$konto = $konten[0]['id'];
$zugangsdaten = $this->app->DB->Select("SELECT liveimport FROM konten WHERE id='$konto' LIMIT 1");
$zugangsdaten = html_entity_decode($zugangsdaten,ENT_QUOTES,"UTF-8");
$zugangsdaten = $this->Config2Array($zugangsdaten);
if(empty($zugangsdaten)) {
return false;
}
if(!isset($zugangsdaten['SECRET']) || !isset($zugangsdaten['CLIENT_ID']) || !isset($zugangsdaten['API_EMAIL'])){
return false;
}
$arr = $this->app->DB->SelectRow("SELECT * FROM auftrag WHERE id = '$auftrag' LIMIT 1");
if(empty($arr)) {
return false;
}
if($arr['zahlungsweise'] !== 'paypal' || !empty($arr['transaktionsnummer']) || empty($arr['email'])) {
return false;
}
if($test) {
return true;
}
$positionen = $this->app->DB->SelectArr(
"SELECT * FROM auftrag_position WHERE auftrag = '$auftrag' ORDER BY sort"
);
if(empty($positionen)) {
return false;
}
if(isset( $zugangsdaten['SANDBOX']) && $zugangsdaten['SANDBOX'])
{
$urltoken = "https://api.sandbox.paypal.com/v1/oauth2/token";
$urlcreateinvoice = 'https://api.sandbox.paypal.com/v1/invoicing/invoices';
} else {
$urltoken = "https://api.paypal.com/v1/oauth2/token";
$urlcreateinvoice = 'https://api.paypal.com/v1/invoicing/invoices';
}
$headers = array(
"Accept: application/json",
"Accept-Language: de_DE",
);
$ch = curl_init();
$clientId = $zugangsdaten['CLIENT_ID'];
$secret = $zugangsdaten['SECRET'];
$email = $zugangsdaten['API_EMAIL'];
if(!$ch) {
return array('error'=>'Falsche Zugangsdaten');
}
curl_setopt($ch, CURLOPT_URL,$urltoken);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERPWD, $clientId.":".$secret);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'grant_type=client_credentials');
$content=curl_exec($ch);
if(empty($content)) {
return array('error'=>'Falsche Zugangsdaten');
}
$json= json_decode($content);
if(!isset($json->access_token)) {
return array('error'=>'Falsche Zugangsdaten');
}
$access_token = $json->access_token;
$data = new stdClass();
$data->number = $arr['belegnr'];
$data->invoice_date = $arr['datum'].' PST';
$data->merchant_info = new stdClass();
$data->merchant_info->email = $email;
$data->merchant_info->business_name = $this->Firmendaten('name');
//$data->merchant_info->phone = new stdClass();
//$data->merchant_info->phone->country_code = "49";
//$data->merchant_info->phone->national_number = "821";
$data->merchant_info->address = new stdClass();
$data->merchant_info->address->line1 = $this->Firmendaten('strasse');
$data->merchant_info->address->city = $this->Firmendaten('ort');
$data->merchant_info->address->state = '-';
$data->merchant_info->address->postal_code = $this->Firmendaten('plz');
$data->merchant_info->address->country_code = $this->Firmendaten('land');
$billing_info = new stdClass();
$billing_info->email = $arr['email'];
$data->billing_info[] = $billing_info;
$data->custom = new stdClass();
$data->custom->label = 'Gesamtsumme';
$data->custom->amount = new stdClass();
$data->custom->amount->value = $arr['gesamtsumme'];
$data->custom->amount->currency = $arr['waehrung']?$arr['waehrung']:'EUR';
$data->note = 'Detailierte Informationen zu einelnen Positionen finden Sie in der Auftragsbestätigung AB'.$arr['belegnr'];
$data->shipping_info = new stdClass();
if(empty($arr['ansprechpartner']))
{
$name = explode(' ',$arr['name'],2);
if((!empty($name)?count($name):0) == 2)
{
$data->shipping_info->first_name = $name[0];
$data->shipping_info->last_name = $name[1];
}else{
$data->shipping_info->last_name = $name[0];
}
}else{
$data->shipping_info->business_name = $arr['name'];
}
$data->shipping_info->address = new stdClass();
$data->shipping_info->address->line1 = $arr['strasse'];
$data->shipping_info->address->city = $arr['ort'];
$data->shipping_info->address->postal_code = $arr['plz'];
$data->shipping_info->address->state = '-';
$data->shipping_info->address->country_code = $arr['land'];
$ch = curl_init();
$headers2 = array(
"Content-Type: application/json",
"Authorization: Bearer ".$access_token
);
curl_setopt($ch, CURLOPT_URL,$urlcreateinvoice);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers2);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$content=curl_exec($ch);
$erg= json_decode($content);
if(isset($erg->id)) {
$this->app->DB->Update("UPDATE auftrag set transaktionsnummer = '".($erg->id)."' WHERE id = '$auftrag' LIMIT 1");
curl_close($ch);
$headers3 = array(
"Content-Type: application/json",
"Authorization: Bearer ".$access_token
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$urlcreateinvoice.'/'.$erg->id.'/send');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers3);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$content=curl_exec($ch);
$getinfo = curl_getinfo($ch);
if($getinfo['http_code'] != '202')
{
return array('error'=>'Email konnte nicht an Absender Versendet werden HTTP-Code: '.$getinfo['http_code'],'ID'=>$erg->id);
}
curl_close($ch);
return array('status'=>'ok','ID'=>$erg->id);
}
if(isset($erg->details))
{
foreach($erg->details as $fehler )
{
$res[] = $fehler->field.' '.$fehler->issue;
}
return array('error'=>'Es sind Fehler aufgetreten: '.implode('<br>',$res));
}
return array('error'=>'Es sind Fehler aufgetreten: '.json_encode($erg));
}
// @refactor Adapterbox Modul
function AdapterboxAPI($deviceiddest,$art,$job,$with_answer = false, $maxseconds = 10)
{
$status = $this->app->DB->Select("SELECT if(TIME_TO_SEC(TIMEDIFF(NOW(),letzteverbindung)) > 10 OR letzteverbindung IS NULL,'disconnected','connected') FROM adapterbox
WHERE seriennummer='$deviceiddest' AND seriennummer!='' LIMIT 1");
// pruefe ob es ein drucker ist
$check_printer = $this->app->DB->Select("SELECT id FROM drucker WHERE adapterboxseriennummer!='' AND adapterboxseriennummer='$deviceiddest' LIMIT 1");
if($check_printer > 0)
{
// drucker auftraege koennen immer angenommen werden
} else {
if($status !='connected') {
return -1;
}
}
$this->app->DB->Insert("INSERT INTO device_jobs (id,zeitstempel,deviceidsource,deviceiddest,job,art) VALUES ('',NOW(),'000000000','$deviceiddest','$job','$art')");
$request_id = $this->app->DB->GetInsertID();
if($with_answer!=true) return;
$nottimeout=0;
while(1)
{
$nottimeout++;
usleep(200000); // millisekunden
// 10 sekunden
if($nottimeout > $maxseconds*5)
{
if($art == 'metratecrfid')
{
$this->app->DB->Delete("DELETE FROM device_jobs WHERE id = '$request_id' LIMIT 1");
}
return "no answer from device (not timeout)";
break;
}
$check_result = $this->app->DB->Select("SELECT id FROM device_jobs WHERE request_id='$request_id' AND request_id>0 LIMIT 1");
if($check_result > 0)
{
$job = $this->app->DB->Select("SELECT job FROM device_jobs WHERE id='$check_result' LIMIT 1");
$this->app->DB->Delete("DELETE FROM device_jobs WHERE id='$check_result' LIMIT 1");
//$job = base64_decode($job); // device_job layer
$job = base64_decode($job); // device_job layer
$job = base64_decode(urldecode($job));
if($art == 'metratecrfid')$this->app->DB->Delete("DELETE FROM device_jobs WHERE id = '$request_id' LIMIT 1");
return $job;
}
}
}
// @refactor Etiketten Modul
function PNG2Etikett($pfad)
{
$image_string = file_get_contents($pfad);
if(mime_content_type($pfad)!="image/png") return array('result'=>0,'message'=>"Falsches Dateiformat! Es wird nur monochrom .png unterstuetzt");
$image = imagecreatefromstring($image_string);
$width = imagesx($image);
$height = imagesy($image);
$colors = array();
for ($y = 0; $y < $height; $y++)
{
for ($x = 0; $x < $width; $x++)
{
$rgb = imagecolorat($image, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
$black = ($r == 0 && $g == 0 && $b == 0);
$colors[$x][$y] = $black;
if($counter <=7)
{
if($black)
$binary .="0";
else
$binary .="1";
}
$counter++;
if($counter >7)
{
$gesamt[] = bindec($binary);
$binary="";
$counter=0;
}
}
}
$image = $gesamt;
//echo "height: $height \r\n";
//echo "width: $width \r\n";
$stream = "";
for($i=0;$i<$width*$height;$i = $i + 32)
{
//if(!isset($image[$i]))$image[$i]=0xFF;
$stream .= pack("C*",$image[$i],$image[$i+1],$image[$i+2],$image[$i+3],$image[$i+4],$image[$i+5],$image[$i+6],$image[$i+7],
$image[$i+8],$image[$i+9],$image[$i+10],$image[$i+11],$image[$i+12],$image[$i+13],$image[$i+14],$image[$i+15],
$image[$i+16],$image[$i+17],$image[$i+18],$image[$i+19],$image[$i+20],$image[$i+21],$image[$i+22],$image[$i+23],
$image[$i+24],$image[$i+25],$image[$i+26],$image[$i+27],$image[$i+28],$image[$i+29],$image[$i+30],$image[$i+31]
);
}
$stream = serialize($stream);
$stream = gzcompress($stream, 9);
$stream = base64_encode($stream);
return array('width'=>$width,'height'=>$height,'stream'=>$stream,'result'=>1);
}
// @refactor Etiketten Modul
function ArtikelStuecklisteDrucken($artikel)
{
$artikel = $this->app->DB->SelectArr("SELECT * FROM stueckliste WHERE stuecklistevonartikel='$artikel'");
if(empty($artikel))
{
return;
}
for($i=0;$i<(!empty($artikel)?count($artikel):0);$i++)
{
$artikelid = $artikel[$i]['artikel'];
$variablen = reset($artikel);
$this->EtikettenDrucker("artikel_klein",1,"artikel",$artikelid,$variablen);
}
}
// @refactor Bondrucker Komponente
function AufgabeBonDrucker($id,$seriennummer)
{
$data = $this->app->DB->SelectRow("SELECT * FROM aufgabe WHERE id='$id' LIMIT 1");
if($data['kunde'] > 0)
{
$kunde = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='".$data['kunde']."' LIMIT 1");
}
if($data['adresse'] > 0)
{
$adresse = $this->app->DB->SelectRow("SELECT * FROM adresse WHERE id='".$data['adresse']."' LIMIT 1");
}
if($data['projekt'] > 0)
{
$projekt = $this->app->DB->SelectRow("SELECT * FROM projekt WHERE id='".$data['projekt']."' LIMIT 1");
}
$printer = new phpprint();
//$printer->pulse();
$printer->newline();
$printer->set_justification(phpprint::JUSTIFY_CENTER);
$printer->qrCode("AUFGABE:$id",phpprint::QR_ECLEVEL_L,6);
$printer->feed(2);
$printer->set_font(phpprint::FONT_A);
$printer->enlargePrint(true);
$printer->set_justification(phpprint::JUSTIFY_LEFT);
if($data['kunde'] > 0)
$printer->text("Kunde: ".$kunde['name']."\n");
else
$printer->text("Allgemeine Aufgabe"."\n");
$printer->newline();
$printer->enlargePrint();
$printer->set_font(phpprint::FONT_C);
$printer->text($data['aufgabe']."\n");
$printer->feed(1);
if($data['beschreibung']!=$data['aufgabe'] && $data['aufgabe']!="")
{
$printer->text("Beschreibung: ".$projekt['abkuerzung']."\n");
$printer->text("------------------------------------------\n");
$printer->text($data['beschreibung']."\n");
$printer->feed(1);
}
$zeitstempel = date('d.m.y H:i:s');
if($data['adresse'] > 0)
$printer->text("Mitarbeiter: ".substr($adresse['name'],0,25)."\n");
if($data['projekt'] > 0)
$printer->text("Projekt: ".$projekt['abkuerzung']."\n");
$printer->text("Gedruckt am: ".$zeitstempel."\n");
$printer->cut();
$bon = base64_encode($printer->str);
$this->app->erp->GetAdapterboxAPIBondrucker($seriennummer,$bon);
}
// @refactor POS Modul
function RKSVSignatur($projekt,$rechnungid=0,$normaltax,$discount1,$discount2,$special,$zero,$type="normal")
{
$obj = $this->app->erp->LoadModul('pos');
if(!empty($obj) && method_exists($obj,'RKSVSignatur')){
return $obj->RKSVSignatur($projekt,$rechnungid,$normaltax,$discount1,$discount2,$special,$zero,$type);
}
}
// @refactor POS Modul
function KommandoRKSV($deviceiddest,$art,$type,$cashbox,$reader,$cardpin,$receipt,$datetime,$normal,$discount1,$discount2,$special,$zero,$salescounter,$siglastreceipt,$aesbase64,&$signature,&$error)
{
$obj = $this->app->erp->LoadModul('pos');
if(!empty($obj) && method_exists($obj,'KommandoRKSV')){
return $obj->KommandoRKSV($deviceiddest,$art,$type,$cashbox,$reader,$cardpin,$receipt,$datetime,$normal,$discount1,$discount2,$special,$zero,$salescounter,$siglastreceipt,$aesbase64,$signature,$error);
}
}
// @refactor EtikettenDrucker Komponente
function EtikettenDrucker($kennung,$anzahl,$tabelle,$id,$variables="",$xml="",$druckercode="",$filenameprefix="",$xmlaspdf=false,$adresse=0,$verwendenals="")
{
if($anzahl<=0){
$anzahl=1;
}
$this->RunHook('erpapi_etikettendrucker', 11, $kennung,$anzahl,$tabelle,$id,$variables,$xml,$druckercode,$filenameprefix,$xmlaspdf,$adresse,$verwendenals);
if($anzahl <= 0){
return;
}
if($druckercode <=0)
{
$druckercode = $this->Firmendaten("standardetikettendrucker");
if($druckercode <=0)
{
$druckercode = $this->app->DB->Select("SELECT id FROM drucker WHERE art=2 LIMIT 1");
}
}
//format
$tmpdata = $this->app->DB->SelectRow("SELECT format,art,anbindung FROM drucker WHERE id='$druckercode' LIMIT 1");
$format = $tmpdata['format'];
if($tmpdata['art']==2 && $tmpdata['anbindung']!="adapterbox")
$checkpdf=1;
else
$checkpdf=0;
if($tmpdata['anbindung']=="spooler") $checkpdf=1;
//$this->LogFile("Drucker $druckercode format $format");
switch($kennung)
{
case "artikel_klein":
switch($format)
{
case "30x15x3":
$xml ='
<label>
<barcode y="1" x="3" size="4" type="1">{NUMMER}</barcode>
<line x="3" y="7" size="2">NR {NUMMER}</line>
<line x="3" y="10" size="2">{NAME_DE}</line>
</label>
';
break;
default: //50x18x3
$xml ='
<label>
<barcode y="1" x="3" size="8" type="2">{NUMMER}</barcode>
<line x="3" y="10" size="4">NR {NUMMER}</line>
<line x="3" y="13" size="4">{NAME_DE}</line>
</label>
';
}
break;
case "lieferschein_position":
switch($format)
{
case "30x15x3":
$xml ='
<label>
<barcode y="1" x="3" size="6" type="2">{NUMMER}</barcode>
<line x="3" y="8" size="3">Artikel-Nr. {NUMMER}</line>
<line x="3" y="11" size="3">{NAME_DE} </line>
<line x="3" y="14" size="3">LS: {BELEGNR} Menge: {MENGE} {LAGER_PLATZ_NAME}</line>
</label>
';
break;
default: //50x18x3
$xml ='
<label>
<barcode y="1" x="3" size="6" type="2">{NUMMER}</barcode>
<line x="3" y="8" size="3">Artikel-Nr. {NUMMER}</line>
<line x="3" y="11" size="3">{NAME_DE}</line>
<line x="3" y="14" size="3">LS: {BELEGNR} Menge: {MENGE} {LAGER_PLATZ_NAME}</line>
</label>
';
}
break;
case "seriennummer":
switch($format)
{
case "30x15x3":
$xml ='
<label>
<barcode y="1" x="3" size="6" type="1">{SERIENNUMMER}</barcode>
<line x="3" y="8" size="3">SRN:{SERIENNUMMER}</line>
</label>
';
break;
default: //50x18x3
$xml ='
<label>
<barcode y="1" x="3" size="8" type="2">{SERIENNUMMER}</barcode>
<line x="3" y="10" size="3">SRN: {SERIENNUMMER}</line>
</label>
';
}
break;
case "dms":
switch($format)
{
case "30x15x3":
$xml ='
<label>
<barcode y="1" x="3" size="6" type="1">{ID}</barcode>
<line x="3" y="8" size="3">DMS: {LABEL} {ID}</line>
</label>
';
break;
default: //50x18x3
$xml ='
<label>
<barcode y="1" x="3" size="8" type="2">{ID}</barcode>
<line x="3" y="10" size="3">DMS: {LABEL} {ID}</line>
</label>
';
}
break;
case "lagerplatz_klein":
switch($format)
{
case "30x15x3":
$xml ='
<label>
<barcode y="1" x="3" size="6" type="1">{ID}</barcode>
<line x="3" y="8" size="3">Lager:{KURZBEZEICHNUNG}</line>
</label>
';
break;
default: //50x18x3
$xml ='
<label>
<barcode y="1" x="3" size="8" type="2">{ID}</barcode>
<line x="3" y="10" size="4">Lager: {KURZBEZEICHNUNG}</line>
</label>
';
}
break;
case "etikettendrucker_einfach":
switch($format)
{
case "30x15x3":
$xml ='
<label>
<line x="3" y="1" size="3">{BEZEICHNUNG1}</line>
<line x="3" y="3" size="3">{BEZEICHNUNG2}</line>
</label>
';
break;
default: //50x18x3
$xml ='
<label>
<line x="3" y="2" size="4">{BEZEICHNUNG1}</line>
<line x="3" y="10" size="4">{BEZEICHNUNG2}</line>
</label>
';
}
break;
case "kommissionieraufkleber":
switch($format)
{
case "30x15x3":
break;
default: //50x18x3
$xml = '<label>
<barcode x="2" y="0" size="8" type="2">{LIEFERSCHEIN}</barcode>
<line x="2" y="8" size="3">---------------------------</line>
<line x="2" y="10" size="4">{IHREBESTELLNUMMER}</line>
<line x="2" y="15" size="1">{FIRMA}</line>
</label>';
}
break;
}
// pruefe ob es ein ueberladendes etikett gibt
$tmpxml = $this->ReadyForPDF($this->app->DB->Select("SELECT xml FROM etiketten WHERE verwendenals='".$kennung."' LIMIT 1"));
if($this->app->Secure->GetGET("module") == 'schneller_wareneingang'){
//Wenn über schnellen Wareneingang gedruckt wird
//Um welchen Artikel handelt es sich?
if($this->app->Secure->GetGET("action") == 'printetikett'){
$etikett_artikelid = $this->app->Secure->GetPOST("lp");
$etikett_tmp = $this->app->DB->Select("SELECT autodrucketikett FROM artikel WHERE id='$etikett_artikelid' LIMIT 1");
}elseif($this->app->Secure->GetGET("action") == 'distriinhaltschnell'){
$etikett_tmp = $this->app->DB->Select("SELECT autodrucketikett FROM artikel WHERE id='$id' LIMIT 1");
}
//Prüfen ob es ein Prioritätsetikett (Eingestellt auf Artikelebene) für Artikel für schnellen Wareneingang gibt
if($etikett_tmp != '0' && $etikett_tmp != ''){
$xml = $this->app->DB->Select("SELECT xml FROM etiketten WHERE id='$etikett_tmp' LIMIT 1");
$tmpxml = '';
}else{
//Prüfen ob es ein Standardetikett für den schnellen Wareneinang gibt
$etikett_tmp = $this->app->erp->GetKonfiguration("schneller_wareneingang_einstellungen_etiketten");
if($etikett_tmp != '0' && $etikett_tmp != ''){
$xml = $this->app->DB->Select("SELECT xml FROM etiketten WHERE id='$etikett_tmp' LIMIT 1");
$tmpxml = '';
}
}
}
if(is_numeric($kennung))
$tmpxml = $this->ReadyForPDF($this->app->DB->Select("SELECT xml FROM etiketten WHERE id='".$kennung."' LIMIT 1"));
else
$kennung = $this->app->DB->Select("SELECT id FROM etiketten WHERE verwendenals='".$kennung."' LIMIT 1");
$manuell = $this->app->DB->Select("SELECT manuell FROM etiketten WHERE id='".$kennung."' LIMIT 1");
// wenn es ein ueberladenes etikett gibt
if($tmpxml!="" && $manuell=="1") {
// standard etiketten werte laden
$xml = $tmpxml;
// wenn manuell dann diese werte
$labelbreite = $this->app->DB->Select("SELECT labelbreite FROM etiketten WHERE id='".$kennung."' LIMIT 1");
$labelhoehe = $this->app->DB->Select("SELECT labelhoehe FROM etiketten WHERE id='".$kennung."' LIMIT 1");
$labelabstand = $this->app->DB->Select("SELECT labelabstand FROM etiketten WHERE id='".$kennung."' LIMIT 1");
$labeloffsetx = $this->app->DB->Select("SELECT labeloffsetx FROM etiketten WHERE id='".$kennung."' LIMIT 1");
$labeloffsety = $this->app->DB->Select("SELECT labeloffsety FROM etiketten WHERE id='".$kennung."' LIMIT 1");
} else {
if($tmpxml!="")
$xml = $tmpxml;
switch($format)
{
case "30x15x3":
$labelbreite = 30;
$labelhoehe = 15;
$labelabstand = 3;
$labeloffsetx=0;
$labeloffsety=0;
break;
case "100x50x5":
$labelbreite = 100;
$labelhoehe = 50;
$labelabstand = 5;
$labeloffsetx=0;
$labeloffsety=0;
break;
default:
// standard etiketten werte laden
$labelbreite = 50;
$labelhoehe = 18;
$labelabstand = 3;
$labeloffsetx=0;
$labeloffsety=16;
}
}
//$labelbreite = 100;
//$labelhoehe = 152;
$xmlconfig = "<settings width=\"$labelbreite\" height=\"$labelhoehe\" distance=\"$labelabstand\" offsetx=\"$labeloffsetx\" offsety=\"$labeloffsety\" />";
$xml = str_replace("<label>","<label>".$xmlconfig,$xml);
switch($tabelle)
{
case "produktion":
$tmp = $this->app->DB->SelectArr("SELECT a.name as kundenname FROM produktion p LEFT JOIN adresse a ON a.id=p.adresse WHERE p.id='$id' LIMIT 1");
break;
case "artikel":
$tmp = $this->app->DB->SelectArr("SELECT *,nummer as artikelnummer, name_de as artikel_name_de FROM artikel WHERE id='$id' 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;
$tmp[0]['projektname'] = $this->app->DB->Select("SELECT name FROM projekt WHERE id='".$projekt."' LIMIT 1");
$tmp[0]['projekt'] = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$projekt."' LIMIT 1");
if($tmp[0]['variante_von'] > 0)
{
$tmp[0]['variante_von'] = $this->app->DB->Select("SELECT nummer FROM artikel WHERE id='".$tmp[0]['variante_von']."' LIMIT 1");
} else {
$tmp[0]['variante_von'] = "";
}
$tmp[0]['verkaufspreisbrutto']=number_format($this->GetVerkaufspreis($id,1)*$steuer,2,',','.');
$tmp[0]['verkaufspreisnetto']=number_format($this->GetVerkaufspreis($id,1),2,',','.');
//standardlagerplatz
$tmp[0]['lager_platz_standard'] = $this->GetArtikelStandardlager($id);
$tmp[0]['lager_platz_name'] = $this->GetArtikelStandardlager($id);
$tmp[0]['lager_platz_id'] = $this->GetArtikelStandardlager($id,true);
$tmp[0]['datum'] = date('d.m.Y');
$tmp[0]['datum_version1'] = date('d.m.y');
$tmp[0]['datum_version2'] = date('d-m-Y');
$tmp[0]['datum_version3'] = date('d-m-y');
$tmp[0]['datum_version4'] = date('d/m/Y');
$tmp[0]['datum_version5'] = date('d/m/y');
$tmp[0]['datum_version6'] = date('y-m-d');
$tmp[0]['datum_version7'] = date('Y-m-d');
$eigenschaften = $this->app->DB->SelectArr("
SELECT
ae.name,
aw.wert
FROM artikeleigenschaften ae LEFT JOIN artikeleigenschaftenwerte aw ON aw.artikeleigenschaften=ae.id WHERE aw.artikel='$id'");
foreach($eigenschaften as $name=>$row)
{
$tmp[0]['eigenschaft:'.$row['name']]=$row['wert'];
$tmp[0]['eigenschaft:'.$row['name'].'_DE'] = $row['wert'];
}
$sprachen = $this->GetSelectSprachenListe(true);
preg_match_all('/{[\w\s_!äöüÄÖÜß:!?]*_(\w\w)}/', $xml, $alleSprachenImEtikett);
$beschriftungSprache = $this->beschriftung_sprache;
if($beschriftungSprache === 'franzoesisch'){
$beschriftungSprache = 'französisch';
}
if($beschriftungSprache === 'hollaendisch'){
$beschriftungSprache = 'holländisch';
}
$sprachen = array_change_key_case($sprachen, CASE_LOWER);
if(array_key_exists($beschriftungSprache, $sprachen)){
$sprache = $sprachen[$beschriftungSprache];
}else{
$sprache = strtoupper($beschriftungSprache);
}
$tmp[0]['sprache'] = $sprache;
$alleSprachenImEtikett[1][] = $sprache;
$etikettEigSprachen = '';
$etikettFSprachen = '';
if(!empty($alleSprachenImEtikett)){
$alleSprachenImEtikett = array_flip(array_flip($alleSprachenImEtikett[1]));
$etikettEigSprachen = implode("' OR language_to = '", $alleSprachenImEtikett);
$etikettEigSprachen = " AND (language_to = '".$etikettEigSprachen."')";
$etikettFSprachen = implode("' OR sprache = '", $alleSprachenImEtikett);
$etikettFSprachen = " AND (sprache = '".$etikettFSprachen."')";
}
$eigenschaftenUebersetzungen = $this->app->DB->SelectArr("SELECT language_to, property_from, property_value_from, property_to, property_value_to
FROM article_property_translation
WHERE article_id = '$id' $etikettEigSprachen
ORDER BY shop_id DESC");
foreach($eigenschaftenUebersetzungen as $name=>$row){
if($sprache == $row['language_to']){
$tmp[0]['eigenschaft:'.$row['property_from']] = $row['property_value_to'];
}
$tmp[0]['eigenschaft:'.$row['property_from'].'_'.$row['language_to']] = $row['property_value_to'];
}
$freifelderUebersetzungen = $this->app->DB->SelectArr("SELECT sprache, nummer, wert
FROM artikel_freifelder
WHERE artikel = '$id' $etikettFSprachen");
for($i=1;$i<=40;$i++){
$tmp[0]['freifeld'.$i.'_DE'] = $tmp[0]['freifeld'.$i];
}
foreach($freifelderUebersetzungen as $name=>$row){
if($sprache == $row['sprache']){
$tmp[0]['freifeld'.$row['nummer']] = $row['wert'];
}
$tmp[0]['freifeld'.$row['nummer'].'_'.$row['sprache']] = $row['wert'];
}
$artikelNameUebersetzungen = $this->app->DB->SelectArr("SELECT sprache, name FROM artikel_texte WHERE artikel = '$id' $etikettFSprachen");
foreach($artikelNameUebersetzungen as $name=>$row){
if($sprache == $row['sprache']){
$tmp[0]['artikel_name'] = $row['name'];
}
$tmp[0]['artikel_name'.'_'.$row['sprache']] = $row['name'];
}
$artikelbild = $this->GetEtikettenbild($id,true);
if($artikelbild > 0)
{
$tmp[0]['etikettenbild'] = $this->GetDateiPfad($artikelbild);
}
break;
case "lager_platz":
$tmp = $this->app->DB->SelectArr("SELECT *,id as lager_platz_id, kurzbezeichnung as lager_platz_name FROM lager_platz WHERE id='$id' LIMIT 1");
$tmp[0]['id'] = str_pad($tmp[0]['id'], 7, '0', STR_PAD_LEFT);
break;
}
if(!empty($tmp))
{
foreach($tmp[0] as $key=>$value)
{
$value = $this->UmlauteEntfernen($value);
$xml = str_replace("{".strtoupper($key)."}",$value,$xml);
}
}
if($variables['datum']=="") $variables['datum']=date('d.m.Y');
if(!empty($variables))
{
foreach($variables as $key=>$value)
{
$value = $this->UmlauteEntfernen($value);
$xml = str_replace("{".strtoupper($key)."}",$value,$xml);
}
}
// y to z wenn Kein PDF -> also nur bei EPL Drucker - 09.06.2019 BS heute auf 0 gestellt bei deutschen adapterboxen eventuell
if(0)//$checkpdf!="1")
{
$from = array('\-','[y]','[z]','[Y]','[Z]','SIGNCET','SIGNEPSI','SIGNGCET','SIGNGEPSI');
$to = array('/','SIGNCET','SIGNEPSI','SIGNGCET','SIGNGEPSI','z','y','Z','Y');
for($i_from=0;$i_from<(!empty($from)?count($from):0);$i_from++)
{
$do = true;
$i = 0;
$sign_from = $from[$i_from];
$sign_to = $to[$i_from];
while($do && preg_match_all("/(.*)<barcode(.*)>(.*)$sign_from(.*)<\/barcode>(.*)/",$xml,$erg))
{
$i++;
if($i > 10)$do = false;//Endlosschleife bei Fehler verhindern
$xml = preg_replace("/(.*)<barcode(.*)>(.*)$sign_from(.*)<\/barcode>(.*)/", "$1<barcode$2>$3".$sign_to."$4</barcode>$5", $xml);
}
}
}
if (strpos($xml, 'multiline') !== false) {
$xml = "<label>".$this->ExtractMultiLine($xml)."</label>";
}
//Remove Text Between Parentheses PHP
if(!empty($tabelle) && !empty($id) && strpos($xml,'{') !== false) {
$xml = $this->ParseUserVars($tabelle, $id, $xml, false);
}
$xml = $this->ParseIfVars($xml, true);
$xml = preg_replace('/\{([^{}]*+|(?R))*\}\s*/', '', $xml);
// check ob drucker pdf oder epl spricht
if($checkpdf==1 || $xmlaspdf)
{
if(empty($xml)) {
return;
}
if(class_exists('EtikettenPDFCustom'))
{
$pdf = new EtikettenPDFCustom($this->app,$projekt);
}else{
$pdf = new EtikettenPDF($this->app,$projekt);
}
for($i=0;$i<$anzahl;$i++)
{
$pdf->SetXML($xml);
}
if($befehl=="")$befehl=sys_get_temp_dir();
if($filenameprefix!="")$filenameprefix=$filenameprefix."_"; else $filenameprefix="";
$tmp = tempnam($befehl,$filenameprefix."pdfetikett");
$pdf->Output($tmp,'F');
$newfilename=$tmp.$i.".pdf";
rename($tmp,$newfilename);
if($xmlaspdf && $xmlaspdf != 'D') return $newfilename;
else $this->app->printer->Drucken($druckercode,$newfilename,"",1);
} else {
$this->app->printer->Drucken($druckercode,$xml,"",$anzahl);
}
}
// @refactor EtikettenDrucker Komponente
function ExtractMultiLine($xml)
{
$xml = @simplexml_load_string($xml);
$newxml = '';
if(empty($xml) || !method_exists($xml,'children')) {
return '<line x="1" y="1" size="3">XML-Fehler</line>';
}
foreach($xml->children() as $tag=>$tagcontent)
{
switch($tag)
{
case "multiline":
$wrap = (int)$tagcontent->attributes()->wrap;
if($wrap <=0) return $line;
$wrapheight = (int)$tagcontent->attributes()->wrapheight;
$x = (int)$tagcontent->attributes()->x;
$y = (int)$tagcontent->attributes()->y;
$size = (int)$tagcontent->attributes()->size;
$content = (String)$tagcontent[0];
$tmp = explode("\n",wordwrap($content,$wrap));
$ctmp = (!empty($tmp)?count($tmp):0);
for($i=0;$i<$ctmp;$i++)
{
$newxml .= '<line x="'.$x.'" y="'.$y.'" size="'.$size.'">'.$tmp[$i].'</line>';
$y = $y + $wrapheight;
}
break;
default:
$newxml .= $tagcontent->asXML();
}
}
return $newxml;
}
// @refactor Lager Modul
function ArtikelLagerInfo($artikel)
{
$obj = $this->LoadModul('artikel');
if(!empty($obj) && method_exists($obj, 'ArtikelLagerInfo'))
{
return $obj->ArtikelLagerInfo($artikel);
}
}
function ArtikelInventursperre($datum_be,$datum_ab,$simulate=false)
{
/** @var Inventur $obj */
$obj = $this->LoadModul('inventur');
if(!empty($obj) && method_exists($obj, 'ArtikelInventursperre'))
{
$obj->ArtikelInventursperre($datum_be,$datum_ab,$simulate);
}
}
// @refactor Formater Komponente
//Formatiert eine Dezimal Zahl fuer CSV Ausgabe automatisch
function ParseDecimalForCSV($value)
{
// alle zahlen werte mit punkt zu komma
$checkvalue = str_replace('.','',$value);
if(is_numeric($checkvalue) && count(explode('.',$value))<=2)
{
$value = str_replace('.',',',$value);
}
return $value;
}
// @refactor Formater Komponente
function MengeFormat($menge)
{
if($menge<=0) return "";
else if($menge == round($menge)) return round($menge);
else return number_format($menge,2, '.', '');
}
// @refactor Formater Komponente
function LimitChar($string,$length,$minword=3)
{
if(strlen($string) > $length) {
$string = substr($string,0,$length)."...";
$string_ende = strrchr($string, " ");
$string = str_replace($string_ende," ...", $string);
}
return $string;
}
// @refactor Formater Komponente
function LimitWord($word,$count,$sign="...")
{
$length = strlen($word);
$parts= explode("\n", wordwrap($word, $count, "\n"));
$word = $parts[0];
if(strlen($word) < $length)
$word.=$sign;
return $word;
}
// @refactor Hook Komponente
/**
* @param string $name
* @param int $parametercount
* @param bool|int $aktiv
* @param bool $new
*
* @return array
*/
public function GenerateHook($name, $parametercount, $aktiv, $new = false)
{
if(empty($name)) {
return [];
}
$checkarr = $this->app->DB->SelectRow(
"SELECT h.id, h.parametercount, h.aktiv FROM `hook` AS `h` WHERE h.name = '$name' LIMIT 1"
);
$aktiv = (int)$aktiv;
if($checkarr && $new) {
if($parametercount === null) {
return $checkarr;
}
$parametercount = (int)$parametercount;
if($parametercount != $checkarr['parametercount']) {
$this->app->DB->Update(
"UPDATE `hook`
SET `parametercount` = '$parametercount'
WHERE `id` = '".$checkarr['id']."' LIMIT 1"
);
if($this->app->DB->affected_rows() > 0) {
$checkarr['parametercount'] = $parametercount;
}
}
return $checkarr;
}
if($checkarr) {
$check = (int)$checkarr['id'];
if($checkarr['aktiv'] != $aktiv) {
$this->app->DB->Update(
"UPDATE `hook` SET `aktiv` = '$aktiv' WHERE `id` = '$check'"
);
if($this->app->DB->affected_rows() > 0){
$checkarr['aktiv'] = $aktiv;
}
}
if($checkarr['parametercount'] != $parametercount) {
$this->app->DB->Update(
"UPDATE `hook` SET `parametercount` = '$parametercount' WHERE `id` = '$check'"
);
if($this->app->DB->affected_rows() > 0) {
$checkarr['parametercount'] = $parametercount;
}
}
return $checkarr;
}
$this->app->DB->Insert(
"INSERT INTO `hook` (`name`, `aktiv`, `parametercount`) VALUES ('$name','$aktiv','$parametercount')"
);
$id = (int)$this->app->DB->GetInsertID();
if($id > 0) {
return ['id'=>$id, 'parametercount'=>$parametercount, 'name' => $name,'aktiv' => $aktiv];
}
$max = 1+(int)$this->app->DB->Select("SELECT MAX(h.id) FROM `hook` AS `h`");
$this->app->DB->Update(
"UPDATE `hook` SET `id` = '$max' WHERE `id` = 0 AND `name` = '$name' AND `aktiv` = '$aktiv' AND `parametercount` = '$parametercount' LIMIT 1");
if($this->app->DB->affected_rows() > 0) {
return ['id'=>$max, 'parametercount'=>$parametercount, 'name' => $name,'aktiv' => $aktiv];
}
return [];
}
// @refactor Hook Komponente
/**
* @param string $module
* @param int $aktiv
* @param bool $new
*
* @return array
*/
public function GenerateMenuHook($module, $aktiv = 1, $new = false)
{
if(empty($module)) {
return [];
}
$checkarr = $this->app->DB->SelectRow(
"SELECT hm.id, hm.aktiv, hm.module FROM `hook_menu` AS `hm` WHERE hm.module = '$module' LIMIT 1"
);
if($checkarr && $new) {
return $checkarr;
}
if($checkarr) {
$check = $checkarr['id'];
if($checkarr['aktiv'] != $aktiv) {
$this->app->DB->Update("UPDATE `hook_menu` SET `aktiv` = '$aktiv' WHERE `id` = '$check'");
if($this->app->DB->affected_rows() > 0) {
$checkArr['aktiv'] = $aktiv;
}
}
return $checkarr;
}
$this->app->DB->Insert("INSERT INTO `hook_menu` (`module`, `aktiv`) VALUES ('$module','$aktiv')");
$id = (int)$this->app->DB->GetInsertID();
if($id > 0) {
return ['id' => $id, 'aktiv' => $aktiv, 'module' => $module];
}
$max = 1+(int)$this->app->DB->Select("SELECT MAX(hm.id) FROM `hook_menu` AS `hm`");
$this->app->DB->Update("UPDATE `hook_menu` SET `id` = '$max' WHERE `id` = 0 AND `module` = '$module' LIMIT 1");
if($this->app->DB->affected_rows() > 0) {
return ['id' => $max, 'aktiv' => $aktiv, 'module' => $module];
}
return [];
}
// @refactor Hook Komponente
public function RegisterHook($name, $callmodule, $funktion, $aktiv = 1, $new = false, $position = null, $moduleParameter = 0)
{
$alias = $this->getHookByAlias($name);
if(!empty($alias)) {
$name = $alias['name'];
}
$hookArr = $this->GenerateHook($name, null ,1, true);
if(empty($hookArr)) {
$hook = $this->app->DB->Select(
sprintf("SELECT h.id FROM `hook` AS `h` WHERE h.name = '%s' LIMIT 1", $name)
);
}
else {
$hook = $hookArr['id'];
}
if(empty($hook)) {
return false;
}
$check = $this->app->DB->Select(
sprintf(
"SELECT hr.id FROM `hook_register` AS `hr` WHERE hr.hook = %d AND hr.module = '%s' AND hr.module_parameter = %d LIMIT 1",
(int)$hook, $callmodule, (int)$moduleParameter
)
);
if($check && $new) {
return false;
}
if($check) {
$this->app->DB->Update(
sprintf(
"UPDATE `hook_register` SET `aktiv` = %d, `function` = '%s' WHERE `id` = %d LIMIT 1",
$aktiv, $funktion, $check
)
);
if($position !== null) {
$this->app->DB->Update(
sprintf(
'UPDATE `hook_register` SET `position` = %d WHERE `id` = %d LIMIT 1',
(int)$position, $check
)
);
}
return true;
}
if($position === null) {
$position = 1+(int)$this->app->DB->Select(
sprintf('SELECT MAX(hr.position) FROM `hook_register` AS `hr` WHERE hr.hook = %d', $hook)
);
}
$this->app->DB->Insert(
sprintf("INSERT INTO `hook_register` (`hook`, `module`, `function`, `aktiv`, `position`, `module_parameter`)
VALUES (%d,'%s','%s',%d,%d,%d)",
$hook, $callmodule, $funktion, (int)$aktiv, (int)$position, (int)$moduleParameter
)
);
return $this->app->DB->GetInsertID() > 0;
}
// @refactor Hook Komponente
public function RegisterNavigationAlternative($first, $sec, $module, $action, $aktiv = 1,$prio = 0, $force = false)
{
$check = $this->app->DB->Select("SELECT id FROM navigation_alternative WHERE module = '$module' AND action = '$action' AND first = '$first' AND sec = '$sec' LIMIT 1");
if($check && !$force) {
return;
}
if($check) {
$this->app->DB->Update("UPDATE navigation_alternative SET aktiv = '$aktiv', prio = '$prio' WHERE id = '$check' LIMIT 1");
return;
}
$this->app->DB->Insert("INSERT INTO navigation_alternative (module, action,first, sec, aktiv, prio) values ('$module', '$action', '$first', '$sec','$aktiv', '$prio')");
}
// @refactor Hook Komponente
/**
* @param string $hookname
* @param mixed $callmodule
*/
public function RemoveMenuHook($hookname, $callmodule)
{
if(empty($callmodule) || empty($hookname)) {
return;
}
if(is_string($callmodule)) {
$callerclass = 'String';
}
else {
$callerclass = get_class($callmodule);
}
if($callerclass && $callerclass !== 'String') {
$callmodule = strtolower(str_replace('Custom','',$callerclass));
}
if(empty($callmodule)) {
return;
}
$hook_menuarr = $this->app->DB->SelectRow("SELECT hm.id FROM `hook_menu` WHERE hm.module = '$hookname' LIMIT 1");
if(empty($hook_menuarr)) {
return;
}
$hook_menu = $hook_menuarr['id'];
$this->app->DB->Update(
"UPDATE `hook_menu_register` SET `aktiv` = 0 WHERE `hook_menu` = '$hook_menu' AND `module` = '$callmodule'"
);
}
// @refactor Hook Komponente
/**
* @param string $hookname
* @param string $funktion
* @param string $callmodule
* @param null|int $aktiv
* @param null|int $position
*
* @return int
*/
public function RegisterMenuHook($hookname, $funktion, $callmodule, $aktiv = null, $position = null )
{
$callerclass = get_class($callmodule);
if($callerclass && $callerclass !== 'String') {
$callmodule = strtolower(str_replace('Custom','',$callerclass));
}
if(!$callmodule) {
return 0;
}
if(empty($hookname)) {
return 0;
}
$hook_menuarr = $this->app->DB->SelectRow("SELECT hm.id FROM `hook_menu` AS `hm` WHERE hm.module = '$hookname' LIMIT 1");
if(empty($hook_menuarr)) {
$hook_menuarr = $this->GenerateMenuHook($hookname, 1, true);
}
if(empty($hook_menuarr)) {
return false;
}
$hook_menu = $hook_menuarr['id'];
$checkarr = $this->app->DB->SelectRow(
"SELECT hmr.* FROM `hook_menu_register` AS `hmr` WHERE hmr.hook_menu = '$hook_menu' AND hmr.module = '$callmodule' LIMIT 1"
);
if($checkarr) {
$check = (int)$checkarr['id'];
if($aktiv === null) {
return 0;
}
if($checkarr['aktiv'] != $aktiv || $checkarr['funktion'] != $funktion) {
$this->app->DB->Update(
"UPDATE `hook_menu_register` SET `aktiv` = '$aktiv', `funktion` = '$funktion' WHERE `id` = '$check' LIMIT 1"
);
}
if($position !== null && $checkarr['position'] != $position) {
$this->app->DB->Update("UPDATE `hook_menu_register` SET `position` = '$position' WHERE `id` = '$check' LIMIT 1");
}
return $check;
}
if($aktiv === null) {
$aktiv = 1;
}
$position = 1+(int)$this->app->DB->Select(
"SELECT MAX(hmr.position) FROM `hook_menu_register` AS `hmr` WHERE hmr.hook_menu = '$hook_menu'"
);
$this->app->DB->Insert(
"INSERT INTO `hook_menu_register` (`hook_menu`, `module`, `funktion`, `aktiv`, `position`)
values ('$hook_menu','$callmodule','$funktion','$aktiv','$position')"
);
return (int)$this->app->DB->GetInsertID();
}
// @refactor Hook Komponente
/**
* @param string $name
*/
public function RemoveHook($name)
{
$this->app->DB->Delete(
sprintf(
"DELETE `h`, `hr`
FROM `hook` AS `h`
LEFT JOIN `hook_register` AS `hr` ON h.id = hr.hook
WHERE h.name = '%s'",
$this->app->DB->real_escape_string($name)
)
);
}
/**
* @param string $hookName
* @param string $module
* @param string $callback
*/
public function removeHookRegister($hookName, $module, $callback)
{
if(empty($hookName) || empty($module) || empty($callback)) {
return;
}
$hook = $this->app->DB->Select(
sprintf(
"SELECT h.id FROM `hook` AS `h` WHERE h.name = '%s' OR h.alias = '%s' LIMIT 1",
$this->app->DB->real_escape_string($hookName),
$this->app->DB->real_escape_string($hookName)
)
);
if(empty($hook)) {
return;
}
$this->app->DB->Delete(
sprintf(
"DELETE FROM `hook_register` WHERE `hook` = %d AND `module` = '%s' AND `function` = '%s'",
$hook,
$this->app->DB->real_escape_string($module),
$this->app->DB->real_escape_string($callback)
)
);
}
/**
* @param string $alias
*
* @return array|null
*/
public function getHookByAlias($alias)
{
if(empty($alias)) {
return null;
}
return $this->app->DB->SelectRow(
sprintf(
"SELECT h.* FROM `hook` AS `h` WHERE h.alias = '%s' AND h.name <> ''",
$this->app->DB->real_escape_string($alias)
)
);
}
/**
* @param string $name
* @param string $alias
*/
public function addAliasToHook($name, $alias)
{
if(empty($name) || empty($alias) || $name === $alias) {
return;
}
$hook = $this->app->DB->SelectRow(
sprintf(
"SELECT h.id, h.name, h.alias
FROM `hook` AS `h`
WHERE h.name = '%s' OR (h.name = '%s' AND h.alias = '%s') ",
$this->app->DB->real_escape_string($alias),
$this->app->DB->real_escape_string($name),
$this->app->DB->real_escape_string($alias)
)
);
if(!empty($hook)) {
if($hook['name'] === $name && $hook['alias'] === $alias) {
return;
}
if($hook['name'] === $alias && $hook['alias'] === $name) {
$this->app->DB->Update(
sprintf(
"UPDATE `hook` SET `name` = '%s' AND `alias` = '%s' WHERE `id` = %d",
$this->app->DB->real_escape_string($alias),
$this->app->DB->real_escape_string($name),
$hook['id']
)
);
return;
}
if(empty($hook['alias']) && $hook['name'] === $alias) {
if(
!$this->app->DB->Select(
sprintf(
"SELECT COUNT(h.*) FROM `hook` AS `h` WHERE h.id <> %d AND (h.name = '%s' OR h.alias = %s)",
$this->app->DB->real_escape_string($name),
$this->app->DB->real_escape_string($name),
$hook['id']
)
)
) {
$this->app->DB->Update(
sprintf(
"UPDATE `hook`
SET `alias` = '%s', `name` = '%s'
WHERE `id` = %d
LIMIT 1",
$this->app->DB->real_escape_string($alias),
$this->app->DB->real_escape_string($name),
$hook['id']
)
);
}
}
return;
}
$hooks = $this->app->DB->SelectArr(
sprintf(
"SELECT h.*
FROM `hook` AS `h`
WHERE (h.name = '%s' OR h.name = '%s' OR h.name = '%s' OR h.name = '%s')
ORDER BY h.name = '%s' DESC",
$this->app->DB->real_escape_string($name),
$this->app->DB->real_escape_string($alias),
$this->app->DB->real_escape_string($name),
$this->app->DB->real_escape_string($alias),
$this->app->DB->real_escape_string($name)
)
);
if(empty($hooks)){
$this->app->DB->Insert(
sprintf(
"INSERT INTO `hook` (`name`, `alias`, `aktiv`, `parametercount`)
values ('%s','%s',1, 0)",
$this->app->DB->real_escape_string($name),
$this->app->DB->real_escape_string($alias)
)
);
return;
}
if($hooks[0]['alias'] === $alias && $hooks[0]['name'] === $name) {
return;
}
if($hooks[0]['name'] === $name) {
$this->app->DB->Update(
sprintf(
"UPDATE `hook` SET `alias` = '%s' WHERE `id` = %d LIMIT 1",
$this->app->DB->real_escape_string($alias), $hooks[0]['id']
)
);
return;
}
if(((!empty($hooks)?count($hooks):0) === 1 || $hooks[0]['name'] === $alias) && $hooks[0]['alias'] === $name) {
$this->app->DB->Update(
sprintf(
"UPDATE `hook`
SET `alias` = '%s', `name` = '%s'
WHERE `id` = %d
LIMIT 1",
$this->app->DB->real_escape_string($alias),
$this->app->DB->real_escape_string($name),
$hooks[0]['id']
)
);
}
}
// @refactor Hook Komponente
public function RunHook($name, $parametercount = 0, &$parameter1 = null, &$parameter2 = null,&$parameter3 = null,&$parameter4 = null,&$parameter5 = null,&$parameter6 = null,&$parameter7 = null,&$parameter8 = null,&$parameter9 = null,&$parameter10 = null,&$parameter11 = null,&$parameter12 = null,&$parameter13 = null)
{
$checkAlias = $this->getHookByAlias($name);
if(!empty($checkAlias)) {
$name = $checkAlias['name'];
}
$check = $this->GenerateHook($name, $parametercount, 1, true);
if(empty($check) || !isset($check['id']) || !isset($check['aktiv']) || !isset($check['parametercount'])) {
$check = $this->app->DB->SelectRow("SELECT id, aktiv, parametercount FROM hook WHERE name = '$name' LIMIT 1");
}
if(!$check || !$check['aktiv']) {
return;
}
$hook = $check['id'];
$hooks = $this->app->DB->SelectArr(
sprintf(
"SELECT hr.module, hr.function, hr.module_parameter
FROM `hook_register` AS `hr`
WHERE hr.hook = %d AND hr.aktiv = 1 AND hr.module <> '' AND hr.function <> ''
GROUP BY hr.module, hr.function, hr.module_parameter
ORDER BY MIN(hr.position)",
$hook
)
);
if(empty($hooks)) {
return;
}
/** @var Appstore $appstore */
$appstore = $this->app->loadModule('appstore');
foreach($hooks as $hook) {
if(!empty($appstore) && method_exists($appstore, 'isModuleDeactivated') && $appstore->isModuleDeactivated($hook['module'])) {
continue;
}
$obj = null;
$modulelower = strtolower($hook['module']);
$classname = ucfirst($hook['module']);
$funktion = $hook['function'];
$ok = false;
if(file_exists(dirname(__DIR__).'/pages/'.$hook['module'].'.php') &&
!empty($hook['module']) && !$this->ModulVorhanden($hook['module'])
) {
continue;
}
if(!class_exists($classname) && !class_exists($classname.'_custom'))
{
if(file_exists(dirname(__DIR__).'/pages/'.$hook['module'].'_custom.php'))
{
include dirname(__DIR__).'/pages/'.$hook['module'].'_custom.php';
$ok = true;
}elseif(file_exists(dirname(__DIR__).'/pages/'.$modulelower.'_custom.php'))
{
include dirname(__DIR__).'/pages/'.$modulelower.'_custom.php';
$ok = true;
}elseif(file_exists(dirname(__DIR__).'/pages/'.$hook['module'].'.php')){
include dirname(__DIR__).'/pages/'.$hook['module'].'.php';
$ok = true;
}elseif(file_exists(dirname(__DIR__).'/pages/'.$modulelower.'.php')){
include dirname(__DIR__).'/pages/'.$modulelower.'.php';
$ok = true;
}
}else {
$ok = true;
}
$isTransfer = strpos($hook['module'],'Transfer') === 0;
$checkUebertragungen = $isTransfer && $this->app->erp->ModulVorhanden('uebertragungen');
if($isTransfer && !$checkUebertragungen) {
$ok = false;
continue;
}
if($isTransfer && empty($hook['module_parameter'])) {
$ok = false;
continue;
}
if($isTransfer && !empty($hook['module_parameter'])) {
if(!$this->ModulVorhanden($hook['module'])) {
continue;
}
/** @var Uebertragungen $subObj */
$subObj = $this->app->erp->LoadModul('uebertragungen');
if(!empty($subObj)) {
$obj = $subObj->LoadTransferModul($hook['module'], $hook['module_parameter']);
if(!empty($obj)) {
$ok = true;
$className = $hook['module'];
} else {
unset($subObj);
continue;
}
}
}
elseif(strpos($hook['module'],'Printer') === 0 && !empty($hook['module_parameter'])) {
if(!$this->ModulVorhanden($hook['module'])) {
continue;
}
/** @var Drucker $subObj */
$subObj = $this->app->erp->LoadModul('drucker');
if(!empty($subObj)) {
$obj = $subObj->loadPrinterModul($hook['module'], $hook['module_parameter']);
if(!empty($obj)) {
$ok = true;
$className = $hook['module'];
} else {
unset($subObj);
continue;
}
}
}
if(!$ok) {
continue;
}
$classname2 = explode('_', $classname);
foreach($classname2 as $k => $v) {
$classname2[$k] = ucfirst($v);
}
$classname2 = implode('_', $classname2);
if(!class_exists($classname.'Custom') && class_exists($classname2.'Custom')) {
$classname = $classname2;
}
if(!class_exists($classname) && class_exists($classname2)) {
$classname = $classname2;
}
if(!empty($obj) || class_exists($classname.'Custom'))
{
$classname = $classname.'Custom';
if(empty($obj)) {
$obj = new $classname($this->app, true);
}
if(method_exists($obj, $funktion))
{
switch($parametercount)
{
case '0':
$obj->$funktion();
break;
case '1':
$obj->$funktion($parameter1);
break;
case '2':
$obj->$funktion($parameter1,$parameter2);
break;
case '3':
$obj->$funktion($parameter1,$parameter2,$parameter3);
break;
case '4':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4);
break;
case '5':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5);
break;
case '6':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6);
break;
case '7':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7);
break;
case '8':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7,$parameter8);
break;
case '9':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7,$parameter8,$parameter9);
break;
case '10':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7,$parameter8,$parameter9,$parameter10);
break;
case '11':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7,$parameter8,$parameter9,$parameter10,$parameter11);
break;
case '12':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7,$parameter8,$parameter9,$parameter10,$parameter11,$parameter12);
break;
case '13':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7,$parameter8,$parameter9,$parameter10,$parameter11,$parameter12,$parameter13);
break;
}
}
}elseif(class_exists($classname))
{
if(empty($obj)){
$obj = new $classname($this->app, true);
}
if(method_exists($obj, $funktion))
{
switch($parametercount)
{
case '0':
$obj->$funktion();
break;
case '1':
$obj->$funktion($parameter1);
break;
case '2':
$obj->$funktion($parameter1,$parameter2);
break;
case '3':
$obj->$funktion($parameter1,$parameter2,$parameter3);
break;
case '4':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4);
break;
case '5':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5);
break;
case '6':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6);
break;
case '7':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7);
break;
case '8':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7,$parameter8);
break;
case '9':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7,$parameter8,$parameter9);
break;
case '10':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7,$parameter8,$parameter9,$parameter10);
break;
case '11':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7,$parameter8,$parameter9,$parameter10,$parameter11);
break;
case '12':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7,$parameter8,$parameter9,$parameter10,$parameter11,$parameter12);
break;
case '13':
$obj->$funktion($parameter1,$parameter2,$parameter3,$parameter4,$parameter5,$parameter6,$parameter7,$parameter8,$parameter9,$parameter10,$parameter11,$parameter12,$parameter13);
break;
}
}
}
}
if(isset($obj)) {
unset($obj);
}
}
// @refactor Hook Komponente
/**
* @param string $module
*/
public function RunMenuHook($module)
{
if(empty($module)) {
return;
}
$check = $this->GenerateMenuHook($module, 1, true);
if(empty($check) || !isset($check['id']) || !isset($check['aktiv'])) {
$check = $this->app->DB->SelectRow("SELECT hm.id, hm.aktiv FROM `hook_menu` AS `hm` WHERE hm.module = '$module' LIMIT 1");
}
if(empty($check) || !$check['aktiv']) {
return;
}
$hook_menu = $check['id'];
$hooks = $this->app->DB->SelectArr(
"SELECT hmr.module, hmr.funktion
FROM `hook_menu_register` AS `hmr`
WHERE hmr.hook_menu = '$hook_menu' AND hmr.aktiv = 1 AND hmr.module <> '' AND hmr.funktion <> ''
GROUP BY hmr.module, hmr.funktion
ORDER BY hmr.position"
);
if(empty($hooks)) {
return;
}
/** @var Appstore $appstore */
$appstore = $this->app->loadModule('appstore');
foreach($hooks as $hook) {
if(!empty($appstore) && method_exists($appstore, 'isModuleDeactivated')
&& $appstore->isModuleDeactivated($hook['module'])) {
continue;
}
$classname = ucfirst($hook['module']);
$funktion = $hook['funktion'];
$ok = false;
if(!class_exists($classname) && !class_exists($classname.'Custom')) {
if(file_exists(dirname(__DIR__).'/pages/'.$hook['module'].'_custom.php')) {
include_once(dirname(__DIR__).'/pages/'.$hook['module'].'.php');
include_once(dirname(__DIR__).'/pages/'.$hook['module'].'_custom.php');
$ok = true;
}
elseif(file_exists(dirname(__DIR__).'/pages/'.$hook['module'].'.php')) {
include_once(dirname(__DIR__).'/pages/'.$hook['module'].'.php');
$ok = true;
}
}
else {
$ok = true;
}
if(!$ok) {
continue;
}
if(class_exists($classname.'Custom')) {
$classname = $classname.'Custom';
$obj = new $classname($this->app, true);
if(method_exists($obj, $funktion)) {
$obj->$funktion();
}
}
elseif(class_exists($classname)) {
$obj = new $classname($this->app, true);
if(method_exists($obj, $funktion)) {
$obj->$funktion();
}
}
}
}
// @refactor Menu Widget
function InsertMenuAfter($link, $beschreibung, $modulebefore, $actionbefore, $mark=false)
{
$action = $this->app->Secure->GetGET("action");
$module = $this->app->Secure->GetGET("module");
$fmodul = $this->app->Secure->GetGET("fmodul");
$cmd = $this->app->Secure->GetGET("cmd");
$id = $this->app->Secure->GetGET("id");
$sid = $this->app->Secure->GetGET("sid");
if(strpos($link,'index.php') !== false) {
$query = parse_url($link);
$params = [];
if(isset($query['query'])) {
$queryParts = explode('&', $query['query']);
foreach ($queryParts as $param) {
$item = explode('=', $param);
$params[$item[0]] = !isset($item[1])?'':$item[1];
}
if(!empty($params['module']) && !$this->RechteVorhanden($params['module'], $params['action'])) {
return false;
}
}
}
if("index.php?module=$module&action=$action&cmd=$cmd&id=$id&fmodul=$fmodul"==$link) $mark=1;
else if("index.php?module=$module&action=$action&cmd=$cmd&id=$id"==$link) $mark=1;
else if("index.php?module=$module&action=$action&cmd=$cmd"==$link) $mark=1;
else if("index.php?module=$module&action=$action&id=$id&fmodul=$fmodul"==$link && $cmd=="") $mark=1;
else if("index.php?module=$module&action=$action&id=$id"==$link && $cmd=="") $mark=1;
else if("index.php?module=$module&action=$action"==$link &&$cmd=="") $mark=1;
else if("index.php?module=$module&action=$action"==$link) $mark=1;
$found = false;
$_link = $link;
$beschreibung = $this->app->Tpl->pruefeuebersetzung($beschreibung,'menu');
$link = $this->formatmenulink($link, $beschreibung, $mark);
if(is_array($this->menuquery) && (!empty($this->menuquery)?count($this->menuquery):0) > 0)
{
for($k = 0; $k < (!empty($this->menuquery)?count($this->menuquery):0);$k++)
{
if($_link == $this->menuquery[$k]['_link'])return;
if((strpos($this->menuquery[$k]['link'],'module='.$modulebefore) !== false) && (empty($actionbefore) || (!empty($actionbefore) && strpos($this->menuquery[$k]['link'],'action='.$actionbefore) !== false)))
{
$found = $k;
for($i = $k+1; $i < (!empty($this->menuquery)?count($this->menuquery):0); $i++)
{
if($this->menuquery[$i]['ind'] == $k)
{
$found = $i;
}else break;
}
//Alle nach found um eins erhöhen
if($found < (!empty($this->menuquery)?count($this->menuquery):0) -1)
{
for($j = (!empty($this->menuquery)?count($this->menuquery):0) -1 ; $j > $found; $j--)
{
$this->menuquery[$j+1] = $this->menuquery[$j];
}
$this->menuquery[$found + 1] = array('link' => $link,'_link'=>$_link,'ind' => $k);
return;
}
$this->menuquery[] = array('link' => $link,'_link'=>$_link,'ind' => $k);
return;
}
}
}
$this->menuquery[] = array('link' => $link,'_link'=>$_link,'ind' => (!empty($this->menuquery)?count($this->menuquery):0));
}
// @refactor Menu Widget
function InsertMenu($link, $_link)
{
if(is_array($this->menuquery) && (!empty($this->menuquery)?count($this->menuquery):0) > 0)
{
for($k = 0; $k < (!empty($this->menuquery)?count($this->menuquery):0);$k++)
{
if($_link == $this->menuquery[$k]['_link'])return;
}
}
$this->menuquery[] = array('link' => $link,'_link'=>$_link,'ind'=>is_array($this->menuquery)?count($this->menuquery):0);
}
// @refactor Menu Widget
function ParseMenu()
{
$this->app->erp->RunHook('parse_menu',2, $this->menuquery, $this->backlink);
if(is_array($this->menuquery) && (!empty($this->menuquery)?count($this->menuquery):0) > 0)
{
foreach($this->menuquery as $k => $v)
{
$this->app->Tpl->Add('TABS', $v['link']);
unset($this->menuquery[$k]);
}
}
}
// @refactor Menu Widget
public function formatmenulink($link, $beschreibung, $mark = false)
{
$params = $this->getLinkParams($link);
$menuId = !isset($params['module']) || !isset($params['action'])
?null:(' id="menuEntry'.$params['module'].$params['action'].'" ');
if($mark){
return "<li class=\"active\"><a $menuId href=\"$link\">$beschreibung</a></li>";
}
return "<li ><a $menuId href=\"$link\">$beschreibung</a></li>";
}
/**
* @param string $link
*
* @return array
*/
public function getLinkParams($link): array
{
$query = parse_url($link);
$queryParts = null;
$params = [];
if(isset($query['query'])) {
$queryParts = explode('&', $query['query']);
foreach ($queryParts as $param) {
$item = explode('=', $param);
$params[$item[0]] = $item[1];
}
}
return $params;
}
// @refactor Menu Widget
/**
* @param string $link
* @param string $beschreibung
* @param bool $mark
*
* @return bool|void
*/
public function MenuEintrag($link,$beschreibung,$mark=false)
{
$params = $this->getLinkParams($link);
//Alle menüs ohne rechte ausblenden
if(!empty($params['module'])
&& strpos($link,'index.php') !== false
&& !$this->RechteVorhanden($params['module'],$params['action'])
) {
return false;
}
$menuId = !isset($params['module']) || !isset($params['action'])
?null:(' id="menuEntry'.$params['module'].$params['action'].'" ');
$this->menucounter++;
$action = $this->app->Secure->GetGET('action');
$module = $this->app->Secure->GetGET('module');
$fmodul = $this->app->Secure->GetGET('fmodul');
$cmd = $this->app->Secure->GetGET('cmd');
$id = $this->app->Secure->GetGET('id');
$sid = $this->app->Secure->GetGET('sid');
if(($beschreibung==='Freigabe' || $beschreibung==='Abschlie&szlig;en') && $action!=='freigabe')
{
$this->app->Tpl->Add(
'TABSFREIGABE',
'<li class="publish"><a href="'.$link.'"'.$menuId.' class="button">'.$beschreibung.'</a></li>'
);
return;
}
if(strpos($beschreibung,'Neu')!==false){
$this->RunHook('NewTemplateObject', 2, $module,$buttoncode);
if($buttoncode){
$this->app->Tpl->Set('TABSADD', $buttoncode);
}
else{
// wenn link nicht index.php enthaelt
if(strpos($link,"index.php")===false) {
$this->app->Tpl->Set(
'TABSADD',
"<a class=\"neubuttonlink\" href=\"#\"><input type=\"button\" onclick=\"$link\" value=\"+ "
.$this->app->Tpl->pruefeuebersetzung('NEU','menu')."\" class=\"neubutton\" /></a>"
);
}
else {
$this->app->Tpl->Set(
'TABSADD',
"<a class=\"neubuttonlink\" href=\"$link\"><input type=\"button\" value=\"+ "
.$this->app->Tpl->pruefeuebersetzung('NEU','menu')."\" class=\"neubutton\" /></a>"
);
}
}
$this->app->Tpl->Set('TABSADDWIDTH','50');
return;
}
if(strpos($beschreibung,'zur')!==false) {
$this->backlink = $link;
$this->app->Tpl->Set('TABSBACK',"$link");
$this->Headlines();
return;
}
if(
$mark != 1 && (
in_array(
$link,
[
"index.php?module=$module&action=$action&cmd=$cmd&id=$id&fmodul=$fmodul",
"index.php?module=$module&action=$action&cmd=$cmd&id=$id",
"index.php?module=$module&action=$action&cmd=$cmd",
"index.php?module=$module&action=$action",
]
)
|| (
$cmd == '' && in_array(
$link,
[
"index.php?module=$module&action=$action&id=$id&fmodul=$fmodul",
"index.php?module=$module&action=$action&id=$id",
"index.php?module=$module&action=$action",
"index.php?module=$module&action=$action&id=$id&sid=$sid",
]
)
)
)
) {
$mark = 1;
}
$this->InsertMenu(
$this->formatmenulink($link,$this->app->Tpl->pruefeuebersetzung( $beschreibung,'menu'), $mark), $link
);
}
/**
* @param string $link
*/
public function setBacklink($link)
{
$this->backlink = $link;
}
/**
* @return string
*/
public function getBacklink()
{
return (string)$this->backlink;
}
public function addFav()
{
/** @var Appstore $obj */
$obj = $this->app->loadModule('appstore');
if($obj !== null && method_exists($obj, 'addFav')){
$obj->addFav();
}
}
/**
* @param int $id
* @param string $module
*
* @return string
*/
public function getSubModule($id, $module)
{
/** @var Appstore $obj */
$obj = $this->app->loadModule('appstore');
if($obj !== null && method_exists($obj, 'getSubModule')){
return $obj->getSubModule($id, $module);
}
return '';
}
/**
* @return array[]
*/
public function getInlineToolTip()
{
$sprachen = ['german','english'];
if(method_exists($this->app->User,'GetSprachen')) {
$sprachen = $this->app->User->GetSprachen();
if(!in_array('german', $sprachen)) {
$sprachen[] = 'german';
}
if(!in_array('english', $sprachen)) {
$sprachen[] = 'english';
}
}
if(!is_array($sprachen)) {
return [[], []];
}
$sprachen = array_reverse($sprachen);
$inline = [];
$tooltip = [];
foreach($sprachen as $sprache) {
if(!empty($this->inline) && !empty($this->inline[$sprache])) {
$inline = array_merge($inline, $this->inline[$sprache]);
}
if(!empty($this->tooltip) && !empty($this->tooltip[$sprache])) {
$tooltip = array_merge($tooltip, $this->tooltip[$sprache]);
}
if(preg_match_all('/[a-zA-Z0-9\-]/', $sprache, $erg)) {
if(@is_file(dirname(dirname(__DIR__)).'/languages/'.$sprache.'/inline.php')) {
include_once dirname(dirname(__DIR__)).'/languages/'.$sprache.'/inline.php';
}
if(@is_file(dirname(dirname(__DIR__)).'/languages/'.$sprache.'/tooltip.php')) {
if(isset($tooltip)&& !is_array($tooltip)) {
$tooltip = [];
}
include_once dirname(dirname(__DIR__)).'/languages/'.$sprache.'/tooltip.php';
}
}
}
return [
'inline' => $inline,
'tooltip' => $tooltip,
];
}
/**
* @param array $tooltip
* @param string $module
* @param string $action
*/
public function addToolTipsHtml($tooltip, $module, $action)
{
if(empty($tooltip) || empty($tooltip[$module]) || empty($tooltip[$module][$action])) {
return;
}
$i = -1;
$tooltipjson = [];
foreach($tooltip[$module][$action] as $key => $v) {
$i++;
$tooltipjson[] = [
'key'=>base64_encode($key),
'wert'=>base64_encode($v)
];
}
$this->app->Tpl->Add(
'INLINEHELP',
'<script type="application/json" id="tooltipjson">'.json_encode($tooltipjson).'</script>'
);
}
// @refactor Tooltip Widget
public function HelpIconAndTooltip()
{
$toolTipInline = $this->getInlineToolTip();
$inline = $toolTipInline['inline'];
$tooltip = $toolTipInline['tooltip'];
$module = $this->app->Secure->GetGET('module');
$action = $this->app->Secure->GetGET('action');
$id = (int)$this->app->Secure->GetGET('id');
$module2 = $this->getSubModule($id, $module);
if(!$this->RechteVorhanden($module, $action)) {
return;
}
$include = false;
$this->RunHook('inline_tooltip', 7, $inline, $tooltip, $module, $action, $id, $module2);
$this->addToolTipsHtml($toolTipInline['tooltip'], $module, $action);
if(isset($inline) && isset($inline[$module]) && !isset($inline[$module][$action]) && isset($inline[$module]['default'])) {
$action = 'default';
}
if(isset($inline) && !isset($inline[$module]) && isset($inline['default']) && isset($inline['default']['default'])) {
$module = 'default';
$action = 'default';
}
$inlinehelplink = false;
if(isset($inline) && isset($inline[$module]) && !empty($inline[$module][$action])) {
if(isset($inline[$module][$action]['heading'])) {
$heading = $inline[$module][$action]['heading'];
}
elseif($module !== 'default') {
$heading = ucfirst($module);
}
else{
$heading = 'Hilfe';
}
$inlineHasMenu = false;
if(!empty($inline[$module][$action]['faqs']) || !empty($inline[$module][$action]['extmenu'])
|| !empty($inline[$module][$action]['handbook'])) {
$inlineHasMenu = true;
if(!empty($inline[$module][$action]['handbook'])) {
$this->app->Tpl->Add('INLINEHELPMENUBEFORE','<li><a class="inlinehandbooklink" href="#rhandbook">Handbuch</a></li>');
$handbook = $inline[$module][$action]['handbook'];
preg_match_all(
'/<img([altheight0-9=\" ]*) src="(\.\/index|index).php\?module=wiki&amp;action=getfile&amp;workspacefolder=XentralHandbuch&amp;article=([^&]+)&amp;fileid=([0-9]+)"([^\/]*) \/>/',
$handbook,
$pregerg
);
if(!empty($pregerg) && !empty($pregerg[0])) {
foreach($pregerg[0] as $pregKey => $pregVal) {
$handbook = str_replace(
$pregVal,
'<img '.$pregerg[1][$pregKey].' class="wikigetfile" data-article="'
.$pregerg[3][$pregKey].'" data-fileid="'
.$pregerg[4][$pregKey].'"'.$pregerg[5][$pregKey].' />',
$handbook
);
}
}
preg_match_all(
'/<img([altheight0-9=\" ]*) src="(\.\/index|index).php\?module=wiki&action=getfile&workspacefolder=XentralHandbuch&article=([^&]+)&fileid=([0-9]+)"([^\/]*) \/>/',
$handbook,
$pregerg
);
if(!empty($pregerg) && !empty($pregerg[0])) {
foreach($pregerg[0] as $pregKey => $pregVal) {
$handbook = str_replace(
$pregVal,
'<img '.$pregerg[1][$pregKey].' class="wikigetfile" data-article="'
.$pregerg[3][$pregKey].'" data-fileid="'
.$pregerg[4][$pregKey].'"'.$pregerg[5][$pregKey].' />',
$handbook
);
}
}
$inlinehelplink = true;
$this->app->Tpl->Add(
'INLINEHELP3',
$handbook
);
}
if(!empty($inline[$module][$action]['faqs'])) {
$inlinehelplink = true;
$this->app->Tpl->Add('INLINEHELPMENU','<li><a class="inlinefaqlink" href="#rfaq">FAQ&apos;s</a></li>');
$this->showInlineFaq($inline[$module][$action]['faqs']);
}
if(!empty($inline[$module][$action]['extmenu'])) {
$this->app->Tpl->Add('INLINEHELPMENU',$inline[$module][$action]['extmenu']);
}
}
else {
$this->app->Tpl->Set('BEFOREINLINEMENU', '<!--');
$this->app->Tpl->Set('AFTERINLINEMENU', '-->');
}
$this->app->Tpl->Set('INLINEHELPHEADING',$heading.
(!empty($inline[$module][$action]['extraheading'])?$inline[$module][$action]['extraheading']:'')
);
$objiframes = array();
//$this->app->Tpl->Add('INLINEHELP','<script>var youtubeifr = Array();</script>');
if(isset($inline[$module][$action]['youtube'])) {
//$objiframes[] = "'".'youtubeifr'."':'".'https://www.youtube.com/embed/'.$inline[$module][$action]['youtube']."'";
$objiframes['youtubeifr'] = 'https://www.youtube.com/embed/'.$inline[$module][$action]['youtube'];
$this->app->Tpl->Add('INLINEHELP','
<div class="youtubehaupt"><span class="youtubehaupttitel">'.$heading.'</span><iframe width="560" height="315" src="" id="youtubeifr" frameborder="0" allowfullscreen></iframe></div>');
/*$this->app->Tpl->Add('INLINEHELP','
<script>youtubeifr[\'youtubeifr\'] = \'https://www.youtube.com/embed/'.$inline[$module][$action]['youtube'].'\';</script>
<div class="youtubehaupt"><span class="youtubehaupttitel">'.$heading.'</span><iframe width="560" height="315" src="" id="youtubeifr" frameborder="0" allowfullscreen></iframe></div>');*/
}
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',
'<div class="outeryoutubeweitere">'
.((!empty($weitereyoutube)?count($weitereyoutube):0) > 2?'<div class="pfeillinks youtubepfeil" ></div>':'')
.'<div class="youtubeweiterecontainer2"><div class="youtubeweiterecontainer"><div class="youtubeweiterecontainerinner">'
);
foreach($weitereyoutube as $k => $v) {
$objiframes['youtubeifr'.$k] = 'https://www.youtube.com/embed/'.$v['youtube'].'?rel=0';
$this->app->Tpl->Add(
'INLINEHELP',
'<div class="youtubeweitere">
<span class="youtubeoverlay" ></span>
<iframe width="190" height="105" src="" id="youtubeifr'.$k.'" frameborder="0" allowfullscreen></iframe>
<div class="youtubesubtitel">'.$v['titel'].'</div>
</div>'
);
}
$this->app->Tpl->Add(
'INLINEHELP',
'</div></div></div>'
.((!empty($weitereyoutube)?count($weitereyoutube):0) > 2?'<div class="pfeilrechts youtubepfeil" ></div>':'')
.'</div>'
);
}
if(isset($inline[$module][$action]['description']))
{
$this->app->Tpl->Add('INLINEHELP','<div class="text-wrapper">'.$inline[$module][$action]['description'].'</div>');
}
if(!empty($inline[$module][$action]['extradescription'])) {
preg_match_all(
'/<img([altheight0-9=\" ]*) src="([^"]+)"([^\/]*) \/>/',
$inline[$module][$action]['extradescription'],
$pregerg
);
if(!empty($pregerg) && !empty($pregerg[0])) {
foreach($pregerg[0] as $pregKey => $pregVal) {
$inline[$module][$action]['extradescription'] = str_replace(
$pregVal,
'<img '.$pregerg[1][$pregKey].' src="#" data-src="'
.$pregerg[2][$pregKey].'"
'.$pregerg[4][$pregKey].' />',
$inline[$module][$action]['extradescription']
);
}
}
$this->app->Tpl->Add('INLINEHELP','<div class="text-wrapper">'.$inline[$module][$action]['extradescription'].'</div>');
}
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','<div>'
);
if(isset($inline[$module][$action]['link'])) {
$this->app->Tpl->Add(
'INLINEHELPLINK',
'<a href="'.$inline[$module][$action]['link']
.'" target="_blank"><input type="button" value="zum Handbuch für dieses Modul" /></a>'
);
}
if(!empty($inline[$module][$action]['extralinks'])) {
foreach($inline[$module][$action]['extralinks'] as $eLink => $eValue) {
if(is_numeric($eLink)) {
$this->app->Tpl->Add(
'INLINEHELPLINK',
'<a href="'.$eValue
.'" target="_blank"><input type="button" value="zum Handbuch für dieses Modul" /></a>'
);
}
else {
$this->app->Tpl->Add(
'INLINEHELPLINK',
'<a href="'.$eLink
.'" target="_blank"><input type="button" value="'.$eValue.'" /></a>'
);
}
}
}
if(!empty($inline[$module][$action]['extralinks3'])) {
foreach($inline[$module][$action]['extralinks3'] as $eLink => $eValue) {
if(is_numeric($eLink)) {
$this->app->Tpl->Add(
'INLINEHELP3',
'<a href="'.$eValue
.'" target="_blank"><input type="button" value="zum Handbuch für dieses Modul" /></a>'
);
}
else {
$this->app->Tpl->Add(
'INLINEHELP3',
'<a href="'.$eLink
.'" target="_blank"><input type="button" value="'.$eValue.'" /></a>'
);
}
}
}
$this->app->Tpl->Add(
'INLINEHELPLINK','</div>'
);
}
$this->app->Tpl->Add('INLINEHELP','<script type="application/json" id="youtubejson">');
$this->app->Tpl->Add('INLINEHELP', json_encode($objiframes));
$this->app->Tpl->Add('INLINEHELP','</script>');
$include = true;
if(is_string($inline[$module][$action])) {
$this->app->Tpl->Set('INLINEHELP',$inline[$module][$action]);
}
}
if(!$inlinehelplink) {
//$this->app->Tpl->Add('INLINEHELPLINK','<div><a href="https://www.wawision.de/benutzer-handbuch" target="_blank"><input type="button" value="zum Handbuch" /></a></div>');
$this->app->Tpl->Add('TABSPRINT',
'<input type="button" value="info" id="info">
<label for="info">
<span class="icon">
<a target="_blank" class="infolink" href="https://www.wawision.de/akademie-home">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.9987 13.4173C10.5425 13.4173 13.4154 10.5445 13.4154 7.00065C13.4154 3.45682 10.5425 0.583984 6.9987 0.583984C3.45487 0.583984 0.582031 3.45682 0.582031 7.00065C0.582031 10.5445 3.45487 13.4173 6.9987 13.4173Z" stroke="var(--text-color, #929292)" stroke-width="0.8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M6.9974 9.91699C6.91685 9.91699 6.85156 9.98228 6.85156 10.0628C6.85156 10.1434 6.91685 10.2087 6.9974 10.2087C7.07794 10.2087 7.14323 10.1434 7.14323 10.0628C7.14323 9.98228 7.07794 9.91699 6.9974 9.91699V9.91699" stroke="var(--text-color, #929292)" stroke-width="0.8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M5.25 5.83679C5.25013 4.96279 5.89508 4.22289 6.76088 4.10347C7.62667 3.98404 8.44784 4.52171 8.68458 5.36304C8.92132 6.20436 8.50103 7.09136 7.7 7.44096C7.27484 7.62651 7.00001 8.04632 7 8.51021V8.75054" stroke="var(--text-color, #929292)" stroke-width="0.8" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</a>
</span>
</label>'
);
}else {
$this->app->Tpl->Add('TABSPRINT',
'<input type="button" onclick="showinlinehelp()" value="info" id="info">
<label for="info">
<span class="icon">
<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M6.9987 13.4173C10.5425 13.4173 13.4154 10.5445 13.4154 7.00065C13.4154 3.45682 10.5425 0.583984 6.9987 0.583984C3.45487 0.583984 0.582031 3.45682 0.582031 7.00065C0.582031 10.5445 3.45487 13.4173 6.9987 13.4173Z" stroke="var(--text-color, #929292)" stroke-width="0.8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M6.9974 9.91699C6.91685 9.91699 6.85156 9.98228 6.85156 10.0628C6.85156 10.1434 6.91685 10.2087 6.9974 10.2087C7.07794 10.2087 7.14323 10.1434 7.14323 10.0628C7.14323 9.98228 7.07794 9.91699 6.9974 9.91699V9.91699" stroke="var(--text-color, #929292)" stroke-width="0.8" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M5.25 5.83679C5.25013 4.96279 5.89508 4.22289 6.76088 4.10347C7.62667 3.98404 8.44784 4.52171 8.68458 5.36304C8.92132 6.20436 8.50103 7.09136 7.7 7.44096C7.27484 7.62651 7.00001 8.04632 7 8.51021V8.75054" stroke="var(--text-color, #929292)" stroke-width="0.8" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</span>
</label>'
);
}
$this->app->Tpl->Add('SCRIPTJAVASCRIPT','<link rel="stylesheet" type="text/css" href="./css/tooltipinline.css?v=2">
<script type="text/javascript" src="./js/tooltipinline.js?v=2"></script>
');
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', '<!--');
$this->app->Tpl->Set('AFTERSUPPORTPHONE', '-->');
}
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 = '<div id="faqaccordion">';
if(!empty($faqs)) {
foreach($faqs as $faq) {
$html .= '<div class="group"><h2>'.$faq['question'].'</h2><div>'.$faq['answer'].'</div></div>';
}
}
$html .= '</div>';
$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',"&nbsp;<a style=\"color:white;font-size:9pt\" href=\"#\" onclick=\"wawisionPrint();\"><img src=\"./themes/new/images/icons_druck.png\" height=\"18\"></a>");
}
// @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;$k<(!empty($artikelarr)?count($artikelarr):0); $k++)
{
$menge = $artikelarr[$k]['menge'] - $artikelarr[$k]['geliefert_menge'];
$artikel = $artikelarr[$k]['artikel'];
$artikel_position_id = $artikelarr[$k]['id'];
// pruefe artikel 12 menge 4
$lagerartikel = $artikelarr[$k]['lagerartikel'];
$keineeinzelartikelanzeigen = $artikelarr[$k]['keineeinzelartikelanzeigen'];
//if($artikelarr[$k][nummer]!="200000" && $artikelarr[$k][nummer]!="200001" && $artikelarr[$k][nummer]!="200002" && $lagerartikel==1)
//if($lagerartikel==1)
//if($artikelarr[$k][nummer]!="200000" && $artikelarr[$k][nummer]!="200001" && $artikelarr[$k][nummer]!="200002" )
{
//echo "Artikel $artikel Menge $menge";
// schaue ob es ein JUST Stuecklisten artikel ist der nicht explodiert ist
$just_stueckliste = $artikelarr[$k]['juststueckliste'];
if($typ==='produktion')
{
} else {
$explodiert = $artikelarr[$k]['explodiert'];
$menge = $artikelarr[$k]['menge'];
$sort = $artikelarr[$k]['sort'];
if($changed) {
$positionRow = $this->app->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<hr>";
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
if ($value != "") {
//return $abkuerzung;
if($value == round((float) $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){
// Removed, table does not exist $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);
// Removed, table does not exist $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,'<a id="inline" href="#data"></a>
<div style="display:none"><div id="data"><h2>'.$ueberschrift.'</h2><hr>von Benedikt Sauter<br><br><div class="info">'.$meldung.'</div>
<br><br><center><a href="'.$_SERVER['HTTP_REFERER'].'">Jetzt Zur&uuml;ck zum letzten Schritt</a>&nbsp;|&nbsp;
<a href="javascript:;" onclick="$.fancybox.close();">Bitte Fenster dennoch freigeben</a></center></div></div>');
*/
$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','
<div id="dialog-message" title="'.$ueberschrift.'">
<p style="font-size: 9pt">
'.$meldung.'
</p>
</div>
');
}
/**@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','<a id="inline" href="#data"></a>
<div style="display:none"><div id="data"><h2>Infomeldung</h2><hr><br><br>'.$meldung.'</div></div>');
}
// @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;$i<(!empty($alleids)?count($alleids):0);$i++)
{
for($ij=0;$ij<count($alleids[$i]);$ij++)
{
$result[$alleids[$i][$ij]['id']] = $alleids[$i][$ij]['betrag'];
}
}
return $result;
}
function BestellungErweiterteVerbindlichkeitenNeu($id){
/** @var Verbindlichkeit $obj */
$obj = $this->app->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 ((!empty($emails)?count($emails):0) >= 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',
"<br><br><table width=\"60%\" style=\"background-color: #fff; border: solid 1px #000;\" align=\"center\">
<tr>
<td align=\"center\">
<br><br>
<h2>Methode:</h2><br><br>
<form action=\"\" method=\"post\">Versandart: <input name=\"versandmit\" type=\"text\" id=\"tracking\"><script type=\"text/javascript\">document.getElementById(\"tracking\").focus(); </script>&nbsp;<input type=\"submit\" name=\"versandmitbutton\" value=\"Speichern\"></form>
<br><br>
</td></tr></table>
<br><br>
");
}
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 = "<div class=\"error\">Fehlerhafte Trackingnummer!</div>";
}
if($sid=="versand")
{
$paketmarkedrucken = "";//"<input type=\"button\" name=\"paketmarkedrucken\" value=\"Paketmarke nochmal drucken\" onclick=\"window.location.href='index.php?module=versanderzeugen&action=korrektur&id=$id'\">";
}
else $paketmarkedrucken="";
//header("Location: index.php?module=paketmarke&action=tracking");
$this->app->Tpl->Add('TAB1',
"<br>$error_message_tracking<br><table width=\"60%\" style=\"background-color: #fff; border: solid 1px #000;\" align=\"center\">
<tr>
<td align=\"center\">
<br><br>
<h2>Tracking-Nummer Scannen:</h2><br><br>
<form action=\"\" method=\"post\">Tracking-Nummer: <input name=\"tracking\" type=\"text\" id=\"tracking\"><script type=\"text/javascript\">document.getElementById(\"tracking\").focus(); </script>&nbsp;<input type=\"submit\" name=\"trackingsubmit\" value=\"Speichern\">
<br><br>
<center>
<table>
<tr><td><input type=\"checkbox\" name=\"weiterespaket\" value=\"1\" onclick=\"document.getElementById('tracking').focus()\"></td><td>&nbsp;Weitere Paketmarke f&uuml;r diese Lieferung erstellen.</td></tr>
<tr><td><input type=\"checkbox\" name=\"lieferscheinkopie\" value=\"1\" onclick=\"document.getElementById('tracking').focus()\"></td><td>&nbsp;Zus&auml;tzlichen Lieferschein drucken.</td></tr>
</table>
</center>
<br>
<center>
<br>
$paketmarkedrucken
<input type=\"submit\" name=\"trackingsubmitcancel\" value=\"Keine Tracking-Nummer erfassen\">
</center>
</form>
</td></tr></table>
<br><br>
");
} 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','<tr><td nowrap>Gewicht Paket:</td><td><input type="text" name="kg'.$i.'" size="5" value="'.$standardkg.'">&nbsp;<i>in kg</i></td></tr>');
}
else {
for($i=1;$i<=$anzahl;$i++)
$this->app->Tpl->Add('GEWICHT','<tr><td nowrap>Gewicht Paket '.$i.':</td><td><input type="text" name="kg'.$i.'" size="5" value="'.$standardkg.'">&nbsp;<i>in kg</i></td></tr>');
}*/
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','<tr><td nowrap>Gewicht:</td><td><input type="text" id="kg'.$i.'" name="kg'.$i.'" size="5" value="'.$standardkg.'">&nbsp;<i>in kg</i>');
if($mitwaage)
{
$this->app->Tpl->Add('GEWICHT','&nbsp;<input type="button" value="Waage" onclick="Getgewicht('.$i.')" />');
$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','</td></tr>');
}
else {
for($i=1;$i<=$anzahl;$i++)
{
$this->app->Tpl->Add('GEWICHT','<tr><td nowrap>Gewicht:</td><td><input type="text" id="kg'.$i.'" name="kg'.$i.'" size="5" value="'.$standardkg.'">&nbsp;<i>in kg</i>');
if($mitwaage)
{
$this->app->Tpl->Add('GEWICHT','&nbsp;<input type="button" value="Waage" onclick="Getgewicht('.$i.')" />');
$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','</td></tr>');
}
}
}
/**@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",'&nbsp;<input type="button" value="Trackingnummer direkt eingeben" onclick="window.location.href=\'index.php?module=versanderzeugen&action=frankieren&id='.$id.'&tracking_again=1\'" name="anders">&nbsp;');
$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&uuml;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',
"<br><br><table width=\"60%\" style=\"background-color: #fff; border: solid 1px #000;\" align=\"center\">
<tr>
<td align=\"center\">
<br><br>
<h2>Methode:</h2><br><br>
<form action=\"\" method=\"post\">Versandart: <input name=\"versandmit\" type=\"text\" id=\"tracking\"><script type=\"text/javascript\">document.getElementById(\"tracking\").focus(); </script>&nbsp;<input type=\"submit\" name=\"versandmitbutton\" value=\"Speichern\">
<br><br>
<center>
<br>
<!--<input type=\"button\" name=\"paketmarkedrucken\" value=\"Doch als DHL Paketmarke drucken\" onclick=\"window.location.href='index.php?module=versanderzeugen&action=korrektur&id=$id'\">-->
</center>
</form>
<br><br>
</td></tr></table>
<br><br>
");
}
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 = "<div class=\"error\">Bitte korrekte Trackingnummer erfassen!</div>";
}
if($sid==='versand') {
$paketmarkedrucken = '';//"<input type=\"button\" name=\"paketmarkedrucken\" value=\"Paketmarke nochmal drucken\" onclick=\"window.location.href='index.php?module=versanderzeugen&action=korrektur&id=$id'\">";
}
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 = '&nbsp;
<input type="button" '.
(!$printable?' disabled="disabled" ':' data-ajax="index.php?module=versanderzeugen&action=reprintlabel&json=1&id='.$id.'"').
' class="btnGreenBig '.($printable?'':'disabled').'" value="Paketmarke nochmal drucken *" id="reprintlabel" data-id="'.$id.'" /><br />
<i class="grey fullcenter"><sup>* Die Paketmarke wird maximal 10 Tage vorgehalten.</sup></i>';
}
$this->app->erp->RunHook("versanderzeugen_scan_dialog", 2, $lastTrackingLieferschein, $versandartenmodul[0]);
//header("Location: index.php?module=paketmarke&action=tracking");
$this->app->Tpl->Add('TAB1',
"<br>$error_message_tracking<br><table width=\"60%\" style=\"background-color: #fff; border: solid 1px #000;\" align=\"center\">
<tr>
<td align=\"center\">
<br><br>
<h2>Tracking-Nummer Scannen:</h2><br><br>
<form action=\"\" method=\"post\">Tracking-Nummer: <input name=\"tracking\" type=\"text\" id=\"tracking\" value=\"$tracking\"><input type='hidden' name='tracking_link' value='$trackingLink'><script type=\"text/javascript\">document.getElementById(\"tracking\").focus(); </script>&nbsp;<input type=\"submit\" name=\"trackingsubmit\" value=\"Speichern\">&nbsp;
<br><br>
<center>
<table>
<tr><td><input type=\"checkbox\" name=\"weiterespaket\" value=\"1\" onclick=\"document.getElementById('tracking').focus()\"></td><td>&nbsp;Weitere Paketmarke f&uuml;r diese Lieferung erstellen.</td></tr>
<tr><td><input type=\"checkbox\" name=\"lieferscheinkopie\" value=\"1\" onclick=\"document.getElementById('tracking').focus()\"></td><td>&nbsp;Zus&auml;tzlichen Lieferschein drucken.</td></tr>
</table>
</center>
<br>
<center>
<br>
$paketmarkedrucken
<table><tr><td nowrap><input type=\"submit\" name=\"trackingsubmitcancel\" value=\"Keine Tracking-Nummer erfassen\">$printagain</td></tr></table>
</center>
</form>
<br><br>
</td></tr></table>
<br><br>
");
}
}
if(!($drucken!="" || $tracking_again=="1") || $error)
{
if($error)
{
$this->app->Tpl->Add('ERROR','<div class="error">');
foreach($error as $er)$this->app->Tpl->Add('ERROR',$er.'<br>');
$this->app->Tpl->Add('ERROR','</div>');
}
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;$i<(!empty($artikel_positionen)?count($artikel_positionen):0);$i++)
{
$artikelaltersfreigabe = (int)$this->app->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', '<!--');
$this->app->Tpl->Set('NACHALTERSFREIGABE', '-->');
}
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','<tr><td nowrap>Gewicht Paket:</td><td><input type="text" name="kg'.$i.'" size="5" value="'.$standardkg.'">&nbsp;<i>in kg</i></td></tr>');
}
else {
for($i=1;$i<=$anzahl;$i++)
$this->app->Tpl->Add('GEWICHT','<tr><td nowrap>Gewicht Paket '.$i.':</td><td><input type="text" name="kg'.$i.'" size="5" value="'.$standardkg.'">&nbsp;<i>in kg</i></td></tr>');
}*/
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</h3><br>&nbsp;&nbsp;&nbsp;Bitte weiter klicken und im Feld <i>Trackingnummer</i> Information für Versand eingeben z.B. Brief oder Spedition&nbsp;&nbsp;&nbsp;<h3>";
}
}
}
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', '<!--');
$this->app->Tpl->Add('NACHRETOURENLABEL', '-->');
}
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' => '&bull;','link'=>'<a onclick="$(\'#versand_klaergrund\').val($(this).html());">'.$v['problemcase'].'</a>');
}
$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&auml;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<br>
* Retrieve data with the getValue() and tryGetValue() functions<br>
* 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<br>
* Retrieve data with the getValue() and tryGetValue() functions<br>
* 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;$iauftrag<(!empty($auftragarr)?count($auftragarr):0);$iauftrag++)
{
$auftrag = $auftragarr[$iauftrag]['id'];
$projekt = $this->app->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 .= "<br>-Auftrag ".$auftragarr[$iauftrag]['belegnr']." vom ".$auftragarr[$iauftrag]['datum2']." Bestellung/Kommission: ".$auftragarr[$iauftrag]['ihrebestellnummer']." (geplanter Liefertermin: ".$auftragarr[$iauftrag]['lieferdatum2'].")<br>";
}
else {
$artikeltabelle .= "<br>-Auftrag ".$auftragarr[$iauftrag]['belegnr']." vom ".$auftragarr[$iauftrag]['datum2']." Bestellung/Kommission: ".$auftragarr[$iauftrag]['ihrebestellnummer']." (geplanter Liefertermin: ".$auftragarr[$iauftrag]['lieferdatum2'].")<br>";
}
//$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."<br>";
}
else
{
$artikeltabelleliefertermin .= "--Artikel: ".$artikel." (Nummer: $nummer) Menge: ".$menge."<br>";
}
}
}
if($artikeltabelle!="") $artikeltabelle ="Rückstand:<br><br>".$artikeltabelle."<br><br>";
if($artikeltabelleliefertermin!="") $artikeltabelle .="Offene Aufträge:<br><br>".$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)
{
$text = '';
if ($dokument != '') {
$dbcheck = $this->app->DB->Select("SHOW TABLES LIKE '$dokument'");
if (!empty($dbcheck)) {
$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);
}
}
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)
{
$text = '';
if ($dokument != '') {
$dbcheck = $this->app->DB->Select("SHOW TABLES LIKE '$dokument'");
if ($dbcheck) {
$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&auml;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[(!empty($arrtmpfile)?count($arrtmpfile):0)-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 "<iframe width=\"100%\" height=\"600\" src=\"index.php?module=$typ&action=abschicken&id=$id\" frameborder=\"0\"></iframe>";
$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',"<div class=\"error\">Die Rechnung wurde noch nicht freigegeben!</div>"); break;
case "angebot": $this->app->Tpl->Set('TAB1',"<div class=\"error\">Das Angebot wurde noch nicht freigegeben!</div>"); break;
case "auftrag": $this->app->Tpl->Set('TAB1',"<div class=\"error\">Der Auftrag wurde noch nicht freigegeben!</div>"); break;
case "lieferschein": $this->app->Tpl->Set('TAB1',"<div class=\"error\">Der Lieferschein wurde noch nicht freigegeben!</div>"); break;
case "retoure": $this->app->Tpl->Set('TAB1',"<div class=\"error\">Die Retoure wurde noch nicht freigegeben!</div>"); break;
case "bestellung": $this->app->Tpl->Set('TAB1',"<div class=\"error\">Die Bestellung wurde noch nicht freigegeben!</div>"); break;
case "gutschrift": $this->app->Tpl->Set('TAB1',"<div class=\"error\">Die Gutschrift wurde noch nicht freigegeben!</div>"); break;
case "arbeitsnachweis": $this->app->Tpl->Set('TAB1',"<div class=\"error\">Der Arbeitsnachweis wurde noch nicht freigegeben!</div>"); break;
case "preisanfrage": $this->app->Tpl->Set('TAB1',"<div class=\"error\">Die Preisanfrage wurde noch nicht freigegeben!</div>"); break;
case "proformarechnung": $this->app->Tpl->Set('TAB1',"<div class=\"error\">Die Proformarechnung wurde noch nicht freigegeben!</div>"); break;
case "produktion": $this->app->Tpl->Set('TAB1',"<div class=\"error\">Die Produktion wurde noch nicht freigegeben!</div>"); 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&uuml;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", "<br>", $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;$i<(!empty($tmp)?count($tmp):0);$i++)
{
$datensatz = $tmp[$i]['datensatz'];
switch($tmp[$i]['tabelle'])
{
case "adresse":
if($tmp[$i]['ersterdatensatz']=="1")
{
//naechste zu vergebene nummer richtig setzten
$tmp_adresse = $this->app->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) && (!empty($parents)?count($parents):0) > 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) && (!empty($parents)?count($parents):0) > 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((!empty($anweisung)?count($anweisung):0) > 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('&uuml;','&Uuml;','&auml;','&Auml;','&ouml;','&Ouml;','&szlig;'),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&uuml;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&uuml;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)
&& (!empty($positions)?count($positions):0) === 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((!empty($inputa)?count($inputa):0) == 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&uuml;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&uuml;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&uuml;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,"<div style=\"background-color: green;\">Vollst&auml;ndig</div>");
$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 = (!empty($result)?count($result):0);
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&uuml;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&uuml;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&uuml;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."<option value=\"$kuerzel\"";
if ($selected == $kuerzel) $options = $options." selected";
$options = $options.">$land</option>\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; */
foreach($staaten as $Key => $Val) {
$$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',
'&Auml;gypten' => 'EG',
'Albanien' => 'AL',
'Algerien' => 'DZ',
'Amerikanische Jungferninseln' => 'VI',
'Andorra' => 'AD',
'Angola' => 'AO',
'Anguilla' => 'AI',
'Antarktis' => 'AQ',
'Antigua und Barbuda' => 'AG',
'&Auml;quatorialguinea' => 'GQ',
'Argentinien' => 'AR',
'Armenien' => 'AM',
'Aruba' => 'AW',
'Aserbaidschan' => 'AZ',
'&Auml;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&auml;nemark' => 'DK',
'Deutschland' => 'DE',
'Dominica' => 'DM',
'Dominikanische Republik' => 'DO',
'Dschibuti' => 'DJ',
'Ecuador' => 'EC',
'El Salvador' => 'SV',
'Elfenbeink&uuml;ste' => 'CI',
'Eritrea' => 'ER',
'Estland' => 'EE',
'Falklandinseln' => 'FK',
'F&auml;r&ouml;er Inseln' => 'FO',
'Fidschi' => 'FJ',
'Finnland' => 'FI',
'Frankreich' => 'FR',
'Franz&ouml;sisch-Guayana' => 'GF',
'Franz&ouml;sisch-Polynesien' => 'PF',
'Franz&ouml;sisches S&uuml;d-Territorium' => 'TF',
'Gabun' => 'GA',
'Gambia' => 'GM',
'Georgien' => 'GE',
'Ghana' => 'GH',
'Gibraltar' => 'GI',
'Grenada' => 'GD',
'Griechenland' => 'GR',
'Gr&ouml;nland' => 'GL',
'Gro&szlig;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',
'&Ouml;sterreich' => 'AT',
'Pakistan' => 'PK',
'Pal&auml;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&auml;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&uuml;dgeorgien, s&uuml;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&uuml;dkorea' => 'KR',
'S&uuml;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&uuml;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&szlig;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&auml;hlten Artikeln',
'ersatzlieferung' => 'Kostenlose Ersatzlieferung veranlassen',
'ruecksendung' => 'R&uuml;cksendung der ausgew&auml;hlten Artikel',
'internreparatur' => 'ausgew&auml;hlte zur internen Reparatur geben',
'externreparatur' => 'ausgew&auml;hlte f&uuml;r Reparatur zur&uuml;ckschicken',
'abgeschlossen' => 'ausgew&auml;hlte Artikel auf abgeschlossen setzen',
'offen' => 'ausgew&auml;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) && (!empty($tmp)?count($tmp):0) > 1) {
return array_merge([''], $tmp);
}
$sprachen = array(
'Afrikaans' => 'AF',
'Albanisch' => 'SQ',
'Arabisch' => 'AR',
'Armenisch' => 'HY',
'Aserbeidschanisch' => 'AZ',
'Bosnisch' =>'BS',
'Bulgarisch' => 'BG',
'Chinesisch' => 'ZH',
'D&auml;nisch' => 'DA',
'Deutsch' => 'DE',
'Englisch' => 'EN',
'Estnisch' => 'ET',
'Finnisch' => 'FI',
'Franz&ouml;sisch' => 'FR',
'Georgisch' => 'KA',
'Griechisch' => 'EL',
'Holl&auml;ndisch' => 'NL',
'Isl&auml;ndisch' => 'IS',
'Italienisch' => 'IT',
'Japanisch' => 'JA',
'Kasachisch' => 'KK',
'Koreanisch' => 'KO',
'Kroatisch' => 'HR',
'Lettisch' => 'LV',
'Litauisch' => 'LT',
'Norwegisch' => 'NO',
'Polnisch' => 'PL',
'Portugiesisch' => 'PT',
'Rum&auml;nisch' => 'RO',
'Russisch' => 'RU',
'Schwedisch' => 'SV',
'Serbisch' => 'SR',
'Slowakisch' => 'SK',
'Slowenisch' => 'SL',
'Spanisch' => 'ES',
'Tschechisch' => 'CZ',
'T&uuml;rkisch' => 'TR',
'Ukrainisch' => 'UK',
'Ungarisch' => 'HU',
'Wei&szlig;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) && (!empty($tmp)?count($tmp):0) > 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(' <',' &lt;',$selected);
$selected = str_replace('>','&gt;',$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." &lt;".$own."&gt;";
}
$i=0;
foreach($email_addr AS $mail)
{
if($absendernamefirma[$i]['absendername']!="" && $mail['email']!="")
$emails[] = $absendernamefirma[$i]['absendername']." &lt;".$mail['email']."&gt;";
}
if($this->app->User->GetField("email_bevorzugen")!="1")
{
if($own!='' && $name!='')
$emails[] = $name." &lt;".$own."&gt;";
}
$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");
*/
// Force only existing emailbackup accounts
// $tpl = "<option value=\"\">-</option>";
$email_addr = $this->app->DB->SelectArr("SELECT email, angezeigtername FROM emailbackup WHERE email != '' AND (adresse<=0 OR adresse='".$this->app->User->GetAdresse()."') AND geloescht!=1 ORDER BY email");
if (empty($email_addr)) {
return "";
}
foreach($email_addr AS $mail)
{
if($mail['angezeigtername']!="") $emails[] = $mail['angezeigtername']." &lt;".$mail['email']."&gt;";
else $emails[] = $firmenname." &lt;".$mail['email']."&gt;";
}
$emails = array_keys(array_flip($emails));
for($i=0;$i<(!empty($emails)?count($emails):0);$i++)
{
if($emails[$i]===$selected) $mark="selected"; else $mark="";
$tpl .="<option value=\"{$emails[$i]}\" $mark>{$emails[$i]}</option>";
}
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");
*/
// Force only existing emailbackup accounts
$tpl = "<option value=\"\">-</option>";
$email_addr = $this->app->DB->SelectArr("SELECT email FROM emailbackup WHERE email != '' AND (adresse<=0 OR adresse='".$this->app->User->GetAdresse()."') AND geloescht!=1 ORDER BY email");
if (empty($email_addr)) {
return "";
}
foreach($email_addr AS $mail) {
$emails[] = $mail['email'];
}
$emails = array_keys(array_flip($emails));
for($i=0;$i<(!empty($emails)?count($emails):0);$i++)
{
if($emails[$i]==$selected) {
$mark="selected";
}
else {
$mark="";
}
$tpl .="<option value=\"{$emails[$i]}\" $mark>{$emails[$i]}</option>";
}
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 .= "<option value=\"".$row['id']."\">".$row['result']."</option>";
}
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,' &lt;',email,'&gt;') 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,' &lt;',email,'&gt;') FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
$others = $this->app->DB->SelectArr("SELECT id, CONCAT(name,' (',bereich,')',' &lt;',email,'&gt;') as name FROM ansprechpartner WHERE adresse='$adresse'");
$tpl ="<option value=\"0\">$first</option>";
for($i=0;$i<(!empty($others)?count($others):0);$i++)
{
if($others[$i]['id']==$selected) $mark="selected"; else $mark="";
$tpl .="<option value=\"".$others[$i]['id']."\" $mark>{$others[$i]['name']}</option>";
}
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;$i<(!empty($user)?count($user):0);$i++)
{
$tpl[$user[$i]['id']]=$user[$i]['aufgabe'];
}
return $tpl;
}
function GetMitarbeiter()
{
$user = $this->app->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;$i<(!empty($user)?count($user):0);$i++)
{
$tmp[$i]['id'] = $user[$i]['id'];
$tmp[$i]['name'] = $user[$i]['name'];
}
return $tmp;
}
function GetReisekostenartAssoc()
{
$user = $this->app->DB->SelectArr("SELECT * FROM reisekostenart ORDER by nummer");
for($i=0;$i<(!empty($user)?count($user):0);$i++)
{
$tmp[(string)$user[$i]['id']] = "{$user[$i]['nummer']}- {$user[$i]['beschreibung']}";
}
return $tmp;
}
function GetSelectBezahltWie()
{
$tmp = $this->GetBezahltWieAssoc();
foreach($tmp as $key=>$value)
$result .= "<option value=\"$key\">$value</option>";
return $result;
}
function GetLagerRegalart($selected="")
{
$tmp = array('Fachboden','Palette');
foreach($tmp as $key=>$value)
{
if($value==$selected) $mark="selected"; else $mark="";
$tpl .="<option value=\"".$value."\" $mark>{$value}</option>";
}
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 .="<option value=\"".$key."\" $mark>{$value}</option>";
}
return $tpl;
}
function GetSelectEtiketten($art,$selected="")
{
$user = $this->app->DB->SelectArr("SELECT * FROM etiketten WHERE verwendenals='$art' ORDER by name");
if (!is_null($user)) {
for($i=0;$i<(!empty($user)?count($user):0);$i++)
{
if($user[$i]['id']==$selected) $mark="selected"; else $mark="";
$tpl .="<option value=\"{$user[$i]['id']}\" $mark>{$user[$i]['name']}</option>";
}
}
return $tpl;
}
function GetKalkulationartAssoc()
{
$user['artikel']="Artikel aus Stammdaten";
$user['stueckliste']="St&uuml;ckliste";
$user['freieposition']="Freie Position";
$user['maschinenzeit']="Maschinenzeit";
$user['arbeitszeit']="Arbeitszeit";
$user['einmalkosten']="Einmalkosten / Werkzeugkosten";
// $user['teilprojekt']="Teilprojekt / Aufgabe";
// $user['hauptpunkt']="Beschriftung f&uuml;r Gruppe";
// $user['unterpunkt']="Beschriftung f&uuml;r Untergruppe";
$user['zwischensumme']="Zwischensumme";
$user['zwischensummemengex']="Zwischensumme f&uuml;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 .="<option value=\"$key\" $mark>$value</option>";
}
return $tpl;
}
function GetSelectReisekostenart($selected="")
{
$user = $this->app->DB->SelectArr("SELECT * FROM reisekostenart ORDER by nummer");
for($i=0;$i<(!empty($user)?count($user):0);$i++)
{
if($user[$i]['id']==$selected) $mark="selected"; else $mark="";
$tpl .="<option value=\"{$user[$i]['id']}\" $mark>{$user[$i]['nummer']}- {$user[$i]['beschreibung']}</option>";
}
return $tpl;
}
function GetSelectUserVorlage($selected="",$disableid="")
{
$user = $this->app->DB->SelectArr("SELECT * FROM uservorlage WHERE id!='$disableid' ORDER by bezeichnung");
for($i=0;$i<(!empty($user)?count($user):0);$i++)
{
if($user[$i]['id']==$selected) $mark=" selected"; else $mark="";
$tpl .="<option value=\"{$user[$i]['id']}\"$mark>{$user[$i]['bezeichnung']}</option>";
}
return $tpl;
}
function GetSelectUser($selected="",$disableid="")
{
$user = $this->app->DB->SelectArr("SELECT * FROM user WHERE id!='$disableid'");
for($i=0;$i<(!empty($user)?count($user):0);$i++)
{
$user[$i]['description'] = $this->app->DB->Select("SELECT name FROM adresse WHERE id='".$user[$i]['adresse']."' LIMIT 1");
if($user[$i]['id']==$selected) $mark="selected"; else $mark="";
$tpl .="<option value=\"{$user[$i]['id']}\" $mark>{$user[$i]['description']}</option>";
}
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 .= '<option value="'.$id.'" '.$mark.'>'.$konto.'</option>';
}
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 .="<option value=\"0\" selected>-- kein --</option>";
else
$tpl .="<option value=\"0\">-- kein --</option>";
$drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='2'");
for($i=0;$i<(!empty($drucker)?count($drucker):0);$i++)
{
if($drucker[$i]['id']==$selected) $mark="selected"; else $mark="";
$tpl .="<option value=\"{$drucker[$i]['id']}\" $mark>{$drucker[$i]['name']}</option>";
}
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 .="<option value=\"0\">-- kein --</option>";
$drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='1'");
if (gettype($drucker) == 'array') {
for($i=0;$i<(!empty($drucker)?count($drucker):0);$i++)
{
if($drucker[$i]['id']==$selected) $mark="selected"; else $mark="";
$tpl .="<option value=\"{$drucker[$i]['id']}\" $mark>{$drucker[$i]['name']}</option>";
}
}
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 ="<option value=\"0\">-- kein --</option>";
for($i=0;$i<(!empty($drucker)?count($drucker):0);$i++)
{
if($drucker[$i]['id']==$selected) $mark="selected"; else $mark="";
$tpl .="<option value=\"{$drucker[$i]['id']}\" $mark>{$drucker[$i]['bezeichnung']}</option>";
}
return $tpl;
}
function GetPosAdapterbox()
{
$drucker = $this->app->DB->SelectArr("SELECT id, bezeichnung FROM adapterbox WHERE verwendenals='bondrucker' OR verwendenals='rksvlight'");
for($i=0;$i<(!empty($drucker)?count($drucker):0);$i++)
{
$result[$drucker[$i]['id']]=$drucker[$i]['bezeichnung'];
}
return $result;
}
function GetBondrucker()
{
$drucker = $this->app->DB->SelectArr("SELECT id, bezeichnung FROM adapterbox WHERE verwendenals='bondrucker'");
for($i=0;$i<(!empty($drucker)?count($drucker):0);$i++)
{
$result[$drucker[$i]['id']]=$drucker[$i]['bezeichnung'];
}
return $result;
}
function GetEtiketten()
{
//$tpl .="<option value=\"0\">-- kein --</option>";
$drucker = $this->app->DB->SelectArr("SELECT id, name FROM etiketten");
for($i=0;$i<(!empty($drucker)?count($drucker):0);$i++)
{
$result[$drucker[$i]['id']]=$drucker[$i]['name'];
}
return $result;
}
function GetWaage()
{
//$tpl .="<option value=\"0\">-- kein --</option>";
$drucker = $this->app->DB->SelectArr("SELECT id, bezeichnung FROM adapterbox WHERE verwendenals='waage'");
for($i=0;$i<(!empty($drucker)?count($drucker):0);$i++)
{
$result[$drucker[$i]['id']]=$drucker[$i]['bezeichnung'];
}
return $result;
}
function GetEtikettendrucker()
{
//$tpl .="<option value=\"0\">-- kein --</option>";
$drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='2'");
for($i=0;$i<(!empty($drucker)?count($drucker):0);$i++)
{
$result[$drucker[$i]['id']]=$drucker[$i]['name'];
}
return $result;
}
function GetDrucker()
{
$drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='0'");
for($i=0;$i<(!empty($drucker)?count($drucker):0);$i++)
{
$result[$drucker[$i]['id']]=$drucker[$i]['name'];
}
return $result;
}
function GetSelectVersanddrucker($selected="")
{
if($selected=="")
$selected = $this->app->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 ="<option value=\"0\">-- kein --</option>";
$drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='0'");
for($i=0;$i<(!empty($drucker)?count($drucker):0);$i++)
{
if($drucker[$i]['id']==$selected) $mark="selected"; else $mark="";
$tpl .="<option value=\"{$drucker[$i]['id']}\" $mark>{$drucker[$i]['name']}</option>";
}
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 .="<option value=\"0\">-- kein --</option>";
$drucker = $this->app->DB->SelectArr("SELECT id, name FROM drucker WHERE aktiv='1' AND art='0'");
for($i=0;$i<(!empty($drucker)?count($drucker):0);$i++)
{
if($drucker[$i]['id']==$selected) $mark="selected"; else $mark="";
$tpl .="<option value=\"{$drucker[$i]['id']}\" $mark>{$drucker[$i]['name']}</option>";
}
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", "<br>", $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 <admin@test.de>'
// 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('&lt;','<',$ansprechpartner);
$ansprechpartner = str_replace('&gt;','>',$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;$tmpis<(!empty($tmpsenden)?count($tmpsenden):0);$tmpis++)
{
$deckblatt = false;
//BRIEFCHECKED
$art = $tmpsenden[$tmpis];
if($art!='' && !empty($this->app->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] = (!empty($_dateien)?count($_dateien):0)-1;
$zuloeschen[] = rtrim($this->app->erp->GetTMP(),'/')."/".$dateiname;
}
}else{
$_dateien[] = $dateiname;
$dateisort = $pk;
if($dateisort)$dateiensort[$dateisort] = (!empty($_dateien)?count($_dateien):0)-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] = (!empty($_dateien)?count($_dateien):0)-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,"<div class=\"info\">Dokument wurde erfolgreich versendet</div>");
/* 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,"<div class=\"error\">$ret</div>");
}
} 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',"<div class=\"info\">Die &Auml;nderungen wurden gespeichert.</div>");
} 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',"<div class=\"error\">Es wurde ein neues Dokument wurde angelegt, da das alte Dokument bereits versendet worden ist.</div>");
}
} 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',"<div class=\"info\">Die &Auml;nderungen wurden gespeichert.</div>");
} 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',"<div class=\"error\">Es wurde ein neues Dokument wurde angelegt, da das alte Dokument bereits versendet worden ist.</div>");
}
}
}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 = "<option value=\"{$data[0]['name']} <{$data[0]['email']}>\" selected>{$data[0]['name']} &lt;{$data[0]['email']}&gt;</option>";
}
else
$result = "<option value=\"{$data[0]['name']} <{$data[0]['email']}>\">{$data[0]['name']} &lt;{$data[0]['email']}&gt;</option>";
$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<(!empty($data)?count($data):0);$i++)
{
if($data[$i]['email']!=$tmp_mail && $data[$i]['name']!=$tmp_name)
{
if($data[$i]['email']==$tmp_mail)
$result .= "<option value=\"".addslashes($data[$i]['name'])." &lt;{$data[$i]['email']}&gt;\" selected>{$data[$i]['name']} &lt;{$data[$i]['email']}&gt;</option>";
else
$result .= "<option value=\"".addslashes($data[$i]['name'])." &lt;{$data[$i]['email']}&gt;\">{$data[$i]['name']} &lt;{$data[$i]['email']}&gt;</option>";
}
}
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 = "<td width=40 nowrap><img src=\"themes/new/images/down.png\" onclick=\"daup(".$dv['id'].")\" /><img src=\"themes/new/images/up.png\" onclick=\"dadown(".$dv['id'].")\" /></td>";
} else $extraspalte="<td width=40>&nbsp;</td>";
$this->app->Tpl->Add('DATEIANHAENGE','<tr><td width=20 id="td_'.$dv['id'].'"><input type="hidden" name="dateisort_'.$dv['datei'].'" value="'.($dk+1).'" /><input type="checkbox" value="1" name="datei_'.$dv['datei'].'" '.$checked.'></td><td><a target="_blank" style="font-weight:normal;color:black;" href="index.php?module=dateien&action=download&typ='.$dokument.'&id='.$dv['datei'].'">'.$dateiname.'</a></td>'.$extraspalte.'</tr>');
}
} else {
$this->app->Tpl->Add('DATEIANHAENGE','<tr><td colspan="3" align="center"><i>Keine Anh&auml;nge vorhanden. <br>Dateien k&ouml;nnen unter dem Reiter "Dateien" <br>als Anhang dem Dokument <br>angeh&auml;ngt werden.</i></td></tr>');
}
$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((!empty($tmp)?count($tmp):0)>0)
{
$this->app->Tpl->Set('HISTORIE',"<table align=\"left\" width=780>");
$this->app->Tpl->Add('HISTORIE',"<tr valign=\"top\"><td style=\"font-size: 8pt\"><b>Zeit</b></td><td style=\"font-size: 8pt\"><b>An</b></td><td style=\"font-size: 8pt\"><b>Von</b></td>
<td style=\"font-size: 8pt\"><b>Art</b></td>
<td style=\"font-size: 8pt\"><b>Anschreiben</b></td><td style=\"font-size: 8pt\"><b>Dokument</b></td></tr>");
for($i=0;$i<(!empty($tmp)?count($tmp):0);$i++)
{
if($tmp[$i]['versendet']==0) $tmp[$i]['versendet'] = "nein"; else $tmp[$i]['versendet'] = "ja";
//$tmp_name = $this->app->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 = '<a href="index.php?module=dateien&action=send&id='.$tmp[$i]['dateiid'].'"><img src="./themes/[THEME]/images/pdf.svg" border="0"></a>';
else $tmppdf="";
$this->app->Tpl->Add('HISTORIE','<tr valign="top"><td style="font-size: 8pt">'.$tmp[$i]['datum'].'</td>
<td style="font-size: 8pt">'.$tmp_name.'</td><td style="font-size: 8pt">'.$tmp[$i]['bearbeiter'].'</td>
<td style="font-size: 8pt">'.ucfirst($tmp[$i]['art']).'</td>
<td style="font-size: 8pt" align="center"><a href="index.php?module=adresse&action=briefpdf&type='.$module.'&typeid='.$id.'&sid='.$tmp[$i]['id'].'"><img src="./themes/[THEME]/images/pdf.svg" border="0"></a></td>
<td style="font-size: 8pt" align="center">'.$tmppdf.'</td>
</tr>');
}
$this->app->Tpl->Add('HISTORIE',"</table>");
} else { $this->app->Tpl->Set('HISTORIE',"<div class=\"info\">Dieses Dokument wurde noch nicht versendet!</div>"); }
if (gettype($attachments) == 'string') {
$attachments = (Array) $attachments;
}
for($i=0;$i<(!empty($attachments)?count($attachments):0);$i++)
{
$this->app->Tpl->Add('ANHAENGE',"<a href=\"\">".basename($attachments[$i])."</a>&nbsp;");
}
if((!empty($attachments)?count($attachments):0)==0) $this->app->Tpl->Add('ANHAENGE',"keine Anh&auml;nge vorhanden");
if((!empty($tmp)?count($tmp):0)>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");
$from_name = $this->app->DB->Select("SELECT wert FROM firmendaten_werte WHERE name = 'absendername' 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 .= "<option value=\"$value\" $tmp>$value</option>";
}
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 .= "<option value=\"$value\" $tmp>$value %</option>";
}
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 .= "<option value=\"$value\" $tmp>$value</option>";
}
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 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);
}
/*
* Return 0 = not ok, return 1 = ok
* $to, $to_name, $cc, $bcc can be csv or arrays
*/
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=="") {
$this->mail_error = "Mailer Error: " . "Empty mail.";
return 0;
}
/* $isSystemTemplate = $system && is_file(dirname(__DIR__, 2) .'/classes/Modules/Company/templates/systemmail.tpl');
if($isSystemTemplate) {
$signature = false;
}*/
if($projekt > 0 && $this->Projektdaten($projekt,"absendeadresse")!=""){
$from = $this->Projektdaten($projekt, "absendeadresse");
}
$from_name = $this->ClearDataBeforeOutput($from_name);
$from_name = $this->ReadyForPDF($from_name);
$betreff = $this->ReadyForPDF($betreff);
$text = $this->ReadyForPDF($text);
$text = str_replace('€','&euro;',$text);
/* $text = htmlspecialchars_decode(
htmlentities($text, ENT_NOQUOTES, 'UTF-8', false)
, ENT_NOQUOTES
); */
if($signature)
{
$eigenesignatur = $this->app->DB->Select("SELECT eigenesignatur FROM emailbackup WHERE email='$from' AND email !='' AND geloescht!=1 LIMIT 1");
if(strlen(trim($this->Signatur($from))) > 0 && $eigenesignatur == 1)
{
$signaturtext = $this->Signatur($from);
if($this->isHTML($signaturtext))
$body = utf8_decode(str_replace('\r\n',"\n",$text))."<br>".$signaturtext;
else
$body = utf8_decode(str_replace('\r\n',"\n",$text))."<br>".nl2br($signaturtext);
}else{
if($projekt > 0 && $this->Projektdaten($projekt,"absendesignatur")!=""){
$signaturtext = $this->Projektdaten($projekt,"absendesignatur");
if($this->isHTML($signaturtext))
$body = utf8_decode(str_replace('\r\n',"\n",$text))."<br><br>".$signaturtext;
else
$body = utf8_decode(str_replace('\r\n',"\n",$text))."<br><br>".$this->ReadyForPDF(nl2br($signaturtext));
}else{
if(strlen(trim($this->Signatur($from))) > 0 && $eigenesignatur == 0){
$signaturtext = $this->Signatur($from);
if($this->isHTML($signaturtext))
$body = str_replace('\r\n',"\n",$text)."<br>".$signaturtext;
else
$body = utf8_decode(str_replace('\r\n',"\n",$text))."<br>".nl2br($signaturtext);
}else{
$body = utf8_decode(str_replace('\r\n',"\n",$text));
}
}
}
} else {
$body = utf8_decode(str_replace('\r\n',"\n",$text));
}
{
$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( "#((&nbsp;|\s|<br>)+$)#", "", trim($email_html_template) );
$body = str_replace('{CONTENT}',$body,$email_html_template);
}
$sysMailerSent = false;
$sysMailer = null;
$emailObj = null;
if ($this->app->Container->has('SystemMailer')) {
$sysMailer = $this->app->Container->get('SystemMailer');
}
if ($sysMailer !== null) {
$recipients = [];
$to_csv = "";
$to_name_csv = "";
// Prepare names and addresses
if (is_array($to)) {
foreach ($to as $item) {
$to_array[] = $item;
$to_csv .= $item;
}
} else if (!empty($to)) {
foreach (explode(',',str_replace(" ","",$to)) as $item) {
$to_array[] = $item;
$to_csv .= $item;
}
}
if (is_array($to_name)) {
foreach ($to_name as $item) {
$to_name_array[] = $item;
$to_name_csv .= $item;
}
} else if (!empty($to_name)) {
foreach (explode(',',str_replace(" ","",$to_name)) as $item) {
$to_name_array[] = $item;
$to_name_csv .= $item;
}
}
// Fill empty names with address
$number_of_names = empty($to_name_array)?0:count($to_name_array);
if (count($to_array) > $number_of_names) {
$itemcount = 0;
foreach ($to_array as $item) {
$itemcount++;
if ($itemcount > $number_of_names) {
$to_name_array[] = $item;
}
}
}
$to_combined_array = array_combine($to_array,$to_name_array);
foreach ($to_combined_array as $key => $value) {
$value = $this->ClearDataBeforeOutput($value);
$value = $this->ReadyForPDF($value);
$recipients[] = new EmailRecipient($key, $value);
}
$ccRecipients = [];
if (is_array($cc)) {
foreach ($cc as $item) {
$ccRecipients[] = new EmailRecipient($item, $item);
}
} else if (!empty($cc)) {
foreach (explode(',',str_replace(" ","",$cc)) as $item) {
$ccRecipients[] = new EmailRecipient($item, $item);
}
}
$bccRecipients = [];
if (is_array($bcc)) {
foreach ($bcc as $item) {
$bccRecipients[] = new EmailRecipient($item, $item);
}
} else if (!empty($bcc)) {
foreach (explode(',',str_replace(" ","",$bcc)) as $item) {
$bccRecipients[] = new EmailRecipient($item, $item);
}
}
$bcc3 = $this->Firmendaten('bcc3');
if($bcc3!="")
{
$bccRecipients[] = new EmailRecipient($bcc3, $bcc3);
}
// This will build the mail with phpmailer 6 and send it out
// There is no way to retrieve the created mail e.g. for IMAP output
// This should be migrated to laminas-mail (used for imap)
// Phpmailer 6 can then be removed
$sysMailerSent = $sysMailer->composeAndSendEmail(
$from,
$from_name,
$recipients,
$betreff,
$body,
$files,
$ccRecipients,
$bccRecipients,
$sendmail_error
);
}
if($sysMailerSent === false) {
$this->MailLogFile($from,$from_name,$to_csv,$to_name_csv,$betreff,$text,$files,$projekt,$signature,$cc,$bcc,$system);
$this->mail_error = "Mailer Error: " . $sendmail_error;
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: ".$sendmail_error,"alert",1);
}
return 0;
} else {
$this->MailLogFile($from,$from_name,$to_csv,$to_name_csv,$betreff,$text,$files,$projekt,$signature,$cc,$bcc,$system);
// Put the mail in IMAP sent folder
// Note that this is implemented with laminas-mail and only this
// The created mail may differ from the sent one because it is created by different libraries
$imap_aktiv = $this->app->DB->Select("SELECT imap_sentfolder_aktiv FROM emailbackup WHERE email='".$from."' AND imap_sentfolder!='' AND geloescht!=1 LIMIT 1");
if($imap_aktiv=="1" && !preg_match("/Xentral Kopie/",$to_name_csv) && !preg_match("/WaWision Kopie/",$to_name_csv))
{
// This will build the mail as EmailMessage (Xentral\Components\Mailer\Data) and then rebuild it with laminas-mail message to produce the raw output
$emailObj = $sysMailer->composeEmail(
$recipients,
$betreff,
$body,
$files,
$ccRecipients,
$bccRecipients
);
if ($emailObj !== null) {
/** @var MimeMessageFormatterInterface $formatter */
$formatter = $this->app->Container->get('MailClientMimeMessageFormatter');
$imapCopyMessage = $formatter->formatMessage(
$emailObj,
new EmailRecipient($from, $from_name)
);
} else {
$this->app->erp->LogFile("Mailer Error: Email could not be composed!");
}
// Load the mail to IMAP using laminas
try {
$imap_data = $this->app->DB->SelectRow("SELECT * FROM emailbackup WHERE email='".$from."' AND geloescht!=1 LIMIT 1");
$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("Mailer Error: " . (string) $e);
if(isset($this->app->User) && $this->app->User && method_exists($this->app->User, 'GetID'))
{
$this->app->erp->InternesEvent($this->app->User->GetID(),"IMAP-Fehler","alert",1);
}
return 0;
}
}
} // sysMailersent
$this->mail_error = "";
return 1;
}
function MailLogFile($from,$from_name,$to,$to_name,$betreff,$text,$files="",$projekt="",$signature=true,$cc="",$bcc="", $system = false)
{
$subject = $subject;
$body = $body;
$status = $errorinfo;
if($status!="") {
$status .= " (Host: ".$host." User: ".$username.") ";
}
$from = $this->app->DB->real_escape_string($from);
$to = $this->app->DB->real_escape_string($to);
$this->app->DB->Insert("INSERT INTO mailausgang (id,`subject`,`body`,`from`,`to`,`status`,zeit) VALUES ('','$subject','$body','$from','$to','$status',NOW())");
if($cc && (!empty($cc)?count($cc):0) > 0){
for ($i=0; $i < (!empty($cc)?count($cc):0); $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 && (!empty($bcc)?count($bcc):0) > 0){
for ($i=0; $i < (!empty($bcc)?count($bcc):0); $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='')
{
if ($sprache === '') {
$this->beschriftung_sprache='deutsch';
} else {
$this->beschriftung_sprache=strtolower(trim($sprache));
}
}
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)
{
$sprache = strtolower($sprache);
if(empty($this->uebersetzungId))
{
$arr = $this->app->DB->SelectArr('SELECT id, label, sprache, beschriftung, original
FROM uebersetzung
WHERE sprache <> "" AND label <> ""');
if(!empty($arr))
{
foreach($arr as $row)
{
$this->uebersetzungId[$row['label']][strtolower($row['sprache'])] = $row['id'];
if ($row['beschriftung'] != '') {
$this->uebersetzungBeschriftung[$row['label']][strtolower($row['sprache'])] = $row['beschriftung'];
} else {
$this->uebersetzungBeschriftung[$row['label']][strtolower($row['sprache'])] = $row['original'];
}
}
}
}
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;
}
return $field; // Not found!
}
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']."'");
}
}
else {
$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');
if ($this->app->DB->Select("SHOW COLUMNS FROM firmendaten LIKE '$field'")) {
$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 = "<br><br>".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 "<br><br>".$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&auml;ren','abgeschlossen'=>'abgeschlossen','spam'=>'Papierkorb');
foreach($stati as $key=>$value)
{
if($status==$key) $selected="selected"; else $selected="";
$ret .="<option value=\"$key\" $selected>$value</option>";
}
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 .="<option value=\"$key\" $selected>$value</option>";
}
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&uuml;ckgut','stange'=>'Stange','palette'=>'Palette');
}
function GetUmsatzsteuerklasse()
{
return array('normal'=>'normal','ermaessigt'=>'erm&auml;&szlig;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((!empty($result)?count($result):0) > 0) $tmp = array();
for($i=0;$i<(!empty($result)?count($result):0);$i++)
{
$tmp[$result[$i]['id']]=$result[$i]['name'];
}
$tmp['keineetiketten']="Kein Etikett";
return $tmp;
}
function AddWaehrungumrechnung($waehrung_von, $waehrung_nach, $kurs, $gueltig_bis = "", $kommentar = "", $user = "")
{
/** @var Waehrungumrechnung $obj */
$obj = $this->LoadModul('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&uuml;hr','betriebsstoff'=>'Betriebsstoff','buerobedarf'=>'B&uuml;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:'')."<option value=\"{$tmp[$i]['id']}\" selected
style=\"background-color:{$tmp[$i]['farbe']};\">{$tmp[$i]['name']}</option>";
$color_selected = $tmp[$i]['farbe'];
}
else{
$options = (isset($options) ? $options : '') . "<option value=\"{$tmp[$i]['id']}\"
style=\"background-color:{$tmp[$i]['farbe']};\">{$tmp[$i]['name']}</option>";
}
}
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<(!empty($tmp)?count($tmp):0);$i++)
{
$result[$tmp[$i]['type']]=$tmp[$i]['bezeichnung'];
}
}
return $result;
}
function GetVersandartLieferant()
{
return array('DHL','DPD','Hermes','UPS','GLS','Post','Spedition','Selbstabholer','Packstation');
}
function GetArtikeleigenschaft($projekt="")
{
if($projekt > 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((!empty($result)?count($result):0)<=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((!empty($result)?count($result):0) > 0)
{
for($i=0;$i<(!empty($result)?count($result):0);$i++)
{
$tmp[$result[$i]['id']]=$result[$i]['name'];
}
return $tmp;
}
}
function GetArtikelgruppe($projekt="")
{
if($projekt > 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((!empty($result)?count($result):0)<=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 && (!empty($result)?count($result):0) > 0)
{
for($i=0;$i<(!empty($result)?count($result):0);$i++)
{
$tmp[$result[$i]['id']."_kat"]=$result[$i]['bezeichnung'];
}
return $tmp;
}
return array("produkt"=>"Ware f&uuml;r Verkauf (700000)",
"module"=>"Module / Hardware (600000)",
"produktion"=>"Produktionsmaterial (400000)",
"material"=>"Sonstiges (100000)",
"fremdleistung"=>"Fremdleistung (100000)",
"gebuehr"=>"Geb&uuml;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'=>'&Uuml;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&uuml;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'] = '&Uuml;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&uuml;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<(!empty($tmp)?count($tmp):0);$i++)
{
if($tmp[$i]['alias'] != '' && $wert != $tmp[$i]['iso'])
{
if($tmp[$i]['aktiv'])
{
if($tmp[$i]['alias'] == 'deutsch')$deutschfound = true;
if($tmp[$i]['alias'] == 'englisch')$englischfound = true;
$result[$tmp[$i]['alias']] = $tmp[$i]['bezeichnung_de'];
}
}else{
if($wert == $tmp[$i]['alias'] && $wert <> '')
{
$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&auml;hlen';
for($i=0;$i<(!empty($tmp)?count($tmp):0);$i++)
$result[$tmp[$i]['type']]=$tmp[$i]['bezeichnung'];
return $result;
}
function GetArtikelWarengruppe()
{
//return array('SMD','THT','EBG','BGP');
$tmp = array('','Bauteil','Eval-Board','Adapter','Progammer','Ger&auml;t','Kabel','Software','Dienstleistung','Spezifikation');
sort($tmp);
return $tmp;
}
function GetBezahltWieAssoc()
{
return array('privat'=>"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&uuml;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 .= "<option value=\"$key\" $tmp>$value</option>";
}
return $ret;
}
function GetSelect($array, $selected)
{
foreach($array as $value)
{
if($selected==$value) $tmp = "selected"; else $tmp="";
$ret .= "<option value=\"$value\" $tmp>$value</option>";
}
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("'", '&apos;',$arr[0][$value]);
$uparr[$value] = str_replace("'", '&apos;',$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',
"<fieldset><legend>Info f&uuml;r Angebots- und Auftragserfassung</legend>
<textarea id=\"readonlybox\" rows=12>$infoauftragserfassung</textarea></fieldset>"
);
}
function MarkerUseredit($feld1,$useredittimestamp)
{
$usereditid = str_replace("useredittimestamp","usereditid",$useredittimestamp);
return "CONCAT($feld1,' ',IFNULL(if(TIME_TO_SEC(TIMEDIFF(NOW(), $useredittimestamp)) < 45,CONCAT('<br><font color=red><b>(in Bearbeitung von ', (SELECT a2.name FROM user u2 LEFT JOIN adresse a2 ON a2.id=u2.adresse WHERE u2.id=$usereditid LIMIT 1),')</b></font>'),''),''))";
}
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 = "<input type=\"button\" value=\"Dokument &uuml;bernehmen\" onclick=\"if(!confirm('Soll diese Oberfl&auml;che wirklich &uuml;bernommen werden? Alle Aktionen werden bei dem angemeldeten Mitarbeiter abgebrochen.')) return false;else window.location.href='index.php?module=welcome&action=unlock&id=$id&gui=$modul".($backlink?"&backlink=".urlencode($backlink):'')."';\">";
} else {
$this->SystemLog("Fehlendes Recht",1,"","welcome","unlock");
}
$this->app->Tpl->Set('TAB1',"<div class=\"error\">Achtung dieses Dokument wird aktuell durch Mitarbeiter: <b>$user_name</b> bearbeitet! $open</div>");
$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 = "<input type=\"button\" value=\"Modul &uuml;bernehmen\" onclick=\"if(!confirm('Soll diese Oberfl&auml;che wirklich &uuml;bernommen werden? Alle Aktionen werden bei dem angemeldeten Mitarbeiter abgebrochen.')) return false;else window.location.href='index.php?module=welcome&action=unlockmodul&smodule=$modul&saction=$action';\">";
$open = '<form method="POST" id="frmLockModul"><input type="hidden" name="unlock" value="1" /><input type="button" onclick="if(!confirm(\'Soll diese Oberfl&auml;che wirklich &uuml;bernommen werden? Alle Aktionen werden bei dem angemeldeten Mitarbeiter abgebrochen.\')) return false;else document.getElementById(\'frmLockModul\').submit();" value="Modul &uuml;bernehmen" /></form>';
} else {
$this->SystemLog("Fehlendes Recht",1,"","welcome","unlock");
}
$this->app->Tpl->Set('TAB1',"<div class=\"error\">Achtung dieses Modul wird aktuell durch Mitarbeiter: <b>$user_name</b> bearbeitet! $open</div>");
$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', " <br><font color=red>Kundenrabatt: $rabatt%</font>");
}
else {
if($this->Firmendaten('modul_verband')=='1') //CLAUDI
{
$this->app->Tpl->Set('RABATTANZEIGE'," <br><font color=red>Verbandsrabatt: $rabatt%</font>");
}
else {
$this->app->Tpl->Set('RABATTANZEIGE'," <br><font color=red>Preisgruppenrabatt: $rabatt%</font>");
}
}
} else {
$this->app->Tpl->Set('STARTDISABLEVERBAND',"<!--");
$this->app->Tpl->Set('ENDEDISABLEVERBAND',"-->");
}
//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',"<textarea cols=\"80\" rows=\"15\" id=\"readonlybox2\">$gruppeinternebemerkung</textarea>");
}
else {
$gruppe_name = '';
$rabattinformation = $this->app->DB->Select("SELECT rabattinformation FROM adresse WHERE id='$adresse' LIMIT 1");
$this->app->Tpl->Set('VERBANDINFO',"<textarea cols=\"80\" rows=\"15\" id=\"readonlybox2\">$rabattinformation</textarea>");
}
if($this->RechteVorhanden($module,'deleterabatte')) {
$this->app->Tpl->Set('VERBAND',"<input type=\"text\" value=\"$gruppe_name\" size=\"38\" readonly>&nbsp;<input type=\"button\"
onclick=\"if(!confirm('Wirklich die Verbandsinformation neu laden?')) return false; else window.location.href='index.php?module=".$module."&action=updateverband&id=".$id."';\"
value=\"Verband neu laden\">");
}
else {
$this->app->Tpl->Set('VERBAND',"<input type=\"text\" value=\"$gruppe_name\" size=\"38\" readonly>");
}
}
}
// 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("'", '&apos;',$this->app->Secure->POST[$value]);
} else {
$this->app->Secure->POST[$value] = $arr[0][$value];
$uparr[$value] = str_replace("'", '&apos;',$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("'", '&apos;',$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("'", '&apos;',$this->app->Secure->POST[$value]);
} else {
$this->app->Secure->POST[$value] = str_replace("'", '&apos;',$arr[0][$value]);
$uparr[$value] = str_replace("'", '&apos;',$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 < (!empty($arbeitspakete)?count($arbeitspakete):0); $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 = !empty($portoartikel)?$portoartikelArr[$pos[(int) $i]]:0;
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 == (!empty($pos)?count($pos):0) -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 = (!empty($arr)?count($arr):0);
$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 = (!empty($pos)?count($pos):0);
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;$i<(!empty($pos)?count($pos):0);$i++){
$this->app->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;$i<(!empty($arr)?count($arr):0);$i++)
{
}
}
function CreateVerbindlichkeit($adresse="")
{
/** @var Verbindlichkeit $obj */
$obj = $this->app->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&uuml;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 = ' ORDER BY projekt DESC';
}
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<(!empty($zahlungen)?count($zahlungen):0);$i++)
{
if($zahlungen[$i]['betrag'] > $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 || empty($differenztage)) {
$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 = (!empty($taxesToAdd)?count($taxesToAdd):0)-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 = (!empty($taxesToAdd)?count($taxesToAdd):0)-1;
$taxesToAdd[] = $taxesToAdd[$taxToaddKey];
$taxToaddKey = (!empty($taxesToAdd)?count($taxesToAdd):0)-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;$gi<(!empty($gruppenarray)?count($gruppenarray):0);$gi++)
{
$sql_erweiterung .= " id='".$gruppenarray[$gi]."' ";
if($gi<(!empty($gruppenarray)?count($gruppenarray):0)-1)
$sql_erweiterung .= " OR ";
}
$checkgruppeportofrei = $this->app->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 .= "<option value=\"".$value["id"]."\"$tmp>".$value["name"]."</option>";
}
return $ret;
}
function GetKwSelect($selectedKW="")
{
$ret = '';
foreach(range(1,52) as $kw)
{
$tmp = ($selectedKW==$kw)?" selected=\"selected\"":"";
$ret .= "<option value=\"$kw\"$tmp>$kw</option>";
}
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 .= "<option value=\"$year\"$tmp>$year</option>";
}
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 && (!empty($ids)?count($ids):0) > 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[(!empty($pathArr)?count($pathArr):0) - 1],0,1) !== 'd') {
unset($pathArr[(!empty($pathArr)?count($pathArr):0) - 1]);
}
if(empty($pathArr) || !is_dir($prefix.'/'.implode('/', $pathArr))) {
return;
}
$glob = glob($prefix.implode('/', $pathArr).'/*'); /**/
if(!empty($glob)) {
return;
}
if(@rmdir($prefix.implode('/', $pathArr)) && (!empty($pathArr)?count($pathArr):0) > 1) {
unset($pathArr[(!empty($pathArr)?count($pathArr):0) - 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) && (!empty($caches)?count($caches):0) > 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) && (!empty($caches)?count($caches):0) > 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);
return $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']);
}
/*
* Retrieve files from stichwoerter and provide them in tmp for access
*/
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);
$tmpname = $this->GetTMP().md5(uniqid(mt_rand(), true));
mkdir ($tmpname);
$newname = $tmpname."/".$this->GetDateiName($datei['datei']);
copy($this->GetDateiPfad($datei['datei']),$newname);
$tmp[] = $newname;
}
return $tmp;
}
function GetDateiStichwoerter($dateiid) {
$stichwoerter = $this->app->DB->SelectArr("SELECT subjekt, objekt, parameter FROM datei_stichwoerter WHERE datei=".$dateiid);
if (empty($stichwoerter)) {
return null;
}
else {
return $stichwoerter;
}
}
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']);
$tmp[] = $datei['datei']; // return the datei id
}
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:(!empty($zusaetzlicheStichworter)?count($zusaetzlicheStichworter):0);
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] = '<div style="background-color: '.$color.'">'.$result[0]['aufgabe'].'</div>';
}
else
$zeile[$zeileCount] = "&nbsp;";
$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,"<table><tr><td style=\"background-color:#BCEE68\">".$this->app->User->GetName()."</td>
<td style=\"background-color:red\">Prio: Sehr Hoch (".$this->app->User->GetName().")</td>
<td style=\"background-color:#ccc\">Allgemein</td></tr></table>");
}
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 = '<tr>';
if($erstefrei=="frei")
$row = $row.'<td class="wochenplan">&nbsp;</td>';
else
$row = $row.'<td class="wochenplan">'.$erstefrei.'</td>';
for($i=0;$i<$spalten; $i++)
$row = $row.'<td class="wochenplan">'.$data[$i].'</td>';
$row = $row.'</tr>';
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."<br>";
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 &uuml;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&ouml;&szlig;e von ' . ($fileSizeLimit / 8388608) . ' MB nicht &uuml;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((!empty($gruppenarray)?count($gruppenarray):0)>0) $sql_erweiterung = " OR ";
for($gi=0;$gi<(!empty($gruppenarray)?count($gruppenarray):0);$gi++) {
$sql_erweiterung .= " gruppe='" . $gruppenarray[$gi] . "' ";
if ($gi < (!empty($gruppenarray)?count($gruppenarray):0) - 1)
$sql_erweiterung .= " OR ";
}
}
if(is_null($rabatt)) {
$rabatt = 0;
}
if(!$guenstigste_vk)
{
$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' 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];
}
if (!is_null($vkarr2)) {
$vkarr = array_reverse($vkarr2);
}
else {
$vkarr = $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<(!empty($vkarr)?count($vkarr):0);$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'];
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<(!empty($vkarr)?count($vkarr):0);$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'];
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 < (!empty($gruppenarr)?count($gruppenarr):0); $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<(!empty($vkarr)?count($vkarr):0);$vi++)
{
if(($vkarr[$vi]['ab_menge'] > $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','<!--');
$this->app->Tpl->Set('FREIFELD'.$i.'ENDE','-->');
}
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 = "<input type=\"checkbox\" value=\"1\" ".($check=="1"?"checked":"")." name=\"".$doctype."_create_entwurfsdatumuebernehmen\" id=\"".$doctype."_create_entwurfsdatumuebernehmen\">&nbsp;Entwurfsdatum vom <strong>$anzeigedatum</strong> ü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((!empty($subtmp)?count($subtmp):0)>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 '';
}