");
$this->app->Location->execute("index.php?module=angebot&action=edit&id=$id&msg=$msg");
}
if($showDefault){
$name = $this->app->DB->Select("SELECT a.name FROM angebot b LEFT JOIN adresse a ON a.id=b.adresse WHERE b.id='$id' LIMIT 1");
$summe = $this->app->DB->Select("SELECT gesamtsumme FROM angebot WHERE id='$id' LIMIT 1");
$waehrung = $this->app->DB->Select("SELECT waehrung FROM angebot_position
WHERE angebot='$id' LIMIT 1");
$summe = $this->app->erp->EUR($summe);
$extra = $this->app->erp->CheckboxEntwurfsmodus('angebot', $id);
if($this->app->erp->Firmendaten("oneclickrelease")=="1" && $extra=="")
{
$this->app->Location->execute("index.php?module=angebot&action=freigabe&id=$id&freigabe=$id");
} else {
$this->app->Tpl->Set('TAB1', "
Soll das Angebot
jetzt freigegeben werden? $extra
");
}
}
$this->AngebotMenu();
$this->app->Tpl->Parse('PAGE','tabview.tpl');
}
function AngebotCopy()
{
$id = $this->app->Secure->GetGET("id");
$newid = $this->app->erp->CopyAngebot($id);
header("Location: index.php?module=angebot&action=edit&id=$newid");
exit;
}
function AngebotZertifikate()
{
$id = $this->app->Secure->GetGET("id");
$adresse = $this->app->DB->Select("SELECT adresse FROM angebot WHERE id = '$id' LIMIT 1");
if($adresse)
{
$zertifikate = $this->app->DB->SelectArr("SELECT ds.datei
FROM datei_stichwoerter ds
INNER JOIN datei_stichwoerter ds2 ON ds.datei = ds2.datei AND ds2.objekt = 'Artikel'
INNER JOIN angebot_position ap ON ap.artikel = ds2.parameter AND ap.angebot = '$id'
WHERE ds.objekt = 'Adressen' AND ds.parameter = '$adresse'
GROUP BY ds.datei");
if($zertifikate)
{
foreach($zertifikate as $zertifikat)
{
$this->app->erp->AddDateiStichwort($zertifikat['datei'],"Sonstige","Angebot",$id);
}
}
}
header("Location: index.php?module=angebot&action=dateien&id=$id");
exit;
}
function AngebotLiveTabelle()
{
$id = $this->app->Secure->GetGET("id");
$status = $this->app->DB->Select("SELECT status FROM angebot WHERE id='$id' LIMIT 1");
$table = new EasyTable($this->app);
if($status=="freigegeben")
{
$table->Query("SELECT SUBSTRING(ap.bezeichnung,1,20) as artikel, ap.nummer as Nummer, TRIM(ap.menge)+0 as Menge,
if(a.porto,'-',if((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel) > ap.menge,(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),
if((SELECT SUM(l.menge) FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel)>0,CONCAT('',(SELECT TRIM(SUM(l.menge))+0 FROM lager_platz_inhalt l WHERE l.artikel=ap.artikel),''),
'aus'))) as Lager,".$this->app->erp->FormatPreis("ap.preis*(100-ap.rabatt)/100",2)." as preis
FROM angebot_position ap, artikel a WHERE ap.angebot='$id' AND a.id=ap.artikel",0,"");
$artikel = $table->DisplayNew("return","Preis","noAction");
} else {
$table->Query("SELECT SUBSTRING(ap.bezeichnung,1,20) as artikel, ap.nummer as Nummer, TRIM(ap.menge)+0 as Menge,".$this->app->erp->FormatPreis("ap.preis*(100-ap.rabatt)/100",2)." as preis
FROM angebot_position ap, artikel a WHERE ap.angebot='$id' AND a.id=ap.artikel",0,"");
$artikel = $table->DisplayNew("return","Preis","noAction");
}
echo $artikel;
$this->app->ExitXentral();
}
function AngebotAuftrag()
{
$id = $this->app->Secure->GetGET("id");
$status = $this->app->DB->Select("SELECT status FROM angebot WHERE id=$id");
if($status!="angelegt")
{
$newid = $this->app->erp->WeiterfuehrenAngebotZuAuftrag($id);
$this->app->erp->AngebotProtokoll($id,"Angebot als Auftrag weitergeführt");
// offene wiedervorlage als abgeschlossen
$this->app->DB->Update("UPDATE wiedervorlage SET abgeschlossen='1' WHERE module='angebot' AND parameter='$id'");
header("Location: index.php?module=auftrag&action=edit&id=$newid");
} else {
$msg = $this->app->erp->base64_url_encode("
Das Angebot befindet sich noch im Entwurfsmodus und kann daher nicht als Auftrag weiterführt werden!
");
header("Location: index.php?module=angebot&action=edit&id=$id&msg=$msg");
}
exit;
}
/**
* @return JsonResponse
*/
public function HandleCreateProforma()
{
$justStorage = $this->app->Secure->GetPOST('just_strorage');
$this->app->User->SetParameter('proforma_just_storage', (int)$justStorage);
$id = $this->app->Secure->GetPOST('elementid');
$status = $this->app->DB->Select("SELECT status FROM angebot WHERE id=$id");
if($status!=='angelegt') {
/** @var Proformarechnung $obj */
$obj = $this->app->loadModule('proformarechnung');
if(!empty($obj) && method_exists($obj, 'createFromOffer')) {
$newid = $obj->createFromOffer($id, $justStorage);
$this->app->erp->AngebotProtokoll($id,'Angebot als Proformarechnung weitergeführt');
return new JsonResponse(
['success' => true, 'url' => "index.php?module=proformarechnung&action=edit&id=$newid"]
);
}
return new JsonResponse(
[
'success' => false,
'error' => 'Das Modul Proformarechnung konnte nicht geladen werden!'
],
JsonResponse::HTTP_BAD_REQUEST
);
}
return new JsonResponse(
[
'success' => false,
'error' => 'Das Angebot befindet sich noch im Entwurfsmodus und kann daher nicht als Proformarechnung weiterführt werden!'
],
JsonResponse::HTTP_BAD_REQUEST
);
}
function AngebotAbschicken()
{
$this->AngebotMenu();
$this->app->erp->DokumentAbschicken();
}
function AngebotAbgelehnt()
{
$id = (int)$this->app->Secure->GetGET("id");
$belegnr = $this->app->DB->Select("SELECT belegnr FROM angebot WHERE id='$id' LIMIT 1");
$name = $this->app->DB->Select("SELECT name FROM angebot WHERE id='$id' LIMIT 1");
$status = $this->app->DB->Select("SELECT status FROM angebot WHERE id='$id' LIMIT 1");
$this->app->DB->Update("UPDATE angebot SET status='abgelehnt' WHERE id='$id' LIMIT 1");
$this->app->erp->AngebotProtokoll($id,"Angebot abgelehnt");
$this->app->DB->Update("UPDATE wiedervorlage SET abgeschlossen='1' WHERE module='angebot' AND parameter='$id' AND parameter > 0");
$msg = $this->app->erp->base64_url_encode("
Das Angebot \"$name\" ($belegnr) wurde abgelehnt!
");
header("Location: index.php?module=angebot&action=list&msg=$msg#tabs-1");
exit;
}
function AngebotBeauftragt()
{
$id = (int)$this->app->Secure->GetGET("id");
$belegnr = $this->app->DB->Select("SELECT belegnr FROM angebot WHERE id='$id' LIMIT 1");
$name = $this->app->DB->Select("SELECT name FROM angebot WHERE id='$id' LIMIT 1");
$status = $this->app->DB->Select("SELECT status FROM angebot WHERE id='$id' LIMIT 1");
$this->app->DB->Update("UPDATE angebot SET status='beauftragt' WHERE id='$id' LIMIT 1");
$this->app->erp->AngebotProtokoll($id,"Angebot als beauftragt markiert");
$this->app->DB->Update("UPDATE wiedervorlage SET abgeschlossen='1' WHERE module='angebot' AND parameter='$id' AND parameter > 0");
$msg = $this->app->erp->base64_url_encode("
Das Angebot \"$name\" ($belegnr) wurde als beauftragt markiert!
");
header("Location: index.php?module=angebot&action=list&msg=$msg#tabs-1");
exit;
}
function AngebotDelete()
{
$id = $this->app->Secure->GetGET("id");
$belegnr = $this->app->DB->Select("SELECT belegnr FROM angebot WHERE id='$id' LIMIT 1");
$name = $this->app->DB->Select("SELECT name FROM angebot WHERE id='$id' LIMIT 1");
$status = $this->app->DB->Select("SELECT status FROM angebot WHERE id='$id' LIMIT 1");
if($belegnr=="0" || $belegnr=="")
{
$this->app->erp->DeleteAngebot($id);
$belegnr="ENTWURF";
$msg = $this->app->erp->base64_url_encode("
Das Angebot \"$name\" ($belegnr) wurde gelöscht!
");
//header("Location: ".$_SERVER['HTTP_REFERER']."&msg=$msg");
header("Location: index.php?module=angebot&action=list&msg=$msg");
exit;
}
if($status=="abgeschlossen")
{
// KUNDE muss RMA starten
$msg = $this->app->erp->base64_url_encode("
Angebot \"$name\" ($belegnr) kann nicht storniert werden da Angebot als Auftrag bereits weitergeführt worden ist!
");
}
else if($status=="storniert")
{
$maxbelegnr = $this->app->DB->Select("SELECT MAX(belegnr) FROM angebot");
if(0)//$maxbelegnr == $belegnr)
{
$this->app->DB->Delete("DELETE FROM angebot_position WHERE angebot='$id'");
$this->app->DB->Delete("DELETE FROM angebot_protokoll WHERE angebot='$id'");
$this->app->DB->Delete("DELETE FROM angebot WHERE id='$id'");
$this->app->DB->Update("DELETE FROM wiedervorlage WHERE module='angebot' AND parameter='$id' AND parameter > 0");
$msg = $this->app->erp->base64_url_encode("
Offene Angebote, die durch andere Mitarbeiter in Bearbeitung sind.
[ANGEBOTE]");
$this->app->Tpl->Set('AKTIV_TAB1',"selected");
$this->app->YUI->TableSearch('ANGEBOTE',"angeboteinbearbeitung");
$this->app->Tpl->Set('TABTEXT',"Angebot anlegen");
$this->app->Tpl->Parse('PAGE',"tabview.tpl");
//parent::AngebotCreate();
}
function AngebotList()
{
// $this->app->Tpl->Set('UEBERSCHRIFT',"Angebote");
// $this->app->Tpl->Set(KURZUEBERSCHRIFT,"Angebote");
if($this->app->Secure->GetPOST('ausfuehren') && $this->app->erp->RechteVorhanden('angebot', 'edit'))
{
$drucker = $this->app->Secure->GetPOST('seldrucker');
$aktion = $this->app->Secure->GetPOST('sel_aktion');
$auswahl = $this->app->Secure->GetPOST('auswahl');
$selectedIds = [];
if(!empty($auswahl)) {
foreach($auswahl as $selectedId) {
$selectedId = (int)$selectedId;
if($selectedId > 0) {
$selectedIds[] = $selectedId;
}
}
}
if($drucker > 0) {
$this->app->erp->BriefpapierHintergrundDisable($drucker);
}
if(is_array($auswahl))
{
switch($aktion)
{
case 'freigeben':
foreach($selectedIds as $v) {
if($this->app->DB->Select("SELECT id FROM angebot WHERE id = '$v' AND belegnr = '' AND status <> 'freigeben' AND status <> 'abgeschlossen' AND status <> 'storniert' LIMIT 1")){
$this->AngebotFreigabe($v);
}
}
break;
case 'storniert':
foreach($selectedIds as $v) {
$projekt = $this->app->DB->Select("SELECT projekt FROM angebot WHERE id='$v' LIMIT 1");
$status = $this->app->DB->Select("SELECT status FROM angebot WHERE id='$v' LIMIT 1");
if($status=='angelegt' || $status=='')
{
$this->app->erp->DeleteAngebot($v);
} else {
if(class_exists('AngebotPDFCustom'))
{
$Brief = new AngebotPDFCustom($this->app,$projekt);
}else{
$Brief = new AngebotPDF($this->app,$projekt);
}
$Brief->GetAngebot($v);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
$this->app->erp->AngebotProtokoll($v,'Angebot storniert');
$this->app->DB->Update("UPDATE angebot SET status='storniert',schreibschutz=1, versendet = 1 WHERE id = '$v' AND status!='angelegt' LIMIT 1");
$this->app->DB->Update("UPDATE wiedervorlage SET abgeschlossen='0' WHERE module='angebot' AND parameter='$v' AND parameter > 0");
unlink($tmpfile);
}
}
break;
case 'versendet':
foreach($selectedIds as $v) {
$projekt = $this->app->DB->Select("SELECT projekt FROM angebot WHERE id='$v' LIMIT 1");
if(class_exists('AngebotPDFCustom'))
{
$Brief = new AngebotPDFCustom($this->app,$projekt);
}else{
$Brief = new AngebotPDF($this->app,$projekt);
}
$Brief->GetAngebot($v);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
$this->app->erp->AngebotProtokoll($v,'Angebot versendet');
$this->app->DB->Update("UPDATE angebot SET schreibschutz=1, versendet = 1 WHERE id = '$v' LIMIT 1");
$this->app->DB->Update("UPDATE angebot SET status='versendet' WHERE id = '$v' AND status='freigegeben' LIMIT 1");
unlink($tmpfile);
}
break;
case 'beauftragt':
foreach($selectedIds as $v) {
$projekt = $this->app->DB->Select("SELECT projekt FROM angebot WHERE id='$v' LIMIT 1");
if(class_exists('AngebotPDFCustom'))
{
$Brief = new AngebotPDFCustom($this->app,$projekt);
}else{
$Brief = new AngebotPDF($this->app,$projekt);
}
$Brief->GetAngebot($v);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
$this->app->erp->AngebotProtokoll($v,"Angebot als beauftragt markiert");
$this->app->DB->Update("UPDATE angebot SET status='beauftragt' WHERE id = '$v' LIMIT 1");
$this->app->DB->Update("UPDATE wiedervorlage SET abgeschlossen='1' WHERE module='angebot' AND parameter='$v' AND parameter > 0");
unlink($tmpfile);
}
break;
case 'abgelehnt':
foreach($selectedIds as $v) {
$projekt = $this->app->DB->Select("SELECT projekt FROM angebot WHERE id='$v' LIMIT 1");
if(class_exists('AngebotPDFCustom'))
{
$Brief = new AngebotPDFCustom($this->app,$projekt);
}else{
$Brief = new AngebotPDF($this->app,$projekt);
}
$Brief->GetAngebot($v);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
$this->app->erp->AngebotProtokoll($v,'Angebot abgelehnt');
$this->app->DB->Update("UPDATE angebot SET status='abgelehnt' WHERE id = '$v' LIMIT 1");
$this->app->DB->Update("UPDATE wiedervorlage SET abgeschlossen='1' WHERE module='angebot' AND parameter='$v' AND parameter > 0");
unlink($tmpfile);
}
break;
case 'drucken':
if($drucker)
{
foreach($selectedIds as $v) {
$angebotsdaten = $this->app->DB->SelectRow("SELECT projekt, adresse FROM angebot WHERE id='$v' LIMIT 1");
$projekt = $angebotsdaten['projekt'];
$adressId = $angebotsdaten['adresse'];
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('AngebotPDFCustom'))
{
$Brief = new AngebotPDFCustom($this->app,$projekt);
}else{
$Brief = new AngebotPDF($this->app,$projekt);
}
$Brief->GetAngebot($v);
$_tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
unlink($_tmpfile);
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('AngebotPDFCustom'))
{
$Brief = new AngebotPDFCustom($this->app,$projekt);
}else{
$Brief = new AngebotPDF($this->app,$projekt);
}
$Brief->GetAngebot($v);
$tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
$this->app->printer->Drucken($drucker,$tmpfile);
$doctype = 'angebot';
$this->app->erp->RunHook('dokumentsend_ende', 5, $doctype, $v, $projekt, $adressId, $aktion);
$this->app->erp->AngebotProtokoll($v,"Angebot versendet");
unlink($tmpfile);
}
}
break;
case 'pdf':
$tmpfile = [];
foreach($selectedIds as $v) {
$projekt = $this->app->DB->Select("SELECT projekt FROM angebot WHERE id='$v' LIMIT 1");
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('AngebotPDFCustom'))
{
$Brief = new AngebotPDFCustom($this->app,$projekt);
}else{
$Brief = new AngebotPDF($this->app,$projekt);
}
$Brief->GetAngebot($v);
$_tmpfile = $Brief->displayTMP();
$Brief->ArchiviereDocument();
unlink($_tmpfile);
$this->app->erp->BriefpapierHintergrunddisable = !$this->app->erp->BriefpapierHintergrunddisable;
if(class_exists('AngebotPDFCustom'))
{
$Brief = new AngebotPDFCustom($this->app,$projekt);
}else{
$Brief = new AngebotPDF($this->app,$projekt);
}
$Brief->GetAngebot($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;
}
}
}
$backurl = $this->app->Secure->GetGET("backurl");
$msg = $this->app->Secure->GetGET("msg");
$backurl = $this->app->erp->base64_url_decode($backurl);
//$this->app->Tpl->Add(TABS,"
Allgemein
");
$this->app->erp->MenuEintrag("index.php?module=angebot&action=list","Übersicht");
$this->app->erp->MenuEintrag("index.php?module=angebot&action=create","Neues Angebot anlegen");
if(strlen($backurl)>5)
$this->app->erp->MenuEintrag("$backurl","Zurück zur Übersicht");
else
$this->app->erp->MenuEintrag("index.php","Zurück zur Übersicht");
$zahlungsweisen = $this->app->DB->SelectArr('
SELECT
zahlungsweise
FROM
angebot
GROUP BY
zahlungsweise
');
$zahlungsweiseStr = '';
if ($zahlungsweisen) {
foreach ($zahlungsweisen as $zahlungsweise) {
$zahlungsweiseStr .= '';
}
}
$status = $this->app->DB->SelectArr('
SELECT
status
FROM
angebot
GROUP BY
status
');
$statusStr = '';
if ($status) {
foreach ($status as $statusE) {
$statusStr .= '';
}
}
$versandarten = $this->app->DB->SelectArr('
SELECT
versandart
FROM
angebot
GROUP BY
versandart
');
$versandartenStr = '';
if ($versandarten) {
foreach ($versandarten as $versandart) {
if (empty($versandart['versandart'])) {
continue;
}
$versandartenStr .= '';
}
}
$laender = $this->app->erp->GetSelectLaenderliste();
$laenderStr = '';
foreach ($laender as $landKey => $land) {
$laenderStr .= '';
}
$this->app->YUI->DatePicker("datumVon");
$this->app->YUI->DatePicker("datumBis");
$this->app->YUI->AutoComplete("projekt", "projektname", 1);
$this->app->YUI->AutoComplete("kundennummer", "kunde", 1);
$this->app->YUI->AutoComplete("angebotsnummer", "angebot", 1);
$this->app->YUI->AutoComplete("artikel", "artikelnummer", 1);
$this->app->Tpl->Set('AKTIV_TAB1',"selected");
$this->app->Tpl->Set('INHALT',"");
$this->app->Tpl->Set('SELDRUCKER', $this->app->erp->GetSelectDrucker($this->app->User->GetParameter('rechnung_list_drucker')));
//$this->AngebotFilter();
//$this->app->YUI->TableSearch('TAB2',"angeboteoffene");
$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',"angebot_table_filter.tpl");
$this->app->YUI->TableSearch('TAB1',"angebote");
$this->app->YUI->TableSearch('TAB3',"angeboteinbearbeitung");
$this->app->Tpl->Parse('PAGE',"angebotuebersicht.tpl");
return;
/*
// suche
$sql = $this->app->erp->AngebotSuche();
// offene Angeboten
$this->app->Tpl->Set('SUBSUBHEADING',"Offene Angebote");
$table = new EasyTable($this->app);
$table->Query($sql,$_SESSION[angebottreffer]);
//$table->Query("SELECT DATE_FORMAT(a.datum,'%d.%m.%Y') as vom, if(a.belegnr,a.belegnr,'ohne Nummer') as Angebot, a.name, p.abkuerzung as projekt, a.id
// FROM angebot 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, "
");
$this->app->Tpl->Parse('TAB1',"rahmen70.tpl");
$this->app->Tpl->Set('INHALT',"");
// wartende Angeboten
$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 Angebot, ad.kundennummer as kunde, a.name, p.abkuerzung as projekt, a.id
FROM angebot 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', "
");
$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 angebot WHERE status='angelegt' order by datum DESC, id DESC");
$table->DisplayNew('INHALT', "
");
$this->app->Tpl->Parse(TAB3,"rahmen70.tpl");
*/
/*
$this->app->Tpl->Set(TAB2,"lieferant, angebot, waehrung, sprache, liefertermin, steuersatz, einkäufer, freigabe
Angebot (NR),Bestellart (NB), Bestelldatum
Projekt
Kostenstelle pro Position
Terminangebot (am xx.xx.xxxx raus damit)
vorschlagsdaten für positionen
proposition reinklicken zum ändern und reihenfolge tabelle
Angebot muss werden wie angebot (angebot beschreibung = allgemein)
Positionen (wie stueckliste)
Wareneingang / Rückstand
Etiketten
Freigabe
Dokument direkt faxen
");
*/
}
}