Files
Kundenverwaltung/sites/rechnungadd.php
T
adminandClaude Opus 5 b76d883fbe Rechnungen: Betraege mit Tausenderpunkt, XSS in Templates und Suche
- formularZahl(): steht ein Komma im Betrag, sind Punkte Tausendertrenner
  ("1.234,50" -> 1234.50, vorher 1.23); ohne Komma bleibt der Punkt
  Dezimaltrenner wie bei der Artikel-Autovervollstaendigung ("12.50").
- Rechnungs-Templates (addrechnung, mailrechnung, changeadr, copyrech,
  umschlagshow, rechshow) geben alle Daten mit |escape aus; Werte aus der
  URL (id, type, newtype) als int.
- Rechnungssuche: Artikelnamen werden escaped statt als HTML ausgegeben
  (Trennung per Zeilenumbruch in SQL, artikelListeHtml() in PHP).
- Suchbegriffe kommen per encodeURIComponent als UTF-8, utf8_encode()
  entfaellt; vorher gingen Zeichen ausserhalb von Latin-1 verloren.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 11:18:29 +02:00

238 lines
7.3 KiB
PHP

<?php
require_once("incs/rechnung.php");
require_once("incs/makepdf.php");
if($_GET["formsent"] == 1)
{
if($_GET["id"] > 0)
$err=saveRechnung($dbconn,$_GET["id"]);
else
$err=saveRechnung($dbconn,0);
if(!$err)
doneNreturn("Erfolgreich gespeichert");
}
elseif($_GET["changeadr"] == 1 && $_GET["id"])
{
if(!$_GET["adrid"])
{
$smarty->assign("felder",array("all"=>"Name, Adresse, Kd.Nr.","kdnr"=>"Kundennummer","name"=>"Name und Firma","str"=>"Straße","plz"=>"PLZ","ort"=>"Ort","tel"=>"Tel","kont"=>"Kontakt"));
$smarty->assign("rechid",(int)$_GET["id"]);
$smarty->display("changeadr.tpl");
}
else
{
$err=changeRechAdr($dbconn,$_GET["id"],$_GET["adrid"]);
if(!$err)
doneNreturn("Erfolgreich geändert");
}
}
elseif($_GET["copy"] == 1 && $_GET["id"])
{
if(!$_GET["adrid"])
{
$smarty->assign("felder",array("all"=>"Name, Adresse, Kd.Nr.","kdnr"=>"Kundennummer","name"=>"Name und Firma","str"=>"Straße","plz"=>"PLZ","ort"=>"Ort","tel"=>"Tel","kont"=>"Kontakt"));
$smarty->assign("rechid",(int)$_GET["id"]);
$smarty->display("copyrech.tpl");
}
else
{
$err=copyRech($dbconn,$_GET["id"],$_GET["adrid"]);
if(!$err)
doneNreturn("Erfolgreich geändert");
}
}
elseif(($_GET["storno"] == "YES" || $_GET["storno"] == "NO") && $_GET["id"]){
$err = stornoRechnung($dbconn, $_GET["id"], $_GET["storno"] == "YES");
if(!$err)
doneNreturn("Erfolgreich geändert");
}
elseif($_GET["mail"] == 1 && $_GET["id"])
{
$kdnres=makeadressarray($dbconn, $_GET["adressid"]);
list($anrs, $titels) = anredenUndTitel($dbconn);
$smarty->assign("anrs",$anrs);
$smarty->assign("titels",$titels);
$mails = db_zuordnung($dbconn, "SELECT id, kontakt FROM kontakt WHERE partner_id = ? AND typ_id = 1", array($kdnres["partner_id"] ?? 0)) ?: array();
$smarty->assign("mails",array_values($mails));
$smarty->assign("mailids",array_keys($mails));
$typen = db_zuordnung($dbconn, "SELECT id, bezeichn FROM artikeltyp") ?: array();
$smarty->assign("typids",array_keys($typen));
$smarty->assign("typs",array_values($typen));
$rechnung=makerechnungsarray($dbconn, $_GET["id"], 0);
$smarty->assign("rechnung",$rechnung);
$smarty->assign("adresse",$kdnres);
$adresse = makeadressblock($dbconn,$_GET["id"],0);
if($rechnung["sks"])
{
$artikel = makesksartikelarray($dbconn,$rechnung["rechnr"]);
}
else
$artikel = makeartikelarray($dbconn,$_GET["id"],0);
$pdf = makerawPDF(0);
makefirstpage($pdf,$adresse["adresse"],$rechnung,0);
if(count($artikel))
{
$gesamtpreis = maketable($pdf,$artikel,$rechnung,0);
}
makeEndPage($pdf,$rechnung,$gesamtpreis,0);
$tmppdfname = str_replace(array(" ","."),array("_","_"),microtime());
savePDF($pdf,"./temp/pdftemp/$tmppdfname.pdf");
if($_GET["mailformsent"])
{
$tomail = $_POST["tomail"];
if(!filter_var($tomail, FILTER_VALIDATE_EMAIL))
$err=error("Die angegebene E-Mail adresse kann nicht existieren, bitte korrigieren Sie diese zuerst in den Kontaktdaten des Kunden.");
else
{
$sub=$_POST["sub"];
if($_POST["anr1"])
$msg .= $_POST["anr1"]."\n";
if($_POST["anr2"])
$msg .= $_POST["anr1"]."\n";
$msg .= "\n".$_POST["intro"];
if($_SESSION["firma"] == "Wagner Markisen")
{
$frommail = "info@wagner-markisen.de";
$fromname = "Firma Wagner Markisen GmbH";
}
else if($_SESSION["firma"] == "Ingenieurbüro Wagner")
{
$frommail = "info@el-wa.org";
$fromname = "Ingenieurbüro Wagner";
}
else
{
$frommail = "finanzen.lsg@agathazell.info";
$fromname = "Philipp Wagner, Kassier LSG";
}
$err=mail_attachment("$tmppdfname.pdf", "./temp/pdftemp/",$tomail, $frommail, $fromname, $frommail, $sub, $msg);
mail_attachment("$tmppdfname.pdf", "./temp/pdftemp/","info@wagner-markisen.de", $frommail, $fromname, $frommail, $sub."(Kopie, Original gesendet an: ".$tomail.")", $msg);
}
if(!$err)
doneNreturn("Erfolgreich gesendet");
else
$err=error("Mail konnte nicht versendet werden...");
}
$smarty->assign("pdffile","./temp/pdftemp/$tmppdfname.pdf");
$smarty->display("mailrechnung.tpl");
}
else
{
if($_GET["id"])
{
if($_GET["del"] == 1)
{
$err = delRechnung($dbconn,$_GET["id"]);
if(!$err)
doneNreturn("Erfolgreich gelöscht");
}
else
{
$smarty->assign("loadrech",(int)$_GET["id"]);
$rechnung=makerechnungsarray($dbconn, $_GET["id"], 0);
$kommission=makeadressarray($dbconn, $rechnung["kommission"]);
$smarty->assign("rechnung",$rechnung);
$smarty->assign("kommission",$kommission);
$smarty->assign("artikel",makeartikelarray($dbconn, $_GET["id"], 0));
}
}
else if($_GET["draft"])
{
$smarty->assign("loaddraft",$_GET["draft"]);
$smarty->assign("rechnung",makerechnungsarray($dbconn, $_GET["draft"], 1));
$smarty->assign("artikel",makeartikelarray($dbconn, $_GET["draft"], 1));
}
$smarty->assign("type",(int)$_GET["type"]);
$smarty->assign("newtype",(int)$_GET["newtype"]);
$kdnres=makeadressarray($dbconn, $_GET["adressid"]);
if($kdnres["adresstyp"] == "Kommission")
{
$smarty->assign("kommission",$kdnres);
}
if($kdnres["partner_id"])
{
list($anrs, $titels) = anredenUndTitel($dbconn);
$smarty->assign("anrs",$anrs);
$smarty->assign("titels",$titels);
$liste = db_zuordnung($dbconn, "SELECT id, bezeichn FROM artikeltyp") ?: array();
$smarty->assign("typids",array_keys($liste));
$smarty->assign("typs",array_values($liste));
$liste = db_zuordnung($dbconn, "SELECT id, einheit FROM einheit") ?: array();
$smarty->assign("einhids",array_keys($liste));
$smarty->assign("einhs",array_values($liste));
$liste = db_zuordnung($dbconn, "SELECT id, wahrung FROM wahrung") ?: array();
$smarty->assign("wahrids",array_keys($liste));
$smarty->assign("wahrs",array_values($liste));
$typids=array();
$typnames=array();
foreach(db_zeilen($dbconn, "SELECT id, mwst FROM mwst") ?: array() as $res)
{
if($res["mwst"] != "999")
{
$typids[] = $res["id"];
$typnames[] = $res["mwst"]." %";
$typids2[] = $res["id"];
$typnames2[] = $res["mwst"]." %";
}
else
{
$typids2[] = $res["id"];
$typnames2[] = "Normal";
}
}
$smarty->assign("mwstids",$typids);
$smarty->assign("mwsts",$typnames);
$smarty->assign("artmwstids",$typids2);
$smarty->assign("artmwsts",$typnames2);
$liste = db_zuordnung($dbconn, "SELECT id, ziel FROM zahlziel") ?: array();
$smarty->assign("zzielids",array_keys($liste));
$smarty->assign("zziels",array_values($liste));
$liste = db_zuordnung($dbconn, "SELECT id, CONCAT(kto, ' (', name, ')') FROM buchungsKontos") ?: array();
$smarty->assign("buchKtoids",array_keys($liste));
$smarty->assign("buchKtos",array_values($liste));
$res = db_zeile($dbconn, "SELECT tmp_rechnung.id, adresse_id, vname, nname, str, hnr FROM tmp_rechnung JOIN adresse ON adresse_id = adresse.id JOIN strasse ON str_id = strasse.id WHERE tmp_rechnung.typ_id = ? AND user_id = ? ORDER BY datetime DESC LIMIT 1", array((string)$_GET["type"], $_SESSION["user"]));
if($res === false)
$err = error("Fehler beim Suchen nach nicht gespeicherten Daten<br />".mysqli_error($dbconn));
if($res)
{
$smarty->assign("draft",$res["id"]);
$smarty->assign("draftname",$res["vname"]." ".$res["nname"]);
$smarty->assign("draftstr",$res["str"]." ".$res["hnr"]);
$smarty->assign("draftadressid",$res["adresse_id"]);
}
$smarty->assign("adresse",$kdnres);
$smarty->display("addrechnung.tpl");
}
else
{
error("Dieser Kunde existiert nicht!");
}
}
?>