Subversion-Projekte lars-tiefland.content-management

Revision

Revision 1 | Blame | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

<?php

    // $Id: rechnung.php 4255 2012-03-29 09:59:11Z erling $
    session_start();

    require_once "connect2.php";


    require_once "includes/bestellungen/system/mysql_query_logged.php";
    require_once "Weban_Smarty.class.php";

    require_once "module/functions.common.php";
    require_once "includes/rechnung/rechnungsbuch.function.php";
    require_once "includes/bestellungen/system/artikelDatabase.php";
    /**
     * Funktionen der Lagerwirtschaft.
     */
    require_once '../includes/system/functions.lagerwirtschaft.php';

    require_once "fpdf/fpdf.php";


    $GLOBALS["ui"] = new Weban_Smarty();
    $GLOBALS["ui"]->compile_dir = $_SERVER["DOCUMENT_ROOT"] . "/templates_c/";
    $GLOBALS["ui"]->compile_id = "Warenwirtschaft|rechnungen";
    $GLOBALS["ui"]->use_sub_dirs = true;

    $errorIds = array();

    $show_prepage = 0;

    // ME: bei Einzelrechnung die b_id speichern
    if ( $_GET['b_id'] )
    {
        $b_id = $_GET['b_id'];
    }
    elseif ( $_POST["b_id"] )
    {
        $b_id = $_POST["b_id"];
    }
    else // bei Massendruck die erste übergebene b_id speichern
    {
        $b_id = $_POST['chk_bestellung'][0];
    }

    // ME: Soll der Kunde das Rechnungsdatum auf der Vorschaltseite ändern können?
    if ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["abw_rechnungsdatum"] ) )
    {
        $GLOBALS["ui"]->assign( "rechnungsdatum_aendern", true );
    }

    // ME: Soll der Kunde das Leistungsdatum auf der Vorschaltseite ändern können?
    if ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["abw_lieferdatum"] ) )
    {
        $GLOBALS["ui"]->assign( "leistungsdatum_aendern", true );
    }

    // ME: Webrecht und Userrecht für Gutschriften gesetzt?
    $GLOBALS["ui"]->assign( "gutschriftoption", 0 );
    if ( ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["gutschriftoption"] ) ) and
        ( isset( $user_rechte["Warenwirtschaft"]["bestellung"]["gutschriftoption"] ) ) )
    {
        $GLOBALS["ui"]->assign( "gutschriftoption", 1 );
    }

    // ME: Bestandsminderung? Muss in Kombination mit Rechnungsbausteinen eingebaut werden, damit dasselbe Template genutzt werden kann!
    if ( isset( $web_rechte['Warenwirtschaft']['lagerwirtschaft']['minderungsunterdrueckung'] ) )
    {
        $GLOBALS["ui"]->assign( "minderungsunterdrueckung", true );

    }

    $sql = "SELECT 
            bestellart_id,
            shops_ID
        FROM
            Bestellung
        WHERE
            ID = " . $b_id . " 
    ";

    if ( $q = mysql_query( $sql ) )
    {
        if ( $r = mysql_fetch_assoc( $q ) )
        {
        }
    }

    // wenn der filter bestellart gesetzt ist.
    if ( isset( $_SESSION['filter']['bestellart_id'] ) )
    {
        // bestellart_id gesetzt?
        if ( $_SESSION['filter']['bestellart_id'] )
        {
            // wenn ja, bestellart_id nehmen und weiter..
            $bestellart_id = $_SESSION['filter']['bestellart_id'];
        }
        else
        {
            // wenn nein, dann die bestellart_id über die erste Bestellung ermitteln
            $bestellart_id = $r['bestellart_id'];
        }
    }
    // wenn der filter shopID gesetzt ist.
    if ( isset( $_SESSION['filter']['shopID'] ) )
    {
        // shopID gesetzt?
        if ( $_SESSION['filter']['shopID'] )
        {
            // wenn ja, shopID nehmen und weiter..
            $GLOBALS["shops_ID"] = $_SESSION['filter']['shopID'];
        }
        else
        {
            // wenn nein, dann die shopID über die erste Bestellung ermitteln
            $GLOBALS["shops_ID"] = $r['shops_ID'];
        }
    }

    unset( $r );

    // Rechnungsbausteine?
    if ( ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["rechnungsbausteine"] ) and
        ( !$_POST['action'] ) ) or ( isset( $web_rechte['Warenwirtschaft']['lagerwirtschaft']['minderungsunterdrueckung'] ) and
        ( !$_POST['action'] ) ) )
    {

        $bausteinIDs = explode( ";", $web_rechte["Warenwirtschaft"]["bestellung"]["rechnungsbausteine"] );
        $bausteine_ids = implode( " OR ID=", $bausteinIDs );


        // gibt es das Feld bestellart_id?
        $wcl = "";
        $result = mysql_query( "SHOW COLUMNS FROM web_settings" );
        if ( !$result )
        {
            echo 'Abfrage konnte nicht ausgeführt werden: ' . mysql_error();
            //exit;
        }

        if ( mysql_num_rows( $result ) > 0 )
        {
            while ( $row = mysql_fetch_assoc( $result ) )
            {
                if ( is_array( $row ) )
                {
                    foreach ( $row as $key => $value )
                    {
                        if ( $value == "bestellart_id" )
                        {
                            $wcl .= " AND bestellart_id = " . $bestellart_id .
                                " ";
                        }
                        if ( $value == "shops_ID" )
                        {
                            $wcl .= " AND shops_ID = " . $GLOBALS["shops_ID"] .
                                " ";
                        }
                    }
                }
            }
        }

        // die Texte zu den Bausteinen ermitteln, wenn es bausteine gibt..
        $bausteine = array();
        if ( $bausteine_ids )
        {


            $sql_b = "SELECT * FROM Bestellung WHERE ID=$b_id";
            $res_b = mysql_query_logged( $sql_b );
            $row_b = mysql_fetch_assoc( $res_b );

            $sql = "SELECT 
                        *
                    FROM 
                        web_settings
                    WHERE 
                        ID=" . $bausteine_ids . "
                        " . $wcl . "
                    ORDER BY 
                        Rang";

            if ( $q = mysql_query( $sql ) )
            {
                $row_b["kk_info"] = unserialize( $row_b["kk_info"] );
                while ( $r = mysql_fetch_assoc( $q ) )
                {
                    $billsafesumme = $row_b["gesamtsumme_buffer"];

                    $billsafetxn = $row_b["kk_info"]["code"];
                    $billsafedate = date( "d.m.Y", strtotime( "14 days" ) );
                    @eval( "\$rbaustein_int=\"" . addslashes( $r['Inhalt'] ) . "\";" );

                    $bausteine[$r['ID']] = $rbaustein_int;
                }
            }
        }

        $GLOBALS["ui"]->assign( "b_id", $b_id );
        $GLOBALS["ui"]->assign( "bausteine", $bausteine );

        $show_prepage++;
        $GLOBALS["ui"]->assign( "rechnungsbausteine", true );

    }

    // ME: START Soll 'Rechnung bezahlt' auf der Vorschaltseite angezeigt werden?
    if ( isset( $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnung_bezahlt"] ) )
    {
        if ( isset( $user_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnung_bezahlt"] ) )
        {
            $show_prepage++;
            $GLOBALS["ui"]->assign( "show_rechnung_bezahlt", 1 );
            if ( strstr( $user_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnung_bezahlt"],
                ";" ) )
            {
                $bezahlt_values = explode( ";", $user_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnung_bezahlt"] );
            }
            else
            {
                $bezahlt_values = trim( $user_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnung_bezahlt"] );
            }

            // den bezahlstatus der Bestellung holen
            $sql = "select bezahlt from Bestellung where ID=$b_id";
            $q = mysql_query( $sql );
            if ( $r = mysql_fetch_assoc( $q ) )
            {
                $GLOBALS["ui"]->assign( "bezahlt", $r['bezahlt'] );
                $GLOBALS["ui"]->assign( "bestellung_bezahlt", $r['bezahlt'] );
            }

            // die aktuelle Versandart zur Bestellung holen
            $sql = "SELECT
                        a.*,
                        ab.*,
                        z.interner_name
                    FROM
                        artikel_to_Bestellung ab,
                        artikel a,
                        zahlungsarten z
                    WHERE
                        ab.Bestellung=$b_id
                    AND
                        ab.`status` != 'storniert'
                    AND
                        a.Father=-3
                    AND 
                        a.ID = ab.artikel
                    AND
                        a.short_line_1 = z.interner_name
            ";

            if ( $q = mysql_query( $sql ) )
            {
                while ( $r = mysql_fetch_assoc( $q ) )
                {
                    // Prüfen, ob für die Versandart der interne Name (zahlungsarten) übereinstimmt
                    if ( is_array( $bezahlt_values ) )
                    {
                        foreach ( $bezahlt_values as $key => $val )
                        {
                            if ( stristr( $r['interner_name'], $val ) )
                            {
                                $GLOBALS["ui"]->assign( "bezahlt", 1 );
                                $GLOBALS["ui"]->assign( "rechnung_bezahlt",
                                    "Rechnung bezahlt (" . $val . ")" );
                            }
                        }
                    }
                    else
                    {
                        if ( stristr( $bezahlt_values, $r['interner_name'] ) )
                        {
                            $GLOBALS["ui"]->assign( "bezahlt", 1 );
                            $GLOBALS["ui"]->assign( "rechnung_bezahlt",
                                "Rechnung bezahlt (" . $bezahlt_values . ")" );
                        }
                    }
                }
            }
            $GLOBALS["ui"]->assign( "bezahlt_values", $bezahlt_values );
        }
    }
    // ME: ENDE Soll 'Rechnung bezahlt' auf der Vorschaltseite angezeigt werden?


    // die FPDF Class erweitern (PDF)
    class PDF extends FPDF
    {
        function generate_LN( $bestell_id, $art, $Nummernkreis )
        {
            global $web_rechte;
            if ( $Nummernkreis )
            {
                if ( isset( $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnungsnrtrennung"] ) )
                {
                    $sql_re = "SELECT
                                re_short
                            FROM
                                shops
                            WHERE
                                ID=" . $GLOBALS["shops_ID"] . "
                        ";
                    $res_re = mysql_query( $sql_re );
                    $row_re = mysql_fetch_assoc( $res_re );
                    $re_short = $row_re["re_short"];
                }
                $sql = "SELECT 
                            l_nr AS ln 
                        FROM 
                            nummernkreis_rechnung 
                        WHERE 
                            jahr=" . date( "Y" );
                if ( isset( $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnungsnrtrennung"] ) )
                {
                    $sql .= "
                            AND
                                re_short='$re_short'
                        ";
                }
                $res = mysql_query_logged( $sql );
                if ( $res )
                {
                    if ( mysql_num_rows( $res ) )
                    {
                        $row = mysql_fetch_assoc( $res );
                        $ln = $row["ln"];
                        $ln++;
                    }
                    else
                    {
                        $ln = 1;
                        $sql = "
                                INSERT INTO 
                                    nummernkreis_rechnung 
                                (
                                    l_nr,
                            ";
                        if ( isset( $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnungsnrtrennung"] ) )
                        {
                            $sql .= "
                                    re_short,
                            ";
                        }
                        $sql .= "
                                    jahr
                                ) 
                                VALUES
                                ( 
                                    $ln,
                                ";
                        if ( isset( $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnungsnrtrennung"] ) )
                        {
                            $sql .= "
                                    '" . $re_short . "',
                                ";
                        }
                        $sql .= "
                                    " . date( "Y" ) . "
                                )
                            ";
                        mysql_query_logged( $sql );
                    }
                }
                else
                {
                    $ln = 1;
                }
                $sql = "
                        UPDATE 
                            nummernkreis_rechnung 
                        SET 
                            l_nr=" . $ln . " 
                        WHERE 
                            jahr=" . date( "Y" ) . "
                    ";
                if ( isset( $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnungsnrtrennung"] ) )
                {
                    $sql .= "
                            AND
                                re_short='$re_short'           
                        ";
                }
                mysql_query_logged( $sql );
            }
            else
            {
                $date = date( "Y-m-d" );
                $f_name = $art . "_" . $bestell_id . "_" . $date;
                $sql = "SELECT
                                MAX(document) AS dokument
                            FROM
                                dokumente
                            WHERE
                                document
                            LIKE
                                '$f_name%'
                        ";
                $res = mysql_query( $sql );
                if ( $res )
                {
                    if ( mysql_num_rows( $res ) )
                    {
                        $row = mysql_fetch_assoc( $res );
                        $dokument = substr( $row["dokument"], 0, strlen( $row["dokument"] ) -
                            4 );
                        $dokument = explode( "_", $dokument );
                        $ln = $dokument[count( $dokument ) - 1];
                        $ln++;
                    }
                    else
                    {
                        $ln = 1;
                    }
                }
                else
                {
                    $ln = 1;
                    die( mysql_error() );
                }
            }
            return $ln;
        }
        //Page header
        function Header()
        {
            global $site, $r_nr, $Einzug;

            $h_file = "includes/rechnung/header_" . $site . "_" . $GLOBALS["shops_ID"] .
                ".inc.php";

            if ( file_exists( $h_file ) )
            {

                require ( $h_file );
            }
            else
            {
                require ( "includes/rechnung/header_" . $site . ".inc.php" );
            }
        }

        //Page footer
        function Footer()
        {
            global $site, $Einzug;

            if ( file_exists( "includes/rechnung/footer_" . $site . "_" . $GLOBALS["shops_ID"] .
                ".inc.php" ) )
            {
                require ( "includes/rechnung/footer_" . $site . "_" . $GLOBALS["shops_ID"] .
                    ".inc.php" );
            }
            else
            {
                require ( "includes/rechnung/footer_" . $site . ".inc.php" );
            }
        }

        function NbLines( $w, $txt )
        {
            //Computes the number of lines a MultiCell of width w will take
            $cw = &$this->CurrentFont['cw'];
            if ( $w == 0 )
                $w = $this->w - $this->rMargin - $this->x;
            $wmax = ( $w - 2 * $this->cMargin ) * 1000 / $this->FontSize;
            $s = str_replace( "\r", '', $txt );
            $nb = strlen( $s );
            if ( $nb > 0 and $s[$nb - 1] == "\n" )
                $nb--;
            $sep = -1;
            $i = 0;
            $j = 0;
            $l = 0;
            $nl = 1;
            while ( $i < $nb )
            {
                $c = $s[$i];
                if ( $c == "\n" )
                {
                    $i++;
                    $sep = -1;
                    $j = $i;
                    $l = 0;
                    $nl++;
                    continue;
                }
                if ( $c == ' ' )
                    $sep = $i;
                $l += $cw[$c];
                if ( $l > $wmax )
                {
                    if ( $sep == -1 )
                    {
                        if ( $i == $j )
                            $i++;
                    }
                    else
                        $i = $sep + 1;
                    $sep = -1;
                    $j = $i;
                    $l = 0;
                    $nl++;
                }
                else
                    $i++;
            }
            return $nl;
        }
    }



    // ME: wurde die Seite über Massenrechnungsdruck aufgerufen?
    if ( is_array( $_POST['chk_bestellung'] ) && $_POST['action'] !=
        "genMultiPDF" )
    {
        unset( $_POST['b_id'] );
        // dann erstmal die Vorschaltseite anzeigen und die action entsprechend ändern
        $GLOBALS["ui"]->assign( "chk_bestellung", $_POST['chk_bestellung'] );
        $GLOBALS["ui"]->assign( "action", "genMultiPDF" );
        $GLOBALS["ui"]->display( "rechnung_prepage.tpl" );
    }
    else
    {
        // Wenn nein, wird die Funktion normal aufgerufen
        $GLOBALS["ui"]->assign( "action", "genPDF" );
        print_Rechnung( $b_id );
    }

    // Massendruck: nach der Vorschaltseite gehts hier weiter durch alle Bestellungen
    if ( $_POST['action'] == "genMultiPDF" )
    {
        unset( $_POST['b_id'] );
        $_POST['action'] = "genPDF";
        foreach ( $_POST['chk_bestellung'] as $key => $b_id )
        {
            $f_name = print_Rechnung( $b_id );
            if ( !file_exists( $webs['verzeichnis'] .
                "/images/dokumente/combine" ) )
            {
                mkdir( $webs['verzeichnis'] . "/images/dokumente/combine" );
            }
            copy( $webs['verzeichnis'] . "/images/dokumente/" . $f_name, $webs['verzeichnis'] .
                "/images/dokumente/combine/$f_name" );
        }
        $tmp_name = "combined_" . Text_Password::create( 32, "unpronouncable" ) .
            ".pdf";
        $cmd = "cd " . $webs['verzeichnis'] .
            "/images/dokumente/combine/; mbtPdfAsm -MR*.pdf -d" . $tmp_name .
            ";rm R*.pdf";
        exec( $cmd, $out );
        $loc = "http://www." . $site_full . "/images/dokumente/combine/$tmp_name";
        //echo $loc;
        header( "Location: $loc" );
        if ( count( $errorIds ) )
        {
            $ids = implode( ", ", $errorIds );
            echo "Fehler beim Erstellen der Rechnung in Bestellungen: " . $ids;
        }
    }

    ////////////////////////////////////////////
    // Beginn der Hauptfunktion print_Rechnung
    ////////////////////////////////////////////
    function print_Rechnung( $b_id )
    {
        global $errorIds;
        global $web_rechte;
        global $user_rechte;
        global $site;
        global $webs;
        global $show_prepage;
        
        global $localhost_dbh;


        if ( $b_id )
        {
            $GLOBALS["ui"]->assign( "b_id", $b_id );
        }

        $zz_text = null;
        $mass_print = 0;

        // ME: wurde die Seite über Massenrechnungsdruck aufgerufen?
        if ( is_array( $_POST['chk_bestellung'] ) )
        {
            $mass_print = 1;
        }

        // ME: START Vorbereitung der Ausgabe des Zahlungsziels auf der Rechnung
        if ( isset( $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["zahlungsziel"] ) )
        {
            if ( $_POST['action'] == "genPDF" )
            {
                if ( $_POST['zahlungsziel'] )
                {
                    $sql = "select * from zahlungsziele where id=" . $_POST['zahlungsziel'] .
                        "";
                    if ( $q = mysql_query( $sql ) )
                    {
                        if ( $r = mysql_fetch_assoc( $q ) )
                        {
                            $zieltage = date( 'd.m.Y', strtotime( '+' . $r['zieltage'] .
                                ' days' ) );
                            $serArr['ziel'] = strtotime( '+' . $r['zieltage'] .
                                ' days' );


                            if ( $r['skonto1'] > 0 )
                            {
                                $skonto1 = $r['skonto1'];
                                $serArr['skonto1'] = $skonto1;
                            }
                            if ( $r['zieltageskonto1'] > 0 )
                            {
                                $zieltageskonto1 = date( 'd.m.Y', strtotime( '+' .
                                    $r['zieltageskonto1'] . ' days' ) );
                                $serArr['zielskonto1'] = strtotime( '+' . $r['zieltageskonto1'] .
                                    ' days' );
                            }

                            if ( $r['skonto2'] > 0 )
                            {
                                $skonto2 = $r['skonto2'];
                                $serArr['skonto2'] = $skonto2;
                            }
                            if ( $r['zieltageskonto2'] > 0 )
                            {
                                $zieltageskonto2 = date( 'd.m.Y', strtotime( '+' .
                                    $r['zieltageskonto2'] . ' days' ) );
                                $serArr['zielskonto2'] = strtotime( '+' . $r['zieltageskonto2'] .
                                    ' days' );
                            }
                            @eval( "\$rechnungsbaustein_int=\"" . addslashes( $r["rechnungsbaustein"] ) .
                                "\";" );

                            $zz_text = $rechnungsbaustein_int;

                        }
                    }
                }
            }
        }

        if ( $_POST['rechnung_bezahlt'] )
        {
            $zz_text = "Betrag lt. Kassenbeleg dankend erhalten.";
        }
        // ME: ENDE Vorbereitung der Ausgabe des Zahlungsziels auf der Rechnung




        // ME: soll die Rechnung als Gutschrift ausgegeben werden?
        $gutschrift = 0;
        if ( isset( $_POST['gutschrift'] ) )
        {
            $gutschrift = 1;
        }


        // START PRÜFUNG ARTIKEL FÜR RECHNUNGSDRUCK!
        // ME: hier muss geprüft werden, ob mind. ein Artikel für den Rechnungsdruck ausgewählt wurde.
        // Wenn nicht, gibts ne Fehlermeldung!
        $sql = "SELECT 
                    ab.*    
                FROM 
                    artikel_to_Bestellung ab
                LEFT OUTER JOIN
                    artikel a
                ON
                    a.ID=ab.artikel 
                WHERE 
                    Bestellung=$b_id 
                AND 
                    ab.`status` != 'storniert'
        ";

        if ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["artikel_sortieren"] ) )
        {
            $sql .= "
                ORDER BY
                    ab.Rang,
                    Father desc,
                    a.kennung
            ";
        }
        else
        {
            $sql .= "
                ORDER BY
                    Father desc,
                    a.kennung
            ";
        }

        $r_schreiben = 0;
        if ( $q = mysql_query( $sql ) )
        {
            while ( $r = mysql_fetch_assoc( $q ) )
            {
                if ( $r['rechnungStatus'] == 'schreiben' )
                {
                    $r_schreiben++;
                }
            }
        }
        else
        {
            echo mysql_error();
        }

        if ( $r_schreiben == 0 )
        {
            if ( $mass_print == 1 )
            {
                $errorIds[] = $b_id;
                return true;
            }
            else
            {
                die( "<div style=\"font-size:0.8em;padding:10px;width:300px;border:1px solid #ccc;font-family:arial,helvetica,sans-serif;\"><h1 style=\"font-size:1em;\">Fehler!</h1><p>Sie müssen den Rechnungsstatus für mind. einen Artikel auf 'schreiben' setzen!</p><p><a href=\"javascript:window.close();\">Fenster schliessen</a></p></div>" );
            }

        }
        // ENDE PRÜFUNG ARTIKEL FÜR RECHNUNGSDRUCK!


        // Rechnungsbausteine?
        $sql_b = "SELECT * FROM Bestellung WHERE ID=$b_id";


        $res_b = mysql_query_logged( $sql_b );
        $row_b = mysql_fetch_assoc( $res_b );

        $bestellart_id = $row_b['bestellart_id'];
        $shops_ID = $row_b['shops_ID'];
        $b_name = $row_b["letzte_Aenderung_von"];
        $b_name = substr( $b_name, 0, strpos( $b_name, "@" ) );
        $dat = datetime2human( $row_b["letzte_Aenderung_am"] );
        $sql_l = "SELECT * FROM Logins WHERE ID=" . $row_b["Login"];
        $res_l = mysql_query_logged( $sql_l );
        $row_l = mysql_fetch_assoc( $res_l );
        $name = ( $row_l["Vorname"] ) ? $row_l["Vorname"] . " " . $row_l['Name1'] :
            $row_l["Name1"];

        /**
         *  Wenn Nettoberechnung nicht gesetzt ist (bei Logins),
         * und beim Kunden das Recht gesetzt ist,
         * oder das Webrecht garnicht existiert, 
         * werden Bruttopreise angezeigt
         */
        $showBruttoPreis = 1;
        if ( ( isset( $web_rechte['logins']['admin']['nettoberechnung'] ) == 1 &&
            $row_l['nettoberechnung'] == "on" ) || ( isset( $web_rechte['logins']['admin']['nettoberechnung'] ) !=
            1 ) )
        {
            $showBruttoPreis = 0;
        }
        if ( isset( $web_rechte['Warenwirtschaft']['bestellung']['abw_lieferdatum'] ) )
        {
            define( 'LEISTUNGS_DATUM', true );
        }
        if ( file_exists( "includes/rechnung/body_" . $site . "_" . $shops_ID .
            ".inc.php" ) )
        {
            require ( "includes/rechnung/body_" . $site . "_" . $shops_ID .
                ".inc.php" );
        }
        else
        {
            require "includes/rechnung/body_" . $site . ".inc.php";
        }

        if ( $Einzug_rechts )
        {
            $Einzug = $Einzug_rechts;
        }
        else
        {
            $Einzug = 10;
        }

        if ( !defined( "BEMERKUNG2_DRUCKEN" ) )
        {
            define( "BEMERKUNG2_DRUCKEN", true );
        }
        if ( !defined( "LEISTUNGS_DATUM" ) )
        {
            define( "LEISTUNGS_DATUM", false );
        }

        // ME: Anrede in der richtigen Sprache
        $anrede = $row_l["Anrede"];
        if ( $row_l['Land'] == "Nederland" )
        {
            switch ( $row_l['Anrede'] )
            {
                case "Herr":
                    $anrede = "Heer";
                    break;
                case "Frau":
                    $anrede = "Mevrouw";
                    break;
                default:
                    $anrede = "Heer";
                    break;
            }
        }

        $plz = $row_l["PLZ"];
        $ort = $row_l["ORT"];
        $str = $row_l["Strasse"];
        $str .= ( isset( $row_l["Hausnummer"] ) ) ? " " . $row_l["Hausnummer"] :
            "";
        $iso_land = getIsoCode( $row_l['Land'], 2 );
        $firma = ( isset( $row_l["Name2"] ) ) ? $row_l["Name2"] : "";
        $mwst_befreiung = $row_l["mwst_befreiung"];
        $ustid_nr = $row_l["ustid_nr"];

        if ( !$b_id )
        {
            if ( $_GET["b_id"] )
            {
                $b_id = ( int )$_GET["b_id"];
            }
            elseif ( $_POST["b_id"] )
            {
                $b_id = ( int )$_POST["b_id"];
            }
            else
            {
                die( "Keine Bestellung angegeben!" );
            }
        }

        // Standard-Zahlungsziel? START
        if ( isset( $web_rechte["logins"]["admin"]["zahlungsziel"] ) )
        {
            // alle Zahlungsziele holen
            $sql = "select 
                        *
                    from
                        zahlungsziele 
                    order by 
                        name
                    ";


            if ( $q = mysql_query( $sql ) )
            {
                while ( $r = mysql_fetch_assoc( $q ) )
                {
                    $zieltage = date( 'd.m.Y', strtotime( '+' . $r['zieltage'] .
                        ' days' ) );

                    $skonto1 = $r['skonto1'];
                    $zieltageskonto1 = date( 'd.m.Y', strtotime( '+' . $r['zieltageskonto1'] .
                        ' days' ) );
                    if ( $skonto1 > 0 )
                    {
                        $skontobetrag1 = money_format( $summe_b['total'] - ( $summe_b['total'] *
                            ( $skonto1 / 100 ) ), 2 );
                    }

                    $skonto2 = $r['skonto2'];
                    $zieltageskonto2 = date( 'd.m.Y', strtotime( '+' . $r['zieltageskonto2'] .
                        ' days' ) );
                    if ( $skonto2 > 0 )
                    {
                        $skontobetrag2 = money_format( $summe_b['total'] - ( $summe_b['total'] *
                            ( $skonto2 / 100 ) ), 2 );
                    }


                    @eval( "\$rechnungsbaustein_int=\"" . addslashes( $r["rechnungsbaustein"] ) .
                        "\";" );
                    $r["rechnungsbaustein_int"] = $rechnungsbaustein_int;
                    $zziele[] = $r;
                }
            }
            $GLOBALS["ui"]->assign( "zziele", $zziele );

            // gibt es für den User ein Zahlungsziel?
            $sql = "select
                        l.zahlungsziele_id
                        
                    from
                        Bestellung b,
                        Logins l
                    where 
                        b.Login = l.ID
                    and
                        b.ID = " . $b_id . "
            ";

            if ( $q = mysql_query( $sql ) )
            {
                if ( $r = mysql_fetch_assoc( $q ) )
                {
                    $GLOBALS["ui"]->assign( "zID", $r['zahlungsziele_id'] );
                }
            }

            $GLOBALS["ui"]->assign( "zahlungsziel", "true" );
            $show_prepage++;
        }

        // Standard-Zahlungsziel? ENDE




        // ggf. wird die Vorschaltseite ausgegeben
        if ( $show_prepage > 0 and !$_POST['action'] )
        {
            $GLOBALS["ui"]->display( "rechnung_prepage.tpl" );
        }

        if ( ( $show_prepage == 0 ) or ( $_POST['action'] == "genPDF" ) )
        {

            //Instanciation of inherited class
            $showLieferadresse = 0;
            $pdf = new PDF();

            if ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["rechnung"] ) )
            {
                $Status = false;
                $Nummernkreis = false;
                $Speichern = false;

                $daten = explode( ";", $web_rechte["Warenwirtschaft"]["bestellung"]["rechnung"] );


                $id = array_search( "Status", $daten );
                if ( $id !== false )
                {
                    $Status = true;
                }
                $id = array_search( "Nummernkreis", $daten );
                if ( $id !== false )
                {
                    $Nummernkreis = true;
                    if ( !isset( $anz_stellen ) )
                    {
                        $anz_stellen = 5;
                    }
                    $r_nr = sprintf( "%0" . $anz_stellen . "d", $pdf->
                        generate_LN( $b_id, "R", true ) );
                    if ( isset( $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnungsnrtrennung"] ) )
                    {
                        $sql = "SELECT
                                re_short
                            FROM
                                shops
                            WHERE
                                id=$shops_ID
                        ";
                        $res = mysql_query( $sql );
                        $row = mysql_fetch_assoc( $res );
                        $r_nr = $row["re_short"] . $r_nr;
                    }
                    $r_nr = date( "y" ) . $r_nr;

                    $fName = "R" . $r_nr . ".pdf";
                    if ( $gutschrift == 1 )
                    {
                        $fName = "G" . $r_nr . ".pdf";
                    }
                }
                else
                {
                    $date = date( "Y-m-d" );
                    $ln = $pdf->generate_LN( $b_id, "L", false );
                    if ( !isset( $anz_stellen ) )
                    {
                        $anz_stellen = 5;
                    }
                    $r_nr = sprintf( "%0" . $anz_stellen . "d", $ln );
                    $fName = "R_" . $b_id . "_" . $date . "_" . $r_nr . ".pdf";
                    if ( $gutschrift == 1 )
                    {
                        $fName = "G_" . $b_id . "_" . $date . "_" . $r_nr .
                            ".pdf";
                    }
                }
                $id = array_search( "Speichern", $daten );
                if ( $id !== false )
                {
                    $Speichern = true;
                }
            }

            $pdf->setSubject( "Rechnung" );

            $pdf->setAuthor( $haendler_name );
            $pdf->setCreator( "fpdf PHP Library" );
            $pdf->AliasNbPages();
            $pdf->AddPage();
            $pdf->setY( 45 );
            $pdf->setFont( 'Arial', '', 8 );
            $pdf->SetX( $Einzug );
            $pdf->cell( 80, 4, $umschlag, "B", 1, "L" );
            $pdf->setFont( 'Arial', '', 10 );
            $pdf->ln( 5 );
            $pdf->setX( 20 );
            $pdf->SetX( $Einzug );
            if ( !$firma )
            {
                $pdf->setX( 20 );
                $pdf->cell( 80, 4, $anrede, 0, 1, "L" );
                $pdf->setX( 20 );
                $pdf->cell( 80, 4, $name, 0, 1, "L" );
            }
            else
            {
                $pdf->setX( 20 );
                $pdf->cell( 80, 4, $firma, 0, 1, "L" );
                $pdf->setX( 20 );
                $pdf->cell( 80, 4, $anrede . " " . $name, 0, 1, "L" );
            }
            $pdf->setX( 20 );
            $pdf->cell( 80, 4, $str, 0, 1, "L" );
            $pdf->setX( 20 );
            if ( $iso_land == "DE" or $iso_land == "DEU" )
            {
                $pdf->cell( 80, 4, "$plz $ort", 0, 1, "L" );
            }
            else
            {
                if ( strlen( $iso_land ) > 0 )
                {
                    $pdf->cell( 80, 4, "$iso_land - $plz $ort", 0, 1, "L" );
                }
                else
                {
                    $pdf->cell( 80, 4, "$plz $ort", 0, 1, "L" );
                }
            }

            if ( $Infozeile != 'on' )
            {
                $pdf->setY( 80 );
                if ( $bestellnummer_drucken === true )
                {
                    $nr_text = "Best.Nr.";
                    $nr = $row_b["ID"];
                }
                else
                {
                    $nr_text = "Kunden Nr.:";
                    $nr = $row_l["ID"];
                }
                $pdf->cell( 150, 4, $nr_text, 0, 0, "R" );
                $pdf->cell( 0, 4, $nr, 0, 1, "R" );
                $pdf->cell( 150, 4, "Bearbeiter:", 0, 0, "R" );
                $pdf->cell( 0, 4, $b_name, 0, 1, "R" );
                $pdf->cell( 150, 4, "USt-IdNr.:", 0, 0, "R" );
                $pdf->cell( 0, 4, $haendler_ust_id, 0, 1, "R" );


                // Ausgabe Leistungsdatum
                if ( LEISTUNGS_DATUM == true )
                {
                    if ( $_POST['leistungsdatum'] )
                    {
                        $pdf->cell( 150, 4, "Leistungsdatum:", 0, 0, "R" );
                        $pdf->cell( 0, 4, $_POST['leistungsdatum'], 0, 1, "R" );
                    }
                    else
                    {
                        $pdf->cell( 150, 4, "Leistungsdatum:", 0, 0, "R" );
                        $pdf->cell( 0, 4, $dat["Datum"], 0, 1, "R" );
                    }
                }
                else
                {
                    $pdf->cell( 150, 4, "Datum:", 0, 0, "R" );
                    $pdf->cell( 0, 4, date( "d.m.Y" ), 0, 1, "R" );
                }

                // Ausgabe Rechnungsdatum
                if ( $_POST['rechnungsdatum'] )
                {
                    $pdf->cell( 150, 4, "Rechnungsdatum:", 0, 0, "R" );
                    $pdf->cell( 0, 4, $_POST['rechnungsdatum'], 0, 1, "R" );
                }
                else
                {
                    $pdf->cell( 150, 4, "Rechnungsdatum:", 0, 0, "R" );
                    $pdf->cell( 0, 4, date( "d.m.Y" ), 0, 1, "R" );
                }
            }

            // Lieferadresse auf Rechnung ausdrucken?
            if ( ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["rechnung"] ) and
                ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["lieferadresse_auf_rechnung"] ) and
                ( $row_b['liefer_Strasse'] ) ) ) )
            {
                $pdf->setY( 50 );
                $pdf->setX( 135 );
                $pdf->setFont( 'Arial', 'B', 8 );
                $pdf->cell( 145, 4, "Lieferadresse:", 0, 2, "L" );
                $pdf->setFont( 'Arial', '', 8 );
                if ( $row_b['liefer_Firma'] )
                    $pdf->cell( 145, 4, $row_b['liefer_Firma'], 0, 2, "L" );
                if ( $row_b['liefer_Name'] )
                    $pdf->cell( 145, 4, $row_b['liefer_Name'], 0, 2, "L" );
                if ( $row_b['liefer_Strasse'] )
                    $pdf->cell( 145, 4, $row_b['liefer_Strasse'] . " " . $row_b['liefer_Str_Nr'],
                        0, 2, "L" );
                if ( $row_b['liefer_Ort'] )
                    $pdf->cell( 145, 4, $row_b['liefer_PLZ'] . " " . $row_b['liefer_Ort'],
                        0, 2, "L" );
                if ( $row_b['liefer_Land'] )
                    $pdf->cell( 145, 4, $row_b['liefer_Land'], 0, 2, "L" );
            }

            $pdf->ln( 10 );
            $pdf->SetFont( 'Arial', 'B', 14 );

            if ( !$Rechungsueberschrift )
            {
                $pdf->cell( 0, 4, $REName, 0, 1, "C" );
            }
            else
            {
                $fill = "cell( 0, 4, \'Rechnung\' , 0, 1, \'L\' )";
                $pdf->$fill;
            }
            $pdf->ln( 5 );
            $pdf->SetFont( 'Arial', 'B', 9 );


            $sql = "SELECT
                    ab.*
                FROM
                    artikel_to_Bestellung ab 
                LEFT OUTER JOIN
                    artikel a
                ON
                    a.ID=ab.artikel 
                WHERE
                    Bestellung=$b_id
                AND
                    ab. `status` != 'storniert'
            ";
            if ( $Status )
            {
                $sql .= " AND rechnungStatus = 'schreiben'";
            }
            //$sql .= " ORDER BY Rang, Bezeichnung ";
            if ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["artikel_sortieren"] ) )
            {
                $sql .= "
                    ORDER BY
                        ab.Rang,
                        Father desc,
                        a.kennung
                ";
            }
            else
            {
                $sql .= "
                    ORDER BY
                        Father desc,
                        a.kennung
                ";
            }

            $res = mysql_query_logged( $sql );


            $summe_n = array();
            $summe_b = array();
            $preis_n = 0;
            $g_preis = 0;
            $g_preis_n = 0;
            $pos = 1;
            $mwst_arr = array(
                0 => 19,
                1 => 7,
                null => 19 );


            // Lieferadresse ausgeben
            if ( $Lieferadresse == "on" )
            {
                if ( $row_b['liefer_Strasse'] )
                {
                    $x_tmp = $pdf->GetX();
                    $y_tmp = $pdf->GetY();

                    $lanr = "";
                    if ( $row_b['liefer_Anrede'] )
                    {
                        $lanr = $row_b['liefer_Anrede'] . " ";
                    }

                    $pdf->SetFont( 'Arial', '', 9 );
                    $pdf->SetY( 10 );
                    $pdf->SetX( $Einzug + 5 );
                    $pdf->cell( 0, 3, 'Lieferanschrift:', 0, 2, 'L' );
                    $pdf->Cell( 0, 3, $row_b['liefer_Firma'], 0, 2, 'L' );
                    $pdf->cell( 0, 3, $lanr . $row_b['liefer_Name'], 0, 2, 'L' );
                    $pdf->cell( 0, 3, $row_b['liefer_Strasse'] . " " . $row_b['liefer_Str_Nr'],
                        0, 2, 'L' );
                    $pdf->cell( 0, 3, $row_b['liefer_PLZ'] . " " . $row_b['liefer_Ort'],
                        0, 2, 'L' );
                    $pdf->cell( 0, 3, $row_b['liefer_Land'], 0, 2, 'L' );
                    $pdf->SetFont( 'Arial', '', 10 );
                    $pdf->SetX( $x_tmp );
                    $pdf->SetY( $y_tmp );
                }
            }
            //Zusatzkopf

            if ( $Infozeile == 'on' )
            {
                if ( $bestellnummer_drucken === true )
                {
                    $nr_text = "Best.Nr.";
                    $nr = $row_b["ID"];
                }
                else
                {
                    $nr_text = "Kunden Nr.:";
                    $nr = $row_l["ID"];
                }
                $pdf->Ln( 15 );
                $pdf->SetX( $Einzug );
                $pdf->setFillColor( 204 );
                if ( $gutschrift == 1 )
                {
                    $pdf->cell( 25, 4, "Gutschrift Nr.", "LTR", 0, "C", 1 );
                }
                else
                {
                    $pdf->cell( 25, 4, "Rechnungs Nr.", "LTR", 0, "C", 1 );
                }

                $pdf->cell( 20, 4, $nr_text, "LTR", 0, "C", 1 );
                $pdf->cell( 65, 4, "Bearbeiter", "LTR", 0, "C", 1 );
                if ( LEISTUNGS_DATUM == true )
                {
                    $pdf->cell( 35, 4, "Leistungsdatum", "LTR", 0, "C", 1 );
                }
                else
                {
                    $pdf->cell( 35, 4, "Datum", "LTR", 0, "C", 1 );
                }
                $pdf->cell( 0, 4, "Seite", "LTR", 1, "C", 1 );

                $pdf->setFillColor( 255 );
                $pdf->SetX( $Einzug );
                $pdf->cell( 25, 4, "$r_nr", "LBR", 0, "C", 1 );
                $pdf->cell( 20, 4, $nr, "LBR", 0, "C", 1 );
                $pdf->cell( 65, 4, "$b_name", "LBR", 0, "C", 1 );
                if ( LEISTUNGS_DATUM == true )
                {
                    $pdf->cell( 35, 4, $dat["Datum"], "LBR", 0, "C", 1 );
                }
                else
                {
                    $pdf->cell( 35, 4, date( 'd.m.Y' ), "LBR", 0, "C", 1 );
                }
                $pdf->cell( 0, 4, $pdf->PageNo(), "LBR", 1, "C", 1 );
            }
            $pdf->setFillColor( 204 );
            $pdf->SetX( $Einzug );
            $pdf->cell( 10, 4, "$Pos_text", "LTR", 0, "C", 1 );
            $pdf->cell( 15, 4, "$Menge_text", "LTR", 0, "C", 1 );
            $pdf->cell( 20, 4, "$Kennung_text", "LTR", 0, "C", 1 );
            $pdf->cell( 100, 4, "$Text_text", "LTR", 0, "C", 1 );
            $pdf->cell( 20, 4, "$Einzelpreis_text", "LTR", 0, "C", 1 );
            $pdf->cell( 0, 4, "$Gesamtpreis_text", "LTR", 1, "C", 1 );
            $pdf->SetX( $Einzug );
            $pdf->cell( 10, 4, "", "LBR", 0, "C", 1 );
            $pdf->cell( 15, 4, "", "LBR", 0, "C", 1 );
            $pdf->cell( 20, 4, "", "LBR", 0, "C", 1 );
            $pdf->cell( 100, 4, "", "LBR", 0, "C", 1 );
            $pdf->cell( 20, 4, "€", "LBR", 0, "C", 1 );
            $pdf->cell( 0, 4, "€", "LBR", 1, "C", 1 );
            $pdf->setFillColor( 255 );

            $pdf->SetFont( 'Arial', '', 9 );


            while ( $row = mysql_fetch_assoc( $res ) )
            {
                $pdf->SetX( $Einzug );
                $menge = $row["Menge"];
                $zahlart = $row['zahlart'];
                $e_preis = $row["Preis_pro_Stueck"];
                $a_name = $row["Bezeichnung"];
                if ( $row["artikel"] != "0" )
                {

                    $sql_a = "SELECT 
                            * 
                        FROM 
                            " . artikelDatabase( $row_b["shops_ID"] ) . " 
                        WHERE 
                            ID=" . $row["artikel"] . "
                    ";

                    $res_a = mysql_query( $sql_a );
                    $row_a = mysql_fetch_assoc( $res_a );
                    if ( !$a_name )
                    {
                        $a_name = html_entity_decode( $row_a["kurzbezeichnung"] );
                    }
                    $kennung = $row_a["kennung"];
                    $mwst = ( $row["mwst"] != "0.00" && !empty( $row["mwst"] ) ) ?
                        $row["mwst"] : $mwst_arr[$row_a["tax1"]];
                    $preis_n = $e_preis - ( $e_preis * $mwst / ( 100 + $mwst ) );

                    // ME: Wenn in der Bestellung ein Rang angegeben ist,
                    // wird dieser statt der laufenden Nummer als Pos ausgegeben
                    /*
                    if ( $row['Rang'] > 0 )
                    {
                    $pos = $row['Rang'];
                    }*/

                    if ( $showBruttoPreis == 1 )
                    {
                        $preis_n = $e_preis;
                    }

                    if ( $row_a["Father"] == -3 )
                    {
                        continue;
                        /*    $versandname = $row["Bezeichnung"];
                        $pos = "";
                        $menge = "";
                        $g_preis = $e_preis;
                        $g_preis_n = $preis_n;*/
                    }
                    else
                    {
                        // ME: Bestandsmehrung oder auch nicht bei Gutschriften
                        if ( ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["gutschriftoption"] ) ) and
                            ( isset( $user_rechte["Warenwirtschaft"]["bestellung"]["gutschriftoption"] ) ) )
                        {
                            if ( isset( $_POST['gutschrift'] ) )
                            {
                                if ( !isset( $_POST['keine_bestandsaenderung'] ) )
                                {
                                    $buchungstext =
                                        'Buchung durchgeführt durch Gutschrift ' .
                                        $r_nr . ' am ' . date( 'd.m.Y', time() );
                                    setBuchungFromBestellung( $_GET['b_id'], $buchungstext,
                                        $row_a['ID'], $menge );
                                }
                            }
                        }

                        /**
                         *  Bestandsminderung:
                         *  
                         *  Ist das Webrecht: $web_rechte['Warenwirtschaft']['lagerwirtschaft']['bestandsminderung'] gleich "Rechnung",
                         *  so wird in der Rechnungserstellung (rechnung.php) die Bestandsminderung durchgeführt.
                         * 
                         *  Folgende Punkte werden hierfür durchgeführt:
                         *         1. Eine neue Buchung wird in der Tabelle "buchungen" erzeugt.
                         *        2. Die zur Buchung gehörenden Lagerbewegungen, werden in die Tabelle "lagerbewegungen" eingetragen.
                         * 
                         */

                        if ( ( $row_a['Father'] > 0 ) and ( $web_rechte['Warenwirtschaft']['lagerwirtschaft']['bestandsminderung'] ==
                            'Rechnung' ) )
                        {


                            if ( ( isset( $web_rechte['Warenwirtschaft']['lagerwirtschaft']['minderungsunterdrueckung'] ) ) )
                            {
                                $minderung = 1;


                                if ( is_array( $_POST["baustein"] ) )
                                {
                                    foreach ( $_POST['baustein'] as $key => $val )
                                    {
                                        if ( stristr( $val,
                                            "keine Bestandsminderung" ) )
                                        {
                                            $minderung = 0;
                                        }
                                    }
                                }
                                if ( isset( $_POST['keine_bestandsaenderung'] ) or
                                    isset( $_POST['gutschrift'] ) )
                                {
                                    $minderung = 0;
                                }

                                if ( $minderung == 1 )
                                {

                                    $buchungstext =
                                        'Buchung durchgeführt durch Rechnung ' .
                                        $r_nr . ' am ' . date( 'd.m.Y', time() );
                                    setBuchungFromBestellung( $_GET['b_id'], $buchungstext,
                                        $row_a['ID'], $menge * -1 );
                                }
                            }

                        }


                        $g_preis = $e_preis * $menge;
                        $g_preis_n = $preis_n * $menge;
                    }
                }
                else
                {
                    $mwst = 19;
                    $preis_n = $e_preis - ( $e_preis * $mwst / ( 100 + $mwst ) );
                    $g_preis = $e_preis * $menge;
                    $g_preis_n = $preis_n * $menge;
                    $kennung = "";
                    $a_name = $row["Bezeichnung"];
                }
                $summe_b[$mwst] += $g_preis;
                $summe_n[$mwst] += $g_preis_n;
                $h = $pdf->NbLines( 100, $a_name );
                $h = 5 * $h;

                $x = $pdf->GetX();
                $y = $pdf->GetY();


                $pdf->Multicell( 10, $h, $pos . ".", 1, "C" );
                $pdf->SetXY( $x + 10, $y );
                $x = $pdf->GetX();
                $y = $pdf->GetY();


                $pdf->Multicell( 15, $h, ( ( is_numeric( $pos ) ) ? str_replace
                    ( ",00", "", number_format( $menge, 2, ',', '.' ) ) : "" ) .
                    " x", 1, "C" );
                $pdf->SetXY( $x + 15, $y );
                $x = $pdf->GetX();
                $y = $pdf->GetY();


                $pdf->Multicell( 20, $h, $kennung, 1, "C" );
                $pdf->SetXY( $x + 20, $y );
                $x = $pdf->GetX();
                $y = $pdf->GetY();

                $pdf->Multicell( 100, 5, $a_name, 1, "L" );
                $pdf->SetXY( $x + 100, $y );
                $x = $pdf->GetX();
                $y = $pdf->GetY();

                if ( $showBruttoPreis == 1 )
                {
                    $pdf->Multicell( 20, $h, number_format( $preis_n, 2, ',',
                        '.' ), 1, "R" );
                }
                else
                {
                    $pdf->Multicell( 20, $h, number_format( $preis_n, 3, ',',
                        '.' ), 1, "R" );
                }


                $pdf->SetXY( $x + 20, $y );


                $pdf->Multicell( 0, $h, number_format( $g_preis_n, 2, ',', '.' ),
                    1, "R" );
                //$pdf->ln( 4 );
                if ( $Status )
                {
                    $sql_s =
                        "UPDATE artikel_to_Bestellung SET rechnungStatus='geschrieben' WHERE ID=" .
                        $row["ID"];
                    mysql_query_logged( $sql_s ) or die( mysql_errno() . ": " .
                        mysql_error() );
                }
                $pos++;
            }

            // ME: Prüfen, ob die Tabelle zahlungsarten existiert
            $select_z = "";
            $from_z = "";
            $where_z = "";
            
            if ( table_exists( 'zahlungsarten', $webs["datenbank"], $localhost_dbh ) == "true" )
            {
                $zahlungsarten = 1;
                $select_z = ",z.id as zahlungsarten_id";
                $from_z = ", zahlungsarten z";
                $where_z = " and z.interner_name = a.short_line_1";
            }
            
            $sql = "
                SELECT 
                    ab.*,
                    a.short_line_1 as zahlart
                    " . $select_z . "
                FROM 
                    artikel_to_Bestellung ab,
                    " . artikelDatabase( $row_b["shops_ID"] ) . " a
                    " . $from_z . "
                WHERE 
                    Bestellung=$b_id 
                AND 
                    ab.status!='storniert'
                AND
                    a.ID=ab.artikel
                AND
                    a.Father=-3
                " . $where_z . "
                ORDER BY 
                    Rang,
                    ab.Bezeichnung 
                    
            ";
            
            $res = mysql_query_logged( $sql ) or mail( "niewerth@weban.de",
                "Fehler in createMailOrderText.php", mysql_errno() . ": " .
                mysql_error() . "<hr>$query<hr>",
                "from: cms_Warenwirtschaft_rechung.php select artikel_to_Bestellung" );

            if ( mysql_num_rows( $res ) )
            {
                $row = mysql_fetch_assoc( $res );
                $menge = $row["Menge"];
                $e_preis = $row["Preis_pro_Stueck"];
                if ( $zahlungsarten == 1 )
                {
                    $zahlungsarten_id = $row['zahlungsarten_id'];
                }

                if ( $row["artikel"] != 999999 )
                {
                    $sql_a = "SELECT 
                            * 
                        FROM 
                            " . artikelDatabase( $row_b["shops_ID"] ) . " 
                        WHERE 
                            ID=" . $row["artikel"] . "
                    ";
                    $res_a = mysql_query( $sql_a ) or die( mysql_errno() . ": " .
                        mysql_error() );
                    if ( !$res_a )
                    {
                        echo mysql_error() . "<br>$sql_a";
                        var_dump( $row );
                    }
                    $row_a = mysql_fetch_assoc( $res_a );
                    $kennung = $row_a["kennung"];
                    $mwst = ( $row["mwst"] != "0.00" && !empty( $row["mwst"] ) ) ?
                        $row["mwst"] : $mwst_arr[$row_a["tax1"]];

                    $preis_n = $e_preis - ( $e_preis * $mwst / ( 100 + $mwst ) );

                    if ( $showBruttoPreis == 1 )
                    {
                        $preis_n = $e_preis;
                    }
                    if ( $row_a["Father"] == -3 )
                    {
                        $versandname = $row["Bezeichnung"];
                        $pos = "";
                        $menge = "";
                        $g_preis = $e_preis;
                        $g_preis_n = $preis_n;
                    }
                    else
                    {


                        $g_preis = $e_preis * $menge;
                        $g_preis_n = $preis_n * $menge;
                    }
                }
                else
                {
                    $mwst = 19;
                    $preis_n = $e_preis - ( $e_preis * $mwst / ( 100 + $mwst ) );
                    $g_preis = $e_preis * $menge;
                    $g_preis_n = $preis_n * $menge;
                    $kennung = "";
                }
                $summe_b[$mwst] += $g_preis;
                $summe_n[$mwst] += $g_preis_n;
                $a_name = $row["Bezeichnung"];

                $pdf->SetX( $Einzug );
                $pdf->cell( 10, 4, $pos, 1, 0, "C" );
                $pdf->cell( 15, 4, ( is_numeric( $pos ) ) ? number_format( $menge,
                    2, ',', '.' ) : "", 1, 0, "R" );
                $pdf->cell( 20, 4, $kennung, 1, 0, "C" );
                $pdf->cell( 100, 4, $a_name, 1, 0, "L", 0, "", 0, 0 );
                if ( $showBruttoPreis == 1 )
                {
                    $pdf->cell( 20, 4, number_format( $preis_n, 2, ',', '.' ), 1,
                        0, "R" );
                }
                else
                {
                    $pdf->cell( 20, 4, number_format( $preis_n, 3, ',', '.' ), 1,
                        0, "R" );
                }

                $pdf->cell( 0, 4, number_format( $g_preis_n, 2, ',', '.' ), 1, 0,
                    "R" );
                $pdf->ln( 4 );
                $pos++;
            }

            foreach ( $summe_n as $mwst => $betrag )
            {
                $summe_n["total"] += $betrag;
            }
            foreach ( $summe_b as $mwst => $betrag )
            {
                $summe_b["total"] += $betrag;
            }
            $pdf->SetX( $Einzug );
            if ( $showBruttoPreis == 1 )
            {
                $pdf->cell( 165, 4, "Gesamt Brutto", 1, 0, "L" );
                $pdf->cell( 0, 4, number_format( $summe_b["total"], 2, ',', '.' ),
                    1, 1, "R" );
            }
            else
            {
                $pdf->cell( 165, 4, "Gesamt Netto", 1, 0, "L" );
                $pdf->cell( 0, 4, number_format( $summe_n["total"], 2, ',', '.' ),
                    1, 1, "R" );
            }

            $pdf->SetX( $Einzug );
            // Mehrwertsteuer Ausgabe bei Bruttoberechnung
            if ( $showBruttoPreis == 1 )
            {
                foreach ( $summe_b as $mwst => $betrag )
                {
                    if ( $mwst != "total" )
                    {
                        if ( $mwst_befreiung == 'on' )
                        {
                            $mwst = 0.00;
                        }

                        if ( $showBruttoPreis == 1 )
                        {
                            $pdf->cell( 165, 4, "inkl. $mwst % MwSt. auf " .
                                number_format( $betrag / 1.19, 2, ',', '.' ) .
                                " € ( = Nettorechnungsbetrag)", "LBT", 0, "L" );
                        }


                        $pdf->cell( 0, 4, number_format( $betrag * $mwst / ( 100 +
                            $mwst ), 2, ',', '.' ), 1, 1, "R" );


                        define( 'MWST', $mwst );
                    }
                }

            }
            else
            {


                // Mehrwertsteuer Ausgabe bei Nettoberechnung
                foreach ( $summe_n as $mwst => $betrag )
                {
                    if ( $mwst != "total" )
                    {
                        if ( $mwst_befreiung == 'on' )
                        {
                            $mwst = 0.00;
                        }

                        $pdf->cell( 165, 4, "zzgl. $mwst % MwSt. auf " .
                            number_format( $betrag, 2, ',', '.' ) . " €", "LBT",
                            0, "L" );

                        $pdf->cell( 0, 4, number_format( $betrag * $mwst / 100,
                            2, ',', '.' ), 1, 1, "R" );

                        define( 'MWST', $mwst );
                    }
                }
            }
            $pdf->setFont( 'Arial', 'B', 12 );
            $pdf->SetX( $Einzug );
            // Ist Summe-Brutto kleiner als 0, wird der 'Gesamtbetrag' umbenannt in 'Gutschriftsbetrag'
            if ( $summe_b["total"] < 0 )
            {
                $pdf->cell( 165, 8, "Gutschriftsbetrag", "LBR", 0, "L" );
            }
            else
            {
                $pdf->cell( 165, 8, "Gesamtbetrag", "LBR", 0, "L" );
            }

            // Wenn die MwSt-Befreiung gesetzt ist, gebe als Gesamtbetrag die Summe als Netto aus, ansonsten mit Brutto
            $pdf->SetX( $Einzug );
            if ( $mwst_befreiung == 'on' )
            {
                $pdf->cell( 0, 8, number_format( $summe_n["total"], 2, ',', '.' ),
                    "LBR", 1, "R" );
            }
            else
            {
                $pdf->cell( 0, 8, number_format( $summe_b["total"], 2, ',', '.' ),
                    "LBR", 1, "R" );
            }

            $pdf->SetX( $Einzug );
            $pdf->cell( 0, 8, "", "T", 1 );
            $pdf->setFont( 'Arial', '', 9.5 );

            if ( $row_b["Bemerkung_extern"] && BEMERKUNG2_DRUCKEN )
            {

                // externe Bemerkung
                $pdf->SetX( $Einzug );
                $pdf->multiCell( 35, 4, "", 0, 0, "L" );
                $pdf->setFont( 'Arial', 'B', 9.5 );
                $pdf->SetX( $Einzug );
                $pdf->multiCell( 0, 4, $row_b["Bemerkung_extern"], 0, 1, "L" );
                $pdf->SetX( $Einzug );
                $pdf->multiCell( 0, 4, " ", 0, 1, "L" );
                $pdf->setFont( 'Arial', '', 9.5 );
            }

            // MwSt.-Befreiung Zusatztext
            $pdf->SetX( $Einzug );
            if ( $mwst_befreiung == 'on' )
            {
                $pdf->setFont( 'Arial', 'B', 10 );

                // Wenn das Land 'Deutschland' oder Leer ist, dann gebe speziellen Text aus
                if ( $row_l['Land'] == 'Deutschland' || empty( $row_l['Land'] ) )
                {
                    $pdf->multiCell( 0, 4, "Deutschland nach §4", "", 1 );
                }
                else
                {
                    // Wenn UST.IdNr. gesetzt ist   => EU-Inland
                    // Wenn nicht gesetzt ist       => EU-Ausland
                    if ( $ustid_nr )
                    {
                        $pdf->multiCell( 0, 4,
                            "Der Rechnungsempfänger ist Steuerschuldner gem. § 13b UStG.\nUSt. ID Nr. vom Leistungsempfänger ist: $ustid_nr\nUSt. ID Nr. vom Leistungserbringer ist: $haendler_ust_id",
                            "", 1 );
                    }
                    else
                    {
                        $pdf->multiCell( 0, 4, "ACHTUNG:\n\nES HANDELT SICH UM EINE STEUERFREIE AUSLIEFERUNG IN EIN DRITTLAND GEM:.§4Nr. 1A USTG",
                            "", 1 );
                    }
                }
            }

            $pdf->setFont( 'Arial', '', 9.5 );
            $pdf->SetX( $Einzug );
            if ( VERSAND_ANZEIGEN )
            {
                if ( $gutschrift == 1 )
                {
                    $pdf->multiCell( 0, 4, "\r\nGutschrift", 0, 1, "L" );
                }
                else
                {
                    $pdf->multiCell( 0, 4, "\r\nZahlung: $versandname\n$zahlungs_hinweis",
                        0, 1, "L" );
                }

            }
            else
            {
                $pdf->multiCell( 0, 4, "\r\n$zahlungs_hinweis", 0, 1, "L" );
            }

            // START die Anzeige der ausgewählten Rechnungsbausteine
            $pdf->SetX( $Einzug );
            if ( ( $web_rechte["Warenwirtschaft"]["bestellung"]["rechnungsbausteine"] ) and
                ( $_POST['action'] == "genPDF" ) )
            {
                //$pdf->multiCell( 0, 4, "Bemerkung:", 0, 1, "L" );
                //$pdf->setFont( 'Arial', '', 9.5 );

                if ( is_array( $_POST['baustein'] ) )
                {
                    foreach ( $_POST['baustein'] as $kk => $vv )
                    {
                        if ( $vv != "keine Bestandsminderung" )
                        {
                            $pdf->multiCell( 0, 4, $vv, 0, 1, "L" );
                            $pdf->setFont( 'Arial', '', 9.5 );
                        }
                    }
                }
            }
            // ENDE die Anzeige der ausgewählten Rechnungsbausteine


            // ME: START Vorbereitung der Ausgabe des Zahlungsziels auf der Rechnung
            if ( isset( $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["zahlungsziel"] ) )
            {
                if ( $_POST['action'] == "genPDF" )
                {
                    if ( $_POST['zahlungsziel'] )
                    {
                        $sql = "select * from zahlungsziele where id=" . $_POST['zahlungsziel'] .
                            "";
                            
                        if ( $q = mysql_query( $sql ) )
                        {
                            if ( $r = mysql_fetch_assoc( $q ) )
                            {
                                $zieltage = date( 'd.m.Y', strtotime( '+' . $r['zieltage'] .
                                    ' days' ) );
                                $serArr['ziel'] = strtotime( '+' . $r['zieltage'] .
                                    ' days' );

                                // SKONTO 1
                                if ( $r['skonto1'] > 0 )
                                {
                                    $skonto1 = $r['skonto1'];
                                    $serArr['skonto1'] = $skonto1;
                                    $sk1 = $summe_b['total'] * ( $skonto1 / 100 );
                                    $skontobetrag1 = number_format( $sk1, 2, ",",
                                        "." );
                                    $serArr['skontobetrag1'] = $sk1;
                                }
                                if ( $r['zieltageskonto1'] > 0 )
                                {
                                    $zieltageskonto1 = date( 'd.m.Y', strtotime
                                        ( '+' . $r['zieltageskonto1'] . ' days' ) );
                                    $serArr['zielskonto1'] = strtotime( '+' . $r['zieltageskonto1'] .
                                        ' days' );
                                }


                                // SKONTO 2
                                if ( $r['skonto2'] > 0 )
                                {
                                    $skonto2 = $r['skonto2'];
                                    $serArr['skonto2'] = $skonto2;
                                    $sk2 = $summe_b['total'] * ( $skonto2 / 100 );
                                    $skontobetrag2 = number_format( $sk2, 2, ",",
                                        "." );
                                    $serArr['skontobetrag2'] = $sk2;
                                }
                                if ( $r['zieltageskonto2'] > 0 )
                                {
                                    $zieltageskonto2 = date( 'd.m.Y', strtotime
                                        ( '+' . $r['zieltageskonto2'] . ' days' ) );
                                    $serArr['zielskonto2'] = strtotime( '+' . $r['zieltageskonto2'] .
                                        ' days' );
                                }


                                $serArr['bruttobetrag'] = $summe_b['total'];

                                @eval( "\$rechnungsbaustein_int=\"" . addslashes
                                    ( $r["rechnungsbaustein"] ) . "\";" );

                                $zz_text = $rechnungsbaustein_int;

                            }
                        }
                    }
                }
            }
            // ME: ENDE Vorbereitung der Ausgabe des Zahlungsziels auf der Rechnung

            // Start Anzeige des Zahlungsziels
            if ( $zz_text )
            {
                $pdf->multiCell( 0, 6, $zz_text, 0, 1, "L" );
                $pdf->setFont( 'Arial', '', 9.5 );
            }
            // Ende Anzeige des Zahlungsziels


            if ( $Speichern )
            {
                $add_flds = "";
                $rechnung_key = "";
                if ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["rechnungslink"] ) )
                {
                    $add_flds = ", rechnung_key";
                    $rechnung_key = uniqid( hash( "sha512", $fName, true ) );
                }

                $pdf->Output( $webs['verzeichnis'] . "/images/dokumente/" . $fName,
                    "F" );

                $sql = "
                        INSERT INTO 
                            dokumente 
                        (
                            table_foreign, 
                            row_foreign, 
                            data_foreign, 
                            document, 
                            letzte_Aenderung_am,
                            letzte_Aenderung_von
                        )
                        VALUES
                        (
                            'Bestellung', 
                            'ID', 
                            $b_id, 
                            '$fName', 
                            NOW(),
                            '" . $_SERVER["PHP_AUTH_USER"] . "'
                        )                    
                ";
                mysql_query_logged( $sql ) or mail( "niewerth@weban.de",
                    "Fehler in createMailOrderText.php", mysql_errno() . ": " .
                    mysql_error() . "<hr>$query<hr>",
                    "from: cms_Warenwirtschaft_rechung.php into documente" );
            }

            // Eintrag der Rechnung in das Rechnungsbuch
            if ( isset( $web_rechte['Warenwirtschaft']['rechnungsbuch']['rechnungsbuch'] ) )
            {
                $rechnungsdaten = array();

                // Rechnungsnummer
                $rechnungsdaten['rechnungsnummer'] = $r_nr;

                // Bestellnummer
                $rechnungsdaten['bestellung'] = $b_id;

                // shop
                $rechnungsdaten['shop'] = $shops_ID;

                // kundennr
                $rechnungsdaten['kundennr'] = $row_l["ID"];

                // kunde
                $rechnungsdaten['kunde'] = $name;

                // kunde
                $rechnungsdaten['firma'] = $firma;

                // erstellt_von
                $rechnungsdaten['erstellt_von'] = $_SERVER['PHP_AUTH_USER'];

                //  mwst_19 und mwst_7
                switch ( MWST )
                {
                    case '19.00':
                        $rechnungsdaten['mwst_19'] = $betrag * ( MWST / 100 );
                        $rechnungsdaten['mwst_7'] = 0.00;
                        break;

                    case '7.00':
                        $rechnungsdaten['mwst_7'] = $betrag * ( MWST / 100 );
                        $rechnungsdaten['mwst_19'] = 0.00;
                        break;

                    case '0.00':
                        $rechnungsdaten['mwst_7'] = 0.00;
                        $rechnungsdaten['mwst_19'] = 0.00;
                        break;
                }

                // nettobetrag
                $rechnungsdaten['nettobetrag'] = $summe_n["total"];

                // bruttobetrag
                $rechnungsdaten['bruttobetrag'] = $rechnungsdaten['nettobetrag'] +
                    $rechnungsdaten['mwst_7'] + $rechnungsdaten['mwst_19'];

                // ME: Bei Gutschriften müssen die Beträge negativ sein.
                if ( $gutschrift == 1 )
                {
                    if ( $rechnungsdaten['mwst_7'] > 0 )
                    {
                        $rechnungsdaten['mwst_7'] = $rechnungsdaten['mwst_7'] *
                            -1;
                    }
                    if ( $rechnungsdaten['mwst_19'] > 0 )
                    {
                        $rechnungsdaten['mwst_19'] = $rechnungsdaten['mwst_19'] *
                            -1;
                    }
                    if ( $rechnungsdaten['nettobetrag'] > 0 )
                    {
                        $rechnungsdaten['nettobetrag'] = $rechnungsdaten['nettobetrag'] *
                            -1;
                    }
                    if ( $rechnungsdaten['bruttobetrag'] > 0 )
                    {
                        $rechnungsdaten['bruttobetrag'] = $rechnungsdaten['bruttobetrag'] *
                            -1;
                    }
                }


                // zahlart
                $rechnungsdaten['zahlart'] = $versandname;

                // Ort
                $rechnungsdaten['ort'] = $ort;

                // mwst_befreiung
                $rechnungsdaten['mwst_befreiung'] = $mwst_befreiung;

                // mwst_befreiung
                $rechnungsdaten['ustid_nr'] = $ustid_nr;


                // ME: Abweichendes Rechnungsdatum?
                if ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["abw_rechnungsdatum"] ) )
                {
                    if ( $_POST['rechnungsdatum'] )
                    {
                        $rechnungsdaten['rechnungsdatum'] = human2date( $_POST['rechnungsdatum'] );
                    }
                }
                // ME: Abweichendes Lieferdatum?
                if ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["abw_lieferdatum"] ) )
                {
                    if ( $_POST['leistungsdatum'] )
                    {
                        $rechnungsdaten['leistungsdatum'] = human2date( $_POST['leistungsdatum'] );
                    }
                }

                if ( setRechnungsbuch( $rechnungsdaten ) )
                {
                }
            }
            
            // Zahlungsziel in Rechnung speichern START
            if ( isset( $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["zahlungsziel"] ) )
            {
                if ( isset( $serArr ) )
                {
                    if ( $serArr = serialize( $serArr ) )
                    {
                        if(!$zahlungsarten_id) {
                            $zahlungsarten_id = 12; // Zahlungsart: Sonstige . wenn nichts anderes verfügbar.
                        }
                        
                        updateRechnung( $serArr, $rechnungsdaten['rechnungsnummer'],
                            $zahlungsarten_id );
                    }
                }
            }
            // Zahlungsziel in Rechnung speichern ENDE


            // rechnung_bezahlt speichern START
            if ( isset( $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnung_bezahlt"] ) )
            {
                if ( isset( $user_rechte["Warenwirtschaft"]["rechnungsbuch"]["rechnung_bezahlt"] ) )
                {
                    if ( isset( $_POST['rechnung_bezahlt'] ) )
                    {
                        upd_bezahlt( $rechnungsdaten['rechnungsnummer'], $rechnungsdaten['bestellung'] );
                    }
                }
            }
            // rechnung_bezahlt speichern ENDE


            if ( $mass_print == 0 )
            {
                $pdf->Output();
            }
        }
        unset( $pdf );
        return $fName;
    } // end Function print_Rechnung()


    ////////////////////////////////////////////
    // Ende der Hauptfunktion print_Rechnung
    ////////////////////////////////////////////

?>