mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-26 14:40:29 +01:00
2537 lines
115 KiB
PHP
2537 lines
115 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\Pdf\Exception\PdfComponentExceptionInterface;
|
|
use Xentral\Components\Pdf\PdfMerger;
|
|
use Xentral\Components\Http\Session\SessionHandler;
|
|
use Xentral\Modules\Article\Gateway\ArticleGateway;
|
|
use Xentral\Modules\ScanArticle\Service\ScanArticleService;
|
|
use Xentral\Modules\ScanArticle\Exception\ArticleNotFoundException;
|
|
|
|
include '_gen/bestellung.php';
|
|
|
|
class Bestellung extends GenBestellung
|
|
{
|
|
/** @var Application $app */
|
|
|
|
/**
|
|
* Bestellung 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","BestellungList");
|
|
$this->app->ActionHandler("create","BestellungCreate");
|
|
$this->app->ActionHandler("positionen","BestellungPositionen");
|
|
$this->app->ActionHandler("upbestellungposition","UpBestellungPosition");
|
|
$this->app->ActionHandler("delbestellungposition","DelBestellungPosition");
|
|
$this->app->ActionHandler("copybestellungposition","CopyBestellungPosition");
|
|
$this->app->ActionHandler("downbestellungposition","DownBestellungPosition");
|
|
$this->app->ActionHandler("positioneneditpopup","BestellungPositionenEditPopup");
|
|
$this->app->ActionHandler("edit","BestellungEdit");
|
|
$this->app->ActionHandler("copy","BestellungCopy");
|
|
$this->app->ActionHandler("auftrag","BestellungAuftrag");
|
|
$this->app->ActionHandler("delete","BestellungDelete");
|
|
$this->app->ActionHandler("undelete","BestellungUndelete");
|
|
$this->app->ActionHandler("freigabe","BestellungFreigabe");
|
|
$this->app->ActionHandler("freigegeben","BestellungFreigegeben");
|
|
$this->app->ActionHandler("abschicken","BestellungAbschicken");
|
|
$this->app->ActionHandler("dateien","BestellungDateien");
|
|
$this->app->ActionHandler("pdf","BestellungPDF");
|
|
$this->app->ActionHandler("inlinepdf","BestellungInlinePDF");
|
|
$this->app->ActionHandler("protokoll","BestellungProtokoll");
|
|
$this->app->ActionHandler("minidetail","BestellungMiniDetail");
|
|
$this->app->ActionHandler("editable","BestellungEditable");
|
|
$this->app->ActionHandler("livetabelle","BestellungLiveTabelle");
|
|
$this->app->ActionHandler("schreibschutz","BestellungSchreibschutz");
|
|
$this->app->ActionHandler("abschliessen","BestellungAbschliessen");
|
|
$this->app->ActionHandler("alsversendet","BestellungAlsversendet");
|
|
$this->app->ActionHandler("pdffromarchive","BestellungPDFfromArchiv");
|
|
$this->app->ActionHandler("archivierepdf","BestellungArchivierePDF");
|
|
$this->app->ActionHandler("einlagern","BestellungEinlagern");
|
|
$this->app->ActionHandler("offenepositionen","BestellungOffenePositionen");
|
|
$this->app->ActionHandler("steuer","BestellungSteuer");
|
|
$this->app->ActionHandler("adressebestellungcopy", "AdresseBestellungCopy");
|
|
$this->app->ActionHandler("ean","BestellungEAN");
|
|
$this->app->DefaultActionHandler("list");
|
|
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
$nummer = $this->app->Secure->GetPOST('adresse');
|
|
|
|
if($id > 0){
|
|
$bestRow = $this->app->DB->Select(
|
|
sprintf(
|
|
'SELECT a.name, b.belegnr
|
|
FROM bestellung b
|
|
LEFT JOIN adresse a ON b.adresse = a.id
|
|
WHERE b.id=%d
|
|
LIMIT 1',
|
|
$id
|
|
)
|
|
);
|
|
}
|
|
|
|
if($nummer=='' && !empty($bestRow) && gettype($bestRow) == 'array'){
|
|
$adresse = $bestRow['name'];
|
|
}
|
|
else{
|
|
$adresse = $nummer;
|
|
}
|
|
|
|
if (gettype($bestRow) == 'array') {
|
|
$nummer = !empty($bestRow)?$bestRow['belegnr']:'';
|
|
if($nummer=='' || $nummer=='0') {
|
|
$nummer='ohne Nummer';
|
|
}
|
|
}
|
|
|
|
$this->app->Tpl->Set('UEBERSCHRIFT','Bestellung: '.$adresse.' ('.$nummer.')');
|
|
$this->app->Tpl->Set('FARBE','[FARBE2]');
|
|
|
|
$this->app->erp->Headlines('Bestellung');
|
|
|
|
$this->app->ActionHandlerListen($app);
|
|
}
|
|
|
|
function BestellungSteuer()
|
|
{
|
|
|
|
}
|
|
|
|
function BestellungUndelete()
|
|
{
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
$bestellungRow = $this->app->DB->SelectRow(
|
|
sprintf("SELECT status, belegnr, name FROM bestellung WHERE id=%d LIMIT 1", $id)
|
|
);
|
|
$status = $bestellungRow['status'];
|
|
$belegnr = $bestellungRow['belegnr'];
|
|
$name = $bestellungRow['name'];
|
|
|
|
if($status==='storniert')
|
|
{
|
|
$this->app->erp->BestellungProtokoll($id,"Bestellung Storno rückgängig");
|
|
$this->app->DB->Update("UPDATE bestellung SET status='freigegeben' WHERE id='$id' LIMIT 1");
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"info\">Bestellung \"$name\" ($belegnr) wurde wieder freigegeben!</div> ");
|
|
} else {
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Bestellung \"$name\" ($belegnr) kann nicht wieder freigegeben werden, da sie nicht storniert ist.</div> ");
|
|
}
|
|
//header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg");
|
|
$this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg);
|
|
}
|
|
|
|
function BestellungEinlagern($id = null, $lagerplatz = null)
|
|
{
|
|
if($id === null)
|
|
{
|
|
$intern = false;
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
}else{
|
|
$intern = true;
|
|
}
|
|
if($id)
|
|
{
|
|
$arr = $this->app->DB->SelectRow("SELECT projekt,belegnr,status FROM bestellung WHERE id = '$id' LIMIT 1");
|
|
if(!empty($arr)){
|
|
$projekt = $arr['projekt'];
|
|
$belegnr = $arr['belegnr'];
|
|
$status = $arr['status'];
|
|
if(($status === 'versendet' || $status === 'freigegeben')){
|
|
$standardlager = $this->app->DB->Select("SELECT id FROM lager_platz WHERE geloescht <> 1 AND sperrlager <> 1 AND poslager <> 1 ORDER BY id LIMIT 1");
|
|
$positionen = $this->app->DB->SelectArr("SELECT id,artikel,menge,geliefert FROM bestellung_position WHERE geliefert < menge AND bestellung='$id'");
|
|
if($positionen){
|
|
foreach ($positionen as $position) {
|
|
if($lagerplatz){
|
|
$lager = $lagerplatz;
|
|
}else{
|
|
$lager = $this->app->DB->Select("SELECT lager_platz FROM artikel WHERE id = '" . $position['artikel'] . "' LIMIT 1");
|
|
if(!$this->app->DB->Select("SELECT id FROM lager_platz WHERE id = '$lager' AND geloescht <> 1 LIMIT 1")) {
|
|
$lager = $standardlager;
|
|
}
|
|
if(!$lager) {
|
|
$lager = $standardlager;
|
|
}
|
|
}
|
|
if($lager){
|
|
$this->app->erp->LagerEinlagern(
|
|
$position['artikel'], $position['menge'] - $position['geliefert'], $lager, $projekt,
|
|
'Wareneingang von Bestellung ' . $belegnr,'','','bestellung',$id
|
|
);
|
|
$this->app->DB->Update("UPDATE bestellung_position SET geliefert = menge WHERE id = '" . $position['id'] . "' LIMIT 1");
|
|
} else {
|
|
$dataartikel = $this->app->DB->SelectRow("SELECT nummer,name_de FROM artikel WHERE id='".$position['artikel']."'");
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Abbruch beim Einlagern da für den Artikel \"".$dataartikel['nummer']." ".$dataartikel['name_de']."\" kein Standard Lagerplatz definiert wurde oder alle Lager Sperr- oder POS-Lager sind!</div>");
|
|
$this->app->Location->execute('index.php?module=bestellung&action=edit&id=' . $id . "&msg=" . $msg);
|
|
}
|
|
}
|
|
$this->app->erp->BestellungProtokoll($id,"Bestellung manuell eingelagert");
|
|
$this->checkAbschliessen($id);
|
|
if($intern) {
|
|
return true;
|
|
}
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"info\">Die Bestellung wurde eingelagert!</div>");
|
|
$this->app->Location->execute('index.php?module=bestellung&action=edit&id=' . $id . "&msg=" . $msg);
|
|
}
|
|
}
|
|
}
|
|
if($intern) {
|
|
return false;
|
|
}
|
|
$this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id);
|
|
}
|
|
if($intern) {
|
|
return false;
|
|
}
|
|
$this->app->Location->execute('index.php?module=bestellung&action=list');
|
|
}
|
|
|
|
function checkAbschliessen($id = 0)
|
|
{
|
|
if(!$id) {
|
|
$id = $this->app->Secure->GetGET('id');
|
|
}
|
|
$id = (int)$id;
|
|
if($id <= 0) {
|
|
return;
|
|
}
|
|
$status = $this->app->DB->Select("SELECT status FROM bestellung WHERE id = '$id' LIMIT 1");
|
|
if(($status === 'versendet' || $status === 'freigegeben'))
|
|
{
|
|
$sql = "SELECT bp.id FROM bestellung_position bp LEFT JOIN artikel a ON a.id=bp.artikel WHERE bp.bestellung = '$id' AND a.lagerartikel=1";
|
|
$alleLagerArtikelVonBestellung = $this->app->DB->SelectArr($sql);
|
|
|
|
//nur wenn auch Lagerartikel enthalten sind, soll automatisch abgeschlossen werden können.
|
|
if((!empty($alleLagerArtikelVonBestellung)?count($alleLagerArtikelVonBestellung):0)>0){
|
|
$lagerArtikelIds = [];
|
|
foreach ($alleLagerArtikelVonBestellung as $l){
|
|
$lagerArtikelIds[] = $l['id'];
|
|
}
|
|
$sql = "SELECT bp.id FROM bestellung_position bp LEFT JOIN artikel a ON a.id=bp.artikel WHERE bp.geliefert < bp.menge AND bp.id IN (".implode(',',$lagerArtikelIds).")";
|
|
$offenePositionen = $this->app->DB->SelectArr($sql);
|
|
|
|
if(empty($offenePositionen)){
|
|
$this->BestellungAbschliessen($id,true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function BestellungOffenePositionen()
|
|
{
|
|
$this->BestellungListMenu();
|
|
|
|
$this->app->YUI->TableSearch('TAB1','bestellung_offenepositionen');
|
|
$this->app->Tpl->Parse('PAGE','bestellung_offenepositionen.tpl');
|
|
}
|
|
|
|
function BestellungArchivierePDF()
|
|
{
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
$projektbriefpapier = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id = '$id' LIMIT 1");
|
|
if(class_exists('BestellungPDFCustom'))
|
|
{
|
|
$Brief = new BestellungPDFCustom($this->app,$projektbriefpapier);
|
|
}else{
|
|
$Brief = new BestellungPDF($this->app,$projektbriefpapier);
|
|
}
|
|
$Brief->GetBestellung($id);
|
|
$tmpfile = $Brief->displayTMP();
|
|
$Brief->ArchiviereDocument(1);
|
|
unlink($tmpfile);
|
|
$this->app->DB->Update("UPDATE bestellung SET schreibschutz='1' WHERE id='$id'");
|
|
$this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id);
|
|
}
|
|
|
|
function BestellungEditable()
|
|
{
|
|
$this->app->YUI->AARLGEditable();
|
|
}
|
|
|
|
function BestellungSchreibschutz()
|
|
{
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
$this->app->DB->Update(sprintf('UPDATE bestellung SET zuarchivieren=1, schreibschutz = 0 WHERE id=%d', $id));
|
|
$this->app->erp->BestellungProtokoll($id,'Schreibschutz entfernt');
|
|
$this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id);
|
|
}
|
|
|
|
function BestellungPDFfromArchiv()
|
|
{
|
|
$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 bestellung where id = '".(int)$archiv."'");
|
|
}
|
|
if(class_exists('BestellungPDFCustom'))
|
|
{
|
|
if($archiv) {
|
|
$Brief = new BestellungPDFCustom($this->app,$projekt);
|
|
}
|
|
}else{
|
|
if($archiv) {
|
|
$Brief = new BestellungPDF($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();
|
|
}
|
|
|
|
function BestellungMiniDetail($parsetarget='',$menu=true)
|
|
{
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
$cmd = $this->app->Secure->GetGET('cmd');
|
|
if($cmd === 'lager')
|
|
{
|
|
if($this->app->DB->Select("SELECT id FROM artikel WHERE id = '$id' AND lagerartikel = 1 LIMIT 1"))
|
|
{
|
|
$table = new EasyTable($this->app);
|
|
$table->Query("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 = $id
|
|
GROUP BY l.id
|
|
ORDER BY l.bezeichnung");
|
|
$table->align[0] = 'right';
|
|
$table->align[1] = 'left';
|
|
echo json_encode(array('inhalt'=>'<div class="inlinetooltiptable"><style> div.inlinetooltiptable > table.mkTable > tbody > tr:nth-child(2n+1) td {background-color:#e0e0e0;} </style>'.$table->DisplayNew('return','Lager','noAction').'</div>'));
|
|
}else{
|
|
echo json_encode(array('inhalt'=>'<div class="inlinetooltiptable">kein Lagerartikel</div>'));
|
|
}
|
|
$this->app->ExitXentral();
|
|
}
|
|
|
|
if($cmd === 'zuordnungAuftragZuBestellung')
|
|
{
|
|
$bid = $this->app->Secure->GetGet("id");
|
|
$belegnummer = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$bid'");
|
|
$auftragPost = explode(" ",$this->app->Secure->GetPOST("auftrag"));
|
|
$auftragsnummer = $auftragPost[0];
|
|
|
|
$auftrag_positionen = $this->app->DB->SelectArr("SELECT ap.id,ap.artikel,ap.menge FROM auftrag_position ap LEFT JOIN auftrag a on a.id=ap.auftrag WHERE a.belegnr='$auftragsnummer' AND a.belegnr!=''");
|
|
foreach($auftrag_positionen as $value){
|
|
$a_positionen[$value['artikel']]['id'] = $value['id'];
|
|
$a_positionen[$value['artikel']]['menge'] = $value['menge'];
|
|
}
|
|
//jetzt holen wir alle Bestellpositonen für diese Bestellung
|
|
$bestellung_positionen = $this->app->DB->SelectArr("SELECT bp.id,bp.artikel,bp.menge FROM bestellung_position bp WHERE bp.bestellung='$bid'");
|
|
foreach($bestellung_positionen as $position){
|
|
// prüfen ob beide artikel gleich sind und ob die menge passt
|
|
if( (is_array($a_positionen[$position['artikel']])) && ($position['menge'] == $a_positionen[$position['artikel']]['menge']) ) {
|
|
// wenn wir den Artikel haben und die Anzahl passt
|
|
$wert = $a_positionen[$position['artikel']]['id'];
|
|
$this->app->DB->Update("UPDATE bestellung_position SET auftrag_position_id='$wert' WHERE id='{$position['id']}' AND bestellung='$bid' LIMIT 1");
|
|
} else{
|
|
// wenn wir den Artikel haben aber die Anzahl nicht passt nehmen wir die Position vom ersten Auffinden des Artikel
|
|
if($position['artikel'] == $a_positionen[$position['artikel']]){
|
|
$wert = $a_positionen[$position['artikel']]['id'];
|
|
|
|
$this->app->DB->Update("UPDATE bestellung_position SET auftrag_position_id='$wert' WHERE id='{$position['id']}' AND bestellung='$bid' LIMIT 1");
|
|
}else{
|
|
// wenn wir keinen Artikel haben nehmen wir den ersten Artikel zum verknüpfen
|
|
$wert = $a_positionen[0]['id'];
|
|
$this->app->DB->Update("UPDATE bestellung_position SET auftrag_position_id='$wert' WHERE id='{$position['id']}' AND bestellung='$bid' LIMIT 1");
|
|
}
|
|
}
|
|
}
|
|
|
|
$zugeordnet = $this->app->DB->Select("SELECT count(id) FROM bestellung_position WHERE bestellung='$bid' AND auftrag_position_id != '0'");;
|
|
$nichtzugeordnet = $this->app->DB->Select("SELECT count(id) FROM bestellung_position WHERE bestellung='$bid' AND auftrag_position_id = '0'");
|
|
$gesamtpositionen = $this->app->DB->Select("SELECT count(id) FROM bestellung_position WHERE bestellung='$bid'");
|
|
|
|
$data['gesamtpositionen'] = $gesamtpositionen;
|
|
$data['belegnummer'] = $belegnummer;
|
|
$data['zugeordnet'] = $zugeordnet;
|
|
$data['nichtzugeordnet'] = $nichtzugeordnet;
|
|
$data['error'] = false;
|
|
echo json_encode($data);
|
|
$this->app->ExitXentral();
|
|
}
|
|
|
|
|
|
if($cmd === 'checkmenge')
|
|
{
|
|
$bpid = $this->app->Secure->GetPOST("bp");
|
|
$ab_menge = round(str_replace(',','.',$this->app->Secure->GetPOST("ab_menge")),8);
|
|
$data = $this->app->DB->SelectArr("SELECT *, TRIM(menge)+0 as menge FROM bestellung_position WHERE id = '$bpid' LIMIT 1");
|
|
if($data)
|
|
{
|
|
$data = reset($data);
|
|
$bestellung = $data['bestellung'];
|
|
$adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id = '$bestellung' LIMIT 1");
|
|
$ek = $this->app->erp->GetEinkaufspreisArr($data['artikel'], $ab_menge, $adresse, $data['waehrung']);
|
|
if($ek)
|
|
{
|
|
$data = array('menge'=>$ab_menge, 'ab_menge'=>round($ek['ab_menge'],8));
|
|
}else{
|
|
$data = array('menge'=>$ab_menge, 'ab_menge'=>$ab_menge);
|
|
}
|
|
}
|
|
echo json_encode($data);
|
|
$this->app->ExitXentral();
|
|
}
|
|
if($cmd === 'getpreis')
|
|
{
|
|
$bpid = $this->app->Secure->GetPOST("bp");
|
|
$data = $this->app->DB->SelectArr("SELECT *, TRIM(menge)+0 as menge FROM bestellung_position WHERE id = '$bpid' LIMIT 1");
|
|
if($data)
|
|
{
|
|
$data = reset($data);
|
|
$data['menge'] = round((float)$data['menge'], 8);
|
|
$bestellung = $data['bestellung'];
|
|
$adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id = '$bestellung' LIMIT 1");
|
|
$ek = $this->app->erp->GetEinkaufspreisArr($data['artikel'], $data['menge'], $adresse, $data['waehrung']);
|
|
if($ek)$data['ab_menge'] = round($ek['ab_menge'], 8);
|
|
$data['preis'] = number_format(round($data['preis'],8),2,',','.');
|
|
$data['auchinstammdaten'] = $this->app->User->GetParameter('bestellung_auchinstammdaten')?1:0;
|
|
}
|
|
echo json_encode($data);
|
|
$this->app->ExitXentral();
|
|
}
|
|
if($cmd === 'savepreis')
|
|
{
|
|
$bpid = (int)$this->app->Secure->GetPOST('bp');
|
|
$bpRow = $this->app->DB->SelectRow(
|
|
sprintf(
|
|
'SELECT artikel, bestellung FROM bestellung_position WHERE id = %d LIMIT 1'
|
|
,$bpid
|
|
)
|
|
);
|
|
$artikel = $bpRow['artikel'];
|
|
$preis = str_replace(',','.',$this->app->Secure->GetPOST('preis'));
|
|
$auchinstammdaten = $this->app->Secure->GetPOST('auchinstammdaten');
|
|
$this->app->User->SetParameter('bestellung_auchinstammdaten', $auchinstammdaten);
|
|
$waehrung = $this->app->Secure->GetPOST('waehrung');
|
|
$bestellnummer = $this->app->Secure->GetPOST('bestellnummer');
|
|
$bezeichnung = $this->app->Secure->GetPOST('bezeichnung');
|
|
$ab_menge = str_replace(',','.',$this->app->Secure->GetPOST('ab_menge'));
|
|
$menge = str_replace(',','.',$this->app->Secure->GetPOST('menge'));
|
|
$bestellung = $bpRow['bestellung'];
|
|
|
|
// Schreibschutz entfernen
|
|
$this->app->DB->Update("UPDATE bestellung SET schreibschutz=0 WHERE id='$bestellung' LIMIT 1");
|
|
$bRow = $this->app->DB->SelectRow(
|
|
sprintf(
|
|
'SELECT schreibschutz, adresse FROM bestellung WHERE id=%d LIMIT 1',
|
|
(int)$bestellung
|
|
)
|
|
);
|
|
$schreibschutz = $bRow['schreibschutz'];
|
|
$adresse = $bRow['adresse'];
|
|
if(!$schreibschutz)
|
|
{
|
|
$this->app->DB->Update(
|
|
sprintf(
|
|
'UPDATE bestellung_position SET preis = %f WHERE id = %d LIMIT 1',
|
|
(float)$preis, $bpid
|
|
)
|
|
);
|
|
if((String)$bestellnummer !== '') {
|
|
$this->app->DB->Update(
|
|
sprintf(
|
|
"UPDATE bestellung_position SET bestellnummer = '%s' WHERE id = %d LIMIT 1",
|
|
$bestellnummer, $bpid
|
|
)
|
|
);
|
|
}
|
|
if((String)$bezeichnung !== '') {
|
|
$this->app->DB->Update(
|
|
sprintf(
|
|
"UPDATE bestellung_position SET bezeichnunglieferant = '%s' WHERE id = %d LIMIT 1",
|
|
$bezeichnung, $bpid
|
|
)
|
|
);
|
|
}
|
|
if($menge) {
|
|
$this->app->DB->Update(
|
|
sprintf(
|
|
"UPDATE bestellung_position SET menge = %f WHERE id = %d LIMIT 1",
|
|
(float)$menge, $bpid
|
|
)
|
|
);
|
|
}
|
|
$this->app->erp->ANABREGSNeuberechnen($bestellung,'bestellung');
|
|
}
|
|
if($auchinstammdaten && $artikel && $adresse)
|
|
{
|
|
$this->app->erp->AddEinkaufspreis($artikel,$ab_menge,$adresse,$bestellnummer,$bezeichnung, $preis, $waehrung);
|
|
}
|
|
$data = $this->app->DB->SelectRow(
|
|
sprintf(
|
|
'SELECT id, %s as preis, bestellnummer, trim(menge)+0 as menge
|
|
FROM bestellung_position
|
|
WHERE id = %d
|
|
LIMIT 1',
|
|
$this->app->erp->FormatPreis('preis'),$bpid
|
|
)
|
|
);
|
|
if(!empty($data))
|
|
{
|
|
$data['menge'] = round($data['menge'], 8);
|
|
$data['preis'] .= ' <a href="#" onclick="changepreis'.$this->app->Secure->getPOST('md5').'('.$bpid.');"><img src="themes/'.$this->app->Conf->WFconf['defaulttheme'].'/images/edit.svg" border="0"></a>';
|
|
}
|
|
echo json_encode($data);
|
|
$this->app->ExitXentral();
|
|
}
|
|
$bestRow = $this->app->DB->SelectRow(
|
|
sprintf(
|
|
'SELECT belegnr, name, status, zahlungsweise, adresse, verbindlichkeiteninfo,preisanfrageid,
|
|
DATE_FORMAT(gewuenschteslieferdatum,\'%%d.%%m.%%Y\') as gewuenschteslieferdatum, bestellungbestaetigtabnummer,
|
|
DATE_FORMAT(bestaetigteslieferdatum,\'%%d.%%m.%%Y\') as bestaetigteslieferdatum, datum, projekt
|
|
FROM bestellung
|
|
WHERE id=%d
|
|
LIMIT 1',
|
|
$id
|
|
)
|
|
);
|
|
$belegnr = $bestRow['belegnr'];
|
|
$name = $bestRow['name'];
|
|
$status = $bestRow['status'];
|
|
//$schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM bestellung WHERE id='$id' LIMIT 1");
|
|
$zahlweise = $bestRow['zahlungsweise'];
|
|
$bestaetigteslieferdatum = $bestRow['bestaetigteslieferdatum'];
|
|
$wunschlieferdatum = $bestRow['gewuenschteslieferdatum'];
|
|
$ablieferant = $bestRow['bestellungbestaetigtabnummer'];
|
|
$verbindlichkeiteninfo = $bestRow['verbindlichkeiteninfo'];
|
|
$preisanfrageid = $bestRow['preisanfrageid'];
|
|
$preisanfrage = $this->app->DB->Select("SELECT belegnr FROM preisanfrage WHERE id = '$preisanfrageid' LIMIT 1");
|
|
$adresse = (int)$bestRow['adresse'];
|
|
$lieferantennummer = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id = '$adresse' LIMIT 1");
|
|
$datum = (int)$bestRow['datum'];
|
|
$projekt = (int)$bestRow['projekt'];
|
|
$this->app->Tpl->Set('VERBINDLICHKEITENINFO',$verbindlichkeiteninfo);
|
|
|
|
if($belegnr=='0' || $belegnr=='') {
|
|
$belegnr = 'ENTWURF';
|
|
}
|
|
|
|
$this->app->Tpl->Set('BELEGNR',$belegnr);
|
|
$this->app->Tpl->Set('LIEFERANT',"<a href=\"index.php?module=adresse&action=edit&id=".$adresse."\" target=\"_blank\">".$lieferantennummer."</a> ".$name);
|
|
$this->app->Tpl->Set('STATUS',$status);
|
|
$this->app->Tpl->Set('ZAHLWEISE',$zahlweise);
|
|
$this->app->Tpl->Set('BESTELLUNGID',$id);
|
|
if($preisanfrageid > 0)
|
|
{
|
|
$this->app->Tpl->Set('PREISANFRAGE','<a href="index.php?module=preisanfrage&action=edit&id='.$preisanfrageid.'" target="_blank">'.$preisanfrage.'</a> <a href="index.php?module=preisanfrage&action=pdf&id='.$preisanfrageid.'" target="_blank"><img src="./themes/new/images/pdf.svg" title="Preisanfrage PDF" border="0" target="_blank"></a> <a href="index.php?module=preisanfrage&action=edit&id='.$preisanfrageid.'" target="_blank"><img src="./themes/new/images/edit.svg" title="Preisanfrage bearbeiten" border="0" target="_blank"></a>');
|
|
}
|
|
|
|
if($bestaetigteslieferdatum=="00.00.0000") $bestaetigteslieferdatum="warte auf Datum";
|
|
$this->app->Tpl->Set('BESTAETIGTESLIEFERDATUM',$bestaetigteslieferdatum);
|
|
|
|
if($wunschlieferdatum=="00.00.0000") $wunschlieferdatum="warte auf Datum";
|
|
$this->app->Tpl->Set('WUNSCHLIEFERDATUM',$wunschlieferdatum);
|
|
$this->app->Tpl->Set('ABLIEFERANT',$ablieferant);
|
|
|
|
$nettogewicht = $this->app->erp->BestellungNettoGewicht($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);
|
|
}
|
|
|
|
$projektabkuerzung = $this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='$projekt' LIMIT 1");
|
|
if($this->app->erp->RechteVorhanden("projekt","dashboard"))
|
|
$this->app->Tpl->Set('PROJEKT',"<a href=\"index.php?module=projekt&action=dashboard&id=".$projekt."\" target=\"_blank\">$projektabkuerzung</a>");
|
|
else
|
|
$this->app->Tpl->Set('PROJEKT',$projekt);
|
|
|
|
$md5 = md5(microtime(true));
|
|
|
|
$table = new EasyTable($this->app);
|
|
|
|
$anzahlzeichen = 200;
|
|
$artikelIdList = [];
|
|
$artikelArr = $this->app->DB->SelectArr(sprintf('SELECT DISTINCT artikel FROM bestellung_position WHERE bestellung = %d', $id));
|
|
if(!empty($artikelArr))
|
|
{
|
|
foreach($artikelArr as $row)
|
|
{
|
|
$artikelIdList[] = $row['artikel'];
|
|
}
|
|
}
|
|
$table->Query("SELECT CONCAT(SUBSTRING(ap.bezeichnunglieferant,1,$anzahlzeichen),'<br>Best-Nr.:<span id=\"spanbestellnummer".$md5."',ap.id,'\">',ap.bestellnummer,'</span>') as artikel,
|
|
CONCAT('<a href=\"index.php?module=artikel&action=edit&id=',a.id,'\" target=\"_blank\">',a.nummer,'</a>') as nummer,
|
|
CONCAT('<span id=\"spanmenge".$md5."',ap.id,'\">',(TRIM(ap.menge)+0),'</span>') as Menge,
|
|
TRIM(ap.geliefert)+0 as geliefert,
|
|
IF(a.lagerartikel = 1,CONCAT( ".$this->app->erp->FormatMenge('IFNULL(lag.menge,0)').",'lagermehr(',ap.artikel,')'),'-') as Lager,
|
|
if(ap.lieferdatum!='0000-00-00',DATE_FORMAT(ap.lieferdatum,'%d.%m.%Y'),'sofort') as lieferdatum,
|
|
concat('<span id=\"spanpreis".$md5."',ap.id,'\">',FORMAT(ap.preis,2,'de_DE'),'".
|
|
" <a href=\"#\" onclick=\"changepreis".$md5."(',ap.id,');\"><img src=\"themes/{$this->app->Conf->WFconf['defaulttheme']}/images/edit.svg\" border=\"0\"></a>"
|
|
."','</span>') as preis
|
|
FROM bestellung_position AS ap
|
|
INNER JOIN artikel AS a ON ap.artikel = a.id
|
|
LEFT JOIN (
|
|
SELECT SUM(lpi.menge) as menge, lpi.artikel
|
|
FROM lager_platz_inhalt AS lpi
|
|
INNER JOIN lager_platz AS lp ON lpi.lager_platz = lp.id AND IFNULL(lp.sperrlager,0) = 0 AND IFNULL(lp.autolagersperre,0) = 0
|
|
".(!empty($artikelIdList)?' AND lpi.artikel IN ('.implode(',', $artikelIdList).')':'')."
|
|
GROUP BY lpi.artikel
|
|
) as lag ON a.id = lag.artikel
|
|
WHERE ap.bestellung='$id'
|
|
ORDER by ap.sort");
|
|
foreach($table->datasets as $tablerowKey => $tableRow)
|
|
{
|
|
foreach($tableRow as $columName => $columnValue)
|
|
{
|
|
if(preg_match_all('/^(.*)lagermehr\((.*)\)(.*)$/', $columnValue, $matches,PREG_OFFSET_CAPTURE))
|
|
{
|
|
$table->datasets[$tablerowKey][$columName] = $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->datasets as $k => $row)
|
|
{
|
|
if(strip_tags($table->datasets[$k]['geliefert']) == strip_tags($table->datasets[$k]['Menge']))
|
|
{
|
|
$table->datasets[$k]['geliefert'] = '<b>'.$table->datasets[$k]['geliefert'].'</b>';
|
|
$table->datasets[$k]['Menge'] = '<b>'.$table->datasets[$k]['Menge'].'</b>';
|
|
|
|
} else {
|
|
$table->datasets[$k]['geliefert'] = '<b style="color:red;">'.$table->datasets[$k]['geliefert'].'</b>';
|
|
$table->datasets[$k]['Menge'] = '<b style="color:red;">'.$table->datasets[$k]['Menge'].'</b>';
|
|
}
|
|
|
|
|
|
$table->datasets[$k]['preis'] = '<div style="float:right;text-align:right;"><b>'.$table->datasets[$k]['preis'];
|
|
if(preg_match("/&id=([0-9]*)/",$row['nummer'],$treffer)){
|
|
$artid = (int)$treffer[1];
|
|
if($epreise = $this->app->DB->SelectArr("SELECT ab_menge, preis FROM einkaufspreise WHERE artikel='".$artid."' AND adresse='$adresse' AND (gueltig_bis>='".$datum."' OR gueltig_bis='0000-00-00') and (preis_anfrage_vom = '0000-00-00' or preis_anfrage_vom <= '".$datum."') and ab_menge > ".(int)strip_tags($row['Menge'])." order by ab_menge"))
|
|
{
|
|
$table->datasets[$k]['preis'] .= '</b> <br /><table style="float:right;">';
|
|
foreach($epreise as $key => $pr)
|
|
{
|
|
$table->datasets[$k]['preis'] .= "<tr style=\"background-color: transparent;text-align:right;\"><td><small>(".floatval($pr['ab_menge']).":</small></td><td><small>".number_format($pr['preis'],2,',','.').")</small></td></tr>";
|
|
|
|
}
|
|
$table->datasets[$k]['preis'] .= '</table>';
|
|
}
|
|
} else {
|
|
$table->datasets[$k]['preis'] .= '</b>';
|
|
}
|
|
$table->datasets[$k]['preis'] .= "</div>";
|
|
|
|
}
|
|
|
|
$check = $this->app->DB->SelectArr("SELECT a.belegnr, a.id
|
|
FROM auftrag_position ap
|
|
INNER JOIN auftrag a ON ap.auftrag = a.id
|
|
INNER JOIN bestellung_position bp ON ap.id = bp.auftrag_position_id
|
|
WHERE bp.bestellung='$id' GROUP BY a.belegnr, a.id ORDER BY a.belegnr, a.id");
|
|
if($check)
|
|
{
|
|
$auftraege = null;
|
|
$lieferscheine = [];
|
|
$rechnungen = [];
|
|
foreach($check as $row)
|
|
{
|
|
$auftraege[] = '<a href="index.php?module=auftrag&action=edit&id='.$row['id'].'" target="_blank">'.($row['belegnr']?$row['belegnr']:'Entwurf').'</a>
|
|
<a href="index.php?module=auftrag&action=pdf&id='.$row['id'].'" target="_blank"><img src="./themes/new/images/pdf.svg" title="Auftrag PDF" border="0"></a>
|
|
<a href="index.php?module=auftrag&action=edit&id='.$row['id'].'" target="_blank"><img src="./themes/new/images/edit.svg" title="Auftrag bearbeiten" border="0"></a>';
|
|
|
|
$lieferscheineTemp = $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='".$row['id']."'"
|
|
);
|
|
|
|
if(!empty($lieferscheineTemp)){
|
|
foreach ($lieferscheineTemp as $k => $v){
|
|
$lieferscheine[$k] = $v;
|
|
}
|
|
}
|
|
|
|
$rechnungenTemp = $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='".$row['id']."'"
|
|
);
|
|
|
|
if(!empty($rechnungenTemp)){
|
|
foreach ($rechnungenTemp as $k => $v){
|
|
$rechnungen[$k] = $v;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(!empty($auftraege)){
|
|
$this->app->Tpl->Set('AUFTRAG', implode('<br />', $auftraege));
|
|
}
|
|
|
|
if(!empty($lieferscheine)){
|
|
$this->app->Tpl->Set('LIEFERSCHEIN', implode('<br />', $lieferscheine));
|
|
}
|
|
|
|
if(!empty($rechnungen)){
|
|
$this->app->Tpl->Set('RECHNUNG', implode('<br />', $rechnungen));
|
|
}
|
|
}
|
|
|
|
// $nowarp-Parameter (letzter Parameter) auf false setzen, damit lange Artikeltitel umbrechen können
|
|
$artikel = $table->DisplayNew("return", "Preis", "noAction", false, 0, 0, false);
|
|
|
|
if($menu)
|
|
{
|
|
$menu = $this->BestellungIconMenu($id);
|
|
$this->app->Tpl->Set('MENU',$menu);
|
|
}
|
|
|
|
$this->app->Tpl->Set('ARTIKEL',$artikel);
|
|
|
|
|
|
$tmp = new EasyTable($this->app);
|
|
$tmp->Query("SELECT zeit,bearbeiter,grund FROM bestellung_protokoll WHERE bestellung='$id' ORDER by id DESC");
|
|
$tmp->DisplayNew('PROTOKOLL',"Protokoll","noAction");
|
|
|
|
$this->app->Tpl->Set('RECHNUNGLIEFERADRESSE',$this->BestellungRechnungsLieferadresse($id));
|
|
|
|
if(class_exists('BestellungPDFCustom'))
|
|
{
|
|
$Brief = new BestellungPDFCustom($this->app,$projekt);
|
|
}else{
|
|
$Brief = new BestellungPDF($this->app,$projekt);
|
|
}
|
|
|
|
$Dokumentenliste = $Brief->getArchivedFiles($id, 'bestellung');
|
|
if(!empty($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=bestellung&action=pdffromarchive&id='.$v['id'].'"><img src="themes/'.$this->app->Conf->WFconf['defaulttheme'].'/images/pdf.svg" /></a>';
|
|
$tmp3->datasets[] = $tmpr;
|
|
}
|
|
}
|
|
|
|
$tmp3->DisplayNew('PDFARCHIV','Menü',"noAction");
|
|
}
|
|
|
|
/*
|
|
$wareneingangsbelege = $this->app->DB->SelectFirstCols("SELECT
|
|
CONCAT('<a href=\"index.php?module=receiptdocument&action=edit&id=',r.id,'\" target=\"_blank\"',if(r.status='storniert',' title=\"Wareneingangsbeleg storniert\"><s>','>'),if(r.document_number='0' OR document_number='','ENTWURF',r.document_number),if(r.status='storniert','</s>',''),'</a> <a href=\"index.php?module=receiptdocument&action=pdf&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/pdf.svg\" title=\"Wareneingangsbeleg PDF\" border=\"0\"></a>
|
|
<a href=\"index.php?module=receiptdocument&action=edit&id=',r.id,'\" target=\"_blank\"><img src=\"./themes/new/images/edit.svg\" title=\"Wareneingangsbeleg bearbeiten\" border=\"0\"></a>') as wareneingangsbeleg
|
|
FROM receiptdocument r WHERE r.supplier_order_id='$id'");
|
|
|
|
if(!empty($wareneingangsbelege)){
|
|
$this->app->Tpl->Add('WARENEINGANGSBELEG', implode('<br />', $wareneingangsbelege));
|
|
}
|
|
else{
|
|
$this->app->Tpl->Set('WARENEINGANGSBELEG', '-');
|
|
}
|
|
*/
|
|
|
|
$sql = "SELECT
|
|
CONCAT('<a href =\"index.php?module=wareneingang&action=distriinhalt&id=',pa.id,'\">',pa.id,'</a>') as wareneingang
|
|
FROM
|
|
paketannahme pa
|
|
INNER JOIN paketdistribution pd ON
|
|
pd.paketannahme = pa.id
|
|
INNER JOIN bestellung_position bp ON
|
|
pd.bestellung_position = bp.id
|
|
INNER JOIN bestellung b ON
|
|
b.id = bp.bestellung
|
|
WHERE
|
|
b.id = $id
|
|
GROUP BY
|
|
pa.id";
|
|
// echo($sql);
|
|
$wareneingangsbelege = $this->app->DB->SelectArr($sql);
|
|
if(!empty($wareneingangsbelege)){
|
|
$this->app->Tpl->Add('WARENEINGANGSBELEG', implode('<br />', array_column($wareneingangsbelege , 'wareneingang' )));
|
|
}
|
|
else{
|
|
$this->app->Tpl->Set('WARENEINGANGSBELEG', '-');
|
|
}
|
|
|
|
|
|
$this->app->Tpl->Set('ID', $id);
|
|
$this->app->Tpl->Set('MD5', $md5);
|
|
$this->app->Tpl->Parse('ARTIKEL', 'bestellung_minidetail_popup.tpl');
|
|
|
|
|
|
if($parsetarget=='')
|
|
{
|
|
$this->app->Tpl->Output("bestellung_minidetail.tpl");
|
|
$this->app->ExitXentral();
|
|
}
|
|
$this->app->Tpl->Parse($parsetarget,"bestellung_minidetail.tpl");
|
|
}
|
|
|
|
|
|
function BestellungAlsversendet($id = 0)
|
|
{
|
|
if($id)
|
|
{
|
|
$intern = true;
|
|
}else{
|
|
$intern = false;
|
|
$id = $this->app->Secure->GetGET('id');
|
|
}
|
|
|
|
if($id > 0)
|
|
{
|
|
$this->app->DB->Update("UPDATE bestellung SET status='versendet' WHERE id='$id' LIMIT 1");
|
|
$this->app->erp->BestellungProtokoll($id,"Bestellung als versendet markiert");
|
|
}
|
|
if($intern) {
|
|
return;
|
|
}
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"info\">Die Bestellung wurde als versendet markiert!</div>");
|
|
$this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg);
|
|
}
|
|
|
|
function BestellungAbschliessen($id = 0,$auto=false)
|
|
{
|
|
if($id)
|
|
{
|
|
$intern = true;
|
|
}else{
|
|
$intern = false;
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
}
|
|
|
|
if($id > 0)
|
|
{
|
|
$this->app->DB->Update("UPDATE bestellung SET status='abgeschlossen',schreibschutz=1 WHERE id='$id' LIMIT 1");
|
|
$this->app->DB->Update("UPDATE verbindlichkeit SET freigabe='1' WHERE bestellung='$id'");
|
|
$this->app->erp->BestellungProtokoll($id,'Bestellung '.($auto?'automatisch ':'').'abgeschlossen');
|
|
$this->app->erp->RunHook("bestellung_abschliessen",1,$id);
|
|
}
|
|
if($intern) {
|
|
return;
|
|
}
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"info\">Die Bestellung wurde als abgeschlossen markiert!</div>");
|
|
$this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg);
|
|
}
|
|
|
|
function BestellungFreigegeben($id = '')
|
|
{
|
|
if($id<=0){
|
|
$intern = false;
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
}else{
|
|
$intern = true;
|
|
}
|
|
if($id)
|
|
{
|
|
if($this->app->DB->Select("SELECT id FROM bestellung WHERE status = 'abgeschlossen' AND id = '$id' LIMIT 1"))
|
|
{
|
|
$this->app->DB->Update("UPDATE bestellung SET status = 'freigegeben', schreibschutz = 0 WHERE id = '$id' LIMIT 1");
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"error2\">Die Bestellung wurde auf freigegeben gesetzt!</div>");
|
|
}else{
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Bestellung ist nicht abgeschlossen!</div>");
|
|
}
|
|
}else{
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Es wurde keine Bestellung angeben!</div>");
|
|
$this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg);
|
|
}
|
|
if($intern)
|
|
{
|
|
return $id;
|
|
}
|
|
$this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id.'&msg='.$msg);
|
|
}
|
|
|
|
function BestellungFreigabe($id='')
|
|
{
|
|
if($id<=0)
|
|
{
|
|
$intern = false;
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
$freigabe= $this->app->Secure->GetGET('freigabe');
|
|
$weiter= $this->app->Secure->GetPOST('weiter');
|
|
$this->app->Tpl->Set('TABTEXT','Freigabe');
|
|
} else {
|
|
$intern = true;
|
|
$freigabe=$intern;
|
|
}
|
|
$allowedFrm = true;
|
|
$showDefault = true;
|
|
$doctype = 'bestellung';
|
|
if(empty($intern)){
|
|
$this->app->erp->RunHook('beleg_freigabe', 4, $doctype, $id, $allowedFrm, $showDefault);
|
|
}
|
|
if($weiter!='')
|
|
{
|
|
$this->app->Location->execute('index.php?module=bestellung&action=abschicken&id='.$id);
|
|
}
|
|
if($allowedFrm && $freigabe==$id)
|
|
{
|
|
//$projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$id' LIMIT 1");
|
|
$belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$id' LIMIT 1");
|
|
if($belegnr=='')
|
|
{
|
|
$this->app->erp->BelegFreigabe('bestellung',$id);
|
|
if($intern) {
|
|
return 1;
|
|
}
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"error2\">Die Bestellung wurde freigegeben und kann jetzt versendet werden!</div>");
|
|
$this->app->Location->execute("index.php?module=bestellung&action=edit&id=$id&msg=$msg");
|
|
}
|
|
if($intern) {
|
|
return 0;
|
|
}
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Bestellung wurde bereits freigegeben!</div>");
|
|
$this->app->Location->execute("index.php?module=bestellung&action=edit&id=$id&msg=$msg");
|
|
}
|
|
if($showDefault){
|
|
$name = $this->app->DB->Select("SELECT a.name FROM bestellung b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
|
|
$summe = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position
|
|
WHERE bestellung='$id'");
|
|
$waehrung = $this->app->DB->Select("SELECT waehrung FROM bestellung_position
|
|
WHERE bestellung='$id' LIMIT 1");
|
|
|
|
$summe = $this->app->erp->EUR($summe);
|
|
|
|
$extra = $this->app->erp->CheckboxEntwurfsmodus("bestellung", $id);
|
|
|
|
|
|
if($this->app->erp->Firmendaten("oneclickrelease")=="1" && $extra=="")
|
|
{
|
|
$this->app->Location->execute("index.php?module=bestellung&action=freigabe&id=$id&freigabe=$id");
|
|
} else {
|
|
$this->app->Tpl->Set('TAB1', "<div class=\"info\">Soll die Bestellung 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=bestellung&action=freigabe&id=$id&freigabe=$id'\"> $extra
|
|
</div>");
|
|
}
|
|
}
|
|
$this->BestellungMenu();
|
|
$this->app->Tpl->Parse('PAGE','tabview.tpl');
|
|
}
|
|
|
|
|
|
function BestellungCopy()
|
|
{
|
|
$id = $this->app->Secure->GetGET('id');
|
|
$newid = $this->app->erp->CopyBestellung($id);
|
|
|
|
$this->app->Location->execute('Location: index.php?module=bestellung&action=edit&id='.$newid);
|
|
}
|
|
|
|
function AdresseBestellungCopy()
|
|
{
|
|
$id = $this->app->Secure->GetGET('id');
|
|
$newid = $this->app->erp->CopyBestellung($id);
|
|
|
|
echo json_encode(array('status'=>1, 'newid'=>$newid));
|
|
$this->app->ExitXentral();
|
|
}
|
|
|
|
|
|
function BestellungLiveTabelle()
|
|
{
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
$status = $this->app->DB->Select("SELECT status FROM bestellung WHERE id='$id' LIMIT 1");
|
|
|
|
$table = new EasyTable($this->app);
|
|
|
|
if($status==='freigegeben')
|
|
{
|
|
$anzahlzeichen = 200;
|
|
$table->Query("SELECT SUBSTRING(ap.bezeichnung,1,$anzahlzeichen) as artikel, ap.nummer as Nummer, ap.menge as M,
|
|
if(a.porto,'-',if((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel) > ap.menge,(SELECT SUM(l.menge) 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 SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),'</b></font>'),
|
|
'<font color=red><b>aus</b></font>'))) as L
|
|
FROM bestellung_position ap, artikel a WHERE ap.bestellung='$id' AND a.id=ap.artikel");
|
|
$artikel = $table->DisplayNew("return","A","noAction");
|
|
} else {
|
|
$table->Query("SELECT SUBSTRING(ap.bezeichnung,1,$anzahlzeichen) as artikel, ap.nummer as Nummer, ap.menge as M
|
|
FROM bestellung_position ap, artikel a WHERE ap.bestellung='$id' AND a.id=ap.artikel");
|
|
$artikel = $table->DisplayNew("return","Menge","noAction");
|
|
}
|
|
echo $artikel;
|
|
$this->app->ExitXentral();
|
|
}
|
|
|
|
|
|
function BestellungAuftrag()
|
|
{
|
|
$id = $this->app->Secure->GetGET('id');
|
|
|
|
$newid = $this->app->erp->WeiterfuehrenBestellungZuAuftrag($id);
|
|
|
|
$this->app->Location->execute('index.php?module=auftrag&action=edit&id='.$newid);
|
|
}
|
|
|
|
|
|
function BestellungAbschicken()
|
|
{
|
|
$this->BestellungMenu();
|
|
$this->app->erp->DokumentAbschicken();
|
|
}
|
|
|
|
function BestellungDelete()
|
|
{
|
|
$id = $this->app->Secure->GetGET("id");
|
|
|
|
$belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$id' LIMIT 1");
|
|
$name = $this->app->DB->Select("SELECT name FROM bestellung WHERE id='$id' LIMIT 1");
|
|
$status = $this->app->DB->Select("SELECT status FROM bestellung WHERE id='$id' LIMIT 1");
|
|
|
|
if($belegnr=='0' || $belegnr=='')
|
|
{
|
|
$this->app->erp->DeleteBestellung($id);
|
|
$belegnr='ENTWURF';
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Bestellung \"$name\" ($belegnr) wurde gelöscht!</div>");
|
|
//header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg");
|
|
$this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg);
|
|
}
|
|
|
|
if($status==='storniert')
|
|
{
|
|
$maxbelegnr = $this->app->DB->Select("SELECT MAX(belegnr) FROM bestellung");
|
|
if(0)//$maxbelegnr == $belegnr)
|
|
{
|
|
$this->app->DB->Delete("DELETE FROM bestellung_position WHERE bestellung='$id'");
|
|
$this->app->DB->Delete("DELETE FROM bestellung_protokoll WHERE bestellung='$id'");
|
|
$this->app->DB->Delete("DELETE FROM bestellung WHERE id='$id'");
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Rechnung \"$name\" ($belegnr) wurde geöscht !</div>");
|
|
} else
|
|
{
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Bestellung \"$name\" ($belegnr) kann nicht storniert werden da sie bereits storniert ist!</div>");
|
|
}
|
|
$this->app->Location->execute('index.php?module=bestellung&action=list&msg='.$msg);
|
|
}
|
|
|
|
$this->app->DB->Update("UPDATE bestellung SET status='storniert' WHERE id='$id' LIMIT 1");
|
|
$this->app->erp->BestellungProtokoll($id,"Bestellung storniert");
|
|
$msg = $this->app->erp->base64_url_encode("<div class=\"error\">Die Bestellung \"$name\" ($belegnr) wurde storniert!</div>");
|
|
$this->app->Location->execute("Location: index.php?module=bestellung&action=list&msg=$msg#tabs-1");
|
|
}
|
|
|
|
function BestellungProtokoll()
|
|
{
|
|
$this->BestellungMenu();
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
|
|
$this->app->Tpl->Set('TABTEXT','Protokoll');
|
|
$tmp = new EasyTable($this->app);
|
|
$tmp->Query("SELECT zeit,bearbeiter,grund FROM bestellung_protokoll WHERE bestellung=$id ORDER by zeit DESC");
|
|
$tmp->DisplayNew('TAB1','Protokoll','noAction');
|
|
|
|
$this->app->Tpl->Parse('PAGE','tabview.tpl');
|
|
}
|
|
|
|
function BestellungInlinePDF()
|
|
{
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
|
|
$frame = $this->app->Secure->GetGET('frame');
|
|
if($frame != '') {
|
|
$file = urlencode('../../../../index.php?module=bestellung&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();
|
|
}
|
|
|
|
$projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id=$id LIMIT 1");
|
|
|
|
if(class_exists('BestellungPDFCustom'))
|
|
{
|
|
$Brief = new BestellungPDFCustom($this->app,$projekt);
|
|
}else{
|
|
$Brief = new BestellungPDF($this->app,$projekt);
|
|
}
|
|
$Brief->GetBestellung($id);
|
|
$Brief->inlineDocument();
|
|
}
|
|
|
|
function BestellungPDF()
|
|
{
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
|
|
//$belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$id' LIMIT 1");
|
|
$projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$id' LIMIT 1");
|
|
|
|
// if(is_numeric($belegnr) && $belegnr!=0)
|
|
{
|
|
if(class_exists('BestellungPDFCustom'))
|
|
{
|
|
$Brief = new BestellungPDFCustom($this->app,$projekt);
|
|
}else{
|
|
$Brief = new BestellungPDF($this->app,$projekt);
|
|
}
|
|
$Brief->GetBestellung($id);
|
|
$Brief->displayDocument();
|
|
} //else
|
|
// $this->app->Tpl->Set(MESSAGE,"<div class=\"error\">Noch nicht freigegebene Bestellungen können nicht als PDF betrachtet werden.!</div>");
|
|
|
|
|
|
$this->BestellungList();
|
|
}
|
|
|
|
|
|
function BestellungMenu()
|
|
{
|
|
$id = (int)$this->app->Secure->GetGET('id');
|
|
|
|
$bestellungRow = $this->app->DB->SelectRow(sprintf('SELECT belegnr, name,status FROM bestellung WHERE id=%d LIMIT 1', $id));
|
|
$belegnr = !empty($bestellungRow)?$bestellungRow['belegnr']:'';
|
|
$name = !empty($bestellungRow)?$bestellungRow['name']:'';
|
|
|
|
$this->app->erp->BestellungNeuberechnen($id);
|
|
|
|
|
|
if($belegnr=='0' || $belegnr=='') {
|
|
$belegnr ='(Entwurf)';
|
|
}
|
|
$this->app->Tpl->Set('KURZUEBERSCHRIFT2',"$name Bestellung $belegnr");
|
|
|
|
$status = !empty($bestellungRow)?$bestellungRow['status']:'';
|
|
if($status==="angelegt")
|
|
{
|
|
$this->app->erp->MenuEintrag("index.php?module=bestellung&action=freigabe&id=$id","Freigabe");
|
|
}
|
|
|
|
$this->app->erp->MenuEintrag("index.php?module=bestellung&action=edit&id=$id","Details");
|
|
|
|
if($status==='bestellt')
|
|
{
|
|
$this->app->erp->MenuEintrag("index.php?module=bestellung&action=wareneingang&id=$id","Wareneingang<br>Rückstände");
|
|
$this->app->erp->MenuEintrag("index.php?module=bestellung&action=wareneingang&id=$id","Mahnstufen");
|
|
}
|
|
// $this->app->erp->MenuEintrag("index.php?module=bestellung&action=abschicken&id=$id","Abschicken / Protokoll");
|
|
// $this->app->erp->MenuEintrag("index.php?module=bestellung&action=protokoll&id=$id","Protokoll");
|
|
|
|
$anzahldateien = $this->app->erp->AnzahlDateien("Bestellung",$id);
|
|
if($anzahldateien > 0) $anzahldateien = " (".$anzahldateien.")"; else $anzahldateien="";
|
|
|
|
$this->app->erp->MenuEintrag("index.php?module=bestellung&action=dateien&id=$id","Dateien".$anzahldateien);
|
|
|
|
if($this->app->erp->Firmendaten('auftrag_eantab')=='1'){
|
|
$this->app->erp->MenuEintrag('index.php?module=bestellung&action=ean&id='.$id, 'Barcodescanner');
|
|
}
|
|
|
|
if($this->app->Secure->GetGET("action")==="abschicken")
|
|
$this->app->erp->MenuEintrag("index.php?module=bestellung&action=edit&id=$id","Zurück zur Bestellung");
|
|
else
|
|
{
|
|
$backlink = $this->app->Secure->GetGET('backlink');
|
|
// Prüfen ob Backlink mit index.php? beginnt; ansonsten ist Open Redirect möglich
|
|
if (!empty($backlink) && strpos($backlink, 'index.php?') !== 0){
|
|
unset($backlink);
|
|
}
|
|
if($backlink)
|
|
{
|
|
$this->app->erp->MenuEintrag($backlink,"Zurück zur Übersicht");
|
|
}else{
|
|
$this->app->erp->MenuEintrag("index.php?module=bestellung&action=list","Zurück zur Übersicht");
|
|
}
|
|
}
|
|
|
|
|
|
$this->app->erp->RunMenuHook('bestellung');
|
|
$this->app->Tpl->Parse('MENU',"bestellung_menu.tpl");
|
|
}
|
|
|
|
|
|
function BestellungDateien()
|
|
{
|
|
$id = $this->app->Secure->GetGET("id");
|
|
$this->BestellungMenu();
|
|
$this->app->Tpl->Add('UEBERSCHRIFT'," (Dateien)");
|
|
$this->app->YUI->DateiUpload('PAGE',"Bestellung",$id);
|
|
}
|
|
|
|
|
|
|
|
function BestellungPositionen()
|
|
{
|
|
$id = $this->app->Secure->GetGET("id");
|
|
$this->app->erp->AuftragNeuberechnen($id);
|
|
$this->app->YUI->AARLGPositionen(false);
|
|
}
|
|
|
|
function CopyBestellungPosition()
|
|
{
|
|
$this->app->YUI->SortListEvent("copy","bestellung_position","bestellung");
|
|
$this->BestellungPositionen();
|
|
}
|
|
|
|
function DelBestellungPosition()
|
|
{
|
|
$this->app->YUI->SortListEvent("del","bestellung_position","bestellung");
|
|
$this->BestellungPositionen();
|
|
}
|
|
|
|
function UpBestellungPosition()
|
|
{
|
|
$this->app->YUI->SortListEvent("up","bestellung_position","bestellung");
|
|
$this->BestellungPositionen();
|
|
}
|
|
|
|
function DownBestellungPosition()
|
|
{
|
|
$this->app->YUI->SortListEvent("down","bestellung_position","bestellung");
|
|
$this->BestellungPositionen();
|
|
}
|
|
|
|
|
|
function BestellungPositionenEditPopup()
|
|
{
|
|
$id = $this->app->Secure->GetGET("id");
|
|
|
|
// nach page inhalt des dialogs ausgeben
|
|
$filename = "widgets/widget.bestellung_position_custom.php";
|
|
if(is_file($filename))
|
|
{
|
|
include_once($filename);
|
|
$widget = new WidgetBestellung_positionCustom($this->app,'PAGE');
|
|
} else {
|
|
$widget = new WidgetBestellung_position($this->app,'PAGE');
|
|
}
|
|
|
|
$sid= $this->app->DB->Select("SELECT bestellung FROM bestellung_position WHERE id='$id' LIMIT 1");
|
|
$widget->form->SpecialActionAfterExecute("close_refresh",
|
|
"index.php?module=bestellung&action=positionen&id=$sid");
|
|
$widget->Edit();
|
|
$this->app->BuildNavigation=false;
|
|
}
|
|
|
|
|
|
|
|
function BestellungIconMenu($id,$prefix="")
|
|
{
|
|
$supplierOrder = $this->app->DB->SelectRow("SELECT status, belegnr FROM bestellung WHERE id='$id' LIMIT 1");
|
|
$status = $supplierOrder['status'];
|
|
$belegnr = $supplierOrder['belegnr'];
|
|
$freigegeben = '';
|
|
if($status=="angelegt" || $status=="")
|
|
$freigabe = "<option value=\"freigabe\">Bestellung freigeben</option>";
|
|
|
|
if($status!="angelegt" && $status!="abgeschlossen")
|
|
$abschliessen = "<option value=\"abschliessen\">Bestellung abschliessen</option>";
|
|
|
|
$einlagern = '';
|
|
|
|
if(($status === 'versendet' || $status === 'freigegeben')
|
|
&& $this->app->erp->RechteVorhanden("bestellung", "einlagern")
|
|
&& $this->app->DB->Select("SELECT id FROM bestellung_position WHERE bestellung = '$id' AND geliefert < menge LIMIT 1")) {
|
|
$standardlager = $this->app->DB->Select("SELECT kurzbezeichnung FROM lager_platz WHERE geloescht <> 1 AND sperrlager <> 1 AND poslager <> 1 ORDER BY id LIMIT 1");
|
|
$nichtlager = $this->app->DB->Select("SELECT art.id FROM bestellung_position bp INNER JOIN artikel art ON bp.artikel = art.id WHERE bp.bestellung = '$id' AND art.porto <> 1 AND lagerartikel <> 1 AND stueckliste <> 1 LIMIT 1");
|
|
if($nichtlager) {
|
|
$standardlager .= ' (Achtung Es gibt Positionen die keine Lagerartikel sind, diese werden nicht eingelagert)';
|
|
}
|
|
$einlagern = '<option value="einlagern">Bestellung einlagern</option>';
|
|
}
|
|
|
|
if($status === 'abgeschlossen') {
|
|
$freigegeben = "<option value=\"freigegeben\">als freigegeben markieren</option>";
|
|
}
|
|
if($status === 'abgeschlossen' || $status=="freigegeben")
|
|
$alsversendet = "<option value=\"alsversendet\">als versendet markieren</option>";
|
|
|
|
|
|
|
|
if($status=="storniert")
|
|
$storno = "<option value=\"unstorno\">Bestellung Storno rückgängig</option>";
|
|
else if($status!="storniert")
|
|
$storno = "<option value=\"storno\">Bestellung stornieren</option>";
|
|
|
|
if($this->app->erp->RechteVorhanden('belegeimport', 'belegcsvexport'))
|
|
{
|
|
$casebelegeimport = "case 'belegeimport': window.location.href='index.php?module=belegeimport&action=belegcsvexport&cmd=bestellung&id=%value%'; break;";
|
|
$optionbelegeimport = "<option value=\"belegeimport\">Export als CSV</option>";
|
|
}
|
|
|
|
|
|
$hookoption = '';
|
|
$hookcase = '';
|
|
$this->app->erp->RunHook("Bestellung_Aktion_option",3, $id, $status, $hookoption);
|
|
$this->app->erp->RunHook("Bestellung_Aktion_case",3, $id, $status, $hookcase);
|
|
$abschliessentext = '{|Wirklich abschliessen?|}';
|
|
if($this->app->DB->Select("SELECT id FROM bestellung_position WHERE bestellung = '$id' AND mengemanuellgeliefertaktiviert = 0 AND geliefert < menge LIMIT 1"))
|
|
$abschliessentext = "{|Zu dieser Bestellung gibt es noch offene Postitionen, möchten Sie diese wirklich als abgeschlossen markieren? Eine Warenannahme ist dann nicht mehr möglich für diese Bestellung.|}";
|
|
$menu ="
|
|
|
|
<script type=\"text/javascript\">
|
|
function onchangebestellung(cmd)
|
|
{
|
|
switch(cmd)
|
|
{
|
|
case 'storno': if(!confirm('Wirklich stornieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=delete&id=%value%'; break;
|
|
case 'unstorno': if(!confirm('Wirklich stornierte Bestellung wieder freigeben?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=undelete&id=%value%'; break;
|
|
case 'copy': if(!confirm('Wirklich kopieren?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=copy&id=%value%'; break;
|
|
case 'pdf': window.location.href='index.php?module=bestellung&action=pdf&id=%value%'; document.getElementById('aktion$prefix').selectedIndex = 0; break;
|
|
case 'abschicken': ".$this->app->erp->DokumentAbschickenPopup()." break;
|
|
case 'freigabe': window.location.href='index.php?module=bestellung&action=freigabe&id=%value%'; break;
|
|
case 'alsversendet': window.location.href='index.php?module=bestellung&action=alsversendet&id=%value%'; break;
|
|
case 'freigegeben': if(!confirm('Wirklich auf freigegeben setzen?')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=freigegeben&id=%value%'; break;
|
|
case 'abschliessen': if(!confirm('$abschliessentext')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=abschliessen&id=%value%'; break;
|
|
case 'einlagern': if(!confirm('Wirklich einlagern? Die Artikel werden in den voreingestellten Lagerplätzen eingelagert andersfalls in das Lager $standardlager')) return document.getElementById('aktion$prefix').selectedIndex = 0; else window.location.href='index.php?module=bestellung&action=einlagern&id=%value%'; break;
|
|
$hookcase
|
|
$casebelegeimport
|
|
}
|
|
|
|
}
|
|
</script>
|
|
|
|
Aktion: <select id=\"aktion$prefix\" onchange=\"onchangebestellung(this.value);\">
|
|
<option>bitte wählen ...</option>
|
|
$storno
|
|
<option value=\"copy\">Bestellung kopieren</option>
|
|
<option value=\"abschicken\">Bestellung abschicken</option>
|
|
$freigabe
|
|
$alsversendet
|
|
$freigegeben
|
|
$abschliessen
|
|
$einlagern
|
|
$hookoption
|
|
$optionbelegeimport
|
|
<option value=\"pdf\">PDF öffnen</option>
|
|
</select>
|
|
|
|
<a href=\"index.php?module=bestellung&action=pdf&id=%value%\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a>
|
|
<!-- <a href=\"index.php?module=bestellung&action=edit&id=%value%\"><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=bestellung&action=delete&id=%value%';\">
|
|
<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=bestellung&action=copy&id=%value%';\">
|
|
<img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>
|
|
<a onclick=\"if(!confirm('Wirklich Auftrag abschicken?')) return false; else window.location.href='index.php?module=bestellung&action=abschicken&id=%value%';\">
|
|
<img src=\"./themes/new/images/lieferung.png\" border=\"0\" alt=\"Auftrag abeschicken\"></a>-->";
|
|
|
|
//$tracking = $this->AuftragTrackingTabelle($id);
|
|
|
|
$menu = str_replace('%value%',$id,$menu);
|
|
return $menu;
|
|
}
|
|
|
|
function BestellungEdit()
|
|
{
|
|
//$action = $this->app->Secure->GetGET("action");
|
|
$id = $this->app->Secure->GetGET("id");
|
|
$this->app->erp->BestellungNeuberechnen($id);
|
|
$cmd = $this->app->Secure->GetGET('cmd');
|
|
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 '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($this->app->erp->DisableModul("bestellung",$id))
|
|
{
|
|
//$this->app->erp->MenuEintrag("index.php?module=auftrag&action=list","Zurück zur Übersicht");
|
|
$this->BestellungMenu();
|
|
return;
|
|
}
|
|
$this->app->YUI->AARLGPositionen();
|
|
|
|
//$storno = $this->app->Secure->GetGET("storno");
|
|
|
|
$speichern = $this->app->Secure->GetPOST("speichern");
|
|
$verbindlichkeiteninfo = $this->app->Secure->GetPOST("verbindlichkeiteninfo");
|
|
|
|
if($verbindlichkeiteninfo!="" && $speichern!="" && $id > 0)
|
|
$this->app->DB->Update("UPDATE bestellung SET verbindlichkeiteninfo='$verbindlichkeiteninfo' WHERE id='$id' LIMIT 1");
|
|
|
|
//$this->BestellungMiniDetail(MINIDETAIL,false);
|
|
$arr = $this->app->DB->SelectArr(
|
|
"SELECT b.belegnr, b.adresse, b.status, b.schreibschutz, b.langeartikelnummern, b.zuarchivieren
|
|
FROM `bestellung` AS `b`
|
|
WHERE b.id = '$id' LIMIT 1"
|
|
);
|
|
if($arr){
|
|
$arr = reset($arr);
|
|
$belegnr = $arr['belegnr'];
|
|
$nummer = $arr['belegnr'];
|
|
$adresse = $arr['adresse'];
|
|
$status = $arr['status'];
|
|
$schreibschutz = $arr['schreibschutz'];
|
|
$zuArchivieren = $arr['zuarchivieren'];
|
|
$lieferantennummer = $this->app->DB->Select("SELECT lieferantennummer FROM adresse WHERE id='$adresse' LIMIT 1");
|
|
}
|
|
|
|
if($id > 0 && $zuArchivieren == 1 && $schreibschutz == 1) {
|
|
$this->app->erp->PDFArchivieren('bestellung', $id, true);
|
|
}
|
|
|
|
if($status !== "angelegt" && $status !== "angelegta" && $status !== "a")
|
|
{
|
|
/*
|
|
$laenge = $this->app->DB->SelectArr("SELECT LENGTH(bestellnummer) as length,bestellnummer FROM bestellung_position WHERE bestellung='$id' ORDER by length DESC");
|
|
$pdf=new FPDFWAWISION();
|
|
$pdf->SetFontClassic($this->app->erp->Firmendaten("schriftart"),'',$this->app->erp->Firmendaten("tabellenhinhalt"));
|
|
$laengepdf = $pdf->GetStringWidth($laenge[0]['bestellnummer']);
|
|
if(floor($laengepdf) > $this->app->erp->Firmendaten("breite_nummer")+11 && $arr['langeartikelnummern']!="1")
|
|
{
|
|
$this->app->Tpl->Add('MESSAGE',"<div class=\"error\">Eventuell ist die Artikelnummer zu lang. Sie können die Funktion \"Lange Artikelnummer\" weiter unten aktivieren.</div>");
|
|
}
|
|
*/
|
|
$Brief = new Briefpapier($this->app);
|
|
if($Brief->zuArchivieren($id, "bestellung"))
|
|
{
|
|
$this->app->Tpl->Add('MESSAGE',"<div class=\"error\">Die Bestellung 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=bestellung&action=archivierepdf&id=$id';\" value=\"Manuell archivieren\" /> <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('bestellung',$id)\"></div>");
|
|
}elseif(!$this->app->DB->Select("SELECT versendet FROM bestellung WHERE id = '$id' LIMIT 1"))
|
|
{
|
|
|
|
$this->app->Tpl->Add('MESSAGE',"<div class=\"error\">Die Bestellung wurde noch nicht versendet! <input type=\"button\" value=\"Dokument versenden\" onclick=\"DokumentAbschicken('bestellung',$id)\"></div>");
|
|
}
|
|
}
|
|
|
|
if($schreibschutz!="1")// && $this->app->erp->RechteVorhanden("bestellung","schreibschutz")) {
|
|
{
|
|
$this->app->erp->AnsprechpartnerButton($adresse);
|
|
$this->app->erp->LieferadresseButton($adresse);
|
|
$this->app->erp->AnsprechpartnerAlsLieferadresseButton($adresse);
|
|
$this->app->erp->AdresseAlsLieferadresseButton($adresse);
|
|
}
|
|
|
|
|
|
$this->app->Tpl->Set('ICONMENU',$this->BestellungIconMenu($id));
|
|
$this->app->Tpl->Set('ICONMENU2',$this->BestellungIconMenu($id,2));
|
|
|
|
if($nummer!="")
|
|
{
|
|
$this->app->Tpl->Set('NUMMER',$nummer);
|
|
if($this->app->erp->RechteVorhanden("adresse","edit"))
|
|
$this->app->Tpl->Set('LIEFERANT'," Lf-Nr. <a href=\"index.php?module=adresse&action=edit&id=$adresse\" target=\"_blank\">".$lieferantennummer."</a>");
|
|
else
|
|
$this->app->Tpl->Set('LIEFERANT'," Lf-Nr. ".$lieferantennummer);
|
|
}
|
|
|
|
$check = $this->app->DB->SelectArr("SELECT a.belegnr, a.id, a.name
|
|
FROM bestellung_position bp
|
|
INNER JOIN auftrag_position ap ON ap.id = bp.auftrag_position_id
|
|
INNER JOIN auftrag a ON ap.auftrag = a.id
|
|
WHERE bp.bestellung='$id' GROUP BY a.belegnr, a.id ORDER BY a.belegnr, a.id");
|
|
if($check)
|
|
{
|
|
$this->app->Tpl->Add('MESSAGE',"<div class=\"info\">Zu dieser Bestellung gehör".((!empty($check)?count($check):0) == 1?'t der Auftrag':'en die Aufträge:'));
|
|
foreach($check as $row)
|
|
{
|
|
$this->app->Tpl->Add('MESSAGE',' <a href="index.php?module=auftrag&action=edit&id='.$row['id'].'" target="_blank"><input type="button" value="'.($row['belegnr']?$row['belegnr']:'Entwurf')." (".$row['name'].')" /></a>');
|
|
}
|
|
$this->app->Tpl->Add('MESSAGE',"</div>");
|
|
}
|
|
|
|
if($this->app->Secure->GetPOST("speichern")!="")
|
|
{
|
|
$abweichenderechnungsadresse = $this->app->Secure->GetPOST("abweichenderechnungsadresse");
|
|
$abweichendelieferadresse = $this->app->Secure->GetPOST("abweichendelieferadresse");
|
|
} else {
|
|
$abweichenderechnungsadresse = $this->app->DB->Select("SELECT abweichende_rechnungsadresse FROM adresse WHERE id='$adresse' LIMIT 1");
|
|
$abweichendelieferadresse = $this->app->DB->Select("SELECT abweichendelieferadresse FROM bestellung WHERE id='$id' LIMIT 1");
|
|
}
|
|
if($abweichenderechnungsadresse) $this->app->Tpl->Set('RECHNUNGSADRESSE',"visible"); else $this->app->Tpl->Set('RECHNUNGSADRESSE',"none");
|
|
if($abweichendelieferadresse) $this->app->Tpl->Set('LIEFERADRESSE',"visible"); else $this->app->Tpl->Set('LIEFERADRESSE',"none");
|
|
|
|
if($belegnr=="" || $belegnr=="0")
|
|
{
|
|
$this->app->Tpl->Set('LOESCHEN',"<input type=\"button\" value=\"Abbrechen\" onclick=\"if(!confirm('Wirklich löschen?')) return false; else window.location.href='index.php?module=bestellung&action=delete&id=$id';\">");
|
|
}
|
|
$status= $this->app->DB->Select("SELECT status FROM bestellung WHERE id='$id' LIMIT 1");
|
|
if($status=="")
|
|
$this->app->DB->Update("UPDATE bestellung SET status='angelegt' WHERE id='$id' LIMIT 1");
|
|
|
|
if($schreibschutz=="1" && $this->app->erp->RechteVorhanden("bestellung","schreibschutz"))
|
|
{
|
|
$this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Diese Bestellung ist schreibgeschützt und darf daher nicht mehr bearbeitet werden! <input type=\"button\" value=\"Schreibschutz entfernen\" onclick=\"if(!confirm('Soll der Schreibschutz für diese Bestellung wirklich entfernt werden?')) return false;else window.location.href='index.php?module=bestellung&action=schreibschutz&id=$id';\"></div>");
|
|
// $this->app->erp->CommonReadonly();
|
|
}
|
|
if($schreibschutz=="1")
|
|
{
|
|
|
|
$this->app->erp->RemoveReadonly("bestellung_bestaetigt");
|
|
$this->app->erp->RemoveReadonly("bestaetigteslieferdatum");
|
|
$this->app->erp->RemoveReadonly("bestellungbestaetigtabnummer");
|
|
$this->app->erp->RemoveReadonly("bestellungbestaetigtper");
|
|
|
|
$speichern = $this->app->Secure->GetPOST("speichern");
|
|
if($speichern!="")
|
|
{
|
|
$bestellung_bestaetigt = $this->app->Secure->GetPOST("bestellung_bestaetigt");
|
|
$bestaetigteslieferdatum = $this->app->Secure->GetPOST("bestaetigteslieferdatum");
|
|
$bestellungbestaetigtabnummer = $this->app->Secure->GetPOST("bestellungbestaetigtabnummer");
|
|
$bestellungbestaetigtper = $this->app->Secure->GetPOST("bestellungbestaetigtper");
|
|
|
|
if($bestellung_bestaetigt!="1") $bestellung_bestaetigt="0";
|
|
|
|
$bestaetigteslieferdatum = $this->app->String->Convert($bestaetigteslieferdatum,"%1.%2.%3","%3-%2-%1");
|
|
|
|
$this->app->DB->Update("UPDATE bestellung SET bestellung_bestaetigt='$bestellung_bestaetigt',bestaetigteslieferdatum='$bestaetigteslieferdatum',
|
|
bestellungbestaetigtabnummer='$bestellungbestaetigtabnummer',bestellungbestaetigtper='$bestellungbestaetigtper' WHERE id='$id' LIMIT 1");
|
|
|
|
// alle positonen ebenso anpassen
|
|
$this->app->DB->Update("UPDATE bestellung_position SET lieferdatum='$bestaetigteslieferdatum' WHERE bestellung='$id' AND lieferdatum='0000-00-00'");
|
|
}
|
|
$this->app->erp->CommonReadonly();
|
|
} else {
|
|
$portofreilieferant_aktiv = $this->app->DB->Select("SELECT portofreilieferant_aktiv FROM adresse WHERE id='$adresse' LIMIT 1");
|
|
$portofreiablieferant = $this->app->DB->Select("SELECT portofreiablieferant FROM adresse WHERE id='$adresse' LIMIT 1");
|
|
$gesamtsumme = $this->app->erp->BEGesamtsummeOhnePorto($id,"bestellung");
|
|
if($portofreilieferant_aktiv == 1 && $portofreiablieferant > 0 && $gesamtsumme <= $portofreiablieferant)
|
|
{
|
|
$this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Die Lieferung wird ab ".number_format($portofreiablieferant,2,',','.')." EUR (netto) Portofrei.
|
|
Aktuell sind nur ".number_format($gesamtsumme,2,',','.')." EUR (netto) in der Bestellung.</div>");
|
|
}
|
|
}
|
|
|
|
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">
|
|
');
|
|
}else{
|
|
$this->app->Tpl->Set('BUTTON_UEBERNEHMEN', '
|
|
<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(\'uebernehmen\').value=1; document.getElementById(\'eprooform\').submit();"/><input type="hidden" id="uebernehmen" name="uebernehmen" value="0">
|
|
');
|
|
}
|
|
}
|
|
|
|
// immer wenn sich der lieferant genändert hat standartwerte setzen
|
|
if($this->app->Secure->GetPOST("adresse")!="")
|
|
{
|
|
$tmp = $this->app->Secure->GetPOST("adresse");
|
|
$lieferantennummer = $this->app->erp->FirstTillSpace($tmp);
|
|
|
|
//$name = substr($tmp,6);
|
|
|
|
$filter_projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id = '$id' LIMIT 1");
|
|
//if($filter_projekt)$filter_projekt = $this->app->DB->Select("SELECT id FROM projekt WHERE id= '$filter_projekt' and eigenernummernkreis = 1 LIMIT 1");
|
|
$adresse = $this->app->DB->Select("SELECT a.id FROM adresse a
|
|
LEFT JOIN adresse_rolle ar ON a.id = ar.adresse AND ar.projekt > 0 ".$this->app->erp->ProjektRechte("ar.projekt")."
|
|
WHERE a.lieferantennummer='$lieferantennummer' AND a.geloescht=0 AND
|
|
(1 ".$this->app->erp->ProjektRechte("a.projekt")." OR not isnull(ar.id))
|
|
ORDER by ".($filter_projekt?" a.projekt = '$filter_projekt' DESC, ":"")." a.projekt LIMIT 1");
|
|
|
|
$uebernehmen =$this->app->Secure->GetPOST("uebernehmen");
|
|
if($schreibschutz != '1' && $uebernehmen=="1" && $adresse > 0) // nur neuladen bei tastendruck auf uebernehmen // FRAGEN!!!!
|
|
{
|
|
$this->app->erp->LoadBestellungStandardwerte($id,$adresse);
|
|
$this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
$table = new EasyTable($this->app);
|
|
$table->Query("SELECT a.bezeichnung as artikel, a.nummer as Nummer, b.menge, b.vpe as VPE, FORMAT(b.preis,4) as preis
|
|
FROM bestellung_position b LEFT JOIN artikel a ON a.id=b.artikel
|
|
WHERE b.bestellung='$id'");
|
|
$table->DisplayNew(POSITIONEN,"Preis","noAction");
|
|
*/
|
|
$arr = $this->app->DB->SelectArr("SELECT bearbeiter, belegnr, status, zahlungsweise,abweichendelieferadresse FROM bestellung WHERE id = '$id' LIMIT 1");
|
|
if($arr){
|
|
$arr = reset($arr);
|
|
$bearbeiter = $arr['bearbeiter'];
|
|
$status = $arr['status'];
|
|
$bestellung = $arr['belegnr'];
|
|
$zahlungsweise = $arr['zahlungsweise'];
|
|
$abweichendelieferadresse = $arr['abweichendelieferadresse'];
|
|
}
|
|
|
|
$this->app->Tpl->Set('BEARBEITER',"<input type=\"text\" value=\"".$this->app->erp->GetAdressName($bearbeiter)."\" readonly>");
|
|
|
|
$this->app->Tpl->Set('STATUS',"<input type=\"text\" size=\"30\" value=\"".$status."\" readonly [COMMONREADONLYINPUT]>");
|
|
|
|
if($bestellung!='') $bestellung="keine Nummer";
|
|
$this->app->Tpl->Set('ANGEBOT',"<input type=\"text\" value=\"".$bestellung."\" readonly>");
|
|
|
|
if($this->app->Secure->GetPOST("zahlungsweise")!="") $zahlungsweise = $this->app->Secure->GetPOST("zahlungsweise");
|
|
$zahlungsweise = strtolower($zahlungsweise);
|
|
$this->app->Tpl->Set('RECHNUNG',"none");
|
|
$this->app->Tpl->Set('KREDITKARTE',"none");
|
|
$this->app->Tpl->Set('VORKASSE',"none");
|
|
$this->app->Tpl->Set('PAYPAL',"none");
|
|
$this->app->Tpl->Set('EINZUGSERMAECHTIGUNG',"none");
|
|
if($zahlungsweise=="rechnung") $this->app->Tpl->Set('RECHNUNG',"");
|
|
if($zahlungsweise=="paypal") $this->app->Tpl->Set('PAYPAL',"");
|
|
if($zahlungsweise=="kreditkarte") $this->app->Tpl->Set('KREDITKARTE',"");
|
|
if($zahlungsweise=="einzugsermaechtigung" || $zahlungsweise=="lastschrift") $this->app->Tpl->Set('EINZUGSERMAECHTIGUNG',"");
|
|
if($zahlungsweise=="vorkasse" || $zahlungsweise=="kreditkarte" || $zahlungsweise=="paypal" || $zahlungsweise=="bar") $this->app->Tpl->Set('VORKASSE',"");
|
|
|
|
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',"");
|
|
|
|
$this->app->Tpl->Set('AKTIV_TAB1',"selected");
|
|
parent::BestellungEdit();
|
|
|
|
$this->app->erp->MessageHandlerStandardForm();
|
|
/*
|
|
if($this->app->Secure->GetPOST("speichern")!="" && $storno=="")
|
|
{
|
|
if($this->app->Secure->GetGET("msg")=="")
|
|
{
|
|
$msg = $this->app->Tpl->Get(MESSAGE);
|
|
$msg = $this->app->erp->base64_url_encode($msg);
|
|
} else {
|
|
$msg = $this->app->erp->base64_url_encode($msg);
|
|
}
|
|
|
|
header("Location: index.php?module=bestellung&action=edit&id=$id&msg=$msg");
|
|
exit;
|
|
|
|
}
|
|
*/
|
|
|
|
/*
|
|
$summe = $this->app->DB->Select("SELECT SUM(menge*preis) FROM bestellung_position
|
|
WHERE bestellung='$id'");
|
|
|
|
$waehrung = $this->app->DB->Select("SELECT waehrung FROM bestellung_position
|
|
WHERE bestellung='$id' LIMIT 1");
|
|
|
|
$ust_befreit_check = $this->app->DB->Select("SELECT ust_befreit FROM bestellung WHERE id='$id' LIMIT 1");
|
|
$summebrutto = $summe *1.19;
|
|
|
|
if($ust_befreit_check==0)
|
|
$tmp = "Kunde zahlt mit UST";
|
|
else if($ust_befreit_check==1)
|
|
$tmp = "Kunde ist UST befreit";
|
|
else
|
|
$tmp = "Kunde zahlt keine UST";
|
|
|
|
|
|
if($summe > 0)
|
|
$this->app->Tpl->Add(POSITIONEN, "<br><center>Zu zahlen: <b>$summe (netto) $summebrutto (brutto) $waehrung</b> ($tmp) ");
|
|
|
|
*/
|
|
if($this->app->Secure->GetPOST('weiter')!='')
|
|
{
|
|
$this->app->Location->execute('index.php?module=bestellung&action=positionen&id='.$id);
|
|
}
|
|
$this->BestellungMenu();
|
|
|
|
}
|
|
|
|
function BestellungCreate()
|
|
{
|
|
//$this->app->Tpl->Add(TABS,"<li><h2>Bestellung</h2></li>");
|
|
$this->app->erp->Headlines('Bestellung anlegen');
|
|
$this->app->erp->MenuEintrag("index.php?module=bestellung&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=bestellung&action=create&anlegen=1');
|
|
}
|
|
|
|
if($anlegen != "")
|
|
{
|
|
$id = $this->app->erp->CreateBestellung();
|
|
$this->app->erp->BestellungProtokoll($id,"Bestellung angelegt");
|
|
|
|
|
|
$this->app->Location->execute('index.php?module=bestellung&action=edit&id='.$id);
|
|
}
|
|
$this->app->Tpl->Add('MESSAGE',"<div class=\"warning\">Möchten Sie eine Bestellung jetzt anlegen?
|
|
<input type=\"button\" onclick=\"window.location.href='index.php?module=bestellung&action=create&anlegen=1'\" value=\"Ja - Bestellung 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\">Bestellungen in Bearbeitung</b>
|
|
<br>
|
|
<br>
|
|
Offene Bestellunge, die durch andere Mitarbeiter in Bearbeitung sind.
|
|
<br>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
<br>
|
|
[ANGEBOTE]");
|
|
|
|
|
|
$this->app->Tpl->Set('AKTIV_TAB1',"selected");
|
|
|
|
$this->app->YUI->TableSearch('ANGEBOTE',"bestellungeninbearbeitung");
|
|
/*
|
|
$table = new EasyTable($this->app);
|
|
$table->Query("SELECT DATE_FORMAT(datum,'%d.%m.%y') as vom, if(belegnr,belegnr,'ohne Nummer') as beleg, name, status, id
|
|
FROM bestellung WHERE status='angelegt' order by datum DESC, id DESC");
|
|
$table->DisplayNew(ANGEBOTE, "<a href=\"index.php?module=bestellung&action=edit&id=%value%\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a>
|
|
<a onclick=\"if(!confirm('Wirklich löschen?')) return false; else window.location.href='index.php?module=bestellung&action=delete&id=%value%';\">
|
|
<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=bestellung&action=copy&id=%value%';\">
|
|
<img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>
|
|
");
|
|
*/
|
|
|
|
$this->app->Tpl->Set('TABTEXT',"Bestellung anlegen");
|
|
$this->app->Tpl->Parse('PAGE',"tabview.tpl");
|
|
//parent::BestellungCreate();
|
|
}
|
|
|
|
function BestellungListMenu()
|
|
{
|
|
$backurl = $this->app->Secure->GetGET("backurl");
|
|
$backurl = $this->app->erp->base64_url_decode($backurl);
|
|
|
|
//$this->app->Tpl->Add(TABS,"<li><h2 class=\"allgemein\" style=\"background-color: [FARBE2]\">Allgemein</h2></li>");
|
|
$this->app->erp->MenuEintrag("index.php?module=bestellung&action=list","Übersicht");
|
|
$this->app->erp->MenuEintrag("index.php?module=bestellung&action=create","Neue Bestellung anlegen");
|
|
$this->app->erp->MenuEintrag("index.php?module=bestellung&action=offenepositionen","Offene Positionen");
|
|
//$this->app->erp->MenuEintrag("index.php?module=bestellvorschlag&action=ausgehend","Bestellvorschlag");
|
|
|
|
if(strlen($backurl)>5){
|
|
$this->app->erp->MenuEintrag((string)$backurl, 'Zurück zur Übersicht');
|
|
}
|
|
else{
|
|
$this->app->erp->MenuEintrag('index.php', 'Zurück zur Übersicht');
|
|
}
|
|
}
|
|
|
|
|
|
function BestellungList()
|
|
{
|
|
// $this->app->Tpl->Set(UEBERSCHRIFT,"Bestellungssuche");
|
|
// $this->app->Tpl->Set(KURZUEBERSCHRIFT,"Bestellungssuche");
|
|
|
|
if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('bestellung', 'edit'))
|
|
{
|
|
$drucker = $this->app->Secure->GetPOST('seldrucker');
|
|
$aktion = $this->app->Secure->GetPOST('sel_aktion');
|
|
$auswahl = $this->app->Secure->GetPOST('auswahl');
|
|
|
|
if($drucker > 0) $this->app->erp->BriefpapierHintergrundDisable($drucker);
|
|
if(is_array($auswahl))
|
|
{
|
|
switch($aktion)
|
|
{
|
|
case 'mail':
|
|
foreach($auswahl as $v)
|
|
{
|
|
$v = (int)$v;
|
|
if($v){
|
|
$bestellungarr = $this->app->DB->SelectRow("SELECT email,adresse,projekt,name,sprache FROM bestellung WHERE id = '$v' LIMIT 1");
|
|
if(!empty($bestellungarr))
|
|
{
|
|
$email = (String)$bestellungarr['email'];//$this->app->DB->Select("SELECT email FROM auftrag WHERE id = '$v' LIMIT 1");
|
|
$adresse = $bestellungarr['adresse'];//$this->app->DB->Select("SELECT adresse FROM auftrag WHERE id = '$v' LIMIT 1");
|
|
$projekt = $bestellungarr['projekt'];//$this->app->DB->Select("SELECT projekt FROM auftrag WHERE id = '$v' LIMIT 1");
|
|
$name = $bestellungarr['name'];// $this->app->DB->Select("SELECT name FROM auftrag WHERE id = '$v' LIMIT 1");
|
|
$sprache = $bestellungarr['sprache'];// $this->app->DB->Select("SELECT sprache FROM auftrag WHERE id='$v' LIMIT 1");
|
|
}else{
|
|
$email = '';
|
|
$adresse = 0;
|
|
$projekt = 0;
|
|
$name = '';
|
|
$sprache = '';
|
|
}
|
|
|
|
if($sprache==''){
|
|
$sprache = $this->app->DB->Select("SELECT sprache FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
|
|
}
|
|
|
|
if($sprache=='') {
|
|
$sprache='de';
|
|
}
|
|
|
|
$emailtext = $this->app->erp->Geschaeftsbriefvorlage($sprache,'bestellung',$projekt,$name,$v);
|
|
|
|
if($email === '')
|
|
{
|
|
$email = (String)$this->app->DB->Select("SELECT email FROM adresse WHERE id = '$adresse' LIMIT 1");
|
|
}
|
|
if($email !== '')
|
|
{
|
|
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
|
|
if(class_exists('BestellungPDFCustom'))
|
|
{
|
|
$Brief = new BestellungPDFCustom($this->app,$projekt);
|
|
}else{
|
|
$Brief = new BestellungPDF($this->app,$projekt);
|
|
}
|
|
$Brief->GetBestellung($v);
|
|
$_tmpfile = $Brief->displayTMP();
|
|
$Brief->ArchiviereDocument();
|
|
unlink($_tmpfile);
|
|
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
|
|
if(class_exists('BestellungPDFCustom'))
|
|
{
|
|
$Brief = new BestellungPDFCustom($this->app,$projekt);
|
|
}else{
|
|
$Brief = new BestellungPDF($this->app,$projekt);
|
|
}
|
|
$Brief->GetBestellung($v);
|
|
$tmpfile = $Brief->displayTMP();
|
|
$Brief->ArchiviereDocument();
|
|
|
|
$fileid = $this->app->erp->CreateDatei($Brief->filename,'bestellung','','',$tmpfile,$this->app->User->GetName());
|
|
$this->app->erp->AddDateiStichwort($fileid,'bestellung','bestellung',$v);
|
|
$this->app->erp->DokumentSend($adresse,'bestellung', $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 ('','bestellung',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 bestellung 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->BestellungProtokoll($v,'Bestellung versendet');
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 'freigeben':
|
|
foreach($auswahl as $v)
|
|
{
|
|
$v = (int)$v;
|
|
if($v){
|
|
if($this->app->DB->Select("SELECT id FROM bestellung WHERE id = '$v' AND status <> 'storniert' LIMIT 1")){
|
|
$this->BestellungFreigegeben($v);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 'versendet':
|
|
foreach($auswahl as $v)
|
|
{
|
|
$v = (int)$v;
|
|
if($v) {
|
|
$projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$v' LIMIT 1");
|
|
if(class_exists('BestellungPDFCustom'))
|
|
{
|
|
$Brief = new BestellungPDFCustom($this->app,$projekt);
|
|
}else{
|
|
$Brief = new BestellungPDF($this->app,$projekt);
|
|
}
|
|
$Brief->GetBestellung($v);
|
|
$tmpfile = $Brief->displayTMP();
|
|
$Brief->ArchiviereDocument();
|
|
$this->app->erp->BestellungProtokoll($v,"Bestellung versendet");
|
|
$this->app->erp->closeInvoice($v);
|
|
$this->app->DB->Update("UPDATE bestellung SET schreibschutz=1, versendet = 1, status='versendet' WHERE id = '$v' LIMIT 1");
|
|
}
|
|
}
|
|
break;
|
|
case 'abgeschlossen':
|
|
foreach($auswahl as $v)
|
|
{
|
|
$v = (int)$v;
|
|
if($v){
|
|
if($this->app->DB->Select("SELECT id FROM bestellung WHERE id = '$v' AND status != 'angelegt' AND status != 'abgeschlossen' LIMIT 1")){
|
|
$this->BestellungAbschliessen($v);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 'drucken':
|
|
if($drucker)
|
|
{
|
|
foreach($auswahl as $v)
|
|
{
|
|
$v = (int)$v;
|
|
if($v){
|
|
$bestellungsdaten = $this->app->DB->Select("SELECT projekt, adresse FROM bestellung WHERE id='$v' LIMIT 1");
|
|
$projekt = $bestellungsdaten['projekt'];
|
|
$adressId = $bestellungsdaten['adresse'];
|
|
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
|
|
if(class_exists('BestellungPDFCustom'))
|
|
{
|
|
$Brief = new BestellungPDFCustom($this->app,$projekt);
|
|
}else{
|
|
$Brief = new BestellungPDF($this->app,$projekt);
|
|
}
|
|
$Brief->GetBestellung($v);
|
|
$_tmpfile = $Brief->displayTMP();
|
|
$Brief->ArchiviereDocument();
|
|
unlink($_tmpfile);
|
|
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
|
|
if(class_exists('BestellungPDFCustom'))
|
|
{
|
|
$Brief = new BestellungPDFCustom($this->app,$projekt);
|
|
}else{
|
|
$Brief = new BestellungPDF($this->app,$projekt);
|
|
}
|
|
$Brief->GetBestellung($v);
|
|
$tmpfile = $Brief->displayTMP();
|
|
$Brief->ArchiviereDocument();
|
|
$this->app->printer->Drucken($drucker,$tmpfile);
|
|
$doctype = 'bestellung';
|
|
$this->app->erp->RunHook('dokumentsend_ende', 5, $doctype, $v, $projekt, $adressId, $aktion);
|
|
$this->app->erp->BestellungProtokoll($v,"Bestellung versendet");
|
|
unlink($tmpfile);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 'pdf':
|
|
foreach($auswahl as $v)
|
|
{
|
|
$v = (int)$v;
|
|
if($v){
|
|
$projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$v' LIMIT 1");
|
|
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
|
|
if(class_exists('BestellungPDFCustom'))
|
|
{
|
|
$Brief = new BestellungPDFCustom($this->app,$projekt);
|
|
}else{
|
|
$Brief = new BestellungPDF($this->app,$projekt);
|
|
}
|
|
$Brief->GetBestellung($v);
|
|
$_tmpfile = $Brief->displayTMP();
|
|
$Brief->ArchiviereDocument();
|
|
unlink($_tmpfile);
|
|
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
|
|
if(class_exists('BestellungPDFCustom'))
|
|
{
|
|
$Brief = new BestellungPDFCustom($this->app,$projekt);
|
|
}else{
|
|
$Brief = new BestellungPDF($this->app,$projekt);
|
|
}
|
|
$Brief->GetBestellung($v);
|
|
$tmpfile[] = $Brief->displayTMP();
|
|
//$Brief->ArchiviereDocument();
|
|
}
|
|
}
|
|
|
|
if((!empty($tmpfile)?count($tmpfile):0) > 0){
|
|
try {
|
|
/** @var 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 (PdfComponentExceptionInterface $exception) {
|
|
echo 'Fehler beim Generieren der Sammelpdf: ' . htmlspecialchars($exception->getMessage());
|
|
$this->app->ExitXentral();
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
$speichern = $this->app->Secure->GetPOST("speichern");
|
|
$verbindlichkeiteninfo = $this->app->Secure->GetPOST("verbindlichkeiteninfo");
|
|
$bestellungid = $this->app->Secure->GetPOST("bestellungid");
|
|
|
|
if($this->app->erp->Firmendaten("bestellungabschliessen"))
|
|
{
|
|
$offene = $this->app->DB->SelectArr("SELECT id FROM bestellung WHERE status='freigegeben' OR status='versendet'");
|
|
foreach($offene as $order)
|
|
{
|
|
$this->checkAbschliessen($order['id']);
|
|
}
|
|
}
|
|
|
|
if($verbindlichkeiteninfo!="" && $speichern!="" && $bestellungid > 0)
|
|
$this->app->DB->Update("UPDATE bestellung SET verbindlichkeiteninfo='$verbindlichkeiteninfo' WHERE id='$bestellungid' LIMIT 1");
|
|
|
|
$this->BestellungListMenu();
|
|
|
|
$zahlungsweisen = $this->app->DB->SelectArr('
|
|
SELECT
|
|
zahlungsweise
|
|
FROM
|
|
bestellung
|
|
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
|
|
bestellung
|
|
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
|
|
bestellung
|
|
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->Tpl->Set('AKTIV_TAB1',"selected");
|
|
$this->app->Tpl->Set('INHALT',"");
|
|
|
|
// $this->app->Tpl->Add(STATUS,$statusStr);
|
|
// $this->app->Tpl->Add(VERSANDARTEN,$versandartenStr);
|
|
|
|
$this->app->YUI->DatePicker("datumVon");
|
|
$this->app->YUI->DatePicker("datumBis");
|
|
$this->app->YUI->AutoComplete("projekt", "projektname", 1);
|
|
$this->app->YUI->AutoComplete("lieferantennummer", "lieferant", 1);
|
|
$this->app->YUI->AutoComplete("artikel", "artikelnummer", 1);
|
|
$this->app->YUI->AutoComplete("bestellungnummer", "bestellung", 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',"bestellung_table_filter.tpl");
|
|
|
|
$this->app->YUI->TableSearch('TAB1',"bestellungen");
|
|
$this->app->YUI->TableSearch('TAB2',"bestellungeninbearbeitung");
|
|
|
|
$this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));
|
|
|
|
$this->app->Tpl->Parse('PAGE',"bestellunguebersicht.tpl");
|
|
|
|
return;
|
|
|
|
/*
|
|
// suche
|
|
$sql = $this->app->erp->BestellungSuche();
|
|
|
|
// offene Bestellungen
|
|
$this->app->Tpl->Set(SUBSUBHEADING,"Offene Bestellunge");
|
|
|
|
$table = new EasyTable($this->app);
|
|
$table->Query($sql,$_SESSION[bestellungtreffer]);
|
|
|
|
//$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Bestellung, a.name, p.abkuerzung as projekt, a.id
|
|
// FROM bestellung a, projekt p WHERE (a.status='freigegeben' OR a.status='versendet') AND p.id=a.projekt order by a.datum DESC, a.id DESC",10);
|
|
|
|
|
|
$table->DisplayOwn(INHALT, "<a href=\"index.php?module=bestellung&action=edit&id=%value%\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a>
|
|
<a href=\"index.php?module=bestellung&action=pdf&id=%value%\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a>
|
|
<a onclick=\"if(!confirm('Wirklich kopieren?')) return false; else window.location.href='index.php?module=bestellung&action=copy&id=%value%';\">
|
|
<img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>
|
|
<a onclick=\"if(!confirm('Weiterfüfhren als Auftrag?')) return false; else window.location.href='index.php?module=bestellung&action=auftrag&id=%value%';\">
|
|
<img src=\"./themes/new/images/right.png\" border=\"0\"></a>
|
|
|
|
");
|
|
$this->app->Tpl->Parse(TAB1,"rahmen70.tpl");
|
|
|
|
$this->app->Tpl->Set(INHALT,"");
|
|
// wartende Bestellungen
|
|
|
|
$table = new EasyTable($this->app);
|
|
$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Bestellung, ad.lieferantennummer as kunde, a.name, p.abkuerzung as projekt, a.id
|
|
FROM bestellung a, projekt p, adresse ad WHERE (a.status='freigegeben' OR a.status='versendet') AND p.id=a.projekt AND a.adresse=ad.id order by a.datum DESC, a.id DESC");
|
|
$table->DisplayNew(INHALT, "<a href=\"index.php?module=bestellung&action=edit&id=%value%\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a>
|
|
<a href=\"index.php?module=bestellung&action=pdf&id=%value%\"><img border=\"0\" src=\"./themes/new/images/pdf.svg\"></a>
|
|
<a onclick=\"if(!confirm('Wirklich kopieren?')) return false; else window.location.href='index.php?module=bestellung&action=copy&id=%value%';\">
|
|
<img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>
|
|
");
|
|
$this->app->Tpl->Parse(TAB2,"rahmen70.tpl");
|
|
|
|
|
|
$this->app->Tpl->Set(INHALT,"");
|
|
// In Bearbeitung
|
|
$this->app->Tpl->Set(SUBSUBHEADING,"In Bearbeitung");
|
|
$table = new EasyTable($this->app);
|
|
$table->Query("SELECT DATE_FORMAT(datum,'%d.%m.%y') as vom, if(belegnr,belegnr,'ohne Nummer') as auftrag, name, vertrieb, status, id
|
|
FROM bestellung WHERE status='angelegt' order by datum DESC, id DESC");
|
|
$table->DisplayNew(INHALT, "<a href=\"index.php?module=bestellung&action=edit&id=%value%\"><img border=\"0\" src=\"./themes/new/images/edit.svg\"></a>
|
|
<a onclick=\"if(!confirm('Wirklich löschen?')) return false; else window.location.href='index.php?module=bestellung&action=delete&id=%value%';\">
|
|
<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=bestellung&action=copy&id=%value%';\">
|
|
<img src=\"./themes/new/images/copy.svg\" border=\"0\"></a>
|
|
");
|
|
|
|
$this->app->Tpl->Parse(TAB3,"rahmen70.tpl");
|
|
*/
|
|
|
|
|
|
/*
|
|
$this->app->Tpl->Set(TAB2,"lieferant, bestellung, waehrung, sprache, liefertermin, steuersatz, einkäufer, freigabe<br>
|
|
<br>Bestellung (NR),Bestellart (NB), Bestelldatum
|
|
<br>Projekt
|
|
<br>Kostenstelle pro Position
|
|
<br>Terminbestellung (am xx.xx.xxxx raus damit)
|
|
<br>vorschlagsdaten für positionen
|
|
<br>proposition reinklicken zum ändern und reihenfolge tabelle
|
|
<br>Bestellung muss werden wie bestellung (bestellung beschreibung = allgemein)
|
|
<br>Positionen (wie stueckliste)
|
|
<br>Wareneingang / Rückstand
|
|
<br>Etiketten
|
|
<br>Freigabe
|
|
<br>Dokument direkt faxen
|
|
");
|
|
*/
|
|
}
|
|
function BestellungRechnungsLieferadresse($auftragid)
|
|
{
|
|
$data = $this->app->DB->SelectArr("SELECT * FROM bestellung 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'];
|
|
|
|
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 = "keine abweichende Lieferadresse";
|
|
}
|
|
|
|
return "<table width=\"100%\">
|
|
<tr valign=\"top\"><td width=\"50%\"><b>Bestellt bei:</b><br><br>$rechnungsadresse<br></td></tr>
|
|
<tr><td><b>Lieferadresse:</b><br><br>$lieferadresse</td></tr></table>";
|
|
}
|
|
|
|
public function BestellungNeuberechnen($id)
|
|
{
|
|
$summeV = $this->app->DB->Select(
|
|
"SELECT IFNULL(SUM(menge*preis), 0)
|
|
FROM bestellung_position
|
|
WHERE umsatzsteuer!='ermaessigt' AND umsatzsteuer!='befreit' AND bestellung='$id' AND (isnull(steuersatz) OR steuersatz < 0)"
|
|
);
|
|
$summeR = $this->app->DB->Select("SELECT IFNULL(SUM(menge*preis), 0) FROM bestellung_position WHERE umsatzsteuer='ermaessigt' AND bestellung='$id' AND (isnull(steuersatz) OR steuersatz < 0)");
|
|
$summeS = (float)$this->app->DB->Select("SELECT
|
|
IFNULL(
|
|
SUM(menge*preis *
|
|
if(umsatzsteuer = 'befreit',
|
|
0,
|
|
IF(steuersatz < 0 OR isnull(steuersatz),0,steuersatz / 100)
|
|
)
|
|
)
|
|
,0)
|
|
FROM bestellung_position WHERE bestellung='$id' AND umsatzsteuer!='ermaessigt' AND umsatzsteuer!='normal'
|
|
AND ((steuersatz IS NOT NULL AND steuersatz >= 0) OR umsatzsteuer='befreit')");
|
|
|
|
$summeNetto = $this->app->DB->Select("SELECT IFNULL(SUM(menge*preis),0) FROM bestellung_position WHERE bestellung='$id'");
|
|
|
|
$ust_befreit = $this->app->DB->Select("SELECT ust_befreit FROM bestellung WHERE id='$id' LIMIT 1");
|
|
|
|
if($ust_befreit>0)
|
|
{
|
|
$rechnungsbetrag = $summeNetto;
|
|
} else {
|
|
$rechnungsbetrag = $summeNetto + ($summeV*$this->app->erp->GetSteuersatzNormal(true,$id,'bestellung')-$summeV)+ ($summeR*$this->app->erp->GetSteuersatzErmaessigt(true,$id,'bestellung')-$summeR)+$summeS;
|
|
}
|
|
$this->app->DB->Update("UPDATE bestellung SET gesamtsumme='$rechnungsbetrag' WHERE id='$id' LIMIT 1");
|
|
}
|
|
|
|
public function DeleteBestellung($id)
|
|
{
|
|
if($id <= 0)
|
|
{
|
|
return;
|
|
}
|
|
$belegnr = $this->app->DB->Select("SELECT belegnr FROM bestellung WHERE id='$id' LIMIT 1");
|
|
if($belegnr=='' || $belegnr=='0')
|
|
{
|
|
$this->app->DB->Delete("DELETE FROM bestellung_position WHERE bestellung='$id'");
|
|
$this->app->DB->Delete("DELETE FROM bestellung_protokoll WHERE bestellung='$id'");
|
|
$this->app->DB->Delete("DELETE FROM bestellung WHERE id='$id' LIMIT 1");
|
|
}
|
|
}
|
|
|
|
public function CreateBestellung($adresse='')
|
|
{
|
|
$projekt = $this->app->erp->GetCreateProjekt($adresse);
|
|
$belegmax = '';
|
|
$ohnebriefpapier = $this->app->erp->Firmendaten('bestellung_ohnebriefpapier');
|
|
$bestellungohnepreis = $this->app->erp->Firmendaten('bestellungohnepreis');
|
|
|
|
$eigenartikelnummer = $this->app->erp->Firmendaten('bestellungeigeneartikelnummer');
|
|
$bestellunglangeartikelnummern = $this->app->erp->Firmendaten('bestellunglangeartikelnummern');
|
|
|
|
$this->app->DB->Insert("INSERT INTO bestellung (datum,bearbeiter,firma,belegnr,adresse,status,artikelnummerninfotext,ohne_briefpapier,bestellungohnepreis,projekt,langeartikelnummern)
|
|
VALUES (NOW(),'".$this->app->User->GetName()."','".$this->app->User->GetFirma()."','$belegmax','$adresse','angelegt',".($eigenartikelnummer?'1':'0').",'".$ohnebriefpapier."','".$bestellungohnepreis."','".$projekt."',".($bestellunglangeartikelnummern?'1':'0').')');
|
|
$id = $this->app->DB->GetInsertID();
|
|
|
|
$this->app->erp->ObjektProtokoll('bestellung',$id,'bestellung_create','Bestellung angelegt');
|
|
$this->app->erp->SchnellFreigabe('bestellung',$id);
|
|
|
|
$this->app->erp->LoadSteuersaetzeWaehrung($id,'bestellung');
|
|
$this->app->erp->EventAPIAdd('EventBestellungCreate',$id,'bestellung','create');
|
|
return $id;
|
|
}
|
|
|
|
public function AddBestellungPosition($bestellung, $einkauf,$menge,$datum, $beschreibung = '',$artikel='',$einheit='', $waehrung = '')
|
|
{
|
|
$beschreibung = $this->app->DB->real_escape_string($beschreibung);
|
|
|
|
if($artikel<=0)
|
|
{
|
|
if($einkauf > 0){
|
|
$einkaufarr = $this->app->DB->SelectRow("SELECT * FROM einkaufspreise WHERE id='$einkauf' LIMIT 1");
|
|
}
|
|
if(!empty($einkaufarr))
|
|
{
|
|
$artikel = $einkaufarr['artikel'];
|
|
$article = $this->app->DB->SelectRow(
|
|
"SELECT `nummer`, `name_de`, `name_en`, `umsatzsteuer`
|
|
FROM `artikel` WHERE `id` = {$artikel}"
|
|
);
|
|
$preis = $einkaufarr['preis'];
|
|
$projekt = $einkaufarr['projekt'];
|
|
$waehrung = $einkaufarr['waehrung'];
|
|
$vpe = $einkaufarr['vpe'];
|
|
$bezeichnunglieferant = $this->app->DB->real_escape_string($einkaufarr['bezeichnunglieferant']);
|
|
$bestellnummer = $this->app->DB->real_escape_string($einkaufarr['bestellnummer']);
|
|
}else{
|
|
$artikel = 0;
|
|
$preis = 0;
|
|
$projekt = 0;
|
|
$waehrung = '';
|
|
$vpe = '';
|
|
$bezeichnunglieferant = '';
|
|
$bestellnummer = '';
|
|
}
|
|
}else{
|
|
$article = $this->app->DB->SelectRow(
|
|
"SELECT `nummer`, `name_de`, `name_en`, `umsatzsteuer`
|
|
FROM `artikel` WHERE `id` = {$artikel}"
|
|
);
|
|
$bestellnummer = $article['nummer'];
|
|
$bezeichnunglieferant = $this->app->DB->real_escape_string($article['name_de']);
|
|
$projekt = $projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$bestellung' LIMIT 1");
|
|
$preis = 0;
|
|
}
|
|
|
|
if($projekt <= 0) {
|
|
$projekt = $this->app->DB->Select("SELECT projekt FROM bestellung WHERE id='$bestellung' LIMIT 1");
|
|
}
|
|
|
|
if($bezeichnunglieferant==''){
|
|
$languageIso = $this->app->erp->GetSpracheBelegISO('bestellung', $bestellung);
|
|
|
|
if($languageIso === 'EN'){
|
|
$bezeichnunglieferant = $this->app->DB->real_escape_string($article['name_en']);
|
|
}
|
|
|
|
if(empty($bezeichnunglieferant)){
|
|
$bezeichnunglieferant = $this->app->DB->real_escape_string($article['name_de']);
|
|
}
|
|
}
|
|
|
|
$umsatzsteuer = $article['umsatzsteuer'];
|
|
if($umsatzsteuer=='') {
|
|
$umsatzsteuer='normal';
|
|
}
|
|
$sort = $this->app->DB->Select("SELECT MAX(sort) FROM bestellung_position WHERE bestellung='$bestellung' LIMIT 1");
|
|
$sort++;
|
|
$this->app->DB->Insert("INSERT INTO bestellung_position (bestellung,artikel,bezeichnunglieferant,bestellnummer,menge,preis, waehrung, sort,lieferdatum, umsatzsteuer, status,projekt,vpe, beschreibung,einheit)
|
|
VALUES ('$bestellung','$artikel','$bezeichnunglieferant','$bestellnummer','$menge','$preis','$waehrung','$sort','$datum','$umsatzsteuer','angelegt','$projekt','$vpe','$beschreibung','$einheit')");
|
|
return $this->app->DB->GetInsertID();
|
|
}
|
|
|
|
public function CopyBestellung($id)
|
|
{
|
|
$this->app->DB->Insert('INSERT INTO bestellung (id) VALUES (NULL)');
|
|
$newid = $this->app->DB->GetInsertID();
|
|
$arr = $this->app->DB->SelectRow("SELECT NOW() as datum,projekt,bodyzusatz,freitext,adresse,name,abteilung,unterabteilung,strasse,adresszusatz,plz,ort,land,ustid,email,telefon,telefax,betreff,kundennummer,versandart,einkaeufer,zahlungsweise,zahlungszieltage,'angelegt' as status,typ,
|
|
zahlungszieltageskonto,zahlungszielskonto,firma,'angelegt' as status,abweichendelieferadresse,liefername,lieferabteilung,lieferunterabteilung,ust_befreit,
|
|
lieferland,lieferstrasse,lieferort,lieferplz,lieferadresszusatz,lieferansprechpartner,sprache,anzeigesteuer,waehrung,kostenstelle FROM bestellung WHERE id='$id' LIMIT 1");
|
|
$arr['bundesstaat'] = $this->app->DB->Select("SELECT bundesstaat FROM bestellung WHERE id='$id' LIMIT 1");
|
|
$this->app->DB->UpdateArr('bestellung',$newid,'id',$arr, true);
|
|
$pos = $this->app->DB->SelectArr("SELECT * FROM bestellung_position WHERE bestellung='$id'");
|
|
$cpos = !empty($pos)?count($pos):0;
|
|
for($i=0;$i<$cpos;$i++){
|
|
$this->app->DB->Insert("INSERT INTO bestellung_position (bestellung) VALUES ($newid)");
|
|
$newposid = $this->app->DB->GetInsertID();
|
|
$pos[$i]['bestellung']=$newid;
|
|
$pos[$i]['auftrag_position_id']=0;
|
|
$this->app->DB->UpdateArr('bestellung_position',$newposid,'id',$pos[$i], true);
|
|
if(is_null($pos[$i]['steuersatz'])){
|
|
$this->app->DB->Update("UPDATE bestellung_position SET steuersatz = null WHERE id = '$newposid' LIMIT 1");
|
|
}
|
|
}
|
|
|
|
$this->app->erp->CheckFreifelder('bestellung',$newid);
|
|
$this->app->erp->CopyBelegZwischenpositionen('bestellung',$id,'bestellung',$newid);
|
|
|
|
$this->app->DB->Update("UPDATE bestellung_position SET geliefert=0, mengemanuellgeliefertaktiviert=0,abgeschlossen='0',abgerechnet='0' WHERE bestellung='$newid'");
|
|
$this->app->erp->LoadSteuersaetzeWaehrung($newid,'bestellung');
|
|
|
|
$this->app->erp->SchnellFreigabe('bestellung',$newid);
|
|
|
|
return $newid;
|
|
}
|
|
|
|
public function LoadBestellungStandardwerte($id,$adresse)
|
|
{
|
|
// standard adresse von lieferant
|
|
$arr = $this->app->DB->SelectArr("SELECT * FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
|
|
$rolle_projekt = $this->app->DB->Select("SELECT parameter FROM adresse_rolle WHERE adresse='$adresse' AND subjekt='Lieferant' AND objekt='Projekt' AND (bis ='0000-00-00' OR bis <= NOW()) LIMIT 1");
|
|
|
|
if($rolle_projekt > 0)
|
|
{
|
|
$arr[0]['projekt'] = $rolle_projekt;
|
|
}
|
|
$field = array('anschreiben','name','abteilung','unterabteilung','strasse','adresszusatz','plz','ort','land','ustid','email','telefon','telefax','lieferantennummer','projekt','ust_befreit','titel','lieferbedingung','ansprechpartner');
|
|
foreach($field as $key=>$value)
|
|
{
|
|
if($value==='projekt' && $this->app->Secure->POST[$value]!=''&&0)
|
|
{
|
|
$uparr[$value] = $this->app->Secure->POST[$value];
|
|
} else {
|
|
$this->app->Secure->POST[$value] = str_replace("'", ''',$arr[0][$value]);
|
|
$uparr[$value] = str_replace("'", ''',$arr[0][$value]);
|
|
}
|
|
//$this->app->Secure->POST[$value] = $arr[0][$value];
|
|
//$uparr[$value] = $arr[0][$value];
|
|
}
|
|
$uparr['adresse'] = $adresse;
|
|
$this->app->DB->UpdateArr('bestellung',$id,'id',$uparr);
|
|
$uparr=null;
|
|
|
|
//liefernantenvorlage
|
|
$arr = $this->app->DB->SelectArr("SELECT
|
|
kundennummerlieferant as kundennummer,
|
|
zahlungsweiselieferant as zahlungsweise,
|
|
zahlungszieltagelieferant as zahlungszieltage,
|
|
zahlungszieltageskontolieferant as zahlungszieltageskonto,
|
|
zahlungszielskontolieferant as zahlungszielskonto,
|
|
versandartlieferant as versandart,
|
|
waehrung
|
|
FROM adresse WHERE id='$adresse' LIMIT 1");
|
|
|
|
// falls von Benutzer projekt ueberladen werden soll
|
|
$projekt_bevorzugt=$this->app->DB->Select("SELECT projekt_bevorzugen FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1");
|
|
if($projekt_bevorzugt=='1')
|
|
{
|
|
$uparr['projekt'] = $this->app->DB->Select("SELECT projekt FROM user WHERE id='".$this->app->User->GetID()."' LIMIT 1");
|
|
$arr[0]['projekt'] = $uparr['projekt'];
|
|
$this->app->Secure->POST['projekt']=$this->app->DB->Select("SELECT abkuerzung FROM projekt WHERE id='".$arr[0]['projekt']."' AND id > 0 LIMIT 1");
|
|
}
|
|
|
|
$field = array('kundennummer','zahlungsweise','zahlungszieltage','zahlungszieltageskonto','zahlungszielskonto','versandart','waehrung');
|
|
foreach($field as $key=>$value)
|
|
{
|
|
$uparr[$value] = $arr[0][$value];
|
|
$this->app->Secure->POST[$value] = $arr[0][$value];
|
|
}
|
|
|
|
|
|
$this->app->DB->UpdateArr('bestellung',$id,'id',$uparr);
|
|
|
|
//standardprojekt
|
|
//$projekt = $this->app->DB->Select("SELECT projekt FROM adresse WHERE id='$adresse' AND geloescht=0 LIMIT 1");
|
|
//$this->app->Secure->POST[projekt] = $projekt;
|
|
$this->app->erp->LoadAdresseStandard('bestellung',$id,$adresse);
|
|
}
|
|
|
|
public function BestellungEAN()
|
|
{
|
|
$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');
|
|
|
|
/** @var ScanArticleService $scanArticleService */
|
|
$scanArticleService = $this->app->Container->get('ScanArticleService');
|
|
|
|
$this->BestellungMenu();
|
|
$schreibschutz = $this->app->DB->Select("SELECT schreibschutz FROM bestellung WHERE id='$id' LIMIT 1");
|
|
|
|
if($scanner!="" && $schreibschutz!="1")
|
|
{
|
|
if(!is_numeric($menge)){
|
|
$menge=1;
|
|
}
|
|
$adresse = $this->app->DB->Select("SELECT adresse FROM bestellung WHERE id='$id' LIMIT 1");
|
|
try{
|
|
$scanArticleService->writeArticleToSession('bestellung',$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{
|
|
$scanArticleService->savePositions('bestellung',$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('bestellung');
|
|
}
|
|
|
|
$gescannteArtikel = $scanArticleService->getAllArticleDataFromSession('bestellung');
|
|
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',"bestellung_ean.tpl");
|
|
}
|
|
$this->app->Tpl->Parse('PAGE',"tabview.tpl");
|
|
}
|
|
}
|