Files
Kundenverwaltung/incs/rechnung.php
T
adminandClaude Opus 5 e2124220e5 Initialer Commit: Kundenverwaltung (PHP/Smarty)
Bestehende Codebasis als Ausgangsstand aufgenommen.

- .gitignore: Kundendaten (uploads_*), Smarty-Compile-Cache
  (templates_c), Laufzeit-Temp und Datenbank-Dumps ausgeschlossen;
  Verzeichnisstruktur ueber .gitkeep erhalten
- .gitattributes: Zeilenenden normalisiert (LF im Repo),
  Binaerformate markiert
- db-backup.php: MySQL-Zugangsdaten kommen jetzt wie im Rest der
  Anwendung aus der externen Konfiguration statt hartkodiert aus der
  Datei; Passwort wird ueber eine temporaere Optionsdatei statt per
  Kommandozeile uebergeben, Fehler von mysqldump/gzip werden gemeldet,
  Aufraeumen aelterer Backups berechnet Jahr und Monat konsistent

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-28 16:41:18 +02:00

1021 lines
37 KiB
PHP

<?php
require_once("saveNchange.php");
function makeadressblock($dbconn,$rechid,$tmp)
{
if($tmp)
$qry=mysqli_query($dbconn,"SELECT adressfields, adresserweiterung, nname, 0 AS sks, titel_id, titel2_id, zusatz, vname, nname2, vname2, str, ort, plz, hnr, land, firma, anrede_id, anrede2_id FROM tmp_rechnung
JOIN adresse ON tmp_rechnung.adresse_id = adresse.id
JOIN strasse ON strasse.id = str_id
JOIN ort ON ort.id = ort_id JOIN land ON land.id = land_id
WHERE tmp_rechnung.id = $rechid") or $err= error("Fehler beim ermitteln der Adressdaten<br />".mysqli_error($dbconn));
else
$qry=mysqli_query($dbconn,"SELECT adressfields, adresserweiterung, nname, sks, titel_id, titel2_id, zusatz, vname, nname2, vname2, str, ort, plz, hnr, land, firma, anrede_id, anrede2_id FROM rechnung
JOIN adresse ON rechnung.adresse_id = adresse.id
JOIN strasse ON strasse.id = str_id
JOIN ort ON ort.id = ort_id JOIN land ON land.id = land_id
WHERE rechnung.id = $rechid") or $err= error("Fehler beim ermitteln der Adressdaten<br />".mysqli_error($dbconn));
$adresse = mysqli_fetch_assoc($qry);
$qry = mysqli_query($dbconn,"SELECT * FROM anrede");
while($res=mysqli_fetch_assoc($qry))
{
$anrs[$res["id"]] = $res["anrede"];
}
$qry = mysqli_query($dbconn,"SELECT * FROM titel");
while($res=mysqli_fetch_assoc($qry))
{
$titels[$res["id"]] = $res["titel"];
}
$adressfields= $adresse["adressfields"];
if($adresse["sks"])
$adressfields = "011111111100";
$firmaanr = substr($adressfields,ADRFIELD_FIRMAANR,1);
$firma = substr($adressfields,ADRFIELD_FIRMA,1);
$anr1 = substr($adressfields,ADRFIELD_ANR1,1);
$titel1 = substr($adressfields,ADRFIELD_TITEL1,1);
$name1 = substr($adressfields,ADRFIELD_NAME1,1);
$anr2 = substr($adressfields,ADRFIELD_ANR2,1);
$titel2 = substr($adressfields,ADRFIELD_TITEL2,1);
$name2 = substr($adressfields,ADRFIELD_NAME2,1);
$str = substr($adressfields,ADRFIELD_STR,1);
$ort = substr($adressfields,ADRFIELD_ORT,1);
$land = substr($adressfields,ADRFIELD_LAND,1);
$zusatz = substr($adressfields,ADRFIELD_ZUSATZ,1);
$adrstr="";
if($firmaanr)
{
$adrstr .= "Firma";
}
if($firma && trim($adresse["firma"]))
{
$adrstr .= "<br />".trim($adresse["firma"]);
}
if($anr1 && $anr2 && $name1 && !$name2)
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= $anrs[$adresse["anrede_id"]];
if($titel1)
$adrstr .= " ".$titels[$adresse["titel_id"]];
$adrstr .= " und ";
$adrstr .= $anrs[$adresse["anrede2_id"]];
if($titel2)
$adrstr .= " ".$titels[$adresse["titel2_id"]];
$adrstr .= "<br />";
if($adresse["vname"])
$adrstr .= trim($adresse["vname"])." ".trim($adresse["nname"]);
else
$adrstr .= trim($adresse["nname"]);
if($zusatz)
$adrstr .= "<br />".trim($adresse["zusatz"]);
}
elseif($anr1 && $anr2 && $name2 && !$name1)
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= $anrs[$adresse["anrede_id"]];
if($titel1)
$adrstr .= " ".$titels[$adresse["titel_id"]];
$adrstr .= " und ";
$adrstr .= $anrs[$adresse["anrede2_id"]];
if($titel2)
$adrstr .= " ".$titels[$adresse["titel2_id"]];
$adrstr .= "<br />";
if($adresse["vname2"])
$adrstr .= trim($adresse["vname2"])." ".trim($adresse["nname2"]);
else
$adrstr .= trim($adresse["nname2"]);
if($zusatz)
$adrstr .= "<br />".trim($adresse["zusatz"]);
}
else
{
if($anr1)
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= $anrs[$adresse["anrede_id"]]." ";
}
if($titel1)
{
if($adrstr)
$adrstr .= "<br />";
if($titels[$adresse["titel_id"]])
$adrstr .= $titels[$adresse["titel_id"]]." ";
}
if($name1)
{
if(!$titel1 && !$firma && !$firmaanr && !$name2 && $adrstr)
$adrstr .= "<br />";
if(!$anr1 && !$titel1 && $adrstr)
$adrstr .= "<br />";
if($adresse["vname"])
$adrstr .= trim($adresse["vname"])." ".trim($adresse["nname"]);
else
$adrstr .= trim($adresse["nname"]);
}
if($anr2 && $anrs[$adresse["anrede2_id"]])
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= $anrs[$adresse["anrede2_id"]]." ";
}
if($titel2 && $titels[$adresse["titel2_id"]])
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= $titels[$adresse["titel2_id"]]." ";
}
if(trim($name2))
{
if(!$titel2 && !$firma && !$firmaanr && !$name1 && !$anr1 && $adrstr)
$adrstr .= "<br />";
if(!$anr2 && !$titel2 && $adrstr)
$adrstr .= "<br />";
if($adresse["vname2"])
$adrstr .= trim($adresse["vname2"])." ".trim($adresse["nname2"]);
else
$adrstr .= trim($adresse["nname2"]);
}
if($zusatz)
$adrstr .= "<br />".trim($adresse["zusatz"]);
}
if(trim($adresse["adresserweiterung"])){
$adrstr .= "<br />".trim($adresse["adresserweiterung"]);
}
if($str)
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= trim($adresse["str"])." ".trim($adresse["hnr"]);
}
if($ort)
{
if($adrstr)
$adrstr .= "<br />";
if($land)
$adresse["ort"] = strtoupper($adresse["ort"]);
$adrstr .= trim($adresse["plz"])." ".trim($adresse["ort"]);
}
if($land)
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= trim(strtoupper($adresse["land"]));
}
$lines=explode("<br />",$adrstr);
$lines = count($lines);
return array("lines"=>$lines,"adresse"=>$adrstr);
}
function makeadressblockUmschlag($dbconn,$adressid,$adressfields,$adresserweiterung)
{
$qry=mysqli_query($dbconn,"SELECT * FROM adresse
JOIN strasse ON strasse.id = str_id
JOIN ort ON ort.id = ort_id JOIN land ON land.id = land_id
WHERE adresse.id = $adressid") or $err= error("Fehler beim ermitteln der Adressdaten<br />".mysqli_error($dbconn));
$adresse = mysqli_fetch_assoc($qry);
$adresse["adresserweiterung"] = $adresserweiterung;
$qry = mysqli_query($dbconn,"SELECT * FROM anrede");
while($res=mysqli_fetch_assoc($qry))
{
$anrs[$res["id"]] = $res["anrede"];
}
$qry = mysqli_query($dbconn,"SELECT * FROM titel");
while($res=mysqli_fetch_assoc($qry))
{
$titels[$res["id"]] = $res["titel"];
}
$firmaanr = substr($adressfields,ADRFIELD_FIRMAANR,1);
$firma = substr($adressfields,ADRFIELD_FIRMA,1);
$anr1 = substr($adressfields,ADRFIELD_ANR1,1);
$titel1 = substr($adressfields,ADRFIELD_TITEL1,1);
$name1 = substr($adressfields,ADRFIELD_NAME1,1);
$anr2 = substr($adressfields,ADRFIELD_ANR2,1);
$titel2 = substr($adressfields,ADRFIELD_TITEL2,1);
$name2 = substr($adressfields,ADRFIELD_NAME2,1);
$str = substr($adressfields,ADRFIELD_STR,1);
$ort = substr($adressfields,ADRFIELD_ORT,1);
$land = substr($adressfields,ADRFIELD_LAND,1);
$zusatz = substr($adressfields,ADRFIELD_ZUSATZ,1);
if($firmaanr)
{
$adrstr .= "Firma";
}
if($firma && trim($adresse["firma"]))
{
$adrstr .= "<br />".trim($adresse["firma"]);
}
if($anr1 && $anr2 && $name1 && !$name2)
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= $anrs[$adresse["anrede_id"]];
if($titel1)
$adrstr .= " ".$titels[$adresse["titel_id"]];
$adrstr .= " und ";
$adrstr .= $anrs[$adresse["anrede2_id"]];
if($titel2)
$adrstr .= " ".$titels[$adresse["titel2_id"]];
$adrstr .= "<br />";
if($adresse["vname"])
$adrstr .= trim($adresse["vname"])." ".trim($adresse["nname"]);
else
$adrstr .= trim($adresse["nname"]);
if($zusatz)
$adrstr .= "<br />".trim($adresse["zusatz"]);
}
elseif($anr1 && $anr2 && $name2 && !$name1)
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= $anrs[$adresse["anrede_id"]];
if($titel1)
$adrstr .= " ".$titels[$adresse["titel_id"]];
$adrstr .= " und ";
$adrstr .= $anrs[$adresse["anrede2_id"]];
if($titel2)
$adrstr .= " ".$titels[$adresse["titel2_id"]];
$adrstr .= "<br />";
if($adresse["vname2"])
$adrstr .= trim($adresse["vname2"])." ".trim($adresse["nname2"]);
else
$adrstr .= trim($adresse["nname2"]);
if($zusatz)
$adrstr .= "<br />".trim($adresse["zusatz"]);
}
else
{
if($anr1)
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= $anrs[$adresse["anrede_id"]]." ";
}
if($titel1)
{
if($adrstr)
$adrstr .= "<br />";
if($titels[$adresse["titel_id"]])
$adrstr .= $titels[$adresse["titel_id"]]." ";
}
if($name1)
{
if(!$titel1 && !$firma && !$firmaanr && !$name2 && $adrstr)
$adrstr .= "<br />";
if(!$anr1 && !$titel1 && $adrstr)
$adrstr .= "<br />";
if($adresse["vname"])
$adrstr .= trim($adresse["vname"])." ".trim($adresse["nname"]);
else
$adrstr .= trim($adresse["nname"]);
}
if($anr2 && $anrs[$adresse["anrede2_id"]])
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= $anrs[$adresse["anrede2_id"]]." ";
}
if($titel2 && $titels[$adresse["titel2_id"]])
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= $titels[$adresse["titel2_id"]]." ";
}
if(trim($name2))
{
if(!$titel2 && !$firma && !$firmaanr && !$name1 && !$anr1 && $adrstr)
$adrstr .= "<br />";
if(!$anr2 && !$titel2 && $adrstr)
$adrstr .= "<br />";
if($adresse["vname2"])
$adrstr .= trim($adresse["vname2"])." ".trim($adresse["nname2"]);
else
$adrstr .= trim($adresse["nname2"]);
}
if($zusatz)
$adrstr .= "<br />".trim($adresse["zusatz"]);
}
if(trim($adresse["adresserweiterung"])){
$adrstr .= "<br />".trim($adresse["adresserweiterung"]);
}
if($str)
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= trim($adresse["str"])." ".trim($adresse["hnr"]);
}
if($ort)
{
if($adrstr)
$adrstr .= "<br />";
if($land)
$adresse["ort"] = strtoupper($adresse["ort"]);
$adrstr .= trim($adresse["plz"])." ".trim($adresse["ort"]);
}
if($land)
{
if($adrstr)
$adrstr .= "<br />";
$adrstr .= trim(strtoupper($adresse["land"]));
}
$lines=explode("<br />",$adrstr);
$lines = count($lines);
return array("lines"=>$lines,"adresse"=>$adrstr);
}
function makerechnungsarray($dbconn,$rechid,$tmp)
{
if($tmp){
$qry=mysqli_query($dbconn,"SELECT adressfields, 0 AS sks, intro, adresserweiterung, outro, anrede1, storno, anrede2, rabatt, rechnr, sub_mwst, rabatt, kommission, rabattdesc, partner_id, mwst, ziel as zahlziel, vname, nname, user_id, user.vname AS uvname, user.nname AS unname, lieferdatum, typ, typ_id, datetime, wahrung, wahrung_id, mwst_id, zahlziel_id, kurs, buchungsKto_id
FROM tmp_rechnung
JOIN wahrung ON wahrung_id = wahrung.id
JOIN rechtyp ON typ_id = rechtyp.id
JOIN zahlziel ON zahlziel_id = zahlziel.id
JOIN mwst ON mwst_id = mwst.id
JOIN user ON user_id = user.id
WHERE tmp_rechnung.id = $rechid") or $err=error("Fehler beim ermitteln der Rechnungsdaten<br />".mysqli_error($dbconn));
}else{
$qry=mysqli_query($dbconn,"SELECT adressfields, sks, intro, adresserweiterung, lieferdatum, outro, anrede1, storno, anrede2, rabatt, rechnr, sub_mwst, rabatt, kommission, rabattdesc, partner_id, mwst, ziel as zahlziel, vname, nname, user_id, user.vname AS uvname, user.nname AS unname, typ, typ_id, datetime, wahrung, wahrung_id, mwst_id, zahlziel_id, kurs, buchungsKto_id
FROM rechnung
JOIN wahrung ON wahrung_id = wahrung.id
JOIN rechtyp ON typ_id = rechtyp.id
JOIN zahlziel ON zahlziel_id = zahlziel.id
JOIN mwst ON mwst_id = mwst.id
JOIN user ON user_id = user.id
WHERE rechnung.id = $rechid") or $err=error("Fehler beim ermitteln der Rechnungsdaten<br />".mysqli_error($dbconn));
}
$rechnung = mysqli_fetch_assoc($qry);
$qry=mysqli_query($dbconn,"SELECT ktonr FROM konto WHERE partner_id = ".$rechnung["partner_id"]);
if($res=mysqli_fetch_assoc($qry)){
$rechnung["ktonr"] = $res["ktonr"];
}
if($rechnung["sks"])
$rechnung["mwst"] = "19";
if($rechnung["rechnr"])
$rechnung["drechnr"] = substr($rechnung["rechnr"],0,4)."-".substr($rechnung["rechnr"],4,2)."-".substr($rechnung["rechnr"],6,2).".".substr($rechnung["rechnr"],8,2);
else
$rechnung["drechnr"] = "(Noch nicht vergeben)";
switch($rechnung["typ_id"])
{
case 1:
$rechnung["drechnr"] = "R".$rechnung["drechnr"];
break;
case 2:
$rechnung["drechnr"] = "G".$rechnung["drechnr"];
break;
case 3:
$rechnung["drechnr"] = "A".$rechnung["drechnr"];
break;
case 4:
$rechnung["drechnr"] = "B".$rechnung["drechnr"];
break;
case 6:
$rechnung["drechnr"] = "M".$rechnung["drechnr"];
break;
}
return $rechnung;
}
function makeadressarray($dbconn,$adressid)
{
$qry = mysqli_query($dbconn,"SELECT plz, ortsteil, ort, str, zusatz, adresstyp.typ AS adresstyp, hnr, vname, partner_id, nname, vname2, nname2, firma, adresse.id, land, anrede_id, titel_id, anrede2_id, titel2_id
FROM adresse
LEFT JOIN strasse ON str_id = strasse.id
LEFT JOIN ort ON ort_id = ort.id
LEFT JOIN land ON land_id = land.id
JOIN adresstyp ON adresse.typ_id = adresstyp.id
WHERE adresse.id='".mysql_escape_string($adressid)."'
ORDER BY typ_id ASC") or $err = error("Fehler beim abrufen der adressdaten ".mysqli_error($dbconn));
$kdnres=mysqli_fetch_assoc($qry);
return $kdnres;
}
function makeartikelarray($dbconn,$rechid,$tmp)
{
if($tmp)
{
$qry=mysqli_query($dbconn,"SELECT tmp_artikel.bezeichn as bezeichn, preis, wanr, pagebreak, mwst AS artmwst, rabatt, rabatttyp, artikeltyp.bezeichn as typ, typ_id, einheit, einheit_id, menge, angtyp, tmp_artikel.id as id
FROM tmp_artikel
JOIN artikeltyp ON typ_id = artikeltyp.id
JOIN einheit ON einheit_id = einheit.id
JOIN mwst ON mwst_id = mwst.id
WHERE rech_id = $rechid ORDER BY posnr ASC") or $err=error("Fehler beim ermitteln der Artikeldaten<br />".mysqli_error($dbconn));
$artikel = array();
while($art=mysqli_fetch_assoc($qry))
{
$qry2=mysqli_query($dbconn,"SELECT bezeichn, wert, einheit, einheit_id
FROM tmp_eigensch
JOIN einheit ON einheit_id = einheit.id
WHERE art_id = '".$art["id"]."' ORDER BY posnr ASC") or $err=error("Fehler beim ermitteln der Eigenschaften<br />".mysqli_error($dbconn));
$eigenschaften = array();
while($eig=mysqli_fetch_assoc($qry2))
{
$eigenschaften[] = $eig;
}
$artikel[]=array("art"=>$art,"eig"=>$eigenschaften);
}
}
else
{
$qry=mysqli_query($dbconn,"SELECT artikel.bezeichn as bezeichn, preis, wanr, posnr, pagebreak, mwst AS artmwst, rabatt, rabatttyp, artikeltyp.bezeichn AS typ, typ_id, einheit, einheit_id, menge, angtyp, artikel.id as id
FROM artikel
JOIN artikeltyp ON typ_id = artikeltyp.id
JOIN einheit ON einheit_id = einheit.id
JOIN artikel_rechn ON artikel.id = art_id
JOIN mwst ON artmwst = mwst.id
WHERE rech_id = $rechid ORDER BY posnr ASC") or $err=error("Fehler beim ermitteln der Artikeldaten<br />".mysqli_error($dbconn));
$artikel = array();
while($art=mysqli_fetch_assoc($qry))
{
$qry2=mysqli_query($dbconn,"SELECT bezeichn, wert, einheit, einheit_id
FROM eigensch
JOIN einheit ON einheit_id = einheit.id
JOIN artikel_eigensch ON eigensch.id = eig_id
WHERE art_id = '".$art["id"]."' AND rech_id = '$rechid' AND artposnr = '".$art["posnr"]."' ORDER BY posnr ASC") or $err=error("Fehler beim ermitteln der Eigenschaften<br />".mysqli_error($dbconn));
$eigenschaften = array();
while($eig=mysqli_fetch_assoc($qry2))
{
$eigenschaften[] = $eig;
}
$artikel[]=array("art"=>$art,"eig"=>$eigenschaften);
}
}
return $artikel;
}
function makesksartikelarray($dbconn,$rechid)
{
$qry=mysqli_query($dbconn,"SELECT bezeichn1 as bezeichn, preis, rabatt, menge, id
FROM artikelsks
WHERE rechnr = '$rechid' ORDER BY pos ASC") or $err=error("Fehler beim ermitteln der SKS Artikeldaten<br />".mysqli_error($dbconn));
$artikel = array();
while($art=mysqli_fetch_assoc($qry))
{
$art["artmwst"] = 0;
$qry2=mysqli_query($dbconn,"SELECT bezeichn2 AS bezeichn
FROM artikelsks
WHERE id = '".$art["id"]."'") or $err=error("Fehler beim ermitteln der SKS Eigenschaften<br />".mysqli_error($dbconn));
$eigenschaften = array();
while($eig=mysqli_fetch_assoc($qry2))
{
$eigenschaften[] = $eig;
}
$artikel[]=array("art"=>$art,"eig"=>$eigenschaften);
}
return $artikel;
}
function saveRechnung($dbconn,$update)
{
$show = str_pad($_POST["show_firmaanr"],1,"0").str_pad($_POST["show_firma"],1,"0");
$show .= str_pad($_POST["show_anr"],1,"0").str_pad($_POST["show_titel"],1,"0");
$show .= str_pad($_POST["show_name"],1,"0");
$show .= str_pad($_POST["show_anr2"],1,"0").str_pad($_POST["show_titel2"],1,"0");
$show .= str_pad($_POST["show_name2"],1,"0").str_pad($_POST["show_str"],1,"0");
$show .= str_pad($_POST["show_ort"],1,"0").str_pad($_POST["show_land"],1,"0");
$show .= str_pad($_POST["show_zusatz"],1,"0");
$anr1 = trim($_POST["anr1"]);
$adrerw = trim($_POST["adresserweiterung"]);
$anr2 = trim($_POST["anr2"]);
$intro = trim($_POST["intro"]);
$outro = trim($_POST["outro"]);
$type = $_POST["type"];
$adressid = $_POST["adressid"];
$partnerid = $_POST["partnerid"];
$mwst = $_POST["mwst"];
$zahlziel = $_POST["zahlziel"];
$wahrung = $_POST["wahrung"];
$sub_mwst = $_POST["sub_mwst"];
$rabatt = $_POST["rabatt"];
$rabattdesc = $_POST["rabattdesc"];
$lieferdatum = trim($_POST["lieferdatum"]);
$buchKto = $_POST["buchKto"];
if($update)
{
$rechid=$update;
$undoqry=mysqli_query($dbconn,"SELECT * FROM rechnung WHERE id ='".mysqli_escape_string($dbconn,$update)."'") or $err=error("Fehler beim einholen der Informationen für die LOG<br />".mysqli_error($dbconn));
$undores=mysqli_fetch_assoc($undoqry);
if(!$err)
{
$querystr = "UPDATE rechnung SET
user_id = '".$_SESSION["user"]."',
adressfields='$show',
anrede1='$anr1',
anrede2='$anr2',
intro='$intro',
outro='$outro',
typ_id = '$type',
adresse_id='$adressid',
partner_id='$partnerid',
mwst_id = '$mwst',
zahlziel_id = '$zahlziel',
wahrung_id='$wahrung',
sub_mwst='$sub_mwst',
rabatt='$rabatt',
rabattdesc='$rabattdesc',
adresserweiterung='$adrerw',
lieferdatum='$lieferdatum',
buchungsKto_id='$buchKto',";
if($_POST["change_date"] == 1){
$querystr .= "datetime=NOW(),";
}
$querystr .= " changetime=NOW()
WHERE id = '".mysqli_escape_string($dbconn,$update)."'";
mysqli_query($dbconn,$querystr) or $err=error("Fehler beim aktualisieren der Rechnung<br />".mysqli_error($dbconn));
}
if(!$err)
{
$undoquerystr = "UPDATE rechnung SET
user_id = '".$undores["user_id"]."',
adressfields='".$undores["adressfields"]."',
anrede1='".$undores["anrede1"]."',
anrede2='".$undores["anrede2"]."',
intro='".$undores["intro"]."',
outro='".$undores["outro"]."',
typ_id = '".$undores["typ_id"]."',
adresse_id='".$undores["adresse_id"]."',
partner_id='".$undores["partner_id"]."',
mwst_id = '".$undores["mwst_id"]."',
zahlziel_id = '".$undores["zahlziel_id"]."',
wahrung_id='".$undores["wahrung_id"]."',
sub_mwst='".$undores["sub_mwst"]."',
rabatt='".$undores["rabatt"]."',
rabattdesc='".$undores["rabattdesc"]."',
adresserweiterung='".$undores["adresserweiterung"]."',
lieferdatum='".$undores["lieferdatum"]."',
buchungsKto_id='".$undores["buchungsKto_id"].",
changetime='".$undores["changetime"]."'
WHERE id = '".mysqli_escape_string($dbconn,$update)."'";
$err = saveLog($dbconn,$querystr." [rechnung change]",$undoquerystr,"ändern");
}
//delete ART-RECHN-LINKS
if(!$err)
{
$undoqry=mysqli_query($dbconn,"SELECT GROUP_CONCAT(art_id SEPARATOR ', ') AS art_id FROM artikel_rechn WHERE rech_id ='".mysqli_escape_string($dbconn,$update)."' GROUP BY rech_id") or $err=error("Fehler beim einholen der Verknüpfungen für die LOG<br />".mysqli_error($dbconn));
$undores=mysqli_fetch_assoc($undoqry);
}
if(!$err)
{
$querystr = "DELETE FROM artikel_rechn WHERE rech_id = '".mysqli_escape_string($dbconn,$update)."'";
mysqli_query($dbconn,$querystr) or $err=error("Fehler beim löschen der Verknüpfungen<br />".mysqli_error($dbconn));
}
if(!$err)
{
$undoquerystr = "INSERT INTO artikel_rechn SET rech_id = '".mysqli_escape_string($dbconn,$update)."', art_id='".$undores["art_id"]."'";
$err = saveLog($dbconn,$querystr." [rechnung change]",$undoquerystr,"löschen");
}
//delete ART-EIG-LINKS
if(!$err)
{
$undoqry=mysqli_query($dbconn,"SELECT GROUP_CONCAT(artposnr SEPARATOR ', ') AS artposnr, GROUP_CONCAT(art_id SEPARATOR ', ') AS art_id, GROUP_CONCAT(eig_id SEPARATOR ', ') AS eig_id FROM artikel_eigensch WHERE rech_id ='".mysqli_escape_string($dbconn,$update)."' GROUP BY rech_id") or $err=error("Fehler beim einholen der Verknüpfungen für die LOG<br />".mysqli_error($dbconn));
$undores=mysqli_fetch_assoc($undoqry);
}
if(!$err)
{
$querystr = "DELETE FROM artikel_eigensch WHERE rech_id = '".mysqli_escape_string($dbconn,$update)."'";
mysqli_query($dbconn,$querystr) or $err=error("Fehler beim löschen der Verknüpfungen<br />".mysqli_error($dbconn));
}
if(!$err)
{
$undoquerystr = "INSERT INTO artikel_eigensch SET artposnr = '".$undores["artposnr"]."', rech_id = '".mysqli_escape_string($dbconn,$update)."', art_id='".$undores["art_id"].", 'eig_id='".$undores["eig_id"]."'";
$err = saveLog($dbconn,$querystr." [rechnung change]",$undoquerystr,"löschen");
}
}
else
{
$qry=mysqli_query($dbconn,"SELECT rechnr FROM rechnr WHERE SUBSTRING(rechnr,1,8) = '".date("Ymd")."' AND typ_id = '$type' ORDER BY rechnr DESC LIMIT 1") or $err=error("Fehler beim ermitteln der Rechnungsnummer<br />".mysqli_error($dbconn));
if(mysqli_num_rows($qry) == 1)
{
$res=mysqli_fetch_assoc($qry);
$rechnr = $res["rechnr"];
if(substr($rechnr,8,2) < 99)
{
$rechnr = $rechnr+1;
$qry=mysqli_query($dbconn,"INSERT INTO rechnr SET rechnr = '$rechnr', typ_id = '$type'") or $err = error("Rechnungsnummer wurde nicht eingetragen...<br />".mysqli_error($dbconn));
}
else
{
$err=error("Es wurden bereits 99 Rechnungen heute geschrieben. Das rechnungsnummern-Format lässt nicht mehr Rechnungen pro tag zu...");
$rechnr = '';
}
}
else
{
$rechnr = date("Ymd")."01";
$qry=mysqli_query($dbconn,"INSERT INTO rechnr SET rechnr = '$rechnr', typ_id = '$type'") or $err = error("Rechnungsnummer wurde nicht eingetragen...<br />".mysqli_error($dbconn));
}
//echo "<br />".$rechnr;
//angebote rechnungen gutschriften bestätigungen A/R/G/ B2012.03.22-24
if(!$err)
{
$querystr = "INSERT INTO rechnung SET
user_id = '".$_SESSION["user"]."',
adressfields='$show',
anrede1='$anr1',
anrede2='$anr2',
intro='$intro',
outro='$outro',
typ_id = '$type',
adresse_id='$adressid',
partner_id='$partnerid',
mwst_id = '$mwst',
zahlziel_id = '$zahlziel',
wahrung_id='$wahrung',
sub_mwst='$sub_mwst',
rabatt='$rabatt',
rabattdesc='$rabattdesc',
datetime=NOW(),
lieferdatum='$lieferdatum',
adresserweiterung='$adrerw',
buchungsKto_id='$buchKto',
rechnr= '$rechnr'";
mysqli_query($dbconn,$querystr) or $err=error("Fehler beim einfügen der Rechnung<br />".mysqli_error($dbconn));
$rechid=mysqli_insert_id($dbconn);
}
if(!$err)
{
$undoquerystr = "DELETE FROM rechnung WHERE id = '".$rechid."'";
$err = saveLog($dbconn,$querystr." [rechnung add]",$undoquerystr,"anlegen");
}
}
if(!$err)
{
//check if artikel already exists
$i = 1;
while($_POST["arthead".$i] && !$err)
{
if($_POST["artact".$i])
{
$angtyp = trim($_POST["angtyp".$i]);
$arttyp = trim($_POST["arttyp".$i]);
$arthead = trim($_POST["arthead".$i]);
$artpr = str_replace(",",".",trim($_POST["artpr".$i]));
$artmen = str_replace(",",".",trim($_POST["artmen".$i]));
$artrab = trim($_POST["artrab".$i]);
$artrabtyp = trim($_POST["artrabtyp".$i]);
$artmeneinh = trim($_POST["artmeneinh".$i]);
$artwa = trim($_POST["artwa".$i]);
$artmwst = trim($_POST["artmwst".$i]);
$pagebreak = trim($_POST["pagebreak".$i]);
$qry = mysqli_query($dbconn, "SELECT id FROM artikel WHERE bezeichn=BINARY '$arthead' AND typ_id='$arttyp' AND einheit_id = '$artmeneinh'") or $err=error("Fehler beim ermitteln vorhandener Artikel <br />".mysqli_error($dbconn));
if($res=mysqli_fetch_assoc($qry))
{
$artid = $res["id"];
}
else
{
$querystr = "INSERT INTO artikel SET bezeichn='$arthead', typ_id='$arttyp', einheit_id = '$artmeneinh', datetime=NOW(), user_id = '".$_SESSION["user"]."'";
$qry = mysqli_query($dbconn, $querystr) or $err=error("Fehler beim erstellen neuer Artikel ($arteinh) <br />".mysqli_error($dbconn));
$artid = mysqli_insert_id($dbconn);
if(!$err)
{
$err = saveLog($dbconn,$querystr." [rechnung change]","DELETE FROM artikel WHERE id ='$artid'","anlegen");
}
}
if(!$err)
{
$querystr = "INSERT INTO artikel_rechn SET
angtyp = '$angtyp',
wanr = '$artwa',
menge = '$artmen',
rabatt = '$artrab',
posnr = '$i',
art_id = '$artid',
artmwst = '$artmwst',
rech_id = '$rechid',
rabatttyp = '$artrabtyp',
pagebreak = '$pagebreak',
preis = '$artpr'";
$qry = mysqli_query($dbconn, $querystr) or $err=error("Fehler beim erstellen der Artikel-Rechnung Beziehung <br />".mysqli_error($dbconn));
}
if(!$err)
{
//check if eigenschaften already exists
$ii = 1;
while($_POST["arteig".$i."_".$ii] && !$err)
{
$arteig = trim($_POST["arteig".$i."_".$ii]);
$artval = trim($_POST["artval".$i."_".$ii]);
$arteinh = trim($_POST["arteinh".$i."_".$ii]);
$qry = mysqli_query($dbconn, "SELECT id FROM eigensch WHERE bezeichn=BINARY '$arteig' AND wert='$artval' AND einheit_id='$arteinh'") or $err=error("Fehler beim ermitteln vorhandener Eigenschaften <br />".mysqli_error($dbconn));
if($res=mysqli_fetch_assoc($qry))
{
$eigid = $res["id"];
}
else
{
$querystr = "INSERT INTO eigensch SET bezeichn='$arteig', einheit_id='$arteinh', wert='$artval', datetime=NOW(), user_id = '".$_SESSION["user"]."'";
$qry = mysqli_query($dbconn, $querystr) or $err=error("Fehler beim erstellen neuer Eigenschaften ($arteinh) <br />".mysqli_error($dbconn));
$eigid = mysqli_insert_id($dbconn);
if(!$err)
{
$err = saveLog($dbconn,$querystr." [rechnung change]","DELETE FROM einh WHERE id ='$eigid'","anlegen");
}
}
if(!$err)
{
$qry = mysqli_query($dbconn, "INSERT INTO artikel_eigensch SET posnr='$ii', artposnr = '$i', rech_id='$rechid', eig_id='$eigid', art_id='$artid'") or $err=error("Fehler beim anlegen der Eigenschaften-Artikel-Beziehung <br />".mysqli_error($dbconn));
$eigid=mysqli_insert_id($dbconn);
$ii++;
}
}
}
}
$i++;
}
}
if(!$err)
{
$qry = mysqli_query($dbconn, "SELECT id FROM tmp_rechnung WHERE user_id = '".$_SESSION["user"]."' AND typ_id = '".$type."'") or $err=error("Fehler beim ermitteln der Temp Rechnung <br />".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$artqry = mysqli_query($dbconn, "SELECT id FROM tmp_artikel WHERE rech_id = '".$res["id"]."' ") or $err=error("Fehler beim ermitteln der Temp Artikel <br />".mysqli_error($dbconn));
while($artres=mysqli_fetch_assoc($artqry))
{
$delqry = mysqli_query($dbconn, "DELETE FROM tmp_eigensch WHERE art_id = '".$artres["id"]."' ") or $err=error("Fehler beim löschen der Temp Eigenschaften <br />".mysqli_error($dbconn));
}
$delqry = mysqli_query($dbconn, "DELETE FROM tmp_artikel WHERE rech_id = '".$res["id"]."' ") or $err=error("Fehler beim löschen der Temp Artikel <br />".mysqli_error($dbconn));
}
$qry = mysqli_query($dbconn, "DELETE FROM tmp_rechnung WHERE user_id = '".$_SESSION["user"]."' AND typ_id = '".$type."'") or $err=error("Fehler beim löschen der Temp Rechnung <br />".mysqli_error($dbconn));
}
else
{
$err = error("Es ist ein Fehler beim Speichern aufgetreten, <br />
Ihre Rechnung ist aber noch vorhanden, <br />
Bitte gehen Sie <a href='?action=rechnungadd&type=$type'>zurück zum Rechnungsformular</a> <br />
und wählen Sie in der auftauchenden Meldung die Schaltfläche <b>JA</b>");
}
return $err;
}
function delRechnung($dbconn,$id)
{
$qry= mysqli_query($dbconn, "DELETE FROM artikel_rechn WHERE rech_id = '".mysql_escape_string($id)."'") or $err=error("Fehler beim löschen der Artikel-Rechnung Beziehung <br />".mysqli_error($dbconn));
$qry= mysqli_query($dbconn, "DELETE FROM artikel_eigensch WHERE rech_id = '".mysql_escape_string($id)."'") or $err=error("Fehler beim löschen der Artikel-Eigenschaften Beziehung <br />".mysqli_error($dbconn));
$qry= mysqli_query($dbconn, "DELETE FROM rechnung WHERE id = '".mysql_escape_string($id)."' LIMIT 1") or $err=error("Fehler beim löschen der Rechnung <br />".mysqli_error($dbconn));
if(!$err)
{
$err = saveLog($dbconn,"DELETE FROM rechnung WHERE id = '".mysql_escape_string($id)."' LIMIT 1 [rechnung DEL]","","löschen");
}
return $err;
}
function changeRechAdr($dbconn,$id,$adrid)
{
$qry= mysqli_query($dbconn, "SELECT adresse_id, partner_id FROM rechnung WHERE id = '".mysqli_escape_string($dbconn,$id)."'") or $err=error("Fehler beim ermitteln der Rechnungsadresse für die LOG <br />".mysqli_error($dbconn));
$res=mysqli_fetch_assoc($qry);
if($res["adresse_id"])
{
$qry= mysqli_query($dbconn, "SELECT partner_id FROM adresse WHERE id = '".mysqli_escape_string($dbconn,$adrid)."'") or $err=error("Fehler beim ermitteln der Rechnungsadresse für die LOG <br />".mysqli_error($dbconn));
$res2=mysqli_fetch_assoc($qry);
$querystr="UPDATE rechnung SET adresse_id = '".mysqli_escape_string($dbconn,$adrid)."', partner_id = '".$res2["partner_id"]."' WHERE id = '".mysqli_escape_string($dbconn,$id)."'";
$undoquerystr="UPDATE rechnung SET adresse_id = '".$res["adresse_id"]."', partner_id = '".$res["partner_id"]."' WHERE id = '".mysqli_escape_string($dbconn,$id)."'";
$qry= mysqli_query($dbconn, $querystr) or $err=error("Fehler beim ändern der Rechnungsadresse <br />".mysqli_error($dbconn));
}
else
{
$err=error("Rechnung nicht gefunden!!");
}
if(!$err)
{
$err = saveLog($dbconn,$querystr." [rechnungsadr change]",$undoquerystr,"ändern");
}
return $err;
}
function copyRech($dbconn,$id,$adrid)
{
$qry=mysqli_query($dbconn,"SELECT rechnr FROM rechnr WHERE SUBSTRING(rechnr,1,8) = '".date("Ymd")."' ORDER BY rechnr DESC LIMIT 1") or $err=error("Fehler beim ermitteln der Rechnungsnummer<br />".mysqli_error($dbconn));
if(mysqli_num_rows($qry) == 1)
{
$res=mysqli_fetch_assoc($qry);
$rechnr = $res["rechnr"];
if(substr($rechnr,8,2) < 99)
{
$rechnr = $rechnr+1;
$qry=mysqli_query($dbconn,"INSERT INTO rechnr SET rechnr = '$rechnr'") or $err = error("Rechnungsnummer wurde nicht eingetragen...");
}
else
{
$err=error("Es wurden bereits 99 Rechnungen heute geschrieben. Das rechnungsnummern-Format lässt nicht mehr Rechnungen pro tag zu...");
$rechnr = '';
}
}
else
{
$rechnr = date("Ymd")."01";
$qry=mysqli_query($dbconn,"INSERT INTO rechnr SET rechnr = '$rechnr'") or $err = error("Rechnungsnummer wurde nicht eingetragen...");
}
if(!$err)
{
$qry= mysqli_query($dbconn, "SELECT partner_id FROM adresse WHERE id = '".mysqli_escape_string($dbconn,$adrid)."'") or $err=error("Fehler beim ermitteln der Adressdaten <br />".mysqli_error($dbconn));
$res=mysqli_fetch_assoc($qry);
$partnerid = $res["partner_id"];
$qry= mysqli_query($dbconn, "SELECT * FROM rechnung WHERE id = '".mysqli_escape_string($dbconn,$id)."'") or $err=error("Fehler beim ermitteln der Rechnungsdaten <br />".mysqli_error($dbconn));
$res=mysqli_fetch_assoc($qry);
$querystr = "INSERT INTO rechnung SET
adressfields = '".$res["adressfields"]."',
anrede1 = '".$res["anrede1"]."',
anrede2 = '".$res["anrede2"]."',
partner_id = '$partnerid',
mwst_id = '".$res["mwst_id"]."',
user_id = '".$_SESSION["user"]."',
typ_id = ".$res["typ_id"].",
zahlziel_id = '".$res["zahlziel_id"]."',
adresse_id = '".mysqli_escape_string($dbconn,$adrid)."',
wahrung_id = '".$res["wahrung_id"]."',
adresserweiterung = '".$res["adresserweiterung"]."',
datetime = NOW(),
intro = '".$res["intro"]."',
outro = '".$res["outro"]."',
rechnr = '".$rechnr."',
lieferdatum = '".$res["lieferdatum"]."',
buchungsKto_id = '".$res["buchungsKto_id"]."',
sub_mwst = '".$res["sub_mwst"]."'";
$qry= mysqli_query($dbconn, $querystr) or $err=error("Fehler beim Kopieren der Rechnungsdaten <br />".mysqli_error($dbconn));
$rechid = mysqli_insert_id($dbconn);
$undoquerystr = "DELETE FROM rechnung WHERE id = $rechid";
}
if(!$err)
{
$err = saveLog($dbconn,$querystr." [rechnung copy]",$undoquerystr,"anlegen");
}
if(!$err)
{
$qry= mysqli_query($dbconn, "SELECT * FROM artikel_rechn WHERE rech_id = '".mysqli_escape_string($dbconn,$id)."'") or $err=error("Fehler beim ermitteln der Artikel-Dokumentbeziehung <br />".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$querystr = "INSERT INTO artikel_rechn SET
art_id = '".$res["art_id"]."',
rech_id = '".$rechid."',
posnr = '".$res["posnr"]."',
rabatt = '".$res["rabatt"]."',
rabatttyp = '".$res["rabatttyp"]."',
menge = ".$res["menge"].",
preis = '".$res["preis"]."',
angtyp = '".$res["angtyp"]."',
artmwst = '".$res["artmwst"]."',
wanr = '".$res["wanr"]."',
pagebreak = '".$res["pagebreak"]."'";
mysqli_query($dbconn, $querystr) or $err=error("Fehler beim Kopieren der Dokument-Artikelbeziehnung <br />".mysqli_error($dbconn));
$art_rech_id = mysqli_insert_id($dbconn);
$undoquerystr = "DELETE FROM artikel_rechn WHERE id = $art_rech_id";
if(!$err)
{
$err = saveLog($dbconn,$querystr." [rechnung copy]",$undoquerystr,"anlegen");
}
}
}
if(!$err)
{
$qry= mysqli_query($dbconn, "SELECT * FROM artikel_eigensch WHERE rech_id = '".mysqli_escape_string($dbconn,$id)."'") or $err=error("Fehler beim ermitteln der Artikel-Eigenschaftenbeziehung <br />".mysqli_error($dbconn));
while($res=mysqli_fetch_assoc($qry))
{
$querystr = "INSERT INTO artikel_eigensch SET
art_id = '".$res["art_id"]."',
eig_id = '".$res["eig_id"]."',
rech_id = '".$rechid."',
posnr = '".$res["posnr"]."',
artposnr = '".$res["artposnr"]."'";
mysqli_query($dbconn, $querystr) or $err=error("Fehler beim Kopieren der Artikel-Eigenschaftenbeziehung <br />".mysqli_error($dbconn));
$art_eig_id = mysqli_insert_id($dbconn);
$undoquerystr = "DELETE FROM artikel_eigensch WHERE id = $art_eig_id";
if(!$err)
{
$err = saveLog($dbconn,$querystr." [rechnung copy]",$undoquerystr,"anlegen");
}
}
}
return $err;
}
function calculateRechnungsSum($dbconn, $rechid, $inclmwst)
{
$qry = mysqli_query($dbconn, "SELECT mwst, rabatt, sub_mwst, sks, rabatt FROM rechnung JOIN mwst ON mwst.id = mwst_id WHERE rechnung.id ='".$rechid."'");
$res = mysqli_fetch_assoc($qry);
if($res["sks"] == 1)
{
$qry = mysqli_query($dbconn,"SELECT menge, preis, '19' AS artmwst FROM artikelsks WHERE rechnr = '".$rechid."'");
}
else {
$qry = mysqli_query($dbconn,"SELECT rabatt AS artrabatt, menge, preis, mwst AS artmwst, artikel_rechn.id AS id FROM artikel_rechn JOIN mwst ON artikel_rechn.artmwst = mwst.id WHERE rech_id = '".$rechid."'");
}
$sum = Array();
$mixedmwst = 0;
while($artres = mysqli_fetch_assoc($qry))
{
if($artres["artmwst"] > 0 && $artres["artmwst"] != 999 && $artres["artmwst"] != $res["mwst"])
{
$mixedmwst = 1;
break;
}
if($artres["artmwst"] == 999 || !$artres["artmwst"])
$artres["artmwst"] = $res["mwst"];
$artmwst=$artres["artmwst"];
if($res["sub_mwst"])
$artres["preis"] = round(100*$artres["preis"]/(100+$artmwst),2);
//if($artres["artmwst"] == 999)
// $artres["artmwst"] = $res["mwst"];
//if($res["sub_mwst"])
// $artres["preis"] = round((100*$artres["preis"])/(100+$artres["artmwst"]),2,PHP_ROUND_HALF_UP);
//if($inclmwst)
// $artres["preis"] = round((100+$artres["artmwst"])*$artres["preis"]/(100),2,PHP_ROUND_HALF_UP);
//$sum += round($artres["menge"] * $artres["preis"] * (1 - ($artres["artrabatt"]/100)),2,PHP_ROUND_HALF_UP);
if($artres["artrabatt"])
{
$sum[$artres["artmwst"]] += round(-1*$artres["preis"]*$artres["menge"]*($artres["artrabatt"]/100),2);
}
$sum[$artres["artmwst"]] += $artres["preis"]*$artres["menge"];
//if($artres["artmwst"] != 19){
// echo "Mwst: ".$artres["artmwst"]." ID: ".$artres["id"]."<br />";
// }
}
if($mixedmwst == 0 && $res["mwst"] == 0)
{
//RABATT
if ($res["rabatt"] != "0") {
$multi=$res["rabatt"]/100;
foreach($sum AS $mwst => $ubertr_mwst)
{
$sum[$mwst]=$sum[$mwst]-$sum[$mwst]*$multi;
}
}
//Mwst ausweisen
$sum_all = 0;
foreach($sum as $mwst => $ubertr_mwst){
if($inclmwst){
$sum_all += $ubertr_mwst*((100+$mwst)/100);
}
else{
$sum_all += $ubertr_mwst;
}
}
}
else
{
$multi=$res["rabatt"]/100;
foreach($sum AS $mwst => $ubertr_mwst)
{
$sum[$mwst]= round($sum[$mwst]-$sum[$mwst]*$multi,2);
}
//foreach($sum AS $mwst => $ubertr_mwst)
//{
// $multi=$mwst/100;
// $sum[$mwst] = $sum[$mwst]+round($sum[$mwst]*$multi,2);
//}
$sum_all = 0;
foreach($sum as $mwst => $ubertr_mwst){
if($inclmwst){
$sum_all += $ubertr_mwst*((100+$mwst)/100);
}
else{
$sum_all += $ubertr_mwst;
}
}
//foreach($sum as $ubertr_mwst)
// $sum_all += $ubertr_mwst;
}
return round($sum_all,2);
}
?>