mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-27 07:00:29 +01:00
7350 lines
318 KiB
PHP
7350 lines
318 KiB
PHP
<?php
|
|
/*
|
|
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
|
*
|
|
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
|
|
*
|
|
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
|
|
*
|
|
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
|
|
* to obtain the text of the corresponding license version.
|
|
*
|
|
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
|
*/
|
|
?>
|
|
<?php
|
|
use Xentral\Components\Http\JsonResponse;
|
|
use Xentral\Components\Http\Session\SessionHandler;
|
|
use Xentral\Modules\Article\Gateway\ArticleGateway;
|
|
use Xentral\Modules\PartialDelivery\Service\PartialDeliveryService;
|
|
use Xentral\Modules\ScanArticle\Exception\InvalidArgumentException;
|
|
use Xentral\Modules\ScanArticle\Service\ScanArticleService;
|
|
use Xentral\Modules\ScanArticle\Exception\ArticleNotFoundException;
|
|
|
|
include '_gen/auftrag.php';
|
|
|
|
|
|
|
|
class Auftrag extends GenAuftrag
|
|
{
|
|
/** @var int|bool $kommissionierung */
|
|
var $kommissionierung;
|
|
/** @var Application $app */
|
|
|
|
/**
|
|
* @param Application $app
|
|
* @param string $name
|
|
* @param array $erlaubtevars
|
|
*
|
|
* @return array
|
|
*/
|
|
public function TableSearch($app, $name, $erlaubtevars)
|
|
{
|
|
|
|
switch($name)
|
|
{
|
|
case 'auftraege':
|
|
$allowed['auftrag'] = array('list');
|
|
|
|
$projectsearchdisabled = (string)$this->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 = "<table class=\"nopadding\" cellpadding=\"0\" cellspacing=\"0\">";
|
|
$menu .= "<tr>";
|
|
$menu .= "<td>";
|
|
$menu .= "<a href=\"index.php?module=auftrag&action=edit&id=%value%\">";
|
|
$menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
|
|
$menu .= "</a>";
|
|
$menu .= "</td>";
|
|
$menu .= "<td>";
|
|
$menu .= "<a href=\"#\" onclick=DeleteDialog(\"index.php?module=auftrag&action=delete&id=%value%\");>";
|
|
$menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/delete.svg\" border=\"0\">";
|
|
$menu .= "</a>";
|
|
$menu .= "</td>";
|
|
$menu .= "<td>";
|
|
$menu .= "<a href=\"#\" onclick=CopyDialog(\"index.php?module=auftrag&action=copy&id=%value%\");>";
|
|
$menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/copy.svg\" border=\"0\">";
|
|
$menu .= "</a>";
|
|
$menu .= "</td>";
|
|
$menu .= "<td>";
|
|
$menu .= "<a href=\"index.php?module=auftrag&action=pdf&id=%value%\">";
|
|
$menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/pdf.svg\" border=\"0\">";
|
|
$menu .= "</a>";
|
|
$menu .= "</td>";
|
|
$menu .= "<td>";
|
|
$menu .= "<a href=\"#\" class=\"label-manager\" data-label-column-number=\"6\" data-label-reference-id=\"%value%\" data-label-reference-table=\"auftrag\">";
|
|
$menu .= "<span class=\"label-manager-icon\"></span>";
|
|
$menu .= "</a>";
|
|
$menu .= "</td>";
|
|
$menu .= "</tr>";
|
|
$menu .= "</table>";
|
|
|
|
$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,
|
|
'<img src=./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`,
|
|
CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',a.id,'\" />') 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 = '',
|
|
'',
|
|
' <font color=red><strong>*</strong></font>'
|
|
),
|
|
IF(
|
|
a.freitext = '',
|
|
'',
|
|
' <font color=blue><strong>*</strong></font>'
|
|
),
|
|
IF(
|
|
a.internebezeichnung != '',
|
|
CONCAT(
|
|
'<br><i style=color:#999>',
|
|
a.internebezeichnung,
|
|
'</i>'
|
|
),
|
|
''
|
|
),
|
|
IF(
|
|
a.abweichendelieferadresse = 1,
|
|
CONCAT(
|
|
'<br><i style=color:#999>Abw. Lieferadr.: ',
|
|
a.liefername,', ',
|
|
a.lieferstrasse,', ',
|
|
a.lieferland,'-',
|
|
a.lieferplz,' ',
|
|
a.lieferort,
|
|
'</i>'
|
|
),
|
|
''
|
|
)
|
|
) AS `name`,
|
|
a.land AS `land`,
|
|
$projectColSql,
|
|
".(
|
|
$auftragmarkierenegsaldo ?
|
|
"CONCAT(
|
|
'<span',
|
|
IF(
|
|
a.status = 'angelegt'
|
|
OR a.status = 'storniert'
|
|
OR ISNULL(a.saldogeprueft)
|
|
OR ( -(a.saldo) <= (IF(ISNULL(a.skontobetrag),a.gesamtsumme * ( a.zahlungszielskonto) / 100.0,a.skontobetrag)))
|
|
OR (a.vorabbezahltmarkieren = 1 and a.zahlungsweise = 'vorkasse'),
|
|
'',
|
|
' style=\"color:red;\" '
|
|
),
|
|
'>'," :
|
|
''
|
|
)."
|
|
a.zahlungsweise".($auftragmarkierenegsaldo?",'<span>')":"")." 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','Projekt', 'Zahlung', 'Betrag (brutto)','Kommissionierung','Monitor','Menü');
|
|
$width = array('1%','1%','1%', '10%', '10%', '27%', '10%', '5%', '5%', '1%', '1%', '1%', '1%');
|
|
$findcols = array('open','a.belegnr', 'a.belegnr', 'a.datum', 'a.lieferantkdrnummer', 'a.name','a.tatsaechlicheslieferdatum', 'a.land', 'p.abkuerzung', 'a.zahlungsweise', 'a.gesamtsumme','(SELECT id FROM kommissionierung WHERE auftrag = a.id)');
|
|
|
|
$defaultorder = 1;
|
|
$defaultorderdesc = 0;
|
|
$alignright = array(3,4,5,11,12);
|
|
|
|
$menu = "";
|
|
|
|
$sql = "SELECT SQL_CALC_FOUND_ROWS
|
|
a.id,
|
|
'<img src=./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`,
|
|
CONCAT('<input type=\"checkbox\" name=\"auswahl[]\" value=\"',a.id,'\" />') AS `auswahl`,
|
|
IF(a.fastlane=1,CONCAT(a.belegnr,' (FL)'),a.belegnr) AS `belegnr`,
|
|
DATE_FORMAT(a.datum,'%d.%m.%Y') AS `datum`,
|
|
a.lieferantkdrnummer,
|
|
a.name,
|
|
DATE_FORMAT(a.tatsaechlicheslieferdatum,'%d.%m.%Y') as `tatsaechlicheslieferdatum`,
|
|
a.land,
|
|
p.abkuerzung,
|
|
a.zahlungsweise,
|
|
a.gesamtsumme,
|
|
(SELECT id FROM kommissionierung WHERE auftrag = a.id) as kommissionierung,
|
|
(" . $this->app->YUI->IconsSQL() . ") AS icons,
|
|
a.id
|
|
FROM
|
|
auftrag a LEFT JOIN projekt p ON a.projekt = p.id";
|
|
|
|
$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 .= "<a href=\"index.php?module=auftrag&action=edit&id=%value%\">";
|
|
$menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
|
|
$menu .= "</a>";
|
|
|
|
$moreinfo = true; // Minidetail active
|
|
$menucol = 11; // For minidetail
|
|
|
|
break;
|
|
case 'auftraegeoffeneautowartend':
|
|
|
|
// Show list for cronjob commissioning
|
|
$allowed['auftraegeoffeneautowartend'] = array('list');
|
|
|
|
$heading = array('','', 'Auftrag', 'Vom', 'Kd-Nr.', 'Kunde','Lieferdatum', 'Land', 'Projekt', 'Zahlung', 'Betrag (brutto)','Monitor','Menü');
|
|
$width = array('1%','1%','1%', '10%', '10%', '10%', '27%', '5%', '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', 'p.abkuerzung', 'a.zahlungsweise', 'a.gesamtsumme');
|
|
|
|
$defaultorder = 1;
|
|
$defaultorderdesc = 0;
|
|
|
|
$menu = "";
|
|
|
|
$sql = "SELECT SQL_CALC_FOUND_ROWS
|
|
a.id,
|
|
'<img src=./themes/{$this->app->Conf->WFconf['defaulttheme']}/images/details_open.png class=details>' AS `open`,
|
|
CONCAT('<input type=\"checkbox\" name=\"auswahlcronjob[]\" value=\"',a.id,'\" />') AS `auswahl`,
|
|
IF(a.fastlane=1,CONCAT(a.belegnr,' (FL)'),a.belegnr) AS `belegnr`,
|
|
DATE_FORMAT(a.datum,'%d.%m.%Y') AS `datum`,
|
|
a.lieferantkdrnummer,
|
|
a.name,
|
|
DATE_FORMAT(a.tatsaechlicheslieferdatum,'%d.%m.%Y') as `tatsaechlicheslieferdatum`,
|
|
a.land,
|
|
p.abkuerzung,
|
|
a.zahlungsweise,
|
|
a.gesamtsumme,
|
|
(" . $this->app->YUI->IconsSQL() . ") AS icons,
|
|
a.id
|
|
FROM
|
|
auftrag a LEFT JOIN projekt p ON a.projekt = p.id";
|
|
|
|
$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 .= "<a href=\"index.php?module=auftrag&action=edit&id=%value%\">";
|
|
$menu .= "<img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\">";
|
|
$menu .= "</a>";
|
|
$menucol = 11; // For moredata
|
|
|
|
|
|
break;
|
|
case 'positionen_teillieferung':
|
|
|
|
$id = $app->Secure->GetGET('id');
|
|
$allowed['positionen_teillieferung'] = array('list');
|
|
$heading = array('Position','Artikel','Nr.','Menge','Lager','Teilmenge','');
|
|
$width = array( '1%', '60%', '29%','5%','5%'); // Fill out manually later
|
|
|
|
// columns that are aligned right (numbers etc)
|
|
// $alignright = array(4,5,6,7,8);
|
|
|
|
$findcols = array('ap.sort','a.name_de','a.nummer','ap.menge','lager','teilmenge');
|
|
$searchsql = array('');
|
|
|
|
$defaultorder = 2;
|
|
$defaultorderdesc = 0;
|
|
|
|
$input_for_menge = "CONCAT(
|
|
'<input type = \"number\" min=\"0\" max=\"',
|
|
ap.menge,
|
|
'\" name=\"teilmenge_',
|
|
ap.id,
|
|
'\"',
|
|
' value=\"',
|
|
|
|
'\">',
|
|
'</input>'
|
|
)";
|
|
|
|
|
|
// .'(SELECT TRIM(IFNULL(SUM(l.menge),0))+0 FROM lager_platz_inhalt l WHERE l.artikel=a.id) as lager'
|
|
|
|
$sql = "SELECT SQL_CALC_FOUND_ROWS
|
|
ap.sort,
|
|
ap.sort,
|
|
a.name_de,
|
|
a.nummer,"
|
|
.$this->app->erp->FormatMenge('ap.menge').","
|
|
."(SELECT TRIM(IFNULL(SUM(l.menge),0))+0 FROM lager_platz_inhalt l WHERE l.artikel=a.id) as lager,"
|
|
.$input_for_menge
|
|
." FROM auftrag_position ap
|
|
INNER JOIN
|
|
artikel a
|
|
ON ap.artikel = a.id";
|
|
|
|
$where = " ap.auftrag = $id ";
|
|
$count = "SELECT count(DISTINCT ap.id) FROM auftrag_position ap WHERE $where";
|
|
// $groupby = "";
|
|
|
|
break;
|
|
case "offenepositionen":
|
|
$allowed['offenepositionen'] = array('list');
|
|
$heading = array('Erwartetes Lieferdatum','Ursprüngliches Lieferdatum','Kunde','Auftrag','Position','ArtikelNr.','Artikel','Menge','Auftragsvolumen','Lagermenge','Monitor','Menü');
|
|
// $width = array('10%','10%','10%','10%','30%','30%');
|
|
|
|
// Spalten für die Sortierfunktion in der Liste, muss identisch mit SQL-Ergebnis sein, erste Spalte weglassen,Spalten- Alias funktioniert nicht
|
|
$findcols = array('erwartetes_lieferdatum','urspruengliches_lieferdatum','kunde','belegnr','position','artikel','bezeichnung','menge','umsatz');
|
|
// Spalten für die Schnellsuche
|
|
$searchsql = array("DATE_FORMAT(erwartetes_lieferdatum,\"%Y-%m-%d\")",'kunde','belegnr','artikel','bezeichnung');
|
|
|
|
// Sortierspalte laut SQL
|
|
$defaultorder = 2;
|
|
$defaultorderdesc = 0;
|
|
|
|
$numbercols = [8,9,10];
|
|
$sumcol = [8,9];
|
|
$alignright = [8,9,10];
|
|
|
|
$menucol = 12;
|
|
|
|
$menu = "<a href=\"index.php?module=auftrag&action=edit&id=%value%\" target=\"blank\"><img src=\"./themes/{$app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>";
|
|
|
|
// 1. Spalte ist unsichtbar, 2. Für Minidetail, 3. ist Standardsortierung beim öffnen des Moduls
|
|
|
|
$sql = "SELECT SQL_CALC_FOUND_ROWS
|
|
auftrag_id,
|
|
DATE_FORMAT(erwartetes_lieferdatum,\"%d.%m.%Y\") erwartetes_lieferdatum_form,
|
|
CASE
|
|
WHEN urspruengliches_lieferdatum <> erwartetes_lieferdatum THEN CONCAT(\"<p style=\'color:red;\'>\",DATE_FORMAT(urspruengliches_lieferdatum,\"%d.%m.%Y\"),\"</p>\")
|
|
ELSE DATE_FORMAT(urspruengliches_lieferdatum,\"%d.%m.%Y\")
|
|
END urspruengliches_lieferdatum_form,
|
|
kunde,
|
|
belegnr,
|
|
position,
|
|
CONCAT(\"<a href=index.php?module=artikel&action=edit&id=\",artikel_id,\" target=_blank>\",artikel,\"</a>\") artikel,
|
|
bezeichnung,
|
|
menge,
|
|
umsatz,
|
|
CASE WHEN menge <= lager THEN CONCAT(\"<a href=index.php?module=artikel&action=lager&id=\",artikel_id,\" target=_blank>\",ROUND(lager,0),\"</a>\")
|
|
ELSE CONCAT(\"<a href=index.php?module=artikel&action=lager&id=\",artikel_id,\" style=\'color:red;\' target=_blank>\",ROUND(lager,0),\"</a>\")
|
|
END lagermenge,".
|
|
$this->app->YUI->IconsSQL().
|
|
"autoversand_icon,
|
|
auftrag_id
|
|
FROM
|
|
(
|
|
SELECT
|
|
auf.id,
|
|
auf.status,
|
|
auf.lager_ok,
|
|
auf.porto_ok,
|
|
auf.ust_ok,
|
|
auf.vorkasse_ok,
|
|
auf.nachnahme_ok,
|
|
auf.check_ok,
|
|
auf.liefertermin_ok,
|
|
auf.kreditlimit_ok,
|
|
auf.liefersperre_ok,
|
|
auf.adresse,
|
|
CASE
|
|
WHEN auftrag_position.lieferdatum <> '0000-00-00' AND auftrag_position.lieferdatum > CURRENT_DATE THEN auftrag_position.lieferdatum
|
|
WHEN auftrag_position.lieferdatum <> '0000-00-00' THEN CURRENT_DATE
|
|
WHEN auf.tatsaechlicheslieferdatum <> '0000-00-00' AND auf.tatsaechlicheslieferdatum > CURRENT_DATE THEN auf.tatsaechlicheslieferdatum
|
|
WHEN auf.tatsaechlicheslieferdatum <> '0000-00-00' THEN CURRENT_DATE
|
|
WHEN auf.lieferdatum <> '0000-00-00' AND auf.lieferdatum > CURRENT_DATE THEN auf.lieferdatum
|
|
ELSE CURRENT_DATE
|
|
END erwartetes_lieferdatum,
|
|
CASE
|
|
WHEN auftrag_position.lieferdatum <> '0000-00-00' THEN auftrag_position.lieferdatum
|
|
WHEN auf.tatsaechlicheslieferdatum <> '0000-00-00' THEN auf.tatsaechlicheslieferdatum
|
|
WHEN auf.lieferdatum <> '0000-00-00' THEN auf.lieferdatum
|
|
ELSE auf.datum
|
|
END urspruengliches_lieferdatum,
|
|
auf.name kunde,
|
|
auf.belegnr belegnr,
|
|
auftrag_position.sort position,
|
|
artikel.nummer artikel,
|
|
artikel.id artikel_id,
|
|
auftrag_position.bezeichnung bezeichnung,
|
|
round(auftrag_position.menge,0) menge,
|
|
round(auftrag_position.menge*auftrag_position.preis,2) umsatz,
|
|
(SELECT SUM(menge) FROM lager_platz_inhalt INNER JOIN lager_platz ON lager_platz_inhalt.lager_platz = lager_platz.id WHERE lager_platz_inhalt.artikel = artikel.id AND lager_platz.sperrlager <> 1) as lager,
|
|
auf.autoversand autoversand,
|
|
auf.id auftrag_id
|
|
FROM auftrag auf
|
|
INNER JOIN auftrag_position ON auf.id = auftrag_position.auftrag
|
|
INNER JOIN artikel ON auftrag_position.artikel = artikel.id
|
|
WHERE auf.status NOT IN ('abgeschlossen','storniert') AND auf.belegnr <> ''
|
|
ORDER BY urspruengliches_lieferdatum ASC, auf.belegnr ASC, auftrag_position.sort ASC
|
|
) a";
|
|
|
|
$where = "";
|
|
|
|
$groupby = "";
|
|
|
|
// Für Anzeige der Gesamteinträge
|
|
$count = "SELECT count(DISTINCT auftrag_position.id) FROM auftrag a INNER JOIN auftrag_position ON a.id = auftrag_position.auftrag WHERE a.status <>'abgeschlossen' AND a.belegnr <> ''";
|
|
|
|
// Spalte mit Farbe der Zeile (immer vorletzte-1)
|
|
// $trcol = 12;
|
|
// $moreinfo = true;
|
|
|
|
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->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("teillieferung","AuftragTeillieferung");
|
|
$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->ActionHandler("offene", "AuftragOffenePositionen");
|
|
|
|
$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 <small>vom %s</small>', $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 .= "<option value=\"delivery\">als Lieferschein weiterführen</option>";
|
|
$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('<div class="error">Es ist ein Fehler aufgetreten</div>');
|
|
}else if(isset($erg['error']))
|
|
{
|
|
$msg = $this->app->erp->base64_url_encode('<div class="error">'.$erg['error'].'</div>');
|
|
|
|
}else{
|
|
$msg = $this->app->erp->base64_url_encode('<div class="info">Anfrage gesendet</div>');
|
|
}
|
|
}else{
|
|
$msg = $this->app->erp->base64_url_encode('<div class="error">Kein Auftrag</div>');
|
|
}
|
|
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',"<div class=\"error\">{|Der Artikel wurde nicht gefunden|}: ".$scanner."</div>");
|
|
} catch(InvalidArgumentException $e){
|
|
$this->app->Tpl->Set('TAB1',"<div class=\"error\">{|Fehler beim Schreiben in die Session|}</div>");
|
|
}
|
|
}
|
|
|
|
if($schreibschutz=="1"){
|
|
$this->app->Tpl->Set('TAB1',"<div class=\"info\">Der Schreibschutz ist aktiviert. Bitte entfernen Sie diesen.</div>");
|
|
}
|
|
else{
|
|
|
|
if(!empty($posAdd)){
|
|
try{
|
|
if($sumposition) {
|
|
$scanArticleService->saveSumedPositions('auftrag', $id);
|
|
}
|
|
else{
|
|
$scanArticleService->savePositions('auftrag', $id);
|
|
}
|
|
$this->app->Tpl->Set('MESSAGE',"<div class=\"info\">{|Positionen hinzugefügt|}</div>");
|
|
} catch(Exception $e){
|
|
$this->app->Tpl->Set('MESSAGE',"<div class=\"error\">{|Positionen nicht gespeichert|}!</div>");
|
|
}
|
|
}
|
|
|
|
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','<input type="submit" id="posadd" name="posadd" value="Positionen hinzufügen"><input type="submit" id="posdel" name="posdel" value="Löschen">');
|
|
}
|
|
|
|
$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("<div class=\"info\">Die Verbandsinformation wurde neu geladen!</div> ");
|
|
$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("<div class=\"warning\">Die Rabatte wurden entfernt!</div> ");
|
|
$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("<div class=\"info\">Versandstatus an Shop übertragen</div> ");
|
|
$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('<font color=red><b>',(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),'</b></font>'),
|
|
'<font color=red><b>aus</b></font>'))),'-') 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 = "<option value=\"freigabe\">Auftrag freigeben</option>";
|
|
$freigabe .= "<option value=\"freigabemail\">Auftrag freigeben + AB per Mail</option>";
|
|
}
|
|
|
|
$proformapopup = '';
|
|
$proformarechnungoption = '';
|
|
$proformarechnungcase = '';
|
|
|
|
$casehook = '';
|
|
$optionhook = '';
|
|
$kreditlimit = '';
|
|
$shopexport = '';
|
|
$auswahlentsprechendkommissionierung = '';
|
|
$this->app->erp->RunHook('auftragiconmenu_option', 5, $id, $casehook, $optionhook, $status, $prefix);
|
|
|
|
if($anfrageid > 0){
|
|
$freigabe .= "<option value=\"anfrage\">in Anfrage rückführen</option>";
|
|
}
|
|
|
|
if($kreditlimit_ok==0 && $this->app->erp->RechteVorhanden('auftrag','kreditlimit')){
|
|
$kreditlimit .= "<option value=\"kreditlimit\">Kreditlimit für diesen Auftrag freigeben</option>";
|
|
}
|
|
|
|
$checkifrgexists = $this->app->DB->Select("SELECT id FROM rechnung WHERE auftragid='$id' LIMIT 1");
|
|
|
|
if($status !== 'storniert') {
|
|
$storno = '<option value="storno">Auftrag stornieren</option>';
|
|
}
|
|
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 = '<option value="unstorno">Auftrag Storno rückgängig</option>';
|
|
}
|
|
}
|
|
|
|
/*$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 = "<option value=\"unstorno\">Auftrag Storno rückgängig</option>";
|
|
else if($status!="storniert")
|
|
$storno = "<option value=\"storno\">Auftrag stornieren</option>";*/
|
|
|
|
$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 = '';
|
|
|
|
if ($status==='angelegt' || $status==='freigegeben') {
|
|
$teillieferungen = '<option value="teillieferung">Teilauftrag erstellen</option>';
|
|
}
|
|
|
|
if($status==='freigegeben') {
|
|
$alleartikelreservieren = "<option value=\"reservieren\">alle Artikel reservieren</option>";
|
|
|
|
|
|
if($kommissionierart === "zweistufig" || $kommissionierart === "lieferscheinlagerscan" || $kommissionierart==="lieferscheinscan") {
|
|
if($art==="rechnung"){
|
|
$auswahlentsprechendkommissionierung = "<option value=\"versand\">Auto-Versand: RE u. LS erstellen (ohne Lager)</option>";
|
|
}
|
|
else{
|
|
$auswahlentsprechendkommissionierung = "<option value=\"versand\">Auto-Versand: an Versandzentrum übergeben</option>";
|
|
}
|
|
}
|
|
else if($kommissionierart === "lieferschein" || $kommissionierart === "lieferscheinlager"){
|
|
$auswahlentsprechendkommissionierung = "<option value=\"versand\">Auto-Versand: RE u. LS erstellen (mit Lager)</option>";
|
|
}
|
|
else{
|
|
$auswahlentsprechendkommissionierung = "<option value=\"versand\">Auto-Versand: RE u. LS erstellen (ohne Lager)</option>";
|
|
}
|
|
}
|
|
|
|
|
|
$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 = '<option value="zertifikate">Zertifikate anhängen</option>';
|
|
$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 = '<option value="artikeleinlagern">Artikel einlagern</option>';
|
|
$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 = '<option value="artikelauslagern">Artikel auslagern</option>';
|
|
$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 = '<option value="shopexport">Status an Shop zurückmelden</option>';
|
|
$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 = "<option value=\"lieferkette\">Lieferkette erzeugen</option>";
|
|
}
|
|
}
|
|
|
|
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 = "<option value=\"belegeimport\">Export als CSV</option>";
|
|
}
|
|
|
|
$extendtext = '';
|
|
if($checkifrgexists>0) {
|
|
$extendtext = 'HINWEIS: Es existiert bereits eine Rechnung zu diesem Auftrag! ';
|
|
}
|
|
|
|
if($lieferantenauftrag!='1') {
|
|
$alsrechnung = '<option value="invoice">als Rechnung weiterführen</option>';
|
|
}
|
|
|
|
$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 ="
|
|
|
|
<script type=\"text/javascript\">
|
|
function onchangeauftrag(cmd)
|
|
{
|
|
switch(cmd)
|
|
{
|
|
case 'storno':
|
|
if(!confirm('Wirklich stornieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=delete&id=%value%'; break;
|
|
case 'unstorno':
|
|
if(!confirm('Wirklich stornierten Auftrag wieder freigeben?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=undelete&id=%value%';
|
|
break;
|
|
case 'teillieferung':
|
|
window.location.href='index.php?module=auftrag&action=teillieferung&id=%value%';
|
|
break;
|
|
case 'anfrage': if(!confirm('Wirklich rückführen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=anfrage&id=%value%'; break;
|
|
case 'kreditlimit': if(!confirm('Wirklich Kreditlimit für diesen Auftrag freigeben?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=kreditlimit&id=%value%'; break;
|
|
case 'copy': if(!confirm('Wirklich kopieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=copy&id=%value%'; break;
|
|
case 'delivery': if(!confirm('Wirklich als Lieferschein weiterführen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=lieferschein&id=%value%'; break;
|
|
case 'deliveryinvoice': if(!confirm('Wirklich als Lieferschein und Rechnung weiterführen und Artikel automatisch aus Lager abziehen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=lieferscheinrechnung&id=%value%'; break;
|
|
case 'invoice': if(!confirm('".$extendtext."Wirklich als Rechnung weiterführen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=rechnung&id=%value%'; break;
|
|
case 'produktion': if(!confirm('Wirklich als Produktion weiterführen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=produktion&id=%value%'; break;
|
|
case 'auftragzubestellung': if(!confirm('Wirklich als Bestellung weiterführen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftragzubestellung&action=edit&id=%value%&cmd=auftrag'; break;
|
|
case 'reservieren': if(!confirm('Sollen alle Artikel für diesen Auftrag reserviert werden?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=reservieren&id=%value%'; break;
|
|
case 'pdf': window.location.href='index.php?module=auftrag&action=pdf&id=%value%'; document.getElementById('aktion$prefix').selectedIndex = 0; break;
|
|
case 'proforma': window.location.href='index.php?module=auftrag&action=proforma&id=%value%'; document.getElementById('aktion$prefix').selectedIndex = 0; break;
|
|
case 'versand': if(!confirm('Wirklich als Versand weiterführen oder Auftrag abschliessen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=versand&id=%value%&cmd=manually'; break;
|
|
case 'abschicken': ".$this->app->erp->DokumentAbschickenPopup()." break;
|
|
$caselieferkette
|
|
case 'freigabe': window.location.href='index.php?module=auftrag&action=freigabe&id=%value%'; break;
|
|
case 'abschluss': if(!confirm('Wirklich manuell ohne erstellen von Lieferschein und/oder Rechnung als abgeschlossen markieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=abschluss&id=%value%&abschluss=%value%'; break;
|
|
case 'alsfreigegeben': if(!confirm('Wirklich als freigegeben markieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=auftrag&action=alsfreigegeben&id=%value%&alsfreigegeben=%value%'; break;
|
|
$menueinlagern
|
|
$menuauslagern
|
|
|
|
case 'freigabemail': window.location.href='index.php?module=auftrag&action=freigabe&id=%value%&freigabe=%value%&cmd=mail'; break;
|
|
$zertifikatcase
|
|
$menushopupdate
|
|
$casecustom
|
|
$casehook
|
|
$casebelegeimport
|
|
$proformarechnungcase
|
|
$hookcase
|
|
}
|
|
}
|
|
</script>
|
|
|
|
|
|
Aktion: <select id=\"aktion$prefix\" onchange=\"onchangeauftrag(this.value);\">
|
|
<option>bitte wählen ...</option>
|
|
$storno
|
|
<option value=\"copy\">Auftrag kopieren</option>
|
|
$freigabe
|
|
<option value=\"abschicken\">Auftrag abschicken</option>
|
|
<!--<option value=\"proforma\">Proforma Rechnung öffnen</option>-->
|
|
$alsbestellung
|
|
$alsproduktion
|
|
<option value=\"delivery\">als Lieferschein weiterführen</option>
|
|
$alsrechnung
|
|
$proformarechnungoption
|
|
<option value=\"abschluss\">als abgeschlossen markieren</option>
|
|
$alsfreigegeben
|
|
<!--<option value=\"deliveryinvoice\">manuell weiterführen + ausbuchen</option>-->
|
|
$kreditlimit
|
|
$teillieferungen
|
|
$auswahlentsprechendkommissionierung
|
|
$zertifikatoption
|
|
$artikeleinlagern
|
|
$artikelauslagern
|
|
$shopexport
|
|
$optionlieferkette
|
|
$optioncustom
|
|
$optionhook
|
|
$optionbelegeimport
|
|
$alleartikelreservieren
|
|
$hookoption
|
|
<option value=\"pdf\">PDF öffnen</option>
|
|
</select>
|
|
|
|
<a href=\"index.php?module=auftrag&action=pdf&id=%value%\" title=\"PDF\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a>";
|
|
|
|
|
|
$menu .= "<!--<a href=\"index.php?module=auftrag&action=proforma&id=%value%\" title=\"Proforma Rechnung\"><img border=\"0\" src=\"./themes/new/images/proforma.gif\"></a>-->
|
|
<!--
|
|
<a href=\"index.php?module=auftrag&action=edit&id=%value%\" title=\"Bearbeiten\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a>
|
|
<a onclick=\"if(!confirm('Wirklich stornieren?')) return false; else window.location.href='index.php?module=auftrag&action=delete&id=%value%';\" title=\"Stornieren\">
|
|
<img src=\"./themes/new/images/delete.svg\" border=\"0\"></a>
|
|
<a onclick=\"if(!confirm('Wirklich kopieren?')) return false; else window.location.href='index.php?module=auftrag&action=copy&id=%value%';\" title=\"Kopieren\">
|
|
<img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>
|
|
<a onclick=\"if(!confirm('Wirklich als Lieferschein weiterführen?')) return false; else window.location.href='index.php?module=auftrag&action=lieferschein&id=%value%';\" title=\"weiterführen als Lieferschein\">
|
|
<img src=\"./themes/new/images/lieferung.png\" border=\"0\"></a>
|
|
<a onclick=\"if(!confirm('Wirklich als Rechnung weiterführen?')) return false; else window.location.href='index.php?module=auftrag&action=rechnung&id=%value%';\" title=\"weiterführen als Rechnung\">
|
|
<img src=\"./themes/new/images/rechnung.png\" border=\"0\"></a>
|
|
|
|
<a onclick=\"if(!confirm('Sollen alle Artikel für diesen Auftrag reserviert werden?')) return false; else window.location.href='index.php?module=auftrag&action=reservieren&id=%value%';\" title=\"Reservieren\">
|
|
<img src=\"./themes/new/images/reservieren.png\" border=\"0\"></a>
|
|
|
|
<a onclick=\"if(!confirm('Wirklich als Versand weiterführen oder Auftrag abschließen?')) return false; else window.location.href='index.php?module=auftrag&action=versand&id=%value%';\" title=\"weiterführen als Versand\">
|
|
<img src=\"./themes/new/images/versand.png\" border=\"0\" alt=\"weiterführen als Versand\"></a>-->";
|
|
|
|
//$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 Versand<br><a href=\"#\" onclick=\"if(!confirm(\'Auftrag wirklich aus dem Versand nehmen?\')) return false; else window.location.href=\'index.php?module=auftrag&action=ausversand&id=',v.id,'\'\">Aktuell im Versand <br>-> als RMA markieren</a>')) as datum, v.versandunternehmen as versand, v.tracking as L,
|
|
CONCAT('<a href=\"index.php?module=lieferschein&action=pdf&id=',v.lieferschein,'\">',l.belegnr,'</a><br><a href=\"index.php?module=lieferschein&action=edit&id=',v.lieferschein,'\">zum LS</a>') as LS,
|
|
CONCAT('<a href=\"index.php?module=rechnung&action=pdf&id=',v.rechnung,'\">',r.belegnr,'</a><br><a href=\"index.php?module=rechnung&action=edit&id=',v.rechnung,'\">zur RE</a>') as RE,
|
|
if(tracking!='',CONCAT('<a href=\"http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc=',tracking,'\" target=\"_blank\">Online-Status</a>'),'')
|
|
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 .= "<center><a href=\"\" onclick=\"if(!confirm('Wirklich RMA starten?')) return false; else window.location.href='index.php';\">RMA jetzt starten</a></center>";
|
|
}
|
|
|
|
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' => '<div class="inlinetooltiptable">kein Lagerartikel</div>'];
|
|
}
|
|
|
|
$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] = '<span style="color:red;">'.$dataset[$lastCol].'</span>';
|
|
$warning = '<br /><i style="color:red;">Es sind weniger MHD-Mengen als Lagerartikel vorhanden!</i>';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
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] = '<span style="color:red;">'.$dataset[$lastCol].'</span>';
|
|
$warning = '<br /><i style="color:red;">Es sind weniger Chargen-Mengen als Lagerartikel vorhanden!</i>';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
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'=>
|
|
'<div class="inlinetooltiptable"><style> div.inlinetooltiptable > table.mkTable > tbody > tr:nth-child(2n+1) td {background-color:#e0e0e0;} </style>'.$table->DisplayNew('return',$lastCol,'noAction').$warning.'</div>'
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @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',
|
|
"<a href=\"index.php?module=adresse&action=edit&id=".$addressId."\" target=\"_blank\">"
|
|
.$kundennummer."</a> ".$kundenname
|
|
);
|
|
if($this->app->erp->RechteVorhanden('projekt','dashboard')){
|
|
$this->app->Tpl->Set(
|
|
'PROJEKT',
|
|
"<a href=\"index.php?module=projekt&action=dashboard&id="
|
|
. $projectId . "\" target=\"_blank\">$projekt</a>"
|
|
);
|
|
}
|
|
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 = "<font color=red>-".number_format($kundensaldo,2,',','.')."</font>";
|
|
}
|
|
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");
|
|
|
|
// Deckungsbeitrag
|
|
if (!$this->app->erp->RechteVorhanden('auftrag','einkaufspreise')) {
|
|
$this->app->Tpl->Set('DBHIDDEN','hidden');
|
|
} else {
|
|
$sql = "
|
|
SELECT
|
|
umsatz_netto_gesamt,
|
|
artikel,
|
|
menge,
|
|
einkaufspreis
|
|
FROM
|
|
`auftrag_position`
|
|
WHERE
|
|
`auftrag` = ".$id."
|
|
";
|
|
|
|
$positionen = $this->app->DB->SelectArr($sql);
|
|
|
|
$umsatz_gesamt = 0;
|
|
$kosten_gesamt = 0;
|
|
$db_gesamt = 0;
|
|
foreach ($positionen as $position) {
|
|
if (empty($position['einkaufspreis'])) {
|
|
$position['einkaufspreis'] = $this->app->erp->GetEinkaufspreis($position['artikel'],$position['menge']);
|
|
}
|
|
$kosten = ($position['einkaufspreis']*$position['menge']);
|
|
$db_gesamt += $position['umsatz_netto_gesamt']-$kosten;
|
|
$kosten_gesamt += $kosten;
|
|
$umsatz_gesamt += $position['umsatz_netto_gesamt'];
|
|
}
|
|
|
|
$this->app->Tpl->Set('NETTOGESAMT',$this->app->erp->number_format_variable($umsatz_gesamt,2));
|
|
$this->app->Tpl->Set('KOSTEN',$this->app->erp->number_format_variable($kosten_gesamt,2));
|
|
$this->app->Tpl->Set('DECKUNGSBEITRAG',$this->app->erp->number_format_variable($db_gesamt,2));
|
|
$this->app->Tpl->Set( 'DBPROZENT',
|
|
$umsatz_gesamt==0?
|
|
"-":
|
|
$this->app->erp->number_format_variable(
|
|
round(
|
|
$db_gesamt/$umsatz_gesamt*100,2
|
|
)
|
|
)."%"
|
|
);
|
|
}
|
|
|
|
$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('<a href=\"index.php?module=angebot&action=edit&id=',an.id,'\" target=\"_blank\">',if(an.belegnr='0' OR an.belegnr='','ENTWURF',an.belegnr),'</a> <a href=\"index.php?module=angebot&action=pdf&id=',an.id,'\" target=\"blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Angebot PDF\" border=\"0\"></a>
|
|
<a href=\"index.php?module=angebot&action=edit&id=',an.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Angebot bearbeiten\" border=\"0\"></a>')
|
|
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', "<br>");
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
$this->app->Tpl->Set('ANGEBOT', '-');
|
|
}
|
|
$lieferschein = $this->app->DB->SelectPairs(
|
|
"SELECT
|
|
l.id, CONCAT(
|
|
'<a href=\"index.php?module=lieferschein&action=edit&id=',
|
|
l.id,'\" target=\"_blank\"',
|
|
if(l.status='storniert',' title=\"Lieferschein storniert\"><s>','>'),
|
|
if(l.belegnr='0' OR l.belegnr='','ENTWURF',l.belegnr),
|
|
if(l.status='storniert','</s>',''),
|
|
'</a> <a href=\"index.php?module=lieferschein&action=pdf&id=',l.id,
|
|
'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Lieferschein PDF\" border=\"0\"></a>
|
|
<a href=\"index.php?module=lieferschein&action=edit&id=',
|
|
l.id,
|
|
'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Lieferschein bearbeiten\" border=\"0\"></a>'
|
|
) 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('<br />', $lieferschein));
|
|
}
|
|
|
|
/* rechnungen */
|
|
|
|
$sammelrechnungcheck = $this->app->DB->Select("SELECT * FROM sammelrechnung_position LIMIT 1");
|
|
if($sammelrechnungcheck) {
|
|
$rechnung = $this->app->DB->SelectPairs(
|
|
"SELECT
|
|
r.id, CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','</s>',''),'</a> <a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>
|
|
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') as rechnung
|
|
FROM rechnung r
|
|
WHERE r.auftragid='$id'
|
|
union
|
|
SELECT
|
|
r.id,CONCAT('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','</s>',''),'</a> <a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>
|
|
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') 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('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','</s>',''),'</a> <a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>
|
|
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') 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('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','</s>',''),'</a> <a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>
|
|
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>'
|
|
) 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('<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Rechnung storniert\"><s>','>'),if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),if(r.status='storniert','</s>',''),'</a> <a href=\"index.php?module=rechnung&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Rechnung PDF\" border=\"0\"></a>
|
|
<a href=\"index.php?module=rechnung&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>'
|
|
) 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('<br />', $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[] = '<a href="index.php?module=bestellung&action=edit&id='
|
|
.$supplierOrderId.'" target="_blank">'
|
|
.($supplierOrderNumber?$supplierOrderNumber:'ENTWURF')
|
|
.'</a>
|
|
<a href="index.php?module=bestellung&action=pdf&id='
|
|
.$supplierOrderId.'" target="_blank"><img src="./themes/new/images/pdf.svg" title="Bestellung PDF" border="0"></a>
|
|
<a href="index.php?module=bestellung&action=edit&id='
|
|
.$supplierOrderId.'" target="_blank"><img src="./themes/new/images/edit.svg" title="Bestellung bearbeiten" border="0"></a>';
|
|
}
|
|
$this->app->Tpl->Set('BESTELLUNG', implode('<br />', $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[] = '<a href="index.php?module=retoure&action=edit&id='
|
|
.$returnOrderId.'" target="_blank">'
|
|
.($isReturnOrderCanceled?'<s>':'').$returnOrderNumber.($isReturnOrderCanceled?'</s>':'')
|
|
.'</a>
|
|
<a href="index.php?module=retoure&action=pdf&id='
|
|
.$returnOrderId
|
|
.'" target="_blank"><img src="./themes/new/images/pdf.svg" alt="Retoure PDF" title="Retoure PDF" border="0"></a>
|
|
<a href="index.php?module=retoure&action=edit&id='
|
|
.$returnOrderId
|
|
.'" target="_blank"><img src="./themes/new/images/edit.svg" alt="Retoure bearbeiten" title="Retoure bearbeiten" border="0"></a>';
|
|
}
|
|
$this->app->Tpl->Set('RETOURE', implode('<br />', $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[] = '<a href="index.php?module=preisanfrage&action=edit&id='
|
|
.$priceRequestId.'" target="_blank">'
|
|
.($isPriceRequestIsCanceled?'<s>':'').($priceRequestNumber).($isPriceRequestIsCanceled?'</s>':'').'</a>
|
|
<a href="index.php?module=preisanfrage&action=pdf&id='
|
|
.$priceRequestId.'" target="_blank"><img src="./themes/new/images/pdf.svg" title="Preisanfrage PDF" border="0"></a>
|
|
<a href="index.php?module=preisanfrage&action=edit&id='
|
|
.$priceRequestId.'" target="_blank"><img src="./themes/new/images/edit.svg" title="Preisanfrage bearbeiten" border="0"></a>';
|
|
}
|
|
$this->app->Tpl->Set('PREISANFRAGE', implode('<br />', $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 Versand<br><a href=\"#\" onclick=\"if(!confirm(\'Auftrag wirklich aus dem Versand nehmen?\')) return false; else window.location.href=\'index.php?module=auftrag&action=ausversand&id=',
|
|
v.id,
|
|
'\'\">Aktuell im Versand <br>-> als RMA markieren</a>'
|
|
)
|
|
) 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), ':<a href=\"', v.tracking_link, '\">', v.tracking, '</a>'),
|
|
if(versandunternehmen = 'dhlexpress' AND l.land = 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"https://www.dhl.de/de/privatkunden/pakete-empfangen/verfolgen.html?piececode=', v.tracking, '\" target=\"_blank\">', v.tracking, '</a>'),
|
|
if(versandunternehmen = 'dhlexpress' AND l.land != 'DE' AND v.tracking != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"https://www.dhl.com/en/hidden/component_library/express/local_express/dhl_de_tracking/de/sendungsverfolgung_dhlde.html?AWB=', v.tracking, '&brand=DHL\" target=\"_blank\">', v.tracking, '</a>'),
|
|
if((versandunternehmen='dhl' OR versandunternehmen='intraship' OR versandunternehmen LIKE '%dhl%') AND v.tracking!='', CONCAT(UPPER(versandunternehmen),':<a href=\"http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc=',v.tracking,'\" target=\"_blank\">',v.tracking,'</a>'),
|
|
if(versandunternehmen LIKE '%dpd%',CONCAT(UPPER(versandunternehmen),':<a href=\"https://tracking.dpd.de/parcelstatus/?locale=de_DE&query=',v.tracking,'\" target=\"_blank\">',v.tracking,'</a>'),
|
|
if(versandunternehmen LIKE '%ups%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':<a href=\"https://www.ups.com/track?loc=de_DE&tracknum=',v.tracking,'\" target=\"_blank\">',v.tracking,'</a>'),
|
|
if(versandunternehmen LIKE '%gls%' AND v.tracking != '', CONCAT(UPPER(versandunternehmen),':<a href=\"https://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DE03/DE/5004.htm?txtRefNo=',v.tracking,'\" target=\"_blank\">',v.tracking,'</a>'),
|
|
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), ':<a href=\"https://www.dhl.de/de/privatkunden/pakete-empfangen/verfolgen.html?piececode=', vp.tracking, '\" target=\"_blank\">', vp.tracking, '</a>'),
|
|
if(versandunternehmen = 'dhlexpress' AND l.land != 'DE' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen), ':<a href=\"https://www.dhl.com/en/hidden/component_library/express/local_express/dhl_de_tracking/de/sendungsverfolgung_dhlde.html?AWB=', vp.tracking, '&brand=DHL\" target=\"_blank\">', vp.tracking, '</a>'),
|
|
if( (versandunternehmen='dhl' OR versandunternehmen='intraship') AND vp.tracking!='', CONCAT(UPPER(versandunternehmen),':<a href=\"http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc=',vp.tracking,'\" target=\"_blank\">',vp.tracking,'</a>'),
|
|
if(versandunternehmen LIKE '%dpd%',CONCAT(UPPER(versandunternehmen),':<a href=\"https://tracking.dpd.de/parcelstatus/?locale=de_DE&query=',vp.tracking,'\" target=\"_blank\">',vp.tracking,'</a>'),
|
|
if(versandunternehmen LIKE '%ups%' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen),':<a href=\"https://www.ups.com/track?loc=de_DE&tracknum=',vp.tracking,'\" target=\"_blank\">',v.tracking,'</a>'),
|
|
if(versandunternehmen LIKE '%gls%' AND vp.tracking != '', CONCAT(UPPER(versandunternehmen),':<a href=\"https://www.gls-group.eu/276-I-PORTAL-WEB/content/GLS/DE03/DE/5004.htm?txtRefNo=',vp.tracking,'\" target=\"_blank\">',v.tracking,'</a>'),
|
|
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);
|
|
}
|
|
*/
|
|
|
|
|
|
$sql = "SELECT SQL_CALC_FOUND_ROWS
|
|
v.id,
|
|
v.tracking as tracking,
|
|
v.tracking_link
|
|
FROM
|
|
versandpakete v
|
|
LEFT JOIN
|
|
versandpaket_lieferschein_position vlp ON v.id = vlp.versandpaket
|
|
LEFT JOIN
|
|
lieferschein_position lp ON lp.id = vlp.lieferschein_position
|
|
LEFT JOIN
|
|
lieferschein l ON lp.lieferschein = l.id
|
|
LEFT JOIN
|
|
lieferschein lop ON lop.id = v.lieferschein_ohne_pos
|
|
WHERE
|
|
l.auftragid = ".$id." OR lop.auftragid = ".$id."
|
|
GROUP BY
|
|
v.id
|
|
";
|
|
$tracking = $this->app->DB->SelectArr($sql);
|
|
|
|
$tracking_list = array();
|
|
foreach ($tracking as $single_tracking) {
|
|
$tracking_list[] = '<a href="index.php?module=versandpakete&action=edit&id='.$single_tracking['id'].'">Paket Nr.'.$single_tracking['id'].'</a>'.
|
|
' ('.'<a href="'.$single_tracking['tracking_link'].'">'.$single_tracking['tracking'].'</a>'.')';
|
|
}
|
|
|
|
$this->app->Tpl->Set('TRACKING',implode('<br>',$tracking_list));
|
|
|
|
|
|
|
|
|
|
$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 = " <img class=\"contenttooltip\" src=\"./themes/".$this->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('<a href=\"index.php?module=artikel&action=edit&id=',ap.artikel,'\" target=\"_blank\">', ap.nummer,'</a>') as Nummer,
|
|
if(isnull(b.id),'-',concat('<a href=\"index.php?module=bestellung&action=edit&id=',b.id,'\">',if(b.belegnr <> '', b.belegnr,'ENTWURF'),'</a>')) 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(' + <a href=\"index.php?module=artikel&action=lager&id=',ap.artikel,'\" title=\"Nachschublager\" target=\"_blank\"><font color=red><b>',(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)<b></font></a>'),'')
|
|
)
|
|
|
|
|
|
,
|
|
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('<font color=red><b>',
|
|
(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)
|
|
|
|
,'</b></font>'),
|
|
'<font color=red><b>aus</b></font>')
|
|
)
|
|
)
|
|
|
|
,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(' + <a href=\"index.php?module=artikel&action=lager&id=',ap.artikel,'\" title=\"Nachschublager\" target=\"_blank\"><font color=red><b>',(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)<b></font></a>'),'')
|
|
)
|
|
|
|
|
|
,
|
|
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('<font color=red><b>',
|
|
(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)
|
|
|
|
,'</b></font>'),
|
|
'<font color=red><b>aus</b></font>')
|
|
)
|
|
)
|
|
|
|
,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(' + <a href=\"index.php?module=artikel&action=lager&id=',ap.artikel,'\" title=\"Nachschublager\" target=\"_blank\"><font color=red><b>',(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)<b></font></a>'),'')
|
|
)
|
|
|
|
|
|
,
|
|
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('<font color=red><b>',
|
|
(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)
|
|
|
|
,'</b></font>'),
|
|
'<font color=red><b>aus</b></font>')
|
|
)
|
|
)
|
|
|
|
,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('<a href=\"index.php?module=artikel&action=edit&id=',ap.artikel,'\" target=\"_blank\">', ap.nummer,'</a>') as Nummer,
|
|
if(isnull(b.id),'-',concat('<a href=\"index.php?module=bestellung&action=edit&id=',b.id,'\" target=\"_blank\">',if(b.belegnr <> '', b.belegnr,'ENTWURF'),'</a>')
|
|
) 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','<div id="artikeltabellelive'.$id.'">'.$artikel.'</div>');
|
|
$nachartikeltarget = 'MINIDETAILNACHARTIKEL';
|
|
$this->app->erp->RunHook("AuftragMiniDetailNachArtikel", 2, $id, $nachartikeltarget);
|
|
//START ZUSTANDSAUTOMAT FARBEN
|
|
if($auftragArr[0]['status']==='freigegeben'){
|
|
$this->app->Tpl->Set(
|
|
'VERSANDTEXT','<div class="warning">Versand: Noch nicht versendet!</div>'
|
|
);
|
|
}
|
|
else if ($auftragArr[0]['status']==='abgeschlossen')
|
|
{
|
|
$this->app->Tpl->Set(
|
|
'VERSANDTEXT','<div class="info">Versand: Bereits versendet!</div>'
|
|
);
|
|
} else {
|
|
$this->app->Tpl->Set(
|
|
'VERSANDTEXT','<div class="info">Versand: -</div>'
|
|
);
|
|
}
|
|
|
|
$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',"<div class=\"info\">Der Auftrag wurde bezahlt.</div>");}
|
|
else if ($zahlungsweise==='rechnung') {
|
|
$this->app->Tpl->Add(
|
|
'ZAHLUNGEN',"<div class=\"info\">Der Auftrag wird per Rechnung bezahlt.</div>");
|
|
}
|
|
else if ($zahlungsweise==='amazon') {
|
|
$this->app->Tpl->Add(
|
|
'ZAHLUNGEN',"<div class=\"info\">Der Auftrag wird per Amazon bezahlt.</div>");
|
|
}
|
|
else if ($zahlungsweise==='lastschrift'||$zahlungsweise==='einzugsermaechtigung') {
|
|
$this->app->Tpl->Add(
|
|
'ZAHLUNGEN',"<div class=\"info\">Der Auftrag wird per Lastschrift bezahlt.</div>");
|
|
}
|
|
else if ($zahlungsweise==='bar' || $zahlungsweise==='nachnahme' ) {
|
|
$this->app->Tpl->Add(
|
|
'ZAHLUNGEN',"<div class=\"success\">Der Auftrag wird bei Übergabe bezahlt.</div>");
|
|
}
|
|
}
|
|
else if($vorkasse_ok==2){
|
|
$this->app->Tpl->Add('ZAHLUNGEN','<div class="warning">Es liegt eine Teilzahlung vor!</div>');
|
|
}
|
|
|
|
elseif(in_array($zahlungsweise, ['vorkasse','paypal','kreditkarte','bar'])) {
|
|
$this->app->Tpl->Add(
|
|
'ZAHLUNGEN',
|
|
'<div class="error">Vorkasse noch nicht abgeschlossen!</div>'
|
|
);
|
|
}
|
|
|
|
$this->app->Tpl->Add(
|
|
'ZAHLUNGEN',
|
|
$this->AuftragZahlung(true)
|
|
);
|
|
|
|
// 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('<a href=\"index.php?module=gutschrift&action=edit&id=',r.id,'\" target=\"_blank\">',if(r.belegnr='0' OR r.belegnr='','ENTWURF',r.belegnr),' <a href=\"index.php?module=gutschrift&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Gutschrift PDF\" border=\"0\"></a>
|
|
<a href=\"index.php?module=gutschrift&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Rechnung bearbeiten\" border=\"0\"></a>') 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',
|
|
'<div style="background-color:white">
|
|
<h2 class="greyh2">{|Produktion Protokoll|}</h2>
|
|
<div style="padding:10px;">'
|
|
);
|
|
$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', '</div></div>');
|
|
}
|
|
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'] = '<a href="index.php?module=auftrag&action=pdffromarchive&id='
|
|
.$v['id']
|
|
.'" target="_blank"><img src="themes/'
|
|
.$this->app->Conf->WFconf['defaulttheme'].'/images/pdf.svg" /></a>';
|
|
$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',
|
|
'<div style="background-color:white">
|
|
<h2 class="greyh2">Interne Bemerkung</h2>
|
|
<div style="padding:10px;overflow:auto; width:500px;">
|
|
<textarea id="internebemerkung_'.$id.'"'
|
|
.($schreibschutz?' readonly ':' onchange="saveinternebemerkung_'.$id.'('.$id.');" ').'>'
|
|
.str_replace(
|
|
'"','"',
|
|
$this->app->DB->Select("SELECT internebemerkung FROM auftrag WHERE id = '$id'")
|
|
)
|
|
.'</textarea>
|
|
</div>
|
|
</div>');
|
|
$this->app->Tpl->Add('INTERNEBEMERKUNGEDIT','<script>');
|
|
if(!$schreibschutz) {
|
|
$this->app->Tpl->Add(
|
|
'INTERNEBEMERKUNGEDIT',
|
|
'function saveinternebemerkung_'.$id.'(auftragid)
|
|
{
|
|
var wert = $("#internebemerkung_'.$id.'").val();
|
|
$.ajax({
|
|
url: "index.php?module=auftrag&action=minidetail&cmd=saveinternebemerkung&id='.$id.'",
|
|
type: "POST",
|
|
dataType: "json",
|
|
data: { internebemerkung: wert},
|
|
success: function(data) {
|
|
|
|
}
|
|
});
|
|
}
|
|
'
|
|
);
|
|
}
|
|
if($this->app->erp->Firmendaten('briefhtml')=='1') {
|
|
$this->app->YUI->CkEditor('internebemerkung_'.$id,"belege",null, 'INTERNEBEMERKUNGEDIT');
|
|
$this->app->Tpl->Add(
|
|
'INTERNEBEMERKUNGEDIT',
|
|
'</script><input type="button" onclick="saveinternebemerkung_'.$id.'('.$id.');" value="speichern" />'
|
|
);
|
|
}
|
|
else{
|
|
$this->app->Tpl->Add('INTERNEBEMERKUNGEDIT','</script>');
|
|
}
|
|
|
|
}
|
|
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].'<br>';
|
|
}
|
|
}
|
|
|
|
|
|
$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]."<br>";
|
|
}
|
|
}
|
|
|
|
$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 "<table width=\"100%\">
|
|
<tr valign=\"top\"><td width=\"50%\"><b>Rechnungsadresse ".($abweichende=="1"?' (abweichend)':'').":</b><br><br>$rechnungsadresse<br></td></tr>
|
|
<tr><td><b>Lieferadresse:</b><br><br>$lieferadresse</td></tr></table>";
|
|
}
|
|
|
|
/* Build the html output for minidetail containing the payments
|
|
* @param bool $return
|
|
*
|
|
* @return string
|
|
*/
|
|
function AuftragZahlung($return=false)
|
|
{
|
|
$id = $this->app->Secure->GetGET('id');
|
|
|
|
$zahlungen = $this->app->erp->GetZahlungen($id,'auftrag',true);
|
|
if (!empty($zahlungen)) {
|
|
$et = new EasyTable($this->app);
|
|
|
|
$et->headings = array('Datum','Beleg','Betrag','Währung');
|
|
|
|
foreach ($zahlungen as $zahlung) {
|
|
$row = array(
|
|
$zahlung['datum'],
|
|
"<a href=\"index.php?module=".$zahlung['doc_typ']."&action=edit&id=".$zahlung['doc_id']."\">
|
|
".ucfirst($zahlung['doc_typ'])."
|
|
".$zahlung['doc_info']."
|
|
</a>",
|
|
$zahlung['betrag'],
|
|
$zahlung['waehrung']
|
|
);
|
|
$et->AddRow($row);
|
|
}
|
|
|
|
$salden = $this->app->erp->GetSaldenDokument($id,'auftrag',true);
|
|
foreach ($salden as $saldo) {
|
|
$row = array(
|
|
'',
|
|
'<b>Saldo</b>',
|
|
"<b>".$saldo['betrag']."</b>",
|
|
"<b>".$saldo['waehrung']."</b>"
|
|
);
|
|
$et->AddRow($row);
|
|
}
|
|
return($et->DisplayNew('return',""));
|
|
}
|
|
}
|
|
|
|
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',"<h2>Trefferliste:</h2><br>");
|
|
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',"<a href=\"index.php?module=auftrag&action=edit&id=%value%\">Lesen</a>");
|
|
} else {
|
|
$this->app->Tpl->Add('ERGEBNISSE',"<div class=\"info\">Auftragssuche (bitte entsprechende Suchparameter eingeben)</div>");
|
|
}
|
|
|
|
$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("<div class=\"error\">Der Auftrag $belegnr kann nicht weitergefuehrt werden, da keine Artikel gebucht sind!</div> ");
|
|
$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('<div class="error">Der Auftrag kann nicht zum Lieferschein weitergeführt werden, da er keine Positionen oder keine Lagerartikel enthält</div>');
|
|
if(isset($positionen))
|
|
{
|
|
$newid = $this->app->erp->WeiterfuehrenAuftragZuLieferschein($id, $positionen, $zwischenpositionen);
|
|
$this->app->BuildNavigation = false;
|
|
if($newid){
|
|
$this->app->Tpl->Add('TAB1', '
|
|
<script>
|
|
|
|
window.parent.window.location.href=\'index.php?module=lieferschein&action=edit&id=' . $newid . '\';
|
|
|
|
</script>
|
|
');
|
|
}else{
|
|
$this->app->Tpl->Add('TAB1', '
|
|
<script>
|
|
|
|
window.parent.window.location.href=\'index.php?module=auftrag&action=edit&id=' . $id.'&msg='.$msgNoArticle . '\';
|
|
|
|
</script>
|
|
');
|
|
}
|
|
$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('<div class="info">Der Auftrag wurde freigegeben und die AB an den Kunden per Mail gesendet!</div> ');
|
|
}
|
|
else{
|
|
$msg = $this->app->erp->base64_url_encode('<div class="info">Der Auftrag wurde freigegeben und kann jetzt versendet werden!</div> ');
|
|
}
|
|
$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',"<div class=\"info\">Soll der Auftrag an <b>$name</b> im Wert von <b>$summe $waehrung</b>
|
|
jetzt freigegeben werden?<table cellspacing=5><tr><td width=100></td><td>
|
|
<input type=\"button\" class=\"btnImportantLarge\" value=\"Jetzt freigeben + Mail ($email)\" onclick=\"window.location.href='index.php?module=auftrag&action=freigabe&id=$id&freigabe=$id&cmd=mail'\">
|
|
oder ohne automatische Mail:
|
|
<input type=\"button\" class=\"btnImportantLarge\" value=\"Jetzt freigeben\" onclick=\"window.location.href='index.php?module=auftrag&action=freigabe&id=$id&freigabe=$id'\"> $extra</td></tr></table>
|
|
</div>");
|
|
} 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',"<div class=\"info\">Soll der Auftrag an <b>$name</b> im Wert von <b>$summe $waehrung</b>
|
|
jetzt freigegeben werden?
|
|
<input type=\"button\" class=\"btnImportantLarge\" value=\"Jetzt freigeben\" onclick=\"window.location.href='index.php?module=auftrag&action=freigabe&id=$id&freigabe=$id'\"> $extra
|
|
</div>");
|
|
|
|
}
|
|
}
|
|
}
|
|
$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("<div class=\"error\">Der Auftrag \"$name\" ($belegnr) kann nicht als offen markiert werden. Er muss erst freigegeben werden!</div> ");
|
|
}
|
|
else if($status==="freigegeben")
|
|
{
|
|
// KUNDE muss RMA starten
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Der Auftrag \"$name\" ($belegnr) ist bereits freigegeben!</div> ");
|
|
}
|
|
else if($status==="abgeschlossen" || $status==="storniert" || $status==="versendet")
|
|
{
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"info\">Der Auftrag \"$name\" ($belegnr) wurde wieder als freigegeben markiert!</div> ");
|
|
$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('<div class="warning">Der Auftrag wurde abgeschlossen!</div> ');
|
|
}
|
|
$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',"<div class=\"info\">Soll der Auftrag an <b>$name</b> jetzt wirklich als freigegeben markiert werden?
|
|
<input type=\"button\" value=\"Freigeben\" onclick=\"window.location.href='index.php?module=auftrag&action=alsfreigegeben&id=$id&alsfreigegeben=$id&msg=$msg'\">
|
|
</div>");
|
|
}
|
|
$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('<div class="error">'.$ret['error'].'</div>');
|
|
}
|
|
else{
|
|
$msg = $this->app->erp->base64_url_encode('<div class="info">'.$ret['info'].'</div>');
|
|
}
|
|
$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',"<div class=\"info\">Soll der Auftrag an <b>$name</b> jetzt abgeschlossen werden?
|
|
<input type=\"button\" value=\"Abschluss\" onclick=\"window.location.href='index.php?module=auftrag&action=abschluss&id=$id&abschluss=$id&msg=$msg'\">
|
|
</div>");
|
|
|
|
$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("<div class=\"info\">Auftrag \"$name\" ($belegnr) wurde wieder freigegeben!</div> ");
|
|
} else {
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"warning\">Auftrag \"$name\" ($belegnr) kann nicht wieder freigegeben werden da es bereits Rechnungen und/oder Lieferrscheine zu dem Auftrag gibt.</div> ");
|
|
}
|
|
//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("<div class=\"warning\">Auftrag \"$name\" ($belegnr) wurde gelöscht!</div> ");
|
|
}
|
|
else{
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"warning\">Auftrag \"$name\" wurde gelöscht!</div> ");
|
|
}
|
|
//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("<div class=\"error\">Auftrag \"$name\" ($belegnr) kann nicht storniert werden da er bereits storniert ist!</div> ");
|
|
$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','<div class="warning">Achtung dem Kunden sofort das Geld überweisen!</div>');
|
|
|
|
}
|
|
$msg = $this->app->erp->base64_url_encode('<div class="warning">Der Auftrag wurde storniert!</div> ');
|
|
|
|
$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',"<div class=\"info\">Soll der Auftrag an <b>$name</b> jetzt storniert werden?
|
|
<input type=\"button\" value=\"Stornierung MIT E-Mail an den Kunden\" onclick=\"window.location.href='index.php?module=auftrag&action=delete&id=$id&abschluss=$id&msg=$msg&mail=1'\">
|
|
<input type=\"button\" value=\"Stornierung OHNE E-Mail an den Kunden\" onclick=\"window.location.href='index.php?module=auftrag&action=delete&id=$id&abschluss=$id&msg=$msg&mail=0'\">
|
|
</div>");
|
|
} else {
|
|
$this->app->Tpl->Set('TAB1',"<div class=\"info\">Soll der Auftrag an <b>$name</b> jetzt storniert werden?
|
|
<input type=\"button\" value=\"Stornierung OHNE E-Mail an den Kunden\" onclick=\"window.location.href='index.php?module=auftrag&action=delete&id=$id&abschluss=$id&msg=$msg&mail=0'\">
|
|
</div>");
|
|
}
|
|
|
|
$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('<div class="warning">Der Auftrag wurde als RMA im Versand markiert!</div> ');
|
|
|
|
$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 "<iframe width=\"100%\" height=\"100%\" style=\"height:calc(100vh - 110px)\" src=\"./js/production/generic/web/viewer.html?file=$file\"></iframe>";
|
|
$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',"<li><a href=\"index.php?module=auftrag&action=wareneingang&id=$id\">Wareneingang<br>Rückstände</a></li>");
|
|
$this->app->Tpl->Add('TABS',"<li><a class=\"tab\" href=\"index.php?module=auftrag&action=wareneingang&id=$id\">Mahnstufen</a></li>");
|
|
}
|
|
$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',"<div class=\"error\">Achtung! Dieses Dokument ist mit keiner Kunden-Nr. verlinkt. Bitte geben Sie die Kundennummer an und klicken Sie übernehmen oder Speichern!</div>");
|
|
}
|
|
$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',
|
|
'<div class="info">Zu diesem Auftrag gehört Teilauftrag Nr. <a href="index.php?module=auftrag&action=edit&id='.
|
|
$anzahlteillieferungen[$ati]['id'].'" target="_blank">'
|
|
.$anzahlteillieferungen[$ati]['belegnr'].'</a></div>'
|
|
);
|
|
}
|
|
}
|
|
$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',
|
|
"<div class=\"warning\">Dies ist Teilauftrag Nr. $teillieferungnummer (Aktuell gesplittet in $teillieferungnummermax Aufträge). Der ursprüngliche Auftrag war: <a href=\"index.php?module=auftrag&action=edit&id=$hauptid\" target=\"_blank\">$teillieferung_von_auftrag_nummer</a></div>"
|
|
);
|
|
}
|
|
|
|
|
|
$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',
|
|
"<div class=\"info\">Zu diesem Auftrag gehör"
|
|
.((!empty($check)?count($check):0) == 1?'t':'en')
|
|
." die Bestellung".((!empty($check)?count($check):0) == 1?':':'en:')
|
|
);
|
|
foreach($check as $supplierOrderId => $supplieryNumber) {
|
|
$this->app->Tpl->Add('MESSAGE',' <a href="index.php?module=bestellung&action=edit&id='
|
|
.$supplierOrderId.'" target="_blank"><input type="button" value="'
|
|
.($supplieryNumber?$supplieryNumber:'ENTWURF').'" /></a>'
|
|
);
|
|
}
|
|
$this->app->Tpl->Add('MESSAGE',"</div>");
|
|
}
|
|
|
|
|
|
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',
|
|
'<div class="info">Dieser Auftrag gehört zur Lieferkette des Auftrags <a href="index.php?module=auftrag&action=edit&id='
|
|
.$auftraglieferkette.'" target="_blank"><input type="button" value="'
|
|
.$this->app->DB->Select(
|
|
"SELECT if(belegnr = '','ENTWURF',belegnr)
|
|
FROM auftrag
|
|
WHERE id = '$auftraglieferkette'
|
|
LIMIT 1"
|
|
)
|
|
.'" /></a></div>'
|
|
);
|
|
}
|
|
}
|
|
|
|
$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',"<div class=\"warning\">Der Auftrag ist noch nicht archiviert! Bitte versenden oder manuell archivieren. <input type=\"button\" onclick=\"if(!confirm('Soll das Dokument archiviert werden?')) return false;else window.location.href='index.php?module=auftrag&action=archivierepdf&id=$id';\" value=\"Manuell archivieren\" /> <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('auftrag',$id)\"></div>");
|
|
}
|
|
elseif(!$this->app->DB->Select("SELECT versendet FROM auftrag WHERE id = '$id' LIMIT 1")) {
|
|
$this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Der Auftrag wurde noch nicht versendet! <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('auftrag',$id)\"></div>");
|
|
}
|
|
}
|
|
|
|
if($liefersperre=='1' && ($status==='freigegeben' || $status==='angelegt')) {
|
|
$this->app->Tpl->Add('MESSAGE','<div class="warning">Achtung: Der Kunde hat eine Liefersperre!</div>');
|
|
}
|
|
$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',"<div class=\"error\">Pflichtfeld! Bitte geben Sie eine Lieferanten-Nr. an!</div>");
|
|
}
|
|
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',"<div class=\"error\">Pflichtfeld! Bitte geben Sie eine Kunden-Nr. an!</div>");
|
|
}
|
|
|
|
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 ($schreibschutz != 1 AND $status != 'abgeschlossen') {
|
|
$this->app->erp->BerechneDeckungsbeitrag($id,'auftrag');
|
|
}
|
|
|
|
if($nummer!='') {
|
|
$this->app->Tpl->Set('NUMMER',$nummer);
|
|
if($this->app->erp->RechteVorhanden('adresse','edit')){
|
|
$this->app->Tpl->Set(
|
|
'KUNDE',
|
|
" Kd-Nr. <a href=\"index.php?module=adresse&action=edit&id=$adresse\" target=\"_blank\">"
|
|
. $kundennummer . "</a>"
|
|
);
|
|
}
|
|
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
|
|
$this->app->Tpl->Set('ABGESCHLOSSENDISABLE',"-->"); //TODO
|
|
}
|
|
|
|
if($status!=='storniert')
|
|
{
|
|
$this->app->Tpl->Set('STORNOENABLE','<!--');
|
|
$this->app->Tpl->Set('STORNODISABLE','-->');
|
|
}
|
|
|
|
$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','<!--');
|
|
$this->app->Tpl->Set('STORNORETOUREDISABLE','-->');
|
|
}
|
|
else {
|
|
$this->app->Tpl->Set('HIDDENFIELD',"<input type=\"hidden\" name=\"storno_abschluss\" value=\"1\">");
|
|
// 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 .= " <input type=\"button\" value=\"LS "
|
|
.$deliveryNoteNumber
|
|
."\" onclick=\"window.location.href='index.php?module=lieferschein&action=pdf&id="
|
|
.$deliveryNoteId."'\">";
|
|
}
|
|
}
|
|
|
|
$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 .= " <input type=\"button\" value=\"RE "
|
|
.$invoiceNumber
|
|
."\" onclick=\"window.location.href='index.php?module=rechnung&action=pdf&id="
|
|
.$invoiceId."'\">";
|
|
}
|
|
}
|
|
|
|
$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',
|
|
"<div class=\"warning\">Dieser Auftrag ist schreibgeschützt und darf daher nicht bearbeitet werden! <input type=\"button\" value=\"Schreibschutz entfernen\" onclick=\"if(!confirm('Soll der Schreibschutz für diesen Auftrag wirklich entfernt werden?')) return false;else window.location.href='index.php?module=auftrag&action=schreibschutz&id=$id';\"> $optional</div>"
|
|
);
|
|
// $this->app->erp->CommonReadonly();
|
|
}
|
|
else {
|
|
if(isset($optional) && (string)$optional !== '') {
|
|
$this->app->Tpl->Add(
|
|
'MESSAGE',
|
|
"<div class=\"warning\">Zu diesem Auftrag gibt es folgende Dokumente. $optional</div>"
|
|
);
|
|
}
|
|
}
|
|
if($schreibschutz=='1') {
|
|
$this->app->erp->CommonReadonly();
|
|
}
|
|
|
|
if($schreibschutz != '1'){
|
|
if($this->app->erp->Firmendaten('schnellanlegen') == '1'){
|
|
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN', ' <input type="button" value="übernehmen" onclick="document.getElementById(\'uebernehmen\').value=1; document.getElementById(\'eprooform\').submit();"/><input type="hidden" id="uebernehmen" name="uebernehmen" value="0">
|
|
');
|
|
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN2', '
|
|
<input type="button" value="übernehmen" onclick="if(!confirm(\'Soll der neue Lieferant wirklich übernommen werden? Es werden alle Felder überladen.\')) return false;else document.getElementById(\'uebernehmen2\').value=1; document.getElementById(\'eprooform\').submit();"/><input type="hidden" id="uebernehmen2" name="uebernehmen2" value="0">
|
|
');
|
|
|
|
}else{
|
|
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '
|
|
<input type="button" value="übernehmen" onclick="document.getElementById(\'uebernehmen\').value=1; document.getElementById(\'eprooform\').submit();"/><input type="hidden" id="uebernehmen" name="uebernehmen" value="0">
|
|
');
|
|
|
|
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN2', '
|
|
<input type="button" value="übernehmen" onclick="if(!confirm(\'Soll der neue Lieferant wirklich übernommen werden? Es werden alle Felder überladen.\')) return false;else document.getElementById(\'uebernehmen2\').value=1; document.getElementById(\'eprooform\').submit();"/><input type="hidden" id="uebernehmen2" name="uebernehmen2" value="0">
|
|
');
|
|
|
|
}
|
|
}
|
|
// 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',
|
|
"<br><center>Zu zahlen: <b>$summe (netto) $summebrutto (brutto) $waehrung</b> ($tmp) "
|
|
);
|
|
}
|
|
|
|
$vertrieb = $orderRow['vertrieb'];//$this->app->DB->Select("SELECT vertrieb FROM auftrag WHERE id='$id' LIMIT 1");
|
|
$this->app->Tpl->Set('VERTRIEB',"<input type=\"text\" value=\"".$vertrieb."\" size=\"30\" readonly>");
|
|
|
|
$belegnr= $orderRow['belegnr'];//$this->app->DB->Select("SELECT belegnr FROM auftrag WHERE id='$id' LIMIT 1");
|
|
$this->app->Tpl->Set('BELEGNR',"<input type=\"text\" value=\"".$belegnr."\" readonly size=\"30\">");
|
|
|
|
$status = $orderRow['status'];//$this->app->DB->Select("SELECT status FROM auftrag WHERE id='$id' LIMIT 1");
|
|
$this->app->Tpl->Set('STATUS',"<input type=\"text\" size=\"30\" value=\"".$status."\" readonly [COMMONREADONLYINPUT]>");
|
|
|
|
// 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',"<fieldset><legend>Rechnungen und Lieferscheine</legend>");
|
|
|
|
$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',"</fieldset>");
|
|
}
|
|
|
|
//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<br>Brief bestellt: $datum");
|
|
}
|
|
else{
|
|
$this->app->Tpl->Set('USTPRUEFUNG', "Pruefung notwendig! (<a href=\"index.php?module=adresse&action=ustprf&id=$adresse\">Starten</a>)");
|
|
}
|
|
}
|
|
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',
|
|
'<a href="index.php?module=auftrag&action=paypal&id='
|
|
.$id.'"><input type="button" value="PayPal Rechnung senden"></a>'
|
|
);
|
|
}
|
|
|
|
$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',
|
|
'<form method="post"><div class="error">
|
|
Die Gesamtsumme stimmt nicht mehr mit ursprünglich festgelegten Betrag '.
|
|
number_format($extsoll,2,',','.').
|
|
' überein <input type="submit" name="resetextsoll" value="Festgeschriebene Summe zurücksetzen" /></div></form>'
|
|
);
|
|
}
|
|
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',"<div class=\"warning\">Möchten Sie ein Auftrag jetzt anlegen?
|
|
<input type=\"button\" onclick=\"window.location.href='index.php?module=auftrag&action=create&anlegen=1'\" value=\"Ja - Auftrag jetzt anlegen\"></div><br>");
|
|
$this->app->Tpl->Set('TAB1',"
|
|
<table width=\"100%\" style=\"background-color: #fff; border: solid 1px #000;\" align=\"center\">
|
|
<tr>
|
|
<td align=\"center\">
|
|
<br><b style=\"font-size: 14pt\">Aufträge in Bearbeitung</b>
|
|
<br>
|
|
<br>
|
|
Offene Aufträge, die durch andere Mitarbeiter in Bearbeitung sind.
|
|
<br>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
[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("<div class=\"info\">Artilel für diesen Auftrag reserviert!</div> ");
|
|
|
|
$this->app->Location->execute("index.php?module=auftrag&action=edit&id=$id&msg=$msg");
|
|
}
|
|
|
|
/*
|
|
order processed true or false
|
|
*/
|
|
|
|
public function AuftragVersand($id='', $ignoriereliefertermin = false, &$ergebnis = null, $paketmarkedrucken = false)
|
|
{
|
|
// 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()."',
|
|
versand_status = 1
|
|
WHERE id='$lieferschein' LIMIT 1");
|
|
|
|
// Versand_status: 1 = process in versandpakete, 2 = finished, 3 = finished manually
|
|
|
|
$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
|
|
|
|
$sql = "SELECT id FROM kommissionierung k WHERE k.auftrag = '".$id."'";
|
|
$vorkommissionierung = $this->app->DB->Select($sql);
|
|
|
|
if(!$vorkommissionierung)
|
|
{
|
|
$kommissionierung = $this->app->erp->GetNextKommissionierung();
|
|
} else {
|
|
$kommissionierung = false;
|
|
}
|
|
|
|
if($kommissionierung){
|
|
$this->app->DB->Update(
|
|
sprintf(
|
|
"UPDATE kommissionierung SET lieferschein = %d, auftrag = %d, adresse = %d WHERE id = %d LIMIT 1",
|
|
$lieferschein,
|
|
$id,
|
|
$adresse,
|
|
$kommissionierung
|
|
)
|
|
);
|
|
}
|
|
|
|
$auslagernresult =
|
|
$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
|
|
);
|
|
|
|
if($kommissionierung){
|
|
$this->app->DB->Update(
|
|
sprintf(
|
|
"UPDATE kommissionierung SET ausgelagert = 1 WHERE id = %d LIMIT 1",
|
|
$kommissionierung
|
|
)
|
|
);
|
|
|
|
foreach ($auslagernresult['storageMovements'] as $storageMovement) {
|
|
$this->app->DB->Update(
|
|
sprintf(
|
|
"INSERT INTO kommissionierung_position (kommissionierung, artikel, lager_platz, menge) VALUES (%d, %d, %d, %d)",
|
|
$kommissionierung,
|
|
$storageMovement['artikel'],
|
|
$storageMovement['lager_platz'],
|
|
$storageMovement['menge']
|
|
)
|
|
);
|
|
}
|
|
|
|
// Kommissionierschein drucken?
|
|
if ($projektarr['autodruckkommissionierscheinstufe1']) {
|
|
$Brief = new KommissionierungPDF($this->app, styleData: array('ohne_steuer' => true, 'artikeleinheit' => false, 'abstand_boxrechtsoben' => -70, 'abstand_artikeltabelleoben' => -70, 'abstand_betreffzeileoben' => -70, 'preise_ausblenden' => true));
|
|
$Brief->GetKommissionierung($kommissionierung);
|
|
$tmpfile = $Brief->displayTMP();
|
|
for($mengedruck=$projektarr['autodruckkommissionierscheinstufe1menge'];$mengedruck > 0;$mengedruck--) {
|
|
$druckercode = $this->app->erp->Projektdaten($projekt,'druckerlogistikstufe1');
|
|
$this->app->printer->Drucken($druckercode, $tmpfile);
|
|
}
|
|
unlink($tmpfile);
|
|
}
|
|
}
|
|
|
|
// 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;
|
|
}
|
|
}
|
|
|
|
// Check for override in adresse
|
|
$sql = "SELECT rechnung_anzahlpapier, rechnung_anzahlpapier_abweichend FROM adresse WHERE id =".$adresse;
|
|
$rechnung_anzahlpapier = $this->app->DB->SelectArr($sql);
|
|
if ($rechnung_anzahlpapier[0]['rechnung_anzahlpapier_abweichend']) {
|
|
$autodruckrechnungstufe1menge = $rechnung_anzahlpapier[0]['rechnung_anzahlpapier'];
|
|
}
|
|
|
|
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 = '<img src="./themes/new/images/grey.png" width="17" border="0">';
|
|
$stop = '<img src="./themes/new/images/grey.png" width="17" border="0">';
|
|
$reserviert = '<img src="./themes/new/images/grey.png" width="17" border="0">';
|
|
$check = '<img src="./themes/new/images/grey.png" width="17" border="0">';
|
|
} else {
|
|
|
|
$go = '<img src="./themes/new/images/go.png" width="17" border="0">';
|
|
$stop = '<img src="./themes/new/images/stop.png" width="17" border="0">';
|
|
$reserviert = '<img src="./themes/new/images/reserviert.png" width="17" border="0">';
|
|
$check = '<img src="./themes/new/images/mail-mark-important.png" width="17" border="0">';
|
|
|
|
}
|
|
|
|
// 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 href=\"index.php?module=adresse&action=edit&id=',a.adresse,'\">',a.name,'</a>') 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,'','<a href=\"index.php?module=auftrag&action=checkdisplay&id=1031&frame=false\" onclick=\"makeRequest(this); return false;\">$check</a>') 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('<a href=\"/index.php?module=adresse&action=ustprf&id=',a.adresse,'\">','$stop','</a>')) 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, "
|
|
<a href=\"index.php?module=auftrag&action=pdf&id=%value%\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a>
|
|
<a onclick=\"if(!confirm('Wirklich stornieren?')) return false; else window.location.href='index.php?module=auftrag&action=delete&id=%value%';\">
|
|
<img src=\"./themes/new/images/delete.svg\" border=\"0\"></a>
|
|
");
|
|
|
|
|
|
}
|
|
|
|
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=offene','Offene Positionen');
|
|
$this->app->erp->MenuEintrag('index.php?module=auftrag&action=versandzentrum','Versandübergabe');
|
|
|
|
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','<div class="info">Aufträge an Versand übergeben mit automatischem Druck und Mailversand. <a class="button" href="index.php?module=versandpakete&action=lieferungen">Zum Versand</a></div>');
|
|
|
|
$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', '<div class="warning">'.$message.'</div>');
|
|
}
|
|
|
|
// 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;
|
|
}
|
|
$processed_orders_num = 0;
|
|
foreach ($auftraege as $auftrag) {
|
|
/* Process each order */
|
|
if($this->AuftragVersand($auftrag, true)) {
|
|
$processed_orders_num++;
|
|
}
|
|
}
|
|
$this->app->Tpl->Set('MESSAGE','<div class="info">'.$processed_orders_num.' Aufträge wurden verarbeitet.</div>');
|
|
}
|
|
}
|
|
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;
|
|
case 'vorkommissionieren':
|
|
|
|
if (!empty($auftraegemarkiert)) {
|
|
foreach ($auftraegemarkiert as $k => $v) {
|
|
$sql = "
|
|
SELECT
|
|
k.id,
|
|
a.belegnr,
|
|
a.adresse
|
|
FROM
|
|
kommissionierung k
|
|
LEFT JOIN
|
|
lieferschein l
|
|
ON
|
|
l.id = k.lieferschein
|
|
LEFT JOIN
|
|
auftrag al
|
|
ON
|
|
al.id = l.auftrag
|
|
LEFT JOIN
|
|
auftrag a
|
|
ON
|
|
a.id = k.auftrag
|
|
WHERE
|
|
a.id = $v OR al.id = $v
|
|
LIMIT 1
|
|
";
|
|
$check = $this->app->DB->SelectRow($sql);
|
|
if (!empty($check)) {
|
|
$this->app->Tpl->addMessage('Error',"Bereits Kommissioniert: ".$check['belegnr']);
|
|
break;
|
|
}
|
|
|
|
$kid = $this->app->erp->GetNextKommissionierung();
|
|
|
|
$sql = "UPDATE kommissionierung SET auftrag = $v, adresse = (SELECT adresse FROM auftrag WHERE id = ".$v.") WHERE id = $kid";
|
|
$this->app->DB->Update($sql);
|
|
|
|
$auslagernresult =
|
|
$this->app->erp->LieferscheinAuslagern(
|
|
lieferschein: $v,
|
|
anzeige_lagerplaetze_in_lieferschein: true,
|
|
standardlager: (int)$this->app->DB->Select(sprintf('SELECT standardlager FROM auftrag WHERE id = %d LIMIT 1', $v)),
|
|
belegtyp: 'auftrag',
|
|
chargenmhdnachprojekt: true,
|
|
forceseriennummerngeliefertsetzen: false,
|
|
nurrestmenge: false,
|
|
simulieren: true
|
|
);
|
|
|
|
foreach ($auslagernresult['storageMovements'] as $storageMovement) {
|
|
$this->app->DB->Update(
|
|
sprintf(
|
|
"INSERT INTO kommissionierung_position (kommissionierung, artikel, lager_platz, menge) VALUES (%d, %d, %d, %d)",
|
|
$kid,
|
|
$storageMovement['artikel'],
|
|
$storageMovement['lager_platz'],
|
|
$storageMovement['menge']
|
|
)
|
|
);
|
|
}
|
|
|
|
$this->app->erp->AuftragProtokoll($v,'Auftrag vorkommissioniert, Kommissionierung '.$kid);
|
|
|
|
$projektarr = $this->app->DB->SelectRow("SELECT projekt.* FROM projekt INNER JOIN auftrag ON projekt.id = auftrag.projekt WHERE auftrag.id = '".$v."'");
|
|
|
|
// Kommissionierschein drucken?
|
|
if ($projektarr['autodruckkommissionierscheinstufe1']) {
|
|
$Brief = new KommissionierungPDF($this->app, styleData: array('ohne_steuer' => true, 'artikeleinheit' => false, 'abstand_boxrechtsoben' => -70, 'abstand_artikeltabelleoben' => -70, 'abstand_betreffzeileoben' => -70, 'preise_ausblenden' => true));
|
|
$Brief->GetKommissionierung($kid);
|
|
$tmpfile = $Brief->displayTMP();
|
|
for($mengedruck=$projektarr['autodruckkommissionierscheinstufe1menge'];$mengedruck > 0;$mengedruck--) {
|
|
$druckercode = $this->app->erp->Projektdaten($projektarr['id'],'druckerlogistikstufe1');
|
|
$this->app->printer->Drucken($druckercode, $tmpfile);
|
|
}
|
|
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',
|
|
'<div class="warning">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</div>'
|
|
);
|
|
}
|
|
|
|
$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','<input type="button" class="btnGreen" value="Auto-Versand berechnen" onclick="window.location.href=\'index.php?module=auftrag&action=berechnen\'">');
|
|
// }else{
|
|
// $this->app->Tpl->Set('AUTOBERECHNEN2','');
|
|
}
|
|
$infolink = '<a href="https://xentral.biz/helpdesk/kurzanleitung-ablauf-des-versands-von-auftraegen#nav-autoversand-mit-prozessstarter-berechnen" target="_blank">(Information)</a>';
|
|
|
|
/*
|
|
$last_order_calc = $this->app->erp->GetKonfiguration('last_order_calc');
|
|
if(!empty($last_order_calc)) {
|
|
$this->app->Tpl->Add('AUTOVERSANDBERECHNEN','<div class="info">Die letzte Berechnung der Auftragsampeln war am '.$last_order_calc.'. '.$infolink.' [AUTOBERECHNEN]</div>');
|
|
}
|
|
else{
|
|
$this->app->Tpl->Add('AUTOVERSANDBERECHNEN','<div class="info">Die letzte Berechnung der Auftragsampeln wurde noch nicht ermittelt. '.$infolink.' [AUTOBERECHNEN]</div>');
|
|
}
|
|
*/
|
|
|
|
$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()
|
|
{
|
|
|
|
// refresh all open items
|
|
$openids = $this->app->DB->SelectArr("SELECT id from auftrag WHERE status <> 'abgeschlossen'");
|
|
foreach ($openids as $openid) {
|
|
$this->app->erp->AuftragAutoversandBerechnen($openid['id']);
|
|
}
|
|
|
|
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('<div class="error">Der Auftrag kann nicht als Produktion weitergeführt werden, da im Auftrag $error_artikel Artikel nicht als Produktionsartikel markiert sind!</div>');
|
|
}else {
|
|
$msg = $this->app->erp->base64_url_encode('<div class="warning">Die Aufträge wurden als Produktion weitergeführt.</div>');
|
|
}
|
|
$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)){
|
|
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 .= '<option name="' . $zahlungsweise['zahlungsweise'] . '">' . ucfirst($zahlungsweise['zahlungsweise']) . '</option>';
|
|
}
|
|
}
|
|
|
|
$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 .= '<option name="' . $statusE['status'] . '">' . ucfirst($statusE['status']) . '</option>';
|
|
}
|
|
}
|
|
|
|
$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 .= '<option name="' . $versandart['versandart'] . '">' . ucfirst($versandart['versandart']) . '</option>';
|
|
}
|
|
}
|
|
|
|
$laender = $this->app->erp->GetSelectLaenderliste();
|
|
$laenderStr = '';
|
|
foreach ($laender as $landKey => $land) {
|
|
$laenderStr .= '<option value="' . $landKey . '">' . $land . '</option>';
|
|
}
|
|
|
|
|
|
$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','<div class="error">Cronjob order processing not yet implemented!</div>');
|
|
|
|
$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');
|
|
}
|
|
|
|
/*
|
|
* Split auftrag into separate documents with submit -> do it and return jump to the new split part
|
|
*/
|
|
function AuftragTeillieferung() {
|
|
|
|
$id = $this->app->Secure->GetGET('id');
|
|
$this->AuftragMenu();
|
|
$submit = $this->app->Secure->GetPOST('submit');
|
|
|
|
|
|
$sql = "SELECT * from auftrag WHERE id = $id";
|
|
$auftrag_alt = $this->app->DB->SelectArr($sql)[0];
|
|
$msg = "";
|
|
|
|
if (in_array($auftrag_alt['status'],array('angelegt','freigegeben'))) {
|
|
if ($submit != '') {
|
|
$msg = "";
|
|
switch ($submit) {
|
|
case 'speichern':
|
|
// Get parameters
|
|
|
|
$teilmenge_input = $this->app->Secure->GetPOSTArray();
|
|
|
|
$teilmengen = array();
|
|
|
|
foreach ($teilmenge_input as $key => $value) {
|
|
|
|
if ((strpos($key,'teilmenge_') === 0) && ($value !== '')) {
|
|
$posid = substr($key,'10');
|
|
$teilmenge = array('posid' => $posid, 'menge' => $value);
|
|
$teilmengen[] = $teilmenge;
|
|
}
|
|
}
|
|
|
|
if (!empty($teilmengen)) {
|
|
|
|
// Create new auftrag
|
|
$sql = "SELECT * from auftrag WHERE id = $id";
|
|
$auftrag_alt = $this->app->DB->SelectArr($sql)[0];
|
|
|
|
// Part auftrag of part auftrag -> select parent
|
|
$hauptauftrag_id = $auftrag_alt['teillieferungvon'];
|
|
if ($hauptauftrag_id != 0) {
|
|
$sql = "SELECT belegnr FROM auftrag WHERE id = $hauptauftrag_id";
|
|
$hauptauftrag_belegnr = $this->app->DB->SelectArr($sql)[0]['belegnr'];
|
|
} else {
|
|
$hauptauftrag_id = $auftrag_alt['id'];
|
|
$hauptauftrag_belegnr = $auftrag_alt['belegnr'];
|
|
}
|
|
|
|
$sql = "SELECT MAX(teillieferungnummer) as tpn FROM auftrag WHERE teillieferungvon = $hauptauftrag_id";
|
|
$teillieferungnummer = $this->app->DB->SelectArr($sql)[0]['tpn'];
|
|
if (empty($teillieferungnummer) || $teillieferungnummer == 0) {
|
|
$teillieferungnummer = '1';
|
|
} else {
|
|
$teillieferungnummer++;
|
|
}
|
|
|
|
$belegnr_neu = $hauptauftrag_belegnr."-".$teillieferungnummer;
|
|
|
|
$auftrag_neu = $auftrag_alt;
|
|
$auftrag_neu['id'] = null;
|
|
$auftrag_neu['belegnr'] = $belegnr_neu;
|
|
$auftrag_neu['teillieferungvon'] = $hauptauftrag_id;
|
|
$auftrag_neu['teillieferungnummer'] = $teillieferungnummer;
|
|
|
|
$id_neu = $this->app->DB->MysqlCopyRow('auftrag','id',$id);
|
|
$sql = "UPDATE auftrag SET belegnr = '$belegnr_neu', teillieferungvon = $hauptauftrag_id, teillieferungnummer = $teillieferungnummer WHERE id = $id_neu";
|
|
$this->app->DB->Update($sql);
|
|
|
|
// Adjust quantities
|
|
foreach ($teilmengen as $teilmenge) {
|
|
|
|
$sql = "SELECT menge FROM auftrag_position WHERE id = ".$teilmenge['posid'];
|
|
$menge_alt = $this->app->DB->SelectArr($sql)[0]['menge'];
|
|
|
|
$menge_neu = $teilmenge['menge'];
|
|
if ($menge_neu > $menge_alt) {
|
|
$menge_neu = $menge_alt;
|
|
}
|
|
|
|
$menge_reduziert = $menge_alt-$menge_neu;
|
|
|
|
$posid_alt = $teilmenge['posid'];
|
|
$posid_neu = $this->app->DB->MysqlCopyRow('auftrag_position','id',$posid_alt);
|
|
|
|
$sql = "UPDATE auftrag_position SET menge = $menge_reduziert WHERE id = $posid_alt";
|
|
$this->app->DB->Update($sql);
|
|
$sql = "UPDATE auftrag_position SET auftrag = $id_neu, menge = $menge_neu WHERE id = $posid_neu";
|
|
$this->app->DB->Update($sql);
|
|
}
|
|
|
|
$this->app->erp->AuftragProtokoll($id,"Teilauftrag $belegnr_neu erstellt");
|
|
$this->app->erp->PDFArchivieren('auftrag', $id, true);
|
|
|
|
header('Location: index.php?module=auftrag&action=edit&id='.$id_neu);
|
|
|
|
}
|
|
|
|
break;
|
|
case 'abbrechen':
|
|
header('Location: index.php?module=auftrag&action=edit&id='.$id);
|
|
return;
|
|
break;
|
|
}
|
|
} // Submit
|
|
else {
|
|
$msg = "Teilauftrag: Auswahl der Artikel für den Teilauftrag.";
|
|
}
|
|
} // Status ok
|
|
else {
|
|
$msg = 'Teilauftrag in diesem Status nicht möglich.';
|
|
}
|
|
|
|
$this->app->Tpl->Add('INFOTEXT',$msg);
|
|
$this->app->YUI->TableSearch('TABLE','positionen_teillieferung', 'show','','',basename(__FILE__), __CLASS__);
|
|
|
|
$this->app->Tpl->Parse('PAGE','auftrag_teillieferung.tpl');
|
|
} // AuftragTeillieferung
|
|
|
|
function AuftragOffenePositionen() {
|
|
$this->AuftraguebersichtMenu();
|
|
$this->app->YUI->TableSearch('TAB1','offenepositionen',"show","","",basename(__FILE__), __CLASS__);
|
|
$this->app->Tpl->Parse('PAGE',"tabview.tpl");
|
|
}
|
|
|
|
}
|