- incs/rechnung.php: alle Abfragen mit Platzhaltern. saveRechnung() setzte $_POST ungeprueft in SQL (Injection; ein Apostroph im Text brach das Speichern ab). Speichern, Kopieren und Loeschen laufen in Transaktionen, bei Fehlern bleibt nichts Halbes zurueck. Formularwerte ueber formularText/-Zahl/-Ganzzahl (strikter Modus). - copyRech() trug die Rechnungsnummer ohne typ_id ein (Fehler im strikten Modus) und zaehlte typuebergreifend; jetzt wie beim Anlegen pro Typ (neueRechnungsnummer()). Artikel und Eigenschaften per INSERT ... SELECT. - Adressblock-Formatierung aus makeadressblock() und makeadressblockUmschlag() in formatiereAdressblock() zusammengefuehrt. - ajax/autosave.php und ajax/preview.php teilen sich saveTmpRechnung(); ueberzaehlige Entwuerfe werden samt Artikeln entfernt (vorher FK-Fehler). - sites/rechnungadd.php: Storno ohne SQL-Injection ueber $_GET["id"], Auswahllisten ueber db_zuordnung(), tote Kommissions-Abfrage entfernt. - Rechnungssuche (createRechQry/createKdnRechQry) liefert SQL und Parameter getrennt; Suchbegriffe waren ungeprueft im SQL. - saveLog() mit Platzhaltern, Protokolltext ueber db_sql_text(). - db.php: db_zuordnung(), db_sql_text(); Helfer liefern Strings wie mysqli_query(), damit alter Code sich gleich verhaelt. Getestet: alter und neuer Code lesen dieselbe migrierte Datenbank, 150 von 155 Pruefungen (10.936 Werte) identisch, die uebrigen 5 sind der Injection-Suchbegriff (alt: SQL-Fehler). Schreibtests fuer Entwurf, Anlegen, Nummernkreise, Aendern, Rollback, Kopieren, Adresse, Storno und Loeschen im strikten Modus. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
238 lines
7.3 KiB
PHP
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",$_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",$_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",$_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",$_GET["type"]);
|
|
$smarty->assign("newtype",$_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!");
|
|
}
|
|
}
|
|
|
|
?>
|