diff --git a/conf/main.conf.php.tpl b/conf/main.conf.php.tpl
index ede820b2..dd1d1cc0 100644
--- a/conf/main.conf.php.tpl
+++ b/conf/main.conf.php.tpl
@@ -12,7 +12,7 @@
class Config
{
/** @var string */
- public $updateHost = 'update.xentral.biz';
+ public $updateHost = 'removed.upgrade.host';
public function __construct()
{
diff --git a/cronjobs/autoversand_manuell.php b/cronjobs/autoversand_manuell.php
new file mode 100644
index 00000000..99c2654d
--- /dev/null
+++ b/cronjobs/autoversand_manuell.php
@@ -0,0 +1,114 @@
+Conf)){
+ $conf = new Config();
+ $app->Conf = $conf;
+}
+if(empty($app->DB) || empty($app->DB->connection)){
+ $app->DB = new DB($app->Conf->WFdbhost, $app->Conf->WFdbname, $app->Conf->WFdbuser, $app->Conf->WFdbpass, null, $app->Conf->WFdbport);
+}
+if(empty($app->erp)){
+ if(class_exists('erpAPICustom')){
+ $erp = new erpAPICustom($app);
+ }else{
+ $erp = new erpAPI($app);
+ }
+ $app->erp = $erp;
+}
+$app->String = new WawiString();
+if(class_exists('RemoteCustom'))
+{
+ $app->remote = new RemoteCustom($app);
+}else{
+ $app->remote = new Remote($app);
+}
+$app->Secure = new Secure($app);
+$app->User = new User($app);
+if(!defined('FPDF_FONTPATH'))
+{
+ define('FPDF_FONTPATH',dirname(__DIR__) . '/www/lib/pdf/font/');
+}
+
+$cronjobname = 'autoversand_manuell';
+
+$mutex = $app->DB->Select(
+ "SELECT MAX(`mutex`) FROM `prozessstarter` WHERE (`parameter` = '".$cronjobname."')"
+);
+if($mutex){
+ $app->DB->Update(
+ "UPDATE `prozessstarter`
+ SET `mutexcounter`=`mutexcounter`+1
+ WHERE `mutex` = 1 AND (`parameter` = '".$cronjobname."')"
+ );
+
+ file_append($debugfile,"MUTEX");
+
+ return;
+}
+$app->DB->Update(
+ "UPDATE `prozessstarter` SET `mutex`='1', `mutexcounter` = 0 WHERE (`parameter` = '".$cronjobname."')"
+);
+
+// START APPLICATION
+
+$objAuftrag = $app->loadModule('auftrag');
+if($objAuftrag == null || !method_exists($objAuftrag, 'AuftragVersand')) {
+ $app->erp->LogFile($cronjobname." failed. Error while loading module 'auftrag'.");
+ exit;
+}
+
+$pendingorders = $app->DB->SelectArr(
+ "SELECT id
+ FROM auftrag AS a
+ WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='')
+ AND a.status='freigegeben' AND a.cronjobkommissionierung > 0"
+ );
+
+if (!is_null($pendingorders)) {
+
+ $processed_orders_num = 0;
+ foreach ($pendingorders as $pendingorder) {
+ /* Process each order */
+
+ if($objAuftrag->AuftragVersand($pendingorder['id'],true)) { // Ignore shipdate -> The order has been marked, send it
+ $processed_orders_num++;
+ } else {
+ }
+ // Limit to 10 per call
+ if ($processed_orders_num > 10) {
+ break;
+ }
+ }
+}
+
+// END APPLICATION
+
+$app->DB->Update("UPDATE prozessstarter SET mutex = 0 , mutexcounter = 0, letzteausfuerhung = now() WHERE (parameter = '".$cronjobname."' ) AND aktiv = 1");
diff --git a/cronjobs/tickets.php b/cronjobs/tickets.php
new file mode 100644
index 00000000..d10b66b2
--- /dev/null
+++ b/cronjobs/tickets.php
@@ -0,0 +1,212 @@
+erp;
+$conf = $app->Conf;
+
+/** @var Logger $logger */
+$logger = $app->Container->get('Logger');
+
+$cronjobname = 'tickets';
+/*
+$mutex = $app->DB->Select(
+ "SELECT MAX(`mutex`) FROM `prozessstarter` WHERE (`parameter` = '".$cronjobname."')"
+);
+if($mutex){
+ $app->DB->Update(
+ "UPDATE `prozessstarter`
+ SET `mutexcounter`=`mutexcounter`+1
+ WHERE `mutex` = 1 AND (`parameter` = '".$cronjobname."')"
+ );
+
+ file_append($debugfile,"MUTEX");
+
+ return;
+}
+$app->DB->Update(
+ "UPDATE `prozessstarter` SET `mutex`='1', `mutexcounter` = 0 WHERE (`parameter` = '".$cronjobname."')"
+);
+*/
+
+// get all email Accounts that have the ticket system active
+/** @var EmailAccountGateway $accountGateway */
+$accountGateway = $app->Container->get('EmailAccountGateway');
+$accounts = $accountGateway->getAccountsWithTicketActive();
+
+ file_append($debugfile,"Accs:".count($accounts).";");
+
+
+// only load services if there is at least one account to import (performance)
+$ticketModule = null;
+$factory = null;
+$configProvider = null;
+$formatHelper = null;
+$importHelperFactory = null;
+if(!empty($accounts)){
+ /** @var Ticket $ticketModule */
+ $ticketModule = $app->erp->LoadModul('ticket');
+ /** @var MailClientFactory $factory */
+ $factory = $app->Container->get('MailClientFactory');
+ /** @var MailClientConfigProvider $configProvider */
+ $configProvider = $app->Container->get('MailClientConfigProvider');
+ /** @var TicketFormatter $formatHelper */
+ $formatHelper = $app->Container->get('TicketFormatter');
+ /** @var TicketImportHelperFactory $importHelperFactory */
+ $importHelperFactory = $app->Container->get('TicketImportHelperFactory');
+}
+
+$totalEmailsImportCount = 0;
+foreach ($accounts as $account) {
+ $logger->debug(
+ 'Start imap ticket import for {email}',
+ ['email' => $account->getEmailAddress(), 'account' => $account]
+ );
+
+ file_append($debugfile,"Account ".$account->getemailAddress());
+
+ // create mail client
+ try {
+ $mailConfig = $configProvider->createImapConfigFromAccount($account);
+ $mailClient = $factory->createImapClient($mailConfig);
+ } catch (Exception $e) {
+ $logger->error('Failed to create email client', ['error' => (string)$e, 'account' => $account]);
+
+ file_append($debugfile,"Failed 1");
+
+ continue;
+ }
+
+ file_append($debugfile,"Connect to ".."SSL: ".$configProvider->isSslEnabled()." auth ".getAuthType()."\n");
+
+ // connect mail client
+ try {
+ try {
+ $mailClient->connect();
+
+ file_append($debugfile,"Meh");
+
+ } catch (Exception $e) {
+ $logger->error('Error during imap connection', ['error' => (string)$e, 'account' => $account]);
+
+ file_append($debugfile,"Error ".(string)$e);
+
+ continue;
+ }
+ }
+
+ file_append($debugfile,"2");
+
+ // connet to INBOX folder
+ try {
+ $mailClient->selectFolder('INBOX');
+ } catch (Exception $e) {
+ $logger->error('Failed to select INBOX folder', ['error' => (string)$e, 'account' => $account]);
+
+
+ file_append($debugfile,"Failed 2");
+
+
+ continue;
+ }
+
+ $projectId = $account->getProjectId() > 0 ? $account->getProjectId() : 1;
+ $delete_msg = 0;
+ $daysold = $account->getBackupDeleteAfterDays();
+
+ // determine search criteria for new messages
+ $datet = '2012-12-24';
+ if ($account->getImportStartDateAsString() !== '0000-00-00') {
+ $datesince = date('d-M-Y', strtotime($account->getImportStartDateAsString()));
+ $criteria = 'UNSEEN SINCE ' . $datesince;
+ } else {
+ $criteria = 'UNSEEN';
+ }
+
+ file_append($debugfile,"3");
+
+ // search new messages
+ try {
+ $searchResult = $mailClient->searchMessages($criteria);
+ } catch (Exception $e) {
+ $logger->error('Error during imap search', ['exception' => $e]);
+
+ file_append($debugfile,"Failed 3");
+
+
+ continue;
+ }
+ $logger->debug('unread emails to import: {message_count}', ['message_count' => count($searchResult)]);
+
+ // set mutex if there is more than 5 emails to import
+ if (count($searchResult) > 5) {
+ $app->DB->Update(
+ "UPDATE `prozessstarter`
+ SET `mutex`=1, `mutexcounter` = 0, `letzteausfuerhung` = NOW()
+ WHERE (`parameter` = '".$cronjobname."')"
+ );
+ }
+ $importer = $importHelperFactory->create($mailClient, $account, $projectId);
+ $insertedMailsCount = $importer->importMessages($searchResult);
+ $totalEmailsImportCount += $insertedMailsCount;
+
+ // set mutex if the total amount of imported emails is more than 10
+ if ($totalEmailsImportCount > 10) {
+ $app->DB->Update(
+ "UPDATE `prozessstarter`
+ SET `mutex`=1, `mutexcounter` = 0, `letzteausfuerhung` = NOW()
+ WHERE (`parameter` = '".$cronjobname."')"
+ );
+ }
+
+ $mailClient->expunge();
+ $mailClient->disconnect();
+
+ if (
+ method_exists($app->erp, 'canRunCronjob')
+ && !$app->erp->canRunCronjob(['supportmails', 'tickets'])
+ ) {
+
+ $logger->error('Tickets error');
+
+ file_append($debugfile,"Failed 5");
+
+
+ return;
+ }
+ $app->DB->Update(
+ "UPDATE `prozessstarter`
+ SET `mutex`=1, `mutexcounter` = 0, `letzteausfuerhung` = NOW()
+ WHERE (`parameter` = '".$cronjobname."')"
+ );
+}
+
+$app->DB->Update(
+ "UPDATE `prozessstarter` SET `mutex`=0,`mutexcounter`=0 WHERE (`parameter` = '".$cronjobname."')"
+);
+
+file_append($debugfile,"END");
diff --git a/database/struktur.sql b/database/struktur.sql
index 63e9d261..2aca7598 100755
--- a/database/struktur.sql
+++ b/database/struktur.sql
@@ -10365,7 +10365,7 @@ CREATE TABLE IF NOT EXISTS `proformarechnung_protokoll` (
CREATE TABLE IF NOT EXISTS `projekt` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
- `abkuerzung` text NOT NULL,
+ `abkuerzung` varchar(128) NOT NULL,
`verantwortlicher` text NOT NULL,
`beschreibung` text NOT NULL,
`sonstiges` text NOT NULL,
diff --git a/www/lib/class.erpapi.php b/www/lib/class.erpapi.php
index 8daff5b5..6b2d17f4 100644
--- a/www/lib/class.erpapi.php
+++ b/www/lib/class.erpapi.php
@@ -2089,7 +2089,7 @@ public function NavigationHooks(&$menu)
// @refactor FileLock Komponente
function ProzessUnlock($fp)
{
- if(!$fp)return;
+ if(gettype($fp) != 'resource') return;
fflush($fp); // leere Ausgabepuffer bevor die Sperre frei gegeben wird
flock($fp, LOCK_UN); // Gib Sperre frei
fclose($fp);
@@ -22154,19 +22154,17 @@ function Gegenkonto($ust_befreit,$ustid='', $doctype = '', $doctypeId = 0)
function GetGeschaeftsBriefText($subjekt,$sprache='',$projekt='',$dokument='',$dokumentid=0)
{
- $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");
+ $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($abweichend>0 && !preg_match('/_Abweichend/',$subjekt))
- {
- $text = $this->GetGeschaeftsBriefText($subjekt."_Abweichend",$sprache,$projekt,$dokument,$dokumentid);
- }else{
- $text = '';
- }
-
-
if($text=='')
{
@@ -22200,14 +22198,16 @@ function Gegenkonto($ust_befreit,$ustid='', $doctype = '', $doctypeId = 0)
function GetGeschaeftsBriefBetreff($subjekt,$sprache="",$projekt="",$dokument="",$dokumentid=0)
{
- $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);
+ $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=="")
@@ -32659,7 +32659,6 @@ function MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files="",$p
$sendmail_error
);
}
-
if($sysMailerSent === false) {
$this->app->erp->LogFile("Mailer Error: " . $sendmail_error);
$this->MailLogFile($from,$from_name,$to,$to_name,$betreff,$text,$files,$projekt,$signature,$cc,$bcc,$system);
@@ -32673,7 +32672,7 @@ function MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files="",$p
}
// schreiben in post ausgang
$this->MailLogFile($from,$from_name,$to,$to_name,$betreff,$text,$files,$projekt,$signature,$cc,$bcc,$system);
- $imap_aktiv = $this->app->DB->Select("SELECT imap_sentfolder_aktiv FROM emailbackup WHERE email='".$fromm."' AND imap_sentfolder!='' AND geloescht!=1 LIMIT 1");
+ $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) && !preg_match("/WaWision Kopie/",$to_name))
{
$imap_data = $this->app->DB->SelectRow("SELECT * FROM emailbackup WHERE email='".$from."' AND geloescht!=1 LIMIT 1");
@@ -32693,7 +32692,9 @@ function MailSendFinal($from,$from_name,$to,$to_name,$betreff,$text,$files="",$p
$client = $clientProvider->createMailClientFromAccount($account);
$client->connect();
$client->appendMessage($imapCopyMessage, $account->getImapOutgoingFolder());
- } catch (Exception $e) {}
+ } catch (Exception $e) {
+ $this->app->erp->LogFile("Mailer Error: " . (string)$e);
+ }
$this->app->erp->LogFile("IMAP Ausgang FROM ".$from." S $server P $port T $type SP $server_path B ".$imap_data['benutzername']." SF ".$imap_data['imap_sentfolder']);
}
diff --git a/www/pages/auftrag.php b/www/pages/auftrag.php
index 502d04af..cf8c8874 100644
--- a/www/pages/auftrag.php
+++ b/www/pages/auftrag.php
@@ -1,6819 +1,7007 @@
-app->erp->GetKonfiguration('auftraege_projectsearchdisabled');
- if($projectsearchdisabled==='') {
- $projectsearchdisabled = ($this->app->DB->Select('SELECT COUNT(id) FROM auftrag') >= 100000)?1:0;
- $this->app->erp->SetKonfigurationValue('auftraege_projectsearchdisabled', $projectsearchdisabled);
- }
- $projectCol = 'p.abkuerzung';
- $useAddr = true;
- if($projectsearchdisabled) {
- $projectCol = '(SELECT LEFT(UPPER(abkuerzung),10) FROM projekt WHERE id = a.projekt)';
- if(!$this->app->erp->Firmendaten('adresse_freitext1_suche')) {
- $useAddr = false;
- }
- }
- $projectColSql = $projectCol.' AS projektabkuerung';
-
- $rowcallback_gt = 1;
- $auftragmarkierenegsaldo = $this->app->erp->Firmendaten('auftragmarkierenegsaldo');
- // START EXTRA checkboxen
- $this->app->Tpl->Add('JQUERYREADY', "$('#artikellager').click( function() { fnFilterColumn1( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#ustpruefung').click( function() { fnFilterColumn2( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#zahlungseingang').click( function() { fnFilterColumn3( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#zahlungseingangfehlt').click( function() { fnFilterColumn5( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#manuellepruefung').click( function() { fnFilterColumn4( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#ohnerechnung').click( function() { fnFilterColumn10( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#auftragheute').click( function() { fnFilterColumn6( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#auftragoffene').click( function() { fnFilterColumn7( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#auftragstornierte').click( function() { fnFilterColumn8( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#auftragabgeschlossene').click( function() { fnFilterColumn9( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#teillieferung').click( function() { fnFilterColumn11( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#portofehlt').click( function() { fnFilterColumn12( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#teilzahlung').click( function() { fnFilterColumn13( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#autoversandfehlt').click( function() { fnFilterColumn14( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#autoversandok').click( function() { fnFilterColumn15( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#fastlanea').click( function() { fnFilterColumn16( 0 ); } );");
- $this->app->Tpl->Add('JQUERYREADY', "$('#tolate').click( function() { fnFilterColumn17( 0 ); } );");
- // $this->app->Tpl->Add('JQUERYREADY',"$('#artikellager').click( function() { oTable".$name.".fnDraw(); } );");
- for ($r = 1;$r < 18;$r++) {
- $this->app->Tpl->Add('JAVASCRIPT', '
- function fnFilterColumn' . $r . ' ( i )
- {
- if(oMoreData' . $r . $name . '==1)
- oMoreData' . $r . $name . ' = 0;
- else
- oMoreData' . $r . $name . ' = 1;
-
- $(\'#' . $name . '\').dataTable().fnFilter(
- \'\',
- i,
- 0,0
- );
- }
- ');
- }
-
- // ENDE EXTRA checkboxen
-
- // headings
-
- $zusatzcols = array();
- $auftragzusatzfelder = $this->app->erp->getZusatzfelderAuftrag();
-
- $heading = array('','', 'Auftrag', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Projekt', 'Zahlung', 'Betrag (brutto)');
- $width = array('1%','1%', '10%', '10%', '10%', '31%', '5%', '1%', '1%', '1%', '1%', '1%');
- $findcols = array('open','a.belegnr', 'a.belegnr', 'a.datum'
- ,$useAddr? 'if(a.lieferantenauftrag=1,adr.lieferantennummer,adr.kundennummer)':'a.lieferantkdrnummer',
- 'a.name', 'a.land',
- //'p.abkuerzung',
- $projectCol,
- 'a.zahlungsweise', 'a.gesamtsumme');
- $searchsql = array('DATE_FORMAT(a.datum,\'%d.%m.%Y\')', 'a.belegnr', 'a.ihrebestellnummer','a.transaktionsnummer',
- 'a.internet', "a.lieferantkdrnummer", 'a.name', 'a.land', 'a.zahlungsweise', 'a.status', $app->erp->FormatPreis('a.gesamtsumme',2),
- //'adr.freifeld1',
- 'a.internebezeichnung'
- );
- if($useAddr) {
- $searchsql[] = 'adr.freifeld1';
- }
- if(!$projectsearchdisabled) {
- $searchsql[] = $projectCol;
- }
- $alignright = array('10');
- $defaultorder = 13; //Optional wenn andere Reihenfolge gewuenscht
- $hide767 = array('5');
- $defaultorderdesc = 1;
-
- if($this->app->erp->RechteVorhanden('auftrag','summe')){
- $sumcol = array(10);
- }
- $menu = "
";
-
- $menucol = 11;
- for($i = 1; $i <= 5; $i++) {
- $zusatzfeld = $this->app->erp->Firmendaten('auftragtabellezusatz' . $i);
- if($zusatzfeld && isset($auftragzusatzfelder[$zusatzfeld])){
- $defaultorder++;
- $menucol++;
- $heading[] = $auftragzusatzfelder[$zusatzfeld];
- $width[] = '10%';
- $findcols[] = 'a.'.$zusatzfeld;
- switch($zusatzfeld)
- {
- case 'umsatz_netto':
- $searchsql[] = $app->erp->FormatPreis($zusatzfeld, 2);
- $zusatzcols[] = $app->erp->FormatPreis($zusatzfeld,2);
- $numbercols[] = array_search('a.'.$zusatzfeld, $findcols);
- $sumcol[] = array_search('a.'.$zusatzfeld, $findcols)+1;
- $alignright[] = array_search('a.'.$zusatzfeld, $findcols)+1;
- break;
- case 'tatsaechlicheslieferdatum':
- case 'lieferdatum':
- $searchsql[] = 'IF(a.'.$zusatzfeld.'!="0000-00-00", DATE_FORMAT(a.'.$zusatzfeld.",'%d.%m.%Y'), '')";
- $zusatzcols[] = 'IF(a.'.$zusatzfeld.'!="0000-00-00", DATE_FORMAT(a.'.$zusatzfeld.",'%d.%m.%Y'), '')";
- $datecols[] = array_search('a.'.$zusatzfeld, $findcols);
-
- break;
- default:
- $searchsql[] = 'a.'.$zusatzfeld;
- $zusatzcols[] = 'a.'.$zusatzfeld;
- }
- }
- }
- $findcols[] = 'a.status';
-
- $width[] = '1%';
- $width[] = '1%';
- $findcols[] = 'a.status';
- $findcols[] = 'a.id';
- $findcols[] = 'a.id';
- $heading[] = 'Monitor';
- $heading[] = 'Menü';
-
-
-
-
- $parameter = $this->app->User->GetParameter('table_filter_auftrag');
- $parameter = base64_decode($parameter);
- $parameter = json_decode($parameter, true);
-
- $sql = "";
- $sql .=
- "SELECT SQL_CALC_FOUND_ROWS
- a.id,
- ' app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`,
- CONCAT(' ') AS `auswahl`,
- CONCAT(
- IF(a.status = 'angelegt','ENTWURF',a.belegnr),
- IF(
- a.projektfiliale > 0 OR a.fastlane = 1,
- CONCAT(
- ' (',
- IF(a.projektfiliale > 0,'F',''),
- IF(
- a.fastlane = 1,
- IF(a.projektfiliale > 0,',FL','FL'),
- ''
- ),
- ')'
- ),
- ''
- )
- ) AS `auftrag`,
- DATE_FORMAT(a.datum,'%d.%m.%Y') AS `vom`,
- a.lieferantkdrnummer AS `kunde`,
- CONCAT(
- " . $this->app->erp->MarkerUseredit("a.name", "a.useredittimestamp") . ",
- IF(
- a.internebemerkung = '',
- '',
- ' * '
- ),
- IF(
- a.freitext = '',
- '',
- ' * '
- ),
- IF(
- a.internebezeichnung != '',
- CONCAT(
- '',
- a.internebezeichnung,
- ' '
- ),
- ''
- ),
- IF(
- a.abweichendelieferadresse = 1,
- CONCAT(
- 'Abw. Lieferadr.: ',
- a.liefername,', ',
- a.lieferstrasse,', ',
- a.lieferland,'-',
- a.lieferplz,' ',
- a.lieferort,
- ' '
- ),
- ''
- )
- ) AS `name`,
- a.land AS `land`,
- $projectColSql,
- ".(
- $auftragmarkierenegsaldo ?
- "CONCAT(
- ''," :
- ''
- )."
- a.zahlungsweise".($auftragmarkierenegsaldo?",'')":"")." AS `zahlungsweise`,
- ".$app->erp->FormatPreis('a.gesamtsumme',2)." AS `betrag`,
- ".(!empty($zusatzcols)?implode(', ',$zusatzcols).',':'')."
- (" . $this->app->YUI->IconsSQL() . ") AS icons,
- a.id
- FROM `auftrag` AS `a` ";
-
- if($useAddr) {
- $sql .= ' LEFT JOIN `adresse` AS `adr` ON a.adresse = adr.id ';
- }
-
- if(!$projectsearchdisabled) {
- $sql .= ' LEFT JOIN `projekt` AS `p` ON p.id = a.projekt ';
- }
-
- if(isset($parameter['artikel']) && !empty($parameter['artikel'])) {
- $artikelid = $this->app->DB->Select("SELECT id FROM artikel where geloescht != 1 AND nummer != 'DEL' AND nummer != '' AND nummer = '".$this->app->DB->real_escape_string(reset(explode(' ',trim($parameter['artikel']))))."' LIMIT 1");
- if($artikelid) {
- $sql .= sprintf(
- ' INNER JOIN `auftrag_position` AS `ap` ON a.id = ap.auftrag AND ap.artikel = %d ',
- $artikelid
- );
- $groupby = ' GROUP BY a.id ';
- }
- }
-
- // Fester filter
-
- // START EXTRA more
-
- $more_data1 = $this->app->Secure->GetGET("more_data1");
-
- if ($more_data1 == 1) $subwhere[] = " a.lager_ok=0 ";
- $more_data2 = $this->app->Secure->GetGET("more_data2");
-
- if ($more_data2 == 1) $subwhere[] = " a.ust_ok=0 ";
-
- $more_data3 = $this->app->Secure->GetGET("more_data3");
- if ($more_data3 == 1) $subwhere[] = " a.vorkasse_ok=1 ";
-
- $more_data13 = $this->app->Secure->GetGET("more_data13");
- if ($more_data13 == 1) $subwhere[] = " a.vorkasse_ok=2 ";
-
-
-
- //$more_data4 = $this->app->Secure->GetGET("more_data4"); if($more_data4==1) $subwhere[] = " a.check_ok=0 ";
- $more_data4 = $this->app->Secure->GetGET("more_data4");
-
- if ($more_data4 == 1) $subwhere[] = " (a.check_ok=0 OR a.liefersperre_ok=0 OR a.kreditlimit_ok='0') ";
- $more_data5 = $this->app->Secure->GetGET("more_data5");
-
- if ($more_data5 == 1) $subwhere[] = " a.vorkasse_ok=0 ";
- $more_data6 = $this->app->Secure->GetGET("more_data6");
-
- if ($more_data6 == 1) {
- $subwhere[] = " a.datum=CURDATE() ";
- $ignore = true;
- }
- $more_data7 = $this->app->Secure->GetGET("more_data7");
-
- if ($more_data7 == 1) {
- $subwherestatus[] = " a.status='freigegeben' ";
- $ignore = true;
- }
-
- $more_data8 = $this->app->Secure->GetGET("more_data8");
-
- if ($more_data8 == 1) {
- $subwherestatus[] = " a.status='storniert' ";
- $ignore = true;
- }
- $more_data9 = $this->app->Secure->GetGET("more_data9");
-
- if ($more_data9 == 1) {
- $subwherestatus[] = " a.status='abgeschlossen' ";
- $ignore = true;
- }
- $more_data10 = $this->app->Secure->GetGET("more_data10");
-
- if ($more_data10 == 1) {
- $subwhere[] = " (SELECT COUNT(r.id) FROM rechnung r WHERE r.auftragid=a.id) <= 0
- AND (SELECT count(sp1.id) FROM sammelrechnung_position sp1 INNER JOIN auftrag_position ap1 ON sp1.auftrag_position_id = ap1.id WHERE ap1.auftrag = a.id) <= 0
- AND (SELECT count(sp1.id) FROM sammelrechnung_position sp1 INNER JOIN lieferschein_position lsp1 ON sp1.lieferschein_position_id = lsp1.id INNER JOIN auftrag_position ap1 ON ap1.id = lsp1.auftrag_position_id WHERE ap1.auftrag = a.id) <= 0
- AND (SELECT COUNT(l.id) FROM lieferschein l WHERE l.auftragid = a.id AND l.keinerechnung = 1) <= 0
- AND a.gesamtsumme > 0 AND ifnull(a.rechnungid,0) = 0 ";
- $ignore = true;
- }
- $more_data11 = $this->app->Secure->GetGET("more_data11");
-
- if ($more_data11 == 1) {
- $subwhere[] = " a.teillieferung_moeglich='1' ";
- }
- $more_data12 = $this->app->Secure->GetGET("more_data12");
-
- if ($more_data12 == 1) {
- $subwhere[] = " a.porto_ok=0 ";
- }
-
- $more_data14 = $this->app->Secure->GetGET("more_data14");
- if ($more_data14 == 1) {
- $subwhere[] = " a.autoversand=0 ";
- }
-
- $more_data15 = $this->app->Secure->GetGET("more_data15");
- if ($more_data15 == 1) {
- $subwhere[] = " a.autoversand=1 ";
- }
-
- $more_data16 = $this->app->Secure->GetGET("more_data16");
- if ($more_data16 == 1) {
- $subwhere[] = " a.fastlane=1 ";
- }
-
- $more_data17 = $this->app->Secure->GetGET("more_data17");
- if ($more_data17 == 1) {
- /*$subwhere[] = "
- (
- (
- (a.datum < DATE_SUB(NOW(), INTERVAL 1 DAY))
- OR (a.lieferdatum < DATE_SUB(NOW(), INTERVAL 1 DAY) AND a.lieferdatum!='0000-00-00') OR
- (a.tatsaechlicheslieferdatum < DATE_SUB(NOW(), INTERVAL 1 DAY) AND a.tatsaechlicheslieferdatum!='0000-00-00')
- )
- AND a.status='freigegeben'
-
- )";*/
-
- $subwhere[] =
- "(
- (
- (a.datum < DATE_SUB(NOW(), INTERVAL 1 DAY))
- OR (a.lieferdatum < DATE_SUB(NOW(), INTERVAL 1 DAY) AND a.lieferdatum!='0000-00-00')
- OR (a.tatsaechlicheslieferdatum < DATE_SUB(NOW(), INTERVAL 1 DAY) AND a.tatsaechlicheslieferdatum!='0000-00-00')
- )
- AND a.status='freigegeben'
- AND NOT (
- IFNULL(a.tatsaechlicheslieferdatum,'0000-00-00')!='0000-00-00' AND a.tatsaechlicheslieferdatum >= CURDATE()
- )
- AND NOT (
- IFNULL(a.tatsaechlicheslieferdatum,'0000-00-00')='0000-00-00' AND
- IFNULL(a.lieferdatum,'0000-00-00')!='0000-00-00' AND a.lieferdatum >= CURDATE()
- )
- )";
- }
-
-
-
- $tmp = '';
- if(!empty($subwhere)) {
- foreach($subwhere as $s) {
- $tmp .= ' AND '.$s;
- }
- }
-
- if(!empty($subwherestatus)){
- $tmp .= " AND (".implode(" OR ", $subwherestatus).")";
- }
-
- if ($tmp != "" && !$ignore) $tmp.= " AND a.status='freigegeben' ";
-
- // ENDE EXTRA more
- $where = " a.id!='' $tmp " . $this->app->erp->ProjektRechte('a.projekt', true, 'a.vertriebid');
-
- /* STAMMDATEN */
- if(isset($parameter['kundennummer']) && !empty($parameter['kundennummer'])) {
- if(!$useAddr) {
- $sql .= ' LEFT JOIN adresse adr ON a.adresse=adr.id ';
- $useAddr = true;
- }
- $paramsArray[] = " (a.kundennummer LIKE '%".$parameter['kundennummer']."%' OR adr.kundennummer LIKE '%".$parameter['kundennummer']."%') ";
- }
-
- if(isset($parameter['kundengruppe']) && !empty($parameter['kundengruppe'])){
- $gruppenId = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer LIKE '%".$parameter['kundengruppe']."%' LIMIT 1");
- $sql .= ' LEFT JOIN adresse_rolle ar ON a.adresse = ar.adresse ';
- $paramsArray[] = " ( ar.subjekt LIKE 'Mitglied' AND ar.objekt LIKE 'Gruppe' AND ar.parameter = '$gruppenId')";
- }
-
-
- if(isset($parameter['name']) && !empty($parameter['name'])) {
- $paramsArray[] = "a.name LIKE '%".$parameter['name']."%' ";
- }
-
- if(isset($parameter['ansprechpartner']) && !empty($parameter['ansprechpartner'])) {
- $paramsArray[] = "a.ansprechpartner LIKE '%".$parameter['ansprechpartner']."%' ";
- }
-
- if(isset($parameter['abteilung']) && !empty($parameter['abteilung'])) {
- $paramsArray[] = "a.abteilung LIKE '%".$parameter['abteilung']."%' ";
- }
-
- if(isset($parameter['strasse']) && !empty($parameter['strasse'])) {
- $paramsArray[] = "a.strasse LIKE '%".$parameter['strasse']."%' ";
- }
-
- if(isset($parameter['plz']) && !empty($parameter['plz'])) {
- $paramsArray[] = "a.plz LIKE '".$parameter['plz']."%'";
- }
-
- if(isset($parameter['ort']) && !empty($parameter['ort'])) {
- $paramsArray[] = "a.ort LIKE '%".$parameter['ort']."%' ";
- }
-
- if(isset($parameter['land']) && !empty($parameter['land'])) {
- $paramsArray[] = "a.land LIKE '%".$parameter['land']."%' ";
- }
-
- if(isset($parameter['ustid']) && !empty($parameter['ustid'])) {
- $paramsArray[] = "a.ustid LIKE '%".$parameter['ustid']."%' ";
- }
-
- if(isset($parameter['telefon']) && !empty($parameter['telefon'])) {
- $paramsArray[] = "a.telefon LIKE '%".$parameter['telefon']."%' ";
- }
-
- if(isset($parameter['email']) && !empty($parameter['email'])) {
- $paramsArray[] = "a.email LIKE '%".$parameter['email']."%' ";
- }
-
-
- /* XXX */
- if(isset($parameter['datumVon']) && !empty($parameter['datumVon'])) {
-
- $paramsArray[] = "a.datum >= '" . date('Y-m-d',strtotime($parameter['datumVon']))."' ";
- }
-
- if(isset($parameter['datumBis']) && !empty($parameter['datumBis'])) {
- $paramsArray[] = "a.datum <= '" . date('Y-m-d',strtotime($parameter['datumBis']))."' ";
- }
-
- if(isset($parameter['projekt']) && !empty($parameter['projekt'])) {
-
- $projektData = $this->app->DB->SelectRow('
- SELECT
- *
- FROM
- projekt
- WHERE
- abkuerzung LIKE "' . $parameter['projekt'] . '"
- ');
- $paramsArray[] = "a.projekt = '".$projektData['id']."' ";
- }
-
- if(isset($parameter['belegnummer']) && !empty($parameter['belegnummer'])) {
- $paramsArray[] = "a.belegnr LIKE '".$parameter['belegnummer']."' ";
- }
-
- if(isset($parameter['internebemerkung']) && !empty($parameter['internebemerkung'])) {
- $paramsArray[] = "a.internebemerkung LIKE '%".$parameter['internebemerkung']."%' ";
- }
-
- if(isset($parameter['aktion']) && !empty($parameter['aktion'])) {
- $paramsArray[] = "a.aktion LIKE '%".$parameter['aktion']."%' ";
- }
-
- if(isset($parameter['transaktionsnummer']) && !empty($parameter['transaktionsnummer'])) {
- $paramsArray[] = "a.transaktionsnummer LIKE '%".$parameter['transaktionsnummer']."%' ";
- }
-
- if(isset($parameter['freitext']) && !empty($parameter['freitext'])) {
- $paramsArray[] = "a.freitext LIKE '%".$parameter['freitext']."%' ";
- }
-
- if(isset($parameter['zahlungsweise']) && !empty($parameter['zahlungsweise'])) {
- $paramsArray[] = "a.zahlungsweise LIKE '%".$parameter['zahlungsweise']."%' ";
- }
-
- if(isset($parameter['status']) && !empty($parameter['status'])) {
- $paramsArray[] = "a.status LIKE '%".$parameter['status']."%' ";
- }
-
- if(isset($parameter['versandart']) && !empty($parameter['versandart'])) {
- $paramsArray[] = "a.versandart LIKE '%".$parameter['versandart']."%' ";
- }
-
- if(isset($parameter['betragVon']) && !empty($parameter['betragVon'])) {
- $paramsArray[] = "a.gesamtsumme >= '" . $parameter['betragVon'] . "' ";
- }
-
- if(isset($parameter['betragBis']) && !empty($parameter['betragBis'])) {
- $paramsArray[] = "a.gesamtsumme <= '" . $parameter['betragBis'] . "' ";
- }
- // projekt, belegnummer, internetnummer, bestellnummer, transaktionsId, freitext, internebemerkung, aktionscodes
-
- if ($paramsArray) {
- $where .= ' AND ' . implode(' AND ', $paramsArray);
- }
-
- $this->app->erp->RunHook('auftraege_tablesearch', 2, $sql, $where);
- // gesamt anzahl
- $count = "SELECT COUNT(a.id) FROM auftrag a ";
- $moreinfo = true; // EXTRA
-
- break;
- }
- $erg = [];
- foreach($erlaubtevars as $k => $v) {
- if(isset($$v)) {
- $erg[$v] = $$v;
- }
- }
-
- return $erg;
- }
-
- /**
- * Auftrag constructor.
- *
- * @param Application $app
- * @param bool $intern
- */
- public function __construct($app, $intern = false)
- {
- $this->kommissionierung = false;
- $this->app=$app;
- if($intern) {
- return;
- }
-
- $this->app->ActionHandlerInit($this);
-
- $this->app->ActionHandler("list","AuftragList");
- $this->app->ActionHandler("create","AuftragCreate");
- $this->app->ActionHandler("positionen","AuftragPositionen");
- $this->app->ActionHandler("upauftragposition","UpAuftragPosition");
- $this->app->ActionHandler("delauftragposition","DelAuftragPosition");
- $this->app->ActionHandler("copyauftragposition","CopyAuftragPosition");
- $this->app->ActionHandler("downauftragposition","DownAuftragPosition");
- $this->app->ActionHandler("positioneneditpopup","AuftragPositionenEditPopup");
- $this->app->ActionHandler("checkdisplay","AuftragCheckDisplayPopup");
- $this->app->ActionHandler("edit","AuftragEdit");
- $this->app->ActionHandler("tracking","AuftragTracking");
- $this->app->ActionHandler("ausversand","AuftragDeleteAusVersand");
- $this->app->ActionHandler("search","AuftragSuche");
- $this->app->ActionHandler("ean","AuftragEAN");
- $this->app->ActionHandler("versandzentrum","AuftragVersandzentrum");
- $this->app->ActionHandler("uststart","AuftragUstStart");
- $this->app->ActionHandler("delete","AuftragDelete");
- $this->app->ActionHandler("undelete","AuftragUndelete");
- $this->app->ActionHandler("anfrage","AuftragAnfrage");
- $this->app->ActionHandler("abschluss","AuftragAbschluss");
- $this->app->ActionHandler("copy","AuftragCopy");
- $this->app->ActionHandler("zertifikate","AuftragZertifikate");
- $this->app->ActionHandler("verfuegbar","AuftragVerfuegbar");
- $this->app->ActionHandler("rechnung","AuftragRechnung");
- $this->app->ActionHandler("lieferschein","AuftragLieferschein");
- $this->app->ActionHandler("lieferscheinrechnung","AuftragLieferscheinRechnung");
-
- $this->app->ActionHandler("nachlieferung","AuftragNachlieferung");
- // $this->app->ActionHandler("versand","AuftragVersand");
- $this->app->ActionHandler("freigabe","AuftragFreigabe");
- $this->app->ActionHandler("abschicken","AuftragAbschicken");
- $this->app->ActionHandler("pdf","AuftragPDF");
- $this->app->ActionHandler("inlinepdf","AuftragInlinePDF");
- $this->app->ActionHandler("proforma","AuftragProforma");
- $this->app->ActionHandler("versand","AuftragVersand");
- $this->app->ActionHandler("zahlungsmail","AuftragZahlungsmail");
- $this->app->ActionHandler("reservieren","AuftragReservieren");
- $this->app->ActionHandler("nachlieferung","AuftragNachlieferung");
- $this->app->ActionHandler("protokoll","AuftragProtokoll");
- $this->app->ActionHandler("minidetail","AuftragMiniDetail");
- $this->app->ActionHandler("editable","AuftragEditable");
- $this->app->ActionHandler("dateien","AuftragDateien");
- $this->app->ActionHandler("livetabelle","AuftragLiveTabelle");
- $this->app->ActionHandler("zahlungsmahnungswesen","AuftragZahlungMahnungswesen");
- $this->app->ActionHandler("schreibschutz","AuftragSchreibschutz");
- $this->app->ActionHandler("shopexport","AuftragShopexport");
- $this->app->ActionHandler("deleterabatte","AuftragDeleteRabatte");
- $this->app->ActionHandler("kreditlimit","AuftragKreditlimit");
- $this->app->ActionHandler("updateverband","AuftragUpdateVerband");
- $this->app->ActionHandler("pdffromarchive","AuftragPDFfromArchiv");
-
- $this->app->ActionHandler("archivierepdf", "AuftragArchivierePDF");
- $this->app->ActionHandler("paypal", "AuftragPaypal");
- $this->app->ActionHandler("summe","AuftragSumme"); // nur fuer rechte
- $this->app->ActionHandler("einkaufspreise", "AuftragEinkaufspreise");
- $this->app->ActionHandler("alsfreigegeben", "AuftragAlsfreigegeben");
- $this->app->ActionHandler("steuer", "AuftragSteuer");
- $this->app->DefaultActionHandler("list");
-
- $id = $this->app->Secure->GetGET('id');
- $nummer = $this->app->Secure->GetPOST('adresse');
- $name = '';
- $belegnr = '';
- $abweichendebezeichnung = 0;
- if($id > 0) {
- $abArr = $this->app->DB->SelectRow("SELECT b.belegnr, a.name,b.abweichendebezeichnung FROM auftrag b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
- if(!empty($abArr)) {
- $name = $abArr['name'];
- $belegnr = $abArr['belegnr'];
- $abweichendebezeichnung = $abArr['abweichendebezeichnung'];
- }
- }
- if($nummer==''){
- $adresse = $name;
- }
- else{
- $adresse = $nummer;
- }
-
- $nummer = $belegnr;
- if($nummer=='' || $nummer=='0') {
- $nummer='ohne Nummer';
- }
-
- $this->app->Tpl->Set('UEBERSCHRIFT','Auftrag: '.$adresse.' ('.$nummer.')');
- $this->app->Tpl->Set('FARBE','[FARBE2]');
-
- if($abweichendebezeichnung){
- $this->app->Tpl->Set('BEZEICHNUNGTITEL', $this->app->erp->Firmendaten('bezeichnungauftragersatz'));
- }
- else{
- $this->app->Tpl->Set('BEZEICHNUNGTITEL', 'Auftrag');
- }
-
- $this->app->erp->Headlines('Auftrag');
-
- $this->app->ActionHandlerListen($app);
- }
-
- public function Install()
- {
- $this->app->erp->RegisterHook('supersearch_detail', 'auftrag', 'AuftragSupersearchDetail');
- }
-
- /**
- * @param \Xentral\Widgets\SuperSearch\Query\DetailQuery $detailQuery
- * @param \Xentral\Widgets\SuperSearch\Result\ResultDetail $detailResult
- *
- * @return void
- */
- public function AuftragSupersearchDetail($detailQuery, $detailResult)
- {
- if ($detailQuery->getGroupKey() !== 'orders') {
- return;
- }
-
- $auftragId = $detailQuery->getItemIdentifier();
- $sql = sprintf(
- "SELECT a.id, a.belegnr, a.datum FROM `auftrag` AS `a` WHERE a.id = '%s' LIMIT 1",
- $this->app->DB->real_escape_string($auftragId)
- );
- $auftrag = $this->app->DB->SelectRow($sql);
- if (empty($auftrag)) {
- return;
- }
-
- $datum = date('d.m.Y', strtotime($auftrag['datum']));
- $detailResult->setTitle(sprintf('Auftrag %s vom %s ', $auftrag['belegnr'], $datum));
- $detailResult->addButton('Auftrag Details', sprintf('index.php?module=auftrag&action=edit&id=%s', $auftrag['id']));
- $detailResult->setMiniDetailUrl(sprintf('index.php?module=auftrag&action=minidetail&id=%s', $auftrag['id']));
- }
-
- function AuftragAARLGPositionen_aktion($module, $id, &$aktionoptionen, &$aktionjs)
- {
- if($module !== 'auftrag') {
- return;
- }
- $aktionoptionen .= "als Lieferschein weiterführen ";
- $aktionjs .= '
- if(wert == \'delivery\')
- {
- var parameter = \'\';
- var ok = false;
- $(checkboxen).each(function(){
- if(parameter != \'\')parameter += \',\';
- if($(this).attr(\'name\') == \'belegsort[]\')
- {
- parameter += \'b\'+$(this).val();
- ok = true;
- }else{
- parameter += \'z\'+$(this).val();
- }
- });
- if(ok)
- {
- if(confirm(\'{|Wirklich als Lieferschein weiterführen?|}\'))
- {
- window.location.href=\'index.php?module=auftrag&action=lieferschein&id='.$id.'&posids=\'+parameter;
- }else{
- $(el).val(\'\');
- }
- }else{
- $(el).val(\'\');
- alert(\'Bitte einen Artikel auswählen\');
- }
- }
- ';
-
- }
-
- function AuftragSteuer()
- {
-
- }
-
- function AuftragEinkaufspreise()
- {
-
- }
-
- function AuftragSumme()
- {
- }
-
- function AuftragArchivierePDF()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' LIMIT 1");
- $this->app->erp->BriefpapierHintergrunddisable = !$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();
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$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(1);
- $this->app->DB->Update("UPDATE auftrag SET schreibschutz='1' WHERE id='$id'");
- unlink($tmpfile);
- $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id);
- }
-
- function AuftragPaypal()
- {
- $id = $this->app->Secure->GetGET('id');
- if($id)
- {
- $erg = $this->app->erp->SendPaypalFromAuftrag($id);
- if($erg === false)
- {
- $msg = $this->app->erp->base64_url_encode('Es ist ein Fehler aufgetreten
');
- }else if(isset($erg['error']))
- {
- $msg = $this->app->erp->base64_url_encode(''.$erg['error'].'
');
-
- }else{
- $msg = $this->app->erp->base64_url_encode('Anfrage gesendet
');
- }
- }else{
- $msg = $this->app->erp->base64_url_encode('Kein Auftrag
');
- }
- header('Location: index.php?module=auftrag&action=edit&id='.$id.'&msg='.$msg);
- }
-
- function AuftragEAN()
- {
- $id=$this->app->Secure->GetGET('id');
- $scanner=$this->app->Secure->GetPOST('scanner');
- $menge=$this->app->Secure->GetPOST('menge');
- $posAdd = $this->app->Secure->GetPOST('posadd');
- $posDel = $this->app->Secure->GetPost('posdel');
- $sumposition = $this->app->Secure->GetPOST('sumposition');
- /** @var ScanArticleService $scanArticleService */
- $scanArticleService = $this->app->Container->get('ScanArticleService');
-
-
- $this->AuftragMenu();
- $schreibschutz = $this->app->DB->Select(
- sprintf(
- 'SELECT `schreibschutz` FROM `auftrag` WHERE `id` = %d LIMIT 1',
- $id
- )
- );
-
- if($scanner!='' && $schreibschutz!='1') {
- if(!is_numeric($menge)){
- $menge=1;
- }
- //$adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
- try{
- $scanArticleService->writeArticleToSession('auftrag',$scanner,$menge,$id);
- } catch(ArticleNotFoundException $e){
- $this->app->Tpl->Set('TAB1',"{|Der Artikel wurde nicht gefunden|}: ".$scanner."
");
- } catch(InvalidArgumentException $e){
- $this->app->Tpl->Set('TAB1',"{|Fehler beim Schreiben in die Session|}
");
- }
- }
-
- if($schreibschutz=="1"){
- $this->app->Tpl->Set('TAB1',"Der Schreibschutz ist aktiviert. Bitte entfernen Sie diesen.
");
- }
- else{
-
- if(!empty($posAdd)){
- try{
- if($sumposition) {
- $scanArticleService->saveSumedPositions('auftrag', $id);
- }
- else{
- $scanArticleService->savePositions('auftrag', $id);
- }
- $this->app->Tpl->Set('MESSAGE',"{|Positionen hinzugefügt|}
");
- } catch(Exception $e){
- $this->app->Tpl->Set('MESSAGE',"{|Positionen nicht gespeichert|}!
");
- }
- }
-
- if(!empty($posDel)){
- $scanArticleService->clearAllArticleDataInSession('auftrag');
- }
-
- $gescannteArtikel = $scanArticleService->getAllArticleDataFromSession('auftrag');
- if(!empty($gescannteArtikel)){
-
- $table = new EasyTable($this->app);
- $table->headings = ['Artikelnummer','Artikel','Menge','Preis'];
-
- foreach($gescannteArtikel as $a){
-
- $row['nummer'] = $a['number'];
- $row['name'] = $a['name'];
- $row['menge'] = $a['amount'];
- $row['preis'] = $a['price'];
-
- if(!empty($row)){
- $table->AddRow($row);
- }
- }
- $table->DisplayNew('GESCANNTEARTIKEL','Preis','noAction');
- $this->app->Tpl->Set('POSITIONENSPEICHERN',' ');
- }
-
- $this->app->Tpl->Parse('TAB1','auftrag_ean.tpl');
- }
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- }
-
- function AuftragUpdateVerband()
- {
- $id=$this->app->Secure->GetGET("id");
- $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
- $msg = $this->app->erp->base64_url_encode("Die Verbandsinformation wurde neu geladen!
");
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
- }
-
- function AuftragDeleteRabatte()
- {
-
- $id=$this->app->Secure->GetGET("id");
- $this->app->DB->Update("UPDATE auftrag SET rabatt='',rabatt1='',rabatt2='',rabatt3='',rabatt4='',rabatt5='',realrabatt='' WHERE id='$id' LIMIT 1");
- $msg = $this->app->erp->base64_url_encode("Die Rabatte wurden entfernt!
");
- $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id.'&msg='.$msg);
- }
-
- function AuftragShopexport()
- {
- $id=$this->app->Secure->GetGET('id');
- $shop=$this->app->DB->Select("SELECT shop FROM auftrag WHERE id='$id' LIMIT 1");
- $this->app->remote->RemoteUpdateAuftrag($shop,$id);
- $msg = $this->app->erp->base64_url_encode("Versandstatus an Shop übertragen
");
- $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id.'&msg='.$msg);
- }
-
- function AuftragDateien()
- {
- $id = $this->app->Secure->GetGET('id');
- $this->AuftragMenu();
- $this->app->Tpl->Add('UEBERSCHRIFT',' (Dateien)');
- $this->app->YUI->DateiUpload('PAGE','Auftrag',$id);
- }
-
- function AuftragSchreibschutz()
- {
-
- $id = $this->app->Secure->GetGET('id');
- $this->app->DB->Update("UPDATE auftrag SET zuarchivieren='1' WHERE id='$id'");
- $this->app->DB->Update("UPDATE auftrag SET schreibschutz='0' WHERE id='$id'");
- $this->app->erp->AuftragProtokoll($id,"Schreibschutz entfernt");
- $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id);
- }
-
- function AuftragTracking()
- {
- $tracking = $this->app->Secure->GetGET("tracking");
- // Wir werden eine PDF Datei ausgeben
- header('Content-type: application/html');
-
- // Es wird downloaded.pdf benannt
- header('Content-Disposition: attachment; filename="'.$tracking.'.html"');
-
- // Die originale PDF Datei heißt original.pdf
- if(is_file('/var/data/userdata/tracking/'.$tracking.'.html')){
- readfile('/var/data/userdata/tracking/' . $tracking . '.html');
- }
- $this->app->ExitXentral();
- }
-
-
- function AuftragZahlungMahnungswesen()
- {
- $this->AuftragMenu();
- $this->AuftragMiniDetail('TAB1',true);
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- }
-
-
-
- function AuftragLiveTabelleZeit($parsetarget="")
- {
- $id = $this->app->Secure->GetGET("id");
-
- $table = new EasyTable($this->app);
-
- $sql = "SELECT
- z.aufgabe as aufgabe, a.name as name, DATE_FORMAT(z.von,'%d.%m.%y %H:%i') as von, DATE_FORMAT(z.bis,'%d.%m.%y %H:%i') as bis,
- CONCAT(LPAD(HOUR(TIMEDIFF(bis, von)),2,'0'),':',LPAD(MINUTE(TIMEDIFF(bis, von)),2,'0')) AS dauer
-
- FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse WHERE z.auftrag='$id' order by z.von";
- //,if(z.abrechnen,if(z.abgerechnet!=1 AND z.abrechnen='1','offen','abgerechnet'),'abgeschlossen') as status
-
- $table->Query($sql);
- $artikel = $table->DisplayNew("return","Dauer","noAction");
-
- if($parsetarget==''){
- echo $artikel;
- $this->app->ExitXentral();
- }
- $this->app->Tpl->Add($parsetarget,$artikel);
- }
-
- function AuftragLiveTabelle()
- {
- $id = $this->app->Secure->GetGET("id");
- $status = $this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
-
- $table = new EasyTable($this->app);
-
- if($status==='freigegeben')
- {
- $table->Query("SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, ap.menge as Menge,
- if(a.lagerartikel,if(a.porto,'-',if((SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel) > ap.menge,(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),
- if((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel)>0,CONCAT('',(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),' '),
- 'aus '))),'-') as Lager
- FROM auftrag_position ap, artikel a WHERE ap.auftrag='$id' AND a.id=ap.artikel");
- $artikel = $table->DisplayNew("return","Lager","noAction");
- } else {
- $table->Query("SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, if(a.lagerartikel,ap.menge,'-') as M
- FROM auftrag_position ap, artikel a WHERE ap.auftrag='$id' AND a.id=ap.artikel");
- $artikel = $table->DisplayNew("return","Menge","noAction");
- }
- echo $artikel;
- $this->app->ExitXentral();
- }
-
-
-
-
- function AuftragEditable()
- {
- $this->app->YUI->AARLGEditable();
- }
-
- function Custom($typ)
- {
- return '';
- }
-
- function AuftragIconMenu($id,$prefix="")
- {
- $storno = '';
- $status = '';
- $projekt = 0;
- $anfrageid = 0;
- $kreditlimit_ok = 0;
- $lieferantenauftrag = 0;
- $art = '';
- $adresse = 0;
- $shop = 0;
- $shopexportstatus = '';
- $auftragArr = $id <=0?null:$this->app->DB->SelectRow(
- sprintf(
- 'SELECT status,projekt,anfrageid,kreditlimit_ok,lieferantenauftrag,art,adresse,shopextstatus,shop
- FROM auftrag
- WHERE id = %d
- LIMIT 1',
- $id
- )
- );
- if(!empty($auftragArr)){
- $shop = $auftragArr['shop'];
- $shopextstatus = $auftragArr['shopextstatus'];
- $adresse = $auftragArr['adresse'];
- $status = $auftragArr['status'];//$auftragArr[''];// $this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
- $projekt = $auftragArr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
- $anfrageid = $auftragArr['anfrageid'];//$this->app->DB->Select("SELECT anfrageid FROM auftrag WHERE id='$id' LIMIT 1");
- $kreditlimit_ok = $auftragArr['kreditlimit_ok'];//$this->app->DB->Select("SELECT kreditlimit_ok FROM auftrag WHERE id='$id' LIMIT 1");
- $lieferantenauftrag = $auftragArr['lieferantenauftrag'];//$this->app->DB->Select("SELECT lieferantenauftrag FROM auftrag WHERE id='$id' LIMIT 1");
- $art = $auftragArr['art'];
- }
- $freigabe = '';
- if($status==='angelegt' || $status=='') {
- $freigabe = "Auftrag freigeben ";
- $freigabe .= "Auftrag freigeben + AB per Mail ";
- }
-
- $proformapopup = '';
- $proformarechnungoption = '';
- $proformarechnungcase = '';
-
- $casehook = '';
- $optionhook = '';
- $kreditlimit = '';
- $shopexport = '';
- $auswahlentsprechendkommissionierung = '';
- $this->app->erp->RunHook('auftragiconmenu_option', 5, $id, $casehook, $optionhook, $status, $prefix);
-
- if($anfrageid > 0){
- $freigabe .= "in Anfrage rückführen ";
- }
-
- if($kreditlimit_ok==0 && $this->app->erp->RechteVorhanden('auftrag','kreditlimit')){
- $kreditlimit .= "Kreditlimit für diesen Auftrag freigeben ";
- }
-
- $checkifrgexists = $this->app->DB->Select("SELECT id FROM rechnung WHERE auftragid='$id' LIMIT 1");
-
- if($status !== 'storniert') {
- $storno = 'Auftrag stornieren ';
- }
- else {
- $showrueckgaenig = $this->app->DB->Select(sprintf('SELECT id FROM lieferschein WHERE auftragid=%d LIMIT 1', $id)) <= 0
- && $this->app->DB->Select(sprintf('SELECT id FROM rechnung WHERE auftragid=%d LIMIT 1', $id)) <= 0;
- if($showrueckgaenig) {
- $storno = 'Auftrag Storno rückgängig ';
- }
- }
-
- /*$anzahl_ls = $this->app->DB->Select("SELECT COUNT(id) FROM lieferschein WHERE auftragid='$id'");
- $anzahl_re = $this->app->DB->Select("SELECT COUNT(id) FROM rechnung WHERE auftragid='$id'");
-
- if($status=="storniert" && $anzahl_ls <=0 && $anzahl_re<=0)
- $storno = "Auftrag Storno rückgängig ";
- else if($status!="storniert")
- $storno = "Auftrag stornieren ";*/
-
- $kommissionierart = $this->app->DB->Select("SELECT kommissionierverfahren FROM projekt WHERE id='$projekt' LIMIT 1");
- //$art = $this->app->DB->Select("SELECT art FROM auftrag WHERE id='$id' LIMIT 1");
- $alleartikelreservieren = '';
- $teillieferungen = '';
- if($status==='freigegeben') {
- $alleartikelreservieren = "alle Artikel reservieren ";
-
-
- if($kommissionierart === "zweistufig" || $kommissionierart === "lieferscheinlagerscan" || $kommissionierart==="lieferscheinscan") {
- if($art==="rechnung"){
- $auswahlentsprechendkommissionierung = "Auto-Versand: RE u. LS erstellen (ohne Lager) ";
- }
- else{
- $auswahlentsprechendkommissionierung = "Auto-Versand: an Versandzentrum übergeben ";
- }
- }
- else if($kommissionierart === "lieferschein" || $kommissionierart === "lieferscheinlager"){
- $auswahlentsprechendkommissionierung = "Auto-Versand: RE u. LS erstellen (mit Lager) ";
- }
- else{
- $auswahlentsprechendkommissionierung = "Auto-Versand: RE u. LS erstellen (ohne Lager) ";
- }
- }
-
-
- $zertifikatoption = '';
- $zertifikatcase = '';
- if($adresse > 0 && $this->app->erp->RechteVorhanden('zertifikatgenerator','list')) {
- $zertifikate = $this->app->DB->Select("SELECT ds.datei
- FROM datei_stichwoerter ds
- INNER JOIN datei_stichwoerter ds2 ON ds.datei = ds2.datei AND ds2.objekt = 'Artikel'
- INNER JOIN auftrag_position ap ON ap.artikel = ds2.parameter AND ap.auftrag = '$id'
- WHERE ds.objekt = 'Adressen' AND ds.parameter = '$adresse'
- GROUP BY ds.datei LIMIT 1");
- if(!empty($zertifikate)) {
- $zertifikatoption = 'Zertifikate anhängen ';
- $zertifikatcase = "case 'zertifikate': if(!confirm('Zertifikate wirklich laden?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=zertifikate&id=%value%'; break; ";
- }
- }
-
- $artikeleinlagern = '';
- $artikelauslagern = '';
- $menueinlagern = '';
- $menuauslagern = '';
- $shopupdate = '';
- $menushopupdate = '';
- $optioncustom = $this->Custom('option');
- $casecustom = $this->Custom('case');
- if($this->app->erp->RechteVorhanden('auftrageinauslagern','einlagern'))
- {
- $artikeleinlagern = 'Artikel einlagern ';
- $menueinlagern = " case 'artikeleinlagern': if(!confirm('Artikel wirklich einlagern?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrageinauslagern&action=einlagern&id=%value%'; break;";
- }
- if($this->app->erp->RechteVorhanden('auftrageinauslagern','auslagern'))
- {
- $artikelauslagern = 'Artikel auslagern ';
- $menuauslagern = " case 'artikelauslagern': if(!confirm('Artikel wirklich auslagern?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrageinauslagern&action=auslagern&id=%value%'; break;";
- }
-
- if($status === 'abgeschlossen' && $this->app->erp->RechteVorhanden('auftrag','shopexport'))
- {
- if($shop > 0 && $shopexportstatus != 'abgeschlossen') {
- $shopexport = 'Status an Shop zurückmelden ';
- $menushopupdate = " case 'shopexport': if(!confirm('Status wirklich an Shop melden?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=shopexport&id=%value%'; break;";
- }
- }
- if($this->app->erp->RechteVorhanden('lieferkette', 'create'))
- {
- if(!$this->app->DB->Select("SELECT id FROM lieferkette WHERE auftrag = '$id'"))
- {
- $caselieferkette = "case 'lieferkette': window.location.href='index.php?module=lieferkette&action=create&id=%value%'; break;";
- $optionlieferkette = "Lieferkette erzeugen ";
- }
- }
-
- if($this->app->erp->RechteVorhanden('belegeimport', 'belegcsvexport'))
- {
- $casebelegeimport = "case 'belegeimport': window.location.href='index.php?module=belegeimport&action=belegcsvexport&cmd=auftrag&id=%value%'; break;";
- $optionbelegeimport = "Export als CSV ";
- }
-
- $extendtext = '';
- if($checkifrgexists>0) {
- $extendtext = 'HINWEIS: Es existiert bereits eine Rechnung zu diesem Auftrag! ';
- }
-
- if($lieferantenauftrag!='1') {
- $alsrechnung = 'als Rechnung weiterführen ';
- }
-
- $hookoption = '';
- $hookcase = '';
- $this->app->erp->RunHook('Auftrag_Aktion_option',3, $id, $status, $hookoption);
- $this->app->erp->RunHook('Auftrag_Aktion_case',3, $id, $status, $hookcase);
- $menu ="
-
-
-
-
- Aktion:
- bitte wählen ...
- $storno
- Auftrag kopieren
- $freigabe
- Auftrag abschicken
-
- $alsbestellung
- $alsproduktion
- als Lieferschein weiterführen
- $alsrechnung
- $proformarechnungoption
- als abgeschlossen markieren
- $alsfreigegeben
-
- $kreditlimit
- $teillieferungen
- $auswahlentsprechendkommissionierung
- $zertifikatoption
- $artikeleinlagern
- $artikelauslagern
- $shopexport
- $optionlieferkette
- $optioncustom
- $optionhook
- $optionbelegeimport
- $alleartikelreservieren
- $hookoption
- PDF öffnen
-
-
- ";
-
-
- $menu .= "
- ";
-
- //$tracking = $this->AuftragTrackingTabelle($id);
-
- $menu = str_replace('%value%',$id,$menu);
- return $menu.$proformapopup;
- }
-
-
- /**
- * @param int $id
- *
- * @return string
- */
- public function AuftragTrackingTabelle($id)
- {
- $table = new EasyTable($this->app);
-
- if($id > 0) {
- $table->Query(
- "SELECT if(v.versendet_am!='0000-00-00', DATE_FORMAT(v.versendet_am,'%d.%m.%Y'),CONCAT('Heute im VersandAktuell im Versand -> als RMA markieren ')) as datum, v.versandunternehmen as versand, v.tracking as L,
- CONCAT('',l.belegnr,' zum LS ') as LS,
- CONCAT('',r.belegnr,' zur RE ') as RE,
- if(tracking!='',CONCAT('Online-Status '),'')
- FROM versand v
- INNER JOIN lieferschein l ON v.lieferschein=l.id
- LEFT JOIN rechnung r ON v.rechnung=r.id
- WHERE l.auftragid='$id' AND l.auftrag!=''"
- );
- }
-
- if(empty($table->datasets)) {
- return 'Keine Versandinformationen vorhanden';
- }
-
- $result = $table->DisplayNew('return','Tracking','noAction');
-
- $heuteimversand = $this->app->DB->Select(
- "SELECT if(v.versendet_am!='0000-00-00', DATE_FORMAT(v.versendet_am,'%d.%m.%Y'),'Heute im Versand') as datum
- FROM versand v
- INNER JOIN lieferschein l ON v.lieferschein=l.id
- WHERE l.auftragid='$id' AND l.auftrag!=''"
- );
-
- if($heuteimversand==='Heute im Versand'){
- $result .= "RMA jetzt starten ";
- }
-
- return $result;
- }
-
- function AuftragPDFfromArchiv()
- {
- $id = $this->app->Secure->GetGET("id");
- $archiv = $this->app->DB->Select("SELECT table_id from pdfarchiv where id = '$id' LIMIT 1");
- if($archiv)
- {
- $projekt = $this->app->DB->Select("SELECT projekt from auftrag where id = '".(int)$archiv."'");
- }
- if(class_exists('AuftragPDFCustom'))
- {
- if($archiv)$Brief = new AuftragPDFCustom($this->app,$projekt);
- }else{
- if($archiv)$Brief = new AuftragPDF($this->app,$projekt);
- }
- if($archiv && $content = $Brief->getArchivByID($id))
- {
- header('Content-type: application/pdf');
- header('Content-Disposition: attachment; filename="'.$content['belegnr'].'.pdf"');
- echo $content['file'];
- $this->app->ExitXentral();
- }
- header('Content-type: application/pdf');
- header('Content-Disposition: attachment; filename="Fehler.pdf"');
- $this->app->ExitXentral();
- }
-
- /**
- * @var null|int $id
- *
- * @return array
- */
- protected function ajaxMiniDetailLager($id = null)
- {
- if($id === null){
- $id = (int)$this->app->Secure->GetGET('id');
- }
- $artikelRow = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT id, mindesthaltbarkeitsdatum, chargenverwaltung
- FROM artikel WHERE id = %d AND lagerartikel = 1 LIMIT 1', $id
- )
- );
- if(empty($artikelRow)){
- return ['inhalt' => 'kein Lagerartikel
'];
- }
-
- $lastCol = 'Lager';
- $table = new EasyTable($this->app);
- $warning = '';
- if(!empty($artikelRow['mindesthaltbarkeitsdatum'])) {
- $table->Query(
- sprintf(
- 'SELECT ' . $this->app->erp->FormatMenge('sum(lpi.menge)') . ' as menge, l.bezeichnung as Lager, ' . $this->app->erp->FormatMenge('sum(lm.menge)') . ' as `MHD-Menge`
- FROM lager l
- INNER JOIN lager_platz lp ON l.id = lp.lager AND l.geloescht = 0
- INNER JOIN lager_platz_inhalt lpi ON lp.id = lpi.lager_platz AND lpi.artikel = %d
- LEFT JOIN (
- SELECT SUM(menge) AS menge, lager_platz
- FROM `lager_mindesthaltbarkeitsdatum`
- WHERE artikel = %d
- GROUP BY lager_platz
- ) AS lm ON lp.id = lm.lager_platz
- GROUP BY l.id
- ORDER BY l.bezeichnung',
- (int)$id, (int)$id
- )
- );
- if(!empty($table->datasets)) {
- $showBestbefore = false;
- foreach($table->datasets as $dataSetKey => $dataset) {
- if((string)$dataset['menge'] !== (string)$dataset['MHD-Menge']) {
- $showBestbefore = true;
- break;
- }
- }
- if(!$showBestbefore) {
- foreach($table->datasets as $dataSetKey => $dataset) {
- unset($table->datasets[$dataSetKey]['MHD-Menge']);
- }
- unset($table->headings[(!empty($table->headings)?count($table->headings):0)-1]);
- } else {
- $lastCol = 'MHD-Menge';
- $table->align[2] = 'right';
- foreach($table->datasets as $dataSetKey => $dataset) {
- if(str_replace(',','.',$dataset[$lastCol]) < str_replace(',','.',$dataset['menge'])) {
- $table->datasets[$dataSetKey][$lastCol] = ''.$dataset[$lastCol].' ';
- $warning = 'Es sind weniger MHD-Mengen als Lagerartikel vorhanden! ';
- }
- }
- }
- }
- }
- elseif(!empty($artikelRow['chargenverwaltung'])) {
- $table->Query(
- sprintf(
- 'SELECT ' . $this->app->erp->FormatMenge('sum(lpi.menge)') . ' as menge, l.bezeichnung as Lager , ' . $this->app->erp->FormatMenge('sum(lc.menge)') . ' as `Chargen-Menge`
- FROM lager l
- INNER JOIN lager_platz lp ON l.id = lp.lager AND l.geloescht = 0
- INNER JOIN lager_platz_inhalt lpi ON lp.id = lpi.lager_platz AND lpi.artikel = %d
- LEFT JOIN (
- SELECT SUM(menge) AS menge, lager_platz
- FROM `lager_charge`
- WHERE artikel = %d
- GROUP BY lager_platz
- ) AS lc ON lp.id = lc.lager_platz
- GROUP BY l.id
- ORDER BY l.bezeichnung',
- (int)$id, (int)$id
- )
- );
- if(!empty($table->datasets)) {
- $showBatch = false;
- foreach($table->datasets as $dataSetKey => $dataset) {
- if((string)$dataset['menge'] !== (string)$dataset['Chargen-Menge']) {
- $showBatch = true;
- break;
- }
- }
- if(!$showBatch) {
- foreach($table->datasets as $dataSetKey => $dataset) {
- unset($table->datasets[$dataSetKey]['Chargen-Menge']);
- }
- unset($table->headings[(!empty($table->headings)?count($table->headings):0)-1]);
- } else {
- $lastCol = 'Chargen-Menge';
- $table->align[2] = 'right';
- foreach($table->datasets as $dataSetKey => $dataset) {
- if(str_replace(',','.',$dataset[$lastCol]) < str_replace(',','.',$dataset['menge'])) {
- $table->datasets[$dataSetKey][$lastCol] = ''.$dataset[$lastCol].' ';
- $warning = 'Es sind weniger Chargen-Mengen als Lagerartikel vorhanden! ';
- }
- }
- }
- }
- }
- else{
- $table->Query(
- sprintf(
- 'SELECT ' . $this->app->erp->FormatMenge('sum(lpi.menge)') . ' as menge, l.bezeichnung as Lager
- FROM lager l
- INNER JOIN lager_platz lp ON l.id = lp.lager AND l.geloescht = 0
- INNER JOIN lager_platz_inhalt lpi ON lp.id = lpi.lager_platz AND lpi.artikel = %d
- GROUP BY l.id
- ORDER BY l.bezeichnung',
- (int)$id
- )
- );
- }
- $table->align[0] = 'right';
- $table->align[1] = 'left';
-
- return [
- 'inhalt'=>
- ''.$table->DisplayNew('return',$lastCol,'noAction').$warning.'
'
- ];
- }
-
- /**
- * @param null|int $id
- *
- * @return array
- */
- protected function ajaxMiniDetailLagerSaveInterneBemerkung($id = null)
- {
- if($id === null){
- $id = (int)$this->app->Secure->GetGET('id');
- }
- $internebemerkung = $this->app->Secure->GetPOST('internebemerkung');
- $this->app->DB->Update(
- sprintf(
- "UPDATE `auftrag` SET `internebemerkung` = '%s' WHERE `id` = %d LIMIT 1",
- $internebemerkung, $id
- )
- );
- return ['status' => 1];
- }
-
- /**
- * @param mixed $ret
- */
- protected function sendAjax($ret)
- {
- header('Content-Type: application/json');
- echo json_encode($ret);
- $this->app->ExitXentral();
- }
-
- /**
- * @param string $parsetarget
- * @param bool $menu
- */
- public function AuftragMiniDetail($parsetarget='',$menu=true)
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $cmd = $this->app->Secure->GetGET('cmd');
- if($cmd === 'lager') {
- $ret = $this->ajaxMiniDetailLager($id);
- $this->sendAjax($ret);
- }
- if($cmd === 'saveinternebemerkung') {
- $ret = $this->ajaxMiniDetailLagerSaveInterneBemerkung($id);
- $this->sendAjax($ret);
- }
-
- if(
- !$this->app->DB->Select(
- sprintf('SELECT deckungsbeitragcalc FROM auftrag WHERE id = %d LIMIT 1',$id)
- )
- ){
- $this->app->erp->BerechneDeckungsbeitrag($id,'auftrag');
- }
- $auftragArr = $this->app->DB->SelectArr(
- sprintf(
- "SELECT *,DATE_FORMAT(lieferdatum,'%%d.%%m.%%Y') as lieferdatum
- FROM auftrag
- WHERE id=%d
- LIMIT 1",
- $id
- )
- );
- $addressId = $auftragArr[0]['adresse'];
- $projectId = $auftragArr[0]['projekt'];
- $adrArr = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT kundennummer, name FROM adresse WHERE id=%d LIMIT 1',
- $addressId
- )
- );
- $kundennummer = $adrArr['kundennummer'];
- $projekt = empty($projectId)?'':$this->app->DB->Select(
- sprintf(
- 'SELECT abkuerzung FROM projekt WHERE id= %d LIMIT 1',
- $projectId
- )
- );
- $kundenname = $adrArr['name'];
- $this->app->Tpl->Set(
- 'KUNDE',
- ""
- .$kundennummer." ".$kundenname
- );
- if($this->app->erp->RechteVorhanden('projekt','dashboard')){
- $this->app->Tpl->Set(
- 'PROJEKT',
- "$projekt "
- );
- }
- else{
- $this->app->Tpl->Set('PROJEKT', $projekt);
- }
- $this->app->Tpl->Set('IHREBESTELLNUMMER',$auftragArr[0]['ihrebestellnummer']);
-
- $rechnungs = $addressId <= 0?0: $this->app->DB->Select(
- "SELECT SUM(soll-ist)
- FROM rechnung
- WHERE status != 'angelegt' AND zahlungsstatus != 'bezahlt'
- AND adresse = '".$addressId."'"
- );
- $gutschrifts = $addressId <= 0?0:$this->app->DB->Select(
- "SELECT SUM(soll-ist)
- FROM gutschrift
- WHERE status != 'angelegt'
- AND (manuell_vorabbezahlt != '0000-00-00' OR manuell_vorabbezahlt IS NOT NULL)
- AND adresse = '".$addressId."'"
- );
-
- $kundensaldo = $rechnungs - $gutschrifts;
- $kundensaldo = round($kundensaldo, 2);
-
- if($kundensaldo > 0){
- $kundensaldo = "-".number_format($kundensaldo,2,',','.')." ";
- }
- else if($kundensaldo == 0){
- $kundensaldo = '0,00';
- }
- else{
- $kundensaldo = number_format($kundensaldo,2,',','.');
- }
-
- $this->app->Tpl->Set('KUNDENSALDO', $kundensaldo);
-
- $zahlungsweisearr = $this->app->erp->GetZahlungsweise('auftrag', $id);
- if($zahlungsweisearr) {
- foreach($zahlungsweisearr as $k => $v) {
- if($k == $auftragArr[0]['zahlungsweise']) {
- $auftragArr[0]['zahlungsweise'] = $v;
- break;
- }
- }
- }
-
- $versandartarr = $this->app->erp->GetVersandartAuftrag((int)$projectId);
- if($versandartarr){
- foreach($versandartarr as $k => $v) {
- if($k == $auftragArr[0]['versandart']){
- $auftragArr[0]['versandart'] = $v;
- break;
- }
- }
- }
-
- $this->app->Tpl->Set('ZAHLWEISE',$auftragArr[0]['zahlungsweise']);
- if($auftragArr[0]['lieferdatum']==='00.00.0000') {
- $auftragArr[0]['lieferdatum']='sofort';
- }
- $this->app->Tpl->Set('WUNSCHLIEFERDATUM',$auftragArr[0]['lieferdatum']);
- $gebuchtezeit = $this->app->DB->Select(
- "SELECT IFNULL(SUM(TIME_TO_SEC(TIMEDIFF(bis, von)))/3600,0)
- FROM zeiterfassung z
- LEFT JOIN auftrag_position ap ON ap.id = z.auftragpositionid
- WHERE z.auftrag = '$id' OR ap.auftrag = '$id'"
- );
-
- if(0){
- $gebuchtezeit = (int)$gebuchtezeit.":".round(fmod($gebuchtezeit,1)*60);//Alternative Zeitangabe
- }else{
- $gebuchtezeit = str_replace(".", ",", round($gebuchtezeit,2));
- }
- $summebrutto = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
- $this->app->Tpl->Set('DECKUNGSBEITRAG',0);
- $this->app->Tpl->Set('DBPROZENT',0);
- $this->app->Tpl->Set('GEBUCHTEZEIT',0);
-
- if($auftragArr[0]['ust_befreit']==0){
- $this->app->Tpl->Set('STEUER', "Inland");
- }
- else if($auftragArr[0]['ust_befreit']==1){
- $this->app->Tpl->Set('STEUER', "EU-Lieferung");
- }
- else{
- $this->app->Tpl->Set('STEUER', "Export");
- }
-
- $this->app->Tpl->Set('DELIVERYTHRESHOLDVATID',!empty($auftragArr[0]['deliverythresholdvatid'])?$auftragArr[0]['deliverythresholdvatid']:'');
-
-
- $this->app->Tpl->Set('GESAMTSUMME',number_format($summebrutto,2,",",""));
-
- //ENDE ZUSTANDSAUTOMAT FARBEN
-
- // angebot
-
- $angebot[]['angebot'] = $this->app->DB->Select(
- "SELECT CONCAT('',if(an.belegnr='0' OR an.belegnr='','ENTWURF',an.belegnr),'
- ')
- FROM auftrag a
- LEFT JOIN angebot an ON an.id=a.angebotid
- WHERE a.id='$id'
- LIMIT 1"
- );
-
- if(!empty($angebot)) {
- $cangebot = (!empty($angebot)?count($angebot):0);
- for($li=0;$li<$cangebot;$li++) {
- $this->app->Tpl->Add('ANGEBOT',$angebot[$li]['angebot']);
- if($li<(!empty($angebot)?count($angebot):0)){
- $this->app->Tpl->Add('ANGEBOT', " ");
- }
- }
- }
- else{
- $this->app->Tpl->Set('ANGEBOT', '-');
- }
- $lieferschein = $this->app->DB->SelectPairs(
- "SELECT
- l.id, CONCAT(
- '','>'),
- if(l.belegnr='0' OR l.belegnr='','ENTWURF',l.belegnr),
- if(l.status='storniert',' ',''),
- '
- '
- ) as lieferschein
- FROM lieferschein l
- WHERE l.auftragid='$id'"
- );
- $deliveryNoteIds = [0];
- $hasDeliveryNotes = false;
- $deliveryNoteIdsImplode = '0';
- if(empty($lieferschein)) {
- $this->app->Tpl->Set('LIEFERSCHEIN', '-');
- }
- else{
- $hasDeliveryNotes = true;
- $deliveryNoteIds = array_keys($lieferschein);
- $deliveryNoteIdsImplode = implode(',', $deliveryNoteIds);
- $this->app->Tpl->Set('LIEFERSCHEIN', implode(' ', $lieferschein));
- }
-
- /* rechnungen */
-
- $sammelrechnungcheck = $this->app->DB->Select("SELECT * FROM sammelrechnung_position LIMIT 1");
- if($sammelrechnungcheck) {
- $rechnung = $this->app->DB->SelectPairs(
- "SELECT
- r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert',' ',''),'
- ') as rechnung
- FROM rechnung r
- WHERE r.auftragid='$id'
- union
- SELECT
- r.id,CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert',' ',''),'
- ') as rechnung
- FROM rechnung r
- INNER JOIN sammelrechnung_position s ON r.id = s.rechnung
- INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id
- WHERE p.auftrag='$id'
- union
- SELECT
- r.id,CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert',' ',''),'
- ') as rechnung
- FROM rechnung r
- INNER JOIN sammelrechnung_position s ON r.id = s.rechnung
- INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id
- INNER JOIN auftrag_position p ON p.id = lp.auftrag_position_id
- WHERE p.auftrag='$id'
- ");
- $rechnungids = array_keys($rechnung);
- /*$this->app->DB->SelectArr(
- "SELECT r.id as rid
- FROM rechnung r
- WHERE r.auftragid ='$id' AND r.auftrag!=''
- union
- SELECT s.rechnung as rid
- FROM sammelrechnung_position s
- INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id
- WHERE p.auftrag = '$id' "
- );*/
- }
- else{
- $rechnung = $this->app->DB->SelectPairs(
- "SELECT
- r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert',' ',''),'
- '
- ) as rechnung
- FROM rechnung r
- WHERE r.auftragid='$id'"
- );
-
- $rechnungids =array_keys($rechnung);
- /*$this->app->DB->SelectArr(
- "SELECT r.id as rid
- FROM rechnung r
- WHERE r.auftragid='$id' AND r.auftrag!='' "
- );*/
- }
-
- if(!$rechnung) {
- $rechnung = $this->app->DB->SelectPairs(
- "SELECT
- r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert',' ',''),'
- '
- ) as rechnung
- FROM rechnung r
- INNER JOIN auftrag a ON a.rechnungid = r.id
- WHERE a.id='$id'
- ");
- }
-
- if(!empty($rechnung)){
- $this->app->Tpl->Set('RECHNUNG', implode(' ', $rechnung));
- }
- else{
- $this->app->Tpl->Set('RECHNUNG', '-');
- }
-
- /* ende rechnungen */
- $positionIdToArticleIds = $this->app->DB->SelectPairs(
- sprintf(
- 'SELECT id, artikel
- FROM auftrag_position
- WHERE auftrag = %d ',
- $id
- )
- );
- $articleIds = array_unique(array_values($positionIdToArticleIds));
- $positionIds = array_keys($positionIdToArticleIds);
- if(empty($articleIds)) {
- $articleIds = [0];
- }
- $bpPositions = [];
- $bpIds = [0];
- $bIds = [0];
- $hasSupplierOrder = false;
- if(empty($positionIds)) {
- $positionIds = [0];
- }
- else {
- $bpPositions = $this->app->DB->SelectPairs(
- sprintf(
- 'SELECT bp.id, bp.bestellung
- FROM bestellung_position AS bp
- WHERE bp.auftrag_position_id IN (%s)',
- implode(',', $positionIds)
- )
- );
-
- if(!empty($bpPositions)) {
- $bpIds = array_keys($bpPositions);
- $bIds = array_unique(array_values($bpPositions));
- $hasSupplierOrder = true;
- }
- }
- $bpIdsImplode = implode(', ', $bpIds );
- $bIdsImplode = implode(', ', $bIds );
-
- $articleIdsimplode = implode(', ', $articleIds );
- $positionIdsImplode = implode(', ', $positionIds );
-
- $check = empty($hasSupplierOrder)?[]:$this->app->DB->SelectPairs(
- sprintf(
- 'SELECT b.id, b.belegnr
- FROM bestellung b
- WHERE b.id IN (%s)
- ORDER BY b.belegnr, b.id',
- $bIdsImplode
- )
- );
- if($check) {
- $bestellungen = [];
- foreach($check as $supplierOrderId => $supplierOrderNumber) {
- $bestellungen[] = ''
- .($supplierOrderNumber?$supplierOrderNumber:'ENTWURF')
- .'
-
- ';
- }
- $this->app->Tpl->Set('BESTELLUNG', implode(' ', $bestellungen));
- }
-
- $returnOrders = (array)$this->app->DB->SelectArr(
- sprintf(
- 'SELECT ro.id, ro.belegnr, ro.status
- FROM `auftrag` AS `o`
- LEFT JOIN `lieferschein` AS `dn` ON o.id = dn.auftragid
- INNER JOIN `retoure` AS `ro` ON ro.auftragid = o.id OR (ro.lieferscheinid = dn.id)
- WHERE o.id = %d
- ORDER BY ro.id',
- $id
- )
- );
- $returnOrderHtml = [];
- foreach($returnOrders as $returnOrderKey => $returnOrder) {
- $returnOrderId = $returnOrder['id'];
- $returnOrderNumber = $returnOrder['belegnr'];
- if(empty($returnOrderNumber)) {
- $returnOrderNumber = 'ENTWURF';
- }
- $isReturnOrderCanceled = $returnOrder['status'] === 'storniert';
- $returnOrderHtml[] = ''
- .($isReturnOrderCanceled?'':'').$returnOrderNumber.($isReturnOrderCanceled?' ':'')
- .'
-
- ';
- }
- $this->app->Tpl->Set('RETOURE', implode(' ', $returnOrderHtml));
-
- $priceRequests = empty($hasSupplierOrder)?[]: (array)$this->app->DB->SelectArr(
- sprintf(
- "SELECT pa.id, pa.belegnr, pa.status
- FROM `bestellung` AS `b`
- INNER JOIN `preisanfrage` AS `pa` ON pa.id=b.preisanfrageid
- WHERE b.id IN (%s)
- GROUP BY pa.belegnr, pa.id
- ORDER BY pa.belegnr, pa.id",
- $bIdsImplode
- )
- );
- if(!empty($priceRequests)){
- $priceRequestsHtml = [];
- foreach($priceRequests as $priceRequest) {
- $priceRequestId = $priceRequest['id'];
- $priceRequestNumber = $priceRequest['belegnr'];
- if(empty($priceRequestNumber)) {
- $priceRequestNumber = 'ENTWURF';
- }
- $isPriceRequestIsCanceled = $priceRequest['status'] === 'storniert';
- $priceRequestsHtml[] = ''
- .($isPriceRequestIsCanceled?'':'').($priceRequestNumber).($isPriceRequestIsCanceled?' ':'').'
-
- ';
- }
- $this->app->Tpl->Set('PREISANFRAGE', implode(' ', $priceRequestsHtml));
- }
-
- $tmpVersand = !$hasDeliveryNotes?[]: $this->app->DB->SelectFirstCols(
- "SELECT if(v.versendet_am!='0000-00-00',
- CONCAT(DATE_FORMAT( v.versendet_am,'%d.%m.%Y'),' ',v.versandunternehmen),
- CONCAT(
- 'Heute im VersandAktuell im Versand -> als RMA markieren '
- )
- ) as datum
- FROM versand AS v
- INNER JOIN lieferschein l ON v.lieferschein=l.id
- LEFT JOIN rechnung r ON v.rechnung=r.id
- WHERE l.id IN (".$deliveryNoteIdsImplode.") AND l.auftragid='$id' AND l.auftrag!=''"
- );
- $tracking = !$hasDeliveryNotes?null:$this->app->DB->SelectArr("SELECT
- if(v.tracking_link IS NOT NULL AND v.tracking_link != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ' '),
- if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ' '),
- if(versandunternehmen = 'dhlexpress' AND l.land != 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ' '),
- if((versandunternehmen='dhl' OR versandunternehmen='intraship' OR versandunternehmen LIKE '%dhl%') AND v.tracking!='', CONCAT(UPPER(versandunternehmen),':',v.tracking,' '),
- if(versandunternehmen LIKE '%dpd%',CONCAT(UPPER(versandunternehmen),':',v.tracking,' '),
- if(versandunternehmen LIKE '%ups%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,' '),
- if(versandunternehmen LIKE '%gls%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,' '),
- if(v.tracking!='',
- CONCAT(UPPER(versandunternehmen),': ',v.tracking),'nicht vorhanden')
- )
- )
- )
- )
- )
- )
- ) as versand2,
- if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen), ':', vp.tracking, ' '),
- if(versandunternehmen = 'dhlexpress' AND l.land != 'DE' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen), ':', vp.tracking, ' '),
- if( (versandunternehmen='dhl' OR versandunternehmen='intraship') AND vp.tracking!='', CONCAT(UPPER(versandunternehmen),':',vp.tracking,' '),
- if(versandunternehmen LIKE '%dpd%',CONCAT(UPPER(versandunternehmen),':',vp.tracking,' '),
- if(versandunternehmen LIKE '%ups%' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,' '),
- if(versandunternehmen LIKE '%gls%' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,' '),
- if(vp.tracking!='',
- CONCAT(UPPER(versandunternehmen),': ',vp.tracking),'nicht vorhanden')
- )
- )
- )
- )
- )
- ) as versand3,
- v.tracking as tracking2, vp.tracking as tracking3
- FROM versand AS v
- INNER JOIN lieferschein AS l ON v.lieferschein=l.id
- LEFT JOIN versandpakete AS vp ON v.id = vp.versand
- WHERE l.id IN (".$deliveryNoteIdsImplode.") AND l.auftragid='$id' AND l.auftrag!=''
- ORDER BY v.id, vp.nr"
- );
-
- $ctracking = $tracking?count($tracking):0;
- for($counti=0;$counti < $ctracking; $counti++) {
- if($tracking[$counti]['tracking2']!=''){
- if($counti == 0 || $tracking[$counti]['tracking2'] != $tracking[$counti-1]['tracking2']){
- $tmp[]=$tracking[$counti]['versand2'];
- }
- if($tracking[$counti]['tracking3'] != ''){
- $tmp[]=$tracking[$counti]['versand3'];
- }
- }
- }
-
- if(is_array($tmp)){
- $tracking = implode(', ', $tmp);
- }
- else{
- $tracking = '';
- }
-
- if(is_array($tmpVersand)){
- $tmpVersand = implode(', ', $tmpVersand);
- }
-
- if($tracking!='' && $tracking!=' '){
- $this->app->Tpl->Set('TRACKING', $tracking);
- }
- else {
- $this->app->Tpl->Set('TRACKING',$tmpVersand);
- }
-
-
- $icons = $this->app->YUI->IconsSQL();
- if(strpos($icons,'aac.status')) {
- $icons = $this->app->DB->Select(
- "SELECT $icons
- FROM auftrag a
- LEFT JOIN `auftragsampel_auftrag_cache` aac ON a.id = aac.auftrag
- WHERE a.id='$id'
- LIMIT 1"
- );
- }
- else{
- $icons = $this->app->DB->Select(
- "SELECT $icons FROM auftrag a WHERE a.id='$id' LIMIT 1"
- );
- }
- $this->app->Tpl->Set('STATUSICONS',$icons);
-
- $this->app->Tpl->Set('STATUS',$auftragArr[0]['status']);
- $this->app->Tpl->Set('VERSANDART',$auftragArr[0]['versandart']);
- $this->app->Tpl->Set('INTERNET',$auftragArr[0]['internet']);
- $this->app->Tpl->Set('TRANSAKTIONSNUMMER',$auftragArr[0]['transaktionsnummer']);
-
- $onlineshopName = $auftragArr[0]['shop'] <= 0?'':$this->app->DB->Select(
- sprintf(
- 'SELECT `bezeichnung` FROM `shopexport` WHERE `id` = %d LIMIT 1',
- $auftragArr[0]['shop']
- )
- );
- if($onlineshopName != ''){
- $this->app->Tpl->Set('ONLINESHOP', $onlineshopName);
- }
-
- if($menu) {
- $menu = $this->AuftragIconMenu($id);
- $this->app->Tpl->Set('MENU',$menu);
- }
-
- // ARTIKEL
- $auftragRow = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT status, projekt, standardlager,teillieferungvon FROM auftrag WHERE id = %d',
- $id
- )
- );
- $status = $auftragRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
-
- $table = new EasyTable($this->app);
-
- //$lagermehr = " app->Conf->WFconf['defaulttheme']."/images/tooltip_grau.png\" />";
-
- if($status==='freigegeben' || $status==='angelegt') {
- $anzahllager = $this->app->DB->Select("SELECT count(id) FROM lager WHERE geloescht = 0");
- $standardlager = $auftragRow['standardlager'];//$this->app->DB->Select("SELECT standardlager FROM auftrag WHERE id = '$id' LIMIT 1");
- $projektlager = 0;
- if(!$standardlager){
- $projektlager = $this->app->DB->Select("SELECT projektlager FROM projekt WHERE id = '".$auftragArr[0]['projekt']."' LIMIT 1");
- }
- if($projektlager){
- $projektlager = $auftragArr[0]['projekt'];
- }
- $standardlagertext = '';
- if($standardlager){
- $standardlagertext = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id = '$standardlager' LIMIT 1");
- }
-
- $hookjoins = '';
- $hookcolumns = '';
-
- $lastcolumn = 'Reservierung';
- $_lastcolumn = $lastcolumn;
- $this->app->erp->RunHook("auftrag_minidetail_hook1",4, $id, $hookcolumns, $hookjoins, $lastcolumn);
-
- $sql =
- "SELECT
-
- if(ap.explodiert_parent > 1,CONCAT('***',if(CHAR_LENGTH(TRIM(ap.beschreibung)) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)),if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)) as artikel,
-
- CONCAT('', ap.nummer,' ') as Nummer,
- if(isnull(b.id),'-',concat('',if(b.belegnr <> '', b.belegnr,'ENTWURF'),' ')) as Bestellung,
- ".$this->app->erp->FormatMenge("ifnull(a.gewicht,0)")." as gewicht,
-
- ".$this->app->erp->FormatMenge("ifnull(ap.menge,0)")." as Menge,
-
- concat(if(a.lagerartikel,
- if(a.porto,
- 'Porto',
- if(
- (round((
- (SELECT TRIM(SUM(l.menge))+0
- FROM lager_platz_inhalt l
- LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
- )
- - IFNULL((
- SELECT SUM(r.menge) FROM lager_reserviert r
-
- WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
- (
- ( r.parameter!='$id')
- OR (
- r.parameter='$id' AND r.posid!=ap.id)
- )) OR r.objekt!='auftrag' )
-
-
- ),0)
- ),8)
- >= round(ap.menge,8) AND (
-
- round((SELECT TRIM(SUM(l.menge))+0
- FROM lager_platz_inhalt l
- LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
- )
- - IFNULL((
- SELECT SUM(r.menge) FROM lager_reserviert r
- WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
-
- r.parameter!='$id')
-
- OR r.objekt!='auftrag' )
-
-
- ),0),8) >=
- round((SELECT sum(ap3.menge) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel),8)
- OR round(ap.menge,8) <= round(IFNULL((
- SELECT SUM(r.menge) FROM lager_reserviert r
- WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
-
- r.parameter='$id'
-
-
-
-
- ),0),8)
- )) OR ((
- round(ifnull((SELECT SUM(l.menge)
- FROM lager_platz_inhalt l
- INNER JOIN lager_platz lp ON lp.id=l.lager_platz
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
- ),0),8) - round(IFNULL((
- SELECT SUM(r.menge) FROM lager_reserviert r
- WHERE r.artikel=ap.artikel AND ((r.objekt!='auftrag' OR
-
- r.parameter!='$id')
-
- )
-
-
- ),0),8)
- > round(IFNULL(apc.menge,0),8)
-
- )
- ) ,
-
-
- CONCAT(
- ifnull(
- ifnull((
- SELECT ".$this->app->erp->FormatMenge("TRIM(SUM(l.menge))+0")."
- FROM lager_platz_inhalt l
- LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
- ,0)
-
- ,0),
- if(round((
- SELECT TRIM(SUM(l.menge))+0
- FROM lager_platz_inhalt l
- LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
- WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1),8)>0,
- CONCAT(' + ',(SELECT ".$this->app->erp->FormatMenge("(SUM(l.menge))")." FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1),'(N) '),'')
- )
-
-
- ,
- if(round((
-
- (SELECT ".$this->app->erp->FormatMenge("(SUM(l.menge))")."
- FROM lager_platz_inhalt l
- LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
- - IFNULL((SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter!='$id'),0)),8)>=0,
- CONCAT('',
- (SELECT ".$this->app->erp->FormatMenge("(SUM(l.menge))")."
- FROM lager_platz_inhalt l
- LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
-
- ,' '),
- 'aus ')
- )
- )
-
- ,if(a.porto,'Porto',if(a.stueckliste,'Set','kein Lagerartikel'))),'".($anzahllager >= 1?" lagermehr(',ap.artikel,') ":"")."') as Lager,
- ".($standardlager?"
-
- concat(if(a.lagerartikel,
- if(a.porto,
- 'Porto',
- if(
- ((
- (SELECT TRIM(SUM(l.menge))+0
- FROM lager_platz_inhalt l
- INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
- )
- - IFNULL((
- SELECT SUM(r.menge) FROM lager_reserviert r
- INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.standardlager = '$standardlager'
- WHERE r.artikel = ap.artikel AND (r.parameter <> '$id' OR r.parameter = '$id' AND r.posid != ap.id)
- ),0)
- )
- >= ap.menge AND (
-
- (SELECT TRIM(SUM(l.menge))+0
- FROM lager_platz_inhalt l
- INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
- )
- - IFNULL((
- SELECT SUM(r.menge) FROM lager_reserviert r
- INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.standardlager = '$standardlager'
- WHERE r.artikel = ap.artikel AND (r.parameter <> '$id')
- ),0)
- >=
- (SELECT sum(ap3.menge) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel)
- OR ap.menge <= IFNULL((
- SELECT SUM(r.menge) FROM lager_reserviert r
- WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
-
- r.parameter='$id'
-
-
-
-
- ),0)
- )) AND (
-
- (
- (SELECT TRIM(SUM(l.menge))+0
- FROM lager_platz_inhalt l
- LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
- )
- - IFNULL((
- SELECT SUM(r.menge) FROM lager_reserviert r
-
- WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
- (
- ( r.parameter!='$id')
- OR (
- r.parameter='$id' AND r.posid!=ap.id)
- )) OR r.objekt!='auftrag' )
-
-
- ),0)
- )
- >= ap.menge AND (
-
- (SELECT TRIM(SUM(l.menge))+0
- FROM lager_platz_inhalt l
- LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
- )
- - IFNULL((
- SELECT SUM(r.menge) FROM lager_reserviert r
- WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
-
- r.parameter!='$id')
-
- OR r.objekt!='auftrag' )
-
-
- ),0) >=
- (SELECT sum(ap3.menge) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel)
- OR ap.menge <= IFNULL((
- SELECT SUM(r.menge) FROM lager_reserviert r
- WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
-
- r.parameter='$id'
-
-
- ),0)
- )
-
- )
-
- ,
-
-
- CONCAT(
- ifnull(
- trim(ifnull(lpin2.menge
- ,0))+0
-
- ,0),
- if((
- SELECT TRIM(SUM(l.menge))+0
- FROM lager_platz_inhalt l
- INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
- WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1)>0,
- CONCAT(' + ',(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.lager='$standardlager' AND lp.autolagersperre=1 AND lp.sperrlager!=1),'(N) '),'')
- )
-
-
- ,
- if((
-
- (SELECT TRIM(SUM(l.menge))+0
- FROM lager_platz_inhalt l
- INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
- - IFNULL((SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter!='$id'),0))>=0,
- CONCAT('',
- (SELECT TRIM(ifnull(SUM(l.menge),0))+0
- FROM lager_platz_inhalt l
- INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
-
- ,' '),
- 'aus ')
- )
- )
-
- ,if(a.porto,'Porto',if(a.stueckliste,'Set','-'))) ,'".($anzahllager >= 1?" lagermehr(',ap.artikel,') ":"")."') as `$standardlagertext` ,
-
- ":($projektlager?"
-
-
-
- concat(if(a.lagerartikel,
- if(a.porto,
- 'Porto',
- if(
- ((
- ifnull((SELECT TRIM(ifnull(SUM(l.menge),0))+0
- FROM lager_platz_inhalt l
- INNER JOIN lager_platz lp ON lp.id=l.lager_platz
- INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
- ),0)
- - IFNULL((
- SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
- INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.projekt = '$projektlager'
- WHERE r.artikel = ap.artikel AND (r.parameter <> '$id' OR r.parameter = '$id' AND r.posid != ap.id)
- ),0)
- )
- >= ap.menge AND (
-
- (SELECT TRIM(ifnull(SUM(l.menge),0))+0
- FROM lager_platz_inhalt l
- INNER JOIN lager_platz lp ON lp.id=l.lager_platz
- INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
- )
- - IFNULL((
- SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
- INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.projekt = '$projektlager'
- WHERE r.artikel = ap.artikel AND (r.parameter <> '$id')
- ),0)
- >=
- (SELECT ifnull(sum(ap3.menge),0) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel)
- OR ap.menge <= IFNULL((
- SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
- WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
-
- r.parameter='$id'
-
-
-
-
- ),0)
- )) AND (
-
- (
- (SELECT TRIM(ifnull(SUM(l.menge),0))+0
- FROM lager_platz_inhalt l
- LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
- )
- - IFNULL((
- SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
-
- WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
- (
- ( r.parameter!='$id')
- OR (
- r.parameter='$id' AND r.posid!=ap.id)
- )) OR r.objekt!='auftrag' )
-
-
- ),0)
- )
- >= ap.menge AND (
-
- (SELECT TRIM(ifnull(SUM(l.menge),0))+0
- FROM lager_platz_inhalt l
- LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
- )
- - IFNULL((
- SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
- WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
-
- r.parameter!='$id')
-
- OR r.objekt!='auftrag' )
-
-
- ),0) >=
- (SELECT ifnull(sum(ap3.menge),0) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel)
- OR ap.menge <= IFNULL((
- SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
- WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
-
- r.parameter='$id'
-
-
- ),0)
- )
-
- )
-
- ,
-
-
- CONCAT(
-
- ".$this->app->erp->FormatMenge("ifnull(lpin2.menge,0)")."
-
- ,
- if((
- SELECT ifnull(SUM(l.menge),0)
- FROM lager_platz_inhalt l
- INNER JOIN lager_platz lp ON lp.id=l.lager_platz
- INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
- WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1)>0,
- CONCAT(' + ',(SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(l.menge),0)")." FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.lager='$standardlager' AND lp.autolagersperre=1 AND lp.sperrlager!=1),'(N) '),'')
- )
-
-
- ,
- if((
-
- (SELECT TRIM(ifnull(SUM(l.menge),0))+0
- FROM lager_platz_inhalt l
- INNER JOIN lager_platz lp ON lp.id=l.lager_platz
- INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
- - IFNULL((SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter!='$id'),0))>=0,
- CONCAT('',
- (SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(l.menge),0)")."
- FROM lager_platz_inhalt l
- INNER JOIN lager_platz lp ON lp.id=l.lager_platz
- INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
- WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
-
- ,' '),
- 'aus ')
- )
- )
-
- ,if(a.porto,'Porto',if(a.stueckliste,'Set','-'))),'".($anzahllager >= 1?" lagermehr(',ap.artikel,') ":"")."') as `Projektlager` ,
-
-
- ":''))."
- CONCAT(
- IFNULL((SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(r.menge),0)")." FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter='$id' AND (r.posid=ap.id OR (r.artikel=ap.artikel AND r.posid=0))),'0')
-
- ,
- ' / ',(SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(r.menge),0)")." FROM lager_reserviert r WHERE r.artikel=ap.artikel )
- ,' *') as '$_lastcolumn' $hookcolumns
-
- FROM auftrag_position ap
- INNER JOIN artikel a ON a.id = ap.artikel
- LEFT JOIN (
- SELECT apa.id, sum(apb.menge) as menge
- FROM auftrag_position apa
- INNER JOIN auftrag_position apb ON apa.artikel = apb.artikel AND apa.auftrag = '$id'
- AND apb.auftrag = '$id'
- AND apb.sort <= apa.sort
- WHERE apa.id IN (".$positionIdsImplode.") AND apb.id IN (".$positionIdsImplode.")
- GROUP BY apa.id
- ) apc ON ap.id = apc.id
-
- LEFT JOIN (
- SELECT ifnull(sum(lpi1.menge),0) as menge, lpi1.artikel
- FROM lager_platz_inhalt lpi1
- INNER JOIN lager_platz lp1 ON lpi1.lager_platz = lp1.id AND lp1.autolagersperre != 1 AND lp1.sperrlager != 1 ".($standardlager?" AND lp1.lager != '$standardlager' ":"")."
- WHERE lpi1.artikel IN (".$articleIdsimplode.")
- GROUP BY lpi1.artikel
- ) as lpin1 ON ap.artikel = lpin1.artikel
- ".($standardlager?"
-
- LEFT JOIN (
- SELECT ifnull(sum(lpi2.menge),0) as menge, lpi2.artikel
- FROM lager_platz_inhalt lpi2
- INNER JOIN lager_platz lp2 ON lpi2.lager_platz = lp2.id AND lp2.autolagersperre != 1
- AND lp2.sperrlager != 1 AND lp2.lager = '$standardlager'
- WHERE lpi2.artikel IN (".$articleIdsimplode.")
- GROUP BY lpi2.artikel
- ) as lpin2 ON ap.artikel = lpin2.artikel
-
- ":($projektlager?"
-
- LEFT JOIN (
- SELECT ifnull(sum(lpi2.menge),0) as menge, lpi2.artikel
- FROM lager_platz_inhalt lpi2
- INNER JOIN lager_platz lp2 ON lpi2.lager_platz = lp2.id AND lp2.autolagersperre != 1 AND lp2.sperrlager != 1
- INNER JOIN lager l2 ON lp2.lager = l2.id AND l2.projekt = '$projektlager'
- WHERE lpi2.artikel IN (".$articleIdsimplode.")
- GROUP BY lpi2.artikel
- ) as lpin2 ON ap.artikel = lpin2.artikel
-
- ":""))."
-
- LEFT JOIN bestellung_position bp ON bp.id IN (".$bpIdsImplode.") AND ap.id = bp.auftrag_position_id AND bp.artikel IN (".$articleIdsimplode.")
- LEFT JOIN bestellung b ON b.id IN (".$bIdsImplode.") AND b.id = bp.bestellung
- $hookjoins
- WHERE ap.auftrag='$id' AND ap.id IN (".$positionIdsImplode.")
- ORDER by ap.sort";
- //$time = microtime(true);
- $table->Query($sql);
- //$time = microtime(true) - $time;
- $gewichtanzeigen = false;
- $bestellunganzeigen = false;
- $reserviertfuerkundeanzeigen = false;
- if($table->datasets) {
- foreach($table->datasets as $k => $row) {
- if(str_replace(',','.',$row['gewicht']) > 0){
- $gewichtanzeigen = true;
- }
- if($row['Bestellung'] != '-')
- {
- $bestellunganzeigen = true;
- }
- if(isset($row['Res']) && $row['Res'] != ''){
- $reserviertfuerkundeanzeigen = true;
- }
- if($row[$_lastcolumn] != ''){
- $reserviertfuerkundeanzeigen = true;
- }
- }
- }
- if(!$bestellunganzeigen)
- {
- foreach($table->datasets as $k => $row)
- {
- unset($table->datasets[$k]['Bestellung']);
- }
- $table->headings[2] = $table->headings[3];
- if(isset($table->headings[4]))$table->headings[3] = $table->headings[4];
- if(isset($table->headings[5]))$table->headings[4] = $table->headings[5];
- if(isset($table->headings[6]))$table->headings[5] = $table->headings[6];
- if(isset($table->headings[7]))$table->headings[6] = $table->headings[7];
- if(isset($table->headings[8]))$table->headings[7] = $table->headings[8];
- if(isset($table->headings[8]))
- {
- unset($table->headings[8]);
- }elseif(isset($table->headings[7]))
- {
- unset($table->headings[7]);
- }elseif(isset($table->headings[6]))
- {
- unset($table->headings[6]);
- }elseif(isset($table->headings[5])){
- unset($table->headings[5]);
- }else{
- unset($table->headings[4]);
- }
- }
-
- if(!$gewichtanzeigen)
- {
- foreach($table->datasets as $k => $row)
- {
- unset($table->datasets[$k]['gewicht']);
- }
-
- if(!$bestellunganzeigen)
- {
- $table->headings[2] = $table->headings[3];
- }
- if(isset($table->headings[4]))$table->headings[3] = $table->headings[4];
- if(isset($table->headings[5]))$table->headings[4] = $table->headings[5];
- if(isset($table->headings[6]))$table->headings[5] = $table->headings[6];
- if(isset($table->headings[7]))$table->headings[6] = $table->headings[7];
- if(isset($table->headings[8]))$table->headings[7] = $table->headings[8];
- if(isset($table->headings[8]))
- {
- unset($table->headings[8]);
- }elseif(isset($table->headings[7]))
- {
- unset($table->headings[7]);
- }elseif(isset($table->headings[6]))
- {
- unset($table->headings[6]);
- }elseif(isset($table->headings[5]))
- {
- unset($table->headings[5]);
- }elseif(isset($table->headings[4]))
- {
- unset($table->headings[4]);
- }else{
- unset($table->headings[3]);
- }
- }
-
- if(!$reserviertfuerkundeanzeigen)
- {
- foreach($table->datasets as $k => $row)
- {
- unset($table->datasets[$k][$_lastcolumn]);
- }
- if($lastcolumn == $_lastcolumn)
- {
- unset($table->headings[(!empty($table->headings)?count($table->headings):0)-1]);
- }else {
- $cheading = !empty($table->headings)?count($table->headings):0;
- for($hc = 0; $hc < $cheading; $hc++)
- {
- if($table->headings[$hc] == $_lastcolumn)
- {
- break;
- }
- }
- for($hci = $hc; $hci < $cheading ;$hci++)
- {
- if(isset($table->headings[$hci])) {
- if(isset($table->headings[$hci + 1])) {
- $table->headings[$hci] = $table->headings[$hci + 1];
- }else{
- unset($table->headings[$hci]);
- }
- }
- }
- }
-
- if($lastcolumn == $_lastcolumn)
- {
- $lastcolumn = $table->headings[(!empty($table->headings)?count($table->headings):0)-1];
- if($lastcolumn == 'Aktion'){
- $lastcolumn = $table->headings[(!empty($table->headings)?count($table->headings):0)-2];
- }
- }
- }
-
- if($table->datasets)
- {
- foreach($table->datasets as $k => $v)
- {
- foreach($v as $k2 => $v2)
- {
- if(preg_match_all('/^(.*)lagermehr\((.*)\)(.*)$/', $v2, $matches,PREG_OFFSET_CAPTURE))
- {
- $table->datasets[$k][$k2] = $matches[1][0][0].' '.$this->app->YUI->ContentTooltip('return','index.php?module=auftrag&action=minidetail&cmd=lager&id='.$matches[2][0][0],'url').$matches[3][0][0];
- }
- }
- }
- foreach($table->headings as $k => $v)
- {
- if($v === 'Lager'){
- $table->align[$k] = 'right';
- }elseif($v === 'Menge'){
- $table->align[$k] = 'right';
- }elseif($v === 'Projektlager'){
- $table->align[$k] = 'right';
- }elseif($v == $standardlagertext){
- $table->align[$k] = 'right';
- }
- }
- }
- $artikel = $table->DisplayNew("return",$lastcolumn,"noAction","false",0,0,false);
-
- }
- else {
- //$table->Query("SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, if(a.lagerartikel,ap.menge,'-') as Menge
- $hookjoins = '';
- $hookcolumns = '';
- $lastcolumn = 'Menge';
- $this->app->erp->RunHook('auftrag_minidetail_hook1',4, $id, $hookcolumns, $hookjoins, $lastcolumn);
-
- $sql =
- "SELECT if(ap.explodiert_parent > 1,
- CONCAT('***',if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)),if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)) as artikel, CONCAT('', ap.nummer,' ') as Nummer,
- if(isnull(b.id),'-',concat('',if(b.belegnr <> '', b.belegnr,'ENTWURF'),' ')
- ) as Bestellung,a.gewicht as gewicht,
- TRIM(ap.menge)+0 as Menge
- $hookcolumns
- FROM auftrag_position AS ap
- INNER JOIN artikel AS a ON a.id=ap.artikel
- LEFT JOIN bestellung_position AS bp ON ap.id = bp.auftrag_position_id AND bp.id IN (".$bpIdsImplode.")
- LEFT JOIN bestellung AS b ON b.id = bp.bestellung AND b.id IN (".$bIdsImplode.")
- $hookjoins
- WHERE ap.id IN (".$positionIdsImplode.") AND ap.auftrag='$id'
- ORDER by ap.sort ";
-
- $table->Query($sql);
-
- $gewichtanzeigen = false;
- $bestellunganzeigen = false;
- if($table->datasets){
- foreach($table->datasets as $k => $row) {
- if($row['gewicht'] > 0){
- $gewichtanzeigen = true;
- }
- if($row['Bestellung'] != '-'){
- $bestellunganzeigen = true;
- }
- }
- }
-
- if(!$bestellunganzeigen) {
- foreach($table->datasets as $k => $row) {
- unset($table->datasets[$k]['Bestellung']);
- }
- $table->headings[2] = $table->headings[3];
- if(isset($table->headings[4])){
- $table->headings[3] = $table->headings[4];
- }
- if(isset($table->headings[5])){
- $table->headings[4] = $table->headings[5];
- }
- if(isset($table->headings[6])){
- $table->headings[5] = $table->headings[6];
- }
- if(isset($table->headings[7])){
- $table->headings[6] = $table->headings[7];
- }
- if(isset($table->headings[7]))
- {
- unset($table->headings[7]);
- }elseif(isset($table->headings[6]))
- {
- unset($table->headings[6]);
- }elseif(isset($table->headings[5])){
- unset($table->headings[5]);
- }else{
- unset($table->headings[4]);
- }
- }
-
- if(!$gewichtanzeigen)
- {
- foreach($table->datasets as $k => $row)
- {
- unset($table->datasets[$k]['gewicht']);
- }
- if(!$bestellunganzeigen)
- {
- $table->headings[2] = $table->headings[3];
- }
- if(isset($table->headings[4]))$table->headings[3] = $table->headings[4];
- if(isset($table->headings[5]))$table->headings[4] = $table->headings[5];
- if(isset($table->headings[6]))$table->headings[5] = $table->headings[6];
- if(isset($table->headings[7]))$table->headings[6] = $table->headings[7];
- if(isset($table->headings[7]))
- {
- unset($table->headings[7]);
- }elseif(isset($table->headings[6]))
- {
- unset($table->headings[6]);
- }elseif(isset($table->headings[5])){
- unset($table->headings[5]);
- }elseif(isset($table->headings[4])){
- unset($table->headings[4]);
- }else{
- unset($table->headings[3]);
- }
- }
-
- $artikel = $table->DisplayNew("return",$lastcolumn,"noAction");
- }
- $this->app->Tpl->Set('ARTIKEL',''.$artikel.'
');
- $nachartikeltarget = 'MINIDETAILNACHARTIKEL';
- $this->app->erp->RunHook("AuftragMiniDetailNachArtikel", 2, $id, $nachartikeltarget);
- //START ZUSTANDSAUTOMAT FARBEN
- if($auftragArr[0]['status']==='freigegeben'){
- $this->app->Tpl->Set(
- 'VERSANDTEXT','Versand: Noch nicht versendet!
'
- );
- }
- else if ($auftragArr[0]['status']==='abgeschlossen')
- {
- $this->app->Tpl->Set(
- 'VERSANDTEXT','Versand: Bereits versendet!
'
- );
- } else {
- $this->app->Tpl->Set(
- 'VERSANDTEXT','Versand: -
'
- );
- }
-
-
- $vorkasse_ok = $this->app->DB->Select("SELECT vorkasse_ok FROM auftrag WHERE id='$id' LIMIT 1");
- $zahlungsweise = $auftragArr[0]['zahlungsweise'];
- if($vorkasse_ok==1){
- if($zahlungsweise==='vorkasse' || $zahlungsweise==='paypal' || $zahlungsweise==='kreditkarte') {
- $this->app->Tpl->Add(
- 'ZAHLUNGEN',"Der Auftrag wurde bezahlt.
");}
- else if ($zahlungsweise==='rechnung') {
- $this->app->Tpl->Add(
- 'ZAHLUNGEN',"Der Auftrag wird per Rechnung bezahlt.
");
- }
- else if ($zahlungsweise==='amazon') {
- $this->app->Tpl->Add(
- 'ZAHLUNGEN',"Der Auftrag wird per Amazon bezahlt.
");
- }
- else if ($zahlungsweise==='lastschrift'||$zahlungsweise==='einzugsermaechtigung') {
- $this->app->Tpl->Add(
- 'ZAHLUNGEN',"Der Auftrag wird per Lastschrift bezahlt.
");
- }
- else if ($zahlungsweise==='bar' || $zahlungsweise==='nachnahme' ) {
- $this->app->Tpl->Add(
- 'ZAHLUNGEN',"Der Auftrag wird bei Übergabe bezahlt.
");
- }
- }
- else if($vorkasse_ok==2){
- $this->app->Tpl->Add('ZAHLUNGEN','Es liegt eine Teilzahlung vor!
');
- }
-
- elseif(in_array($zahlungsweise, ['vorkasse','paypal','kreditkarte','bar'])) {
- $this->app->Tpl->Add(
- 'ZAHLUNGEN',
- 'Vorkasse noch nicht abgeschlossen!
'
- );
- }
-
- // schaue ob es eine GS zu diesem Auftrag gibt
- // schaue ob es eine GS zu diesem Auftrag gibt
- //$gutschriftid = $this->app->DB->Select("SELECT id FROM gutschrift WHERE rechnungid='$rechnungid' LIMIT 1");
-
- if(!empty($rechnungids)) {
- foreach($rechnungids as $rechnungid) {
- $gutschriftid = $rechnungid <= 0?0:$this->app->DB->Select(
- sprintf(
- 'SELECT id FROM gutschrift WHERE rechnungid=%d AND rechnungid > 0 LIMIT 1',
- $rechnungid
- )
- );
-
- if($gutschriftid > 0) {
- $tmp = $this->app->DB->Select(
- "SELECT
- CONCAT('',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'
- ') as rechnung
- FROM gutschrift r
- WHERE r.id='".$gutschriftid."' LIMIT 1"
- );
- $this->app->Tpl->Add('GUTSCHRIFT',$tmp);
- }
- }
- }
- if($auftragArr[0]['rma']==1){
- $this->app->YUI->ParserVarIf('RMA', 1);
- }
- else{
- $this->app->YUI->ParserVarIf('RMA', 0);
- }
-
- $this->app->Tpl->Set('RMAFARBE','red');
- $this->app->Tpl->Set('RMATEXT','RMA zu diesem Auftrag vorhanden!');
-
-
- if($auftragArr[0]['belegnr']=='0' || $auftragArr[0]['belegnr']=='') {
- $auftragArr[0]['belegnr'] = 'ENTWURF';
- }
- $this->app->Tpl->Set('BELEGNR',$auftragArr[0]['belegnr']);
- $this->app->Tpl->Set('AUFTRAGID',$auftragArr[0]['id']);
-
- $this->app->Tpl->Set(
- 'RECHNUNGLIEFERADRESSE',
- $this->AuftragRechnungsLieferadresse($auftragArr[0]['id'])
- );
-
- $this->app->Tpl->Set('RMA',"Es ist kein RMA-Prozess zu diesem Auftrag vorhanden.");
-
- $tmp = new EasyTable($this->app);
- $tmp->Query(
- sprintf(
- "SELECT DATE_FORMAT(ap.zeit, '%%d.%%m.%%Y %%H:%%i:%%s') AS `zeit`, ap.bearbeiter, ap.grund
- FROM `auftrag_protokoll` AS `ap`
- WHERE ap.auftrag = %d
- ORDER by ap.zeit DESC, ap.id DESC",
- $id
- )
- );
- $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction");
-
- $produktionsId = $this->app->DB->Select("SELECT id FROM produktion WHERE auftragid = '$id' LIMIT 1");
- if($produktionsId > 0){
- $this->app->Tpl->Set(
- 'VORPRODUKTIONPROTOKOLL',
- '
-
{|Produktion Protokoll|}
-
'
- );
- $produktionProtokoll = new EasyTable($this->app);
- $produktionProtokoll->Query(
- sprintf(
- "SELECT DATE_FORMAT(pp.zeit,'%%d.%%m.%%Y %%H:%%i:%%s') AS `zeit`, pp.bearbeiter, pp.grund
- FROM `produktion_protokoll` AS `pp`
- WHERE pp.produktion = %d
- ORDER BY pp.zeit DESC, pp.id DESC",
- $produktionsId
- )
- );
- $produktionProtokoll->DisplayNew('PRODUKTIONPROTOKOLL', 'Produktion Protokoll', 'noAction');
- $this->app->Tpl->Set('NACHPRODUKTIONPROTOKOLL', '
');
- }
- if(class_exists('AuftragPDFCustom')) {
- $Brief = new AuftragPDFCustom($this->app,$auftragArr[0]['projekt']);
- }
- else{
- $Brief = new AuftragPDF($this->app,$auftragArr[0]['projekt']);
- }
- $Dokumentenliste = $Brief->getArchivedFiles($id, 'auftrag');
- if($Dokumentenliste) {
- $tmp3 = new EasyTable($this->app);
- $tmp3->headings = array('Datum','Belegnr','Bearbeiter','Menü');
- foreach($Dokumentenliste as $k => $v) {
- if(!$v['erstesoriginal']) {
- $tmpr['datum'] = date('d.m.Y H:i:s',strtotime($v['zeitstempel']));
- $tmpr['belegnr'] = str_replace('.pdf','',$v['file']);
- $tmpr['belegnr'] = substr($tmpr['belegnr'],strrpos($tmpr['belegnr'],'_')+1);
- if(isset($v['belegnummer']) && $v['belegnummer']) {
- $tmpr['belegnr'] = $v['belegnummer'];
- }
- $tmpr['bearbeiter'] = $v['bearbeiter'];
- $tmpr['menu'] = ' ';
- $tmp3->datasets[] = $tmpr;
- }
- }
-
- $tmp3->DisplayNew('PDFARCHIV','Menü',"noAction");
- }
-
- $nettogewicht = $this->app->erp->AuftragNettoGewicht($id);
- if($nettogewicht!='') {
- $nettogewicht = number_format($nettogewicht, 2, ',','.');
- $gewichtbezeichnung = $this->app->erp->Firmendaten('gewichtbezeichnung');
- if($gewichtbezeichnung == '') {
- $gewichtbezeichnung = 'Kg';
- }
-
- $this->app->Tpl->Set('GEWICHT', $nettogewicht . ' '.$gewichtbezeichnung);
- }
- if($this->app->erp->Firmendaten('internebemerkungminidetails')) {
- //$schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM auftrag WHERE id = '$id' LIMIT 1");
- $schreibschutz=0;
- $this->app->Tpl->Set(
- 'INTERNEBEMERKUNGEDIT',
- '
-
Interne Bemerkung
-
-
-
-
');
- $this->app->Tpl->Add('INTERNEBEMERKUNGEDIT',' '
- );
- }
- else{
- $this->app->Tpl->Add('INTERNEBEMERKUNGEDIT','');
- }
-
- }
- if($parsetarget=='') {
- $this->app->Tpl->Output('auftrag_minidetail.tpl');
- $this->app->ExitXentral();
- }
- $this->app->Tpl->Parse($parsetarget,'auftrag_minidetail.tpl');
- }
-
- function AuftragRechnungsLieferadresse($auftragid)
- {
- $data = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id='$auftragid' LIMIT 1");
-
- foreach($data[0] as $key=>$value)
- {
- if($data[0][$key]!='' && $key!=='abweichendelieferadresse' && $key!=='land' && $key!=='plz' && $key!=='lieferland' && $key!=='lieferplz') {
- $data[0][$key] = $data[0][$key].' ';
- }
- }
-
-
- $rechnungsadresse = $data[0]['name']."".$data[0]['ansprechpartner']."".$data[0]['abteilung']."".$data[0]['unterabteilung'].
- "".$data[0]['strasse']."".$data[0]['adresszusatz']."".$data[0]['land']."-".$data[0]['plz']." ".$data[0]['ort'];
-
- // wenn abweichende rechnungsadresse bei kunden aktiv ist dann diese verwenden
-
- $abweichende = $this->app->DB->Select("SELECT abweichende_rechnungsadresse FROM adresse WHERE id='".$data[0]['adresse']."' LIMIT 1");
- if($abweichende=="1")
- {
- $adresse_data = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='".$data[0]['adresse']."' LIMIT 1");
-
- foreach($adresse_data[0] as $key=>$value)
- {
- if($adresse_data[0][$key]!="" && $key!="abweichendelieferadresse" && $key!="rechnung_land" && $key!="rechnung_plz")
- {
- $adresse_data[0][$key] = $adresse_data[0][$key]." ";
- }
- }
-
- $rechnungsadresse = $adresse_data[0]['rechnung_name']."".$adresse_data[0]['rechnung_ansprechpartner']."".$adresse_data[0]['rechnung_abteilung']."".$adresse_data[0]['rechnung_unterabteilung'].
- "".$adresse_data[0]['rechnung_strasse']."".$adresse_data[0]['rechnung_adresszusatz']."".$adresse_data[0]['rechnung_land']."-".$adresse_data[0]['rechnung_plz']." ".$adresse_data[0]['rechnung_ort'];
- }
-
- if($data[0]['abweichendelieferadresse']!=0){
-
- $lieferadresse = $data[0]['liefername']."".$data[0]['lieferansprechpartner']."".$data[0]['lieferabteilung']."".$data[0]['lieferunterabteilung'].
- "".$data[0]['lieferstrasse']."".$data[0]['lieferadresszusatz']."".$data[0]['lieferland']."-".$data[0]['lieferplz']." ".$data[0]['lieferort'];
-
-
- } else {
- $lieferadresse = "entspricht Rechnungsadresse";
- }
-
- return "
- Rechnungsadresse ".($abweichende=="1"?' (abweichend)':'').": $rechnungsadresse
- Lieferadresse: $lieferadresse
";
- }
-
-
-
- function AuftragZahlungsmail()
- {
- $id = $this->app->Secure->GetGET("id");
- $this->app->erp->AuftragZahlungsmail($id,1);
- $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id);
- }
-
- function AuftragSuche()
- {
- $this->app->erp->Headlines('Aufträge');
- $this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Übersicht");
- $this->app->erp->MenuEintrag("index.php?module=auftrag&action=create","Neuen Auftrag anlegen");
- $this->app->erp->MenuEintrag("index.php?module=auftrag&action=search","Auftrag Suchen");
- $this->app->erp->MenuEintrag("index.php","Zurück zur Übersicht");
-
- $this->app->Tpl->Set('TABTEXT',"Aufträge");
-
- $name = trim($this->app->Secure->GetPOST("name"));
- $suchwort = trim($this->app->Secure->GetPOST("suchwort"));
- $email = trim($this->app->Secure->GetPOST("email"));
- $plz = trim($this->app->Secure->GetPOST("plz"));
- $auftrag = trim($this->app->Secure->GetPOST("auftrag"));
- $proforma = trim($this->app->Secure->GetPOST("proforma"));
- $kundennummer = trim($this->app->Secure->GetPOST("kundennummer"));
- $betrag= trim($this->app->Secure->GetPOST("betrag"));
-
- $betrag = str_replace(',','.',$betrag);
-
- if($name!="" || $plz!="" || $proforma!="" || $kundennummer!="" || $auftrag!="" || $email!="" || $betrag!="" || $suchwort!="")
- {
- $table = new EasyTable($this->app);
- $this->app->Tpl->Add('ERGEBNISSE',"Trefferliste: ");
- if($suchwort!="")
- {
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.name LIKE '%$suchwort%' OR a.email LIKE '%$suchwort%' OR a.plz LIKE '$suchwort%' OR a.internet LIKE '%$suchwort%' OR (adr.kundennummer='$suchwort' AND adr.kundennummer!=0)
- OR (a.gesamtsumme='$suchwort' AND a.gesamtsumme!=0) OR (a.belegnr='$suchwort' AND a.belegnr!='' ))");
- } else {
- if($name!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.name LIKE '%$name%')");
- else if($email!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.email LIKE '%$email%')");
- else if($plz!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.plz LIKE '$plz%')");
- else if($proforma!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.internet LIKE '%$proforma%')");
- else if($kundennummer!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (adr.kundennummer='$kundennummer')");
- else if($betrag!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.gesamtsumme='$betrag')");
- else if($auftrag!="")
- $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
- LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.belegnr='$auftrag')");
-
- }
- $table->DisplayNew('ERGEBNISSE',"Lesen ");
- } else {
- $this->app->Tpl->Add('ERGEBNISSE',"Auftragssuche (bitte entsprechende Suchparameter eingeben)
");
- }
-
- $this->app->Tpl->Parse('INHALT',"auftragssuche.tpl");
-
- $this->app->Tpl->Set('AKTIV_TAB1',"selected");
- $this->app->Tpl->Parse('TAB1',"rahmen77.tpl");
- $this->app->Tpl->Parse('PAGE',"tabview.tpl");
- }
-
-
-
- public function AuftragRechnung()
- {
- $id = $this->app->Secure->GetGET('id');
-
- $anzahl_artikel = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag=$id LIMIT 1");
- if($anzahl_artikel <= 0)
- {
- $belegnr = $this->app->DB->Select("SELECT if(belegnr = '','ENTWURF',belegnr) FROM auftrag WHERE id = '$id' LIMIT 1");
- $msg = $this->app->erp->base64_url_encode("Der Auftrag $belegnr kann nicht weitergefuehrt werden, da keine Artikel gebucht sind!
");
- $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id.'&msg='.$msg);
- }
- $newid = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id);
-
- $this->app->erp->AuftragProtokoll($id,'Auftrag manuell als Rechnung weitergeführt');
- $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$newid);
- }
-
- /**
- * @return JsonResponse
- */
- public function HandleCreateProforma()
- {
- $justStorage = $this->app->Secure->GetPOST('just_strorage');
- $this->app->User->SetParameter('proforma_just_storage', (int)$justStorage);
- $id = $this->app->Secure->GetPOST('elementid');
- $status = $this->app->DB->Select("SELECT status FROM auftrag WHERE id=$id");
- if($status!=='angelegt') {
- /** @var Proformarechnung $obj */
- $obj = $this->app->loadModule('proformarechnung');
- if(!empty($obj) && method_exists($obj, 'createFromOrder')) {
- $newid = $obj->createFromOrder($id, $justStorage);
- $this->app->erp->AuftragProtokoll($id,'Auftrag als Proformarechnung weitergeführt');
- return new JsonResponse(
- ['success' => true, 'url' => "index.php?module=proformarechnung&action=edit&id=$newid"]
- );
- }
- return new JsonResponse(
- [
- 'success' => false,
- 'error' => 'Das Modul Proformarechnung konnte nicht geladen werden!'
- ],
- JsonResponse::HTTP_BAD_REQUEST
- );
- }
-
- return new JsonResponse(
- [
- 'success' => false,
- 'error' => 'Das Auftrag befindet sich noch im Entwurfsmodus und kann daher nicht als Proformarechnung weiterführt werden!'
- ],
- JsonResponse::HTTP_BAD_REQUEST
- );
- }
-
-
-
- public function AuftragLieferschein()
- {
- $id = $this->app->Secure->GetGET('id');
- $posids = $this->app->Secure->GetGET('posids');
- if($posids)
- {
- $positionen = null;
- $zwischenpositionen = null;
- if(strpos($posids, 'z') !== false || strpos($posids, 'b') !== false)
- {
- $sida = explode(',',$posids);
- foreach($sida as $v)
- {
- if($v[0] === 'b')
- {
- $v = substr($v ,1);
- $positionen[] = $v;
- }else{
- $v = substr($v ,1);
- $zwischenpositionen[] = $v;
- }
- }
- }
- }
- $this->app->erp->AuftragProtokoll($id,'Auftrag manuell als Lieferschein weitergeführt');
- $msgNoArticle = $this->app->erp->base64_url_encode('Der Auftrag kann nicht zum Lieferschein weitergeführt werden, da er keine Positionen oder keine Lagerartikel enthält
');
- if(isset($positionen))
- {
- $newid = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id, $positionen, $zwischenpositionen);
- $this->app->BuildNavigation = false;
- if($newid){
- $this->app->Tpl->Add('TAB1', '
-
- ');
- }else{
- $this->app->Tpl->Add('TAB1', '
-
- ');
- }
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- return;
- }
- $newid = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id);
-
- if($newid > 0){
- $this->app->Location->execute("Location: index.php?module=lieferschein&action=edit&id=$newid");
- }
- $this->app->Location->execute("Location: index.php?module=auftrag&action=edit&id=$id&msg=".$msgNoArticle);
- }
-
- public function AuftragLieferscheinRechnung()
- {
- $id = $this->app->Secure->GetGET('id');
-
- $auftragarr = $this->app->DB->SelectRow("SELECT projekt,art FROM auftrag WHERE id='$id' LIMIT 1");
- if(!empty($auftragarr))
- {
- $projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
- $art = $auftragarr['art'];//$this->app->DB->Select("SELECT art FROM auftrag WHERE id='$id' LIMIT 1");
- }else{
- $projekt = 0;
- $art = '';
- }
-
- $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
- $this->app->erp->BriefpapierHintergrundDisable($druckercode);
-
- if($art!=='rechnung')
- {
- // automatisch drucken bzw. freigeben
- $newid = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id);
-
- $belegnr = (string)$this->app->DB->Select("SELECT belegnr FOM lieferschein WHERE id='$newid' LIMIT 1");
- if($belegnr==='' || $belegnr==='0') {
- $belegnr = $this->app->erp->GetNextNummer('lieferschein',$projekt,$newid);
- }
-
- $this->app->DB->Update("UPDATE lieferschein SET belegnr='$belegnr', status='freigegeben' WHERE id='$newid' LIMIT 1");
- $this->app->erp->LieferscheinProtokoll($newid,'Lieferschein freigegeben');
-
- $this->app->erp->LieferscheinAuslagern($newid,true, (int)$this->app->DB->Select("SELECT standardlager FROM auftrag WHERE id = '$id' LIMIT 1"),'lieferschein',true);
- $Brief = new LieferscheinPDF($this->app,$projekt);
- $Brief->GetLieferschein($newid);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- $this->app->printer->Drucken($druckercode,$tmpfile);
-
- $fileid_lieferschein = $this->app->erp->CreateDatei($Brief->filename,'lieferschein','','',$tmpfile,$this->app->User->GetName());
- $this->app->erp->AddDateiStichwort($fileid_lieferschein,'lieferschein','lieferschein',$newid,$without_log=false);
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- $Brief = new LieferscheinPDF($this->app,$projekt);
- $Brief->GetLieferschein($newid);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- unlink($tmpfile);
- }
-
- if($art!=='lieferung')
- {
-
- //TODO eventuell wenn es Rechnung schon gibt keine weitere erstellen
- $newid = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id);
- $belegnr = (string)$this->app->DB->Select("SELECT belegnr FOM rechnung WHERE id='$newid' LIMIT 1");
- if($belegnr==='' || $belegnr==='0') {
- $belegnr = $this->app->erp->GetNextNummer('rechnung',$projekt,$newid);
- }
- $this->app->DB->Update("UPDATE rechnung SET belegnr='$belegnr', status='freigegeben' WHERE id='$newid' LIMIT 1");
- $this->app->erp->RechnungProtokoll($newid,'Rechnung freigegeben');
- $this->app->erp->ANABREGSNeuberechnen($newid,"rechnung");
-
- $Brief = new RechnungPDF($this->app,$projekt);
- $Brief->GetRechnung($newid);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- $this->app->printer->Drucken($druckercode,$tmpfile);
-
- $fileid_rechnung = $this->app->erp->CreateDatei($Brief->filename,'rechnung','','',$tmpfile,$this->app->User->GetName());
- $this->app->erp->AddDateiStichwort($fileid_rechnung,'rechnung','rechnung',$newid,$without_log=false);
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- $Brief = new RechnungPDF($this->app,$projekt);
- $Brief->GetRechnung($newid);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- unlink($tmpfile);
- }
- $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id);
- }
-
-
- public function AuftragZertifikate()
- {
- $id = $this->app->Secure->GetGET('id');
- $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$id' LIMIT 1");
- if($adresse)
- {
- $zertifikate = $this->app->DB->SelectArr("SELECT ds.datei
- FROM datei_stichwoerter ds
- INNER JOIN datei_stichwoerter ds2 ON ds.datei = ds2.datei AND ds2.objekt = 'Artikel'
- INNER JOIN auftrag_position ap ON ap.artikel = ds2.parameter AND ap.auftrag = '$id'
- WHERE ds.objekt = 'Adressen' AND ds.parameter = '$adresse'
- GROUP BY ds.datei");
- if(!empty($zertifikate))
- {
- foreach($zertifikate as $zertifikat)
- {
- $this->app->erp->AddDateiStichwort($zertifikat['datei'],'Sonstige','Auftrag',$id);
- }
- }
- }
-
- $this->app->Location->execute('index.php?module=auftrag&action=dateien&id='.$id);
- }
-
-
- public function AuftragCopy()
- {
- $id = $this->app->Secure->GetGET('id');
- if($id > 0){
- $newid = $this->app->erp->CopyAuftrag($id);
- }else{
- $newid = $id;
- }
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$newid");
- }
-
- public function AuftragKreditlimit()
- {
- $id = $this->app->Secure->GetGET('id');
- if($id > 0){
- $this->app->DB->Update("UPDATE auftrag SET kreditlimit_freigabe='1' WHERE id='$id' LIMIT 1");
-
- $this->app->erp->AuftragProtokoll($id, 'Kreditlimit manuell freigegeben');
-
- $this->app->erp->AuftragAutoversandBerechnen($id);
- $this->app->erp->AuftragNeuberechnen($id);
- }
- header('Location: index.php?module=auftrag&action=edit&id='.$id);
- }
-
- function AuftragFreigabe($id='')
- {
-
- if($id=='') {
- $id = $this->app->Secure->GetGET('id');
- $freigabe= $this->app->Secure->GetGET('freigabe');
- //$this->app->Tpl->Set('TABTEXT',"Freigabe");
- //$module = $this->app->Secure->GetGET("module");
- } else {
- $intern = true;
- $freigabe=$intern;
- }
- $allowedFrm = true;
- $showDefault = true;
- if($id > 0){
- $this->app->erp->CheckVertrieb($id, 'auftrag');
- $this->app->erp->CheckBearbeiter($id, 'auftrag');
- $auftragarr = $this->app->DB->SelectRow("SELECT projekt,belegnr,status,email,gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
- $doctype = 'auftrag';
- if(empty($intern)){
- $this->app->erp->RunHook('beleg_freigabe', 4, $doctype, $id, $allowedFrm, $showDefault);
- }
-
- }
- if(!empty($auftragarr)) {
- $projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
- $checkbelegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
- $status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id = '$id' LIMIT 1");
- $email = $auftragarr['email'];
- $summe = $auftragarr['gesamtsumme'];
- }
- else{
- $status = '';
- $projekt = 0;
- $checkbelegnr = '';
- $email = '';
- if($intern)
- {
- return 0;
- }
- $id = 0;
- }
-
- if($allowedFrm && $freigabe==$id && !empty($id))
- {
- if($checkbelegnr==''){
- $belegnr = $this->app->erp->GetNextNummer('auftrag', $projekt, $id);
- }
- else {
- $belegnr = $checkbelegnr;
- }
-
- if($this->app->User->GetParameter('auftrag_create_entwurfsdatumuebernehmen')=='1'){
- $this->app->DB->Update("UPDATE auftrag SET belegnr='$belegnr', status='freigegeben' WHERE id='$id' LIMIT 1");
- }
- else{
- $this->app->DB->Update("UPDATE auftrag SET datum=NOW(), belegnr='$belegnr', status='freigegeben' WHERE id='$id' LIMIT 1");
- }
-
- $this->app->erp->AuftragProtokoll($id,'Auftrag freigegeben');
- if($status !== 'freigegeben')
- {
- $_beleg = 'auftrag';
- $_id = $id;
- $this->app->erp->RunHook('BelegFreigabe', 2, $_beleg, $_id);
- }
- // auftrag abschliessen und event senden
- if($intern) {
- return 1;
- }
- $cmd = $this->app->Secure->GetGET('cmd');
- if($cmd==='mail')
- {
- $this->app->erp->BelegVersand('auftrag',$id,'email');
- $msg = $this->app->erp->base64_url_encode('Der Auftrag wurde freigegeben und die AB an den Kunden per Mail gesendet!
');
- }
- else{
- $msg = $this->app->erp->base64_url_encode('Der Auftrag wurde freigegeben und kann jetzt versendet werden!
');
- }
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
- }
- if($id && $showDefault) {
- $name = $this->app->DB->Select("SELECT a.name FROM auftrag b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
- //$email = $this->app->DB->Select("SELECT email FROM auftrag WHERE id='$id' LIMIT 1");
- //$summe = $this->app->DB->Select("SELECT FORMAT(SUM(menge*preis),2) FROM auftrag_position
- //WHERE auftrag='$id'");
- //$summe = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
-
- $waehrung = $this->app->DB->Select("SELECT waehrung FROM auftrag_position
- WHERE auftrag='$id' LIMIT 1");
-
- // check ob entwurdsdataum alt ist
- $extra = $this->app->erp->CheckboxEntwurfsmodus('auftrag',$id);
-
- if($email!='')
- {
- $this->app->Tpl->Set('TAB1',"Soll der Auftrag an
$name im Wert von
$summe $waehrung
- jetzt freigegeben werden?
-
");
- } else {
-
- if($this->app->erp->Firmendaten("oneclickrelease")=="1" && $extra=="")
- {
- $this->app->Location->execute("index.php?module=auftrag&action=freigabe&id=$id&freigabe=$id");
- } else {
- $this->app->Tpl->Set('TAB1',"Soll der Auftrag an $name im Wert von $summe $waehrung
- jetzt freigegeben werden?
- $extra
-
");
-
- }
- }
- }
- $this->AuftragMenu();
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- }
-
- public function AuftragAbschicken()
- {
- $this->AuftragMenu();
- $this->app->erp->DokumentAbschicken();
- }
-
-
-
- public function AuftragAnfrage()
- {
- $id = $this->app->Secure->GetGET('id');
- if($id > 0){
- $anfrageid = $this->app->DB->Select("SELECT anfrageid FROM auftrag WHERE id='$id' LIMIT 1");
- }else{
- $anfrageid = 0;
- }
- // loesche alle positionen im Auftrag
- if($anfrageid > 0){
- $this->app->erp->WeiterfuehrenAuftragZuAnfrage($id);
- }
-
- $this->app->Location->execute('index.php?module=anfrage&action=edit&id='.$anfrageid);
- }
-
- public function AuftragAlsfreigegeben()
- {
- $id = $this->app->Secure->GetGET('id');
- $alsfreigegeben= $this->app->Secure->GetGET('alsfreigegeben');
-
- $auftragarr = $this->app->DB->SelectRow("SELECT name,belegnr,status FROM auftrag WHERE id='$id' LIMIT 1");
- if(!empty($auftragarr))
- {
- $name = $auftragarr['name'];//$this->app->DB->Select("SELECT name FROM auftrag WHERE id='$id' LIMIT 1");
- $belegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
- $status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
- }else{
- $name = '';
- $status = '';
- $belegnr = '';
- }
- if(empty($auftragarr)){
-
- }elseif(!empty($auftragarr) && $alsfreigegeben==$id)
- {
- if($status==='angelegt')
- {
- // KUNDE muss RMA starten
- $msg = $this->app->erp->base64_url_encode("Der Auftrag \"$name\" ($belegnr) kann nicht als offen markiert werden. Er muss erst freigegeben werden!
");
- }
- else if($status==="freigegeben")
- {
- // KUNDE muss RMA starten
- $msg = $this->app->erp->base64_url_encode("Der Auftrag \"$name\" ($belegnr) ist bereits freigegeben!
");
- }
- else if($status==="abgeschlossen" || $status==="storniert" || $status==="versendet")
- {
- $msg = $this->app->erp->base64_url_encode("Der Auftrag \"$name\" ($belegnr) wurde wieder als freigegeben markiert!
");
- $this->app->DB->Update("UPDATE auftrag SET status='freigegeben',schreibschutz=0 WHERE id='$id' LIMIT 1");
- $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge=0,geliefert=0 WHERE auftrag='$id'");
- $this->app->erp->AuftragProtokoll($id,'Auftrag manuell als freigegeben markiert');
- }
- else
- {
- $msg = $this->app->erp->base64_url_encode('Der Auftrag wurde abgeschlossen!
');
- }
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
- }
- else {
- $name = $this->app->DB->Select("SELECT a.name FROM auftrag b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
- $this->app->Tpl->Set('TAB1',"Soll der Auftrag an $name jetzt wirklich als freigegeben markiert werden?
-
-
");
- }
- $this->AuftragMenu();
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- }
-
- /**
- * @param int $orderId
- *
- * @return array
- */
- public function closeOrder($orderId)
- {
- $orderRow = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT name, belegnr, status FROM auftrag WHERE id=%d LIMIT 1',
- $orderId
- )
- );
- if(empty($orderRow)) {
- return ['error' => 'Auftrag nicht gefunden'];
- }
- $status = $orderRow['status'];
- $number = $orderRow['belegnr'];
- $name = $orderRow['name'];
- if($status === 'angelegt') {
- return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er noch nicht freigeben wurde! Bitte Auftrag erst freigeben!"];
- }
- if($status==='storniert') {
- return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er bereits storniert ist!"];
- }
- if($status === 'abgeschlossen') {
- return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er bereits abgeschlossen ist!"];
- }
- if($status!=='freigegeben' && $status!=='versendet') {
- return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden"];
- }
- $this->app->DB->Update(
- sprintf(
- "UPDATE auftrag SET status='abgeschlossen',schreibschutz=1 WHERE id=%d LIMIT 1",
- $orderId
- )
- );
- $this->app->erp->AuftragProtokoll($orderId,'Auftrag wurde manuell abgeschlossen');
-
- return ['info' => 'Der Auftrag wurde abgeschlossen!'];
- }
-
- public function AuftragAbschluss()
- {
- $id = $this->app->Secure->GetGET('id');
- $abschluss= $this->app->Secure->GetGET('abschluss');
- $auftragarr = empty($id)?null: $this->app->DB->SelectRow(
- sprintf(
- 'SELECT name, belegnr, status FROM auftrag WHERE id=%d LIMIT 1',
- $id
- )
- );
- $name = '';
- $belegnr = '';
- $status = '';
- if(!empty($auftragarr)){
- $name = $auftragarr['name'];
- $belegnr = $auftragarr['belegnr'];
- $status = $auftragarr['status'];
- }
-
- if($abschluss==$id) {
- $ret = $this->closeOrder($id);
- if(!empty($ret['error'])) {
- $msg = $this->app->erp->base64_url_encode(''.$ret['error'].'
');
- }
- else{
- $msg = $this->app->erp->base64_url_encode(''.$ret['info'].'
');
- }
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
- }
-
- $name = $this->app->DB->Select("SELECT a.name FROM auftrag b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
- $this->app->Tpl->Set('TAB1',"Soll der Auftrag an $name jetzt abgeschlossen werden?
-
-
");
-
- $this->AuftragMenu();
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- }
-
-
- public function AuftragUndelete()
- {
- $id = (int)$this->app->Secure->GetGET('id');
- $auftragarr = $this->app->DB->SelectRow("SELECT name, belegnr, status FROM auftrag WHERE id='$id' LIMIT 1");
- if(!empty($auftragarr)){
- $name = $auftragarr['name'];//$this->app->DB->Select("SELECT name FROM auftrag WHERE id='$id' LIMIT 1");
- $belegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
- $status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
- }else{
- $name = '';
- $belegnr = '';
- $status = '';
- }
- $ok = true;
- if($status !== 'storniert')
- {
- $ok = false;
- }
- if($ok)
- {
- $anzahl_ls = $this->app->DB->Select("SELECT id FROM lieferschein WHERE auftragid='$id' LIMIT 1");
- if($anzahl_ls)
- {
- $ok = false;
- }
- }
- if($ok)
- {
- $anzahl_re = $this->app->DB->Select("SELECT id FROM rechnung WHERE auftragid='$id' LIMIT 1");
- if($anzahl_re){
- $ok = false;
- }
- }
-
- if($ok)
- {
- $this->app->DB->Update("UPDATE auftrag SET status='freigegeben' WHERE id='$id' LIMIT 1");
- $this->app->erp->AuftragProtokoll($id,'Auftrag Storno rückgängig');
- $msg = $this->app->erp->base64_url_encode("Auftrag \"$name\" ($belegnr) wurde wieder freigegeben!
");
- } else {
- $msg = $this->app->erp->base64_url_encode("Auftrag \"$name\" ($belegnr) kann nicht wieder freigegeben werden da es bereits Rechnungen und/oder Lieferrscheine zu dem Auftrag gibt.
");
- }
- //header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg");
- $this->app->Location->execute("index.php?module=auftrag&action=list&msg=$msg");
- }
-
- public function AuftragDelete($id = null)
- {
- if($id === null)
- {
- $intern = false;
- $id = $this->app->Secure->GetGET('id');
- $abschluss = $this->app->Secure->GetGET('abschluss');
- $mail = $this->app->Secure->GetGET('mail');
- }else
- {
- $intern = true;
- $abschluss = $intern;
- $mail = 0;
- }
-
- $auftragarr = $this->app->DB->SelectRow("SELECT name, belegnr, status,shop,shopextid FROM auftrag WHERE id='$id' LIMIT 1");
- if(!empty($auftragarr)){
- $name = $auftragarr['name'];//$this->app->DB->Select("SELECT name FROM auftrag WHERE id='$id' LIMIT 1");
- $belegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
- $status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
- $shop = $auftragarr['shop'];
- $shopextid = (string)$auftragarr['shopextid'];
- }else{
- $name = '';
- $belegnr = '';
- $status = '';
- $shop = 0;
- $shopextid = '';
- }
-
- if($abschluss==$id)
- {
- if($shop && $this->app->DB->Select("SELECT id FROM shopexport WHERE aktiv = 1 AND id = '$shop' AND stornoabgleich AND demomodus = 0 LIMIT 1"))
- {
- if($shopextid !== ''){
- $this->app->remote->RemoteStorniereAuftrag($shop, $id);
- }
- }
- if($belegnr=='0' || $belegnr=='')
- {
- $this->app->erp->DeleteAuftrag($id);
- if($belegnr!=''){
- $msg = $this->app->erp->base64_url_encode("Auftrag \"$name\" ($belegnr) wurde gelöscht!
");
- }
- else{
- $msg = $this->app->erp->base64_url_encode("Auftrag \"$name\" wurde gelöscht!
");
- }
- //header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg");
- if($intern){
- return;
- }
- $this->app->Location->execute("index.php?module=auftrag&action=list&msg=$msg");
- }
-
- if($status==='storniert')
- {
- if($intern){
- return;
- }
- $msg = $this->app->erp->base64_url_encode("Auftrag \"$name\" ($belegnr) kann nicht storniert werden da er bereits storniert ist!
");
- $this->app->Location->execute("index.php?module=auftrag&action=list&msg=$msg");
- }
-
-
- $this->app->DB->Update("UPDATE auftrag SET status='storniert' WHERE id='$id' LIMIT 1");
- $this->app->erp->AuftragProtokoll($id,'Auftrag storniert');
-
- // stornierungen loeschen
- $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag' AND parameter='$id'");
-
- // ausfuellen automatisch stornofelder
- //stornobetrag // summe des zahlungseingangs!!!!
- //stornogutschrift
- //stornowareerhalten
- //stornorueckzahlung
- // zureuckzahlen per
-
- // email senden?
- if($mail==1){
- $this->app->erp->Stornomail($id);
- }
-
- $recheck = $this->app->DB->Select("SELECT id FROM rechnung WHERE auftrag='$belegnr' LIMIT 1");
-
- if($recheck <= 0)
- {
- // Fall 1 keine RE und LS
- // -> stornieren und Geld zurueckueberweisen (Paypal, Kredit oder Bank)
- // geld wird ueber ipayment oder paypal zurueckgebucht!!!
- // negatives auftragssguthaben loescht auftragsguthaben
- $this->app->Tpl->Add('MESSAGE','Achtung dem Kunden sofort das Geld überweisen!
');
-
- }
- $msg = $this->app->erp->base64_url_encode('Der Auftrag wurde storniert!
');
-
- $this->app->erp->RunHook('auftrag_delete', 1, $id);
- if($intern){
- return;
- }
- $this->app->Location->execute('index.php?module=auftrag&action=list&msg='.$msg);
- }
- if($intern){
- return;
- }
- $name = $this->app->DB->Select("SELECT a.name FROM auftrag b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
- $auftragarr = $this->app->DB->SelectRow("SELECT email,projekt FROM auftrag WHERE id='$id' LIMIT 1");
- if(!empty($auftragarr)){
- $email = $auftragarr['email'];//$this->app->DB->Select("SELECT email FROM auftrag WHERE id='$id' LIMIT 1");
- $projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
- }else{
- $email = '';
- $projekt = 0;
- }
- if($projekt > 0){
- $stornomail = $this->app->DB->Select("SELECT stornomail FROM projekt WHERE id='$projekt' LIMIT 1");
- }else{
- $stornomail = 0;
- }
-
- if($email!='') {
- $name =$name.' '.$email;
- }
-
- if($email!='' && $stornomail=='1')
- {
- $this->app->Tpl->Set('TAB1',"Soll der Auftrag an $name jetzt storniert werden?
-
-
-
");
- } else {
- $this->app->Tpl->Set('TAB1',"Soll der Auftrag an $name jetzt storniert werden?
-
-
");
- }
-
- $this->AuftragMenu();
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- }
-
- public function AuftragDeleteAusVersand()
- {
- $id = $this->app->Secure->GetGET('id');
-
- //$rechnung = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1");
- if($id > 0){
- $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1");
- }else{
- $lieferschein = 0;
- }
- if($lieferschein > 0){
- $auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
- }else{
- $auftragid = 0;
- }
- if($auftragid > 0){
- $this->app->DB->Update("UPDATE auftrag SET rma=1,status='storniert' WHERE id='$auftragid' LIMIT 1");
- }
- if($lieferschein > 0){
- $auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
- }else{
- $auftrag = 0;
- }
-
- // status aendern
- if($lieferschein > 0)
- {
- $this->app->DB->Update("UPDATE lieferschein SET versandart='rma',status='storniert' WHERE id='$lieferschein' LIMIT 1");
- $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='lieferschein' AND parameter='$lieferschein'");
- $this->app->erp->LieferscheinProtokoll($lieferschein,'Lieferschein durch Auftrag aus Versand storniert');
- }
-
- $this->app->erp->AuftragProtokoll($auftrag,'Auftrag aus Versand storniert');
-
- // RMA anlegen
-
- $msg = $this->app->erp->base64_url_encode('Der Auftrag wurde als RMA im Versand markiert!
');
-
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$auftrag&msg=$msg");
- }
-
-
-
- public function AuftragProtokoll()
- {
- $this->AuftragMenu();
- $id = $this->app->Secure->GetGET('id');
- $tmp = new EasyTable($this->app);
- $tmp->Query("SELECT zeit,bearbeiter,grund FROM auftrag_protokoll WHERE auftrag='$id' ORDER by zeit DESC");
- $tmp->DisplayNew('TAB1','Protokoll','noAction');
- $this->app->Tpl->Parse('PAGE','tabview.tpl');
- }
-
-
- public function AuftragProforma()
- {
- $id = $this->app->Secure->GetGET('id');
- $this->app->erp->AuftragNeuberechnen($id);
-
- $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
-
- if(class_exists('AuftragPDFCustom'))
- {
- $Brief = new AuftragPDFCustom($this->app,$projekt,'proforma');
- }
- else{
- $Brief = new AuftragPDF($this->app,$projekt,'proforma');
- }
- $Brief->GetAuftrag($id);
- $Brief->displayDocument();
-
- $this->AuftragList();
- }
-
- public function AuftragInlinePDF()
- {
- $id = $this->app->Secure->GetGET('id');
- if($id > 0)
- {
- $this->app->erp->AuftragNeuberechnen($id);
- $auftragarr = $this->app->DB->SelectRow("SELECT projekt,schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
- }
-
- if(!empty($auftragarr))
- {
- $projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
- $schreibschutz = $auftragarr['schreibschutz'];//$this->app->DB->Select("SELECT schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
- }else{
- $projekt = 0;
- $schreibschutz = 0;
- }
-
- $frame = $this->app->Secure->GetGET('frame');
- if($frame != ''){
- $file = urlencode("../../../../index.php?module=auftrag&action=inlinepdf&id=$id");
- echo "";
- $this->app->ExitXentral();
- }
- if(class_exists('AuftragPDFCustom'))
- {
- $Brief = new AuftragPDFCustom($this->app,$projekt);
- }else{
- $Brief = new AuftragPDF($this->app,$projekt);
- }
- $Brief->GetAuftrag($id);
- $Brief->inlineDocument($schreibschutz);
- }
-
-
- public function AuftragPDF()
- {
- $id = $this->app->Secure->GetGET('id');
-
- if($id > 0){
- $this->app->erp->AuftragNeuberechnen($id);
- $auftragarr = $this->app->DB->SelectRow("SELECT projekt,schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
- }
- if(!empty($auftragarr))
- {
- $projekt = $auftragarr['projekt'];
- $schreibschutz = $auftragarr['schreibschutz'];
- }else{
- $projekt = 0;
- $schreibschutz = 0;
- }
-
- if(class_exists('AuftragPDFCustom'))
- {
- $Brief = new AuftragPDFCustom($this->app,$projekt);
- }else{
- $Brief = new AuftragPDF($this->app,$projekt);
- }
- $Brief->GetAuftrag($id);
- $Brief->displayDocument($schreibschutz);
- $this->AuftragList();
- }
-
-
- public function AuftragMenu()
- {
- $id = $this->app->Secure->GetGET('id');
- if($id > 0){
- $this->app->erp->AuftragNeuberechnen($id);
- $auftragarr = $this->app->DB->SelectRow("SELECT belegnr,name, status FROM auftrag WHERE id='$id' LIMIT 1");
- }
- $backurl = $this->app->Secure->GetGET('backurl');
- $backurl = $this->app->erp->base64_url_decode($backurl);
-
- $belegnr = '';
- $name = '';
- $status = '';
- if(!empty($auftragarr)) {
- $belegnr = $auftragarr['belegnr'];
- $name = $auftragarr['name'];
- $status = $auftragarr['status'];
- }
-
- if($belegnr=='0' || $belegnr=='') {
- $belegnr ='(Entwurf)';
- }
-
- $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Auftrag $belegnr");
- // status bestell
-
- if ($status==='angelegt') {
- $this->app->erp->MenuEintrag("index.php?module=auftrag&action=freigabe&id=$id","Freigabe");
- }
-
- $this->app->erp->MenuEintrag("index.php?module=auftrag&action=edit&id=$id","Details");
-
-
- if($status==='bestellt') {
- $this->app->Tpl->Add('TABS',"Wareneingang Rückstände ");
- $this->app->Tpl->Add('TABS',"Mahnstufen ");
- }
- $anzahldateien='';
- if($id > 0) {
- $anzahldateien = $this->app->erp->AnzahlDateien('Auftrag',$id);
- $anzahldateien = $anzahldateien > 0?' ('.$anzahldateien.')':'';
- }
- $action = $this->app->Secure->GetGET('action');
- $this->app->erp->MenuEintrag("index.php?module=auftrag&action=dateien&id=$id",'Dateien'.$anzahldateien);
- // $this->app->erp->MenuEintrag("index.php?module=auftrag&action=protokoll&id=$id","Protokoll");
-
- if($this->app->erp->Firmendaten('auftrag_eantab')=='1'){
- $this->app->erp->MenuEintrag('index.php?module=auftrag&action=ean&id='.$id, 'Barcodescanner');
- }
-
- if($action==='abschicken' || $action==='zahlungsmahnungswesen'){
- $this->app->erp->MenuEintrag("index.php?module=auftrag&action=edit&id=$id", 'Zurück zum Auftrag');
- }
- else if($backurl==''){
- $this->app->erp->MenuEintrag('index.php?module=auftrag&action=list', 'Zurück zur Übersicht');
- }
- else{
- $this->app->erp->MenuEintrag((string)$backurl, 'Zurück zur Übersicht');
- }
-
- $this->app->erp->RunMenuHook('auftrag');
- if($id) {
- $this->app->erp->RunMenuHook('auftrag_edit');
- }
- }
-
- function AuftragPositionstabelle($parsetarget)
- {
- $this->app->YUI->TableSearch($parsetarget,'auftraegeoffene');
- }
-
-
- public function AuftragPositionen()
- {
- $id = $this->app->Secure->GetGET('id');
-
- $this->app->erp->AuftragNeuberechnen($id);
- $this->app->YUI->AARLGPositionen(false);
- }
-
- function DelAuftragStueckliste($id, $sid, $lvl = 0)
- {
- if($sid <= 0 || $id <= 0 || $lvl > 10){
- return;
- }
-
- $unterartikel = $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE explodiert_parent='$sid' ORDER BY sort");
-
- if($unterartikel && (!empty($unterartikel)?count($unterartikel):0)>0 && $sid >0 && $id >0)
- {
- $cunterartikel = (!empty($unterartikel)?count($unterartikel):0);
- for($i=0;$i<$cunterartikel;$i++)
- {
- $sidexplodiert = $unterartikel[$i]['id'];
- if($sidexplodiert>0)
- {
- $sort = $this->app->DB->Select("SELECT sort FROM auftrag_position WHERE id='$sidexplodiert' LIMIT 1");
- if($sort>0)
- {
- $this->app->DB->Delete("DELETE FROM auftrag_position WHERE id='$sidexplodiert' LIMIT 1");
- $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE parameter='$id' AND objekt='auftrag'
- AND artikel='".$unterartikel[$i]['artikel']."'");
- $this->app->DB->Update("UPDATE auftrag_position SET sort=sort-1 WHERE auftrag='$id' AND sort > $sort");
- $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos - 1 WHERE doctype = 'auftrag' AND doctypeid = '$id' AND pos >= ".($sort-1)." ");
- }else{
- $this->app->DB->Delete("DELETE FROM auftrag_position WHERE id='$sidexplodiert' LIMIT 1");
- $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE parameter='$id' AND objekt='auftrag'
- AND artikel='".$unterartikel[$i]['artikel']."'");
- }
- }
- $this->DelAuftragStueckliste($id, $sidexplodiert, $lvl + 1);
- $this->app->DB->Update(
- sprintf(
- 'UPDATE `artikel` SET `laststorage_changed` = NOW() WHERE `id` = %d',
- $unterartikel[$i]['artikel']
- )
- );
- }
- // alle wirklich loeschen
- $this->app->DB->Delete("DELETE FROM auftrag_position WHERE explodiert_parent='$sid' AND auftrag='$id'");
-
- }
- }
-
- public function DelAuftragPosition()
- {
- $sid = (int)$this->app->Secure->GetGET('sid');
- $id = (int)$this->app->Secure->GetGET('id');
- if($sid > 0){
- $this->DelAuftragStueckliste($id, $sid);
- }
- $this->app->YUI->SortListEvent('del','auftrag_position','auftrag');
- if($sid > 0)
- {
- $this->DelAuftragStueckliste($id, $sid);
- $this->app->erp->AuftragNeuberechnen($id);
- }
- $this->AuftragPositionen();
- }
-
- public function CopyAuftragPosition()
- {
- $this->app->YUI->SortListEvent('copy','auftrag_position','auftrag');
- $this->AuftragPositionen();
- }
-
- public function UpAuftragPosition()
- {
- $this->app->YUI->SortListEvent('up','auftrag_position','auftrag');
- $this->AuftragPositionen();
- }
-
- public function DownAuftragPosition()
- {
- $this->app->YUI->SortListEvent('down','auftrag_position','auftrag');
- $this->AuftragPositionen();
- }
-
- public function AuftragCheckDisplayPopup()
- {
- $frame = $this->app->Secure->GetGET('frame');
- $id = $this->app->Secure->GetGET('id');
-
- if($frame=='false')
- {
- // hier nur fenster größe anpassen
- $this->app->YUI->IframeDialog(700,700);
- } else {
- // nach page
-
- $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
- $projektcheckname = $this->app->DB->Select("SELECT checkname FROM projekt WHERE id='$projekt' LIMIT 1");
-
- include_once './plugins/class.'.$projektcheckname.'.php';
- $tmp = new $projektcheckname($this->app);
- $tmp->CheckDisplay('PAGE',$id);
-
- $this->app->BuildNavigation=false;
- }
- }
-
-
- public function AuftragPositionenEditPopup()
- {
- $cmd = $this->app->Secure->GetGET('cmd');
- if($cmd === 'getopenaccordions')
- {
- $accordions = $this->app->Secure->GetPOST('accordions');
- $accordions = explode('*|*',$accordions);
- foreach($accordions as $k => $v)
- {
- if(empty($v))
- {
- unset($accordions[$k]);
- }else{
- $accordions[$k] = 'auftrag_accordion'.$v;
- }
- }
- $ret = [];
- if(!empty($accordions))
- {
- $accordions = $this->app->User->GetParameter($accordions);
- if(!empty($accordions))
- {
- foreach($accordions as $v)
- {
- if(!empty($v['value']))
- {
- $ret['accordions'][] = str_replace('auftrag_accordion','',$v['name']);
- }
- }
- }
- }
- echo json_encode($ret);
- $this->app->ExitXentral();
- }
- if($cmd === 'setaccordion')
- {
- $name = $this->app->Secure->GetPOST('name');
- $active = $this->app->Secure->GetPOST('active');
- $this->app->User->SetParameter('auftrag_accordion'.$name, $active);
- echo json_encode(array('success'=>1));
- $this->app->ExitXentral();
- }
- $id = $this->app->Secure->GetGET('id');
- $fmodul = $this->app->Secure->GetGET('fmodul');
- $artikel= $this->app->DB->Select("SELECT artikel FROM auftrag_position WHERE id='$id' LIMIT 1");
-
- // nach page inhalt des dialogs ausgeben
- $filename = 'widgets/widget.auftag_position_custom.php';
- if(is_file($filename))
- {
- include_once $filename;
- $widget = new WidgetAuftrag_positionCustom($this->app,'PAGE');
- } else {
- $widget = new WidgetAuftrag_position($this->app,'PAGE');
- }
-
- $sid= $this->app->DB->Select("SELECT auftrag FROM auftrag_position WHERE id='$id' LIMIT 1");
- $widget->form->SpecialActionAfterExecute('close_refresh',
- "index.php?module=auftrag&action=positionen&id=$sid&fmodul=$fmodul");
- $widget->Edit();
- $this->app->BuildNavigation=false;
- }
-
-
- function AuftragEdit()
- {
- $action = $this->app->Secure->GetGET("action");
- $id = $this->app->Secure->GetGET("id");
- $storno = $this->app->Secure->GetGET("storno");
-
- // zum aendern vom Vertrieb
- $sid = $this->app->Secure->GetGET("sid");
- $cmd = $this->app->Secure->GetGET("cmd");
- if($this->app->Secure->GetPOST('resetextsoll')) {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE auftrag SET extsoll = 0 WHERE id = %d',
- $id
- )
- );
- $this->app->erp->AuftragNeuberechnen($id);
- }
- $this->app->erp->RunHook('auftrag_edit_hook1',1, $id);
- if($cmd === 'dadown')
- {
- $erg['status'] = 0;
- $daid = $this->app->Secure->GetPOST("da_id");
- $check = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.id = '$daid' and d.geloescht <> 1 LIMIT 1");
- if($check)
- {
- $sort = $check[0]['sort']+1;
- if($sort > 1)
- {
- $check2 = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.objekt like 'angebot' AND ds.sort = '$sort' AND d.geloescht <> 1 AND ds.parameter = '$id' LIMIT 1");
- if($check2)
- {
- $erg['status'] = 1;
- $erg['from'] = $check2[0]['id'];
- $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = '$daid' LIMIT 1");
- $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = '".$check2[0]['id']."' LIMIT 1");
- }
- }
- }
- echo json_encode($erg);
- $this->app->ExitXentral();
- }
-
- if($cmd === 'daup')
- {
- $erg['status'] = 0;
- $daid = $this->app->Secure->GetPOST("da_id");
- $check = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.id = '$daid' and d.geloescht <> 1 LIMIT 1");
- if($check)
- {
- $sort = $check[0]['sort']-1;
- if($sort > 0)
- {
- $check2 = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.objekt like 'auftrag' AND ds.sort = '$sort' AND d.geloescht <> 1 AND ds.parameter = '$id' LIMIT 1");
- if($check2)
- {
- $erg['status'] = 1;
- $erg['from'] = $check2[0]['id'];
- $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = '$daid' LIMIT 1");
- $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = '".$check2[0]['id']."' LIMIT 1");
- }
- }
- }
- echo json_encode($erg);
- $this->app->ExitXentral();
- }
-
- if($this->app->erp->VertriebAendern('auftrag',$id,$cmd,$sid)){
- return;
- }
-
- if($this->app->erp->InnendienstAendern('auftrag',$id,$cmd,$sid)){
- return;
- }
-
-
- if($this->app->erp->DisableModul('auftrag',$id)) {
- //$this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zurück zur Übersicht");
- $this->AuftragMenu();
- return;
- }
- $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
- if($adresse <=0) {
- $this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });');
- $this->app->Tpl->Set('MESSAGE',"Achtung! Dieses Dokument ist mit keiner Kunden-Nr. verlinkt. Bitte geben Sie die Kundennummer an und klicken Sie übernehmen oder Speichern!
");
- }
- $this->app->erp->InfoAuftragsErfassung("auftrag",$id);
- $teilArr = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT teillieferungvon, teillieferungnummer, belegnr FROM auftrag WHERE id=%d LIMIT 1',
- $id
- )
- );
- $teillieferungvon= $teilArr['teillieferungvon'];//$this->app->DB->Select("SELECT teillieferungvon FROM auftrag WHERE id='$id' LIMIT 1");
- $teillieferungnummer= $teilArr['teillieferungnummer'];//$this->app->DB->Select("SELECT teillieferungnummer FROM auftrag WHERE id='$id' LIMIT 1");
-
- $hauptid = $id;
- $timeout = 0;
- while($timeout < 100) {
- $checkteillieferungvon = $this->app->DB->Select(
- sprintf(
- 'SELECT teillieferungvon FROM auftrag WHERE id=%d LIMIT 1',
- $hauptid
- )
- );
- if($checkteillieferungvon > 0) {
- $hauptid = $checkteillieferungvon;
- }
- else {
- break;
- }
- $timeout++;
- }
- $teillieferungnummermax = 0;
- $anzahlteillieferungen = $this->app->DB->SelectArr(
- sprintf(
- 'SELECT id,belegnr,teillieferungnummer FROM auftrag WHERE teillieferungvon=%d ORDER BY belegnr',
- $id
- )
- );
- if(!empty($anzahlteillieferungen)) {
- $canzahlteillieferungen = (!empty($anzahlteillieferungen)?count($anzahlteillieferungen):0);
- for($ati=0;$ati<$canzahlteillieferungen;$ati++) {
- if($canzahlteillieferungen[$ati]['teillieferungnummer'] + 1 > $teillieferungnummermax) {
- $teillieferungnummermax = $canzahlteillieferungen[$ati]['teillieferungnummer'] + 1;
- }
- $this->app->Tpl->Add(
- 'MESSAGE',
- ''
- );
- }
- }
- $teillieferung_von_auftrag_nummer = $teilArr['belegnr'];
-
- if($teillieferungvon>0) {
- if($hauptid != $id) {
- $teillieferungnummermax = $this->app->DB->Select(
- "SELECT MAX(teillieferungnummer)+1 FROM auftrag WHERE teillieferungvon='$hauptid' LIMIT 1"
- );
- $teillieferung_von_auftrag_nummer = $this->app->DB->Select(
- "SELECT belegnr FROM auftrag WHERE id='$hauptid' LIMIT 1"
- );
- }
- $this->app->Tpl->Add(
- 'MESSAGE',
- "Dies ist Teilauftrag Nr. $teillieferungnummer (Aktuell gesplittet in $teillieferungnummermax Aufträge). Der ursprüngliche Auftrag war:
$teillieferung_von_auftrag_nummer "
- );
- }
-
-
- $check = $this->app->DB->SelectPairs(
- "SELECT b.id, b.belegnr
- FROM auftrag_position ap
- INNER JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id
- INNER JOIN bestellung b ON bp.bestellung = b.id
- WHERE ap.auftrag='$id'
- GROUP BY b.belegnr, b.id
- ORDER BY b.belegnr, b.id"
- );
- if($check) {
- $this->app->Tpl->Add(
- 'MESSAGE',
- "");
- }
-
-
- if($this->app->erp->ModulVorhanden('lieferkette')) {
- $auftraglieferkette = $this->app->DB->Select(
- "SELECT l.auftrag
- FROM lieferkette l
- INNER JOIN lieferkette_bestellung lb
- ON l.id = lb.lieferkette AND lb.belegtyp = 'auftrag' AND belegid = '$id' AND l.auftrag > 0
- LIMIT 1"
- );
- if($auftraglieferkette) {
- $this->app->Tpl->Add(
- 'MESSAGE',
- ''
- );
- }
- }
-
- $orderRow = $this->app->DB->SelectRow(sprintf('SELECT * FROM auftrag WHERE id = %d', $id));
-
- $zahlungsweise= $orderRow['zahlungsweise'];//$this->app->DB->Select("SELECT zahlungsweise FROM auftrag WHERE id='$id' LIMIT 1");
- $zahlungszieltage= $orderRow['zahlungszieltage'];//$this->app->DB->Select("SELECT zahlungszieltage FROM auftrag WHERE id='$id' LIMIT 1");
-
- $status= $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
- $schreibschutz= $orderRow['schreibschutz'];//$this->app->DB->Select("SELECT schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
-
-
- $adresse= $orderRow['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
- $liefersperre= $this->app->DB->Select("SELECT liefersperre FROM adresse WHERE id='$adresse' LIMIT 1");
-
- if($id > 0 && $this->app->DB->Select(
- sprintf(
- 'SELECT id FROM auftrag WHERE schreibschutz =1 AND zuarchivieren = 1 AND id = %d',
- $id
- )
- )
- ) {
- $this->app->erp->PDFArchivieren('auftrag', $id, true);
- }
-
- if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a') {
- $Brief = new Briefpapier($this->app);
-
- if($Brief->zuArchivieren($id, 'auftrag')) {
- $this->app->Tpl->Add('MESSAGE',"Der Auftrag ist noch nicht archiviert! Bitte versenden oder manuell archivieren.
");
- }
- elseif(!$this->app->DB->Select("SELECT versendet FROM auftrag WHERE id = '$id' LIMIT 1")) {
- $this->app->Tpl->Add('MESSAGE',"Der Auftrag wurde noch nicht versendet!
");
- }
- }
-
- if($liefersperre=='1' && ($status==='freigegeben' || $status==='angelegt')) {
- $this->app->Tpl->Add('MESSAGE','Achtung: Der Kunde hat eine Liefersperre!
');
- }
- $this->app->erp->AuftragEinzelnBerechnen($id);
- $this->app->erp->AuftragNeuberechnen($id);
- $this->app->erp->AuftragAutoversandBerechnen($id); // heute wieder eingebaut 09.03.2019 BS weil Termin ampel falsch
-
- $this->app->erp->DisableVerband();
- $this->AuftragMiniDetail('MINIDETAIL',true);
-
- $icons = $this->app->YUI->IconsSQL();
- if(strpos($icons,'aac.status')) {
- $icons = $this->app->DB->Select("SELECT $icons FROM auftrag a LEFT JOIN `auftragsampel_auftrag_cache` aac ON a.id = aac.auftrag WHERE a.id='$id' LIMIT 1");
- }
- else{
- $icons = $this->app->DB->Select("SELECT $icons FROM auftrag a WHERE a.id='$id' LIMIT 1");
- }
- $this->app->Tpl->Set('STATUSICONS',$icons);
-
- $this->app->YUI->AARLGPositionen();
-
- $orderRow = $this->app->DB->SelectRow(sprintf('SELECT * FROM auftrag WHERE id = %d', $id));
- $status= $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
- if($status=='') {
- $this->app->DB->Update("UPDATE auftrag SET status='angelegt' WHERE id='$id' LIMIT 1");
- $orderRow['status'] = $this->app->DB->Select(sprintf('SELECT status FROM auftrag WHERE id = %d', $id));
- }
-
- $tmpcheckversand = $orderRow['versandart'];//$this->app->DB->Select("SELECT versandart FROM auftrag WHERE id='$id' LIMIT 1");
- if($tmpcheckversand==='packstation' && $orderRow['abweichendelieferadresse'] != 0) {
- $this->app->DB->Update("UPDATE auftrag SET abweichendelieferadresse='0' WHERE id='$id' LIMIT 1");
- }
-
- $status = $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
- $nummer = $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
- $adresse = $orderRow['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
-
- $lieferant = $orderRow['lieferant'];//$this->app->DB->Select("SELECT lieferant FROM auftrag WHERE id='$id' LIMIT 1");
- $kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='$adresse' LIMIT 1");
- $lieferantenretoure = $orderRow['lieferantenauftrag'];//$this->app->DB->Select("SELECT lieferantenauftrag FROM auftrag WHERE id='$id' LIMIT 1");
- if($lieferantenretoure=='1' && $lieferant<=0) {
- $this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });');
- $this->app->Tpl->Set('MESSAGE',"Pflichtfeld! Bitte geben Sie eine Lieferanten-Nr. an!
");
- }
- else if ($adresse <=0 && $lieferantenretoure!='1') {
- $this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });');
- $this->app->Tpl->Set('MESSAGE',"Pflichtfeld! Bitte geben Sie eine Kunden-Nr. an!
");
- }
-
- if($schreibschutz!='1')// && $this->app->erp->RechteVorhanden("auftrag","schreibschutz"))
- {
- $this->app->erp->AnsprechpartnerButton($adresse);
- $this->app->erp->LieferadresseButton($adresse);
- $this->app->erp->AnsprechpartnerAlsLieferadresseButton($adresse);
- $this->app->erp->AdresseAlsLieferadresseButton($adresse);
- }
-
- if($nummer!='') {
- $this->app->Tpl->Set('NUMMER',$nummer);
- if($this->app->erp->RechteVorhanden('adresse','edit')){
- $this->app->Tpl->Set(
- 'KUNDE',
- " Kd-Nr. "
- . $kundennummer . " "
- );
- }
- else{
- $this->app->Tpl->Set(
- 'KUNDE',
- ' Kd-Nr. ' . $kundennummer
- );
- }
- }
-
- $this->app->Tpl->Set('ICONMENU',$this->AuftragIconMenu($id));
- $this->app->Tpl->Set('ICONMENU2',$this->AuftragIconMenu($id,2));
-
- if($status==='angelegt')
- {
- $this->app->Tpl->Set('ABGESCHLOSSENENABLE',""); //TODO
- }
-
- if($status!=='storniert')
- {
- $this->app->Tpl->Set('STORNOENABLE','');
- }
-
- $stornobezahlt = $orderRow['stornobezahlt'];// $this->app->DB->Select("SELECT stornobezahlt FROM auftrag WHERE id='$id' LIMIT 1");
-
- if($storno!=='abschluss' && $stornobezahlt==0) {
- $this->app->Tpl->Set('STORNORETOUREENABLE','');
- }
- else {
- $this->app->Tpl->Set('HIDDENFIELD'," ");
- // bearbeiter
- $stornobezahltvon = $orderRow['stornobezahltvon'];//$this->app->DB->Select("SELECT stornobezahltvon FROM auftrag WHERE id='$id' LIMIT 1");
- $stornobezahltam = $orderRow['stornobezahltam'];//$this->app->DB->Select("SELECT stornobezahltam FROM auftrag WHERE id='$id' LIMIT 1");
- if($stornobezahltvon==''){
- $this->app->DB->Update(
- "UPDATE auftrag SET stornobezahltvon='"
- . $this->app->DB->real_escape_string($this->app->User->GetName())
- . "' WHERE id='$id' LIMIT 1"
- );
- }
- if($stornobezahltam=="0000-00-00"){
- $this->app->DB->Update("UPDATE auftrag SET stornobezahltam=NOW() WHERE id='$id' LIMIT 1");
- }
- }
-
- $this->AuftragAmpel($id,'AMPEL');
- $optional = '';
-
- $lieferscheine = $this->app->DB->SelectPairs(
- "SELECT id,belegnr FROM lieferschein WHERE auftragid='$id' AND auftragid > 0"
- );
- $deliveryNoteIds = array_keys($lieferscheine);
- $deliveryNoteIdsImplode = implode(',', $deliveryNoteIds);
- if(!empty($lieferscheine)) {
- foreach($lieferscheine as $deliveryNoteId => $deliveryNoteNumber) {
- $optional .= " ";
- }
- }
-
- $rechnungid = $this->app->DB->Select("SELECT rechnungid FROM auftrag WHERE id = '$id' LIMIT 1");
- $rechnungen = $this->app->DB->SelectPairs(
- "SELECT id,belegnr FROM rechnung WHERE (auftragid='$id' AND auftragid > 0) OR id = '$rechnungid'"
- );
- if(!empty($rechnungen)) {
- foreach($rechnungen as $invoiceId => $invoiceNumber) {
- $optional .= " ";
- }
- }
-
- $projekt = $this->app->DB->Select("SELECT projekt from auftrag where id = '$id' LIMIT 1");
- if($schreibschutz=='1' && $this->app->erp->RechteVorhanden('auftrag','schreibschutz')) {
- $this->app->Tpl->Add(
- 'MESSAGE',
- "Dieser Auftrag ist schreibgeschützt und darf daher nicht bearbeitet werden! $optional
"
- );
- // $this->app->erp->CommonReadonly();
- }
- else {
- if(isset($optional) && (string)$optional !== '') {
- $this->app->Tpl->Add(
- 'MESSAGE',
- "Zu diesem Auftrag gibt es folgende Dokumente. $optional
"
- );
- }
- }
- if($schreibschutz=='1') {
- $this->app->erp->CommonReadonly();
- }
-
- if($schreibschutz != '1'){
- if($this->app->erp->Firmendaten('schnellanlegen') == '1'){
- $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '
- ');
- $this->app->Tpl->Set('BUTTON_UEBERNEHMEN2', '
-
- ');
-
- }else{
- $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '
-
- ');
-
- $this->app->Tpl->Set('BUTTON_UEBERNEHMEN2', '
-
- ');
-
- }
- }
- // immer wenn sich der lieferant genändert hat standartwerte setzen
- if($this->app->Secure->GetPOST('adresse')!='') {
- $tmp = $this->app->Secure->GetPOST('adresse');
- $kundennummer = $this->app->erp->FirstTillSpace($tmp);
- $filter_projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' LIMIT 1");
- $adresse = $this->app->DB->Select(
- "SELECT id
- FROM adresse
- WHERE kundennummer='$kundennummer' AND geloescht=0 "
- .$this->app->erp->ProjektRechte('projekt', true, 'vertrieb')."
- ORDER by ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt
- LIMIT 1"
- );
-
- $uebernehmen =$this->app->Secure->GetPOST('uebernehmen');
- if($uebernehmen=='1' && $schreibschutz != '1') {
- // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!!
- $this->app->erp->LoadAuftragStandardwerte($id,$adresse);
- $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' LIMIT 1");
- if($projekt != $filter_projekt) {
- $deactivateAutoversand = (int)$this->app->erp->Projektdaten($projekt,'deactivateautoshipping');
- if($deactivateAutoversand) {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE auftrag SET autoversand = 0 WHERE autoversand = 1 AND schreibschutz = 0 AND id = %d',
- $id
- )
- );
- }
- }
- $projektlager = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id = '$projekt' LIMIT 1");
- $this->app->DB->Update("UPDATE auftrag SET standardlager = '$projektlager' WHERE id = '$id' LIMIT 1");
- $this->app->DB->Update("UPDATE auftrag SET lieferantenauftrag=0 WHERE id='$id'");
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id");
- }
- }
-
- if($this->app->Secure->GetPOST('lieferant')!='') {
- $tmplieferant = $this->app->Secure->GetPOST('lieferant');
- $lieferantennummer = $this->app->erp->FirstTillSpace($tmplieferant);
-
- $adresselieferant = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$lieferantennummer' AND lieferantennummer!='' AND geloescht=0 LIMIT 1");
-
- $uebernehmen2 =$this->app->Secure->GetPOST('uebernehmen2');
- if($uebernehmen2=='1' && $schreibschutz != '1') {
- // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!!
- $this->app->DB->Update("UPDATE auftrag SET lieferantenauftrag=1 WHERE id='$id'");
- $this->app->erp->LoadAuftragStandardwerte($id,$adresselieferant,true);
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id");
- }
- }
-
- // easy table mit arbeitspaketen YUI als template
- $table = new EasyTable($this->app);
- $table->Query(
- "SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, ap.menge,
- (SELECT TRIM(SUM(l.menge))+0
- FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel
- ) as Lagerbestand, ap.geliefert ausgeliefert,ap.vpe as VPE
- FROM auftrag_position ap
- WHERE ap.auftrag='$id'"
- );
- $table->DisplayNew('POSITIONEN','VPE','noAction');
- $summe = $this->app->DB->Select(
- "SELECT FORMAT(SUM(menge*preis),2) FROM auftrag_position
- WHERE auftrag='$id'"
- );
-
- $waehrung = $this->app->DB->Select(
- "SELECT waehrung FROM auftrag_position
- WHERE auftrag='$id' LIMIT 1"
- );
-
- $orderRow = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT * FROM auftrag WHERE id = %d',
- $id
- )
- );
-
- $summebrutto = $orderRow['gesamtsumme'];//$this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
- $ust_befreit_check = $orderRow['ust_befreit'];//$this->app->DB->Select("SELECT ust_befreit FROM auftrag WHERE id='$id' LIMIT 1");
-
- if($ust_befreit_check==1){
- $tmp = 'Kunde ist UST befreit';
- }
- else{
- $tmp = 'Kunde zahlt mit UST';
- }
-
- if($summe > 0){
- $this->app->Tpl->Add(
- 'POSITIONEN',
- "Zu zahlen: $summe (netto) $summebrutto (brutto) $waehrung ($tmp) "
- );
- }
-
- $vertrieb = $orderRow['vertrieb'];//$this->app->DB->Select("SELECT vertrieb FROM auftrag WHERE id='$id' LIMIT 1");
- $this->app->Tpl->Set('VERTRIEB'," ");
-
- $belegnr= $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
- $this->app->Tpl->Set('BELEGNR'," ");
-
- $status = $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
- $this->app->Tpl->Set('STATUS'," ");
-
- // ENDE
-
-
- //alle RE und LS zu diesem Auftrag
- $auftragsnummer = $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
- $anzahl = $this->app->DB->Select(
- "SELECT COUNT(r.belegnr)
- FROM rechnung r
- WHERE r.adresse='$adresse' AND r.auftrag='$auftragsnummer' AND r.auftrag!=''");
-
- if($anzahl >0) {
- $this->app->Tpl->Set('AUFTRAGSDOKUMENTE',"Rechnungen und Lieferscheine ");
-
- $table = new EasyTable($this->app);
- $table->Query(
- "SELECT r.belegnr as rechnung, DATE_FORMAT(r.datum,'%d.%m.%Y') as ausgang,
- l.belegnr as lieferschein, r.soll as betrag
- FROM rechnung r
- LEFT JOIN lieferschein l ON r.lieferschein=l.id
- WHERE r.adresse='$adresse' AND r.auftrag='$auftragsnummer' AND r.auftrag!=''"
- );
- $table->DisplayNew('AUFTRAGSDOKUMENTE',"Betrag","noAction");
-
- $this->app->Tpl->Add('AUFTRAGSDOKUMENTE'," ");
- }
-
- //suche alle LS zu diesem Auftrag
- if($auftragsnummer>0) {
- $trackingInfo = $this->AuftragTrackingTabelle(empty($deliveryNoteIds)?0: $id);
- $this->app->Tpl->Set('VERSAND', $trackingInfo);
- }
-
- // UST
- $ust_ok = $orderRow['ust_ok'];//$this->app->DB->Select("SELECT ust_ok FROM auftrag WHERE id='$id' LIMIT 1");
- $ust_befreit = $orderRow['ust_befreit'];//$this->app->DB->Select("SELECT ust_befreit FROM auftrag WHERE id='$id' LIMIT 1");
-
- $ustprfid = $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"
- );
-
- if($ust_befreit==0) {
- $this->app->Tpl->Set('USTPRUEFUNG','Abgabe in Inland');
- }
- else if ($ust_befreit==1) {
-
- if($ust_ok == 1) {
- $datum = $this->app->DB->Select("SELECT briefbestellt FROM ustprf WHERE id='$ustprfid' LIMIT 1");
- $datum = $this->app->String->Convert($datum,"%1-%2-%3","%3.%2.%1");
- $this->app->Tpl->Set('USTPRUEFUNG',"EU-Lieferung mit Pruefung Brief bestellt: $datum");
- }
- else{
- $this->app->Tpl->Set('USTPRUEFUNG', "Pruefung notwendig! (Starten )");
- }
- }
- else {
- if($ust_ok == 1) {
- $this->app->Tpl->Set('USTPRUEFUNG', 'Freigabe Export (Drittland)');
- }
- else{
- $this->app->Tpl->Set('USTPRUEFUNG', 'Fehlende Freigabe Export!');
- }
- }
-
- $versandart = $orderRow['versandart'];// $this->app->DB->Select("SELECT versandart FROM auftrag WHERE id='$id' LIMIT 1");
- if($this->app->Secure->GetPOST('versandart')!='') {
- $versandart = $this->app->Secure->GetPOST('versandart');
- }
- $this->app->Tpl->Set('PACKSTATION','none');
- if($versandart==='packstation') {
- $this->app->Tpl->Set('PACKSTATION','');
- }
-
- $abweichendelieferadresse= $orderRow['abweichendelieferadresse'];//$this->app->DB->Select("SELECT abweichendelieferadresse FROM auftrag WHERE id='$id' LIMIT 1");
- if($this->app->Secure->GetPOST('abweichendelieferadresse')!='') {
- $versandart = $this->app->Secure->GetPOST('abweichendelieferadresse');
- }
- $this->app->Tpl->Set('ABWEICHENDELIEFERADRESSESTYLE','none');
- if($abweichendelieferadresse=='1') {
- $this->app->Tpl->Set('ABWEICHENDELIEFERADRESSESTYLE','');
- }
- if($id && $status !== 'storniert'
- && $auftragsnummer && $this->app->erp->RechteVorhanden('auftrag','paypal')
- && false !== $this->app->erp->SendPaypalFromAuftrag($id, true)
- ) {
- $this->app->Tpl->Add(
- 'BUTTON_UEBERNEHMEN',
- ' '
- );
- }
-
- $this->app->Tpl->Set('AKTIV_TAB1','selected');
- $sollExtSoll = $this->app->DB->SelectRow(
- sprintf(
- "SELECT extsoll, gesamtsumme
- FROM auftrag
- WHERE id = %d AND schreibschutz = 0 AND status = 'abgeschlossen' AND extsoll <> 0",
- $id
- )
- );
- if(!empty($sollExtSoll['extsoll']) && $sollExtSoll['extsoll'] == $sollExtSoll['gesamtsumme']) {
- $sollExtSoll['gesamtsumme'] = $this->app->DB->Select(
- sprintf(
- 'SELECT ROUND(SUM(`umsatz_brutto_gesamt`),2) FROM `auftrag_position` WHERE `auftrag` = %d ',
- $id
- )
- );
- }
- if(!empty($sollExtSoll) && $sollExtSoll['gesamtsumme'] != $sollExtSoll['extsoll']) {
- $extsoll = $sollExtSoll['extsoll'];
- $this->app->Tpl->Add(
- 'MESSAGE',
- ''
- );
- }
- parent::AuftragEdit();
- $this->app->erp->CheckBearbeiter($id,'auftrag');
- $this->app->erp->CheckVertrieb($id,'auftrag');
-
- if($this->app->Secure->GetPOST('speichern')!='' && $storno==''){
- $msg = $this->app->Secure->GetGET('msg');
- if($this->app->Secure->GetGET('msg')==''){
- $msg .= $this->app->Tpl->Get('MESSAGE').' ';
- $msg = $this->app->erp->base64_url_encode($msg);
- }
-
- $this->app->Location->execute(
- "index.php?module=auftrag&action=edit&id=$id&msg=$msg"
- .($this->app->Secure->GetGET('msgid')?'&msgid='.(int)$this->app->Secure->GetGET('msgid'):'')
- );
- }
- if ($this->app->Secure->GetPOST('speichern')!='' && $storno==='abschluss'){
- //header("Location: index.php?module=stornierungen&action=list");
- $this->app->ExitXentral();
- }
-
-
- if($this->app->Secure->GetPOST('weiter')!='') {
- $this->app->Location->execute("index.php?module=auftrag&action=positionen&id=$id");
- }
-
- $this->AuftragMenu();
- }
-
- function AuftragUstStart()
- {
- $frame = $this->app->Secure->GetGET("frame");
-
- if($frame=="false")
- {
- // hier nur fenster größe anpassen
- $this->app->YUI->IframeDialog(600,320);
- } else {
- $this->app->BuildNavigation=false;
- }
- }
-
-
- function AuftragCreate()
- {
- //$this->app->Tpl->Add(KURZUEBERSCHRIFT,"Auftrag");
- $this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zurück zur Übersicht");
-
- $anlegen = $this->app->Secure->GetGET("anlegen");
-
- if($this->app->erp->Firmendaten("schnellanlegen")=="1" && $anlegen!="1")
- {
- $this->app->Location->execute("index.php?module=auftrag&action=create&anlegen=1");
- }
-
- if($anlegen != '')
- {
- $id = $this->app->erp->CreateAuftrag();
- $deactivateautoshipping = $this->app->DB->Select(
- sprintf(
- 'SELECT pr.deactivateautoshipping
- FROM auftrag AS o
- INNER JOIN projekt AS pr ON o.projekt = pr.id
- WHERE o.id = %d',
- $id
- )
- );
- if($deactivateautoshipping) {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE auftrag SET autoversand = 0 WHERE id = %d',
- $id
- )
- );
- }
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id");
- }
-
- $this->app->Tpl->Set('MESSAGE',"Möchten Sie ein Auftrag jetzt anlegen?
-
");
- $this->app->Tpl->Set('TAB1',"
-
-
-
- Aufträge in Bearbeitung
-
-
- Offene Aufträge, die durch andere Mitarbeiter in Bearbeitung sind.
-
-
-
-
-
- [AUFTRAGE]");
-
-
- $this->app->Tpl->Set('AKTIV_TAB1',"selected");
-
- $this->app->YUI->TableSearch('AUFTRAGE',"auftraegeinbearbeitung");
-
- $this->app->Tpl->Parse('PAGE',"tabview.tpl");
- }
-
-
-
-
- function AuftragReservieren()
- {
- $id = $this->app->Secure->GetGET('id');
- $this->app->erp->AuftragEinzelnBerechnen($id,true);
- $msg = $this->app->erp->base64_url_encode("Artilel für diesen Auftrag reserviert!
");
-
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
- }
-
- /**
- * @param int $kommissionierungId
- */
- public function updateCase($kommissionierungId)
- {
- if($kommissionierungId <= 0) {
- return;
- }
- $deliveryNotes = $this->app->DB->SelectArr(
- sprintf(
- 'SELECT id, kiste FROM lieferschein WHERE kommissionierung = %d ORDER BY id',
- $kommissionierungId
- )
- );
- if(empty($deliveryNotes)) {
- return;
- }
-
- $kiste = 0;
- foreach($deliveryNotes as $deliveryNote) {
- $kiste++;
- if($deliveryNote['kiste'] != $kiste) {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE lieferschein SET kiste = %d WHERE id = %d',
- $kiste, $deliveryNote['id']
- )
- );
- }
- }
- }
-
- /**
- * @param array $orders
- * @param int $projectId
- * @param int $cronjobCommissionId
- * @param int $cronjobId
- * @param int $commissionId
- *
- * @return int
- */
- public function sendOrders($orders, $projectId, $cronjobCommissionId, $cronjobId = 0, $commissionId = 0)
- {
- $return = 0;
- if(empty($orders) || !is_array($orders)) {
- return $return;
- }
-
- $commissionName = empty($cronjobCommissionId)?'': $this->app->DB->real_escape_string(
- $this->app->DB->Select(
- sprintf(
- 'SELECT `bezeichnung` FROM `cronjob_kommissionierung` WHERE `id` = %d',
- $cronjobCommissionId
- )
- )
- );
- $this->kommissionierung = $commissionId > 0
- ? $commissionId
- : $this->app->erp->GetNextKommissionierung($commissionName);
- foreach($orders as $auftrag) {
- if(
- $auftragRow = $this->app->DB->SelectRow(
- sprintf(
- "SELECT a.id, a.belegnr
- FROM auftrag AS a
- WHERE (cronjobkommissionierung = '$cronjobCommissionId' OR 0 = '$cronjobCommissionId')
- AND a.id != ''
- AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.inbearbeitung=0
- AND a.nachlieferung!='1' AND a.autoversand='1' AND a.liefertermin_ok='1' AND kreditlimit_ok='1'
- AND liefersperre_ok='1'
- AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
- AND a.id = %d
- GROUP BY a.id
- ORDER by a.id",
- $auftrag
- )
- )
- ) {
- if($cronjobId > 0){
- $this->app->erp->ProzessstarterStatus(
- 'Auftrag Versand Auftrag: ' . $auftragRow['belegnr'], $cronjobId
- );
- }
- //$this->app->erp->AuftragEinzelnBerechnen($auftrag);
- $this->app->DB->Update(
- "UPDATE prozessstarter
- SET mutex = 1 , mutexcounter = 0, letzteausfuerhung = now()
- WHERE (parameter = 'autoversand_standard' OR parameter = 'autoversand_manuell') AND aktiv = 1"
- );
- $erg = null;
- $this->app->erp->RunHook('VorAutoversand', 1, $auftrag);
- if(
- $this->app->DB->Select(
- sprintf(
- "SELECT a.id
- FROM auftrag AS a
- WHERE a.id = %d AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben'
- AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.autoversand='1' AND a.liefertermin_ok='1'
- AND kreditlimit_ok='1' AND liefersperre_ok='1'
- AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
- GROUP BY a.id",
- $auftrag
- )
- )
- ) {
- $this->AuftragVersand($auftrag, false, $erg, true);
- $return++;
- }
- $this->app->DB->Update(
- sprintf(
- 'UPDATE auftrag SET cronjobkommissionierung = 0 WHERE id = %d LIMIT 1',
- $auftrag
- )
- );
- }
- }
-
- if(
- empty($projectId)
- || empty($this->kommissionierung)
- || !$this->app->DB->Select(
- sprintf(
- 'SELECT `id` FROM `lieferschein` WHERE `kommissionierung` = %d LIMIT 1',
- $this->kommissionierung
- )
- )
- ) {
- return $return;
- }
-
- $kommissionierlistestufe1 = $this->app->erp->Projektdaten($projectId, 'kommissionierlistestufe1');
- if($kommissionierlistestufe1) {
- $druckercode = $this->app->erp->Projektdaten($projectId, 'druckerlogistikstufe1');
- if($druckercode <=0) {
- $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
- }
- $kommissionierlistestufe1menge = $this->app->erp->Projektdaten(
- $projectId, 'kommissionierlistestufe1menge'
- );
- if($kommissionierlistestufe1menge < 1) {
- $kommissionierlistestufe1menge = 1;
- }
- /** @var Kommissionierlauf $obj2 */
- $obj2 = $this->app->erp->LoadModul('kommissionierlauf');
- if($obj2 && $this->kommissionierung) {
- if($cronjobId > 0){
- $this->app->erp->ProzessstarterStatus(
- 'KommissionierlaufPDF: ' . $this->kommissionierung, $cronjobId
- );
- }
- $tmpfile = $obj2->KommissionierlaufPDF($this->kommissionierung);
- for($mengedruck=$kommissionierlistestufe1menge;$mengedruck > 0;$mengedruck--) {
- $this->app->printer->Drucken($druckercode,$tmpfile);
- }
- unlink($tmpfile);
- }
- }
-
- return $return;
- }
-
- public function AuftragVersand($id='', $ignoriereliefertermin = false, &$ergebnis = null, $paketmarkedrucken = false)
- {
- if(!$this->kommissionierung)
- {
- $this->kommissionierung = $this->app->erp->GetNextKommissionierung();
- }
- // mit der funktionen koennen nur erstauftraege abgewickelt koennen!!!
- $internmodus = 0;
- if($id!='')
- {
- $internmodus=1;
- }
- if($id==''){
- $id = $this->app->Secure->GetGET('id');
- }
- $cmd = $this->app->Secure->GetGET("cmd");
- if($cmd=="manually" && $id > 0)
- {
- $this->app->DB->Update(sprintf("UPDATE auftrag SET autoversand=1 WHERE id=%d AND status='freigegeben' LIMIT 1",$id));
- }
-
- @ignore_user_abort(true);
- @set_time_limit(0);
- // Prozess haengt so lange bis der nächste frei ist
- $fp = $this->app->erp->ProzessLock('auftrag_autoversand');
- $posids = $this->app->Secure->GetGET('posids');
- if($posids)
- {
- $positionen = null;
- $zwischenpositionen = null;
- if(strpos($posids, 'z') !== false || strpos($posids, 'b') !== false)
- {
- $sida = explode(',',$posids);
- foreach($sida as $v)
- {
- if(strpos($v, 'b') === 0)
- {
- $v = substr($v ,1);
- $positionen[] = $v;
- }else{
- $v = substr($v ,1);
- $zwischenpositionen[] = $v;
- }
- }
- }
- }
- $this->app->erp->AuftragEinzelnBerechnen($id);
- // artikel reservieren
- $adresse = 0;
- $versandart = '';
- $projekt = 0;
- $belegnr = '';
- $tmpname = '';
- $keinetrackingmail = 0;
- $usereditid = 0;
- $auftrag = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id='$id' LIMIT 1");
- if(!empty($auftrag)){
- $adresse = $auftrag[0]['adresse'];
- $versandart = $auftrag[0]['versandart'];
- $projekt = (int)$auftrag[0]['projekt'];
- $belegnr = $auftrag[0]['belegnr'];
- $tmpname = $auftrag[0]['name'];
- $keinetrackingmail = $auftrag[0]['keinetrackingmail'];
- $usereditid = $auftrag[0]['usereditid'];//$this->app->DB->Select("SELECT usereditid FROM auftrag WHERE id='$id' LIMIT 1");
- }
- $useredittimestamp = $this->app->DB->Select("SELECT TIME_TO_SEC(TIMEDIFF(NOW(), useredittimestamp)) FROM auftrag WHERE id='$id' LIMIT 1");
-
- $projektarr = null;
- if($projekt > 0){
- $projektarr = $this->app->DB->SelectRow("SELECT * FROM projekt WHERE id='$projekt' LIMIT 1");
- }
- if(!empty($projektarr)){
- $kommissionierverfahren = $projektarr['kommissionierverfahren'];//$this->app->DB->Select("SELECT kommissionierverfahren FROM projekt WHERE id='$projekt' LIMIT 1");
- }else{
- $kommissionierverfahren = '';
- }
- if($usereditid == $this->app->User->GetID())
- {
- $useredittimestamp = 1000;
- }
-
- $anzahl_artikel = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag=$id LIMIT 1");
- if($anzahl_artikel <= 0)
- {
- $meldung = "Auftrag $belegnr kann nicht weitergefuehrt werden, da keine Artikel gebucht sind!";
- $this->app->erp->EventMitSystemLog($this->app->User->GetID(), $meldung, -1,'', 'alert', 1);
- }
- $ret = false;
- $zusatzcheck = true;
- $this->app->erp->RunHook('AuftragVersandZusatzcheck', 2, $id, $zusatzcheck);
- if(($auftrag[0]['status']==='freigegeben' && $auftrag[0]['nachlieferung']=='0'
- && $auftrag[0]['lager_ok']=='1'&&$auftrag[0]['porto_ok']=='1'&&$auftrag[0]['ust_ok']=='1'
- && $auftrag[0]['vorkasse_ok']=='1'&&$auftrag[0]['nachnahme_ok']=='1' &&($auftrag[0]['liefertermin_ok']=='1' || $ignoriereliefertermin)
- && $auftrag[0]['check_ok']=='1' && $auftrag[0]['autoversand']=='1'
- && $auftrag[0]['kreditlimit_ok']=='1' && $auftrag[0]['liefersperre_ok']=='1' && ($useredittimestamp > 45 || $useredittimestamp <= 0 || $internmodus)
- && $anzahl_artikel >=1) && $zusatzcheck)
- {
- // Start
- $ret = true;
-
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
- (%d,now(),'%s','Lieferschein an Versandzentrum übergeben')",
- (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
- )
- );
-
- $this->app->erp->Protokoll("WeiterfuehrenAuftrag AB $belegnr Art: ".$auftrag[0]['art']);
- // pruefe ob es lagerartikel gibt
- /*$summe_lagerartikel = $this->app->DB->Select("SELECT SUM(ap.id) FROM auftrag_position ap,
- artikel a WHERE ap.auftrag='$id' AND a.id=ap.artikel AND a.lagerartikel='1'");*/
-
- $nurRestmenge = false;
- //if($summe_lagerartikel >0 || $auftrag[0][art]=="rma")
- //TODO wenn nur dienstleistung keinen lieferschein
- if($auftrag[0]['art']==='lieferung' || $auftrag[0]['art']==='standardauftrag' || $auftrag[0]['art']=='')
- {
- if($posids) {
- $lieferschein = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id, $positionen, $zwischenpositionen);
- $this->app->erp->Protokoll('WeiterfuehrenAuftragZuLieferschein AB '.$belegnr);
- }
- else {
- $lieferschein = $this->app->DB->Select(
- sprintf(
- "SELECT dn.id
- FROM lieferschein AS dn
- WHERE dn.auftragid = %d AND dn.status <> 'storniert'
- LIMIT 1",
- $id
- )
- );
- if(empty($lieferschein)) {
- $lieferschein = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id);
- $this->app->erp->Protokoll('WeiterfuehrenAuftragZuLieferschein AB ' . $belegnr);
- }
- else {
- $nurRestmenge = true;
- }
- }
-
- $ls_belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
- if($ls_belegnr==='' || $ls_belegnr==='0') {
- $ls_belegnr = $this->app->erp->GetNextNummer('lieferschein',$projekt,$lieferschein);
- }
-
- $this->app->DB->Update("UPDATE lieferschein SET
- belegnr='$ls_belegnr', status='freigegeben', versand='".$this->app->User->GetDescription()."'
- WHERE id='$lieferschein' LIMIT 1");
-
- $this->app->erp->LieferscheinProtokoll($lieferschein, 'Lieferschein freigegeben');
-
- if(!($kommissionierverfahren==='lieferscheinlager' ||
- $kommissionierverfahren==='lieferscheinlagerscan' ||
- $kommissionierverfahren==='lieferschein')){
- $this->app->erp->PDFArchivieren('lieferschein', $lieferschein);
- }
- $etiketten_positionen = 0;
- $etiketten_art = '';
- $etiketten_drucker = 0;
- $etiketten_sort = 0;
- if(!empty($projektarr))
- {
- $etiketten_positionen = $projektarr['etiketten_positionen'];//$this->app->DB->Select("SELECT etiketten_positionen FROM projekt WHERE id='$projekt' LIMIT 1");
- $etiketten_art = $projektarr['etiketten_art'];//$this->app->DB->Select("SELECT etiketten_art FROM projekt WHERE id='$projekt' LIMIT 1");
- $etiketten_drucker = $projektarr['etiketten_drucker'];//$this->app->DB->Select("SELECT etiketten_drucker FROM projekt WHERE id='$projekt' LIMIT 1");
- $etiketten_sort= $projektarr['etiketten_sort'];//$this->app->DB->Select("SELECT etiketten_drucker FROM projekt WHERE id='$projekt' LIMIT 1");
- }
- if($etiketten_positionen > 0)
- {
- $this->app->erp->LieferscheinPositionenDrucken($lieferschein,$etiketten_drucker,$etiketten_art,$etiketten_sort);
- }
- } else {
- // sonst ist lieferschein = 0
- $lieferschein = 0;
- }
-
- // rechnung immer außer es ist beistellung bzw. kostenlose lieferung
- $rechnung = 0;
- if(($auftrag[0]['art']==='rechnung' || $auftrag[0]['art']==='standardauftrag' || $auftrag[0]['art']=='') && !$this->app->erp->Projektdaten($projekt,'rechnungerzeugen'))
- {
- // nur erzeugen wenn positionen betrag hpoch genug ist
- $artikelarrsumme = $this->app->DB->Select("SELECT SUM(preis*menge) FROM auftrag_position WHERE auftrag='$id' AND auftrag > 0");
- $this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr Preis ".$artikelarrsumme);
-
- // wenn mindestesten zwei verschiedene steuersaetze und rechnung 0 ist dann muss man auch erzeugen
- $anzahlsteuer = $this->app->DB->Select("Select sum(t.summe) FROM (
- (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer = 'ermaessigt' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
- union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer = 'befreit' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
- union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer <> 'ermaessigt' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
- union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE steuersatz >= 0 and not isnull(steuersatz) AND auftrag = '$id' LIMIT 1) )t");
-
- if($artikelarrsumme>=0.01 || $anzahlsteuer > 1)
- {
- // versand erzeugen (RE + LS) und verlinken und wenn vorkasse auftrag geld als bezahlt markieren in rechnung
- if($posids) {
-
- $rechnung = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id, $positionen, $zwischenpositionen);
- }
- else{
- $rechnung = $this->app->DB->Select(
- sprintf(
- "SELECT i.id FROM rechnung AS i WHERE auftragid = %d AND status <> 'storniert' LIMIT 1",
- $id
- )
- );
- if(empty($rechnung)){
- $rechnung = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id);
- }
- }
- $this->app->DB->Update("UPDATE rechnung SET lieferschein='$lieferschein' WHERE id='$rechnung' LIMIT 1");
-
- $re_belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$rechnung' LIMIT 1");
- if($re_belegnr==='' || $re_belegnr==='0')
- {
- $re_belegnr = $this->app->erp->GetNextNummer('rechnung',$projekt,$rechnung);
- }
- $this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr (id $id) RE $re_belegnr (id $rechnung)");
-
- $this->app->DB->Update(
- sprintf(
- "UPDATE rechnung SET belegnr = '%s' WHERE id = %d AND (belegnr = '' OR belegnr = '0')",
- $re_belegnr, $rechnung
- )
- );
- $this->app->DB->Update(
- sprintf(
- "UPDATE rechnung SET status = 'freigegeben' WHERE status <> 'storniert' AND status <> 'versendet' AND id = %d",
- $rechnung
- )
- );
- $this->app->erp->RechnungProtokoll($rechnung, 'Rechnung freigegeben');
-
- $this->app->DB->Update(
- sprintf(
- "UPDATE rechnung
- SET buchhaltung='%s'
- WHERE id=%d
- LIMIT 1",
- $this->app->DB->real_escape_string($this->app->User->GetDescription()), $rechnung
- )
- );
-
- $this->app->erp->ANABREGSNeuberechnen($rechnung,"rechnung");
- $this->app->erp->PDFArchivieren("rechnung",$rechnung);
- }
- }
- // auftrag_position geliefert_menge und geliefert anpassen
- $artikelarr = $this->app->DB->SelectArr(
- sprintf(
- "SELECT ap.id,ap.artikel,ap.menge
- FROM auftrag_position AS ap
- INNER JOIN artikel AS art ON ap.artikel = art.id AND art.lagerartikel = 1
- WHERE ap.auftrag=%d AND ap.auftrag > 0",
- (int)$id
- )
- );
-
- $cartikelarr = $artikelarr?count($artikelarr):0;
- for($i=0;$i<$cartikelarr; $i++)
- {
- $auftragspositionsid = $artikelarr[$i]['id'];
- $artikel = $artikelarr[$i]['artikel'];
- $menge= $artikelarr[$i]['menge'];
- // lager teile reservieren
-
- $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag'
- AND parameter='$id' AND artikel='$artikel' ");
-
- $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$menge',
- geliefert='1' WHERE id='$auftragspositionsid' LIMIT 1");
- }
-
- // nur wenn autoversand projekt
- $autoversand_pruefung = '';
- $automailrechnung = '';
- $autodruckrechnungstufe1mail = '';
- if(!empty($projektarr)){
- $autoversand_pruefung = $projektarr['autoversand'];// $this->app->DB->Select("SELECT autoversand FROM projekt WHERE id='$projekt' LIMIT 1");
- $automailrechnung = $projektarr['automailrechnung'];//$this->app->DB->Select("SELECT automailrechnung FROM projekt WHERE id='$projekt' LIMIT 1");
- $autodruckrechnungstufe1mail = $projektarr['autodruckrechnungstufe1mail'];//$this->app->DB->Select("SELECT autodruckrechnungstufe1mail FROM projekt WHERE id='$projekt' LIMIT 1");
- }
-
- $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
-
-
- $this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr Kommissionierverfahren: $kommissionierverfahren Projekt $projekt");
-
- switch($kommissionierverfahren)
- {
- case 'rechnungsmail':
- // rechnung per mail versenden????
- if($automailrechnung && $rechnung > 0)
- {
- // rechnung per mail versenden
- // sende
- // $this->app->erp->Rechnungsmail($rechnung);
- }
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
- (%d,now(),'%s','Autoversand ausgeführt')",
- (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
- )
- );
- break;
- default:
-
- if($kommissionierverfahren==='lieferschein' && $lieferschein > 0)
- {
- //FALL 1 Lieferschein mit Lagerplatz
- if($this->kommissionierung){
- $this->app->DB->Update(
- sprintf(
- "UPDATE lieferschein SET kommissionierung = %d WHERE id = %d LIMIT 1",
- $this->kommissionierung, $lieferschein
- )
- );
- $this->updateCase($this->kommissionierung);
- }
- $this->app->erp->LieferscheinAuslagern(
- $lieferschein,
- true,
- (int)$this->app->DB->Select(sprintf('SELECT standardlager FROM auftrag WHERE id = %d LIMIT 1', $id)),
- 'lieferschein',
- true,
- false,
- $nurRestmenge
- );
-
- // Prozesse ohne Versandzentrum
-
-
- $this->app->erp->BriefpapierHintergrundDisable($druckercode);
-
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('LieferscheinPDFCustom')) {
- $Brief = new LieferscheinPDFCustom($this->app,$projekt);
- }
- else{
- $Brief = new LieferscheinPDF($this->app,$projekt);
- }
- $Brief->GetLieferschein($lieferschein);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument(false, true);
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
-
- if(class_exists('LieferscheinPDFCustom')) {
- $Brief = new LieferscheinPDFCustom($this->app,$projekt);
- }
- else{
- $Brief = new LieferscheinPDF($this->app,$projekt);
- }
- $Brief->GetLieferschein($lieferschein);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument(false, true);
- //$this->app->printer->Drucken($druckercode,$tmpfile);
-
- $fileid_lieferschein = $this->app->erp->CreateDatei($Brief->filename,'lieferschein','','',$tmpfile,$this->app->User->GetName());
- $this->app->erp->AddDateiStichwort($fileid_lieferschein,'lieferschein','lieferschein',$lieferschein,$without_log=false);
-
- $sprache = $this->app->DB->Select("SELECT sprache FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
- if($sprache=='')
- {
- $sprache='deutsch';
- }
- $text = $this->app->erp->GetGeschaeftsBriefText('Lieferschein',$sprache,$projekt);
- $betreff = $this->app->erp->GetGeschaeftsBriefBetreff('Lieferschein',$sprache,$projekt);
- if($betreff=='')
- {
- $betreff='Mitgesendet bei Lieferung';
- }
-
- $this->app->DB->Update("UPDATE lieferschein SET status='versendet',versendet='1',schreibschutz='1' WHERE id='$lieferschein' LIMIT 1");
- $this->app->DB->Insert("INSERT INTO dokumente_send
- (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,dateiid) VALUES ('','lieferschein',NOW(),'".$this->app->User->GetName()."',
- '$adresse','$lieferschein','versand','$betreff','$text','$projekt','','$fileid_lieferschein')");
- $this->app->erp->LieferscheinProtokoll($lieferschein,'Lieferschein versendet (Auto-Versand)');
-
- unlink($tmpfile);
- // Druck Auftrag Anhang wenn aktiv
- if(1)//if($this->app->erp->Projektdaten($projekt,"autodruckanhang")=="1")
- {
- // alle anhaenge drucken! wo auftrag datei anhang
- $this->app->erp->GetDateiSubjektObjekt('anhang','Auftrag',$id);
- // for($i=0;$i<(!empty($tmpanhang)?count($tmpanhang):0);$i++)
- // $this->app->printer->Drucken($druckercode,$tmpanhang[$i]);
- $tmpanhang ='';
- }
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
- (%d,now(),'%s','Auftrag an Versandzentrum übergeben')",
- (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
- )
- );
- }
-
-
- //FALL 2 // logistikzentrum
-
- // auftrag_position geliefert_menge und geliefert anpassen
- $artikelarr = $this->app->DB->SelectArr(
- sprintf(
- "SELECT ap.id, ap.artikel,ap.menge
- FROM auftrag_position AS ap
- INNER JOIN artikel AS art ON ap.artikel = art.id AND art.lagerartikel = 1
- WHERE ap.auftrag=%d AND ap.auftrag > 0",
- (int)$id
- )
- );
- $cartikelarr = $artikelarr?count($artikelarr):0;
- for($i=0;$i<$cartikelarr; $i++) {
- $auftragspositionsid = $artikelarr[$i]['id'];
- $artikel = $artikelarr[$i]['artikel'];
- $menge= $artikelarr[$i]['menge'];
- // lager teile reservieren
-
- $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag'
- AND parameter='$id' AND artikel='$artikel' ");
-
- if($kommissionierverfahren==='zweistufig' && $lieferschein > 0)
- {
- $this->app->DB->Insert("INSERT INTO lager_reserviert (id,adresse,artikel,menge,grund,projekt,
- firma,bearbeiter,datum,objekt,parameter)
- VALUES('','$adresse','$artikel','$menge','Versand für Auftrag $belegnr','$projekt',
- '".$this->app->User->GetFirma()."','".$this->app->User->GetName()."','9999-01-01','lieferschein','$lieferschein')");
- }
-
- if($lieferschein > 0) {
- $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$menge',
- geliefert='1' WHERE id='$auftragspositionsid' LIMIT 1");
- }
-
- }
- //ende
-
- $this->app->DB->Insert(
- sprintf(
- "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
- (%d,now(),'%s','Autoversand ausgeführt')",
- (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
- )
- );
- }
- $autodruckrechnungstufe1 = 0;
- $autodruckrechnungstufe1menge = 0;
- $exportdruckrechnungstufe1 = 0;
- $printOrderQuantity = 0;
- if(!empty($projektarr))
- {
- $autodruckrechnungstufe1 = $projektarr['autodruckrechnungstufe1'];
- $autodruckrechnungstufe1menge = $projektarr['autodruckrechnungstufe1menge'];
- $exportdruckrechnungstufe1 = $projektarr['exportdruckrechnungstufe1'];
- if($projektarr['auftragdrucken'] == '1') {
- $printOrderQuantity = $projektarr['auftragdruckenmenge'] > 1 ? $projektarr['auftragdruckenmenge'] : 1;
- }
- }
-
- if($exportdruckrechnungstufe1)
- {
- if(!empty($projektarr))
- {
- $exportdruckrechnungstufe1menge = $projektarr['exportdruckrechnungstufe1menge'];//$this->app->DB->Select("SELECT exportdruckrechnungstufe1menge FROM projekt WHERE id='$projekt' LIMIT 1");
- }else{
- $exportdruckrechnungstufe1menge = 0;
- }
-
- $exportland = $this->app->DB->Select("SELECT if(abweichendelieferadresse = 1 AND lieferland <> '',lieferland, land) FROM auftrag WHERE id = '$id' LIMIT 1");
- $exportdruckrechnungstufe1 = $this->app->erp->Export($exportland);
- }
-
-
-
-
- if(($autodruckrechnungstufe1=='1' || $exportdruckrechnungstufe1) && $rechnung > 0)
- {
- $this->app->DB->Update("UPDATE rechnung SET status='versendet', versendet='1',schreibschutz='1' WHERE id='$rechnung' LIMIT 1");
- $druckercode = $this->app->erp->Projektdaten($projekt,'druckerlogistikstufe1');
- $this->app->erp->BriefpapierHintergrundDisable($druckercode);
- if(class_exists('RechnungPDFCustom'))
- {
- $Brief = new RechnungPDFCustom($this->app,$projekt);
- }else{
- $Brief = new RechnungPDF($this->app,$projekt);
- }
- $Brief->GetRechnung($rechnung);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- if($autodruckrechnungstufe1=='1')
- {
- for($imenge=0;$imenge<$autodruckrechnungstufe1menge;$imenge++) {
- $this->app->printer->Drucken($druckercode, $tmpfile);
- }
- }
- if($exportdruckrechnungstufe1 == '1')
- {
- for($imenge=0;$imenge<$exportdruckrechnungstufe1menge;$imenge++) {
- $this->app->printer->Drucken($druckercode, $tmpfile);
- }
- }
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('RechnungPDFCustom'))
- {
- $Brief = new RechnungPDFCustom($this->app,$projekt);
- }else{
- $Brief = new RechnungPDF($this->app,$projekt);
- }
- $Brief->GetRechnung($rechnung);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- }
-
- if($autodruckrechnungstufe1mail && $rechnung > 0)
- {
- $this->app->erp->Rechnungsmail($rechnung);
- }
-
- // auftrag abschliessen
- $this->app->DB->Update("UPDATE auftrag SET status='abgeschlossen',schreibschutz='1' WHERE id='$id' LIMIT 1");
- $this->app->erp->PDFArchivieren('auftrag',$id);
-
- // auftrag abschliessen und event senden
-
- $this->app->erp->ProzessUnlock($fp);
-
- // kundenfreigabe loeschen wenn das im projekt eingestellt ist
- if(!empty($projektarr))
- {
- $checkok = $projektarr['kundenfreigabe_loeschen'];//$this->app->DB->Select("SELECT kundenfreigabe_loeschen FROM projekt WHERE id='$projekt' LIMIT 1");
- }else{
- $checkok = 0;
- }
-
- if($checkok==1){
- $this->app->DB->Update("UPDATE adresse SET kundenfreigabe='0' WHERE id='$adresse' LIMIT 1");
- }
-
- if($this->app->erp->ModulVorhanden('produktion') && method_exists($this->app->erp, 'ProduktionEinzelnBerechnen'))
- {
- $produktionen = $this->app->DB->SelectArr("SELECT id FROM produktion WHERE auftragid = '$id'");
- if($produktionen)
- {
- foreach($produktionen as $v)
- {
- $this->app->erp->ProduktionEinzelnBerechnen($v['id']);
- }
- }
- }
-
- //if($internmodus && $lieferschein) // 2018-10-09 BS ab jetzt immer diese Optionen auswerten - nicht nur wenn es intern ist
- if($lieferschein)
- {
- $paketmarkedruckenprojekt = !empty($projektarr['paketmarkedrucken'])?$projektarr['paketmarkedrucken']:0;
- if($paketmarkedrucken && $paketmarkedruckenprojekt && !$this->app->erp->PaketmarkeDrucken($lieferschein, 'lieferschein'))
- {
- //$this->app->DB->Update("UPDATE auftrag SET schreibschutz = 0, status = 'freigegeben' WHERE id = '$id' LIMIT 1");
- $this->app->erp->AuftragProtokoll($id, 'Paketmarke drucken fehlgeschlagen');
- if(!empty($fp))
- {
- $this->app->erp->ProzessUnlock($fp);
- }
- return $ret;
- }
- $lieferscheinedruckenprojekt = !empty($projektarr['lieferscheinedrucken'])?$projektarr['lieferscheinedrucken']:0;
- if($lieferscheinedruckenprojekt)
- {
- $lieferscheinedruckenmenge = !empty($projektarr['lieferscheinedruckenmenge'])?$projektarr['lieferscheinedruckenmenge']:0;//$this->app->DB->Select("SELECT lieferscheinedruckenmenge FROM projekt WHERE id = '$projekt' LIMIT 1");
- if($lieferscheinedruckenmenge > 0)
- {
- $druckercode = !empty($projektarr['druckerlogistikstufe1'])?$projektarr['druckerlogistikstufe1']:0;//$this->app->DB->Select("SELECT druckerlogistikstufe1 FROM projekt WHERE id='$projekt' LIMIT 1");
- if($druckercode <=0){
- $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
- }
-
- $this->app->erp->BriefpapierHintergrundDisable($druckercode);
-
- if(class_exists('LieferscheinPDFCustom'))
- {
- $Brief = new LieferscheinPDFCustom($this->app,$projekt);
- }else{
- $Brief = new LieferscheinPDF($this->app,$projekt);
- }
- $Brief->GetLieferschein($lieferschein);
-
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
-
- for($imenge=0;$imenge<$lieferscheinedruckenmenge;$imenge++) {
- $this->app->printer->Drucken($druckercode, $tmpfile);
- }
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('LieferscheinPDFCustom'))
- {
- $Brief = new LieferscheinPDFCustom($this->app,$projekt);
- }else{
- $Brief = new LieferscheinPDF($this->app,$projekt);
- }
- $Brief->GetLieferschein($lieferschein);
-
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- unlink($tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- }
- }
- }
-
- // Druck Auftrag Anhang wenn aktiv
- if($this->app->erp->Projektdaten($projekt,'druckanhang')=='1') {
- $obj = $this->app->erp->LoadModul('versanderzeugen');
- if(!empty($obj) && method_exists($obj,'autoPrintAttachment'))
- {
- $obj->autoPrintAttachment($druckercode,$id,$lieferschein,$rechnung);
- }
- }
-
- if($printOrderQuantity > 0 && $druckercode) {
- if(class_exists('AuftragPDFCustom'))
- {
- $Brief = new AuftragPDFCustom($this->app,$projekt);
- }else{
- $Brief = new AuftragPDF($this->app,$projekt);
- }
- $Brief->GetAuftrag($id);
-
- $tmpfile = $Brief->displayTMP();
- for($printOrderQuantity; $printOrderQuantity > 0; $printOrderQuantity--) {
- $this->app->printer->Drucken($druckercode, $tmpfile);
- }
- unlink($tmpfile);
- }
-
- $this->app->erp->RunHook('auftrag_versand_ende', 1, $id);
-
- // wenn per URL aufgerufen
- if($internmodus!='1')
- {
- if(!empty($fp))
- {
- $this->app->erp->ProzessUnlock($fp);
- }
- $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
- }
- if(!empty($fp))
- {
- $this->app->erp->ProzessUnlock($fp);
- }
- return $ret;
- }
-
- //$this->app->erp->ProzessUnlock("auftrag_autoversand");
- $this->app->erp->ProzessUnlock($fp);
-
- if($posids)
- {
- $this->app->Location->execute('index.php?module=auftrag&action=positionen&id='.$id);
- }
-
- // wenn per URL aufgerufen
- if($internmodus!='1')
- {
- // $this->AuftragList();
-
- //header("Location: index.php?module=auftrag&action=search");
- if($id > 0){
- $this->app->Location->execute('index.php?module=auftrag&action=edit&id=' . $id);
- }
- $this->app->Location->execute('index.php?module=auftrag&action=versandzentrum');
- }
- }
-
-
- function AuftragSelbstabholerNachricht()
- {
- // kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
-
- }
-
- function AuftragSelbstabholerAbgeholt()
- {
- // kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
-
- }
-
-
- function AuftragNachlieferungCheck()
- {
-
- //echo "pruefe ob eine Nachlieferung gemacht werden kann";
-
- }
-
-
- function AuftragNachlieferung()
- {
- // kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
-
- }
-
-
-
-
- public function AuftragVerfuegbar()
- {
- $frame = $this->app->Secure->GetGET('frame');
- $id = $this->app->Secure->GetGET('id');
- if($frame=='false')
- {
- // hier nur fenster größe anpassen
- $this->app->YUI->IframeDialog(600,400);
- } else {
- // nach page inhalt des dialogs ausgeben
- $table = new EasyTable($this->app);
- $table->Query("SELECT ap.nummer, ap.bezeichnung, ap.menge, (SELECT TRIM(SUM(lp.menge))+0 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,'',
- TRIM((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
- ) as fehlend
- FROM auftrag_position ap LEFT JOIN artikel a ON a.id=ap.artikel WHERE ap.auftrag='$id' AND a.lagerartikel=1");
-
- $table->DisplayNEW('PAGE','Fehlende','noAction');
-
- $this->app->BuildNavigation=false;
- }
- }
-
- public function AuftragAmpel($id,$parsetarget)
- {
-
- $status = $this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
-
- if($status=='abgeschlossen' || $status=='storniert')
- {
- $go = ' ';
- $stop = ' ';
- $reserviert = ' ';
- $check = ' ';
- } else {
-
- $go = ' ';
- $stop = ' ';
- $reserviert = ' ';
- $check = ' ';
-
- }
-
- // offene Auftraege
- $table = new EasyTable($this->app);
- $sql = "SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as vom, if(a.belegnr!='',a.belegnr,'ohne Nummer') as auftrag, a.internet, CONCAT('',a.name,' ') as name, a.land, p.abkuerzung as projekt, a.zahlungsweise as per, a.gesamtsumme as soll,";
- $subsql = "'0' as ist,";
- $sql .= $subsql. "if(a.check_ok,'','$check ') as AC,
-
- if(a.reserviert_ok,'$reserviert','') as AR,
- if(a.lager_ok,'$go','$stop') as LA,
- if(a.porto_ok,'$go','$stop') as PO,
- if(a.ust_ok,'$go',CONCAT('','$stop',' ')) as ST,
- if(a.vorkasse_ok,'$go','$stop') as ZE,
- if(a.nachnahme_ok,'$go','$stop') as N,
- if(a.autoversand,'$go','$stop') as A,
- if(a.liefertermin_ok,'$go','$stop') as LT,
- a.id
- FROM auftrag a, projekt p WHERE a.inbearbeitung=0 AND p.id=a.projekt AND a.id=$id LIMIT 1";
-
- $table->Query($sql);
-
- $table->DisplayNew($parsetarget, "
-
-
-
- ");
-
-
- }
-
- public function AuftraguebersichtMenu()
- {
- $backurl = $this->app->Secure->GetGET('backurl');
- $backurl = $this->app->erp->base64_url_decode($backurl);
-
- $this->app->erp->MenuEintrag('index.php?module=auftrag&action=list','Übersicht');
- $this->app->erp->MenuEintrag('index.php?module=auftrag&action=create','Neuen Auftrag anlegen');
-
- if(strlen($backurl)>5){
- $this->app->erp->MenuEintrag("$backurl", 'Zurück zur Übersicht');
- }
- else{
- $this->app->erp->MenuEintrag('index.php', 'Zurück zur Übersicht');
- }
-
- $this->app->erp->RunMenuHook('auftrag_list');
- }
-
- /**
- * @param string $description
- * @param bool $escaped
- *
- * @return int
- */
- public function createCronjobCommission(string $description = ''): int
- {
- $nextCronjobCommissionId = 1 + (int)$this->app->DB->Select(
- 'SELECT MAX(`cronjobkommissionierung`) FROM `auftrag`'
- );
-
- $this->app->DB->Insert(
- "INSERT INTO `cronjob_kommissionierung` (`id`, `bezeichnung`)
- VALUES ({$nextCronjobCommissionId}, '{$description}') "
- );
- if($this->app->DB->GetInsertID() > 0) {
- return $this->app->DB->GetInsertID();
- }
- $this->app->DB->Update(
- "UPDATE `cronjob_kommissionierung`
- SET `bezeichnung` = '{$description}'
- WHERE `id` = {$nextCronjobCommissionId}"
- );
-
- return $nextCronjobCommissionId;
- }
-
- public function AuftragVersandzentrum()
- {
- $this->AuftraguebersichtMenu();
- $targetMessage = 'AUTOVERSANDBERECHNEN';
- $autoshipmentEnabled = true;
- $this->app->erp->RunHook('OrderAutoShipment', 2, $targetMessage, $autoshipmentEnabled);
-
- $plusCronjobs = $this->app->DB->SelectRow(
- "SELECT art, periode
- FROM prozessstarter
- WHERE (parameter = 'autoversand' OR parameter = 'autoversand_plus') AND aktiv = 1
- ORDER BY art = 'periodisch', periode >= 30
- LIMIT 1"
- );
-
- if(!empty($plusCronjobs) && $plusCronjobs['art'] === 'periodisch' && $plusCronjobs['periode'] < 30) {
- $message = 'Autoversand Cronjob ist mit '.$plusCronjobs['periode'].' Minuten zu kurz eingestellt (mindestens 30).';
- $this->app->Tpl->Add('AUTOVERSANDBERECHNEN', ''.$message.'
');
- }
-
- // ZAHLUNGSMAIL
- $zahlungsmail= $this->app->Secure->GetPOST('zahlungsmail');
-
- if($zahlungsmail!=''){
- $meineauftraege = $this->app->DB->SelectArr("SELECT id FROM auftrag WHERE status='freigegeben'
- AND vorkasse_ok!='1' AND zahlungsweise!='rechnung' AND zahlungsweise!='nachnahme' AND zahlungsweise!='bar' AND zahlungsweise!='lastschrift'");
- $cmeineauftraege = $meineauftraege?count($meineauftraege):0;
- for($i=0;$i<$cmeineauftraege;$i++) {
- $this->app->erp->AuftragNeuberechnen($meineauftraege[$i]['id']);
-
- $this->app->erp->AuftragEinzelnBerechnen($meineauftraege[$i]['id']);
- $this->app->erp->AuftragZahlungsmail($meineauftraege[$i]['id']);
- }
- }
-
- // AUFTAEGE ABSCHLIESSEN!
- $submit = $this->app->Secure->GetPOST('submit');
- $auftraegemarkiert = $this->app->Secure->GetPOST('auftraegemarkiert');
- $entfernen = $this->app->Secure->GetPOST('entfernen');
- $bezeichnung = (string)$this->app->Secure->GetPOST('bezeichnung');
- if($entfernen && $auftraegemarkiert){
- $cauftraegemarkiert = (!empty($auftraegemarkiert)?count($auftraegemarkiert):0);
- for($i=0;$i<$cauftraegemarkiert;$i++) {
- $this->app->DB->Update("UPDATE auftrag SET cronjobkommissionierung = 0 WHERE id = '".$auftraegemarkiert[$i]."' LIMIT 1");
- }
- }
-
- if($this->app->Secure->GetPOST('ausfuehren')){
- $drucker = $this->app->Secure->GetPOST('seldruckerversand');
- $aktion = $this->app->Secure->GetPOST('auftrag_versandauswahl');
- $auftraegemarkiert = $this->app->Secure->GetPOST('auftraegemarkiert');
- $bezeichnung = (string)$this->app->Secure->GetPOST('bezeichnung');
-
- $selectedIds = [];
- if(!empty($auftraegemarkiert)) {
- foreach($auftraegemarkiert as $selectedId) {
- $selectedId = (int)$selectedId;
- if($selectedId > 0) {
- $selectedIds[] = $selectedId;
- }
- }
- }
- if($drucker > 0) {
- $this->app->erp->BriefpapierHintergrundDisable($drucker);
- }
- if(is_array($auftraegemarkiert)){
-
- switch($aktion){
- case 'versandstarten':
- $cronjobActive = $this->app->DB->Select(
- "SELECT ps.id
- FROM `prozessstarter` AS `ps`
- WHERE ps.aktiv = 1 and (ps.parameter = 'autoversand_standard' OR ps.parameter = 'autoversand_manuell')
- LIMIT 1"
- );
- $check = $cronjobActive;
- if(!$check){
- $check = $this->app->DB->Select(
- "SELECT id
- FROM auftrag AS a
- WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='')
- AND a.status='freigegeben' AND a.autoversand='1' AND a.cronjobkommissionierung > 0
- AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.vorkasse_ok='1'
- AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
- AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
- LIMIT 1"
- );
- }
-
- if(!empty($auftraegemarkiert)){
- $datuma = null;
- foreach ($auftraegemarkiert as $k => $v) {
- $datuma[$k] = $this->app->DB->Select(
- sprintf(
- 'SELECT datum FROM auftrag WHERE id = %d LIMIT 1',
- (int)$v
- )
- );
- }
- //Sortieren nach Datum
- array_multisort($datuma, SORT_ASC, $auftraegemarkiert);
- // aufsteigend sortieren erst die alten IDs
- //sort($auftraegemarkiert);
- }
- if($check){
- $maxcronjobkommissionierung = $this->createCronjobCommission((string)$bezeichnung);
-
- $cauftraegemarkiert = $auftraegemarkiert ? count($auftraegemarkiert) : 0;
- for ($i = 0; $i < $cauftraegemarkiert; $i++) {
- $this->app->DB->Update(
- sprintf(
- 'UPDATE `auftrag`
- SET `cronjobkommissionierung` = %d
- WHERE `id` = %d
- LIMIT 1',
- $maxcronjobkommissionierung, $auftraegemarkiert[$i]
- )
- );
- }
- }
- else {
- $cauftraegemarkiert = $auftraegemarkiert ? count($auftraegemarkiert) : 0;
- for ($i = 0; $i < $cauftraegemarkiert; $i++) {
- $projekt = (int)$this->app->DB->Select(
- sprintf(
- 'SELECT `projekt` FROM `auftrag` WHERE `id` = %d LIMIT 1',
- $auftraegemarkiert[$i]
- )
- );
- $auftraegenachprojekt[$projekt][] = $auftraegemarkiert[$i];
- }
-
- foreach ($auftraegenachprojekt as $projekt => $auftraege) {
- if(!is_array($auftraege) || empty($auftraege)) {
- continue;
- }
- $this->kommissionierung = $this->app->erp->GetNextKommissionierung($bezeichnung);
- foreach ($auftraege as $auftrag) {
- $this->AuftragVersand($auftrag);
- }
- if(empty($this->kommissionierung)) {
- continue;
- }
- if(
- empty(
- $this->app->DB->Select(
- sprintf(
- 'SELECT `id` FROM `lieferschein` WHERE `kommissionierung` = %d',
- $this->kommissionierung
- )
- )
- )
- ) {
- continue;
- }
- $kommissionierlistestufe1 = $this->app->erp->Projektdaten($projekt, 'kommissionierlistestufe1');
- if(empty($kommissionierlistestufe1)) {
- continue;
- }
- $druckercode = $this->app->DB->Select(
- sprintf(
- 'SELECT druckerlogistikstufe1 FROM projekt WHERE id= %d LIMIT 1',
- $projekt
- )
- );
- if($druckercode <= 0){
- $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
- }
- $kommissionierlistestufe1menge = $this->app->erp->Projektdaten(
- $projekt, 'kommissionierlistestufe1menge'
- );
- if($kommissionierlistestufe1menge < 1){
- $kommissionierlistestufe1menge = 1;
- }
- /** @var Kommissionierlauf $obj */
- $obj = $this->app->erp->LoadModul('kommissionierlauf');
- if($obj && $this->kommissionierung){
- $tmpfile = $obj->KommissionierlaufPDF($this->kommissionierung);
- for ($mengedruck = $kommissionierlistestufe1menge; $mengedruck > 0; $mengedruck--) {
- $this->app->printer->Drucken($druckercode, $tmpfile);
- }
- unlink($tmpfile);
- }
- }
- }
- break;
- case 'drucken':
- if($drucker){
- foreach ($selectedIds as $v) {
- $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$v' LIMIT 1");
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('AuftragPDFCustom')){
- $Brief = new AuftragPDFCustom($this->app, $projekt);
- }else{
- $Brief = new AuftragPDF($this->app, $projekt);
- }
- $Brief->GetAuftrag($v);
- $_tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- unlink($_tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('AuftragPDFCustom')){
- $Brief = new AuftragPDFCustom($this->app, $projekt);
- }else{
- $Brief = new AuftragPDF($this->app, $projekt);
- }
- $Brief->GetAuftrag($v);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- $this->app->printer->Drucken($drucker, $tmpfile);
- $this->app->erp->AuftragProtokoll($v, "Auftrag versendet");
- $this->app->erp->AuftragProtokoll($v, "In Versandübergabe gedruckt");
- unlink($tmpfile);
- }
- }
- break;
- }
- }
- }
-
- $check = null;
- $cronjobActive = $this->app->DB->Select(
- "SELECT ps.id
- FROM `prozessstarter` AS `ps`
- WHERE ps.aktiv = 1 and (ps.parameter = 'autoversand_standard' OR ps.parameter = 'autoversand_manuell')
- LIMIT 1"
- );
- if(!$cronjobActive) {
- $check = $this->app->DB->Select(
- sprintf(
- "SELECT id
- FROM auftrag AS a
- WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.autoversand='1' AND
- a.cronjobkommissionierung > 0
- AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.vorkasse_ok='1' AND a.porto_ok='1'
- AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND
- liefersperre_ok='1'
- LIMIT 1"
- )
- );
- }
-
- if($check || $cronjobActive) {
- $unversendet = $this->app->DB->Select("SELECT count(a.id) FROM auftrag as a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.autoversand='1' AND a.cronjobkommissionierung = 0 AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
- AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' " . $this->app->erp->ProjektRechte('p.id', true, 'a.vertriebid'));
-
- $warteschleife = $this->app->DB->Select("SELECT count(a.id) FROM auftrag as a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.autoversand='1' AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
- AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' AND a.cronjobkommissionierung > 0 " . $this->app->erp->ProjektRechte('p.id', true, "a.vertriebid"));
-
- if($unversendet > 0) {
- $unversendet ='('.$unversendet.')';
- }
- else {
- $unversendet='';
- }
- if($warteschleife > 0) {
- $warteschleife ='('.$warteschleife.')';
- }
- else {
- $warteschleife='';
- }
-
- $this->app->Tpl->Set('TABTEXT2','Unversendet '.$unversendet);
- $this->app->Tpl->Set('TABTEXT3','Warteschleife '.$warteschleife);
- $this->app->YUI->TableSearch('TAB3','auftraegeoffeneautowartend');
- if($warteschleife > 0 && !$cronjobActive) {
- $this->app->Tpl->Add(
- 'AUTOVERSANDBERECHNEN',
- 'Der Prozessstarter "Autoversand Manuell" ist deaktivert,
- es befinden sich aber Aufträge in der Warteschlange.
- Bitte aktieren Sie den Prozessstarter
- oder entfernen Sie die betreffenden Aufträge in der Warteschlange
'
- );
- }
- }
- else{
- $this->app->Tpl->Set('VORTABS3UEBERSCHRIFT','');
- }
-
- $this->app->Tpl->Set('SELDRUCKERVERSAND', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));
-
- if(!$autoshipmentEnabled) {
- $this->app->Tpl->Parse('PAGE','auftraguebersicht.tpl');
- return;
- }
- if($this->app->erp->RechteVorhanden('auftrag','berechnen'))
- {
- $this->app->Tpl->Set('AUTOBERECHNEN',' ');
- }else{
- $this->app->Tpl->Set('AUTOBERECHNEN2','');
- }
- $infolink = '(Information) ';
- $last_order_calc = $this->app->erp->GetKonfiguration('last_order_calc');
- if(!empty($last_order_calc)) {
- $this->app->Tpl->Add('AUTOVERSANDBERECHNEN','Die letzte Berechnung der Auftragsampeln war am '.$last_order_calc.'. '.$infolink.' [AUTOBERECHNEN]
');
- }
- else{
- $this->app->Tpl->Add('AUTOVERSANDBERECHNEN','Die letzte Berechnung der Auftragsampeln wurde noch nicht ermittelt. '.$infolink.' [AUTOBERECHNEN]
');
- }
- $this->app->YUI->TableSearch('TAB2','auftraegeoffeneauto');
- $this->app->Tpl->Parse('PAGE','auftrag_versandzentrum.tpl');
- }
-
-
- public function AuftragList()
- {
- if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('auftrag', 'edit'))
- {
- $drucker = $this->app->Secure->GetPOST('seldrucker');
- $aktion = $this->app->Secure->GetPOST('sel_aktion');
- $auswahl = $this->app->Secure->GetPOST('auswahl');
- $selectedIds = [];
- if(!empty($auswahl)) {
- foreach($auswahl as $selectedId) {
- $selectedId = (int)$selectedId;
- if($selectedId > 0) {
- $selectedIds[] = $selectedId;
- }
- }
- }
- if($drucker > 0) {
- $this->app->erp->BriefpapierHintergrundDisable($drucker);
- }
- if(is_array($auswahl))
- {
- switch($aktion)
- {
- case 'stapelproduktionweiter':
- $error_artikel = '';
- foreach($selectedIds as $v) {
- $weiteralsproduktion = $this->AuftragProduktion($v,true);
- /** @var Produktion $produktion */
- $produktion = $this->app->erp->LoadModul('produktion');
- $produktion->ProduktionFreigabe($weiteralsproduktion);
- if(!is_int($weiteralsproduktion)){
- $auftragsnummer = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id = '$v'");
- $error_artikel .= $auftragsnummer . ', ';
- }
- }
- $error_artikel = rtrim($error_artikel, ', ');
- if($error_artikel != '') {
- $msg = $this->app->erp->base64_url_encode('Der Auftrag kann nicht als Produktion weitergeführt werden, da im Auftrag $error_artikel Artikel nicht als Produktionsartikel markiert sind!
');
- }else {
- $msg = $this->app->erp->base64_url_encode('Die Aufträge wurden als Produktion weitergeführt.
');
- }
- $this->app->Location->execute('index.php?module=auftrag&action=list&msg='.$msg);
- break;
- case 'fastlane':
- if(!empty($selectedIds)) {
- $this->app->DB->Update('UPDATE auftrag SET fastlane = 1 WHERE id IN (' . implode(', ', $selectedIds) . ')');
- }
- break;
- case 'fastlaneentfernen':
- if(!empty($selectedIds)) {
- $this->app->DB->Update('UPDATE auftrag SET fastlane = 0 WHERE id IN (' . implode(', ', $selectedIds) . ')');
- }
- break;
- case 'freigeben':
- foreach($selectedIds as $v) {
- if($this->app->DB->Select("SELECT id FROM auftrag WHERE id = '$v' AND belegnr = '' AND status <> 'freigeben' AND status <> 'abgeschlossen' AND status <> 'storniert' LIMIT 1")){
- $this->AuftragFreigabe($v);
- }
- }
- break;
- case 'versandfreigeben':
- if(!empty($selectedIds)) {
- $this->app->DB->Update('UPDATE auftrag SET autoversand = 1 WHERE id IN ('. implode(', ', $selectedIds) . ')');
- }
- break;
- case 'versandentfernen':
- if(!empty($selectedIds)) {
- $this->app->DB->Update('UPDATE auftrag SET autoversand = 0 WHERE id IN ('. implode(', ', $selectedIds) . ')');
- }
- break;
- case 'mail':
- foreach($selectedIds as $v) {
- $auftragarr = $this->app->DB->SelectRow("SELECT email,adresse,projekt,name,sprache FROM auftrag WHERE id = '$v' LIMIT 1");
- $email = '';
- $adresse = 0;
- $projekt = 0;
- $name = '';
- $sprache = '';
- if(!empty($auftragarr)) {
- $email = (string)$auftragarr['email'];//$this->app->DB->Select("SELECT email FROM auftrag WHERE id = '$v' LIMIT 1");
- $adresse = (int)$auftragarr['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$v' LIMIT 1");
- $projekt = (int)$auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$v' LIMIT 1");
- $name = $auftragarr['name'];// $this->app->DB->Select("SELECT name FROM auftrag WHERE id = '$v' LIMIT 1");
- $sprache = $auftragarr['sprache'];// $this->app->DB->Select("SELECT sprache FROM auftrag WHERE id='$v' LIMIT 1");
- }
-
- if($sprache=='' || $email === '') {
- $adrArr = $this->app->DB->SelectRow("SELECT sprache, email FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
- if($sprache == '') {
- $sprache = $adrArr['sprache'];
- }
- if($email === '') {
- $email = (string)$adrArr['email'];
- }
- }
-
- if($sprache=='') {
- $sprache='de';
- }
-
- if($email !== '')
- {
- $emailtext = $this->app->erp->Geschaeftsbriefvorlage($sprache,'auftrag',$projekt,$name,$v);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('AuftragPDFCustom'))
- {
- $Brief = new AuftragPDFCustom($this->app,$projekt);
- }else{
- $Brief = new AuftragPDF($this->app,$projekt);
- }
- $Brief->GetAuftrag($v);
- $_tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- unlink($_tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('AuftragPDFCustom'))
- {
- $Brief = new AuftragPDFCustom($this->app,$projekt);
- }else{
- $Brief = new AuftragPDF($this->app,$projekt);
- }
- $Brief->GetAuftrag($v);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
-
- $fileid = $this->app->erp->CreateDatei($Brief->filename,'auftrag','','',$tmpfile,$this->app->User->GetName());
- $this->app->erp->AddDateiStichwort($fileid,'auftrag','auftrag',$v);
- $this->app->erp->DokumentSend($adresse,'auftrag', $v, 'email',$emailtext['betreff'],$emailtext['text'],array($tmpfile),"","",$projekt,$email, $name);
- $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 ('','auftrag',NOW(),'".$this->app->DB->real_escape_string($this->app->User->GetName())."',
- '$adresse','$v','email','".$this->app->DB->real_escape_string($emailtext['betreff'])."','".$this->app->DB->real_escape_string($emailtext['text'])."','$projekt','$ansprechpartner',1,'$fileid')");
- $tmpid = $this->app->DB->GetInsertID();
- unlink($tmpfile);
- $this->app->DB->Update("UPDATE auftrag SET versendet=1, versendet_am=NOW(),
- versendet_per='email',versendet_durch='".$this->app->DB->real_escape_string($this->app->User->GetName())."',schreibschutz='1' WHERE id='$v' LIMIT 1");
- $this->app->erp->AuftragProtokoll($v,'Auftrag versendet');
- }
- }
-
- break;
- case 'storniert':
- foreach($selectedIds as $v) {
- $orderArr = $this->app->DB->SelectRow(
- sprintf(
- 'SELECT projekt, status FROM auftrag WHERE id= %d',
- $v
- )
- );
- $projekt = $orderArr['projekt'];
- $status = $orderArr['status'];
- if($status==='angelegt' || $status=='') {
- $this->app->erp->DeleteAuftrag($v);
- }
- else {
- if(class_exists('AuftragPDFCustom')) {
- $Brief = new AuftragPDFCustom($this->app,$projekt);
- }
- else{
- $Brief = new AuftragPDF($this->app,$projekt);
- }
- $Brief->GetAuftrag($v);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- $this->app->erp->AuftragProtokoll($v,'Auftrag storniert');
- $this->app->DB->Update(
- sprintf(
- "UPDATE auftrag
- SET status='storniert', schreibschutz=1, versendet = 1
- WHERE id = %d AND status!='angelegt'
- LIMIT 1",
- $v
- )
- );
- unlink($tmpfile);
- $this->app->DB->Delete(
- sprintf(
- "DELETE FROM lager_reserviert WHERE parameter = '%d' AND objekt LIKE 'auftrag'",
- $v
- )
- );
- }
- }
- break;
- case 'versendet':
- foreach($selectedIds as $v) {
- $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$v' LIMIT 1");
- if(class_exists('AuftragPDFCustom'))
- {
- $Brief = new AuftragPDFCustom($this->app,$projekt);
- }else{
- $Brief = new AuftragPDF($this->app,$projekt);
- }
- $Brief->GetAuftrag($v);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- $this->app->erp->AuftragProtokoll($v,'Auftrag versendet');
- $this->app->DB->Update("UPDATE auftrag SET schreibschutz=1, versendet = 1 WHERE id = '$v' LIMIT 1");
- $this->app->DB->Update("UPDATE auftrag SET status='versendet' WHERE id = '$v' AND status='freigegeben' LIMIT 1");
- unlink($tmpfile);
- }
-
- break;
-
- case 'drucken':
- if($drucker)
- {
- foreach($selectedIds as $v) {
- $auftragsdaten = $this->app->DB->SelectRow("SELECT projekt, adresse FROM auftrag WHERE id='$v' LIMIT 1");
- $projekt = $auftragsdaten['projekt'];
- $adressId = $auftragsdaten['adresse'];
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('AuftragPDFCustom'))
- {
- $Brief = new AuftragPDFCustom($this->app,$projekt);
- }else{
- $Brief = new AuftragPDF($this->app,$projekt);
- }
- $Brief->GetAuftrag($v);
- $_tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- unlink($_tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('AuftragPDFCustom'))
- {
- $Brief = new AuftragPDFCustom($this->app,$projekt);
- }else{
- $Brief = new AuftragPDF($this->app,$projekt);
- }
- $Brief->GetAuftrag($v);
- $tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- $this->app->printer->Drucken($drucker,$tmpfile);
- $doctype = 'auftrag';
- $this->app->erp->RunHook('dokumentsend_ende', 5, $doctype, $v, $projekt, $adressId, $aktion);
- $this->app->erp->AuftragProtokoll($v,"Auftrag versendet");
- unlink($tmpfile);
- }
-
- }
- break;
- case 'pdf':
- $tmpfile = [];
- foreach($selectedIds as $v) {
- $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$v' LIMIT 1");
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('AuftragPDFCustom'))
- {
- $Brief = new AuftragPDFCustom($this->app,$projekt);
- }else{
- $Brief = new AuftragPDF($this->app,$projekt);
- }
- $Brief->GetAuftrag($v);
- $_tmpfile = $Brief->displayTMP();
- $Brief->ArchiviereDocument();
- unlink($_tmpfile);
- $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
- if(class_exists('AuftragPDFCustom'))
- {
- $Brief = new AuftragPDFCustom($this->app,$projekt);
- }else{
- $Brief = new AuftragPDF($this->app,$projekt);
- }
- $Brief->GetAuftrag($v);
- $tmpfile[] = $Brief->displayTMP();
- //$Brief->ArchiviereDocument();
- }
-
- if((!empty($tmpfile)?count($tmpfile):0) > 0){
- try {
- /** @var \Xentral\Components\Pdf\PdfMerger $pdfMerger */
- $pdfMerger = $this->app->Container->get('PdfMerger');
- $mergeOutputPath = realpath($this->app->erp->GetTMP()) . '/' . uniqid('sammelpdf_', true) . '.pdf';
- $pdfMerger->merge($tmpfile, $mergeOutputPath);
-
- foreach($tmpfile as $key=>$value) {
- unlink($value);
- }
-
- header('Content-type:application/pdf');
- header('Content-Disposition: attachment;filename='.md5(microtime(true)).'.pdf');
- readfile($mergeOutputPath);
- $this->app->ExitXentral();
- } catch (\Xentral\Components\Pdf\Exception\PdfComponentExceptionInterface $exception) {
- echo 'Fehler beim Generieren der Sammelpdf: ' . htmlspecialchars($exception->getMessage());
- $this->app->ExitXentral();
- }
- }
- break;
- default:
- $this->app->erp->RunHook('auftrag_batch', 1, $selectedId);
- break;
- }
- }
- }
-
- $this->AuftraguebersichtMenu();
-
- if(strlen($backurl)>5){
- $this->app->erp->MenuEintrag("$backurl", 'Zurück zur Übersicht');
- }
- else{
- $this->app->erp->MenuEintrag('index.php', 'Zurück zur Übersicht');
- }
-
-
- $this->app->erp->RunMenuHook('auftrag_list');
-
- // ZAHLUNGSMAIL
- $zahlungsmail= $this->app->Secure->GetPOST('zahlungsmail');
-
- if($zahlungsmail!='')
- {
- $orders = $this->app->DB->SelectArr(
- "SELECT id
- FROM auftrag
- WHERE status='freigegeben'
- AND vorkasse_ok!='1' AND zahlungsweise!='rechnung' AND zahlungsweise!='nachnahme' AND zahlungsweise!='bar' AND zahlungsweise!='lastschrift'"
- );
- if(!empty($orders)){
- foreach($orders as $order) {
- $this->app->erp->AuftragNeuberechnen($order['id']);
- $this->app->erp->AuftragEinzelnBerechnen($order['id']);
- $this->app->erp->AuftragZahlungsmail($order['id']);
- }
- }
- }
- // AUFTAEGE ABSCHLIESSEN!
- $submit = $this->app->Secure->GetPOST('submit');
- $auftraegemarkiert = $this->app->Secure->GetPOST('auftraegemarkiert');
- if($submit!='' || $this->app->Secure->GetPOST('frmauto'))
- {
- $bezeichnung = $this->app->Secure->GetPOST('bezeichnung');
- $orderIds = [];
- if(!empty($auftraegemarkiert)) {
- foreach($orderIds as $orderId) {
- if((int)$orderId > 0) {
- $orderIds[] = (int)$orderId;
- }
- }
- $orders = empty($orderIds)?null:$this->app->DB->SelectArr(
- sprintf(
- 'SELECT id, projekt
- FROM `auftrag`
- WHERE id IN (%s)
- ORDER BY id',implode(', ', $orderIds)
- )
- );
-
- if(!empty($orders)) {
- $auftraegenachprojekt = [];
- foreach($orders as $order) {
- $auftraegenachprojekt[$order['projekt']][] = $order['id'];
- }
- foreach ($auftraegenachprojekt as $projekt => $auftraege) {
- if(is_array($auftraege)){
- $this->kommissionierung = $this->app->erp->GetNextKommissionierung($bezeichnung);
- foreach ($auftraege as $auftrag) {
- $this->AuftragVersand($auftrag);
- }
- }
- }
- }
- }
- }
-
- $zahlungsweisen = $this->app->DB->SelectArr('
- SELECT
- zahlungsweise
- FROM
- auftrag
- GROUP BY
- zahlungsweise
- ');
-
- $zahlungsweiseStr = '';
- if ($zahlungsweisen) {
- foreach ($zahlungsweisen as $zahlungsweise) {
- if (empty($zahlungsweise['zahlungsweise'])) {
- continue;
- }
- $zahlungsweiseStr .= '' . ucfirst($zahlungsweise['zahlungsweise']) . ' ';
- }
- }
-
- $status = $this->app->DB->SelectArr('
- SELECT
- status
- FROM
- auftrag
- GROUP BY
- status
- ');
-
- $statusStr = '';
- if ($status) {
- foreach ($status as $statusE) {
- if (empty($statusE['status'])) {
- continue;
- }
- $statusStr .= '' . ucfirst($statusE['status']) . ' ';
- }
- }
-
- $versandarten = $this->app->DB->SelectArr('
- SELECT
- versandart
- FROM
- auftrag
- GROUP BY
- versandart
- ');
-
- $versandartenStr = '';
- if ($versandarten) {
- foreach ($versandarten as $versandart) {
- if (empty($versandart['versandart'])) {
- continue;
- }
- $versandartenStr .= '' . ucfirst($versandart['versandart']) . ' ';
- }
- }
-
- $laender = $this->app->erp->GetSelectLaenderliste();
- $laenderStr = '';
- foreach ($laender as $landKey => $land) {
- $laenderStr .= '' . $land . ' ';
- }
-
-
- $this->app->YUI->DatePicker("datumVon");
- $this->app->YUI->DatePicker("datumBis");
- $this->app->YUI->AutoComplete("projekt", "projektname", 1);
- $this->app->YUI->AutoComplete("kundennummer", "kunde", 1);
- $this->app->YUI->AutoComplete("auftragsnummer", "auftrag", 1);
- $this->app->YUI->AutoComplete("artikel", "artikelnummer");
- $this->app->YUI->AutoComplete("kundengruppe", "gruppekennziffer",1);
-
- $this->app->Tpl->Add('ZAHLUNGSWEISEN',$zahlungsweiseStr);
- $this->app->Tpl->Add('STATUS',$statusStr);
- $this->app->Tpl->Add('VERSANDARTEN',$versandartenStr);
- $this->app->Tpl->Add('LAENDER',$laenderStr);
- $this->app->Tpl->Parse('TAB1',"auftrag_table_filter.tpl");
-
- $this->app->YUI->TableSearch('TAB2',"auftraegeoffeneauto");
- $this->app->YUI->TableSearch('TAB1','auftraege', 'show','','',basename(__FILE__), __CLASS__);
- $this->app->YUI->TableSearch('TAB3',"auftraegeoffene");
-
- $this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));
- $this->app->YUI->TableSearch('TAB5',"auftraegeinbearbeitung");
- $this->app->erp->RunHook('auftraguebersicht_filter', 0);
- $this->app->Tpl->Parse('PAGE',"auftraguebersicht.tpl");
- }
-
- /**
- * @param int $order_id
- * @param int $pos_id
- */
- public function removeExplodedPosition($order_id, $pos_id)
- {
- if($order_id <= 0 || $pos_id <= 0)
- {
- return;
- }
- $pos_arr = $this->app->DB->SelectArr(
- sprintf(
- 'SELECT id FROM auftrag_position WHERE auftrag = %d AND explodiert_parent = %d',
- (int)$order_id, (int)$pos_id
- )
- );
- if(empty($pos_arr))
- {
- return;
- }
- foreach($pos_arr as $position)
- {
- $this->DelAuftragStueckliste($order_id, $position['id']);
- $this->app->YUI->SortListEvent('del','auftrag_position','auftrag',$order_id, $position['id']);
- $this->removeExplodedPosition($order_id, $pos_id);
- }
- }
-
-}
+app->erp->GetKonfiguration('auftraege_projectsearchdisabled');
+ if($projectsearchdisabled==='') {
+ $projectsearchdisabled = ($this->app->DB->Select('SELECT COUNT(id) FROM auftrag') >= 100000)?1:0;
+ $this->app->erp->SetKonfigurationValue('auftraege_projectsearchdisabled', $projectsearchdisabled);
+ }
+ $projectCol = 'p.abkuerzung';
+ $useAddr = true;
+ if($projectsearchdisabled) {
+ $projectCol = '(SELECT LEFT(UPPER(abkuerzung),10) FROM projekt WHERE id = a.projekt)';
+ if(!$this->app->erp->Firmendaten('adresse_freitext1_suche')) {
+ $useAddr = false;
+ }
+ }
+ $projectColSql = $projectCol.' AS projektabkuerung';
+
+ $rowcallback_gt = 1;
+ $auftragmarkierenegsaldo = $this->app->erp->Firmendaten('auftragmarkierenegsaldo');
+ // START EXTRA checkboxen
+ $this->app->Tpl->Add('JQUERYREADY', "$('#artikellager').click( function() { fnFilterColumn1( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#ustpruefung').click( function() { fnFilterColumn2( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#zahlungseingang').click( function() { fnFilterColumn3( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#zahlungseingangfehlt').click( function() { fnFilterColumn5( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#manuellepruefung').click( function() { fnFilterColumn4( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#ohnerechnung').click( function() { fnFilterColumn10( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#auftragheute').click( function() { fnFilterColumn6( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#auftragoffene').click( function() { fnFilterColumn7( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#auftragstornierte').click( function() { fnFilterColumn8( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#auftragabgeschlossene').click( function() { fnFilterColumn9( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#teillieferung').click( function() { fnFilterColumn11( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#portofehlt').click( function() { fnFilterColumn12( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#teilzahlung').click( function() { fnFilterColumn13( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#autoversandfehlt').click( function() { fnFilterColumn14( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#autoversandok').click( function() { fnFilterColumn15( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#fastlanea').click( function() { fnFilterColumn16( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#tolate').click( function() { fnFilterColumn17( 0 ); } );");
+ // $this->app->Tpl->Add('JQUERYREADY',"$('#artikellager').click( function() { oTable".$name.".fnDraw(); } );");
+ for ($r = 1;$r < 18;$r++) {
+ $this->app->Tpl->Add('JAVASCRIPT', '
+ function fnFilterColumn' . $r . ' ( i )
+ {
+ if(oMoreData' . $r . $name . '==1)
+ oMoreData' . $r . $name . ' = 0;
+ else
+ oMoreData' . $r . $name . ' = 1;
+
+ $(\'#' . $name . '\').dataTable().fnFilter(
+ \'\',
+ i,
+ 0,0
+ );
+ }
+ ');
+ }
+
+ // ENDE EXTRA checkboxen
+
+ // headings
+
+ $zusatzcols = array();
+ $auftragzusatzfelder = $this->app->erp->getZusatzfelderAuftrag();
+
+ $heading = array('','', 'Auftrag', 'Vom', 'Kd-Nr.', 'Kunde', 'Land', 'Projekt', 'Zahlung', 'Betrag (brutto)');
+ $width = array('1%','1%', '10%', '10%', '10%', '31%', '5%', '1%', '1%', '1%', '1%', '1%');
+ $findcols = array('open','a.belegnr', 'a.belegnr', 'a.datum'
+ ,$useAddr? 'if(a.lieferantenauftrag=1,adr.lieferantennummer,adr.kundennummer)':'a.lieferantkdrnummer',
+ 'a.name', 'a.land',
+ //'p.abkuerzung',
+ $projectCol,
+ 'a.zahlungsweise', 'a.gesamtsumme');
+ $searchsql = array('DATE_FORMAT(a.datum,\'%d.%m.%Y\')', 'a.belegnr', 'a.ihrebestellnummer','a.transaktionsnummer',
+ 'a.internet', "a.lieferantkdrnummer", 'a.name', 'a.land', 'a.zahlungsweise', 'a.status', $app->erp->FormatPreis('a.gesamtsumme',2),
+ //'adr.freifeld1',
+ 'a.internebezeichnung'
+ );
+ if($useAddr) {
+ $searchsql[] = 'adr.freifeld1';
+ }
+ if(!$projectsearchdisabled) {
+ $searchsql[] = $projectCol;
+ }
+ $alignright = array('10');
+ $defaultorder = 13; //Optional wenn andere Reihenfolge gewuenscht
+ $hide767 = array('5');
+ $defaultorderdesc = 1;
+
+ if($this->app->erp->RechteVorhanden('auftrag','summe')){
+ $sumcol = array(10);
+ }
+ $menu = "";
+
+ $menucol = 11;
+ for($i = 1; $i <= 5; $i++) {
+ $zusatzfeld = $this->app->erp->Firmendaten('auftragtabellezusatz' . $i);
+ if($zusatzfeld && isset($auftragzusatzfelder[$zusatzfeld])){
+ $defaultorder++;
+ $menucol++;
+ $heading[] = $auftragzusatzfelder[$zusatzfeld];
+ $width[] = '10%';
+ $findcols[] = 'a.'.$zusatzfeld;
+ switch($zusatzfeld)
+ {
+ case 'umsatz_netto':
+ $searchsql[] = $app->erp->FormatPreis($zusatzfeld, 2);
+ $zusatzcols[] = $app->erp->FormatPreis($zusatzfeld,2);
+ $numbercols[] = array_search('a.'.$zusatzfeld, $findcols);
+ $sumcol[] = array_search('a.'.$zusatzfeld, $findcols)+1;
+ $alignright[] = array_search('a.'.$zusatzfeld, $findcols)+1;
+ break;
+ case 'tatsaechlicheslieferdatum':
+ case 'lieferdatum':
+ $searchsql[] = 'IF(a.'.$zusatzfeld.'!="0000-00-00", DATE_FORMAT(a.'.$zusatzfeld.",'%d.%m.%Y'), '')";
+ $zusatzcols[] = 'IF(a.'.$zusatzfeld.'!="0000-00-00", DATE_FORMAT(a.'.$zusatzfeld.",'%d.%m.%Y'), '')";
+ $datecols[] = array_search('a.'.$zusatzfeld, $findcols);
+
+ break;
+ default:
+ $searchsql[] = 'a.'.$zusatzfeld;
+ $zusatzcols[] = 'a.'.$zusatzfeld;
+ }
+ }
+ }
+ $findcols[] = 'a.status';
+
+ $width[] = '1%';
+ $width[] = '1%';
+ $findcols[] = 'a.status';
+ $findcols[] = 'a.id';
+ $findcols[] = 'a.id';
+ $heading[] = 'Monitor';
+ $heading[] = 'Menü';
+
+ $parameter = $this->app->User->GetParameter('table_filter_auftrag');
+ $parameter = base64_decode($parameter);
+ $parameter = json_decode($parameter, true);
+
+ $sql = "";
+ $sql .=
+ "SELECT SQL_CALC_FOUND_ROWS
+ a.id,
+ ' app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`,
+ CONCAT(' ') AS `auswahl`,
+ CONCAT(
+ IF(a.status = 'angelegt','ENTWURF',a.belegnr),
+ IF(
+ a.projektfiliale > 0 OR a.fastlane = 1,
+ CONCAT(
+ ' (',
+ IF(a.projektfiliale > 0,'F',''),
+ IF(
+ a.fastlane = 1,
+ IF(a.projektfiliale > 0,',FL','FL'),
+ ''
+ ),
+ ')'
+ ),
+ ''
+ )
+ ) AS `auftrag`,
+ DATE_FORMAT(a.datum,'%d.%m.%Y') AS `vom`,
+ a.lieferantkdrnummer AS `kunde`,
+ CONCAT(
+ " . $this->app->erp->MarkerUseredit("a.name", "a.useredittimestamp") . ",
+ IF(
+ a.internebemerkung = '',
+ '',
+ ' * '
+ ),
+ IF(
+ a.freitext = '',
+ '',
+ ' * '
+ ),
+ IF(
+ a.internebezeichnung != '',
+ CONCAT(
+ '',
+ a.internebezeichnung,
+ ' '
+ ),
+ ''
+ ),
+ IF(
+ a.abweichendelieferadresse = 1,
+ CONCAT(
+ 'Abw. Lieferadr.: ',
+ a.liefername,', ',
+ a.lieferstrasse,', ',
+ a.lieferland,'-',
+ a.lieferplz,' ',
+ a.lieferort,
+ ' '
+ ),
+ ''
+ )
+ ) AS `name`,
+ a.land AS `land`,
+ $projectColSql,
+ ".(
+ $auftragmarkierenegsaldo ?
+ "CONCAT(
+ ''," :
+ ''
+ )."
+ a.zahlungsweise".($auftragmarkierenegsaldo?",'')":"")." AS `zahlungsweise`,
+ ".$app->erp->FormatPreis('a.gesamtsumme',2)." AS `betrag`,
+ ".(!empty($zusatzcols)?implode(', ',$zusatzcols).',':'')."
+ (" . $this->app->YUI->IconsSQL() . ") AS icons,
+ a.id
+ FROM `auftrag` AS `a` ";
+
+ if($useAddr) {
+ $sql .= ' LEFT JOIN `adresse` AS `adr` ON a.adresse = adr.id ';
+ }
+
+ if(!$projectsearchdisabled) {
+ $sql .= ' LEFT JOIN `projekt` AS `p` ON p.id = a.projekt ';
+ }
+
+ if(isset($parameter['artikel']) && !empty($parameter['artikel'])) {
+ $artikelid = $this->app->DB->Select("SELECT id FROM artikel where geloescht != 1 AND nummer != 'DEL' AND nummer != '' AND nummer = '".$this->app->DB->real_escape_string(reset(explode(' ',trim($parameter['artikel']))))."' LIMIT 1");
+ if($artikelid) {
+ $sql .= sprintf(
+ ' INNER JOIN `auftrag_position` AS `ap` ON a.id = ap.auftrag AND ap.artikel = %d ',
+ $artikelid
+ );
+ $groupby = ' GROUP BY a.id ';
+ }
+ }
+
+ // Fester filter
+
+ // START EXTRA more
+
+ $more_data1 = $this->app->Secure->GetGET("more_data1");
+
+ if ($more_data1 == 1) $subwhere[] = " a.lager_ok=0 ";
+ $more_data2 = $this->app->Secure->GetGET("more_data2");
+
+ if ($more_data2 == 1) $subwhere[] = " a.ust_ok=0 ";
+
+ $more_data3 = $this->app->Secure->GetGET("more_data3");
+ if ($more_data3 == 1) $subwhere[] = " a.vorkasse_ok=1 ";
+
+ $more_data13 = $this->app->Secure->GetGET("more_data13");
+ if ($more_data13 == 1) $subwhere[] = " a.vorkasse_ok=2 ";
+
+
+
+ //$more_data4 = $this->app->Secure->GetGET("more_data4"); if($more_data4==1) $subwhere[] = " a.check_ok=0 ";
+ $more_data4 = $this->app->Secure->GetGET("more_data4");
+
+ if ($more_data4 == 1) $subwhere[] = " (a.check_ok=0 OR a.liefersperre_ok=0 OR a.kreditlimit_ok='0') ";
+ $more_data5 = $this->app->Secure->GetGET("more_data5");
+
+ if ($more_data5 == 1) $subwhere[] = " a.vorkasse_ok=0 ";
+ $more_data6 = $this->app->Secure->GetGET("more_data6");
+
+ if ($more_data6 == 1) {
+ $subwhere[] = " a.datum=CURDATE() ";
+ $ignore = true;
+ }
+ $more_data7 = $this->app->Secure->GetGET("more_data7");
+
+ if ($more_data7 == 1) {
+ $subwherestatus[] = " a.status='freigegeben' ";
+ $ignore = true;
+ }
+
+ $more_data8 = $this->app->Secure->GetGET("more_data8");
+
+ if ($more_data8 == 1) {
+ $subwherestatus[] = " a.status='storniert' ";
+ $ignore = true;
+ }
+ $more_data9 = $this->app->Secure->GetGET("more_data9");
+
+ if ($more_data9 == 1) {
+ $subwherestatus[] = " a.status='abgeschlossen' ";
+ $ignore = true;
+ }
+ $more_data10 = $this->app->Secure->GetGET("more_data10");
+
+ if ($more_data10 == 1) {
+ $subwhere[] = " (SELECT COUNT(r.id) FROM rechnung r WHERE r.auftragid=a.id) <= 0
+ AND (SELECT count(sp1.id) FROM sammelrechnung_position sp1 INNER JOIN auftrag_position ap1 ON sp1.auftrag_position_id = ap1.id WHERE ap1.auftrag = a.id) <= 0
+ AND (SELECT count(sp1.id) FROM sammelrechnung_position sp1 INNER JOIN lieferschein_position lsp1 ON sp1.lieferschein_position_id = lsp1.id INNER JOIN auftrag_position ap1 ON ap1.id = lsp1.auftrag_position_id WHERE ap1.auftrag = a.id) <= 0
+ AND (SELECT COUNT(l.id) FROM lieferschein l WHERE l.auftragid = a.id AND l.keinerechnung = 1) <= 0
+ AND a.gesamtsumme > 0 AND ifnull(a.rechnungid,0) = 0 ";
+ $ignore = true;
+ }
+ $more_data11 = $this->app->Secure->GetGET("more_data11");
+
+ if ($more_data11 == 1) {
+ $subwhere[] = " a.teillieferung_moeglich='1' ";
+ }
+ $more_data12 = $this->app->Secure->GetGET("more_data12");
+
+ if ($more_data12 == 1) {
+ $subwhere[] = " a.porto_ok=0 ";
+ }
+
+ $more_data14 = $this->app->Secure->GetGET("more_data14");
+ if ($more_data14 == 1) {
+ $subwhere[] = " a.autoversand=0 ";
+ }
+
+ $more_data15 = $this->app->Secure->GetGET("more_data15");
+ if ($more_data15 == 1) {
+ $subwhere[] = " a.autoversand=1 ";
+ }
+
+ $more_data16 = $this->app->Secure->GetGET("more_data16");
+ if ($more_data16 == 1) {
+ $subwhere[] = " a.fastlane=1 ";
+ }
+
+ $more_data17 = $this->app->Secure->GetGET("more_data17");
+ if ($more_data17 == 1) {
+ /*$subwhere[] = "
+ (
+ (
+ (a.datum < DATE_SUB(NOW(), INTERVAL 1 DAY))
+ OR (a.lieferdatum < DATE_SUB(NOW(), INTERVAL 1 DAY) AND a.lieferdatum!='0000-00-00') OR
+ (a.tatsaechlicheslieferdatum < DATE_SUB(NOW(), INTERVAL 1 DAY) AND a.tatsaechlicheslieferdatum!='0000-00-00')
+ )
+ AND a.status='freigegeben'
+
+ )";*/
+
+ $subwhere[] =
+ "(
+ (
+ (a.datum < DATE_SUB(NOW(), INTERVAL 1 DAY))
+ OR (a.lieferdatum < DATE_SUB(NOW(), INTERVAL 1 DAY) AND a.lieferdatum!='0000-00-00')
+ OR (a.tatsaechlicheslieferdatum < DATE_SUB(NOW(), INTERVAL 1 DAY) AND a.tatsaechlicheslieferdatum!='0000-00-00')
+ )
+ AND a.status='freigegeben'
+ AND NOT (
+ IFNULL(a.tatsaechlicheslieferdatum,'0000-00-00')!='0000-00-00' AND a.tatsaechlicheslieferdatum >= CURDATE()
+ )
+ AND NOT (
+ IFNULL(a.tatsaechlicheslieferdatum,'0000-00-00')='0000-00-00' AND
+ IFNULL(a.lieferdatum,'0000-00-00')!='0000-00-00' AND a.lieferdatum >= CURDATE()
+ )
+ )";
+ }
+
+
+
+ $tmp = '';
+ if(!empty($subwhere)) {
+ foreach($subwhere as $s) {
+ $tmp .= ' AND '.$s;
+ }
+ }
+
+ if(!empty($subwherestatus)){
+ $tmp .= " AND (".implode(" OR ", $subwherestatus).")";
+ }
+
+ if ($tmp != "" && !$ignore) $tmp.= " AND a.status='freigegeben' ";
+
+ // ENDE EXTRA more
+ $where = " a.id!='' $tmp " . $this->app->erp->ProjektRechte('a.projekt', true, 'a.vertriebid');
+
+ /* STAMMDATEN */
+ if(isset($parameter['kundennummer']) && !empty($parameter['kundennummer'])) {
+ if(!$useAddr) {
+ $sql .= ' LEFT JOIN adresse adr ON a.adresse=adr.id ';
+ $useAddr = true;
+ }
+ $paramsArray[] = " (a.kundennummer LIKE '%".$parameter['kundennummer']."%' OR adr.kundennummer LIKE '%".$parameter['kundennummer']."%') ";
+ }
+
+ if(isset($parameter['kundengruppe']) && !empty($parameter['kundengruppe'])){
+ $gruppenId = $this->app->DB->Select("SELECT id FROM gruppen WHERE kennziffer LIKE '%".$parameter['kundengruppe']."%' LIMIT 1");
+ $sql .= ' LEFT JOIN adresse_rolle ar ON a.adresse = ar.adresse ';
+ $paramsArray[] = " ( ar.subjekt LIKE 'Mitglied' AND ar.objekt LIKE 'Gruppe' AND ar.parameter = '$gruppenId')";
+ }
+
+
+ if(isset($parameter['name']) && !empty($parameter['name'])) {
+ $paramsArray[] = "a.name LIKE '%".$parameter['name']."%' ";
+ }
+
+ if(isset($parameter['ansprechpartner']) && !empty($parameter['ansprechpartner'])) {
+ $paramsArray[] = "a.ansprechpartner LIKE '%".$parameter['ansprechpartner']."%' ";
+ }
+
+ if(isset($parameter['abteilung']) && !empty($parameter['abteilung'])) {
+ $paramsArray[] = "a.abteilung LIKE '%".$parameter['abteilung']."%' ";
+ }
+
+ if(isset($parameter['strasse']) && !empty($parameter['strasse'])) {
+ $paramsArray[] = "a.strasse LIKE '%".$parameter['strasse']."%' ";
+ }
+
+ if(isset($parameter['plz']) && !empty($parameter['plz'])) {
+ $paramsArray[] = "a.plz LIKE '".$parameter['plz']."%'";
+ }
+
+ if(isset($parameter['ort']) && !empty($parameter['ort'])) {
+ $paramsArray[] = "a.ort LIKE '%".$parameter['ort']."%' ";
+ }
+
+ if(isset($parameter['land']) && !empty($parameter['land'])) {
+ $paramsArray[] = "a.land LIKE '%".$parameter['land']."%' ";
+ }
+
+ if(isset($parameter['ustid']) && !empty($parameter['ustid'])) {
+ $paramsArray[] = "a.ustid LIKE '%".$parameter['ustid']."%' ";
+ }
+
+ if(isset($parameter['telefon']) && !empty($parameter['telefon'])) {
+ $paramsArray[] = "a.telefon LIKE '%".$parameter['telefon']."%' ";
+ }
+
+ if(isset($parameter['email']) && !empty($parameter['email'])) {
+ $paramsArray[] = "a.email LIKE '%".$parameter['email']."%' ";
+ }
+
+ if(isset($parameter['datumVon']) && !empty($parameter['datumVon'])) {
+ $paramsArray[] = "a.datum >= '" . date('Y-m-d',strtotime($parameter['datumVon']))."' ";
+ }
+
+ if(isset($parameter['datumBis']) && !empty($parameter['datumBis'])) {
+ $paramsArray[] = "a.datum <= '" . date('Y-m-d',strtotime($parameter['datumBis']))."' ";
+ }
+
+ if(isset($parameter['projekt']) && !empty($parameter['projekt'])) {
+
+ $projektData = $this->app->DB->SelectRow('
+ SELECT
+ *
+ FROM
+ projekt
+ WHERE
+ abkuerzung LIKE "' . $parameter['projekt'] . '"
+ ');
+ $paramsArray[] = "a.projekt = '".$projektData['id']."' ";
+ }
+
+ if(isset($parameter['belegnummer']) && !empty($parameter['belegnummer'])) {
+ $paramsArray[] = "a.belegnr LIKE '".$parameter['belegnummer']."' ";
+ }
+
+ if(isset($parameter['internebemerkung']) && !empty($parameter['internebemerkung'])) {
+ $paramsArray[] = "a.internebemerkung LIKE '%".$parameter['internebemerkung']."%' ";
+ }
+
+ if(isset($parameter['aktion']) && !empty($parameter['aktion'])) {
+ $paramsArray[] = "a.aktion LIKE '%".$parameter['aktion']."%' ";
+ }
+
+ if(isset($parameter['transaktionsnummer']) && !empty($parameter['transaktionsnummer'])) {
+ $paramsArray[] = "a.transaktionsnummer LIKE '%".$parameter['transaktionsnummer']."%' ";
+ }
+
+ if(isset($parameter['freitext']) && !empty($parameter['freitext'])) {
+ $paramsArray[] = "a.freitext LIKE '%".$parameter['freitext']."%' ";
+ }
+
+ if(isset($parameter['zahlungsweise']) && !empty($parameter['zahlungsweise'])) {
+ $paramsArray[] = "a.zahlungsweise LIKE '%".$parameter['zahlungsweise']."%' ";
+ }
+
+ if(isset($parameter['status']) && !empty($parameter['status'])) {
+ $paramsArray[] = "a.status LIKE '%".$parameter['status']."%' ";
+ }
+
+ if(isset($parameter['versandart']) && !empty($parameter['versandart'])) {
+ $paramsArray[] = "a.versandart LIKE '%".$parameter['versandart']."%' ";
+ }
+
+ if(isset($parameter['betragVon']) && !empty($parameter['betragVon'])) {
+ $paramsArray[] = "a.gesamtsumme >= '" . $parameter['betragVon'] . "' ";
+ }
+
+ if(isset($parameter['betragBis']) && !empty($parameter['betragBis'])) {
+ $paramsArray[] = "a.gesamtsumme <= '" . $parameter['betragBis'] . "' ";
+ }
+ // projekt, belegnummer, internetnummer, bestellnummer, transaktionsId, freitext, internebemerkung, aktionscodes
+
+ if ($paramsArray) {
+ $where .= ' AND ' . implode(' AND ', $paramsArray);
+ }
+
+ $this->app->erp->RunHook('auftraege_tablesearch', 2, $sql, $where);
+ // gesamt anzahl
+ $count = "SELECT COUNT(a.id) FROM auftrag a ";
+ $moreinfo = true; // EXTRA
+
+ break;
+ case 'auftraegeoffeneauto':
+
+ $allowed['auftraegeoffeneauto'] = array('list');
+
+ $heading = array('','', 'Auftrag', 'Vom', 'Kd-Nr.', 'Kunde','Lieferdatum', 'Land', 'Zahlung', 'Betrag (brutto)','Monitor','Menü');
+ $width = array('1%','1%','1%', '10%', '10%', '10%', '31%', '5%', '1%', '1%', '1%', '1%');
+ $findcols = array('open','a.belegnr', 'a.belegnr', 'a.datum', 'a.lieferantkdrnummer', 'a.name','a.tatsaechlicheslieferdatum', 'a.land', 'a.zahlungsweise', 'a.gesamtsumme');
+
+ $defaultorder = 1;
+ $defaultorderdesc = 0;
+
+ $menu = "";
+
+ $sql = "SELECT
+ a.id,
+ ' app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`,
+ CONCAT(' ') AS `auswahl`,
+ IF(a.fastlane=1,CONCAT(a.belegnr,' (FL)'),a.belegnr) AS `belegnr`,
+ DATE_FORMAT(a.datum,'%d.%m.%Y') AS `datum`,
+ lieferantkdrnummer,
+ name,
+ DATE_FORMAT(a.tatsaechlicheslieferdatum,'%d.%m.%Y') as `tatsaechlicheslieferdatum`,
+ land,
+ zahlungsweise,
+ gesamtsumme,
+ (" . $this->app->YUI->IconsSQL() . ") AS icons,
+ a.id
+ FROM
+ auftrag a";
+
+ $where = "a.status = 'freigegeben' AND a.cronjobkommissionierung = 0 AND a.lager_ok=1 AND a.porto_ok=1 AND a.ust_ok=1 AND a.vorkasse_ok=1 AND a.nachnahme_ok=1 AND a.autoversand=1 AND a.check_ok=1 AND a.kreditlimit_ok=1 AND a.liefersperre_ok=1"; // liefertermin_ok special treatment
+
+ $count = "SELECT count(DISTINCT id) FROM auftrag a WHERE $where";
+
+// $groupby = "";
+
+ $moreinfo = true; // Allow drop down details
+
+ // Toggle filters
+ $this->app->Tpl->Add('JQUERYREADY', "$('#fastlane').click( function() { fnFilterColumn1( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#auftrag_kundemehrereauftraege').click( function() { fnFilterColumn2( 0 ); } );");
+ $this->app->Tpl->Add('JQUERYREADY', "$('#auftrag_lieferdatum').click( function() { fnFilterColumn3( 0 ); } );");
+
+ for ($r = 1;$r <= 3;$r++) {
+ $this->app->Tpl->Add('JAVASCRIPT', '
+ function fnFilterColumn' . $r . ' ( i )
+ {
+ if(oMoreData' . $r . $name . '==1)
+ oMoreData' . $r . $name . ' = 0;
+ else
+ oMoreData' . $r . $name . ' = 1;
+
+ $(\'#' . $name . '\').dataTable().fnFilter(
+ \'\',
+ i,
+ 0,0
+ );
+ }
+ ');
+ }
+
+ $more_data1 = $this->app->Secure->GetGET("more_data1");
+
+ if ($more_data1 == 1) {
+ $where .= " AND a.fastlane=1";
+ } else {
+ }
+
+ $more_data3 = $this->app->Secure->GetGET("more_data3");
+ if ($more_data3 == 1) {
+ }
+ else {
+ $where .= " AND a.liefertermin_ok=1";
+ }
+
+ $more_data2 = $this->app->Secure->GetGET("more_data2");
+ if ($more_data2 == 1) $where .= " AND a.adresse in (SELECT adresse FROM `auftrag` a WHERE ".$where." GROUP BY adresse HAVING count(id) > 1)"; // More than 1 order per address
+
+ // END Toggle filters
+
+ $menu .= "";
+ $menu .= " app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
+ $menu .= " ";
+
+ $moreinfo = true; // Minidetail active
+ $menucol = 9; // For minidetail
+
+ break;
+ case 'auftraegeoffeneautowartend':
+
+ // Show list for cronjob commissioning
+ $allowed['auftraegeoffeneautowartend'] = array('list');
+
+ $heading = array('','', 'Auftrag', 'Vom', 'Kd-Nr.', 'Kunde','Lieferdatum', 'Land', 'Zahlung', 'Betrag (brutto)','Monitor','Menü');
+ $width = array('1%','1%','1%', '10%', '10%', '10%', '31%', '5%', '1%', '1%', '1%', '1%', '1%','0%','0%');
+ $findcols = array('open','a.belegnr', 'a.belegnr', 'a.datum', 'a.lieferantkdrnummer', 'a.name','a.tatsaechlicheslieferdatum', 'a.land', 'a.zahlungsweise', 'a.gesamtsumme');
+
+ $defaultorder = 1;
+ $defaultorderdesc = 0;
+
+ $menu = "";
+
+ $sql = "SELECT
+ a.id,
+ ' app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`,
+ CONCAT(' ') AS `auswahl`,
+ IF(a.fastlane=1,CONCAT(a.belegnr,' (FL)'),a.belegnr) AS `belegnr`,
+ DATE_FORMAT(a.datum,'%d.%m.%Y') AS `datum`,
+ lieferantkdrnummer,
+ name,
+ DATE_FORMAT(a.tatsaechlicheslieferdatum,'%d.%m.%Y') as `tatsaechlicheslieferdatum`,
+ land,
+ zahlungsweise,
+ gesamtsumme,
+ (" . $this->app->YUI->IconsSQL() . ") AS icons,
+ a.id
+ FROM
+ auftrag a";
+
+ $status_where = 'a.cronjobkommissionierung > 0';
+
+ $where = "a.status = 'freigegeben' AND ".$status_where;
+// $groupby = "";
+
+ $moreinfo = true; // Allow drop down details
+
+ $count = "SELECT count(DISTINCT id) FROM auftrag a WHERE $where";
+
+ $menu .= "";
+ $menu .= " app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
+ $menu .= " ";
+ $menucol = 9; // For moredata
+
+
+ break;
+
+ }
+ $erg = [];
+ foreach($erlaubtevars as $k => $v) {
+ if(isset($$v)) {
+ $erg[$v] = $$v;
+ }
+ }
+
+ return $erg;
+ }
+
+ /**
+ * Auftrag constructor.
+ *
+ * @param Application $app
+ * @param bool $intern
+ */
+ public function __construct($app, $intern = false)
+ {
+ $this->kommissionierung = false;
+ $this->app=$app;
+ if($intern) {
+ return;
+ }
+
+ $this->app->ActionHandlerInit($this);
+
+ $this->app->ActionHandler("list","AuftragList");
+ $this->app->ActionHandler("create","AuftragCreate");
+ $this->app->ActionHandler("positionen","AuftragPositionen");
+ $this->app->ActionHandler("upauftragposition","UpAuftragPosition");
+ $this->app->ActionHandler("delauftragposition","DelAuftragPosition");
+ $this->app->ActionHandler("copyauftragposition","CopyAuftragPosition");
+ $this->app->ActionHandler("downauftragposition","DownAuftragPosition");
+ $this->app->ActionHandler("positioneneditpopup","AuftragPositionenEditPopup");
+ $this->app->ActionHandler("checkdisplay","AuftragCheckDisplayPopup");
+ $this->app->ActionHandler("edit","AuftragEdit");
+ $this->app->ActionHandler("tracking","AuftragTracking");
+ $this->app->ActionHandler("ausversand","AuftragDeleteAusVersand");
+ $this->app->ActionHandler("search","AuftragSuche");
+ $this->app->ActionHandler("ean","AuftragEAN");
+ $this->app->ActionHandler("versandzentrum","AuftragVersandzentrum");
+ $this->app->ActionHandler("uststart","AuftragUstStart");
+ $this->app->ActionHandler("delete","AuftragDelete");
+ $this->app->ActionHandler("undelete","AuftragUndelete");
+ $this->app->ActionHandler("anfrage","AuftragAnfrage");
+ $this->app->ActionHandler("abschluss","AuftragAbschluss");
+ $this->app->ActionHandler("copy","AuftragCopy");
+ $this->app->ActionHandler("zertifikate","AuftragZertifikate");
+ $this->app->ActionHandler("verfuegbar","AuftragVerfuegbar");
+ $this->app->ActionHandler("rechnung","AuftragRechnung");
+ $this->app->ActionHandler("lieferschein","AuftragLieferschein");
+ $this->app->ActionHandler("lieferscheinrechnung","AuftragLieferscheinRechnung");
+
+ $this->app->ActionHandler("nachlieferung","AuftragNachlieferung");
+ // $this->app->ActionHandler("versand","AuftragVersand");
+ $this->app->ActionHandler("freigabe","AuftragFreigabe");
+ $this->app->ActionHandler("abschicken","AuftragAbschicken");
+ $this->app->ActionHandler("pdf","AuftragPDF");
+ $this->app->ActionHandler("inlinepdf","AuftragInlinePDF");
+ $this->app->ActionHandler("proforma","AuftragProforma");
+ $this->app->ActionHandler("versand","AuftragVersand");
+ $this->app->ActionHandler("zahlungsmail","AuftragZahlungsmail");
+ $this->app->ActionHandler("reservieren","AuftragReservieren");
+ $this->app->ActionHandler("nachlieferung","AuftragNachlieferung");
+ $this->app->ActionHandler("protokoll","AuftragProtokoll");
+ $this->app->ActionHandler("minidetail","AuftragMiniDetail");
+ $this->app->ActionHandler("editable","AuftragEditable");
+ $this->app->ActionHandler("dateien","AuftragDateien");
+ $this->app->ActionHandler("livetabelle","AuftragLiveTabelle");
+ $this->app->ActionHandler("zahlungsmahnungswesen","AuftragZahlungMahnungswesen");
+ $this->app->ActionHandler("schreibschutz","AuftragSchreibschutz");
+ $this->app->ActionHandler("shopexport","AuftragShopexport");
+ $this->app->ActionHandler("deleterabatte","AuftragDeleteRabatte");
+ $this->app->ActionHandler("kreditlimit","AuftragKreditlimit");
+ $this->app->ActionHandler("updateverband","AuftragUpdateVerband");
+ $this->app->ActionHandler("pdffromarchive","AuftragPDFfromArchiv");
+
+ $this->app->ActionHandler("archivierepdf", "AuftragArchivierePDF");
+ $this->app->ActionHandler("paypal", "AuftragPaypal");
+ $this->app->ActionHandler("summe","AuftragSumme"); // nur fuer rechte
+ $this->app->ActionHandler("einkaufspreise", "AuftragEinkaufspreise");
+ $this->app->ActionHandler("alsfreigegeben", "AuftragAlsfreigegeben");
+ $this->app->ActionHandler("steuer", "AuftragSteuer");
+ $this->app->ActionHandler("berechnen", "Auftraegeberechnen");
+
+ $this->app->DefaultActionHandler("list");
+
+ $id = $this->app->Secure->GetGET('id');
+ $nummer = $this->app->Secure->GetPOST('adresse');
+ $name = '';
+ $belegnr = '';
+ $abweichendebezeichnung = 0;
+ if($id > 0) {
+ $abArr = $this->app->DB->SelectRow("SELECT b.belegnr, a.name,b.abweichendebezeichnung FROM auftrag b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
+ if(!empty($abArr)) {
+ $name = $abArr['name'];
+ $belegnr = $abArr['belegnr'];
+ $abweichendebezeichnung = $abArr['abweichendebezeichnung'];
+ }
+ }
+ if($nummer==''){
+ $adresse = $name;
+ }
+ else{
+ $adresse = $nummer;
+ }
+
+ $nummer = $belegnr;
+ if($nummer=='' || $nummer=='0') {
+ $nummer='ohne Nummer';
+ }
+
+ $this->app->Tpl->Set('UEBERSCHRIFT','Auftrag: '.$adresse.' ('.$nummer.')');
+ $this->app->Tpl->Set('FARBE','[FARBE2]');
+
+ if($abweichendebezeichnung){
+ $this->app->Tpl->Set('BEZEICHNUNGTITEL', $this->app->erp->Firmendaten('bezeichnungauftragersatz'));
+ }
+ else{
+ $this->app->Tpl->Set('BEZEICHNUNGTITEL', 'Auftrag');
+ }
+
+ $this->app->erp->Headlines('Auftrag');
+
+ $this->app->ActionHandlerListen($app);
+ }
+
+ public function Install()
+ {
+ $this->app->erp->RegisterHook('supersearch_detail', 'auftrag', 'AuftragSupersearchDetail');
+ }
+
+ /**
+ * @param \Xentral\Widgets\SuperSearch\Query\DetailQuery $detailQuery
+ * @param \Xentral\Widgets\SuperSearch\Result\ResultDetail $detailResult
+ *
+ * @return void
+ */
+ public function AuftragSupersearchDetail($detailQuery, $detailResult)
+ {
+ if ($detailQuery->getGroupKey() !== 'orders') {
+ return;
+ }
+
+ $auftragId = $detailQuery->getItemIdentifier();
+ $sql = sprintf(
+ "SELECT a.id, a.belegnr, a.datum FROM `auftrag` AS `a` WHERE a.id = '%s' LIMIT 1",
+ $this->app->DB->real_escape_string($auftragId)
+ );
+ $auftrag = $this->app->DB->SelectRow($sql);
+ if (empty($auftrag)) {
+ return;
+ }
+
+ $datum = date('d.m.Y', strtotime($auftrag['datum']));
+ $detailResult->setTitle(sprintf('Auftrag %s vom %s ', $auftrag['belegnr'], $datum));
+ $detailResult->addButton('Auftrag Details', sprintf('index.php?module=auftrag&action=edit&id=%s', $auftrag['id']));
+ $detailResult->setMiniDetailUrl(sprintf('index.php?module=auftrag&action=minidetail&id=%s', $auftrag['id']));
+ }
+
+ function AuftragAARLGPositionen_aktion($module, $id, &$aktionoptionen, &$aktionjs)
+ {
+ if($module !== 'auftrag') {
+ return;
+ }
+ $aktionoptionen .= "als Lieferschein weiterführen ";
+ $aktionjs .= '
+ if(wert == \'delivery\')
+ {
+ var parameter = \'\';
+ var ok = false;
+ $(checkboxen).each(function(){
+ if(parameter != \'\')parameter += \',\';
+ if($(this).attr(\'name\') == \'belegsort[]\')
+ {
+ parameter += \'b\'+$(this).val();
+ ok = true;
+ }else{
+ parameter += \'z\'+$(this).val();
+ }
+ });
+ if(ok)
+ {
+ if(confirm(\'{|Wirklich als Lieferschein weiterführen?|}\'))
+ {
+ window.location.href=\'index.php?module=auftrag&action=lieferschein&id='.$id.'&posids=\'+parameter;
+ }else{
+ $(el).val(\'\');
+ }
+ }else{
+ $(el).val(\'\');
+ alert(\'Bitte einen Artikel auswählen\');
+ }
+ }
+ ';
+
+ }
+
+ function AuftragSteuer()
+ {
+
+ }
+
+ function AuftragEinkaufspreise()
+ {
+
+ }
+
+ function AuftragSumme()
+ {
+ }
+
+ function AuftragArchivierePDF()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' LIMIT 1");
+ $this->app->erp->BriefpapierHintergrunddisable = !$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();
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$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(1);
+ $this->app->DB->Update("UPDATE auftrag SET schreibschutz='1' WHERE id='$id'");
+ unlink($tmpfile);
+ $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id);
+ }
+
+ function AuftragPaypal()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ if($id)
+ {
+ $erg = $this->app->erp->SendPaypalFromAuftrag($id);
+ if($erg === false)
+ {
+ $msg = $this->app->erp->base64_url_encode('Es ist ein Fehler aufgetreten
');
+ }else if(isset($erg['error']))
+ {
+ $msg = $this->app->erp->base64_url_encode(''.$erg['error'].'
');
+
+ }else{
+ $msg = $this->app->erp->base64_url_encode('Anfrage gesendet
');
+ }
+ }else{
+ $msg = $this->app->erp->base64_url_encode('Kein Auftrag
');
+ }
+ header('Location: index.php?module=auftrag&action=edit&id='.$id.'&msg='.$msg);
+ }
+
+ function AuftragEAN()
+ {
+ $id=$this->app->Secure->GetGET('id');
+ $scanner=$this->app->Secure->GetPOST('scanner');
+ $menge=$this->app->Secure->GetPOST('menge');
+ $posAdd = $this->app->Secure->GetPOST('posadd');
+ $posDel = $this->app->Secure->GetPost('posdel');
+ $sumposition = $this->app->Secure->GetPOST('sumposition');
+ /** @var ScanArticleService $scanArticleService */
+ $scanArticleService = $this->app->Container->get('ScanArticleService');
+
+
+ $this->AuftragMenu();
+ $schreibschutz = $this->app->DB->Select(
+ sprintf(
+ 'SELECT `schreibschutz` FROM `auftrag` WHERE `id` = %d LIMIT 1',
+ $id
+ )
+ );
+
+ if($scanner!='' && $schreibschutz!='1') {
+ if(!is_numeric($menge)){
+ $menge=1;
+ }
+ //$adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
+ try{
+ $scanArticleService->writeArticleToSession('auftrag',$scanner,$menge,$id);
+ } catch(ArticleNotFoundException $e){
+ $this->app->Tpl->Set('TAB1',"{|Der Artikel wurde nicht gefunden|}: ".$scanner."
");
+ } catch(InvalidArgumentException $e){
+ $this->app->Tpl->Set('TAB1',"{|Fehler beim Schreiben in die Session|}
");
+ }
+ }
+
+ if($schreibschutz=="1"){
+ $this->app->Tpl->Set('TAB1',"Der Schreibschutz ist aktiviert. Bitte entfernen Sie diesen.
");
+ }
+ else{
+
+ if(!empty($posAdd)){
+ try{
+ if($sumposition) {
+ $scanArticleService->saveSumedPositions('auftrag', $id);
+ }
+ else{
+ $scanArticleService->savePositions('auftrag', $id);
+ }
+ $this->app->Tpl->Set('MESSAGE',"{|Positionen hinzugefügt|}
");
+ } catch(Exception $e){
+ $this->app->Tpl->Set('MESSAGE',"{|Positionen nicht gespeichert|}!
");
+ }
+ }
+
+ if(!empty($posDel)){
+ $scanArticleService->clearAllArticleDataInSession('auftrag');
+ }
+
+ $gescannteArtikel = $scanArticleService->getAllArticleDataFromSession('auftrag');
+ if(!empty($gescannteArtikel)){
+
+ $table = new EasyTable($this->app);
+ $table->headings = ['Artikelnummer','Artikel','Menge','Preis'];
+
+ foreach($gescannteArtikel as $a){
+
+ $row['nummer'] = $a['number'];
+ $row['name'] = $a['name'];
+ $row['menge'] = $a['amount'];
+ $row['preis'] = $a['price'];
+
+ if(!empty($row)){
+ $table->AddRow($row);
+ }
+ }
+ $table->DisplayNew('GESCANNTEARTIKEL','Preis','noAction');
+ $this->app->Tpl->Set('POSITIONENSPEICHERN',' ');
+ }
+
+ $this->app->Tpl->Parse('TAB1','auftrag_ean.tpl');
+ }
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ }
+
+ function AuftragUpdateVerband()
+ {
+ $id=$this->app->Secure->GetGET("id");
+ $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
+ $msg = $this->app->erp->base64_url_encode("Die Verbandsinformation wurde neu geladen!
");
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
+ }
+
+ function AuftragDeleteRabatte()
+ {
+
+ $id=$this->app->Secure->GetGET("id");
+ $this->app->DB->Update("UPDATE auftrag SET rabatt='',rabatt1='',rabatt2='',rabatt3='',rabatt4='',rabatt5='',realrabatt='' WHERE id='$id' LIMIT 1");
+ $msg = $this->app->erp->base64_url_encode("Die Rabatte wurden entfernt!
");
+ $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id.'&msg='.$msg);
+ }
+
+ function AuftragShopexport()
+ {
+ $id=$this->app->Secure->GetGET('id');
+ $shop=$this->app->DB->Select("SELECT shop FROM auftrag WHERE id='$id' LIMIT 1");
+ $this->app->remote->RemoteUpdateAuftrag($shop,$id);
+ $msg = $this->app->erp->base64_url_encode("Versandstatus an Shop übertragen
");
+ $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id.'&msg='.$msg);
+ }
+
+ function AuftragDateien()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $this->AuftragMenu();
+ $this->app->Tpl->Add('UEBERSCHRIFT',' (Dateien)');
+ $this->app->YUI->DateiUpload('PAGE','Auftrag',$id);
+ }
+
+ function AuftragSchreibschutz()
+ {
+
+ $id = $this->app->Secure->GetGET('id');
+ $this->app->DB->Update("UPDATE auftrag SET zuarchivieren='1' WHERE id='$id'");
+ $this->app->DB->Update("UPDATE auftrag SET schreibschutz='0' WHERE id='$id'");
+ $this->app->erp->AuftragProtokoll($id,"Schreibschutz entfernt");
+ $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id);
+ }
+
+ function AuftragTracking()
+ {
+ $tracking = $this->app->Secure->GetGET("tracking");
+ // Wir werden eine PDF Datei ausgeben
+ header('Content-type: application/html');
+
+ // Es wird downloaded.pdf benannt
+ header('Content-Disposition: attachment; filename="'.$tracking.'.html"');
+
+ // Die originale PDF Datei heißt original.pdf
+ if(is_file('/var/data/userdata/tracking/'.$tracking.'.html')){
+ readfile('/var/data/userdata/tracking/' . $tracking . '.html');
+ }
+ $this->app->ExitXentral();
+ }
+
+
+ function AuftragZahlungMahnungswesen()
+ {
+ $this->AuftragMenu();
+ $this->AuftragMiniDetail('TAB1',true);
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ }
+
+
+
+ function AuftragLiveTabelleZeit($parsetarget="")
+ {
+ $id = $this->app->Secure->GetGET("id");
+
+ $table = new EasyTable($this->app);
+
+ $sql = "SELECT
+ z.aufgabe as aufgabe, a.name as name, DATE_FORMAT(z.von,'%d.%m.%y %H:%i') as von, DATE_FORMAT(z.bis,'%d.%m.%y %H:%i') as bis,
+ CONCAT(LPAD(HOUR(TIMEDIFF(bis, von)),2,'0'),':',LPAD(MINUTE(TIMEDIFF(bis, von)),2,'0')) AS dauer
+
+ FROM zeiterfassung z LEFT JOIN adresse a ON a.id=z.adresse WHERE z.auftrag='$id' order by z.von";
+ //,if(z.abrechnen,if(z.abgerechnet!=1 AND z.abrechnen='1','offen','abgerechnet'),'abgeschlossen') as status
+
+ $table->Query($sql);
+ $artikel = $table->DisplayNew("return","Dauer","noAction");
+
+ if($parsetarget==''){
+ echo $artikel;
+ $this->app->ExitXentral();
+ }
+ $this->app->Tpl->Add($parsetarget,$artikel);
+ }
+
+ function AuftragLiveTabelle()
+ {
+ $id = $this->app->Secure->GetGET("id");
+ $status = $this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+
+ $table = new EasyTable($this->app);
+
+ if($status==='freigegeben')
+ {
+ $table->Query("SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, ap.menge as Menge,
+ if(a.lagerartikel,if(a.porto,'-',if((SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel) > ap.menge,(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),
+ if((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel)>0,CONCAT('',(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),' '),
+ 'aus '))),'-') as Lager
+ FROM auftrag_position ap, artikel a WHERE ap.auftrag='$id' AND a.id=ap.artikel");
+ $artikel = $table->DisplayNew("return","Lager","noAction");
+ } else {
+ $table->Query("SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, if(a.lagerartikel,ap.menge,'-') as M
+ FROM auftrag_position ap, artikel a WHERE ap.auftrag='$id' AND a.id=ap.artikel");
+ $artikel = $table->DisplayNew("return","Menge","noAction");
+ }
+ echo $artikel;
+ $this->app->ExitXentral();
+ }
+
+
+
+
+ function AuftragEditable()
+ {
+ $this->app->YUI->AARLGEditable();
+ }
+
+ function Custom($typ)
+ {
+ return '';
+ }
+
+ function AuftragIconMenu($id,$prefix="")
+ {
+ $storno = '';
+ $status = '';
+ $projekt = 0;
+ $anfrageid = 0;
+ $kreditlimit_ok = 0;
+ $lieferantenauftrag = 0;
+ $art = '';
+ $adresse = 0;
+ $shop = 0;
+ $shopexportstatus = '';
+ $auftragArr = $id <=0?null:$this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT status,projekt,anfrageid,kreditlimit_ok,lieferantenauftrag,art,adresse,shopextstatus,shop
+ FROM auftrag
+ WHERE id = %d
+ LIMIT 1',
+ $id
+ )
+ );
+ if(!empty($auftragArr)){
+ $shop = $auftragArr['shop'];
+ $shopextstatus = $auftragArr['shopextstatus'];
+ $adresse = $auftragArr['adresse'];
+ $status = $auftragArr['status'];//$auftragArr[''];// $this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+ $projekt = $auftragArr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
+ $anfrageid = $auftragArr['anfrageid'];//$this->app->DB->Select("SELECT anfrageid FROM auftrag WHERE id='$id' LIMIT 1");
+ $kreditlimit_ok = $auftragArr['kreditlimit_ok'];//$this->app->DB->Select("SELECT kreditlimit_ok FROM auftrag WHERE id='$id' LIMIT 1");
+ $lieferantenauftrag = $auftragArr['lieferantenauftrag'];//$this->app->DB->Select("SELECT lieferantenauftrag FROM auftrag WHERE id='$id' LIMIT 1");
+ $art = $auftragArr['art'];
+ }
+ $freigabe = '';
+ if($status==='angelegt' || $status=='') {
+ $freigabe = "Auftrag freigeben ";
+ $freigabe .= "Auftrag freigeben + AB per Mail ";
+ }
+
+ $proformapopup = '';
+ $proformarechnungoption = '';
+ $proformarechnungcase = '';
+
+ $casehook = '';
+ $optionhook = '';
+ $kreditlimit = '';
+ $shopexport = '';
+ $auswahlentsprechendkommissionierung = '';
+ $this->app->erp->RunHook('auftragiconmenu_option', 5, $id, $casehook, $optionhook, $status, $prefix);
+
+ if($anfrageid > 0){
+ $freigabe .= "in Anfrage rückführen ";
+ }
+
+ if($kreditlimit_ok==0 && $this->app->erp->RechteVorhanden('auftrag','kreditlimit')){
+ $kreditlimit .= "Kreditlimit für diesen Auftrag freigeben ";
+ }
+
+ $checkifrgexists = $this->app->DB->Select("SELECT id FROM rechnung WHERE auftragid='$id' LIMIT 1");
+
+ if($status !== 'storniert') {
+ $storno = 'Auftrag stornieren ';
+ }
+ else {
+ $showrueckgaenig = $this->app->DB->Select(sprintf('SELECT id FROM lieferschein WHERE auftragid=%d LIMIT 1', $id)) <= 0
+ && $this->app->DB->Select(sprintf('SELECT id FROM rechnung WHERE auftragid=%d LIMIT 1', $id)) <= 0;
+ if($showrueckgaenig) {
+ $storno = 'Auftrag Storno rückgängig ';
+ }
+ }
+
+ /*$anzahl_ls = $this->app->DB->Select("SELECT COUNT(id) FROM lieferschein WHERE auftragid='$id'");
+ $anzahl_re = $this->app->DB->Select("SELECT COUNT(id) FROM rechnung WHERE auftragid='$id'");
+
+ if($status=="storniert" && $anzahl_ls <=0 && $anzahl_re<=0)
+ $storno = "Auftrag Storno rückgängig ";
+ else if($status!="storniert")
+ $storno = "Auftrag stornieren ";*/
+
+ $kommissionierart = $this->app->DB->Select("SELECT kommissionierverfahren FROM projekt WHERE id='$projekt' LIMIT 1");
+ //$art = $this->app->DB->Select("SELECT art FROM auftrag WHERE id='$id' LIMIT 1");
+ $alleartikelreservieren = '';
+ $teillieferungen = '';
+ if($status==='freigegeben') {
+ $alleartikelreservieren = "alle Artikel reservieren ";
+
+
+ if($kommissionierart === "zweistufig" || $kommissionierart === "lieferscheinlagerscan" || $kommissionierart==="lieferscheinscan") {
+ if($art==="rechnung"){
+ $auswahlentsprechendkommissionierung = "Auto-Versand: RE u. LS erstellen (ohne Lager) ";
+ }
+ else{
+ $auswahlentsprechendkommissionierung = "Auto-Versand: an Versandzentrum übergeben ";
+ }
+ }
+ else if($kommissionierart === "lieferschein" || $kommissionierart === "lieferscheinlager"){
+ $auswahlentsprechendkommissionierung = "Auto-Versand: RE u. LS erstellen (mit Lager) ";
+ }
+ else{
+ $auswahlentsprechendkommissionierung = "Auto-Versand: RE u. LS erstellen (ohne Lager) ";
+ }
+ }
+
+
+ $zertifikatoption = '';
+ $zertifikatcase = '';
+ if($adresse > 0 && $this->app->erp->RechteVorhanden('zertifikatgenerator','list')) {
+ $zertifikate = $this->app->DB->Select("SELECT ds.datei
+ FROM datei_stichwoerter ds
+ INNER JOIN datei_stichwoerter ds2 ON ds.datei = ds2.datei AND ds2.objekt = 'Artikel'
+ INNER JOIN auftrag_position ap ON ap.artikel = ds2.parameter AND ap.auftrag = '$id'
+ WHERE ds.objekt = 'Adressen' AND ds.parameter = '$adresse'
+ GROUP BY ds.datei LIMIT 1");
+ if(!empty($zertifikate)) {
+ $zertifikatoption = 'Zertifikate anhängen ';
+ $zertifikatcase = "case 'zertifikate': if(!confirm('Zertifikate wirklich laden?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=zertifikate&id=%value%'; break; ";
+ }
+ }
+
+ $artikeleinlagern = '';
+ $artikelauslagern = '';
+ $menueinlagern = '';
+ $menuauslagern = '';
+ $shopupdate = '';
+ $menushopupdate = '';
+ $optioncustom = $this->Custom('option');
+ $casecustom = $this->Custom('case');
+ if($this->app->erp->RechteVorhanden('auftrageinauslagern','einlagern'))
+ {
+ $artikeleinlagern = 'Artikel einlagern ';
+ $menueinlagern = " case 'artikeleinlagern': if(!confirm('Artikel wirklich einlagern?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrageinauslagern&action=einlagern&id=%value%'; break;";
+ }
+ if($this->app->erp->RechteVorhanden('auftrageinauslagern','auslagern'))
+ {
+ $artikelauslagern = 'Artikel auslagern ';
+ $menuauslagern = " case 'artikelauslagern': if(!confirm('Artikel wirklich auslagern?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrageinauslagern&action=auslagern&id=%value%'; break;";
+ }
+
+ if($status === 'abgeschlossen' && $this->app->erp->RechteVorhanden('auftrag','shopexport'))
+ {
+ if($shop > 0 && $shopexportstatus != 'abgeschlossen') {
+ $shopexport = 'Status an Shop zurückmelden ';
+ $menushopupdate = " case 'shopexport': if(!confirm('Status wirklich an Shop melden?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=shopexport&id=%value%'; break;";
+ }
+ }
+ if($this->app->erp->RechteVorhanden('lieferkette', 'create'))
+ {
+ if(!$this->app->DB->Select("SELECT id FROM lieferkette WHERE auftrag = '$id'"))
+ {
+ $caselieferkette = "case 'lieferkette': window.location.href='index.php?module=lieferkette&action=create&id=%value%'; break;";
+ $optionlieferkette = "Lieferkette erzeugen ";
+ }
+ }
+
+ if($this->app->erp->RechteVorhanden('belegeimport', 'belegcsvexport'))
+ {
+ $casebelegeimport = "case 'belegeimport': window.location.href='index.php?module=belegeimport&action=belegcsvexport&cmd=auftrag&id=%value%'; break;";
+ $optionbelegeimport = "Export als CSV ";
+ }
+
+ $extendtext = '';
+ if($checkifrgexists>0) {
+ $extendtext = 'HINWEIS: Es existiert bereits eine Rechnung zu diesem Auftrag! ';
+ }
+
+ if($lieferantenauftrag!='1') {
+ $alsrechnung = 'als Rechnung weiterführen ';
+ }
+
+ $hookoption = '';
+ $hookcase = '';
+ $this->app->erp->RunHook('Auftrag_Aktion_option',3, $id, $status, $hookoption);
+ $this->app->erp->RunHook('Auftrag_Aktion_case',3, $id, $status, $hookcase);
+ $menu ="
+
+
+
+
+ Aktion:
+ bitte wählen ...
+ $storno
+ Auftrag kopieren
+ $freigabe
+ Auftrag abschicken
+
+ $alsbestellung
+ $alsproduktion
+ als Lieferschein weiterführen
+ $alsrechnung
+ $proformarechnungoption
+ als abgeschlossen markieren
+ $alsfreigegeben
+
+ $kreditlimit
+ $teillieferungen
+ $auswahlentsprechendkommissionierung
+ $zertifikatoption
+ $artikeleinlagern
+ $artikelauslagern
+ $shopexport
+ $optionlieferkette
+ $optioncustom
+ $optionhook
+ $optionbelegeimport
+ $alleartikelreservieren
+ $hookoption
+ PDF öffnen
+
+
+ ";
+
+
+ $menu .= "
+ ";
+
+ //$tracking = $this->AuftragTrackingTabelle($id);
+
+ $menu = str_replace('%value%',$id,$menu);
+ return $menu.$proformapopup;
+ }
+
+
+ /**
+ * @param int $id
+ *
+ * @return string
+ */
+ public function AuftragTrackingTabelle($id)
+ {
+ $table = new EasyTable($this->app);
+
+ if($id > 0) {
+ $table->Query(
+ "SELECT if(v.versendet_am!='0000-00-00', DATE_FORMAT(v.versendet_am,'%d.%m.%Y'),CONCAT('Heute im VersandAktuell im Versand -> als RMA markieren ')) as datum, v.versandunternehmen as versand, v.tracking as L,
+ CONCAT('',l.belegnr,' zum LS ') as LS,
+ CONCAT('',r.belegnr,' zur RE ') as RE,
+ if(tracking!='',CONCAT('Online-Status '),'')
+ FROM versand v
+ INNER JOIN lieferschein l ON v.lieferschein=l.id
+ LEFT JOIN rechnung r ON v.rechnung=r.id
+ WHERE l.auftragid='$id' AND l.auftrag!=''"
+ );
+ }
+
+ if(empty($table->datasets)) {
+ return 'Keine Versandinformationen vorhanden';
+ }
+
+ $result = $table->DisplayNew('return','Tracking','noAction');
+
+ $heuteimversand = $this->app->DB->Select(
+ "SELECT if(v.versendet_am!='0000-00-00', DATE_FORMAT(v.versendet_am,'%d.%m.%Y'),'Heute im Versand') as datum
+ FROM versand v
+ INNER JOIN lieferschein l ON v.lieferschein=l.id
+ WHERE l.auftragid='$id' AND l.auftrag!=''"
+ );
+
+ if($heuteimversand==='Heute im Versand'){
+ $result .= "RMA jetzt starten ";
+ }
+
+ return $result;
+ }
+
+ function AuftragPDFfromArchiv()
+ {
+ $id = $this->app->Secure->GetGET("id");
+ $archiv = $this->app->DB->Select("SELECT table_id from pdfarchiv where id = '$id' LIMIT 1");
+ if($archiv)
+ {
+ $projekt = $this->app->DB->Select("SELECT projekt from auftrag where id = '".(int)$archiv."'");
+ }
+ if(class_exists('AuftragPDFCustom'))
+ {
+ if($archiv)$Brief = new AuftragPDFCustom($this->app,$projekt);
+ }else{
+ if($archiv)$Brief = new AuftragPDF($this->app,$projekt);
+ }
+ if($archiv && $content = $Brief->getArchivByID($id))
+ {
+ header('Content-type: application/pdf');
+ header('Content-Disposition: attachment; filename="'.$content['belegnr'].'.pdf"');
+ echo $content['file'];
+ $this->app->ExitXentral();
+ }
+ header('Content-type: application/pdf');
+ header('Content-Disposition: attachment; filename="Fehler.pdf"');
+ $this->app->ExitXentral();
+ }
+
+ /**
+ * @var null|int $id
+ *
+ * @return array
+ */
+ protected function ajaxMiniDetailLager($id = null)
+ {
+ if($id === null){
+ $id = (int)$this->app->Secure->GetGET('id');
+ }
+ $artikelRow = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT id, mindesthaltbarkeitsdatum, chargenverwaltung
+ FROM artikel WHERE id = %d AND lagerartikel = 1 LIMIT 1', $id
+ )
+ );
+ if(empty($artikelRow)){
+ return ['inhalt' => 'kein Lagerartikel
'];
+ }
+
+ $lastCol = 'Lager';
+ $table = new EasyTable($this->app);
+ $warning = '';
+ if(!empty($artikelRow['mindesthaltbarkeitsdatum'])) {
+ $table->Query(
+ sprintf(
+ 'SELECT ' . $this->app->erp->FormatMenge('sum(lpi.menge)') . ' as menge, l.bezeichnung as Lager, ' . $this->app->erp->FormatMenge('sum(lm.menge)') . ' as `MHD-Menge`
+ FROM lager l
+ INNER JOIN lager_platz lp ON l.id = lp.lager AND l.geloescht = 0
+ INNER JOIN lager_platz_inhalt lpi ON lp.id = lpi.lager_platz AND lpi.artikel = %d
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge, lager_platz
+ FROM `lager_mindesthaltbarkeitsdatum`
+ WHERE artikel = %d
+ GROUP BY lager_platz
+ ) AS lm ON lp.id = lm.lager_platz
+ GROUP BY l.id
+ ORDER BY l.bezeichnung',
+ (int)$id, (int)$id
+ )
+ );
+ if(!empty($table->datasets)) {
+ $showBestbefore = false;
+ foreach($table->datasets as $dataSetKey => $dataset) {
+ if((string)$dataset['menge'] !== (string)$dataset['MHD-Menge']) {
+ $showBestbefore = true;
+ break;
+ }
+ }
+ if(!$showBestbefore) {
+ foreach($table->datasets as $dataSetKey => $dataset) {
+ unset($table->datasets[$dataSetKey]['MHD-Menge']);
+ }
+ unset($table->headings[(!empty($table->headings)?count($table->headings):0)-1]);
+ } else {
+ $lastCol = 'MHD-Menge';
+ $table->align[2] = 'right';
+ foreach($table->datasets as $dataSetKey => $dataset) {
+ if(str_replace(',','.',$dataset[$lastCol]) < str_replace(',','.',$dataset['menge'])) {
+ $table->datasets[$dataSetKey][$lastCol] = ''.$dataset[$lastCol].' ';
+ $warning = 'Es sind weniger MHD-Mengen als Lagerartikel vorhanden! ';
+ }
+ }
+ }
+ }
+ }
+ elseif(!empty($artikelRow['chargenverwaltung'])) {
+ $table->Query(
+ sprintf(
+ 'SELECT ' . $this->app->erp->FormatMenge('sum(lpi.menge)') . ' as menge, l.bezeichnung as Lager , ' . $this->app->erp->FormatMenge('sum(lc.menge)') . ' as `Chargen-Menge`
+ FROM lager l
+ INNER JOIN lager_platz lp ON l.id = lp.lager AND l.geloescht = 0
+ INNER JOIN lager_platz_inhalt lpi ON lp.id = lpi.lager_platz AND lpi.artikel = %d
+ LEFT JOIN (
+ SELECT SUM(menge) AS menge, lager_platz
+ FROM `lager_charge`
+ WHERE artikel = %d
+ GROUP BY lager_platz
+ ) AS lc ON lp.id = lc.lager_platz
+ GROUP BY l.id
+ ORDER BY l.bezeichnung',
+ (int)$id, (int)$id
+ )
+ );
+ if(!empty($table->datasets)) {
+ $showBatch = false;
+ foreach($table->datasets as $dataSetKey => $dataset) {
+ if((string)$dataset['menge'] !== (string)$dataset['Chargen-Menge']) {
+ $showBatch = true;
+ break;
+ }
+ }
+ if(!$showBatch) {
+ foreach($table->datasets as $dataSetKey => $dataset) {
+ unset($table->datasets[$dataSetKey]['Chargen-Menge']);
+ }
+ unset($table->headings[(!empty($table->headings)?count($table->headings):0)-1]);
+ } else {
+ $lastCol = 'Chargen-Menge';
+ $table->align[2] = 'right';
+ foreach($table->datasets as $dataSetKey => $dataset) {
+ if(str_replace(',','.',$dataset[$lastCol]) < str_replace(',','.',$dataset['menge'])) {
+ $table->datasets[$dataSetKey][$lastCol] = ''.$dataset[$lastCol].' ';
+ $warning = 'Es sind weniger Chargen-Mengen als Lagerartikel vorhanden! ';
+ }
+ }
+ }
+ }
+ }
+ else{
+ $table->Query(
+ sprintf(
+ 'SELECT ' . $this->app->erp->FormatMenge('sum(lpi.menge)') . ' as menge, l.bezeichnung as Lager
+ FROM lager l
+ INNER JOIN lager_platz lp ON l.id = lp.lager AND l.geloescht = 0
+ INNER JOIN lager_platz_inhalt lpi ON lp.id = lpi.lager_platz AND lpi.artikel = %d
+ GROUP BY l.id
+ ORDER BY l.bezeichnung',
+ (int)$id
+ )
+ );
+ }
+ $table->align[0] = 'right';
+ $table->align[1] = 'left';
+
+ return [
+ 'inhalt'=>
+ ''.$table->DisplayNew('return',$lastCol,'noAction').$warning.'
'
+ ];
+ }
+
+ /**
+ * @param null|int $id
+ *
+ * @return array
+ */
+ protected function ajaxMiniDetailLagerSaveInterneBemerkung($id = null)
+ {
+ if($id === null){
+ $id = (int)$this->app->Secure->GetGET('id');
+ }
+ $internebemerkung = $this->app->Secure->GetPOST('internebemerkung');
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE `auftrag` SET `internebemerkung` = '%s' WHERE `id` = %d LIMIT 1",
+ $internebemerkung, $id
+ )
+ );
+ return ['status' => 1];
+ }
+
+ /**
+ * @param mixed $ret
+ */
+ protected function sendAjax($ret)
+ {
+ header('Content-Type: application/json');
+ echo json_encode($ret);
+ $this->app->ExitXentral();
+ }
+
+ /**
+ * @param string $parsetarget
+ * @param bool $menu
+ */
+ public function AuftragMiniDetail($parsetarget='',$menu=true)
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $cmd = $this->app->Secure->GetGET('cmd');
+ if($cmd === 'lager') {
+ $ret = $this->ajaxMiniDetailLager($id);
+ $this->sendAjax($ret);
+ }
+ if($cmd === 'saveinternebemerkung') {
+ $ret = $this->ajaxMiniDetailLagerSaveInterneBemerkung($id);
+ $this->sendAjax($ret);
+ }
+
+ if(
+ !$this->app->DB->Select(
+ sprintf('SELECT deckungsbeitragcalc FROM auftrag WHERE id = %d LIMIT 1',$id)
+ )
+ ){
+ $this->app->erp->BerechneDeckungsbeitrag($id,'auftrag');
+ }
+ $auftragArr = $this->app->DB->SelectArr(
+ sprintf(
+ "SELECT *,DATE_FORMAT(lieferdatum,'%%d.%%m.%%Y') as lieferdatum
+ FROM auftrag
+ WHERE id=%d
+ LIMIT 1",
+ $id
+ )
+ );
+ $addressId = $auftragArr[0]['adresse'];
+ $projectId = $auftragArr[0]['projekt'];
+ $adrArr = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT kundennummer, name FROM adresse WHERE id=%d LIMIT 1',
+ $addressId
+ )
+ );
+ $kundennummer = $adrArr['kundennummer'];
+ $projekt = empty($projectId)?'':$this->app->DB->Select(
+ sprintf(
+ 'SELECT abkuerzung FROM projekt WHERE id= %d LIMIT 1',
+ $projectId
+ )
+ );
+ $kundenname = $adrArr['name'];
+ $this->app->Tpl->Set(
+ 'KUNDE',
+ ""
+ .$kundennummer." ".$kundenname
+ );
+ if($this->app->erp->RechteVorhanden('projekt','dashboard')){
+ $this->app->Tpl->Set(
+ 'PROJEKT',
+ "$projekt "
+ );
+ }
+ else{
+ $this->app->Tpl->Set('PROJEKT', $projekt);
+ }
+ $this->app->Tpl->Set('IHREBESTELLNUMMER',$auftragArr[0]['ihrebestellnummer']);
+
+ $rechnungs = $addressId <= 0?0: $this->app->DB->Select(
+ "SELECT SUM(soll-ist)
+ FROM rechnung
+ WHERE status != 'angelegt' AND zahlungsstatus != 'bezahlt'
+ AND adresse = '".$addressId."'"
+ );
+ $gutschrifts = $addressId <= 0?0:$this->app->DB->Select(
+ "SELECT SUM(soll-ist)
+ FROM gutschrift
+ WHERE status != 'angelegt'
+ AND (manuell_vorabbezahlt != '0000-00-00' OR manuell_vorabbezahlt IS NOT NULL)
+ AND adresse = '".$addressId."'"
+ );
+
+ $kundensaldo = $rechnungs - $gutschrifts;
+ $kundensaldo = round($kundensaldo, 2);
+
+ if($kundensaldo > 0){
+ $kundensaldo = "-".number_format($kundensaldo,2,',','.')." ";
+ }
+ else if($kundensaldo == 0){
+ $kundensaldo = '0,00';
+ }
+ else{
+ $kundensaldo = number_format($kundensaldo,2,',','.');
+ }
+
+ $this->app->Tpl->Set('KUNDENSALDO', $kundensaldo);
+
+ $zahlungsweisearr = $this->app->erp->GetZahlungsweise('auftrag', $id);
+ if($zahlungsweisearr) {
+ foreach($zahlungsweisearr as $k => $v) {
+ if($k == $auftragArr[0]['zahlungsweise']) {
+ $auftragArr[0]['zahlungsweise'] = $v;
+ break;
+ }
+ }
+ }
+
+ $versandartarr = $this->app->erp->GetVersandartAuftrag((int)$projectId);
+ if($versandartarr){
+ foreach($versandartarr as $k => $v) {
+ if($k == $auftragArr[0]['versandart']){
+ $auftragArr[0]['versandart'] = $v;
+ break;
+ }
+ }
+ }
+
+ $this->app->Tpl->Set('ZAHLWEISE',$auftragArr[0]['zahlungsweise']);
+ if($auftragArr[0]['lieferdatum']==='00.00.0000') {
+ $auftragArr[0]['lieferdatum']='sofort';
+ }
+ $this->app->Tpl->Set('WUNSCHLIEFERDATUM',$auftragArr[0]['lieferdatum']);
+ $gebuchtezeit = $this->app->DB->Select(
+ "SELECT IFNULL(SUM(TIME_TO_SEC(TIMEDIFF(bis, von)))/3600,0)
+ FROM zeiterfassung z
+ LEFT JOIN auftrag_position ap ON ap.id = z.auftragpositionid
+ WHERE z.auftrag = '$id' OR ap.auftrag = '$id'"
+ );
+
+ if(0){
+ $gebuchtezeit = (int)$gebuchtezeit.":".round(fmod($gebuchtezeit,1)*60);//Alternative Zeitangabe
+ }else{
+ $gebuchtezeit = str_replace(".", ",", round($gebuchtezeit,2));
+ }
+ $summebrutto = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
+ $this->app->Tpl->Set('DECKUNGSBEITRAG',0);
+ $this->app->Tpl->Set('DBPROZENT',0);
+ $this->app->Tpl->Set('GEBUCHTEZEIT',0);
+
+ if($auftragArr[0]['ust_befreit']==0){
+ $this->app->Tpl->Set('STEUER', "Inland");
+ }
+ else if($auftragArr[0]['ust_befreit']==1){
+ $this->app->Tpl->Set('STEUER', "EU-Lieferung");
+ }
+ else{
+ $this->app->Tpl->Set('STEUER', "Export");
+ }
+
+ $this->app->Tpl->Set('DELIVERYTHRESHOLDVATID',!empty($auftragArr[0]['deliverythresholdvatid'])?$auftragArr[0]['deliverythresholdvatid']:'');
+
+
+ $this->app->Tpl->Set('GESAMTSUMME',number_format($summebrutto,2,",",""));
+
+ //ENDE ZUSTANDSAUTOMAT FARBEN
+
+ // angebot
+
+ $angebot[]['angebot'] = $this->app->DB->Select(
+ "SELECT CONCAT('',if(an.belegnr='0' OR an.belegnr='','ENTWURF',an.belegnr),'
+ ')
+ FROM auftrag a
+ LEFT JOIN angebot an ON an.id=a.angebotid
+ WHERE a.id='$id'
+ LIMIT 1"
+ );
+
+ if(!empty($angebot)) {
+ $cangebot = (!empty($angebot)?count($angebot):0);
+ for($li=0;$li<$cangebot;$li++) {
+ $this->app->Tpl->Add('ANGEBOT',$angebot[$li]['angebot']);
+ if($li<(!empty($angebot)?count($angebot):0)){
+ $this->app->Tpl->Add('ANGEBOT', " ");
+ }
+ }
+ }
+ else{
+ $this->app->Tpl->Set('ANGEBOT', '-');
+ }
+ $lieferschein = $this->app->DB->SelectPairs(
+ "SELECT
+ l.id, CONCAT(
+ '','>'),
+ if(l.belegnr='0' OR l.belegnr='','ENTWURF',l.belegnr),
+ if(l.status='storniert',' ',''),
+ '
+ '
+ ) as lieferschein
+ FROM lieferschein l
+ WHERE l.auftragid='$id'"
+ );
+ $deliveryNoteIds = [0];
+ $hasDeliveryNotes = false;
+ $deliveryNoteIdsImplode = '0';
+ if(empty($lieferschein)) {
+ $this->app->Tpl->Set('LIEFERSCHEIN', '-');
+ }
+ else{
+ $hasDeliveryNotes = true;
+ $deliveryNoteIds = array_keys($lieferschein);
+ $deliveryNoteIdsImplode = implode(',', $deliveryNoteIds);
+ $this->app->Tpl->Set('LIEFERSCHEIN', implode(' ', $lieferschein));
+ }
+
+ /* rechnungen */
+
+ $sammelrechnungcheck = $this->app->DB->Select("SELECT * FROM sammelrechnung_position LIMIT 1");
+ if($sammelrechnungcheck) {
+ $rechnung = $this->app->DB->SelectPairs(
+ "SELECT
+ r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert',' ',''),'
+ ') as rechnung
+ FROM rechnung r
+ WHERE r.auftragid='$id'
+ union
+ SELECT
+ r.id,CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert',' ',''),'
+ ') as rechnung
+ FROM rechnung r
+ INNER JOIN sammelrechnung_position s ON r.id = s.rechnung
+ INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id
+ WHERE p.auftrag='$id'
+ union
+ SELECT
+ r.id,CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert',' ',''),'
+ ') as rechnung
+ FROM rechnung r
+ INNER JOIN sammelrechnung_position s ON r.id = s.rechnung
+ INNER JOIN lieferschein_position lp ON lp.id = s.lieferschein_position_id
+ INNER JOIN auftrag_position p ON p.id = lp.auftrag_position_id
+ WHERE p.auftrag='$id'
+ ");
+ $rechnungids = array_keys($rechnung);
+ /*$this->app->DB->SelectArr(
+ "SELECT r.id as rid
+ FROM rechnung r
+ WHERE r.auftragid ='$id' AND r.auftrag!=''
+ union
+ SELECT s.rechnung as rid
+ FROM sammelrechnung_position s
+ INNER JOIN auftrag_position p ON s.auftrag_position_id = p.id
+ WHERE p.auftrag = '$id' "
+ );*/
+ }
+ else{
+ $rechnung = $this->app->DB->SelectPairs(
+ "SELECT
+ r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert',' ',''),'
+ '
+ ) as rechnung
+ FROM rechnung r
+ WHERE r.auftragid='$id'"
+ );
+
+ $rechnungids =array_keys($rechnung);
+ /*$this->app->DB->SelectArr(
+ "SELECT r.id as rid
+ FROM rechnung r
+ WHERE r.auftragid='$id' AND r.auftrag!='' "
+ );*/
+ }
+
+ if(!$rechnung) {
+ $rechnung = $this->app->DB->SelectPairs(
+ "SELECT
+ r.id, CONCAT('','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert',' ',''),'
+ '
+ ) as rechnung
+ FROM rechnung r
+ INNER JOIN auftrag a ON a.rechnungid = r.id
+ WHERE a.id='$id'
+ ");
+ }
+
+ if(!empty($rechnung)){
+ $this->app->Tpl->Set('RECHNUNG', implode(' ', $rechnung));
+ }
+ else{
+ $this->app->Tpl->Set('RECHNUNG', '-');
+ }
+
+ /* ende rechnungen */
+ $positionIdToArticleIds = $this->app->DB->SelectPairs(
+ sprintf(
+ 'SELECT id, artikel
+ FROM auftrag_position
+ WHERE auftrag = %d ',
+ $id
+ )
+ );
+ $articleIds = array_unique(array_values($positionIdToArticleIds));
+ $positionIds = array_keys($positionIdToArticleIds);
+ if(empty($articleIds)) {
+ $articleIds = [0];
+ }
+ $bpPositions = [];
+ $bpIds = [0];
+ $bIds = [0];
+ $hasSupplierOrder = false;
+ if(empty($positionIds)) {
+ $positionIds = [0];
+ }
+ else {
+ $bpPositions = $this->app->DB->SelectPairs(
+ sprintf(
+ 'SELECT bp.id, bp.bestellung
+ FROM bestellung_position AS bp
+ WHERE bp.auftrag_position_id IN (%s)',
+ implode(',', $positionIds)
+ )
+ );
+
+ if(!empty($bpPositions)) {
+ $bpIds = array_keys($bpPositions);
+ $bIds = array_unique(array_values($bpPositions));
+ $hasSupplierOrder = true;
+ }
+ }
+ $bpIdsImplode = implode(', ', $bpIds );
+ $bIdsImplode = implode(', ', $bIds );
+
+ $articleIdsimplode = implode(', ', $articleIds );
+ $positionIdsImplode = implode(', ', $positionIds );
+
+ $check = empty($hasSupplierOrder)?[]:$this->app->DB->SelectPairs(
+ sprintf(
+ 'SELECT b.id, b.belegnr
+ FROM bestellung b
+ WHERE b.id IN (%s)
+ ORDER BY b.belegnr, b.id',
+ $bIdsImplode
+ )
+ );
+ if($check) {
+ $bestellungen = [];
+ foreach($check as $supplierOrderId => $supplierOrderNumber) {
+ $bestellungen[] = ''
+ .($supplierOrderNumber?$supplierOrderNumber:'ENTWURF')
+ .'
+
+ ';
+ }
+ $this->app->Tpl->Set('BESTELLUNG', implode(' ', $bestellungen));
+ }
+
+ $returnOrders = (array)$this->app->DB->SelectArr(
+ sprintf(
+ 'SELECT ro.id, ro.belegnr, ro.status
+ FROM `auftrag` AS `o`
+ LEFT JOIN `lieferschein` AS `dn` ON o.id = dn.auftragid
+ INNER JOIN `retoure` AS `ro` ON ro.auftragid = o.id OR (ro.lieferscheinid = dn.id)
+ WHERE o.id = %d
+ ORDER BY ro.id',
+ $id
+ )
+ );
+ $returnOrderHtml = [];
+ foreach($returnOrders as $returnOrderKey => $returnOrder) {
+ $returnOrderId = $returnOrder['id'];
+ $returnOrderNumber = $returnOrder['belegnr'];
+ if(empty($returnOrderNumber)) {
+ $returnOrderNumber = 'ENTWURF';
+ }
+ $isReturnOrderCanceled = $returnOrder['status'] === 'storniert';
+ $returnOrderHtml[] = ''
+ .($isReturnOrderCanceled?'':'').$returnOrderNumber.($isReturnOrderCanceled?' ':'')
+ .'
+
+ ';
+ }
+ $this->app->Tpl->Set('RETOURE', implode(' ', $returnOrderHtml));
+
+ $priceRequests = empty($hasSupplierOrder)?[]: (array)$this->app->DB->SelectArr(
+ sprintf(
+ "SELECT pa.id, pa.belegnr, pa.status
+ FROM `bestellung` AS `b`
+ INNER JOIN `preisanfrage` AS `pa` ON pa.id=b.preisanfrageid
+ WHERE b.id IN (%s)
+ GROUP BY pa.belegnr, pa.id
+ ORDER BY pa.belegnr, pa.id",
+ $bIdsImplode
+ )
+ );
+ if(!empty($priceRequests)){
+ $priceRequestsHtml = [];
+ foreach($priceRequests as $priceRequest) {
+ $priceRequestId = $priceRequest['id'];
+ $priceRequestNumber = $priceRequest['belegnr'];
+ if(empty($priceRequestNumber)) {
+ $priceRequestNumber = 'ENTWURF';
+ }
+ $isPriceRequestIsCanceled = $priceRequest['status'] === 'storniert';
+ $priceRequestsHtml[] = ''
+ .($isPriceRequestIsCanceled?'':'').($priceRequestNumber).($isPriceRequestIsCanceled?' ':'').'
+
+ ';
+ }
+ $this->app->Tpl->Set('PREISANFRAGE', implode(' ', $priceRequestsHtml));
+ }
+
+ $tmpVersand = !$hasDeliveryNotes?[]: $this->app->DB->SelectFirstCols(
+ "SELECT if(v.versendet_am!='0000-00-00',
+ CONCAT(DATE_FORMAT( v.versendet_am,'%d.%m.%Y'),' ',v.versandunternehmen),
+ CONCAT(
+ 'Heute im VersandAktuell im Versand -> als RMA markieren '
+ )
+ ) as datum
+ FROM versand AS v
+ INNER JOIN lieferschein l ON v.lieferschein=l.id
+ LEFT JOIN rechnung r ON v.rechnung=r.id
+ WHERE l.id IN (".$deliveryNoteIdsImplode.") AND l.auftragid='$id' AND l.auftrag!=''"
+ );
+ $tracking = !$hasDeliveryNotes?null:$this->app->DB->SelectArr("SELECT
+ if(v.tracking_link IS NOT NULL AND v.tracking_link != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ' '),
+ if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ' '),
+ if(versandunternehmen = 'dhlexpress' AND l.land != 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':', v.tracking, ' '),
+ if((versandunternehmen='dhl' OR versandunternehmen='intraship' OR versandunternehmen LIKE '%dhl%') AND v.tracking!='', CONCAT(UPPER(versandunternehmen),':',v.tracking,' '),
+ if(versandunternehmen LIKE '%dpd%',CONCAT(UPPER(versandunternehmen),':',v.tracking,' '),
+ if(versandunternehmen LIKE '%ups%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,' '),
+ if(versandunternehmen LIKE '%gls%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,' '),
+ if(v.tracking!='',
+ CONCAT(UPPER(versandunternehmen),': ',v.tracking),'nicht vorhanden')
+ )
+ )
+ )
+ )
+ )
+ )
+ ) as versand2,
+ if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen), ':', vp.tracking, ' '),
+ if(versandunternehmen = 'dhlexpress' AND l.land != 'DE' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen), ':', vp.tracking, ' '),
+ if( (versandunternehmen='dhl' OR versandunternehmen='intraship') AND vp.tracking!='', CONCAT(UPPER(versandunternehmen),':',vp.tracking,' '),
+ if(versandunternehmen LIKE '%dpd%',CONCAT(UPPER(versandunternehmen),':',vp.tracking,' '),
+ if(versandunternehmen LIKE '%ups%' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,' '),
+ if(versandunternehmen LIKE '%gls%' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen),':',v.tracking,' '),
+ if(vp.tracking!='',
+ CONCAT(UPPER(versandunternehmen),': ',vp.tracking),'nicht vorhanden')
+ )
+ )
+ )
+ )
+ )
+ ) as versand3,
+ v.tracking as tracking2, vp.tracking as tracking3
+ FROM versand AS v
+ INNER JOIN lieferschein AS l ON v.lieferschein=l.id
+ LEFT JOIN versandpakete AS vp ON v.id = vp.versand
+ WHERE l.id IN (".$deliveryNoteIdsImplode.") AND l.auftragid='$id' AND l.auftrag!=''
+ ORDER BY v.id, vp.nr"
+ );
+
+ $ctracking = $tracking?count($tracking):0;
+ for($counti=0;$counti < $ctracking; $counti++) {
+ if($tracking[$counti]['tracking2']!=''){
+ if($counti == 0 || $tracking[$counti]['tracking2'] != $tracking[$counti-1]['tracking2']){
+ $tmp[]=$tracking[$counti]['versand2'];
+ }
+ if($tracking[$counti]['tracking3'] != ''){
+ $tmp[]=$tracking[$counti]['versand3'];
+ }
+ }
+ }
+
+ if(is_array($tmp)){
+ $tracking = implode(', ', $tmp);
+ }
+ else{
+ $tracking = '';
+ }
+
+ if(is_array($tmpVersand)){
+ $tmpVersand = implode(', ', $tmpVersand);
+ }
+
+ if($tracking!='' && $tracking!=' '){
+ $this->app->Tpl->Set('TRACKING', $tracking);
+ }
+ else {
+ $this->app->Tpl->Set('TRACKING',$tmpVersand);
+ }
+
+
+ $icons = $this->app->YUI->IconsSQL();
+ if(strpos($icons,'aac.status')) {
+ $icons = $this->app->DB->Select(
+ "SELECT $icons
+ FROM auftrag a
+ LEFT JOIN `auftragsampel_auftrag_cache` aac ON a.id = aac.auftrag
+ WHERE a.id='$id'
+ LIMIT 1"
+ );
+ }
+ else{
+ $icons = $this->app->DB->Select(
+ "SELECT $icons FROM auftrag a WHERE a.id='$id' LIMIT 1"
+ );
+ }
+ $this->app->Tpl->Set('STATUSICONS',$icons);
+
+ $this->app->Tpl->Set('STATUS',$auftragArr[0]['status']);
+ $this->app->Tpl->Set('VERSANDART',$auftragArr[0]['versandart']);
+ $this->app->Tpl->Set('INTERNET',$auftragArr[0]['internet']);
+ $this->app->Tpl->Set('TRANSAKTIONSNUMMER',$auftragArr[0]['transaktionsnummer']);
+
+ $onlineshopName = $auftragArr[0]['shop'] <= 0?'':$this->app->DB->Select(
+ sprintf(
+ 'SELECT `bezeichnung` FROM `shopexport` WHERE `id` = %d LIMIT 1',
+ $auftragArr[0]['shop']
+ )
+ );
+ if($onlineshopName != ''){
+ $this->app->Tpl->Set('ONLINESHOP', $onlineshopName);
+ }
+
+ if($menu) {
+ $menu = $this->AuftragIconMenu($id);
+ $this->app->Tpl->Set('MENU',$menu);
+ }
+
+ // ARTIKEL
+ $auftragRow = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT status, projekt, standardlager,teillieferungvon FROM auftrag WHERE id = %d',
+ $id
+ )
+ );
+ $status = $auftragRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+
+ $table = new EasyTable($this->app);
+
+ //$lagermehr = " app->Conf->WFconf['defaulttheme']."/images/tooltip_grau.png\" />";
+
+ if($status==='freigegeben' || $status==='angelegt') {
+ $anzahllager = $this->app->DB->Select("SELECT count(id) FROM lager WHERE geloescht = 0");
+ $standardlager = $auftragRow['standardlager'];//$this->app->DB->Select("SELECT standardlager FROM auftrag WHERE id = '$id' LIMIT 1");
+ $projektlager = 0;
+ if(!$standardlager){
+ $projektlager = $this->app->DB->Select("SELECT projektlager FROM projekt WHERE id = '".$auftragArr[0]['projekt']."' LIMIT 1");
+ }
+ if($projektlager){
+ $projektlager = $auftragArr[0]['projekt'];
+ }
+ $standardlagertext = '';
+ if($standardlager){
+ $standardlagertext = $this->app->DB->Select("SELECT bezeichnung FROM lager WHERE id = '$standardlager' LIMIT 1");
+ }
+
+ $hookjoins = '';
+ $hookcolumns = '';
+
+ $lastcolumn = 'Reservierung';
+ $_lastcolumn = $lastcolumn;
+ $this->app->erp->RunHook("auftrag_minidetail_hook1",4, $id, $hookcolumns, $hookjoins, $lastcolumn);
+
+ $sql =
+ "SELECT
+
+ if(ap.explodiert_parent > 1,CONCAT('***',if(CHAR_LENGTH(TRIM(ap.beschreibung)) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)),if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)) as artikel,
+
+ CONCAT('', ap.nummer,' ') as Nummer,
+ if(isnull(b.id),'-',concat('',if(b.belegnr <> '', b.belegnr,'ENTWURF'),' ')) as Bestellung,
+ ".$this->app->erp->FormatMenge("ifnull(a.gewicht,0)")." as gewicht,
+
+ ".$this->app->erp->FormatMenge("ifnull(ap.menge,0)")." as Menge,
+
+ concat(if(a.lagerartikel,
+ if(a.porto,
+ 'Porto',
+ if(
+ (round((
+ (SELECT TRIM(SUM(l.menge))+0
+ FROM lager_platz_inhalt l
+ LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
+ )
+ - IFNULL((
+ SELECT SUM(r.menge) FROM lager_reserviert r
+
+ WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
+ (
+ ( r.parameter!='$id')
+ OR (
+ r.parameter='$id' AND r.posid!=ap.id)
+ )) OR r.objekt!='auftrag' )
+
+
+ ),0)
+ ),8)
+ >= round(ap.menge,8) AND (
+
+ round((SELECT TRIM(SUM(l.menge))+0
+ FROM lager_platz_inhalt l
+ LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
+ )
+ - IFNULL((
+ SELECT SUM(r.menge) FROM lager_reserviert r
+ WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
+
+ r.parameter!='$id')
+
+ OR r.objekt!='auftrag' )
+
+
+ ),0),8) >=
+ round((SELECT sum(ap3.menge) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel),8)
+ OR round(ap.menge,8) <= round(IFNULL((
+ SELECT SUM(r.menge) FROM lager_reserviert r
+ WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
+
+ r.parameter='$id'
+
+
+
+
+ ),0),8)
+ )) OR ((
+ round(ifnull((SELECT SUM(l.menge)
+ FROM lager_platz_inhalt l
+ INNER JOIN lager_platz lp ON lp.id=l.lager_platz
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
+ ),0),8) - round(IFNULL((
+ SELECT SUM(r.menge) FROM lager_reserviert r
+ WHERE r.artikel=ap.artikel AND ((r.objekt!='auftrag' OR
+
+ r.parameter!='$id')
+
+ )
+
+
+ ),0),8)
+ > round(IFNULL(apc.menge,0),8)
+
+ )
+ ) ,
+
+
+ CONCAT(
+ ifnull(
+ ifnull((
+ SELECT ".$this->app->erp->FormatMenge("TRIM(SUM(l.menge))+0")."
+ FROM lager_platz_inhalt l
+ LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
+ ,0)
+
+ ,0),
+ if(round((
+ SELECT TRIM(SUM(l.menge))+0
+ FROM lager_platz_inhalt l
+ LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1),8)>0,
+ CONCAT(' + ',(SELECT ".$this->app->erp->FormatMenge("(SUM(l.menge))")." FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1),'(N) '),'')
+ )
+
+
+ ,
+ if(round((
+
+ (SELECT ".$this->app->erp->FormatMenge("(SUM(l.menge))")."
+ FROM lager_platz_inhalt l
+ LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
+ - IFNULL((SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter!='$id'),0)),8)>=0,
+ CONCAT('',
+ (SELECT ".$this->app->erp->FormatMenge("(SUM(l.menge))")."
+ FROM lager_platz_inhalt l
+ LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
+
+ ,' '),
+ 'aus ')
+ )
+ )
+
+ ,if(a.porto,'Porto',if(a.stueckliste,'Set','kein Lagerartikel'))),'".($anzahllager >= 1?" lagermehr(',ap.artikel,') ":"")."') as Lager,
+ ".($standardlager?"
+
+ concat(if(a.lagerartikel,
+ if(a.porto,
+ 'Porto',
+ if(
+ ((
+ (SELECT TRIM(SUM(l.menge))+0
+ FROM lager_platz_inhalt l
+ INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
+ )
+ - IFNULL((
+ SELECT SUM(r.menge) FROM lager_reserviert r
+ INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.standardlager = '$standardlager'
+ WHERE r.artikel = ap.artikel AND (r.parameter <> '$id' OR r.parameter = '$id' AND r.posid != ap.id)
+ ),0)
+ )
+ >= ap.menge AND (
+
+ (SELECT TRIM(SUM(l.menge))+0
+ FROM lager_platz_inhalt l
+ INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
+ )
+ - IFNULL((
+ SELECT SUM(r.menge) FROM lager_reserviert r
+ INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.standardlager = '$standardlager'
+ WHERE r.artikel = ap.artikel AND (r.parameter <> '$id')
+ ),0)
+ >=
+ (SELECT sum(ap3.menge) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel)
+ OR ap.menge <= IFNULL((
+ SELECT SUM(r.menge) FROM lager_reserviert r
+ WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
+
+ r.parameter='$id'
+
+
+
+
+ ),0)
+ )) AND (
+
+ (
+ (SELECT TRIM(SUM(l.menge))+0
+ FROM lager_platz_inhalt l
+ LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
+ )
+ - IFNULL((
+ SELECT SUM(r.menge) FROM lager_reserviert r
+
+ WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
+ (
+ ( r.parameter!='$id')
+ OR (
+ r.parameter='$id' AND r.posid!=ap.id)
+ )) OR r.objekt!='auftrag' )
+
+
+ ),0)
+ )
+ >= ap.menge AND (
+
+ (SELECT TRIM(SUM(l.menge))+0
+ FROM lager_platz_inhalt l
+ LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
+ )
+ - IFNULL((
+ SELECT SUM(r.menge) FROM lager_reserviert r
+ WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
+
+ r.parameter!='$id')
+
+ OR r.objekt!='auftrag' )
+
+
+ ),0) >=
+ (SELECT sum(ap3.menge) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel)
+ OR ap.menge <= IFNULL((
+ SELECT SUM(r.menge) FROM lager_reserviert r
+ WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
+
+ r.parameter='$id'
+
+
+ ),0)
+ )
+
+ )
+
+ ,
+
+
+ CONCAT(
+ ifnull(
+ trim(ifnull(lpin2.menge
+ ,0))+0
+
+ ,0),
+ if((
+ SELECT TRIM(SUM(l.menge))+0
+ FROM lager_platz_inhalt l
+ INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1)>0,
+ CONCAT(' + ',(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.lager='$standardlager' AND lp.autolagersperre=1 AND lp.sperrlager!=1),'(N) '),'')
+ )
+
+
+ ,
+ if((
+
+ (SELECT TRIM(SUM(l.menge))+0
+ FROM lager_platz_inhalt l
+ INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
+ - IFNULL((SELECT SUM(r.menge) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter!='$id'),0))>=0,
+ CONCAT('',
+ (SELECT TRIM(ifnull(SUM(l.menge),0))+0
+ FROM lager_platz_inhalt l
+ INNER JOIN lager_platz lp ON lp.id=l.lager_platz AND lp.lager = '$standardlager'
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
+
+ ,' '),
+ 'aus ')
+ )
+ )
+
+ ,if(a.porto,'Porto',if(a.stueckliste,'Set','-'))) ,'".($anzahllager >= 1?" lagermehr(',ap.artikel,') ":"")."') as `$standardlagertext` ,
+
+ ":($projektlager?"
+
+
+
+ concat(if(a.lagerartikel,
+ if(a.porto,
+ 'Porto',
+ if(
+ ((
+ ifnull((SELECT TRIM(ifnull(SUM(l.menge),0))+0
+ FROM lager_platz_inhalt l
+ INNER JOIN lager_platz lp ON lp.id=l.lager_platz
+ INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
+ ),0)
+ - IFNULL((
+ SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
+ INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.projekt = '$projektlager'
+ WHERE r.artikel = ap.artikel AND (r.parameter <> '$id' OR r.parameter = '$id' AND r.posid != ap.id)
+ ),0)
+ )
+ >= ap.menge AND (
+
+ (SELECT TRIM(ifnull(SUM(l.menge),0))+0
+ FROM lager_platz_inhalt l
+ INNER JOIN lager_platz lp ON lp.id=l.lager_platz
+ INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
+ )
+ - IFNULL((
+ SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
+ INNER JOIN auftrag a2 ON r.parameter = a2.id AND r.objekt = 'auftrag' AND a2.projekt = '$projektlager'
+ WHERE r.artikel = ap.artikel AND (r.parameter <> '$id')
+ ),0)
+ >=
+ (SELECT ifnull(sum(ap3.menge),0) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel)
+ OR ap.menge <= IFNULL((
+ SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
+ WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
+
+ r.parameter='$id'
+
+
+
+
+ ),0)
+ )) AND (
+
+ (
+ (SELECT TRIM(ifnull(SUM(l.menge),0))+0
+ FROM lager_platz_inhalt l
+ LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
+ )
+ - IFNULL((
+ SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
+
+ WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
+ (
+ ( r.parameter!='$id')
+ OR (
+ r.parameter='$id' AND r.posid!=ap.id)
+ )) OR r.objekt!='auftrag' )
+
+
+ ),0)
+ )
+ >= ap.menge AND (
+
+ (SELECT TRIM(ifnull(SUM(l.menge),0))+0
+ FROM lager_platz_inhalt l
+ LEFT JOIN lager_platz lp ON lp.id=l.lager_platz
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1
+ )
+ - IFNULL((
+ SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
+ WHERE r.artikel=ap.artikel AND ((r.objekt='auftrag' AND
+
+ r.parameter!='$id')
+
+ OR r.objekt!='auftrag' )
+
+
+ ),0) >=
+ (SELECT ifnull(sum(ap3.menge),0) FROM auftrag_position ap3 WHERE ap3.auftrag = '$id' AND ap3.artikel = ap.artikel)
+ OR ap.menge <= IFNULL((
+ SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r
+ WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND
+
+ r.parameter='$id'
+
+
+ ),0)
+ )
+
+ )
+
+ ,
+
+
+ CONCAT(
+
+ ".$this->app->erp->FormatMenge("ifnull(lpin2.menge,0)")."
+
+ ,
+ if((
+ SELECT ifnull(SUM(l.menge),0)
+ FROM lager_platz_inhalt l
+ INNER JOIN lager_platz lp ON lp.id=l.lager_platz
+ INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre=1 AND lp.sperrlager!=1)>0,
+ CONCAT(' + ',(SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(l.menge),0)")." FROM lager_platz_inhalt l LEFT JOIN lager_platz lp ON lp.id=l.lager_platz WHERE l.artikel=ap.artikel AND lp.lager='$standardlager' AND lp.autolagersperre=1 AND lp.sperrlager!=1),'(N) '),'')
+ )
+
+
+ ,
+ if((
+
+ (SELECT TRIM(ifnull(SUM(l.menge),0))+0
+ FROM lager_platz_inhalt l
+ INNER JOIN lager_platz lp ON lp.id=l.lager_platz
+ INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
+ - IFNULL((SELECT ifnull(SUM(r.menge),0) FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter!='$id'),0))>=0,
+ CONCAT('',
+ (SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(l.menge),0)")."
+ FROM lager_platz_inhalt l
+ INNER JOIN lager_platz lp ON lp.id=l.lager_platz
+ INNER JOIN lager lag ON lp.lager = lag.id AND lag.projekt = '$projektlager'
+ WHERE l.artikel=ap.artikel AND lp.autolagersperre!=1 AND lp.sperrlager!=1)
+
+ ,' '),
+ 'aus ')
+ )
+ )
+
+ ,if(a.porto,'Porto',if(a.stueckliste,'Set','-'))),'".($anzahllager >= 1?" lagermehr(',ap.artikel,') ":"")."') as `Projektlager` ,
+
+
+ ":''))."
+ CONCAT(
+ IFNULL((SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(r.menge),0)")." FROM lager_reserviert r WHERE r.artikel=ap.artikel AND r.objekt='auftrag' AND r.parameter='$id' AND (r.posid=ap.id OR (r.artikel=ap.artikel AND r.posid=0))),'0')
+
+ ,
+ ' / ',(SELECT ".$this->app->erp->FormatMenge("ifnull(SUM(r.menge),0)")." FROM lager_reserviert r WHERE r.artikel=ap.artikel )
+ ,' *') as '$_lastcolumn' $hookcolumns
+
+ FROM auftrag_position ap
+ INNER JOIN artikel a ON a.id = ap.artikel
+ LEFT JOIN (
+ SELECT apa.id, sum(apb.menge) as menge
+ FROM auftrag_position apa
+ INNER JOIN auftrag_position apb ON apa.artikel = apb.artikel AND apa.auftrag = '$id'
+ AND apb.auftrag = '$id'
+ AND apb.sort <= apa.sort
+ WHERE apa.id IN (".$positionIdsImplode.") AND apb.id IN (".$positionIdsImplode.")
+ GROUP BY apa.id
+ ) apc ON ap.id = apc.id
+
+ LEFT JOIN (
+ SELECT ifnull(sum(lpi1.menge),0) as menge, lpi1.artikel
+ FROM lager_platz_inhalt lpi1
+ INNER JOIN lager_platz lp1 ON lpi1.lager_platz = lp1.id AND lp1.autolagersperre != 1 AND lp1.sperrlager != 1 ".($standardlager?" AND lp1.lager != '$standardlager' ":"")."
+ WHERE lpi1.artikel IN (".$articleIdsimplode.")
+ GROUP BY lpi1.artikel
+ ) as lpin1 ON ap.artikel = lpin1.artikel
+ ".($standardlager?"
+
+ LEFT JOIN (
+ SELECT ifnull(sum(lpi2.menge),0) as menge, lpi2.artikel
+ FROM lager_platz_inhalt lpi2
+ INNER JOIN lager_platz lp2 ON lpi2.lager_platz = lp2.id AND lp2.autolagersperre != 1
+ AND lp2.sperrlager != 1 AND lp2.lager = '$standardlager'
+ WHERE lpi2.artikel IN (".$articleIdsimplode.")
+ GROUP BY lpi2.artikel
+ ) as lpin2 ON ap.artikel = lpin2.artikel
+
+ ":($projektlager?"
+
+ LEFT JOIN (
+ SELECT ifnull(sum(lpi2.menge),0) as menge, lpi2.artikel
+ FROM lager_platz_inhalt lpi2
+ INNER JOIN lager_platz lp2 ON lpi2.lager_platz = lp2.id AND lp2.autolagersperre != 1 AND lp2.sperrlager != 1
+ INNER JOIN lager l2 ON lp2.lager = l2.id AND l2.projekt = '$projektlager'
+ WHERE lpi2.artikel IN (".$articleIdsimplode.")
+ GROUP BY lpi2.artikel
+ ) as lpin2 ON ap.artikel = lpin2.artikel
+
+ ":""))."
+
+ LEFT JOIN bestellung_position bp ON bp.id IN (".$bpIdsImplode.") AND ap.id = bp.auftrag_position_id AND bp.artikel IN (".$articleIdsimplode.")
+ LEFT JOIN bestellung b ON b.id IN (".$bIdsImplode.") AND b.id = bp.bestellung
+ $hookjoins
+ WHERE ap.auftrag='$id' AND ap.id IN (".$positionIdsImplode.")
+ ORDER by ap.sort";
+ //$time = microtime(true);
+ $table->Query($sql);
+ //$time = microtime(true) - $time;
+ $gewichtanzeigen = false;
+ $bestellunganzeigen = false;
+ $reserviertfuerkundeanzeigen = false;
+ if($table->datasets) {
+ foreach($table->datasets as $k => $row) {
+ if(str_replace(',','.',$row['gewicht']) > 0){
+ $gewichtanzeigen = true;
+ }
+ if($row['Bestellung'] != '-')
+ {
+ $bestellunganzeigen = true;
+ }
+ if(isset($row['Res']) && $row['Res'] != ''){
+ $reserviertfuerkundeanzeigen = true;
+ }
+ if($row[$_lastcolumn] != ''){
+ $reserviertfuerkundeanzeigen = true;
+ }
+ }
+ }
+ if(!$bestellunganzeigen)
+ {
+ foreach($table->datasets as $k => $row)
+ {
+ unset($table->datasets[$k]['Bestellung']);
+ }
+ $table->headings[2] = $table->headings[3];
+ if(isset($table->headings[4]))$table->headings[3] = $table->headings[4];
+ if(isset($table->headings[5]))$table->headings[4] = $table->headings[5];
+ if(isset($table->headings[6]))$table->headings[5] = $table->headings[6];
+ if(isset($table->headings[7]))$table->headings[6] = $table->headings[7];
+ if(isset($table->headings[8]))$table->headings[7] = $table->headings[8];
+ if(isset($table->headings[8]))
+ {
+ unset($table->headings[8]);
+ }elseif(isset($table->headings[7]))
+ {
+ unset($table->headings[7]);
+ }elseif(isset($table->headings[6]))
+ {
+ unset($table->headings[6]);
+ }elseif(isset($table->headings[5])){
+ unset($table->headings[5]);
+ }else{
+ unset($table->headings[4]);
+ }
+ }
+
+ if(!$gewichtanzeigen)
+ {
+ foreach($table->datasets as $k => $row)
+ {
+ unset($table->datasets[$k]['gewicht']);
+ }
+
+ if(!$bestellunganzeigen)
+ {
+ $table->headings[2] = $table->headings[3];
+ }
+ if(isset($table->headings[4]))$table->headings[3] = $table->headings[4];
+ if(isset($table->headings[5]))$table->headings[4] = $table->headings[5];
+ if(isset($table->headings[6]))$table->headings[5] = $table->headings[6];
+ if(isset($table->headings[7]))$table->headings[6] = $table->headings[7];
+ if(isset($table->headings[8]))$table->headings[7] = $table->headings[8];
+ if(isset($table->headings[8]))
+ {
+ unset($table->headings[8]);
+ }elseif(isset($table->headings[7]))
+ {
+ unset($table->headings[7]);
+ }elseif(isset($table->headings[6]))
+ {
+ unset($table->headings[6]);
+ }elseif(isset($table->headings[5]))
+ {
+ unset($table->headings[5]);
+ }elseif(isset($table->headings[4]))
+ {
+ unset($table->headings[4]);
+ }else{
+ unset($table->headings[3]);
+ }
+ }
+
+ if(!$reserviertfuerkundeanzeigen)
+ {
+ foreach($table->datasets as $k => $row)
+ {
+ unset($table->datasets[$k][$_lastcolumn]);
+ }
+ if($lastcolumn == $_lastcolumn)
+ {
+ unset($table->headings[(!empty($table->headings)?count($table->headings):0)-1]);
+ }else {
+ $cheading = !empty($table->headings)?count($table->headings):0;
+ for($hc = 0; $hc < $cheading; $hc++)
+ {
+ if($table->headings[$hc] == $_lastcolumn)
+ {
+ break;
+ }
+ }
+ for($hci = $hc; $hci < $cheading ;$hci++)
+ {
+ if(isset($table->headings[$hci])) {
+ if(isset($table->headings[$hci + 1])) {
+ $table->headings[$hci] = $table->headings[$hci + 1];
+ }else{
+ unset($table->headings[$hci]);
+ }
+ }
+ }
+ }
+
+ if($lastcolumn == $_lastcolumn)
+ {
+ $lastcolumn = $table->headings[(!empty($table->headings)?count($table->headings):0)-1];
+ if($lastcolumn == 'Aktion'){
+ $lastcolumn = $table->headings[(!empty($table->headings)?count($table->headings):0)-2];
+ }
+ }
+ }
+
+ if($table->datasets)
+ {
+ foreach($table->datasets as $k => $v)
+ {
+ foreach($v as $k2 => $v2)
+ {
+ if(preg_match_all('/^(.*)lagermehr\((.*)\)(.*)$/', $v2, $matches,PREG_OFFSET_CAPTURE))
+ {
+ $table->datasets[$k][$k2] = $matches[1][0][0].' '.$this->app->YUI->ContentTooltip('return','index.php?module=auftrag&action=minidetail&cmd=lager&id='.$matches[2][0][0],'url').$matches[3][0][0];
+ }
+ }
+ }
+ foreach($table->headings as $k => $v)
+ {
+ if($v === 'Lager'){
+ $table->align[$k] = 'right';
+ }elseif($v === 'Menge'){
+ $table->align[$k] = 'right';
+ }elseif($v === 'Projektlager'){
+ $table->align[$k] = 'right';
+ }elseif($v == $standardlagertext){
+ $table->align[$k] = 'right';
+ }
+ }
+ }
+ $artikel = $table->DisplayNew("return",$lastcolumn,"noAction","false",0,0,false);
+
+ }
+ else {
+ //$table->Query("SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, if(a.lagerartikel,ap.menge,'-') as Menge
+ $hookjoins = '';
+ $hookcolumns = '';
+ $lastcolumn = 'Menge';
+ $this->app->erp->RunHook('auftrag_minidetail_hook1',4, $id, $hookcolumns, $hookjoins, $lastcolumn);
+
+ $sql =
+ "SELECT if(ap.explodiert_parent > 1,
+ CONCAT('***',if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)),if(CHAR_LENGTH(ap.beschreibung) > 0,CONCAT(ap.bezeichnung,' *'),ap.bezeichnung)) as artikel, CONCAT('', ap.nummer,' ') as Nummer,
+ if(isnull(b.id),'-',concat('',if(b.belegnr <> '', b.belegnr,'ENTWURF'),' ')
+ ) as Bestellung,a.gewicht as gewicht,
+ TRIM(ap.menge)+0 as Menge
+ $hookcolumns
+ FROM auftrag_position AS ap
+ INNER JOIN artikel AS a ON a.id=ap.artikel
+ LEFT JOIN bestellung_position AS bp ON ap.id = bp.auftrag_position_id AND bp.id IN (".$bpIdsImplode.")
+ LEFT JOIN bestellung AS b ON b.id = bp.bestellung AND b.id IN (".$bIdsImplode.")
+ $hookjoins
+ WHERE ap.id IN (".$positionIdsImplode.") AND ap.auftrag='$id'
+ ORDER by ap.sort ";
+
+ $table->Query($sql);
+
+ $gewichtanzeigen = false;
+ $bestellunganzeigen = false;
+ if($table->datasets){
+ foreach($table->datasets as $k => $row) {
+ if($row['gewicht'] > 0){
+ $gewichtanzeigen = true;
+ }
+ if($row['Bestellung'] != '-'){
+ $bestellunganzeigen = true;
+ }
+ }
+ }
+
+ if(!$bestellunganzeigen) {
+ foreach($table->datasets as $k => $row) {
+ unset($table->datasets[$k]['Bestellung']);
+ }
+ $table->headings[2] = $table->headings[3];
+ if(isset($table->headings[4])){
+ $table->headings[3] = $table->headings[4];
+ }
+ if(isset($table->headings[5])){
+ $table->headings[4] = $table->headings[5];
+ }
+ if(isset($table->headings[6])){
+ $table->headings[5] = $table->headings[6];
+ }
+ if(isset($table->headings[7])){
+ $table->headings[6] = $table->headings[7];
+ }
+ if(isset($table->headings[7]))
+ {
+ unset($table->headings[7]);
+ }elseif(isset($table->headings[6]))
+ {
+ unset($table->headings[6]);
+ }elseif(isset($table->headings[5])){
+ unset($table->headings[5]);
+ }else{
+ unset($table->headings[4]);
+ }
+ }
+
+ if(!$gewichtanzeigen)
+ {
+ foreach($table->datasets as $k => $row)
+ {
+ unset($table->datasets[$k]['gewicht']);
+ }
+ if(!$bestellunganzeigen)
+ {
+ $table->headings[2] = $table->headings[3];
+ }
+ if(isset($table->headings[4]))$table->headings[3] = $table->headings[4];
+ if(isset($table->headings[5]))$table->headings[4] = $table->headings[5];
+ if(isset($table->headings[6]))$table->headings[5] = $table->headings[6];
+ if(isset($table->headings[7]))$table->headings[6] = $table->headings[7];
+ if(isset($table->headings[7]))
+ {
+ unset($table->headings[7]);
+ }elseif(isset($table->headings[6]))
+ {
+ unset($table->headings[6]);
+ }elseif(isset($table->headings[5])){
+ unset($table->headings[5]);
+ }elseif(isset($table->headings[4])){
+ unset($table->headings[4]);
+ }else{
+ unset($table->headings[3]);
+ }
+ }
+
+ $artikel = $table->DisplayNew("return",$lastcolumn,"noAction");
+ }
+ $this->app->Tpl->Set('ARTIKEL',''.$artikel.'
');
+ $nachartikeltarget = 'MINIDETAILNACHARTIKEL';
+ $this->app->erp->RunHook("AuftragMiniDetailNachArtikel", 2, $id, $nachartikeltarget);
+ //START ZUSTANDSAUTOMAT FARBEN
+ if($auftragArr[0]['status']==='freigegeben'){
+ $this->app->Tpl->Set(
+ 'VERSANDTEXT','Versand: Noch nicht versendet!
'
+ );
+ }
+ else if ($auftragArr[0]['status']==='abgeschlossen')
+ {
+ $this->app->Tpl->Set(
+ 'VERSANDTEXT','Versand: Bereits versendet!
'
+ );
+ } else {
+ $this->app->Tpl->Set(
+ 'VERSANDTEXT','Versand: -
'
+ );
+ }
+
+ $vorkasse_ok = $this->app->DB->Select("SELECT vorkasse_ok FROM auftrag WHERE id='$id' LIMIT 1");
+ $zahlungsweise = $auftragArr[0]['zahlungsweise'];
+ if($vorkasse_ok==1){
+ if($zahlungsweise==='vorkasse' || $zahlungsweise==='paypal' || $zahlungsweise==='kreditkarte') {
+ $this->app->Tpl->Add(
+ 'ZAHLUNGEN',"Der Auftrag wurde bezahlt.
");}
+ else if ($zahlungsweise==='rechnung') {
+ $this->app->Tpl->Add(
+ 'ZAHLUNGEN',"Der Auftrag wird per Rechnung bezahlt.
");
+ }
+ else if ($zahlungsweise==='amazon') {
+ $this->app->Tpl->Add(
+ 'ZAHLUNGEN',"Der Auftrag wird per Amazon bezahlt.
");
+ }
+ else if ($zahlungsweise==='lastschrift'||$zahlungsweise==='einzugsermaechtigung') {
+ $this->app->Tpl->Add(
+ 'ZAHLUNGEN',"Der Auftrag wird per Lastschrift bezahlt.
");
+ }
+ else if ($zahlungsweise==='bar' || $zahlungsweise==='nachnahme' ) {
+ $this->app->Tpl->Add(
+ 'ZAHLUNGEN',"Der Auftrag wird bei Übergabe bezahlt.
");
+ }
+ }
+ else if($vorkasse_ok==2){
+ $this->app->Tpl->Add('ZAHLUNGEN','Es liegt eine Teilzahlung vor!
');
+ }
+
+ elseif(in_array($zahlungsweise, ['vorkasse','paypal','kreditkarte','bar'])) {
+ $this->app->Tpl->Add(
+ 'ZAHLUNGEN',
+ 'Vorkasse noch nicht abgeschlossen!
'
+ );
+ }
+
+ // schaue ob es eine GS zu diesem Auftrag gibt
+ // schaue ob es eine GS zu diesem Auftrag gibt
+ //$gutschriftid = $this->app->DB->Select("SELECT id FROM gutschrift WHERE rechnungid='$rechnungid' LIMIT 1");
+
+ if(!empty($rechnungids)) {
+ foreach($rechnungids as $rechnungid) {
+ $gutschriftid = $rechnungid <= 0?0:$this->app->DB->Select(
+ sprintf(
+ 'SELECT id FROM gutschrift WHERE rechnungid=%d AND rechnungid > 0 LIMIT 1',
+ $rechnungid
+ )
+ );
+
+ if($gutschriftid > 0) {
+ $tmp = $this->app->DB->Select(
+ "SELECT
+ CONCAT('',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),'
+ ') as rechnung
+ FROM gutschrift r
+ WHERE r.id='".$gutschriftid."' LIMIT 1"
+ );
+ $this->app->Tpl->Add('GUTSCHRIFT',$tmp);
+ }
+ }
+ }
+ if($auftragArr[0]['rma']==1){
+ $this->app->YUI->ParserVarIf('RMA', 1);
+ }
+ else{
+ $this->app->YUI->ParserVarIf('RMA', 0);
+ }
+
+ $this->app->Tpl->Set('RMAFARBE','red');
+ $this->app->Tpl->Set('RMATEXT','RMA zu diesem Auftrag vorhanden!');
+
+
+ if($auftragArr[0]['belegnr']=='0' || $auftragArr[0]['belegnr']=='') {
+ $auftragArr[0]['belegnr'] = 'ENTWURF';
+ }
+ $this->app->Tpl->Set('BELEGNR',$auftragArr[0]['belegnr']);
+ $this->app->Tpl->Set('AUFTRAGID',$auftragArr[0]['id']);
+
+ $this->app->Tpl->Set(
+ 'RECHNUNGLIEFERADRESSE',
+ $this->AuftragRechnungsLieferadresse($auftragArr[0]['id'])
+ );
+
+ $this->app->Tpl->Set('RMA',"Es ist kein RMA-Prozess zu diesem Auftrag vorhanden.");
+
+ $tmp = new EasyTable($this->app);
+ $tmp->Query(
+ sprintf(
+ "SELECT DATE_FORMAT(ap.zeit, '%%d.%%m.%%Y %%H:%%i:%%s') AS `zeit`, ap.bearbeiter, ap.grund
+ FROM `auftrag_protokoll` AS `ap`
+ WHERE ap.auftrag = %d
+ ORDER by ap.zeit DESC, ap.id DESC",
+ $id
+ )
+ );
+ $tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction");
+
+ $produktionsId = $this->app->DB->Select("SELECT id FROM produktion WHERE auftragid = '$id' LIMIT 1");
+ if($produktionsId > 0){
+ $this->app->Tpl->Set(
+ 'VORPRODUKTIONPROTOKOLL',
+ '
+
{|Produktion Protokoll|}
+
'
+ );
+ $produktionProtokoll = new EasyTable($this->app);
+ $produktionProtokoll->Query(
+ sprintf(
+ "SELECT DATE_FORMAT(pp.zeit,'%%d.%%m.%%Y %%H:%%i:%%s') AS `zeit`, pp.bearbeiter, pp.grund
+ FROM `produktion_protokoll` AS `pp`
+ WHERE pp.produktion = %d
+ ORDER BY pp.zeit DESC, pp.id DESC",
+ $produktionsId
+ )
+ );
+ $produktionProtokoll->DisplayNew('PRODUKTIONPROTOKOLL', 'Produktion Protokoll', 'noAction');
+ $this->app->Tpl->Set('NACHPRODUKTIONPROTOKOLL', '
');
+ }
+ if(class_exists('AuftragPDFCustom')) {
+ $Brief = new AuftragPDFCustom($this->app,$auftragArr[0]['projekt']);
+ }
+ else{
+ $Brief = new AuftragPDF($this->app,$auftragArr[0]['projekt']);
+ }
+ $Dokumentenliste = $Brief->getArchivedFiles($id, 'auftrag');
+ if($Dokumentenliste) {
+ $tmp3 = new EasyTable($this->app);
+ $tmp3->headings = array('Datum','Belegnr','Bearbeiter','Menü');
+ foreach($Dokumentenliste as $k => $v) {
+ if(!$v['erstesoriginal']) {
+ $tmpr['datum'] = date('d.m.Y H:i:s',strtotime($v['zeitstempel']));
+ $tmpr['belegnr'] = str_replace('.pdf','',$v['file']);
+ $tmpr['belegnr'] = substr($tmpr['belegnr'],strrpos($tmpr['belegnr'],'_')+1);
+ if(isset($v['belegnummer']) && $v['belegnummer']) {
+ $tmpr['belegnr'] = $v['belegnummer'];
+ }
+ $tmpr['bearbeiter'] = $v['bearbeiter'];
+ $tmpr['menu'] = ' ';
+ $tmp3->datasets[] = $tmpr;
+ }
+ }
+
+ $tmp3->DisplayNew('PDFARCHIV','Menü',"noAction");
+ }
+
+ $nettogewicht = $this->app->erp->AuftragNettoGewicht($id);
+ if($nettogewicht!='') {
+ $nettogewicht = number_format($nettogewicht, 2, ',','.');
+ $gewichtbezeichnung = $this->app->erp->Firmendaten('gewichtbezeichnung');
+ if($gewichtbezeichnung == '') {
+ $gewichtbezeichnung = 'Kg';
+ }
+
+ $this->app->Tpl->Set('GEWICHT', $nettogewicht . ' '.$gewichtbezeichnung);
+ }
+ if($this->app->erp->Firmendaten('internebemerkungminidetails')) {
+ //$schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM auftrag WHERE id = '$id' LIMIT 1");
+ $schreibschutz=0;
+ $this->app->Tpl->Set(
+ 'INTERNEBEMERKUNGEDIT',
+ '
+
Interne Bemerkung
+
+
+
+
');
+ $this->app->Tpl->Add('INTERNEBEMERKUNGEDIT',' '
+ );
+ }
+ else{
+ $this->app->Tpl->Add('INTERNEBEMERKUNGEDIT','');
+ }
+
+ }
+ if($parsetarget=='') {
+ $this->app->Tpl->Output('auftrag_minidetail.tpl');
+ $this->app->ExitXentral();
+ }
+ $this->app->Tpl->Parse($parsetarget,'auftrag_minidetail.tpl');
+ }
+
+ function AuftragRechnungsLieferadresse($auftragid)
+ {
+ $data = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id='$auftragid' LIMIT 1");
+
+ foreach($data[0] as $key=>$value)
+ {
+ if($data[0][$key]!='' && $key!=='abweichendelieferadresse' && $key!=='land' && $key!=='plz' && $key!=='lieferland' && $key!=='lieferplz') {
+ $data[0][$key] = $data[0][$key].' ';
+ }
+ }
+
+
+ $rechnungsadresse = $data[0]['name']."".$data[0]['ansprechpartner']."".$data[0]['abteilung']."".$data[0]['unterabteilung'].
+ "".$data[0]['strasse']."".$data[0]['adresszusatz']."".$data[0]['land']."-".$data[0]['plz']." ".$data[0]['ort'];
+
+ // wenn abweichende rechnungsadresse bei kunden aktiv ist dann diese verwenden
+
+ $abweichende = $this->app->DB->Select("SELECT abweichende_rechnungsadresse FROM adresse WHERE id='".$data[0]['adresse']."' LIMIT 1");
+ if($abweichende=="1")
+ {
+ $adresse_data = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='".$data[0]['adresse']."' LIMIT 1");
+
+ foreach($adresse_data[0] as $key=>$value)
+ {
+ if($adresse_data[0][$key]!="" && $key!="abweichendelieferadresse" && $key!="rechnung_land" && $key!="rechnung_plz")
+ {
+ $adresse_data[0][$key] = $adresse_data[0][$key]." ";
+ }
+ }
+
+ $rechnungsadresse = $adresse_data[0]['rechnung_name']."".$adresse_data[0]['rechnung_ansprechpartner']."".$adresse_data[0]['rechnung_abteilung']."".$adresse_data[0]['rechnung_unterabteilung'].
+ "".$adresse_data[0]['rechnung_strasse']."".$adresse_data[0]['rechnung_adresszusatz']."".$adresse_data[0]['rechnung_land']."-".$adresse_data[0]['rechnung_plz']." ".$adresse_data[0]['rechnung_ort'];
+ }
+
+ if($data[0]['abweichendelieferadresse']!=0){
+
+ $lieferadresse = $data[0]['liefername']."".$data[0]['lieferansprechpartner']."".$data[0]['lieferabteilung']."".$data[0]['lieferunterabteilung'].
+ "".$data[0]['lieferstrasse']."".$data[0]['lieferadresszusatz']."".$data[0]['lieferland']."-".$data[0]['lieferplz']." ".$data[0]['lieferort'];
+
+
+ } else {
+ $lieferadresse = "entspricht Rechnungsadresse";
+ }
+
+ return "
+ Rechnungsadresse ".($abweichende=="1"?' (abweichend)':'').": $rechnungsadresse
+ Lieferadresse: $lieferadresse
";
+ }
+
+
+
+ function AuftragZahlungsmail()
+ {
+ $id = $this->app->Secure->GetGET("id");
+ $this->app->erp->AuftragZahlungsmail($id,1);
+ $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id);
+ }
+
+ function AuftragSuche()
+ {
+ $this->app->erp->Headlines('Aufträge');
+ $this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Übersicht");
+ $this->app->erp->MenuEintrag("index.php?module=auftrag&action=create","Neuen Auftrag anlegen");
+ $this->app->erp->MenuEintrag("index.php?module=auftrag&action=search","Auftrag Suchen");
+ $this->app->erp->MenuEintrag("index.php","Zurück zur Übersicht");
+
+ $this->app->Tpl->Set('TABTEXT',"Aufträge");
+
+ $name = trim($this->app->Secure->GetPOST("name"));
+ $suchwort = trim($this->app->Secure->GetPOST("suchwort"));
+ $email = trim($this->app->Secure->GetPOST("email"));
+ $plz = trim($this->app->Secure->GetPOST("plz"));
+ $auftrag = trim($this->app->Secure->GetPOST("auftrag"));
+ $proforma = trim($this->app->Secure->GetPOST("proforma"));
+ $kundennummer = trim($this->app->Secure->GetPOST("kundennummer"));
+ $betrag= trim($this->app->Secure->GetPOST("betrag"));
+
+ $betrag = str_replace(',','.',$betrag);
+
+ if($name!="" || $plz!="" || $proforma!="" || $kundennummer!="" || $auftrag!="" || $email!="" || $betrag!="" || $suchwort!="")
+ {
+ $table = new EasyTable($this->app);
+ $this->app->Tpl->Add('ERGEBNISSE',"Trefferliste: ");
+ if($suchwort!="")
+ {
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = b.adresse WHERE (a.name LIKE '%$suchwort%' OR a.email LIKE '%$suchwort%' OR a.plz LIKE '$suchwort%' OR a.internet LIKE '%$suchwort%' OR (adr.kundennummer='$suchwort' AND adr.kundennummer!=0)
+ OR (a.gesamtsumme='$suchwort' AND a.gesamtsumme!=0) OR (a.belegnr='$suchwort' AND a.belegnr!='' ))");
+ } else {
+ if($name!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.name LIKE '%$name%')");
+ else if($email!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.email LIKE '%$email%')");
+ else if($plz!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.plz LIKE '$plz%')");
+ else if($proforma!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.internet LIKE '%$proforma%')");
+ else if($kundennummer!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (adr.kundennummer='$kundennummer')");
+ else if($betrag!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.gesamtsumme='$betrag')");
+ else if($auftrag!="")
+ $table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as datum, a.name, a.belegnr as auftrag, adr.kundennummer, a.internet, a.plz, a.ort, a.strasse, a.zahlungsweise, a.status, a.id FROM auftrag a
+ LEFT JOIN adresse adr ON adr.id = a.adresse WHERE (a.belegnr='$auftrag')");
+
+ }
+ $table->DisplayNew('ERGEBNISSE',"Lesen ");
+ } else {
+ $this->app->Tpl->Add('ERGEBNISSE',"Auftragssuche (bitte entsprechende Suchparameter eingeben)
");
+ }
+
+ $this->app->Tpl->Parse('INHALT',"auftragssuche.tpl");
+
+ $this->app->Tpl->Set('AKTIV_TAB1',"selected");
+ $this->app->Tpl->Parse('TAB1',"rahmen77.tpl");
+ $this->app->Tpl->Parse('PAGE',"tabview.tpl");
+ }
+
+
+
+ public function AuftragRechnung()
+ {
+ $id = $this->app->Secure->GetGET('id');
+
+ $anzahl_artikel = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag=$id LIMIT 1");
+ if($anzahl_artikel <= 0)
+ {
+ $belegnr = $this->app->DB->Select("SELECT if(belegnr = '','ENTWURF',belegnr) FROM auftrag WHERE id = '$id' LIMIT 1");
+ $msg = $this->app->erp->base64_url_encode("Der Auftrag $belegnr kann nicht weitergefuehrt werden, da keine Artikel gebucht sind!
");
+ $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id.'&msg='.$msg);
+ }
+ $newid = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id);
+
+ $this->app->erp->AuftragProtokoll($id,'Auftrag manuell als Rechnung weitergeführt');
+ $this->app->Location->execute('index.php?module=rechnung&action=edit&id='.$newid);
+ }
+
+ /**
+ * @return JsonResponse
+ */
+ public function HandleCreateProforma()
+ {
+ $justStorage = $this->app->Secure->GetPOST('just_strorage');
+ $this->app->User->SetParameter('proforma_just_storage', (int)$justStorage);
+ $id = $this->app->Secure->GetPOST('elementid');
+ $status = $this->app->DB->Select("SELECT status FROM auftrag WHERE id=$id");
+ if($status!=='angelegt') {
+ /** @var Proformarechnung $obj */
+ $obj = $this->app->loadModule('proformarechnung');
+ if(!empty($obj) && method_exists($obj, 'createFromOrder')) {
+ $newid = $obj->createFromOrder($id, $justStorage);
+ $this->app->erp->AuftragProtokoll($id,'Auftrag als Proformarechnung weitergeführt');
+ return new JsonResponse(
+ ['success' => true, 'url' => "index.php?module=proformarechnung&action=edit&id=$newid"]
+ );
+ }
+ return new JsonResponse(
+ [
+ 'success' => false,
+ 'error' => 'Das Modul Proformarechnung konnte nicht geladen werden!'
+ ],
+ JsonResponse::HTTP_BAD_REQUEST
+ );
+ }
+
+ return new JsonResponse(
+ [
+ 'success' => false,
+ 'error' => 'Das Auftrag befindet sich noch im Entwurfsmodus und kann daher nicht als Proformarechnung weiterführt werden!'
+ ],
+ JsonResponse::HTTP_BAD_REQUEST
+ );
+ }
+
+
+
+ public function AuftragLieferschein()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $posids = $this->app->Secure->GetGET('posids');
+ if($posids)
+ {
+ $positionen = null;
+ $zwischenpositionen = null;
+ if(strpos($posids, 'z') !== false || strpos($posids, 'b') !== false)
+ {
+ $sida = explode(',',$posids);
+ foreach($sida as $v)
+ {
+ if($v[0] === 'b')
+ {
+ $v = substr($v ,1);
+ $positionen[] = $v;
+ }else{
+ $v = substr($v ,1);
+ $zwischenpositionen[] = $v;
+ }
+ }
+ }
+ }
+ $this->app->erp->AuftragProtokoll($id,'Auftrag manuell als Lieferschein weitergeführt');
+ $msgNoArticle = $this->app->erp->base64_url_encode('Der Auftrag kann nicht zum Lieferschein weitergeführt werden, da er keine Positionen oder keine Lagerartikel enthält
');
+ if(isset($positionen))
+ {
+ $newid = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id, $positionen, $zwischenpositionen);
+ $this->app->BuildNavigation = false;
+ if($newid){
+ $this->app->Tpl->Add('TAB1', '
+
+ ');
+ }else{
+ $this->app->Tpl->Add('TAB1', '
+
+ ');
+ }
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ return;
+ }
+ $newid = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id);
+
+ if($newid > 0){
+ $this->app->Location->execute("Location: index.php?module=lieferschein&action=edit&id=$newid");
+ }
+ $this->app->Location->execute("Location: index.php?module=auftrag&action=edit&id=$id&msg=".$msgNoArticle);
+ }
+
+ public function AuftragLieferscheinRechnung()
+ {
+ $id = $this->app->Secure->GetGET('id');
+
+ $auftragarr = $this->app->DB->SelectRow("SELECT projekt,art FROM auftrag WHERE id='$id' LIMIT 1");
+ if(!empty($auftragarr))
+ {
+ $projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
+ $art = $auftragarr['art'];//$this->app->DB->Select("SELECT art FROM auftrag WHERE id='$id' LIMIT 1");
+ }else{
+ $projekt = 0;
+ $art = '';
+ }
+
+ $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
+ $this->app->erp->BriefpapierHintergrundDisable($druckercode);
+
+ if($art!=='rechnung')
+ {
+ // automatisch drucken bzw. freigeben
+ $newid = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id);
+
+ $belegnr = (string)$this->app->DB->Select("SELECT belegnr FOM lieferschein WHERE id='$newid' LIMIT 1");
+ if($belegnr==='' || $belegnr==='0') {
+ $belegnr = $this->app->erp->GetNextNummer('lieferschein',$projekt,$newid);
+ }
+
+ $this->app->DB->Update("UPDATE lieferschein SET belegnr='$belegnr', status='freigegeben' WHERE id='$newid' LIMIT 1");
+ $this->app->erp->LieferscheinProtokoll($newid,'Lieferschein freigegeben');
+
+ $this->app->erp->LieferscheinAuslagern($newid,true, (int)$this->app->DB->Select("SELECT standardlager FROM auftrag WHERE id = '$id' LIMIT 1"),'lieferschein',true);
+ $Brief = new LieferscheinPDF($this->app,$projekt);
+ $Brief->GetLieferschein($newid);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ $this->app->printer->Drucken($druckercode,$tmpfile);
+
+ $fileid_lieferschein = $this->app->erp->CreateDatei($Brief->filename,'lieferschein','','',$tmpfile,$this->app->User->GetName());
+ $this->app->erp->AddDateiStichwort($fileid_lieferschein,'lieferschein','lieferschein',$newid,$without_log=false);
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ $Brief = new LieferscheinPDF($this->app,$projekt);
+ $Brief->GetLieferschein($newid);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ unlink($tmpfile);
+ }
+
+ if($art!=='lieferung')
+ {
+
+ //TODO eventuell wenn es Rechnung schon gibt keine weitere erstellen
+ $newid = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id);
+ $belegnr = (string)$this->app->DB->Select("SELECT belegnr FOM rechnung WHERE id='$newid' LIMIT 1");
+ if($belegnr==='' || $belegnr==='0') {
+ $belegnr = $this->app->erp->GetNextNummer('rechnung',$projekt,$newid);
+ }
+ $this->app->DB->Update("UPDATE rechnung SET belegnr='$belegnr', status='freigegeben' WHERE id='$newid' LIMIT 1");
+ $this->app->erp->RechnungProtokoll($newid,'Rechnung freigegeben');
+ $this->app->erp->ANABREGSNeuberechnen($newid,"rechnung");
+
+ $Brief = new RechnungPDF($this->app,$projekt);
+ $Brief->GetRechnung($newid);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ $this->app->printer->Drucken($druckercode,$tmpfile);
+
+ $fileid_rechnung = $this->app->erp->CreateDatei($Brief->filename,'rechnung','','',$tmpfile,$this->app->User->GetName());
+ $this->app->erp->AddDateiStichwort($fileid_rechnung,'rechnung','rechnung',$newid,$without_log=false);
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ $Brief = new RechnungPDF($this->app,$projekt);
+ $Brief->GetRechnung($newid);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ unlink($tmpfile);
+ }
+ $this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$id);
+ }
+
+
+ public function AuftragZertifikate()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$id' LIMIT 1");
+ if($adresse)
+ {
+ $zertifikate = $this->app->DB->SelectArr("SELECT ds.datei
+ FROM datei_stichwoerter ds
+ INNER JOIN datei_stichwoerter ds2 ON ds.datei = ds2.datei AND ds2.objekt = 'Artikel'
+ INNER JOIN auftrag_position ap ON ap.artikel = ds2.parameter AND ap.auftrag = '$id'
+ WHERE ds.objekt = 'Adressen' AND ds.parameter = '$adresse'
+ GROUP BY ds.datei");
+ if(!empty($zertifikate))
+ {
+ foreach($zertifikate as $zertifikat)
+ {
+ $this->app->erp->AddDateiStichwort($zertifikat['datei'],'Sonstige','Auftrag',$id);
+ }
+ }
+ }
+
+ $this->app->Location->execute('index.php?module=auftrag&action=dateien&id='.$id);
+ }
+
+
+ public function AuftragCopy()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ if($id > 0){
+ $newid = $this->app->erp->CopyAuftrag($id);
+ }else{
+ $newid = $id;
+ }
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$newid");
+ }
+
+ public function AuftragKreditlimit()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ if($id > 0){
+ $this->app->DB->Update("UPDATE auftrag SET kreditlimit_freigabe='1' WHERE id='$id' LIMIT 1");
+
+ $this->app->erp->AuftragProtokoll($id, 'Kreditlimit manuell freigegeben');
+
+ $this->app->erp->AuftragAutoversandBerechnen($id);
+ $this->app->erp->AuftragNeuberechnen($id);
+ }
+ header('Location: index.php?module=auftrag&action=edit&id='.$id);
+ }
+
+ function AuftragFreigabe($id='')
+ {
+
+ if($id=='') {
+ $id = $this->app->Secure->GetGET('id');
+ $freigabe= $this->app->Secure->GetGET('freigabe');
+ //$this->app->Tpl->Set('TABTEXT',"Freigabe");
+ //$module = $this->app->Secure->GetGET("module");
+ } else {
+ $intern = true;
+ $freigabe=$intern;
+ }
+ $allowedFrm = true;
+ $showDefault = true;
+ if($id > 0){
+ $this->app->erp->CheckVertrieb($id, 'auftrag');
+ $this->app->erp->CheckBearbeiter($id, 'auftrag');
+ $auftragarr = $this->app->DB->SelectRow("SELECT projekt,belegnr,status,email,gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
+ $doctype = 'auftrag';
+ if(empty($intern)){
+ $this->app->erp->RunHook('beleg_freigabe', 4, $doctype, $id, $allowedFrm, $showDefault);
+ }
+
+ }
+ if(!empty($auftragarr)) {
+ $projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
+ $checkbelegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
+ $status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id = '$id' LIMIT 1");
+ $email = $auftragarr['email'];
+ $summe = $auftragarr['gesamtsumme'];
+ }
+ else{
+ $status = '';
+ $projekt = 0;
+ $checkbelegnr = '';
+ $email = '';
+ if($intern)
+ {
+ return 0;
+ }
+ $id = 0;
+ }
+
+ if($allowedFrm && $freigabe==$id && !empty($id))
+ {
+ if($checkbelegnr==''){
+ $belegnr = $this->app->erp->GetNextNummer('auftrag', $projekt, $id);
+ }
+ else {
+ $belegnr = $checkbelegnr;
+ }
+
+ if($this->app->User->GetParameter('auftrag_create_entwurfsdatumuebernehmen')=='1'){
+ $this->app->DB->Update("UPDATE auftrag SET belegnr='$belegnr', status='freigegeben' WHERE id='$id' LIMIT 1");
+ }
+ else{
+ $this->app->DB->Update("UPDATE auftrag SET datum=NOW(), belegnr='$belegnr', status='freigegeben' WHERE id='$id' LIMIT 1");
+ }
+
+ $this->app->erp->AuftragProtokoll($id,'Auftrag freigegeben');
+ if($status !== 'freigegeben')
+ {
+ $_beleg = 'auftrag';
+ $_id = $id;
+ $this->app->erp->RunHook('BelegFreigabe', 2, $_beleg, $_id);
+ }
+ // auftrag abschliessen und event senden
+ if($intern) {
+ return 1;
+ }
+ $cmd = $this->app->Secure->GetGET('cmd');
+ if($cmd==='mail')
+ {
+ $this->app->erp->BelegVersand('auftrag',$id,'email');
+ $msg = $this->app->erp->base64_url_encode('Der Auftrag wurde freigegeben und die AB an den Kunden per Mail gesendet!
');
+ }
+ else{
+ $msg = $this->app->erp->base64_url_encode('Der Auftrag wurde freigegeben und kann jetzt versendet werden!
');
+ }
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
+ }
+ if($id && $showDefault) {
+ $name = $this->app->DB->Select("SELECT a.name FROM auftrag b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
+ //$email = $this->app->DB->Select("SELECT email FROM auftrag WHERE id='$id' LIMIT 1");
+ //$summe = $this->app->DB->Select("SELECT FORMAT(SUM(menge*preis),2) FROM auftrag_position
+ //WHERE auftrag='$id'");
+ //$summe = $this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
+
+ $waehrung = $this->app->DB->Select("SELECT waehrung FROM auftrag_position
+ WHERE auftrag='$id' LIMIT 1");
+
+ // check ob entwurdsdataum alt ist
+ $extra = $this->app->erp->CheckboxEntwurfsmodus('auftrag',$id);
+
+ if($email!='')
+ {
+ $this->app->Tpl->Set('TAB1',"Soll der Auftrag an
$name im Wert von
$summe $waehrung
+ jetzt freigegeben werden?
+
");
+ } else {
+
+ if($this->app->erp->Firmendaten("oneclickrelease")=="1" && $extra=="")
+ {
+ $this->app->Location->execute("index.php?module=auftrag&action=freigabe&id=$id&freigabe=$id");
+ } else {
+ $this->app->Tpl->Set('TAB1',"Soll der Auftrag an $name im Wert von $summe $waehrung
+ jetzt freigegeben werden?
+ $extra
+
");
+
+ }
+ }
+ }
+ $this->AuftragMenu();
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ }
+
+ public function AuftragAbschicken()
+ {
+ $this->AuftragMenu();
+ $this->app->erp->DokumentAbschicken();
+ }
+
+
+
+ public function AuftragAnfrage()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ if($id > 0){
+ $anfrageid = $this->app->DB->Select("SELECT anfrageid FROM auftrag WHERE id='$id' LIMIT 1");
+ }else{
+ $anfrageid = 0;
+ }
+ // loesche alle positionen im Auftrag
+ if($anfrageid > 0){
+ $this->app->erp->WeiterfuehrenAuftragZuAnfrage($id);
+ }
+
+ $this->app->Location->execute('index.php?module=anfrage&action=edit&id='.$anfrageid);
+ }
+
+ public function AuftragAlsfreigegeben()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $alsfreigegeben= $this->app->Secure->GetGET('alsfreigegeben');
+
+ $auftragarr = $this->app->DB->SelectRow("SELECT name,belegnr,status FROM auftrag WHERE id='$id' LIMIT 1");
+ if(!empty($auftragarr))
+ {
+ $name = $auftragarr['name'];//$this->app->DB->Select("SELECT name FROM auftrag WHERE id='$id' LIMIT 1");
+ $belegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
+ $status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+ }else{
+ $name = '';
+ $status = '';
+ $belegnr = '';
+ }
+ if(empty($auftragarr)){
+
+ }elseif(!empty($auftragarr) && $alsfreigegeben==$id)
+ {
+ if($status==='angelegt')
+ {
+ // KUNDE muss RMA starten
+ $msg = $this->app->erp->base64_url_encode("Der Auftrag \"$name\" ($belegnr) kann nicht als offen markiert werden. Er muss erst freigegeben werden!
");
+ }
+ else if($status==="freigegeben")
+ {
+ // KUNDE muss RMA starten
+ $msg = $this->app->erp->base64_url_encode("Der Auftrag \"$name\" ($belegnr) ist bereits freigegeben!
");
+ }
+ else if($status==="abgeschlossen" || $status==="storniert" || $status==="versendet")
+ {
+ $msg = $this->app->erp->base64_url_encode("Der Auftrag \"$name\" ($belegnr) wurde wieder als freigegeben markiert!
");
+ $this->app->DB->Update("UPDATE auftrag SET status='freigegeben',schreibschutz=0 WHERE id='$id' LIMIT 1");
+ $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge=0,geliefert=0 WHERE auftrag='$id'");
+ $this->app->erp->AuftragProtokoll($id,'Auftrag manuell als freigegeben markiert');
+ }
+ else
+ {
+ $msg = $this->app->erp->base64_url_encode('Der Auftrag wurde abgeschlossen!
');
+ }
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
+ }
+ else {
+ $name = $this->app->DB->Select("SELECT a.name FROM auftrag b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
+ $this->app->Tpl->Set('TAB1',"Soll der Auftrag an $name jetzt wirklich als freigegeben markiert werden?
+
+
");
+ }
+ $this->AuftragMenu();
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ }
+
+ /**
+ * @param int $orderId
+ *
+ * @return array
+ */
+ public function closeOrder($orderId)
+ {
+ $orderRow = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT name, belegnr, status FROM auftrag WHERE id=%d LIMIT 1',
+ $orderId
+ )
+ );
+ if(empty($orderRow)) {
+ return ['error' => 'Auftrag nicht gefunden'];
+ }
+ $status = $orderRow['status'];
+ $number = $orderRow['belegnr'];
+ $name = $orderRow['name'];
+ if($status === 'angelegt') {
+ return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er noch nicht freigeben wurde! Bitte Auftrag erst freigeben!"];
+ }
+ if($status==='storniert') {
+ return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er bereits storniert ist!"];
+ }
+ if($status === 'abgeschlossen') {
+ return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden da er bereits abgeschlossen ist!"];
+ }
+ if($status!=='freigegeben' && $status!=='versendet') {
+ return ['error' => "Der Auftrag \"$name\" ($number) kann nicht abgeschlossen werden"];
+ }
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE auftrag SET status='abgeschlossen',schreibschutz=1 WHERE id=%d LIMIT 1",
+ $orderId
+ )
+ );
+ $this->app->erp->AuftragProtokoll($orderId,'Auftrag wurde manuell abgeschlossen');
+
+ return ['info' => 'Der Auftrag wurde abgeschlossen!'];
+ }
+
+ public function AuftragAbschluss()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $abschluss= $this->app->Secure->GetGET('abschluss');
+ $auftragarr = empty($id)?null: $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT name, belegnr, status FROM auftrag WHERE id=%d LIMIT 1',
+ $id
+ )
+ );
+ $name = '';
+ $belegnr = '';
+ $status = '';
+ if(!empty($auftragarr)){
+ $name = $auftragarr['name'];
+ $belegnr = $auftragarr['belegnr'];
+ $status = $auftragarr['status'];
+ }
+
+ if($abschluss==$id) {
+ $ret = $this->closeOrder($id);
+ if(!empty($ret['error'])) {
+ $msg = $this->app->erp->base64_url_encode(''.$ret['error'].'
');
+ }
+ else{
+ $msg = $this->app->erp->base64_url_encode(''.$ret['info'].'
');
+ }
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
+ }
+
+ $name = $this->app->DB->Select("SELECT a.name FROM auftrag b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
+ $this->app->Tpl->Set('TAB1',"Soll der Auftrag an $name jetzt abgeschlossen werden?
+
+
");
+
+ $this->AuftragMenu();
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ }
+
+
+ public function AuftragUndelete()
+ {
+ $id = (int)$this->app->Secure->GetGET('id');
+ $auftragarr = $this->app->DB->SelectRow("SELECT name, belegnr, status FROM auftrag WHERE id='$id' LIMIT 1");
+ if(!empty($auftragarr)){
+ $name = $auftragarr['name'];//$this->app->DB->Select("SELECT name FROM auftrag WHERE id='$id' LIMIT 1");
+ $belegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
+ $status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+ }else{
+ $name = '';
+ $belegnr = '';
+ $status = '';
+ }
+ $ok = true;
+ if($status !== 'storniert')
+ {
+ $ok = false;
+ }
+ if($ok)
+ {
+ $anzahl_ls = $this->app->DB->Select("SELECT id FROM lieferschein WHERE auftragid='$id' LIMIT 1");
+ if($anzahl_ls)
+ {
+ $ok = false;
+ }
+ }
+ if($ok)
+ {
+ $anzahl_re = $this->app->DB->Select("SELECT id FROM rechnung WHERE auftragid='$id' LIMIT 1");
+ if($anzahl_re){
+ $ok = false;
+ }
+ }
+
+ if($ok)
+ {
+ $this->app->DB->Update("UPDATE auftrag SET status='freigegeben' WHERE id='$id' LIMIT 1");
+ $this->app->erp->AuftragProtokoll($id,'Auftrag Storno rückgängig');
+ $msg = $this->app->erp->base64_url_encode("Auftrag \"$name\" ($belegnr) wurde wieder freigegeben!
");
+ } else {
+ $msg = $this->app->erp->base64_url_encode("Auftrag \"$name\" ($belegnr) kann nicht wieder freigegeben werden da es bereits Rechnungen und/oder Lieferrscheine zu dem Auftrag gibt.
");
+ }
+ //header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg");
+ $this->app->Location->execute("index.php?module=auftrag&action=list&msg=$msg");
+ }
+
+ public function AuftragDelete($id = null)
+ {
+ if($id === null)
+ {
+ $intern = false;
+ $id = $this->app->Secure->GetGET('id');
+ $abschluss = $this->app->Secure->GetGET('abschluss');
+ $mail = $this->app->Secure->GetGET('mail');
+ }else
+ {
+ $intern = true;
+ $abschluss = $intern;
+ $mail = 0;
+ }
+
+ $auftragarr = $this->app->DB->SelectRow("SELECT name, belegnr, status,shop,shopextid FROM auftrag WHERE id='$id' LIMIT 1");
+ if(!empty($auftragarr)){
+ $name = $auftragarr['name'];//$this->app->DB->Select("SELECT name FROM auftrag WHERE id='$id' LIMIT 1");
+ $belegnr = $auftragarr['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
+ $status = $auftragarr['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+ $shop = $auftragarr['shop'];
+ $shopextid = (string)$auftragarr['shopextid'];
+ }else{
+ $name = '';
+ $belegnr = '';
+ $status = '';
+ $shop = 0;
+ $shopextid = '';
+ }
+
+ if($abschluss==$id)
+ {
+ if($shop && $this->app->DB->Select("SELECT id FROM shopexport WHERE aktiv = 1 AND id = '$shop' AND stornoabgleich AND demomodus = 0 LIMIT 1"))
+ {
+ if($shopextid !== ''){
+ $this->app->remote->RemoteStorniereAuftrag($shop, $id);
+ }
+ }
+ if($belegnr=='0' || $belegnr=='')
+ {
+ $this->app->erp->DeleteAuftrag($id);
+ if($belegnr!=''){
+ $msg = $this->app->erp->base64_url_encode("Auftrag \"$name\" ($belegnr) wurde gelöscht!
");
+ }
+ else{
+ $msg = $this->app->erp->base64_url_encode("Auftrag \"$name\" wurde gelöscht!
");
+ }
+ //header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg");
+ if($intern){
+ return;
+ }
+ $this->app->Location->execute("index.php?module=auftrag&action=list&msg=$msg");
+ }
+
+ if($status==='storniert')
+ {
+ if($intern){
+ return;
+ }
+ $msg = $this->app->erp->base64_url_encode("Auftrag \"$name\" ($belegnr) kann nicht storniert werden da er bereits storniert ist!
");
+ $this->app->Location->execute("index.php?module=auftrag&action=list&msg=$msg");
+ }
+
+
+ $this->app->DB->Update("UPDATE auftrag SET status='storniert' WHERE id='$id' LIMIT 1");
+ $this->app->erp->AuftragProtokoll($id,'Auftrag storniert');
+
+ // stornierungen loeschen
+ $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag' AND parameter='$id'");
+
+ // ausfuellen automatisch stornofelder
+ //stornobetrag // summe des zahlungseingangs!!!!
+ //stornogutschrift
+ //stornowareerhalten
+ //stornorueckzahlung
+ // zureuckzahlen per
+
+ // email senden?
+ if($mail==1){
+ $this->app->erp->Stornomail($id);
+ }
+
+ $recheck = $this->app->DB->Select("SELECT id FROM rechnung WHERE auftrag='$belegnr' LIMIT 1");
+
+ if($recheck <= 0)
+ {
+ // Fall 1 keine RE und LS
+ // -> stornieren und Geld zurueckueberweisen (Paypal, Kredit oder Bank)
+ // geld wird ueber ipayment oder paypal zurueckgebucht!!!
+ // negatives auftragssguthaben loescht auftragsguthaben
+ $this->app->Tpl->Add('MESSAGE','Achtung dem Kunden sofort das Geld überweisen!
');
+
+ }
+ $msg = $this->app->erp->base64_url_encode('Der Auftrag wurde storniert!
');
+
+ $this->app->erp->RunHook('auftrag_delete', 1, $id);
+ if($intern){
+ return;
+ }
+ $this->app->Location->execute('index.php?module=auftrag&action=list&msg='.$msg);
+ }
+ if($intern){
+ return;
+ }
+ $name = $this->app->DB->Select("SELECT a.name FROM auftrag b INNER JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
+ $auftragarr = $this->app->DB->SelectRow("SELECT email,projekt FROM auftrag WHERE id='$id' LIMIT 1");
+ if(!empty($auftragarr)){
+ $email = $auftragarr['email'];//$this->app->DB->Select("SELECT email FROM auftrag WHERE id='$id' LIMIT 1");
+ $projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
+ }else{
+ $email = '';
+ $projekt = 0;
+ }
+ if($projekt > 0){
+ $stornomail = $this->app->DB->Select("SELECT stornomail FROM projekt WHERE id='$projekt' LIMIT 1");
+ }else{
+ $stornomail = 0;
+ }
+
+ if($email!='') {
+ $name =$name.' '.$email;
+ }
+
+ if($email!='' && $stornomail=='1')
+ {
+ $this->app->Tpl->Set('TAB1',"Soll der Auftrag an $name jetzt storniert werden?
+
+
+
");
+ } else {
+ $this->app->Tpl->Set('TAB1',"Soll der Auftrag an $name jetzt storniert werden?
+
+
");
+ }
+
+ $this->AuftragMenu();
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ }
+
+ public function AuftragDeleteAusVersand()
+ {
+ $id = $this->app->Secure->GetGET('id');
+
+ //$rechnung = $this->app->DB->Select("SELECT rechnung FROM versand WHERE id='$id' LIMIT 1");
+ if($id > 0){
+ $lieferschein = $this->app->DB->Select("SELECT lieferschein FROM versand WHERE id='$id' LIMIT 1");
+ }else{
+ $lieferschein = 0;
+ }
+ if($lieferschein > 0){
+ $auftragid = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
+ }else{
+ $auftragid = 0;
+ }
+ if($auftragid > 0){
+ $this->app->DB->Update("UPDATE auftrag SET rma=1,status='storniert' WHERE id='$auftragid' LIMIT 1");
+ }
+ if($lieferschein > 0){
+ $auftrag = $this->app->DB->Select("SELECT auftragid FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
+ }else{
+ $auftrag = 0;
+ }
+
+ // status aendern
+ if($lieferschein > 0)
+ {
+ $this->app->DB->Update("UPDATE lieferschein SET versandart='rma',status='storniert' WHERE id='$lieferschein' LIMIT 1");
+ $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='lieferschein' AND parameter='$lieferschein'");
+ $this->app->erp->LieferscheinProtokoll($lieferschein,'Lieferschein durch Auftrag aus Versand storniert');
+ }
+
+ $this->app->erp->AuftragProtokoll($auftrag,'Auftrag aus Versand storniert');
+
+ // RMA anlegen
+
+ $msg = $this->app->erp->base64_url_encode('Der Auftrag wurde als RMA im Versand markiert!
');
+
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$auftrag&msg=$msg");
+ }
+
+
+
+ public function AuftragProtokoll()
+ {
+ $this->AuftragMenu();
+ $id = $this->app->Secure->GetGET('id');
+ $tmp = new EasyTable($this->app);
+ $tmp->Query("SELECT zeit,bearbeiter,grund FROM auftrag_protokoll WHERE auftrag='$id' ORDER by zeit DESC");
+ $tmp->DisplayNew('TAB1','Protokoll','noAction');
+ $this->app->Tpl->Parse('PAGE','tabview.tpl');
+ }
+
+
+ public function AuftragProforma()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $this->app->erp->AuftragNeuberechnen($id);
+
+ $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
+
+ if(class_exists('AuftragPDFCustom'))
+ {
+ $Brief = new AuftragPDFCustom($this->app,$projekt,'proforma');
+ }
+ else{
+ $Brief = new AuftragPDF($this->app,$projekt,'proforma');
+ }
+ $Brief->GetAuftrag($id);
+ $Brief->displayDocument();
+
+ $this->AuftragList();
+ }
+
+ public function AuftragInlinePDF()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ if($id > 0)
+ {
+ $this->app->erp->AuftragNeuberechnen($id);
+ $auftragarr = $this->app->DB->SelectRow("SELECT projekt,schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
+ }
+
+ if(!empty($auftragarr))
+ {
+ $projekt = $auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
+ $schreibschutz = $auftragarr['schreibschutz'];//$this->app->DB->Select("SELECT schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
+ }else{
+ $projekt = 0;
+ $schreibschutz = 0;
+ }
+
+ $frame = $this->app->Secure->GetGET('frame');
+ if($frame != ''){
+ $file = urlencode("../../../../index.php?module=auftrag&action=inlinepdf&id=$id");
+ echo "";
+ $this->app->ExitXentral();
+ }
+ if(class_exists('AuftragPDFCustom'))
+ {
+ $Brief = new AuftragPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app,$projekt);
+ }
+ $Brief->GetAuftrag($id);
+ $Brief->inlineDocument($schreibschutz);
+ }
+
+
+ public function AuftragPDF()
+ {
+ $id = $this->app->Secure->GetGET('id');
+
+ if($id > 0){
+ $this->app->erp->AuftragNeuberechnen($id);
+ $auftragarr = $this->app->DB->SelectRow("SELECT projekt,schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
+ }
+ if(!empty($auftragarr))
+ {
+ $projekt = $auftragarr['projekt'];
+ $schreibschutz = $auftragarr['schreibschutz'];
+ }else{
+ $projekt = 0;
+ $schreibschutz = 0;
+ }
+
+ if(class_exists('AuftragPDFCustom'))
+ {
+ $Brief = new AuftragPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app,$projekt);
+ }
+ $Brief->GetAuftrag($id);
+ $Brief->displayDocument($schreibschutz);
+ $this->AuftragList();
+ }
+
+
+ public function AuftragMenu()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ if($id > 0){
+ $this->app->erp->AuftragNeuberechnen($id);
+ $auftragarr = $this->app->DB->SelectRow("SELECT belegnr,name, status FROM auftrag WHERE id='$id' LIMIT 1");
+ }
+ $backurl = $this->app->Secure->GetGET('backurl');
+ $backurl = $this->app->erp->base64_url_decode($backurl);
+
+ $belegnr = '';
+ $name = '';
+ $status = '';
+ if(!empty($auftragarr)) {
+ $belegnr = $auftragarr['belegnr'];
+ $name = $auftragarr['name'];
+ $status = $auftragarr['status'];
+ }
+
+ if($belegnr=='0' || $belegnr=='') {
+ $belegnr ='(Entwurf)';
+ }
+
+ $this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Auftrag $belegnr");
+ // status bestell
+
+ if ($status==='angelegt') {
+ $this->app->erp->MenuEintrag("index.php?module=auftrag&action=freigabe&id=$id","Freigabe");
+ }
+
+ $this->app->erp->MenuEintrag("index.php?module=auftrag&action=edit&id=$id","Details");
+
+
+ if($status==='bestellt') {
+ $this->app->Tpl->Add('TABS',"Wareneingang Rückstände ");
+ $this->app->Tpl->Add('TABS',"Mahnstufen ");
+ }
+ $anzahldateien='';
+ if($id > 0) {
+ $anzahldateien = $this->app->erp->AnzahlDateien('Auftrag',$id);
+ $anzahldateien = $anzahldateien > 0?' ('.$anzahldateien.')':'';
+ }
+ $action = $this->app->Secure->GetGET('action');
+ $this->app->erp->MenuEintrag("index.php?module=auftrag&action=dateien&id=$id",'Dateien'.$anzahldateien);
+ // $this->app->erp->MenuEintrag("index.php?module=auftrag&action=protokoll&id=$id","Protokoll");
+
+ if($this->app->erp->Firmendaten('auftrag_eantab')=='1'){
+ $this->app->erp->MenuEintrag('index.php?module=auftrag&action=ean&id='.$id, 'Barcodescanner');
+ }
+
+ if($action==='abschicken' || $action==='zahlungsmahnungswesen'){
+ $this->app->erp->MenuEintrag("index.php?module=auftrag&action=edit&id=$id", 'Zurück zum Auftrag');
+ }
+ else if($backurl==''){
+ $this->app->erp->MenuEintrag('index.php?module=auftrag&action=list', 'Zurück zur Übersicht');
+ }
+ else{
+ $this->app->erp->MenuEintrag((string)$backurl, 'Zurück zur Übersicht');
+ }
+
+ $this->app->erp->RunMenuHook('auftrag');
+ if($id) {
+ $this->app->erp->RunMenuHook('auftrag_edit');
+ }
+ }
+
+ function AuftragPositionstabelle($parsetarget)
+ {
+ $this->app->YUI->TableSearch($parsetarget,'auftraegeoffene');
+ }
+
+
+ public function AuftragPositionen()
+ {
+ $id = $this->app->Secure->GetGET('id');
+
+ $this->app->erp->AuftragNeuberechnen($id);
+ $this->app->YUI->AARLGPositionen(false);
+ }
+
+ function DelAuftragStueckliste($id, $sid, $lvl = 0)
+ {
+ if($sid <= 0 || $id <= 0 || $lvl > 10){
+ return;
+ }
+
+ $unterartikel = $this->app->DB->SelectArr("SELECT * FROM auftrag_position WHERE explodiert_parent='$sid' ORDER BY sort");
+
+ if($unterartikel && (!empty($unterartikel)?count($unterartikel):0)>0 && $sid >0 && $id >0)
+ {
+ $cunterartikel = (!empty($unterartikel)?count($unterartikel):0);
+ for($i=0;$i<$cunterartikel;$i++)
+ {
+ $sidexplodiert = $unterartikel[$i]['id'];
+ if($sidexplodiert>0)
+ {
+ $sort = $this->app->DB->Select("SELECT sort FROM auftrag_position WHERE id='$sidexplodiert' LIMIT 1");
+ if($sort>0)
+ {
+ $this->app->DB->Delete("DELETE FROM auftrag_position WHERE id='$sidexplodiert' LIMIT 1");
+ $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE parameter='$id' AND objekt='auftrag'
+ AND artikel='".$unterartikel[$i]['artikel']."'");
+ $this->app->DB->Update("UPDATE auftrag_position SET sort=sort-1 WHERE auftrag='$id' AND sort > $sort");
+ $this->app->DB->Update("UPDATE beleg_zwischenpositionen SET pos = pos - 1 WHERE doctype = 'auftrag' AND doctypeid = '$id' AND pos >= ".($sort-1)." ");
+ }else{
+ $this->app->DB->Delete("DELETE FROM auftrag_position WHERE id='$sidexplodiert' LIMIT 1");
+ $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE parameter='$id' AND objekt='auftrag'
+ AND artikel='".$unterartikel[$i]['artikel']."'");
+ }
+ }
+ $this->DelAuftragStueckliste($id, $sidexplodiert, $lvl + 1);
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE `artikel` SET `laststorage_changed` = NOW() WHERE `id` = %d',
+ $unterartikel[$i]['artikel']
+ )
+ );
+ }
+ // alle wirklich loeschen
+ $this->app->DB->Delete("DELETE FROM auftrag_position WHERE explodiert_parent='$sid' AND auftrag='$id'");
+
+ }
+ }
+
+ public function DelAuftragPosition()
+ {
+ $sid = (int)$this->app->Secure->GetGET('sid');
+ $id = (int)$this->app->Secure->GetGET('id');
+ if($sid > 0){
+ $this->DelAuftragStueckliste($id, $sid);
+ }
+ $this->app->YUI->SortListEvent('del','auftrag_position','auftrag');
+ if($sid > 0)
+ {
+ $this->DelAuftragStueckliste($id, $sid);
+ $this->app->erp->AuftragNeuberechnen($id);
+ }
+ $this->AuftragPositionen();
+ }
+
+ public function CopyAuftragPosition()
+ {
+ $this->app->YUI->SortListEvent('copy','auftrag_position','auftrag');
+ $this->AuftragPositionen();
+ }
+
+ public function UpAuftragPosition()
+ {
+ $this->app->YUI->SortListEvent('up','auftrag_position','auftrag');
+ $this->AuftragPositionen();
+ }
+
+ public function DownAuftragPosition()
+ {
+ $this->app->YUI->SortListEvent('down','auftrag_position','auftrag');
+ $this->AuftragPositionen();
+ }
+
+ public function AuftragCheckDisplayPopup()
+ {
+ $frame = $this->app->Secure->GetGET('frame');
+ $id = $this->app->Secure->GetGET('id');
+
+ if($frame=='false')
+ {
+ // hier nur fenster größe anpassen
+ $this->app->YUI->IframeDialog(700,700);
+ } else {
+ // nach page
+
+ $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$id' LIMIT 1");
+ $projektcheckname = $this->app->DB->Select("SELECT checkname FROM projekt WHERE id='$projekt' LIMIT 1");
+
+ include_once './plugins/class.'.$projektcheckname.'.php';
+ $tmp = new $projektcheckname($this->app);
+ $tmp->CheckDisplay('PAGE',$id);
+
+ $this->app->BuildNavigation=false;
+ }
+ }
+
+
+ public function AuftragPositionenEditPopup()
+ {
+ $cmd = $this->app->Secure->GetGET('cmd');
+ if($cmd === 'getopenaccordions')
+ {
+ $accordions = $this->app->Secure->GetPOST('accordions');
+ $accordions = explode('*|*',$accordions);
+ foreach($accordions as $k => $v)
+ {
+ if(empty($v))
+ {
+ unset($accordions[$k]);
+ }else{
+ $accordions[$k] = 'auftrag_accordion'.$v;
+ }
+ }
+ $ret = [];
+ if(!empty($accordions))
+ {
+ $accordions = $this->app->User->GetParameter($accordions);
+ if(!empty($accordions))
+ {
+ foreach($accordions as $v)
+ {
+ if(!empty($v['value']))
+ {
+ $ret['accordions'][] = str_replace('auftrag_accordion','',$v['name']);
+ }
+ }
+ }
+ }
+ echo json_encode($ret);
+ $this->app->ExitXentral();
+ }
+ if($cmd === 'setaccordion')
+ {
+ $name = $this->app->Secure->GetPOST('name');
+ $active = $this->app->Secure->GetPOST('active');
+ $this->app->User->SetParameter('auftrag_accordion'.$name, $active);
+ echo json_encode(array('success'=>1));
+ $this->app->ExitXentral();
+ }
+ $id = $this->app->Secure->GetGET('id');
+ $fmodul = $this->app->Secure->GetGET('fmodul');
+ $artikel= $this->app->DB->Select("SELECT artikel FROM auftrag_position WHERE id='$id' LIMIT 1");
+
+ // nach page inhalt des dialogs ausgeben
+ $filename = 'widgets/widget.auftag_position_custom.php';
+ if(is_file($filename))
+ {
+ include_once $filename;
+ $widget = new WidgetAuftrag_positionCustom($this->app,'PAGE');
+ } else {
+ $widget = new WidgetAuftrag_position($this->app,'PAGE');
+ }
+
+ $sid= $this->app->DB->Select("SELECT auftrag FROM auftrag_position WHERE id='$id' LIMIT 1");
+ $widget->form->SpecialActionAfterExecute('close_refresh',
+ "index.php?module=auftrag&action=positionen&id=$sid&fmodul=$fmodul");
+ $widget->Edit();
+ $this->app->BuildNavigation=false;
+ }
+
+
+ function AuftragEdit()
+ {
+ $action = $this->app->Secure->GetGET("action");
+ $id = $this->app->Secure->GetGET("id");
+ $storno = $this->app->Secure->GetGET("storno");
+
+ // zum aendern vom Vertrieb
+ $sid = $this->app->Secure->GetGET("sid");
+ $cmd = $this->app->Secure->GetGET("cmd");
+ if($this->app->Secure->GetPOST('resetextsoll')) {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE auftrag SET extsoll = 0 WHERE id = %d',
+ $id
+ )
+ );
+ $this->app->erp->AuftragNeuberechnen($id);
+ }
+ $this->app->erp->RunHook('auftrag_edit_hook1',1, $id);
+ if($cmd === 'dadown')
+ {
+ $erg['status'] = 0;
+ $daid = $this->app->Secure->GetPOST("da_id");
+ $check = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.id = '$daid' and d.geloescht <> 1 LIMIT 1");
+ if($check)
+ {
+ $sort = $check[0]['sort']+1;
+ if($sort > 1)
+ {
+ $check2 = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.objekt like 'angebot' AND ds.sort = '$sort' AND d.geloescht <> 1 AND ds.parameter = '$id' LIMIT 1");
+ if($check2)
+ {
+ $erg['status'] = 1;
+ $erg['from'] = $check2[0]['id'];
+ $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = '$daid' LIMIT 1");
+ $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = '".$check2[0]['id']."' LIMIT 1");
+ }
+ }
+ }
+ echo json_encode($erg);
+ $this->app->ExitXentral();
+ }
+
+ if($cmd === 'daup')
+ {
+ $erg['status'] = 0;
+ $daid = $this->app->Secure->GetPOST("da_id");
+ $check = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.id = '$daid' and d.geloescht <> 1 LIMIT 1");
+ if($check)
+ {
+ $sort = $check[0]['sort']-1;
+ if($sort > 0)
+ {
+ $check2 = $this->app->DB->SelectArr("SELECT ds.* FROM datei_stichwoerter ds INNER JOIN datei d on ds.datei = d.id WHERE ds.objekt like 'auftrag' AND ds.sort = '$sort' AND d.geloescht <> 1 AND ds.parameter = '$id' LIMIT 1");
+ if($check2)
+ {
+ $erg['status'] = 1;
+ $erg['from'] = $check2[0]['id'];
+ $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort - 1 WHERE id = '$daid' LIMIT 1");
+ $this->app->DB->Update("UPDATE datei_stichwoerter SET sort = sort + 1 WHERE id = '".$check2[0]['id']."' LIMIT 1");
+ }
+ }
+ }
+ echo json_encode($erg);
+ $this->app->ExitXentral();
+ }
+
+ if($this->app->erp->VertriebAendern('auftrag',$id,$cmd,$sid)){
+ return;
+ }
+
+ if($this->app->erp->InnendienstAendern('auftrag',$id,$cmd,$sid)){
+ return;
+ }
+
+
+ if($this->app->erp->DisableModul('auftrag',$id)) {
+ //$this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zurück zur Übersicht");
+ $this->AuftragMenu();
+ return;
+ }
+ $adresse = $this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
+ if($adresse <=0) {
+ $this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });');
+ $this->app->Tpl->Set('MESSAGE',"Achtung! Dieses Dokument ist mit keiner Kunden-Nr. verlinkt. Bitte geben Sie die Kundennummer an und klicken Sie übernehmen oder Speichern!
");
+ }
+ $this->app->erp->InfoAuftragsErfassung("auftrag",$id);
+ $teilArr = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT teillieferungvon, teillieferungnummer, belegnr FROM auftrag WHERE id=%d LIMIT 1',
+ $id
+ )
+ );
+ $teillieferungvon= $teilArr['teillieferungvon'];//$this->app->DB->Select("SELECT teillieferungvon FROM auftrag WHERE id='$id' LIMIT 1");
+ $teillieferungnummer= $teilArr['teillieferungnummer'];//$this->app->DB->Select("SELECT teillieferungnummer FROM auftrag WHERE id='$id' LIMIT 1");
+
+ $hauptid = $id;
+ $timeout = 0;
+ while($timeout < 100) {
+ $checkteillieferungvon = $this->app->DB->Select(
+ sprintf(
+ 'SELECT teillieferungvon FROM auftrag WHERE id=%d LIMIT 1',
+ $hauptid
+ )
+ );
+ if($checkteillieferungvon > 0) {
+ $hauptid = $checkteillieferungvon;
+ }
+ else {
+ break;
+ }
+ $timeout++;
+ }
+ $teillieferungnummermax = 0;
+ $anzahlteillieferungen = $this->app->DB->SelectArr(
+ sprintf(
+ 'SELECT id,belegnr,teillieferungnummer FROM auftrag WHERE teillieferungvon=%d ORDER BY belegnr',
+ $id
+ )
+ );
+ if(!empty($anzahlteillieferungen)) {
+ $canzahlteillieferungen = (!empty($anzahlteillieferungen)?count($anzahlteillieferungen):0);
+ for($ati=0;$ati<$canzahlteillieferungen;$ati++) {
+ if($canzahlteillieferungen[$ati]['teillieferungnummer'] + 1 > $teillieferungnummermax) {
+ $teillieferungnummermax = $canzahlteillieferungen[$ati]['teillieferungnummer'] + 1;
+ }
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ ''
+ );
+ }
+ }
+ $teillieferung_von_auftrag_nummer = $teilArr['belegnr'];
+
+ if($teillieferungvon>0) {
+ if($hauptid != $id) {
+ $teillieferungnummermax = $this->app->DB->Select(
+ "SELECT MAX(teillieferungnummer)+1 FROM auftrag WHERE teillieferungvon='$hauptid' LIMIT 1"
+ );
+ $teillieferung_von_auftrag_nummer = $this->app->DB->Select(
+ "SELECT belegnr FROM auftrag WHERE id='$hauptid' LIMIT 1"
+ );
+ }
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ "Dies ist Teilauftrag Nr. $teillieferungnummer (Aktuell gesplittet in $teillieferungnummermax Aufträge). Der ursprüngliche Auftrag war:
$teillieferung_von_auftrag_nummer "
+ );
+ }
+
+
+ $check = $this->app->DB->SelectPairs(
+ "SELECT b.id, b.belegnr
+ FROM auftrag_position ap
+ INNER JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id
+ INNER JOIN bestellung b ON bp.bestellung = b.id
+ WHERE ap.auftrag='$id'
+ GROUP BY b.belegnr, b.id
+ ORDER BY b.belegnr, b.id"
+ );
+ if($check) {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ "");
+ }
+
+
+ if($this->app->erp->ModulVorhanden('lieferkette')) {
+ $auftraglieferkette = $this->app->DB->Select(
+ "SELECT l.auftrag
+ FROM lieferkette l
+ INNER JOIN lieferkette_bestellung lb
+ ON l.id = lb.lieferkette AND lb.belegtyp = 'auftrag' AND belegid = '$id' AND l.auftrag > 0
+ LIMIT 1"
+ );
+ if($auftraglieferkette) {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ ''
+ );
+ }
+ }
+
+ $orderRow = $this->app->DB->SelectRow(sprintf('SELECT * FROM auftrag WHERE id = %d', $id));
+
+ $zahlungsweise= $orderRow['zahlungsweise'];//$this->app->DB->Select("SELECT zahlungsweise FROM auftrag WHERE id='$id' LIMIT 1");
+ $zahlungszieltage= $orderRow['zahlungszieltage'];//$this->app->DB->Select("SELECT zahlungszieltage FROM auftrag WHERE id='$id' LIMIT 1");
+
+ $status= $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+ $schreibschutz= $orderRow['schreibschutz'];//$this->app->DB->Select("SELECT schreibschutz FROM auftrag WHERE id='$id' LIMIT 1");
+
+
+ $adresse= $orderRow['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
+ $liefersperre= $this->app->DB->Select("SELECT liefersperre FROM adresse WHERE id='$adresse' LIMIT 1");
+
+ if($id > 0 && $this->app->DB->Select(
+ sprintf(
+ 'SELECT id FROM auftrag WHERE schreibschutz =1 AND zuarchivieren = 1 AND id = %d',
+ $id
+ )
+ )
+ ) {
+ $this->app->erp->PDFArchivieren('auftrag', $id, true);
+ }
+
+ if($status !== 'angelegt' && $status !== 'angelegta' && $status !== 'a') {
+ $Brief = new Briefpapier($this->app);
+
+ if($Brief->zuArchivieren($id, 'auftrag')) {
+ $this->app->Tpl->Add('MESSAGE',"Der Auftrag ist noch nicht archiviert! Bitte versenden oder manuell archivieren.
");
+ }
+ elseif(!$this->app->DB->Select("SELECT versendet FROM auftrag WHERE id = '$id' LIMIT 1")) {
+ $this->app->Tpl->Add('MESSAGE',"Der Auftrag wurde noch nicht versendet!
");
+ }
+ }
+
+ if($liefersperre=='1' && ($status==='freigegeben' || $status==='angelegt')) {
+ $this->app->Tpl->Add('MESSAGE','Achtung: Der Kunde hat eine Liefersperre!
');
+ }
+ $this->app->erp->AuftragEinzelnBerechnen($id);
+ $this->app->erp->AuftragNeuberechnen($id);
+ $this->app->erp->AuftragAutoversandBerechnen($id); // heute wieder eingebaut 09.03.2019 BS weil Termin ampel falsch
+
+ $this->app->erp->DisableVerband();
+ $this->AuftragMiniDetail('MINIDETAIL',true);
+
+ $icons = $this->app->YUI->IconsSQL();
+ if(strpos($icons,'aac.status')) {
+ $icons = $this->app->DB->Select("SELECT $icons FROM auftrag a LEFT JOIN `auftragsampel_auftrag_cache` aac ON a.id = aac.auftrag WHERE a.id='$id' LIMIT 1");
+ }
+ else{
+ $icons = $this->app->DB->Select("SELECT $icons FROM auftrag a WHERE a.id='$id' LIMIT 1");
+ }
+ $this->app->Tpl->Set('STATUSICONS',$icons);
+
+ $this->app->YUI->AARLGPositionen();
+
+ $orderRow = $this->app->DB->SelectRow(sprintf('SELECT * FROM auftrag WHERE id = %d', $id));
+ $status= $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+ if($status=='') {
+ $this->app->DB->Update("UPDATE auftrag SET status='angelegt' WHERE id='$id' LIMIT 1");
+ $orderRow['status'] = $this->app->DB->Select(sprintf('SELECT status FROM auftrag WHERE id = %d', $id));
+ }
+
+ $tmpcheckversand = $orderRow['versandart'];//$this->app->DB->Select("SELECT versandart FROM auftrag WHERE id='$id' LIMIT 1");
+ if($tmpcheckversand==='packstation' && $orderRow['abweichendelieferadresse'] != 0) {
+ $this->app->DB->Update("UPDATE auftrag SET abweichendelieferadresse='0' WHERE id='$id' LIMIT 1");
+ }
+
+ $status = $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+ $nummer = $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
+ $adresse = $orderRow['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id='$id' LIMIT 1");
+
+ $lieferant = $orderRow['lieferant'];//$this->app->DB->Select("SELECT lieferant FROM auftrag WHERE id='$id' LIMIT 1");
+ $kundennummer = $this->app->DB->Select("SELECT kundennummer FROM adresse WHERE id='$adresse' LIMIT 1");
+ $lieferantenretoure = $orderRow['lieferantenauftrag'];//$this->app->DB->Select("SELECT lieferantenauftrag FROM auftrag WHERE id='$id' LIMIT 1");
+ if($lieferantenretoure=='1' && $lieferant<=0) {
+ $this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });');
+ $this->app->Tpl->Set('MESSAGE',"Pflichtfeld! Bitte geben Sie eine Lieferanten-Nr. an!
");
+ }
+ else if ($adresse <=0 && $lieferantenretoure!='1') {
+ $this->app->Tpl->Add('JAVASCRIPT','$(document).ready(function() { if(document.getElementById("adresse"))document.getElementById("adresse").focus(); });');
+ $this->app->Tpl->Set('MESSAGE',"Pflichtfeld! Bitte geben Sie eine Kunden-Nr. an!
");
+ }
+
+ if($schreibschutz!='1')// && $this->app->erp->RechteVorhanden("auftrag","schreibschutz"))
+ {
+ $this->app->erp->AnsprechpartnerButton($adresse);
+ $this->app->erp->LieferadresseButton($adresse);
+ $this->app->erp->AnsprechpartnerAlsLieferadresseButton($adresse);
+ $this->app->erp->AdresseAlsLieferadresseButton($adresse);
+ }
+
+ if($nummer!='') {
+ $this->app->Tpl->Set('NUMMER',$nummer);
+ if($this->app->erp->RechteVorhanden('adresse','edit')){
+ $this->app->Tpl->Set(
+ 'KUNDE',
+ " Kd-Nr. "
+ . $kundennummer . " "
+ );
+ }
+ else{
+ $this->app->Tpl->Set(
+ 'KUNDE',
+ ' Kd-Nr. ' . $kundennummer
+ );
+ }
+ }
+
+ $this->app->Tpl->Set('ICONMENU',$this->AuftragIconMenu($id));
+ $this->app->Tpl->Set('ICONMENU2',$this->AuftragIconMenu($id,2));
+
+ if($status==='angelegt')
+ {
+ $this->app->Tpl->Set('ABGESCHLOSSENENABLE',""); //TODO
+ }
+
+ if($status!=='storniert')
+ {
+ $this->app->Tpl->Set('STORNOENABLE','');
+ }
+
+ $stornobezahlt = $orderRow['stornobezahlt'];// $this->app->DB->Select("SELECT stornobezahlt FROM auftrag WHERE id='$id' LIMIT 1");
+
+ if($storno!=='abschluss' && $stornobezahlt==0) {
+ $this->app->Tpl->Set('STORNORETOUREENABLE','');
+ }
+ else {
+ $this->app->Tpl->Set('HIDDENFIELD'," ");
+ // bearbeiter
+ $stornobezahltvon = $orderRow['stornobezahltvon'];//$this->app->DB->Select("SELECT stornobezahltvon FROM auftrag WHERE id='$id' LIMIT 1");
+ $stornobezahltam = $orderRow['stornobezahltam'];//$this->app->DB->Select("SELECT stornobezahltam FROM auftrag WHERE id='$id' LIMIT 1");
+ if($stornobezahltvon==''){
+ $this->app->DB->Update(
+ "UPDATE auftrag SET stornobezahltvon='"
+ . $this->app->DB->real_escape_string($this->app->User->GetName())
+ . "' WHERE id='$id' LIMIT 1"
+ );
+ }
+ if($stornobezahltam=="0000-00-00"){
+ $this->app->DB->Update("UPDATE auftrag SET stornobezahltam=NOW() WHERE id='$id' LIMIT 1");
+ }
+ }
+
+ $this->AuftragAmpel($id,'AMPEL');
+ $optional = '';
+
+ $lieferscheine = $this->app->DB->SelectPairs(
+ "SELECT id,belegnr FROM lieferschein WHERE auftragid='$id' AND auftragid > 0"
+ );
+ $deliveryNoteIds = array_keys($lieferscheine);
+ $deliveryNoteIdsImplode = implode(',', $deliveryNoteIds);
+ if(!empty($lieferscheine)) {
+ foreach($lieferscheine as $deliveryNoteId => $deliveryNoteNumber) {
+ $optional .= " ";
+ }
+ }
+
+ $rechnungid = $this->app->DB->Select("SELECT rechnungid FROM auftrag WHERE id = '$id' LIMIT 1");
+ $rechnungen = $this->app->DB->SelectPairs(
+ "SELECT id,belegnr FROM rechnung WHERE (auftragid='$id' AND auftragid > 0) OR id = '$rechnungid'"
+ );
+ if(!empty($rechnungen)) {
+ foreach($rechnungen as $invoiceId => $invoiceNumber) {
+ $optional .= " ";
+ }
+ }
+
+ $projekt = $this->app->DB->Select("SELECT projekt from auftrag where id = '$id' LIMIT 1");
+ if($schreibschutz=='1' && $this->app->erp->RechteVorhanden('auftrag','schreibschutz')) {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ "Dieser Auftrag ist schreibgeschützt und darf daher nicht bearbeitet werden! $optional
"
+ );
+ // $this->app->erp->CommonReadonly();
+ }
+ else {
+ if(isset($optional) && (string)$optional !== '') {
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ "Zu diesem Auftrag gibt es folgende Dokumente. $optional
"
+ );
+ }
+ }
+ if($schreibschutz=='1') {
+ $this->app->erp->CommonReadonly();
+ }
+
+ if($schreibschutz != '1'){
+ if($this->app->erp->Firmendaten('schnellanlegen') == '1'){
+ $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '
+ ');
+ $this->app->Tpl->Set('BUTTON_UEBERNEHMEN2', '
+
+ ');
+
+ }else{
+ $this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '
+
+ ');
+
+ $this->app->Tpl->Set('BUTTON_UEBERNEHMEN2', '
+
+ ');
+
+ }
+ }
+ // immer wenn sich der lieferant genändert hat standartwerte setzen
+ if($this->app->Secure->GetPOST('adresse')!='') {
+ $tmp = $this->app->Secure->GetPOST('adresse');
+ $kundennummer = $this->app->erp->FirstTillSpace($tmp);
+ $filter_projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' LIMIT 1");
+ $adresse = $this->app->DB->Select(
+ "SELECT id
+ FROM adresse
+ WHERE kundennummer='$kundennummer' AND geloescht=0 "
+ .$this->app->erp->ProjektRechte('projekt', true, 'vertrieb')."
+ ORDER by ".($filter_projekt?" projekt = '$filter_projekt' DESC, ":"")." projekt
+ LIMIT 1"
+ );
+
+ $uebernehmen =$this->app->Secure->GetPOST('uebernehmen');
+ if($uebernehmen=='1' && $schreibschutz != '1') {
+ // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!!
+ $this->app->erp->LoadAuftragStandardwerte($id,$adresse);
+ $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$id' LIMIT 1");
+ if($projekt != $filter_projekt) {
+ $deactivateAutoversand = (int)$this->app->erp->Projektdaten($projekt,'deactivateautoshipping');
+ if($deactivateAutoversand) {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE auftrag SET autoversand = 0 WHERE autoversand = 1 AND schreibschutz = 0 AND id = %d',
+ $id
+ )
+ );
+ }
+ }
+ $projektlager = $this->app->DB->Select("SELECT standardlager FROM projekt WHERE id = '$projekt' LIMIT 1");
+ $this->app->DB->Update("UPDATE auftrag SET standardlager = '$projektlager' WHERE id = '$id' LIMIT 1");
+ $this->app->DB->Update("UPDATE auftrag SET lieferantenauftrag=0 WHERE id='$id'");
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id");
+ }
+ }
+
+ if($this->app->Secure->GetPOST('lieferant')!='') {
+ $tmplieferant = $this->app->Secure->GetPOST('lieferant');
+ $lieferantennummer = $this->app->erp->FirstTillSpace($tmplieferant);
+
+ $adresselieferant = $this->app->DB->Select("SELECT id FROM adresse WHERE lieferantennummer='$lieferantennummer' AND lieferantennummer!='' AND geloescht=0 LIMIT 1");
+
+ $uebernehmen2 =$this->app->Secure->GetPOST('uebernehmen2');
+ if($uebernehmen2=='1' && $schreibschutz != '1') {
+ // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!!
+ $this->app->DB->Update("UPDATE auftrag SET lieferantenauftrag=1 WHERE id='$id'");
+ $this->app->erp->LoadAuftragStandardwerte($id,$adresselieferant,true);
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id");
+ }
+ }
+
+ // easy table mit arbeitspaketen YUI als template
+ $table = new EasyTable($this->app);
+ $table->Query(
+ "SELECT ap.bezeichnung as artikel, ap.nummer as Nummer, ap.menge,
+ (SELECT TRIM(SUM(l.menge))+0
+ FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel
+ ) as Lagerbestand, ap.geliefert ausgeliefert,ap.vpe as VPE
+ FROM auftrag_position ap
+ WHERE ap.auftrag='$id'"
+ );
+ $table->DisplayNew('POSITIONEN','VPE','noAction');
+ $summe = $this->app->DB->Select(
+ "SELECT FORMAT(SUM(menge*preis),2) FROM auftrag_position
+ WHERE auftrag='$id'"
+ );
+
+ $waehrung = $this->app->DB->Select(
+ "SELECT waehrung FROM auftrag_position
+ WHERE auftrag='$id' LIMIT 1"
+ );
+
+ $orderRow = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT * FROM auftrag WHERE id = %d',
+ $id
+ )
+ );
+
+ $summebrutto = $orderRow['gesamtsumme'];//$this->app->DB->Select("SELECT gesamtsumme FROM auftrag WHERE id='$id' LIMIT 1");
+ $ust_befreit_check = $orderRow['ust_befreit'];//$this->app->DB->Select("SELECT ust_befreit FROM auftrag WHERE id='$id' LIMIT 1");
+
+ if($ust_befreit_check==1){
+ $tmp = 'Kunde ist UST befreit';
+ }
+ else{
+ $tmp = 'Kunde zahlt mit UST';
+ }
+
+ if($summe > 0){
+ $this->app->Tpl->Add(
+ 'POSITIONEN',
+ "Zu zahlen: $summe (netto) $summebrutto (brutto) $waehrung ($tmp) "
+ );
+ }
+
+ $vertrieb = $orderRow['vertrieb'];//$this->app->DB->Select("SELECT vertrieb FROM auftrag WHERE id='$id' LIMIT 1");
+ $this->app->Tpl->Set('VERTRIEB'," ");
+
+ $belegnr= $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
+ $this->app->Tpl->Set('BELEGNR'," ");
+
+ $status = $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+ $this->app->Tpl->Set('STATUS'," ");
+
+ // ENDE
+
+
+ //alle RE und LS zu diesem Auftrag
+ $auftragsnummer = $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
+ $anzahl = $this->app->DB->Select(
+ "SELECT COUNT(r.belegnr)
+ FROM rechnung r
+ WHERE r.adresse='$adresse' AND r.auftrag='$auftragsnummer' AND r.auftrag!=''");
+
+ if($anzahl >0) {
+ $this->app->Tpl->Set('AUFTRAGSDOKUMENTE',"Rechnungen und Lieferscheine ");
+
+ $table = new EasyTable($this->app);
+ $table->Query(
+ "SELECT r.belegnr as rechnung, DATE_FORMAT(r.datum,'%d.%m.%Y') as ausgang,
+ l.belegnr as lieferschein, r.soll as betrag
+ FROM rechnung r
+ LEFT JOIN lieferschein l ON r.lieferschein=l.id
+ WHERE r.adresse='$adresse' AND r.auftrag='$auftragsnummer' AND r.auftrag!=''"
+ );
+ $table->DisplayNew('AUFTRAGSDOKUMENTE',"Betrag","noAction");
+
+ $this->app->Tpl->Add('AUFTRAGSDOKUMENTE'," ");
+ }
+
+ //suche alle LS zu diesem Auftrag
+ if($auftragsnummer>0) {
+ $trackingInfo = $this->AuftragTrackingTabelle(empty($deliveryNoteIds)?0: $id);
+ $this->app->Tpl->Set('VERSAND', $trackingInfo);
+ }
+
+ // UST
+ $ust_ok = $orderRow['ust_ok'];//$this->app->DB->Select("SELECT ust_ok FROM auftrag WHERE id='$id' LIMIT 1");
+ $ust_befreit = $orderRow['ust_befreit'];//$this->app->DB->Select("SELECT ust_befreit FROM auftrag WHERE id='$id' LIMIT 1");
+
+ $ustprfid = $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"
+ );
+
+ if($ust_befreit==0) {
+ $this->app->Tpl->Set('USTPRUEFUNG','Abgabe in Inland');
+ }
+ else if ($ust_befreit==1) {
+
+ if($ust_ok == 1) {
+ $datum = $this->app->DB->Select("SELECT briefbestellt FROM ustprf WHERE id='$ustprfid' LIMIT 1");
+ $datum = $this->app->String->Convert($datum,"%1-%2-%3","%3.%2.%1");
+ $this->app->Tpl->Set('USTPRUEFUNG',"EU-Lieferung mit Pruefung Brief bestellt: $datum");
+ }
+ else{
+ $this->app->Tpl->Set('USTPRUEFUNG', "Pruefung notwendig! (Starten )");
+ }
+ }
+ else {
+ if($ust_ok == 1) {
+ $this->app->Tpl->Set('USTPRUEFUNG', 'Freigabe Export (Drittland)');
+ }
+ else{
+ $this->app->Tpl->Set('USTPRUEFUNG', 'Fehlende Freigabe Export!');
+ }
+ }
+
+ $versandart = $orderRow['versandart'];// $this->app->DB->Select("SELECT versandart FROM auftrag WHERE id='$id' LIMIT 1");
+ if($this->app->Secure->GetPOST('versandart')!='') {
+ $versandart = $this->app->Secure->GetPOST('versandart');
+ }
+ $this->app->Tpl->Set('PACKSTATION','none');
+ if($versandart==='packstation') {
+ $this->app->Tpl->Set('PACKSTATION','');
+ }
+
+ $abweichendelieferadresse= $orderRow['abweichendelieferadresse'];//$this->app->DB->Select("SELECT abweichendelieferadresse FROM auftrag WHERE id='$id' LIMIT 1");
+ if($this->app->Secure->GetPOST('abweichendelieferadresse')!='') {
+ $versandart = $this->app->Secure->GetPOST('abweichendelieferadresse');
+ }
+ $this->app->Tpl->Set('ABWEICHENDELIEFERADRESSESTYLE','none');
+ if($abweichendelieferadresse=='1') {
+ $this->app->Tpl->Set('ABWEICHENDELIEFERADRESSESTYLE','');
+ }
+ if($id && $status !== 'storniert'
+ && $auftragsnummer && $this->app->erp->RechteVorhanden('auftrag','paypal')
+ && false !== $this->app->erp->SendPaypalFromAuftrag($id, true)
+ ) {
+ $this->app->Tpl->Add(
+ 'BUTTON_UEBERNEHMEN',
+ ' '
+ );
+ }
+
+ $this->app->Tpl->Set('AKTIV_TAB1','selected');
+ $sollExtSoll = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT extsoll, gesamtsumme
+ FROM auftrag
+ WHERE id = %d AND schreibschutz = 0 AND status = 'abgeschlossen' AND extsoll <> 0",
+ $id
+ )
+ );
+ if(!empty($sollExtSoll['extsoll']) && $sollExtSoll['extsoll'] == $sollExtSoll['gesamtsumme']) {
+ $sollExtSoll['gesamtsumme'] = $this->app->DB->Select(
+ sprintf(
+ 'SELECT ROUND(SUM(`umsatz_brutto_gesamt`),2) FROM `auftrag_position` WHERE `auftrag` = %d ',
+ $id
+ )
+ );
+ }
+ if(!empty($sollExtSoll) && $sollExtSoll['gesamtsumme'] != $sollExtSoll['extsoll']) {
+ $extsoll = $sollExtSoll['extsoll'];
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ ''
+ );
+ }
+ parent::AuftragEdit();
+ $this->app->erp->CheckBearbeiter($id,'auftrag');
+ $this->app->erp->CheckVertrieb($id,'auftrag');
+
+ if($this->app->Secure->GetPOST('speichern')!='' && $storno==''){
+ $msg = $this->app->Secure->GetGET('msg');
+ if($this->app->Secure->GetGET('msg')==''){
+ $msg .= $this->app->Tpl->Get('MESSAGE').' ';
+ $msg = $this->app->erp->base64_url_encode($msg);
+ }
+
+ $this->app->Location->execute(
+ "index.php?module=auftrag&action=edit&id=$id&msg=$msg"
+ .($this->app->Secure->GetGET('msgid')?'&msgid='.(int)$this->app->Secure->GetGET('msgid'):'')
+ );
+ }
+ if ($this->app->Secure->GetPOST('speichern')!='' && $storno==='abschluss'){
+ //header("Location: index.php?module=stornierungen&action=list");
+ $this->app->ExitXentral();
+ }
+
+
+ if($this->app->Secure->GetPOST('weiter')!='') {
+ $this->app->Location->execute("index.php?module=auftrag&action=positionen&id=$id");
+ }
+
+ $this->AuftragMenu();
+ }
+
+ function AuftragUstStart()
+ {
+ $frame = $this->app->Secure->GetGET("frame");
+
+ if($frame=="false")
+ {
+ // hier nur fenster größe anpassen
+ $this->app->YUI->IframeDialog(600,320);
+ } else {
+ $this->app->BuildNavigation=false;
+ }
+ }
+
+
+ function AuftragCreate()
+ {
+ //$this->app->Tpl->Add(KURZUEBERSCHRIFT,"Auftrag");
+ $this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zurück zur Übersicht");
+
+ $anlegen = $this->app->Secure->GetGET("anlegen");
+
+ if($this->app->erp->Firmendaten("schnellanlegen")=="1" && $anlegen!="1")
+ {
+ $this->app->Location->execute("index.php?module=auftrag&action=create&anlegen=1");
+ }
+
+ if($anlegen != '')
+ {
+ $id = $this->app->erp->CreateAuftrag();
+ $deactivateautoshipping = $this->app->DB->Select(
+ sprintf(
+ 'SELECT pr.deactivateautoshipping
+ FROM auftrag AS o
+ INNER JOIN projekt AS pr ON o.projekt = pr.id
+ WHERE o.id = %d',
+ $id
+ )
+ );
+ if($deactivateautoshipping) {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE auftrag SET autoversand = 0 WHERE id = %d',
+ $id
+ )
+ );
+ }
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id");
+ }
+
+ $this->app->Tpl->Set('MESSAGE',"Möchten Sie ein Auftrag jetzt anlegen?
+
");
+ $this->app->Tpl->Set('TAB1',"
+
+
+
+ Aufträge in Bearbeitung
+
+
+ Offene Aufträge, die durch andere Mitarbeiter in Bearbeitung sind.
+
+
+
+
+
+ [AUFTRAGE]");
+
+
+ $this->app->Tpl->Set('AKTIV_TAB1',"selected");
+
+ $this->app->YUI->TableSearch('AUFTRAGE',"auftraegeinbearbeitung");
+
+ $this->app->Tpl->Parse('PAGE',"tabview.tpl");
+ }
+
+
+
+
+ function AuftragReservieren()
+ {
+ $id = $this->app->Secure->GetGET('id');
+ $this->app->erp->AuftragEinzelnBerechnen($id,true);
+ $msg = $this->app->erp->base64_url_encode("Artilel für diesen Auftrag reserviert!
");
+
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
+ }
+
+ /**
+ * @param int $kommissionierungId
+ */
+ public function updateCase($kommissionierungId)
+ {
+ if($kommissionierungId <= 0) {
+ return;
+ }
+ $deliveryNotes = $this->app->DB->SelectArr(
+ sprintf(
+ 'SELECT id, kiste FROM lieferschein WHERE kommissionierung = %d ORDER BY id',
+ $kommissionierungId
+ )
+ );
+ if(empty($deliveryNotes)) {
+ return;
+ }
+
+ $kiste = 0;
+ foreach($deliveryNotes as $deliveryNote) {
+ $kiste++;
+ if($deliveryNote['kiste'] != $kiste) {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE lieferschein SET kiste = %d WHERE id = %d',
+ $kiste, $deliveryNote['id']
+ )
+ );
+ }
+ }
+ }
+
+ /**
+ * @param array $orders
+ * @param int $projectId
+ * @param int $cronjobCommissionId
+ * @param int $cronjobId
+ * @param int $commissionId
+ *
+ * @return int
+ */
+ public function sendOrders($orders, $projectId, $cronjobCommissionId, $cronjobId = 0, $commissionId = 0)
+ {
+ $return = 0;
+ if(empty($orders) || !is_array($orders)) {
+ return $return;
+ }
+
+ $commissionName = empty($cronjobCommissionId)?'': $this->app->DB->real_escape_string(
+ $this->app->DB->Select(
+ sprintf(
+ 'SELECT `bezeichnung` FROM `cronjob_kommissionierung` WHERE `id` = %d',
+ $cronjobCommissionId
+ )
+ )
+ );
+ $this->kommissionierung = $commissionId > 0
+ ? $commissionId
+ : $this->app->erp->GetNextKommissionierung($commissionName);
+ foreach($orders as $auftrag) {
+ if(
+ $auftragRow = $this->app->DB->SelectRow(
+ sprintf(
+ "SELECT a.id, a.belegnr
+ FROM auftrag AS a
+ WHERE (cronjobkommissionierung = '$cronjobCommissionId' OR 0 = '$cronjobCommissionId')
+ AND a.id != ''
+ AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.inbearbeitung=0
+ AND a.nachlieferung!='1' AND a.autoversand='1' AND a.liefertermin_ok='1' AND kreditlimit_ok='1'
+ AND liefersperre_ok='1'
+ AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
+ AND a.id = %d
+ GROUP BY a.id
+ ORDER by a.id",
+ $auftrag
+ )
+ )
+ ) {
+ if($cronjobId > 0){
+ $this->app->erp->ProzessstarterStatus(
+ 'Auftrag Versand Auftrag: ' . $auftragRow['belegnr'], $cronjobId
+ );
+ }
+ //$this->app->erp->AuftragEinzelnBerechnen($auftrag);
+ $this->app->DB->Update(
+ "UPDATE prozessstarter
+ SET mutex = 1 , mutexcounter = 0, letzteausfuerhung = now()
+ WHERE (parameter = 'autoversand_standard' OR parameter = 'autoversand_manuell') AND aktiv = 1"
+ );
+ $erg = null;
+ $this->app->erp->RunHook('VorAutoversand', 1, $auftrag);
+ if(
+ $this->app->DB->Select(
+ sprintf(
+ "SELECT a.id
+ FROM auftrag AS a
+ WHERE a.id = %d AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben'
+ AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.autoversand='1' AND a.liefertermin_ok='1'
+ AND kreditlimit_ok='1' AND liefersperre_ok='1'
+ AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
+ GROUP BY a.id",
+ $auftrag
+ )
+ )
+ ) {
+ $this->AuftragVersand($auftrag, false, $erg, true);
+ $return++;
+ }
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE auftrag SET cronjobkommissionierung = 0 WHERE id = %d LIMIT 1',
+ $auftrag
+ )
+ );
+ }
+ }
+
+ if(
+ empty($projectId)
+ || empty($this->kommissionierung)
+ || !$this->app->DB->Select(
+ sprintf(
+ 'SELECT `id` FROM `lieferschein` WHERE `kommissionierung` = %d LIMIT 1',
+ $this->kommissionierung
+ )
+ )
+ ) {
+ return $return;
+ }
+
+ $kommissionierlistestufe1 = $this->app->erp->Projektdaten($projectId, 'kommissionierlistestufe1');
+ if($kommissionierlistestufe1) {
+ $druckercode = $this->app->erp->Projektdaten($projectId, 'druckerlogistikstufe1');
+ if($druckercode <=0) {
+ $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
+ }
+ $kommissionierlistestufe1menge = $this->app->erp->Projektdaten(
+ $projectId, 'kommissionierlistestufe1menge'
+ );
+ if($kommissionierlistestufe1menge < 1) {
+ $kommissionierlistestufe1menge = 1;
+ }
+ /** @var Kommissionierlauf $obj2 */
+ $obj2 = $this->app->erp->LoadModul('kommissionierlauf');
+ if($obj2 && $this->kommissionierung) {
+ if($cronjobId > 0){
+ $this->app->erp->ProzessstarterStatus(
+ 'KommissionierlaufPDF: ' . $this->kommissionierung, $cronjobId
+ );
+ }
+ $tmpfile = $obj2->KommissionierlaufPDF($this->kommissionierung);
+ for($mengedruck=$kommissionierlistestufe1menge;$mengedruck > 0;$mengedruck--) {
+ $this->app->printer->Drucken($druckercode,$tmpfile);
+ }
+ unlink($tmpfile);
+ }
+ }
+
+ return $return;
+ }
+
+ /*
+ order processed true or false
+ */
+
+ public function AuftragVersand($id='', $ignoriereliefertermin = false, &$ergebnis = null, $paketmarkedrucken = false)
+ {
+ if(!$this->kommissionierung)
+ {
+ $this->kommissionierung = $this->app->erp->GetNextKommissionierung();
+ }
+ // mit der funktionen koennen nur erstauftraege abgewickelt koennen!!!
+ $internmodus = 0;
+ if($id!='')
+ {
+ $internmodus=1;
+ }
+ if($id==''){
+ $id = $this->app->Secure->GetGET('id');
+ }
+ $cmd = $this->app->Secure->GetGET("cmd");
+ if($cmd=="manually" && $id > 0)
+ {
+ $this->app->DB->Update(sprintf("UPDATE auftrag SET autoversand=1 WHERE id=%d AND status='freigegeben' LIMIT 1",$id));
+ }
+
+ @ignore_user_abort(true);
+ @set_time_limit(0);
+ // Prozess haengt so lange bis der nächste frei ist
+ $fp = $this->app->erp->ProzessLock('auftrag_autoversand');
+ $posids = $this->app->Secure->GetGET('posids');
+ if($posids)
+ {
+ $positionen = null;
+ $zwischenpositionen = null;
+ if(strpos($posids, 'z') !== false || strpos($posids, 'b') !== false)
+ {
+ $sida = explode(',',$posids);
+ foreach($sida as $v)
+ {
+ if(strpos($v, 'b') === 0)
+ {
+ $v = substr($v ,1);
+ $positionen[] = $v;
+ }else{
+ $v = substr($v ,1);
+ $zwischenpositionen[] = $v;
+ }
+ }
+ }
+ }
+ $this->app->erp->AuftragEinzelnBerechnen($id);
+ // artikel reservieren
+ $adresse = 0;
+ $versandart = '';
+ $projekt = 0;
+ $belegnr = '';
+ $tmpname = '';
+ $keinetrackingmail = 0;
+ $usereditid = 0;
+ $auftrag = $this->app->DB->SelectArr("SELECT * FROM auftrag WHERE id='$id' LIMIT 1");
+ if(!empty($auftrag)){
+ $adresse = $auftrag[0]['adresse'];
+ $versandart = $auftrag[0]['versandart'];
+ $projekt = (int)$auftrag[0]['projekt'];
+ $belegnr = $auftrag[0]['belegnr'];
+ $tmpname = $auftrag[0]['name'];
+ $keinetrackingmail = $auftrag[0]['keinetrackingmail'];
+ $usereditid = $auftrag[0]['usereditid'];//$this->app->DB->Select("SELECT usereditid FROM auftrag WHERE id='$id' LIMIT 1");
+ }
+ $useredittimestamp = $this->app->DB->Select("SELECT TIME_TO_SEC(TIMEDIFF(NOW(), useredittimestamp)) FROM auftrag WHERE id='$id' LIMIT 1");
+
+ $projektarr = null;
+ if($projekt > 0){
+ $projektarr = $this->app->DB->SelectRow("SELECT * FROM projekt WHERE id='$projekt' LIMIT 1");
+ }
+ if(!empty($projektarr)){
+ $kommissionierverfahren = $projektarr['kommissionierverfahren'];//$this->app->DB->Select("SELECT kommissionierverfahren FROM projekt WHERE id='$projekt' LIMIT 1");
+ }else{
+ $kommissionierverfahren = '';
+ }
+ if($usereditid == $this->app->User->GetID())
+ {
+ $useredittimestamp = 1000;
+ }
+
+ $anzahl_artikel = $this->app->DB->Select("SELECT id FROM auftrag_position WHERE auftrag=$id LIMIT 1");
+ if($anzahl_artikel <= 0)
+ {
+ $meldung = "Auftrag $belegnr kann nicht weitergefuehrt werden, da keine Artikel gebucht sind!";
+ $this->app->erp->EventMitSystemLog($this->app->User->GetID(), $meldung, -1,'', 'alert', 1);
+ }
+ $ret = false;
+ $zusatzcheck = true;
+ $this->app->erp->RunHook('AuftragVersandZusatzcheck', 2, $id, $zusatzcheck);
+ if(($auftrag[0]['status']==='freigegeben' && $auftrag[0]['nachlieferung']=='0'
+ && $auftrag[0]['lager_ok']=='1'&&$auftrag[0]['porto_ok']=='1'&&$auftrag[0]['ust_ok']=='1'
+ && $auftrag[0]['vorkasse_ok']=='1'&&$auftrag[0]['nachnahme_ok']=='1' &&($auftrag[0]['liefertermin_ok']=='1' || $ignoriereliefertermin)
+ && $auftrag[0]['check_ok']=='1' && $auftrag[0]['autoversand']=='1'
+ && $auftrag[0]['kreditlimit_ok']=='1' && $auftrag[0]['liefersperre_ok']=='1' && ($useredittimestamp > 45 || $useredittimestamp <= 0 || $internmodus)
+ && $anzahl_artikel >=1) && $zusatzcheck)
+ {
+ // Start
+ $ret = true;
+
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
+ (%d,now(),'%s','Lieferschein an Versandzentrum übergeben')",
+ (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
+ )
+ );
+
+ $this->app->erp->Protokoll("WeiterfuehrenAuftrag AB $belegnr Art: ".$auftrag[0]['art']);
+ // pruefe ob es lagerartikel gibt
+ /*$summe_lagerartikel = $this->app->DB->Select("SELECT SUM(ap.id) FROM auftrag_position ap,
+ artikel a WHERE ap.auftrag='$id' AND a.id=ap.artikel AND a.lagerartikel='1'");*/
+
+ $nurRestmenge = false;
+ //if($summe_lagerartikel >0 || $auftrag[0][art]=="rma")
+ //TODO wenn nur dienstleistung keinen lieferschein
+ if($auftrag[0]['art']==='lieferung' || $auftrag[0]['art']==='standardauftrag' || $auftrag[0]['art']=='')
+ {
+ if($posids) {
+ $lieferschein = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id, $positionen, $zwischenpositionen);
+ $this->app->erp->Protokoll('WeiterfuehrenAuftragZuLieferschein AB '.$belegnr);
+ }
+ else {
+ $lieferschein = $this->app->DB->Select(
+ sprintf(
+ "SELECT dn.id
+ FROM lieferschein AS dn
+ WHERE dn.auftragid = %d AND dn.status <> 'storniert'
+ LIMIT 1",
+ $id
+ )
+ );
+ if(empty($lieferschein)) {
+ $lieferschein = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id);
+ $this->app->erp->Protokoll('WeiterfuehrenAuftragZuLieferschein AB ' . $belegnr);
+ }
+ else {
+ $nurRestmenge = true;
+ }
+ }
+
+ $ls_belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
+ if($ls_belegnr==='' || $ls_belegnr==='0') {
+ $ls_belegnr = $this->app->erp->GetNextNummer('lieferschein',$projekt,$lieferschein);
+ }
+
+ $this->app->DB->Update("UPDATE lieferschein SET
+ belegnr='$ls_belegnr', status='freigegeben', versand='".$this->app->User->GetDescription()."'
+ WHERE id='$lieferschein' LIMIT 1");
+
+ $this->app->erp->LieferscheinProtokoll($lieferschein, 'Lieferschein freigegeben');
+
+ if(!($kommissionierverfahren==='lieferscheinlager' ||
+ $kommissionierverfahren==='lieferscheinlagerscan' ||
+ $kommissionierverfahren==='lieferschein')){
+ $this->app->erp->PDFArchivieren('lieferschein', $lieferschein);
+ }
+ $etiketten_positionen = 0;
+ $etiketten_art = '';
+ $etiketten_drucker = 0;
+ $etiketten_sort = 0;
+ if(!empty($projektarr))
+ {
+ $etiketten_positionen = $projektarr['etiketten_positionen'];//$this->app->DB->Select("SELECT etiketten_positionen FROM projekt WHERE id='$projekt' LIMIT 1");
+ $etiketten_art = $projektarr['etiketten_art'];//$this->app->DB->Select("SELECT etiketten_art FROM projekt WHERE id='$projekt' LIMIT 1");
+ $etiketten_drucker = $projektarr['etiketten_drucker'];//$this->app->DB->Select("SELECT etiketten_drucker FROM projekt WHERE id='$projekt' LIMIT 1");
+ $etiketten_sort= $projektarr['etiketten_sort'];//$this->app->DB->Select("SELECT etiketten_drucker FROM projekt WHERE id='$projekt' LIMIT 1");
+ }
+ if($etiketten_positionen > 0)
+ {
+ $this->app->erp->LieferscheinPositionenDrucken($lieferschein,$etiketten_drucker,$etiketten_art,$etiketten_sort);
+ }
+ } else {
+ // sonst ist lieferschein = 0
+ $lieferschein = 0;
+ }
+
+ // rechnung immer außer es ist beistellung bzw. kostenlose lieferung
+ $rechnung = 0;
+ if(($auftrag[0]['art']==='rechnung' || $auftrag[0]['art']==='standardauftrag' || $auftrag[0]['art']=='') && !$this->app->erp->Projektdaten($projekt,'rechnungerzeugen'))
+ {
+ // nur erzeugen wenn positionen betrag hpoch genug ist
+ $artikelarrsumme = $this->app->DB->Select("SELECT SUM(preis*menge) FROM auftrag_position WHERE auftrag='$id' AND auftrag > 0");
+ $this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr Preis ".$artikelarrsumme);
+
+ // wenn mindestesten zwei verschiedene steuersaetze und rechnung 0 ist dann muss man auch erzeugen
+ $anzahlsteuer = $this->app->DB->Select("Select sum(t.summe) FROM (
+ (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer = 'ermaessigt' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
+ union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer = 'befreit' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
+ union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE umsatzsteuer <> 'ermaessigt' AND (isnull(steuersatz) OR steuersatz < 0) AND auftrag = '$id' LIMIT 1)
+ union all (SELECT count(distinct 1) as summe FROM auftrag_position WHERE steuersatz >= 0 and not isnull(steuersatz) AND auftrag = '$id' LIMIT 1) )t");
+
+ if($artikelarrsumme>=0.01 || $anzahlsteuer > 1)
+ {
+ // versand erzeugen (RE + LS) und verlinken und wenn vorkasse auftrag geld als bezahlt markieren in rechnung
+ if($posids) {
+
+ $rechnung = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id, $positionen, $zwischenpositionen);
+ }
+ else{
+ $rechnung = $this->app->DB->Select(
+ sprintf(
+ "SELECT i.id FROM rechnung AS i WHERE auftragid = %d AND status <> 'storniert' LIMIT 1",
+ $id
+ )
+ );
+ if(empty($rechnung)){
+ $rechnung = $this->app->erp->WeiterfuehrenAuftragZuRechnung($id);
+ }
+ }
+ $this->app->DB->Update("UPDATE rechnung SET lieferschein='$lieferschein' WHERE id='$rechnung' LIMIT 1");
+
+ $re_belegnr = (string)$this->app->DB->Select("SELECT belegnr FROM rechnung WHERE id='$rechnung' LIMIT 1");
+ if($re_belegnr==='' || $re_belegnr==='0')
+ {
+ $re_belegnr = $this->app->erp->GetNextNummer('rechnung',$projekt,$rechnung);
+ }
+ $this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr (id $id) RE $re_belegnr (id $rechnung)");
+
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE rechnung SET belegnr = '%s' WHERE id = %d AND (belegnr = '' OR belegnr = '0')",
+ $re_belegnr, $rechnung
+ )
+ );
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE rechnung SET status = 'freigegeben' WHERE status <> 'storniert' AND status <> 'versendet' AND id = %d",
+ $rechnung
+ )
+ );
+ $this->app->erp->RechnungProtokoll($rechnung, 'Rechnung freigegeben');
+
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE rechnung
+ SET buchhaltung='%s'
+ WHERE id=%d
+ LIMIT 1",
+ $this->app->DB->real_escape_string($this->app->User->GetDescription()), $rechnung
+ )
+ );
+
+ $this->app->erp->ANABREGSNeuberechnen($rechnung,"rechnung");
+ $this->app->erp->PDFArchivieren("rechnung",$rechnung);
+ }
+ }
+ // auftrag_position geliefert_menge und geliefert anpassen
+ $artikelarr = $this->app->DB->SelectArr(
+ sprintf(
+ "SELECT ap.id,ap.artikel,ap.menge
+ FROM auftrag_position AS ap
+ INNER JOIN artikel AS art ON ap.artikel = art.id AND art.lagerartikel = 1
+ WHERE ap.auftrag=%d AND ap.auftrag > 0",
+ (int)$id
+ )
+ );
+
+ $cartikelarr = $artikelarr?count($artikelarr):0;
+ for($i=0;$i<$cartikelarr; $i++)
+ {
+ $auftragspositionsid = $artikelarr[$i]['id'];
+ $artikel = $artikelarr[$i]['artikel'];
+ $menge= $artikelarr[$i]['menge'];
+ // lager teile reservieren
+
+ $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag'
+ AND parameter='$id' AND artikel='$artikel' ");
+
+ $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$menge',
+ geliefert='1' WHERE id='$auftragspositionsid' LIMIT 1");
+ }
+
+ // nur wenn autoversand projekt
+ $autoversand_pruefung = '';
+ $automailrechnung = '';
+ $autodruckrechnungstufe1mail = '';
+ if(!empty($projektarr)){
+ $autoversand_pruefung = $projektarr['autoversand'];// $this->app->DB->Select("SELECT autoversand FROM projekt WHERE id='$projekt' LIMIT 1");
+ $automailrechnung = $projektarr['automailrechnung'];//$this->app->DB->Select("SELECT automailrechnung FROM projekt WHERE id='$projekt' LIMIT 1");
+ $autodruckrechnungstufe1mail = $projektarr['autodruckrechnungstufe1mail'];//$this->app->DB->Select("SELECT autodruckrechnungstufe1mail FROM projekt WHERE id='$projekt' LIMIT 1");
+ }
+
+ $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
+
+
+ $this->app->erp->Protokoll("WeiterfuehrenAuftragZuRechnung AB $belegnr Kommissionierverfahren: $kommissionierverfahren Projekt $projekt");
+
+ switch($kommissionierverfahren)
+ {
+ case 'rechnungsmail':
+ // rechnung per mail versenden????
+ if($automailrechnung && $rechnung > 0)
+ {
+ // rechnung per mail versenden
+ // sende
+ // $this->app->erp->Rechnungsmail($rechnung);
+ }
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
+ (%d,now(),'%s','Autoversand ausgeführt')",
+ (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
+ )
+ );
+ break;
+ default:
+
+ if($kommissionierverfahren==='lieferschein' && $lieferschein > 0)
+ {
+ //FALL 1 Lieferschein mit Lagerplatz
+ if($this->kommissionierung){
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE lieferschein SET kommissionierung = %d WHERE id = %d LIMIT 1",
+ $this->kommissionierung, $lieferschein
+ )
+ );
+ $this->updateCase($this->kommissionierung);
+ }
+ $this->app->erp->LieferscheinAuslagern(
+ $lieferschein,
+ true,
+ (int)$this->app->DB->Select(sprintf('SELECT standardlager FROM auftrag WHERE id = %d LIMIT 1', $id)),
+ 'lieferschein',
+ true,
+ false,
+ $nurRestmenge
+ );
+
+ // Prozesse ohne Versandzentrum
+
+
+ $this->app->erp->BriefpapierHintergrundDisable($druckercode);
+
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('LieferscheinPDFCustom')) {
+ $Brief = new LieferscheinPDFCustom($this->app,$projekt);
+ }
+ else{
+ $Brief = new LieferscheinPDF($this->app,$projekt);
+ }
+ $Brief->GetLieferschein($lieferschein);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument(false, true);
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+
+ if(class_exists('LieferscheinPDFCustom')) {
+ $Brief = new LieferscheinPDFCustom($this->app,$projekt);
+ }
+ else{
+ $Brief = new LieferscheinPDF($this->app,$projekt);
+ }
+ $Brief->GetLieferschein($lieferschein);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument(false, true);
+ //$this->app->printer->Drucken($druckercode,$tmpfile);
+
+ $fileid_lieferschein = $this->app->erp->CreateDatei($Brief->filename,'lieferschein','','',$tmpfile,$this->app->User->GetName());
+ $this->app->erp->AddDateiStichwort($fileid_lieferschein,'lieferschein','lieferschein',$lieferschein,$without_log=false);
+
+ $sprache = $this->app->DB->Select("SELECT sprache FROM lieferschein WHERE id='$lieferschein' LIMIT 1");
+ if($sprache=='')
+ {
+ $sprache='deutsch';
+ }
+ $text = $this->app->erp->GetGeschaeftsBriefText('Lieferschein',$sprache,$projekt);
+ $betreff = $this->app->erp->GetGeschaeftsBriefBetreff('Lieferschein',$sprache,$projekt);
+ if($betreff=='')
+ {
+ $betreff='Mitgesendet bei Lieferung';
+ }
+
+ $this->app->DB->Update("UPDATE lieferschein SET status='versendet',versendet='1',schreibschutz='1' WHERE id='$lieferschein' LIMIT 1");
+ $this->app->DB->Insert("INSERT INTO dokumente_send
+ (id,dokument,zeit,bearbeiter,adresse,parameter,art,betreff,text,projekt,ansprechpartner,dateiid) VALUES ('','lieferschein',NOW(),'".$this->app->User->GetName()."',
+ '$adresse','$lieferschein','versand','$betreff','$text','$projekt','','$fileid_lieferschein')");
+ $this->app->erp->LieferscheinProtokoll($lieferschein,'Lieferschein versendet (Auto-Versand)');
+
+ unlink($tmpfile);
+ // Druck Auftrag Anhang wenn aktiv
+ if(1)//if($this->app->erp->Projektdaten($projekt,"autodruckanhang")=="1")
+ {
+ // alle anhaenge drucken! wo auftrag datei anhang
+ $this->app->erp->GetDateiSubjektObjekt('anhang','Auftrag',$id);
+ // for($i=0;$i<(!empty($tmpanhang)?count($tmpanhang):0);$i++)
+ // $this->app->printer->Drucken($druckercode,$tmpanhang[$i]);
+ $tmpanhang ='';
+ }
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
+ (%d,now(),'%s','Auftrag an Versandzentrum übergeben')",
+ (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
+ )
+ );
+ }
+
+
+ //FALL 2 // logistikzentrum
+
+ // auftrag_position geliefert_menge und geliefert anpassen
+ $artikelarr = $this->app->DB->SelectArr(
+ sprintf(
+ "SELECT ap.id, ap.artikel,ap.menge
+ FROM auftrag_position AS ap
+ INNER JOIN artikel AS art ON ap.artikel = art.id AND art.lagerartikel = 1
+ WHERE ap.auftrag=%d AND ap.auftrag > 0",
+ (int)$id
+ )
+ );
+ $cartikelarr = $artikelarr?count($artikelarr):0;
+ for($i=0;$i<$cartikelarr; $i++) {
+ $auftragspositionsid = $artikelarr[$i]['id'];
+ $artikel = $artikelarr[$i]['artikel'];
+ $menge= $artikelarr[$i]['menge'];
+ // lager teile reservieren
+
+ $this->app->DB->Delete("DELETE FROM lager_reserviert WHERE objekt='auftrag'
+ AND parameter='$id' AND artikel='$artikel' ");
+
+ if($kommissionierverfahren==='zweistufig' && $lieferschein > 0)
+ {
+ $this->app->DB->Insert("INSERT INTO lager_reserviert (id,adresse,artikel,menge,grund,projekt,
+ firma,bearbeiter,datum,objekt,parameter)
+ VALUES('','$adresse','$artikel','$menge','Versand für Auftrag $belegnr','$projekt',
+ '".$this->app->User->GetFirma()."','".$this->app->User->GetName()."','9999-01-01','lieferschein','$lieferschein')");
+ }
+
+ if($lieferschein > 0) {
+ $this->app->DB->Update("UPDATE auftrag_position SET geliefert_menge='$menge',
+ geliefert='1' WHERE id='$auftragspositionsid' LIMIT 1");
+ }
+
+ }
+ //ende
+
+ $this->app->DB->Insert(
+ sprintf(
+ "INSERT INTO auftrag_protokoll (auftrag, zeit, bearbeiter, grund) VALUES
+ (%d,now(),'%s','Autoversand ausgeführt')",
+ (int)$id,(isset($this->app->User)?$this->app->DB->real_escape_string($this->app->User->GetName()):'Cronjob')
+ )
+ );
+ }
+ $autodruckrechnungstufe1 = 0;
+ $autodruckrechnungstufe1menge = 0;
+ $exportdruckrechnungstufe1 = 0;
+ $printOrderQuantity = 0;
+ if(!empty($projektarr))
+ {
+ $autodruckrechnungstufe1 = $projektarr['autodruckrechnungstufe1'];
+ $autodruckrechnungstufe1menge = $projektarr['autodruckrechnungstufe1menge'];
+ $exportdruckrechnungstufe1 = $projektarr['exportdruckrechnungstufe1'];
+ if($projektarr['auftragdrucken'] == '1') {
+ $printOrderQuantity = $projektarr['auftragdruckenmenge'] > 1 ? $projektarr['auftragdruckenmenge'] : 1;
+ }
+ }
+
+ if($exportdruckrechnungstufe1)
+ {
+ if(!empty($projektarr))
+ {
+ $exportdruckrechnungstufe1menge = $projektarr['exportdruckrechnungstufe1menge'];//$this->app->DB->Select("SELECT exportdruckrechnungstufe1menge FROM projekt WHERE id='$projekt' LIMIT 1");
+ }else{
+ $exportdruckrechnungstufe1menge = 0;
+ }
+
+ $exportland = $this->app->DB->Select("SELECT if(abweichendelieferadresse = 1 AND lieferland <> '',lieferland, land) FROM auftrag WHERE id = '$id' LIMIT 1");
+ $exportdruckrechnungstufe1 = $this->app->erp->Export($exportland);
+ }
+
+
+
+
+ if(($autodruckrechnungstufe1=='1' || $exportdruckrechnungstufe1) && $rechnung > 0)
+ {
+ $this->app->DB->Update("UPDATE rechnung SET status='versendet', versendet='1',schreibschutz='1' WHERE id='$rechnung' LIMIT 1");
+ $druckercode = $this->app->erp->Projektdaten($projekt,'druckerlogistikstufe1');
+ $this->app->erp->BriefpapierHintergrundDisable($druckercode);
+ if(class_exists('RechnungPDFCustom'))
+ {
+ $Brief = new RechnungPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new RechnungPDF($this->app,$projekt);
+ }
+ $Brief->GetRechnung($rechnung);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ if($autodruckrechnungstufe1=='1')
+ {
+ for($imenge=0;$imenge<$autodruckrechnungstufe1menge;$imenge++) {
+ $this->app->printer->Drucken($druckercode, $tmpfile);
+ }
+ }
+ if($exportdruckrechnungstufe1 == '1')
+ {
+ for($imenge=0;$imenge<$exportdruckrechnungstufe1menge;$imenge++) {
+ $this->app->printer->Drucken($druckercode, $tmpfile);
+ }
+ }
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('RechnungPDFCustom'))
+ {
+ $Brief = new RechnungPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new RechnungPDF($this->app,$projekt);
+ }
+ $Brief->GetRechnung($rechnung);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ }
+
+ // Rechnungsmail was here, but now at the end to prioritise processing and printing over mail
+
+ // auftrag abschliessen
+ $this->app->DB->Update("UPDATE auftrag SET status='abgeschlossen',schreibschutz='1' WHERE id='$id' LIMIT 1");
+ $this->app->erp->PDFArchivieren('auftrag',$id);
+
+ // auftrag abschliessen und event senden
+
+ $this->app->erp->ProzessUnlock($fp);
+
+ // kundenfreigabe loeschen wenn das im projekt eingestellt ist
+ if(!empty($projektarr))
+ {
+ $checkok = $projektarr['kundenfreigabe_loeschen'];//$this->app->DB->Select("SELECT kundenfreigabe_loeschen FROM projekt WHERE id='$projekt' LIMIT 1");
+ }else{
+ $checkok = 0;
+ }
+
+ if($checkok==1){
+ $this->app->DB->Update("UPDATE adresse SET kundenfreigabe='0' WHERE id='$adresse' LIMIT 1");
+ }
+
+ if($this->app->erp->ModulVorhanden('produktion') && method_exists($this->app->erp, 'ProduktionEinzelnBerechnen'))
+ {
+ $produktionen = $this->app->DB->SelectArr("SELECT id FROM produktion WHERE auftragid = '$id'");
+ if($produktionen)
+ {
+ foreach($produktionen as $v)
+ {
+ $this->app->erp->ProduktionEinzelnBerechnen($v['id']);
+ }
+ }
+ }
+
+ //if($internmodus && $lieferschein) // 2018-10-09 BS ab jetzt immer diese Optionen auswerten - nicht nur wenn es intern ist
+ if($lieferschein)
+ {
+ $paketmarkedruckenprojekt = !empty($projektarr['paketmarkedrucken'])?$projektarr['paketmarkedrucken']:0;
+ if($paketmarkedrucken && $paketmarkedruckenprojekt && !$this->app->erp->PaketmarkeDrucken($lieferschein, 'lieferschein'))
+ {
+ //$this->app->DB->Update("UPDATE auftrag SET schreibschutz = 0, status = 'freigegeben' WHERE id = '$id' LIMIT 1");
+ $this->app->erp->AuftragProtokoll($id, 'Paketmarke drucken fehlgeschlagen');
+ if(!empty($fp))
+ {
+ $this->app->erp->ProzessUnlock($fp);
+ }
+ return $ret;
+ }
+ $lieferscheinedruckenprojekt = !empty($projektarr['lieferscheinedrucken'])?$projektarr['lieferscheinedrucken']:0;
+ if($lieferscheinedruckenprojekt)
+ {
+ $lieferscheinedruckenmenge = !empty($projektarr['lieferscheinedruckenmenge'])?$projektarr['lieferscheinedruckenmenge']:0;//$this->app->DB->Select("SELECT lieferscheinedruckenmenge FROM projekt WHERE id = '$projekt' LIMIT 1");
+ if($lieferscheinedruckenmenge > 0)
+ {
+ $druckercode = !empty($projektarr['druckerlogistikstufe1'])?$projektarr['druckerlogistikstufe1']:0;//$this->app->DB->Select("SELECT druckerlogistikstufe1 FROM projekt WHERE id='$projekt' LIMIT 1");
+ if($druckercode <=0){
+ $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
+ }
+
+ $this->app->erp->BriefpapierHintergrundDisable($druckercode);
+
+ if(class_exists('LieferscheinPDFCustom'))
+ {
+ $Brief = new LieferscheinPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new LieferscheinPDF($this->app,$projekt);
+ }
+ $Brief->GetLieferschein($lieferschein);
+
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+
+ for($imenge=0;$imenge<$lieferscheinedruckenmenge;$imenge++) {
+ $this->app->printer->Drucken($druckercode, $tmpfile);
+ }
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('LieferscheinPDFCustom'))
+ {
+ $Brief = new LieferscheinPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new LieferscheinPDF($this->app,$projekt);
+ }
+ $Brief->GetLieferschein($lieferschein);
+
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ unlink($tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ }
+ }
+ }
+
+ // Druck Auftrag Anhang wenn aktiv
+ if($this->app->erp->Projektdaten($projekt,'druckanhang')=='1') {
+ $obj = $this->app->erp->LoadModul('versanderzeugen');
+ if(!empty($obj) && method_exists($obj,'autoPrintAttachment'))
+ {
+ $obj->autoPrintAttachment($druckercode,$id,$lieferschein,$rechnung);
+ }
+ }
+
+ if($printOrderQuantity > 0 && $druckercode) {
+ if(class_exists('AuftragPDFCustom'))
+ {
+ $Brief = new AuftragPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app,$projekt);
+ }
+ $Brief->GetAuftrag($id);
+
+ $tmpfile = $Brief->displayTMP();
+ for($printOrderQuantity; $printOrderQuantity > 0; $printOrderQuantity--) {
+ $this->app->printer->Drucken($druckercode, $tmpfile);
+ }
+ unlink($tmpfile);
+ }
+
+ // Send the invoice as last step
+ if($autodruckrechnungstufe1mail && $rechnung > 0)
+ {
+ $this->app->erp->Rechnungsmail($rechnung);
+ }
+
+ $this->app->erp->RunHook('auftrag_versand_ende', 1, $id);
+
+ // wenn per URL aufgerufen
+ if($internmodus!='1')
+ {
+ if(!empty($fp))
+ {
+ $this->app->erp->ProzessUnlock($fp);
+ }
+ $this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
+ }
+ if(!empty($fp))
+ {
+ $this->app->erp->ProzessUnlock($fp);
+ }
+ return $ret;
+ }
+
+ //$this->app->erp->ProzessUnlock("auftrag_autoversand");
+ $this->app->erp->ProzessUnlock($fp);
+
+ if($posids)
+ {
+ $this->app->Location->execute('index.php?module=auftrag&action=positionen&id='.$id);
+ }
+
+ // wenn per URL aufgerufen
+ if($internmodus!='1')
+ {
+ // $this->AuftragList();
+
+ //header("Location: index.php?module=auftrag&action=search");
+ if($id > 0){
+ $this->app->Location->execute('index.php?module=auftrag&action=edit&id=' . $id);
+ }
+ $this->app->Location->execute('index.php?module=auftrag&action=versandzentrum');
+ }
+ }
+
+
+ function AuftragSelbstabholerNachricht()
+ {
+ // kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
+
+ }
+
+ function AuftragSelbstabholerAbgeholt()
+ {
+ // kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
+
+ }
+
+
+ function AuftragNachlieferungCheck()
+ {
+
+ //echo "pruefe ob eine Nachlieferung gemacht werden kann";
+
+ }
+
+
+ function AuftragNachlieferung()
+ {
+ // kann man immer wieder aufrufen wenn ein teilchen gekommen ist bis auftrag voll erfuellt ist
+
+ }
+
+
+
+
+ public function AuftragVerfuegbar()
+ {
+ $frame = $this->app->Secure->GetGET('frame');
+ $id = $this->app->Secure->GetGET('id');
+ if($frame=='false')
+ {
+ // hier nur fenster größe anpassen
+ $this->app->YUI->IframeDialog(600,400);
+ } else {
+ // nach page inhalt des dialogs ausgeben
+ $table = new EasyTable($this->app);
+ $table->Query("SELECT ap.nummer, ap.bezeichnung, ap.menge, (SELECT TRIM(SUM(lp.menge))+0 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,'',
+ TRIM((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
+ ) as fehlend
+ FROM auftrag_position ap LEFT JOIN artikel a ON a.id=ap.artikel WHERE ap.auftrag='$id' AND a.lagerartikel=1");
+
+ $table->DisplayNEW('PAGE','Fehlende','noAction');
+
+ $this->app->BuildNavigation=false;
+ }
+ }
+
+ public function AuftragAmpel($id,$parsetarget)
+ {
+
+ $status = $this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
+
+ if($status=='abgeschlossen' || $status=='storniert')
+ {
+ $go = ' ';
+ $stop = ' ';
+ $reserviert = ' ';
+ $check = ' ';
+ } else {
+
+ $go = ' ';
+ $stop = ' ';
+ $reserviert = ' ';
+ $check = ' ';
+
+ }
+
+ // offene Auftraege
+ $table = new EasyTable($this->app);
+ $sql = "SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as vom, if(a.belegnr!='',a.belegnr,'ohne Nummer') as auftrag, a.internet, CONCAT('',a.name,' ') as name, a.land, p.abkuerzung as projekt, a.zahlungsweise as per, a.gesamtsumme as soll,";
+ $subsql = "'0' as ist,";
+ $sql .= $subsql. "if(a.check_ok,'','$check ') as AC,
+
+ if(a.reserviert_ok,'$reserviert','') as AR,
+ if(a.lager_ok,'$go','$stop') as LA,
+ if(a.porto_ok,'$go','$stop') as PO,
+ if(a.ust_ok,'$go',CONCAT('','$stop',' ')) as ST,
+ if(a.vorkasse_ok,'$go','$stop') as ZE,
+ if(a.nachnahme_ok,'$go','$stop') as N,
+ if(a.autoversand,'$go','$stop') as A,
+ if(a.liefertermin_ok,'$go','$stop') as LT,
+ a.id
+ FROM auftrag a, projekt p WHERE a.inbearbeitung=0 AND p.id=a.projekt AND a.id=$id LIMIT 1";
+
+ $table->Query($sql);
+
+ $table->DisplayNew($parsetarget, "
+
+
+
+ ");
+
+
+ }
+
+ public function AuftraguebersichtMenu()
+ {
+ $backurl = $this->app->Secure->GetGET('backurl');
+ $backurl = $this->app->erp->base64_url_decode($backurl);
+
+ $this->app->erp->MenuEintrag('index.php?module=auftrag&action=list','Übersicht');
+ $this->app->erp->MenuEintrag('index.php?module=auftrag&action=create','Neuen Auftrag anlegen');
+ $this->app->erp->MenuEintrag('index.php?module=auftrag&action=versandzentrum','Versandzentrum');
+
+ if(strlen($backurl)>5){
+ $this->app->erp->MenuEintrag("$backurl", 'Zurück zur Übersicht');
+ }
+ else{
+ $this->app->erp->MenuEintrag('index.php', 'Zurück zur Übersicht');
+ }
+
+ $this->app->erp->RunMenuHook('auftrag_list');
+ }
+
+ /**
+ * @param string $description
+ * @param bool $escaped
+ *
+ * @return int
+ */
+ public function createCronjobCommission(string $description = ''): int
+ {
+ $nextCronjobCommissionId = 1 + (int)$this->app->DB->Select(
+ 'SELECT MAX(`cronjobkommissionierung`) FROM `auftrag`'
+ );
+
+/* $this->app->DB->Insert(
+ "INSERT INTO `cronjob_kommissionierung` (`id`, `bezeichnung`)
+ VALUES ({$nextCronjobCommissionId}, '{$description}') "
+ );
+ if($this->app->DB->GetInsertID() > 0) {
+ return $this->app->DB->GetInsertID();
+ }
+ $this->app->DB->Update(
+ "UPDATE `cronjob_kommissionierung`
+ SET `bezeichnung` = '{$description}'
+ WHERE `id` = {$nextCronjobCommissionId}"
+ );*/
+
+ return $nextCronjobCommissionId;
+ }
+
+ public function AuftragVersandzentrum()
+ {
+ $this->AuftraguebersichtMenu();
+ $targetMessage = 'AUTOVERSANDBERECHNEN';
+
+ $this->app->Tpl->Add('MESSAGE','Aufträge an Versand übergeben mit automatischem Druck und Mailversand.
');
+
+ $autoshipmentEnabled = true;
+ $this->app->erp->RunHook('OrderAutoShipment', 2, $targetMessage, $autoshipmentEnabled);
+
+ $plusCronjobs = $this->app->DB->SelectRow(
+ "SELECT art, periode
+ FROM prozessstarter
+ WHERE (parameter = 'autoversand' OR parameter = 'autoversand_plus') AND aktiv = 1
+ ORDER BY art = 'periodisch', periode >= 30
+ LIMIT 1"
+ );
+
+ if(!empty($plusCronjobs) && $plusCronjobs['art'] === 'periodisch' && $plusCronjobs['periode'] < 30) {
+ $message = 'Autoversand Cronjob ist mit '.$plusCronjobs['periode'].' Minuten zu kurz eingestellt (mindestens 30).';
+ $this->app->Tpl->Add('AUTOVERSANDBERECHNEN', ''.$message.'
');
+ }
+
+ // ZAHLUNGSMAIL
+ $zahlungsmail= $this->app->Secure->GetPOST('zahlungsmail');
+
+ if($zahlungsmail!=''){
+ $meineauftraege = $this->app->DB->SelectArr("SELECT id FROM auftrag WHERE status='freigegeben'
+ AND vorkasse_ok!='1' AND zahlungsweise!='rechnung' AND zahlungsweise!='nachnahme' AND zahlungsweise!='bar' AND zahlungsweise!='lastschrift'");
+ $cmeineauftraege = $meineauftraege?count($meineauftraege):0;
+ for($i=0;$i<$cmeineauftraege;$i++) {
+ $this->app->erp->AuftragNeuberechnen($meineauftraege[$i]['id']);
+
+ $this->app->erp->AuftragEinzelnBerechnen($meineauftraege[$i]['id']);
+ $this->app->erp->AuftragZahlungsmail($meineauftraege[$i]['id']);
+ }
+ }
+
+ // AUFTAEGE ABSCHLIESSEN!
+ $submit = $this->app->Secure->GetPOST('submit');
+ $auftraegemarkiert = $this->app->Secure->GetPOST('auswahlcronjob');
+ $entfernen = $this->app->Secure->GetPOST('entfernen');
+ $bezeichnung = (string)$this->app->Secure->GetPOST('bezeichnung');
+ if($entfernen && $auftraegemarkiert){
+ $cauftraegemarkiert = (!empty($auftraegemarkiert)?count($auftraegemarkiert):0);
+ for($i=0;$i<$cauftraegemarkiert;$i++) {
+ $this->app->DB->Update("UPDATE auftrag SET cronjobkommissionierung = 0 WHERE id = '".$auftraegemarkiert[$i]."' LIMIT 1");
+ }
+ }
+
+ if($this->app->Secure->GetPOST('ausfuehren')){
+
+ $drucker = $this->app->Secure->GetPOST('seldruckerversand');
+ $aktion = $this->app->Secure->GetPOST('auftrag_versandauswahl');
+// $auftraegemarkiert = $this->app->Secure->GetPOST('auftraegemarkiert');
+ $auftraegemarkiert = $this->app->Secure->GetPOST('auswahl');
+ $bezeichnung = (string)$this->app->Secure->GetPOST('bezeichnung');
+
+ $selectedIds = [];
+ if(!empty($auftraegemarkiert)) {
+ foreach($auftraegemarkiert as $selectedId) {
+ $selectedId = (int)$selectedId;
+ if($selectedId > 0) {
+ $selectedIds[] = $selectedId;
+ }
+ }
+ }
+ if($drucker > 0) {
+ $this->app->erp->BriefpapierHintergrundDisable($drucker);
+ }
+ if(is_array($auftraegemarkiert)){
+
+ switch($aktion){
+ case 'versandstarten':
+
+ /*
+ * If one of the cronjobs is active, orders only get marked. Sending will be handled by the cronjob.
+ * If not, sending will be done here.
+ */
+
+ $cronjobActive = $this->app->DB->Select(
+ "SELECT ps.id
+ FROM `prozessstarter` AS `ps`
+ WHERE ps.aktiv = 1 and (ps.parameter = 'autoversand_standard' OR ps.parameter = 'autoversand_manuell')
+ LIMIT 1"
+ );
+ $check = $cronjobActive;
+ if(!$check){
+ $check = $this->app->DB->Select(
+ "SELECT id
+ FROM auftrag AS a
+ WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='')
+ AND a.status='freigegeben' AND a.autoversand='1' AND a.cronjobkommissionierung > 0
+ AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.vorkasse_ok='1'
+ AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1'
+ AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
+ LIMIT 1"
+ );
+ }
+
+ if(!empty($auftraegemarkiert)){
+ $datuma = null;
+ foreach ($auftraegemarkiert as $k => $v) {
+ $datuma[$k] = $this->app->DB->Select(
+ sprintf(
+ 'SELECT datum FROM auftrag WHERE id = %d LIMIT 1',
+ (int)$v
+ )
+ );
+ }
+ //Sortieren nach Datum
+ array_multisort($datuma, SORT_ASC, $auftraegemarkiert);
+ // aufsteigend sortieren erst die alten IDs
+ //sort($auftraegemarkiert);
+ }
+ if($check){
+
+ /* Send all to cronjob */
+
+ $maxcronjobkommissionierung = $this->createCronjobCommission((string)$bezeichnung);
+
+ $cauftraegemarkiert = $auftraegemarkiert ? count($auftraegemarkiert) : 0;
+ for ($i = 0; $i < $cauftraegemarkiert; $i++) {
+ $this->app->DB->Update(
+ sprintf(
+ 'UPDATE `auftrag`
+ SET `cronjobkommissionierung` = %d
+ WHERE `id` = %d
+ LIMIT 1',
+ $maxcronjobkommissionierung, $auftraegemarkiert[$i]
+ )
+ );
+ }
+ }
+ else {
+
+ /* Process here now */
+
+ $cauftraegemarkiert = $auftraegemarkiert ? count($auftraegemarkiert) : 0;
+ for ($i = 0; $i < $cauftraegemarkiert; $i++) {
+ $projekt = (int)$this->app->DB->Select(
+ sprintf(
+ 'SELECT `projekt` FROM `auftrag` WHERE `id` = %d LIMIT 1',
+ $auftraegemarkiert[$i]
+ )
+ );
+ $auftraegenachprojekt[$projekt][] = $auftraegemarkiert[$i];
+ }
+
+ foreach ($auftraegenachprojekt as $projekt => $auftraege) {
+ if(!is_array($auftraege) || empty($auftraege)) {
+ continue;
+ }
+ $this->kommissionierung = $this->app->erp->GetNextKommissionierung($bezeichnung);
+
+ $processed_orders_num = 0;
+
+ foreach ($auftraege as $auftrag) {
+
+ /* Process each order */
+ if($this->AuftragVersand($auftrag)) {
+ $processed_orders_num++;
+ }
+
+ }
+
+ $this->app->Tpl->Set('MESSAGE',''.$processed_orders_num.' Aufträge wurden verarbeitet.
');
+
+ if(empty($this->kommissionierung)) {
+ continue;
+ }
+ if(
+ empty(
+ $this->app->DB->Select(
+ sprintf(
+ 'SELECT `id` FROM `lieferschein` WHERE `kommissionierung` = %d',
+ $this->kommissionierung
+ )
+ )
+ )
+ ) {
+ continue;
+ }
+ $kommissionierlistestufe1 = $this->app->erp->Projektdaten($projekt, 'kommissionierlistestufe1');
+ if(empty($kommissionierlistestufe1)) {
+ continue;
+ }
+ $druckercode = $this->app->DB->Select(
+ sprintf(
+ 'SELECT druckerlogistikstufe1 FROM projekt WHERE id= %d LIMIT 1',
+ $projekt
+ )
+ );
+ if($druckercode <= 0){
+ $druckercode = $this->app->erp->Firmendaten('standardversanddrucker');
+ }
+ $kommissionierlistestufe1menge = $this->app->erp->Projektdaten(
+ $projekt, 'kommissionierlistestufe1menge'
+ );
+ if($kommissionierlistestufe1menge < 1){
+ $kommissionierlistestufe1menge = 1;
+ }
+ /** @var Kommissionierlauf $obj */
+ $obj = $this->app->erp->LoadModul('kommissionierlauf');
+ if($obj && $this->kommissionierung){
+ $tmpfile = $obj->KommissionierlaufPDF($this->kommissionierung);
+ for ($mengedruck = $kommissionierlistestufe1menge; $mengedruck > 0; $mengedruck--) {
+ $this->app->printer->Drucken($druckercode, $tmpfile);
+ }
+ unlink($tmpfile);
+ }
+ }
+ }
+ break;
+ case 'drucken':
+ if($drucker){
+ foreach ($selectedIds as $v) {
+ $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$v' LIMIT 1");
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('AuftragPDFCustom')){
+ $Brief = new AuftragPDFCustom($this->app, $projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app, $projekt);
+ }
+ $Brief->GetAuftrag($v);
+ $_tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ unlink($_tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('AuftragPDFCustom')){
+ $Brief = new AuftragPDFCustom($this->app, $projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app, $projekt);
+ }
+ $Brief->GetAuftrag($v);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ $this->app->printer->Drucken($drucker, $tmpfile);
+ $this->app->erp->AuftragProtokoll($v, "Auftrag versendet");
+ $this->app->erp->AuftragProtokoll($v, "In Versandübergabe gedruckt");
+ unlink($tmpfile);
+ }
+ }
+ break;
+ }
+ }
+ }
+
+ $check = null;
+ $cronjobActive = $this->app->DB->Select(
+ "SELECT ps.id
+ FROM `prozessstarter` AS `ps`
+ WHERE ps.aktiv = 1 and (ps.parameter = 'autoversand_standard' OR ps.parameter = 'autoversand_manuell')
+ LIMIT 1"
+ );
+ if(!$cronjobActive) {
+ $check = $this->app->DB->Select(
+ sprintf(
+ "SELECT id
+ FROM auftrag AS a
+ WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.autoversand='1' AND
+ a.cronjobkommissionierung > 0
+ AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.vorkasse_ok='1' AND a.porto_ok='1'
+ AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND
+ liefersperre_ok='1'
+ LIMIT 1"
+ )
+ );
+ }
+
+ $unversendet = $this->app->DB->Select("SELECT count(a.id) FROM auftrag as a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.inbearbeitung=0 AND a.nachlieferung!='1' AND a.autoversand='1' AND a.cronjobkommissionierung = 0 AND a.liefertermin_ok='1' AND kreditlimit_ok='1' AND liefersperre_ok='1'
+ AND a.vorkasse_ok='1' AND a.porto_ok='1' AND a.lager_ok='1' AND a.check_ok='1' AND a.ust_ok='1' " . $this->app->erp->ProjektRechte('p.id', true, 'a.vertriebid'));
+
+ $warteschleife = $this->app->DB->Select("SELECT count(a.id) FROM auftrag as a LEFT JOIN projekt p ON p.id=a.projekt WHERE a.id!='' AND (a.belegnr!=0 OR a.belegnr!='') AND a.status='freigegeben' AND a.cronjobkommissionierung > 0 " . $this->app->erp->ProjektRechte('p.id', true, "a.vertriebid"));
+
+ if($unversendet > 0) {
+ $unversendet ='('.$unversendet.')';
+ }
+ else {
+ $unversendet='';
+ }
+ if($warteschleife > 0) {
+ $warteschleife ='('.$warteschleife.')';
+ }
+ else {
+ $warteschleife='';
+ }
+
+ $this->app->Tpl->Set('TABTEXT1','Bereit '.$unversendet);
+ $this->app->Tpl->Set('TABTEXT2','Ausstehend '.$warteschleife);
+
+ if($warteschleife != '' && is_null($cronjobActive)) {
+
+ $this->app->Tpl->Add(
+ 'MESSAGE',
+ 'Der Prozessstarter "Autoversand Manuell" ist deaktivert,
+ es befinden sich aber ausstehende Aufträge in der Warteschlange.
+ Bitte aktieren Sie den Prozessstarter
+ oder entfernen Sie die betreffenden Aufträge in der Warteschlange
'
+ );
+ }
+
+ $this->app->Tpl->Set('SELDRUCKERVERSAND', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));
+
+ if(!$autoshipmentEnabled) {
+ $this->app->Tpl->Parse('PAGE','auftraguebersicht.tpl');
+ return;
+ }
+// if($this->app->erp->RechteVorhanden('auftrag','berechnen'))
+ {
+ $this->app->Tpl->Set('AUTOBERECHNEN',' ');
+// }else{
+// $this->app->Tpl->Set('AUTOBERECHNEN2','');
+ }
+ $infolink = '(Information) ';
+
+/*
+ $last_order_calc = $this->app->erp->GetKonfiguration('last_order_calc');
+ if(!empty($last_order_calc)) {
+ $this->app->Tpl->Add('AUTOVERSANDBERECHNEN','Die letzte Berechnung der Auftragsampeln war am '.$last_order_calc.'. '.$infolink.' [AUTOBERECHNEN]
');
+ }
+ else{
+ $this->app->Tpl->Add('AUTOVERSANDBERECHNEN','Die letzte Berechnung der Auftragsampeln wurde noch nicht ermittelt. '.$infolink.' [AUTOBERECHNEN]
');
+ }
+*/
+
+ $this->app->YUI->TableSearch('TAB1','auftraegeoffeneauto', 'show','','',basename(__FILE__), __CLASS__);
+ $this->app->YUI->TableSearch('TAB2','auftraegeoffeneautowartend', 'show','','',basename(__FILE__), __CLASS__);
+ $this->app->Tpl->Parse('PAGE','auftrag_versandzentrum.tpl');
+ } // Ende
+
+ public function AuftragList()
+ {
+ if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('auftrag', 'edit'))
+ {
+ $drucker = $this->app->Secure->GetPOST('seldrucker');
+ $aktion = $this->app->Secure->GetPOST('sel_aktion');
+ $auswahl = $this->app->Secure->GetPOST('auswahl');
+ $selectedIds = [];
+ if(!empty($auswahl)) {
+ foreach($auswahl as $selectedId) {
+ $selectedId = (int)$selectedId;
+ if($selectedId > 0) {
+ $selectedIds[] = $selectedId;
+ }
+ }
+ }
+ if($drucker > 0) {
+ $this->app->erp->BriefpapierHintergrundDisable($drucker);
+ }
+ if(is_array($auswahl))
+ {
+ switch($aktion)
+ {
+ case 'stapelproduktionweiter':
+ $error_artikel = '';
+ foreach($selectedIds as $v) {
+ $weiteralsproduktion = $this->AuftragProduktion($v,true);
+ /** @var Produktion $produktion */
+ $produktion = $this->app->erp->LoadModul('produktion');
+ $produktion->ProduktionFreigabe($weiteralsproduktion);
+ if(!is_int($weiteralsproduktion)){
+ $auftragsnummer = $this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id = '$v'");
+ $error_artikel .= $auftragsnummer . ', ';
+ }
+ }
+ $error_artikel = rtrim($error_artikel, ', ');
+ if($error_artikel != '') {
+ $msg = $this->app->erp->base64_url_encode('Der Auftrag kann nicht als Produktion weitergeführt werden, da im Auftrag $error_artikel Artikel nicht als Produktionsartikel markiert sind!
');
+ }else {
+ $msg = $this->app->erp->base64_url_encode('Die Aufträge wurden als Produktion weitergeführt.
');
+ }
+ $this->app->Location->execute('index.php?module=auftrag&action=list&msg='.$msg);
+ break;
+ case 'fastlane':
+ if(!empty($selectedIds)) {
+ $this->app->DB->Update('UPDATE auftrag SET fastlane = 1 WHERE id IN (' . implode(', ', $selectedIds) . ')');
+ }
+ break;
+ case 'fastlaneentfernen':
+ if(!empty($selectedIds)) {
+ $this->app->DB->Update('UPDATE auftrag SET fastlane = 0 WHERE id IN (' . implode(', ', $selectedIds) . ')');
+ }
+ break;
+ case 'freigeben':
+ foreach($selectedIds as $v) {
+ if($this->app->DB->Select("SELECT id FROM auftrag WHERE id = '$v' AND belegnr = '' AND status <> 'freigeben' AND status <> 'abgeschlossen' AND status <> 'storniert' LIMIT 1")){
+ $this->AuftragFreigabe($v);
+ }
+ }
+ break;
+ case 'versandfreigeben':
+ if(!empty($selectedIds)) {
+ $this->app->DB->Update('UPDATE auftrag SET autoversand = 1 WHERE id IN ('. implode(', ', $selectedIds) . ')');
+ }
+ break;
+ case 'versandentfernen':
+ if(!empty($selectedIds)) {
+ $this->app->DB->Update('UPDATE auftrag SET autoversand = 0 WHERE id IN ('. implode(', ', $selectedIds) . ')');
+ }
+ break;
+ case 'mail':
+ foreach($selectedIds as $v) {
+ $auftragarr = $this->app->DB->SelectRow("SELECT email,adresse,projekt,name,sprache FROM auftrag WHERE id = '$v' LIMIT 1");
+ $email = '';
+ $adresse = 0;
+ $projekt = 0;
+ $name = '';
+ $sprache = '';
+ if(!empty($auftragarr)) {
+ $email = (string)$auftragarr['email'];//$this->app->DB->Select("SELECT email FROM auftrag WHERE id = '$v' LIMIT 1");
+ $adresse = (int)$auftragarr['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$v' LIMIT 1");
+ $projekt = (int)$auftragarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$v' LIMIT 1");
+ $name = $auftragarr['name'];// $this->app->DB->Select("SELECT name FROM auftrag WHERE id = '$v' LIMIT 1");
+ $sprache = $auftragarr['sprache'];// $this->app->DB->Select("SELECT sprache FROM auftrag WHERE id='$v' LIMIT 1");
+ }
+
+ if($sprache=='' || $email === '') {
+ $adrArr = $this->app->DB->SelectRow("SELECT sprache, email FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
+ if($sprache == '') {
+ $sprache = $adrArr['sprache'];
+ }
+ if($email === '') {
+ $email = (string)$adrArr['email'];
+ }
+ }
+
+ if($sprache=='') {
+ $sprache='de';
+ }
+
+ if($email !== '')
+ {
+ $emailtext = $this->app->erp->Geschaeftsbriefvorlage($sprache,'auftrag',$projekt,$name,$v);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('AuftragPDFCustom'))
+ {
+ $Brief = new AuftragPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app,$projekt);
+ }
+ $Brief->GetAuftrag($v);
+ $_tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ unlink($_tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('AuftragPDFCustom'))
+ {
+ $Brief = new AuftragPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app,$projekt);
+ }
+ $Brief->GetAuftrag($v);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+
+ $fileid = $this->app->erp->CreateDatei($Brief->filename,'auftrag','','',$tmpfile,$this->app->User->GetName());
+ $this->app->erp->AddDateiStichwort($fileid,'auftrag','auftrag',$v);
+ $this->app->erp->DokumentSend($adresse,'auftrag', $v, 'email',$emailtext['betreff'],$emailtext['text'],array($tmpfile),"","",$projekt,$email, $name);
+ $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 ('','auftrag',NOW(),'".$this->app->DB->real_escape_string($this->app->User->GetName())."',
+ '$adresse','$v','email','".$this->app->DB->real_escape_string($emailtext['betreff'])."','".$this->app->DB->real_escape_string($emailtext['text'])."','$projekt','$ansprechpartner',1,'$fileid')");
+ $tmpid = $this->app->DB->GetInsertID();
+ unlink($tmpfile);
+ $this->app->DB->Update("UPDATE auftrag SET versendet=1, versendet_am=NOW(),
+ versendet_per='email',versendet_durch='".$this->app->DB->real_escape_string($this->app->User->GetName())."',schreibschutz='1' WHERE id='$v' LIMIT 1");
+ $this->app->erp->AuftragProtokoll($v,'Auftrag versendet');
+ }
+ }
+
+ break;
+ case 'storniert':
+ foreach($selectedIds as $v) {
+ $orderArr = $this->app->DB->SelectRow(
+ sprintf(
+ 'SELECT projekt, status FROM auftrag WHERE id= %d',
+ $v
+ )
+ );
+ $projekt = $orderArr['projekt'];
+ $status = $orderArr['status'];
+ if($status==='angelegt' || $status=='') {
+ $this->app->erp->DeleteAuftrag($v);
+ }
+ else {
+ if(class_exists('AuftragPDFCustom')) {
+ $Brief = new AuftragPDFCustom($this->app,$projekt);
+ }
+ else{
+ $Brief = new AuftragPDF($this->app,$projekt);
+ }
+ $Brief->GetAuftrag($v);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ $this->app->erp->AuftragProtokoll($v,'Auftrag storniert');
+ $this->app->DB->Update(
+ sprintf(
+ "UPDATE auftrag
+ SET status='storniert', schreibschutz=1, versendet = 1
+ WHERE id = %d AND status!='angelegt'
+ LIMIT 1",
+ $v
+ )
+ );
+ unlink($tmpfile);
+ $this->app->DB->Delete(
+ sprintf(
+ "DELETE FROM lager_reserviert WHERE parameter = '%d' AND objekt LIKE 'auftrag'",
+ $v
+ )
+ );
+ }
+ }
+ break;
+ case 'versendet':
+ foreach($selectedIds as $v) {
+ $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$v' LIMIT 1");
+ if(class_exists('AuftragPDFCustom'))
+ {
+ $Brief = new AuftragPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app,$projekt);
+ }
+ $Brief->GetAuftrag($v);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ $this->app->erp->AuftragProtokoll($v,'Auftrag versendet');
+ $this->app->DB->Update("UPDATE auftrag SET schreibschutz=1, versendet = 1 WHERE id = '$v' LIMIT 1");
+ $this->app->DB->Update("UPDATE auftrag SET status='versendet' WHERE id = '$v' AND status='freigegeben' LIMIT 1");
+ unlink($tmpfile);
+ }
+
+ break;
+
+ case 'drucken':
+ if($drucker)
+ {
+ foreach($selectedIds as $v) {
+ $auftragsdaten = $this->app->DB->SelectRow("SELECT projekt, adresse FROM auftrag WHERE id='$v' LIMIT 1");
+ $projekt = $auftragsdaten['projekt'];
+ $adressId = $auftragsdaten['adresse'];
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('AuftragPDFCustom'))
+ {
+ $Brief = new AuftragPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app,$projekt);
+ }
+ $Brief->GetAuftrag($v);
+ $_tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ unlink($_tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('AuftragPDFCustom'))
+ {
+ $Brief = new AuftragPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app,$projekt);
+ }
+ $Brief->GetAuftrag($v);
+ $tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ $this->app->printer->Drucken($drucker,$tmpfile);
+ $doctype = 'auftrag';
+ $this->app->erp->RunHook('dokumentsend_ende', 5, $doctype, $v, $projekt, $adressId, $aktion);
+ $this->app->erp->AuftragProtokoll($v,"Auftrag versendet");
+ unlink($tmpfile);
+ }
+
+ }
+ break;
+ case 'pdf':
+ $tmpfile = [];
+ foreach($selectedIds as $v) {
+ $projekt = $this->app->DB->Select("SELECT projekt FROM auftrag WHERE id='$v' LIMIT 1");
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('AuftragPDFCustom'))
+ {
+ $Brief = new AuftragPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app,$projekt);
+ }
+ $Brief->GetAuftrag($v);
+ $_tmpfile = $Brief->displayTMP();
+ $Brief->ArchiviereDocument();
+ unlink($_tmpfile);
+ $this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
+ if(class_exists('AuftragPDFCustom'))
+ {
+ $Brief = new AuftragPDFCustom($this->app,$projekt);
+ }else{
+ $Brief = new AuftragPDF($this->app,$projekt);
+ }
+ $Brief->GetAuftrag($v);
+ $tmpfile[] = $Brief->displayTMP();
+ //$Brief->ArchiviereDocument();
+ }
+
+ if((!empty($tmpfile)?count($tmpfile):0) > 0){
+ try {
+ /** @var \Xentral\Components\Pdf\PdfMerger $pdfMerger */
+ $pdfMerger = $this->app->Container->get('PdfMerger');
+ $mergeOutputPath = realpath($this->app->erp->GetTMP()) . '/' . uniqid('sammelpdf_', true) . '.pdf';
+ $pdfMerger->merge($tmpfile, $mergeOutputPath);
+
+ foreach($tmpfile as $key=>$value) {
+ unlink($value);
+ }
+
+ header('Content-type:application/pdf');
+ header('Content-Disposition: attachment;filename='.md5(microtime(true)).'.pdf');
+ readfile($mergeOutputPath);
+ $this->app->ExitXentral();
+ } catch (\Xentral\Components\Pdf\Exception\PdfComponentExceptionInterface $exception) {
+ echo 'Fehler beim Generieren der Sammelpdf: ' . htmlspecialchars($exception->getMessage());
+ $this->app->ExitXentral();
+ }
+ }
+ break;
+ default:
+ $this->app->erp->RunHook('auftrag_batch', 1, $selectedId);
+ break;
+ }
+ }
+ }
+
+ $this->AuftraguebersichtMenu();
+
+ if(strlen($backurl)>5){
+ $this->app->erp->MenuEintrag("$backurl", 'Zurück zur Übersicht');
+ }
+ else{
+ $this->app->erp->MenuEintrag('index.php', 'Zurück zur Übersicht');
+ }
+
+
+ $this->app->erp->RunMenuHook('auftrag_list');
+
+ // ZAHLUNGSMAIL
+ $zahlungsmail= $this->app->Secure->GetPOST('zahlungsmail');
+
+ if($zahlungsmail!='')
+ {
+ $orders = $this->app->DB->SelectArr(
+ "SELECT id
+ FROM auftrag
+ WHERE status='freigegeben'
+ AND vorkasse_ok!='1' AND zahlungsweise!='rechnung' AND zahlungsweise!='nachnahme' AND zahlungsweise!='bar' AND zahlungsweise!='lastschrift'"
+ );
+ if(!empty($orders)){
+ foreach($orders as $order) {
+ $this->app->erp->AuftragNeuberechnen($order['id']);
+ $this->app->erp->AuftragEinzelnBerechnen($order['id']);
+ $this->app->erp->AuftragZahlungsmail($order['id']);
+ }
+ }
+ }
+ // AUFTAEGE ABSCHLIESSEN!
+ $submit = $this->app->Secure->GetPOST('submit');
+ $auftraegemarkiert = $this->app->Secure->GetPOST('auftraegemarkiert');
+ if($submit!='' || $this->app->Secure->GetPOST('frmauto'))
+ {
+ $bezeichnung = $this->app->Secure->GetPOST('bezeichnung');
+ $orderIds = [];
+ if(!empty($auftraegemarkiert)) {
+ foreach($orderIds as $orderId) {
+ if((int)$orderId > 0) {
+ $orderIds[] = (int)$orderId;
+ }
+ }
+ $orders = empty($orderIds)?null:$this->app->DB->SelectArr(
+ sprintf(
+ 'SELECT id, projekt
+ FROM `auftrag`
+ WHERE id IN (%s)
+ ORDER BY id',implode(', ', $orderIds)
+ )
+ );
+
+ if(!empty($orders)) {
+ $auftraegenachprojekt = [];
+ foreach($orders as $order) {
+ $auftraegenachprojekt[$order['projekt']][] = $order['id'];
+ }
+ foreach ($auftraegenachprojekt as $projekt => $auftraege) {
+ if(is_array($auftraege)){
+ $this->kommissionierung = $this->app->erp->GetNextKommissionierung($bezeichnung);
+ foreach ($auftraege as $auftrag) {
+ $this->AuftragVersand($auftrag);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ $zahlungsweisen = $this->app->DB->SelectArr('
+ SELECT
+ zahlungsweise
+ FROM
+ auftrag
+ GROUP BY
+ zahlungsweise
+ ');
+
+ $zahlungsweiseStr = '';
+ if ($zahlungsweisen) {
+ foreach ($zahlungsweisen as $zahlungsweise) {
+ if (empty($zahlungsweise['zahlungsweise'])) {
+ continue;
+ }
+ $zahlungsweiseStr .= '' . ucfirst($zahlungsweise['zahlungsweise']) . ' ';
+ }
+ }
+
+ $status = $this->app->DB->SelectArr('
+ SELECT
+ status
+ FROM
+ auftrag
+ GROUP BY
+ status
+ ');
+
+ $statusStr = '';
+ if ($status) {
+ foreach ($status as $statusE) {
+ if (empty($statusE['status'])) {
+ continue;
+ }
+ $statusStr .= '' . ucfirst($statusE['status']) . ' ';
+ }
+ }
+
+ $versandarten = $this->app->DB->SelectArr('
+ SELECT
+ versandart
+ FROM
+ auftrag
+ GROUP BY
+ versandart
+ ');
+
+ $versandartenStr = '';
+ if ($versandarten) {
+ foreach ($versandarten as $versandart) {
+ if (empty($versandart['versandart'])) {
+ continue;
+ }
+ $versandartenStr .= '' . ucfirst($versandart['versandart']) . ' ';
+ }
+ }
+
+ $laender = $this->app->erp->GetSelectLaenderliste();
+ $laenderStr = '';
+ foreach ($laender as $landKey => $land) {
+ $laenderStr .= '' . $land . ' ';
+ }
+
+
+ $this->app->YUI->DatePicker("datumVon");
+ $this->app->YUI->DatePicker("datumBis");
+ $this->app->YUI->AutoComplete("projekt", "projektname", 1);
+ $this->app->YUI->AutoComplete("kundennummer", "kunde", 1);
+ $this->app->YUI->AutoComplete("auftragsnummer", "auftrag", 1);
+ $this->app->YUI->AutoComplete("artikel", "artikelnummer");
+ $this->app->YUI->AutoComplete("kundengruppe", "gruppekennziffer",1);
+
+ $this->app->Tpl->Add('ZAHLUNGSWEISEN',$zahlungsweiseStr);
+ $this->app->Tpl->Add('STATUS',$statusStr);
+ $this->app->Tpl->Add('VERSANDARTEN',$versandartenStr);
+ $this->app->Tpl->Add('LAENDER',$laenderStr);
+ $this->app->Tpl->Parse('TAB1',"auftrag_table_filter.tpl");
+
+ $this->app->YUI->TableSearch('TAB1','auftraege', 'show','','',basename(__FILE__), __CLASS__);
+// $this->app->YUI->TableSearch('TAB2',"auftraegeoffeneauto");
+ $this->app->YUI->TableSearch('TAB3',"auftraegeoffene");
+ $this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));
+
+
+ $inbearbeitung = $this->app->DB->Select("SELECT count(a.id) FROM auftrag a WHERE a.id!='' AND a.status='angelegt'");
+
+ if($inbearbeitung > 0) {
+ $inbearbeitung =' ('.$inbearbeitung.')';
+ }
+ else {
+ $inbearbeitung='';
+ }
+
+// $this->app->Tpl->Set('MESSAGE','Cronjob order processing not yet implemented!
');
+
+ $this->app->Tpl->Set('TABTEXT5',$inbearbeitung);
+
+ $this->app->YUI->TableSearch('TAB5',"auftraegeinbearbeitung");
+ $this->app->erp->RunHook('auftraguebersicht_filter', 0);
+ $this->app->Tpl->Parse('PAGE',"auftraguebersicht.tpl");
+ }
+
+ /**
+ * @param int $order_id
+ * @param int $pos_id
+ */
+ public function removeExplodedPosition($order_id, $pos_id)
+ {
+ if($order_id <= 0 || $pos_id <= 0)
+ {
+ return;
+ }
+ $pos_arr = $this->app->DB->SelectArr(
+ sprintf(
+ 'SELECT id FROM auftrag_position WHERE auftrag = %d AND explodiert_parent = %d',
+ (int)$order_id, (int)$pos_id
+ )
+ );
+ if(empty($pos_arr))
+ {
+ return;
+ }
+ foreach($pos_arr as $position)
+ {
+ $this->DelAuftragStueckliste($order_id, $position['id']);
+ $this->app->YUI->SortListEvent('del','auftrag_position','auftrag',$order_id, $position['id']);
+ $this->removeExplodedPosition($order_id, $pos_id);
+ }
+ }
+
+
+ /*
+ * Calculate order auto status for all open orders
+ */
+ public function Auftraegeberechnen() {
+ $this->app->erp->AuftraegeBerechnen();
+ header('Location: index.php?module=auftrag&action=versandzentrum');
+ }
+
+}
diff --git a/www/pages/content/auftrag_versandzentrum.tpl b/www/pages/content/auftrag_versandzentrum.tpl
index 5ea50a19..ee224967 100644
--- a/www/pages/content/auftrag_versandzentrum.tpl
+++ b/www/pages/content/auftrag_versandzentrum.tpl
@@ -1,16 +1,14 @@
+
[TABTEXT1]
+ [VORTABS2UEBERSCHRIFT]
[TABTEXT2] [NACHTABS2UEBERSCHRIFT]
+
-
-
+
+[MESSAGE]
[AUTOVERSANDBERECHNEN]
-
-
-
-[VORTABS3UEBERSCHRIFT]
-