Subversion-Projekte lars-tiefland.content-management

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

<?php

    //$Id: datev_csv_export.function.php 3884 2011-09-07 08:24:40Z tiefland $

    /**
     * @author Patirck Lautsch <lautsch@weban.de>
     * @copyright 2010 Webagentur Niewerth
     * @package Content-management
     * @version $Rev: 3884 $
     * @license propietary
     * @filesource
     * 
     */

    /**
     * 
     * @author Patirck Lautsch <lautsch@weban.de>
     * @copyright 2010 Webagentur Niewerth
     * @package Content-management
     */


    /**
     * datev_csv_export()
     * 
     * Stellt auf Basis der Tabelle "rechnung" in der Datenbank des jeweiligen Kunden,
     * eine CSV-Datei für den Datev-Export bereit.
     * 
     * @param DATETIME $datum
     * @param ARRAY $attribute
     */
    function datev_csv_export( $datum, $zeitraum = "", $shop = "", $attribute )
    {

        global $web_rechte;

        $daten = explode( ";", $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["datev_export"] );
        if ( !isset( $daten[1] ) )
        {
            $daten[1] = 4;
        }
        // ----------------------------------------------

        // SQL: Hole alle Rechnungen des übergebenen Zeitraums
        $sql = 'SELECT
                *
            FROM
                rechnung
        ';
        if ( $shop )
        {
            $where[] = "
                shops_id=$shop
            ";
        }
        if ( $datum )
        {
            $where[] = "
                erstellt_am LIKE '$datum%'
            ";
        }
        if ( $where )
        {
            $sql .= "
                WHERE
            ";
            $sql .= implode( "AND ", $where );
        }
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' .
            mysql_error() . '<hr />' . $sql );

        for ( $i = 0; $row = mysql_fetch_assoc( $result ); $i++ )
        {
            $rechnung[$i] = $row;
        }
        // ---------------------------------------------------

        // Parsen/korrigieren der Werte
        for ( $i = 0; $i < sizeof( $rechnung ); $i++ )
        {
            /**
             * Währung - Währungskennzeichen (Pflichtfeld)
             * 
             * WKZ | zulässige Währungen:
             *      EUR, CAD, CHF, CZK, DKK, GBP, HKD, HUF, JPY, NOK, PLN, SEK, TND und USD
             */
            $csv_array[$i]['Währung'] = 'EUR';

            /**
             * VorzBetrag - Vorzeichen und Betrag (Pflichtfeld)
             * 
             * "+"/"-" Betrag | max-Länge 10,2 | Decimalpunkt = ","| keine Tausenderpunkte
             */

            if ( $daten[1] == 8 )
            {
                $csv_array[$i]['VorzBetrag'] = number_format( ( $rechnung[$i]['bruttobetrag'] ),
                    2, ",", "" );
            }
            else
            {
                $csv_array[$i]['VorzBetrag'] = number_format( ( $rechnung[$i]['bruttobetrag'] *
                    -1 ), 2, ",", "" );
            }
            if ( $csv_array[$i]['VorzBetrag'] > 0 )
            {
                $csv_array[$i]['VorzBetrag'] = "+" . $csv_array[$i]['VorzBetrag'];
            }

            /**
             * RechNr - Rechnungsnummer (Pflichtfeld)
             * 
             * max-Länge 12 | alphanumerisch
             */
            $csv_array[$i]['RechNr'] = "\"" . $rechnung[$i]['bestellung'] .
                "\"";

            /**
             * Belegdatum - Belegdatum (Pflichtfeld)
             * 
             * ttmm | max-Länge 4 | numerisch | keine Trenner
             */
            $csv_array[$i]['Belegdatum'] = "\"" . date( "dm", strtotime( $rechnung[$i]['erstellt_am'] ) ) .
                "\"";

            /**
             * InterneRechNr - Interne Rechnungsnummer
             * 
             * max-Länge 12 | alphanumerisch
             */
            $csv_array[$i]['InterneRechNr'] = "\"" . $rechnung[$i]['rechnungsnummer'] .
                "\"";

            /**
             * KundeName - Kunden-Name
             * 
             * max-Länge 40 | alphanumerisch
             */
            if ( $rechnung[$i]['firma'] )
            {
                $csv_array[$i]['KundeName'] = "\"" . $rechnung[$i]['firma'] .
                    "\"";
            }
            else
            {
                $csv_array[$i]['KundeName'] = "\"" . $rechnung[$i]['kunde'] .
                    "\"";
            }

            /**
             * KundeOrt - Ort des Kunden
             * 
             * max-Länge 30 | alphanumerisch
             */
            $csv_array[$i]['KundeOrt'] = "\"" . $rechnung[$i]['ort'] . "\"";

            /**
             * KundeKonto - Kunden-Konto-Nr.
             * 
             * max-Länge 9 (inkl. Blank 10) | numerisch | Länge in Abhängigkeit der Sachkontolänge
             */
            /**
             * Kontobereichnung - Kontobereichnung
             * 
             * max-Länge 30 | alphanumerisch
             */
            $rechnung[$i]['mwst_19'] = floatval( $rechnung[$i]['mwst_19'] );
            $rechnung[$i]['mwst_7'] = floatval( $rechnung[$i]['mwst_7'] );

            if ( $rechnung[$i]['mwst_19'] > 0 && empty( $rechnung[$i]['mwst_7'] ) )
            {
                $csv_array[$i]['KundeKonto'] = $daten[1] . '400';
                $csv_array[$i]['Kontobezeichnung'] = '"19%"';
            } elseif ( empty( $rechnung[$i]['mwst_19'] ) && $rechnung[$i]['mwst_7'] > 0 )
            {
                $csv_array[$i]['KundeKonto'] = $daten[1] . '300';
                $csv_array[$i]['Kontobezeichnung'] = '"7%"';
            } elseif ( $rechnung[$i]['mwst_19'] > 0 && $rechnung[$i]['mwst_7'] > 0 )
            {
                $csv_array[$i]['KundeKonto'] = $daten[1] . '400';
                $csv_array[$i]['Kontobezeichnung'] = '"19%"';
            } elseif ( $rechnung[$i]['mwst_befreiung'] == "on" )
            {
                if ( empty( $rechnung[$i]['ustid_nr'] ) )
                {
                    $csv_array[$i]['KundeKonto'] = $daten[1] . '120';
                    $csv_array[$i]['Kontobezeichnung'] = '"0% Drittland"';
                }
                else
                {
                    $csv_array[$i]['KundeKonto'] = $daten[1] . '125';
                    $csv_array[$i]['Kontobezeichnung'] = '"0% EG"';
                }
            }
            else
            {
                $csv_array[$i]['KundeKonto'] = $daten[1] . '000';
                $csv_array[$i]['Kontobezeichnung'] = '"Rest"';
            }

            /**
             * BU - B(erichtungsschhlüssel) U(msatzstuerschlüssel)
             * 
             * max-Länge 2 | numerisch | zulässige BU-SChlüssel: 1 - 3, 5, 10 - 13, 15, 40, 50 - 59
             */
            $csv_array[$i]['BU'] = '';

            /**
             * Konto - Konto-Nr.
             * 
             * max-Länge 8 (inkl. Blank 9 | numerisch | Länge in Abhängigkeit der Sachkontolänge
             */
            $csv_array[$i]['Konto'] = $daten[2];

            /**
             * Ware/Leistung - Ware/Leistung
             * 
             * max-Länge 30 | alphanumerisch
             */
            $csv_array[$i]['Ware/Leistung'] = '';

            /**
             * Fällig_am - Fälligkeitsdatum
             * 
             * ttmmjjjj | max-Länge 8 | numerisch | keine Trenner
             */
            $csv_array[$i]['Fällig_am'] = '';

            /**
             * gezahlt_am - Datum gezahlt am
             * 
             * ttmm | max-Länge 8 | numerisch | keine Trenner
             */
            $csv_array[$i]['gezahlt_am'] = '';

            /**
             * UStSatz - Umsatzsteuer-Prozentsatz
             * 
             * Max-Länge 5 | numerisch | Decimalpunkt = ","
             */
            $csv_array[$i]['UStSatz'] = '';

            /**
             * USt-IdNr. Kunde - USt-IdNr. Kunde
             * 
             * max-Länge 15 | alphanumerisch
             */
            $csv_array[$i]['USt_IdNr.Kunde'] = '';

            /**
             * Kunden-Nr. - Kunden-Nr.
             * 
             * max-Länge 15 | alphanumerisch
             */
            $csv_array[$i]['Kunden-Nr.'] = '"' . $rechnung[$i]['kundennr'] .
                '"';

            /**
             * KOST1- KOST1
             * 
             * max-Länge 8 | alphanumerisch
             */
            $csv_array[$i]['KOST1'] = '';

            /**
             * KOST2- KOST2
             * 
             * max-Länge 8 | alphanumerisch
             */
            $csv_array[$i]['KOST2'] = '';

            /**
             * KOSTmenge - KOST-Mengen-"Betrag"
             * 
             * max-Länge 9,2 | Decimalpunkt = "," | keine Tausenderpunkte
             */
            $csv_array[$i]['KOSTmenge'] = '';

            /**
             * Kurs - Kurs-Umrechnungsbetrag
             * 
             * max-Länge 4,6 | Decimalpunkt = "," | keine Tausenderpunkte
             */
            $csv_array[$i]['Kurs'] = '';

            /**
             * Skonto - Skonto-Betrag
             * 
             * max-Länge 8,2 | Decimalpunkt = "," | keine Tausenderpunkte
             */
            $csv_array[$i]['Skonto'] = '';

            /**
             * Nachricht - Nachricht
             * 
             * max-Länge 120 | alphanummerisch
             */
            $csv_array[$i]['Nachricht'] = '';

            /**
             * Skto_Fällig_am - Skonto-Fälligkeit = Nettofälligkeit
             * 
             * ttmmjjjj | max-Länge 8 | numerisch | keine Trenner | auch tt.mm.jjjj ; Abhängigkeit zum Skontobetrag ->
             * Sktontobetrag muss bei Skto_Fällig_am gefüllt sein
             */
            $csv_array[$i]['Skto_Fällig_am'] = '';

            /**
             * BankKonto - Konto-Nr.
             * 
             * Kontonummer
             *
             * Kontonummer immmer in Verbindung mit Bankleitzahl
             */
            $csv_array[$i]['BankKonto'] = '';

            /**
             * BankBlz - BLZ
             * 
             * Bankleitzahl immer in Verbindung mit Kontonummer
             */
            $csv_array[$i]['BankBlz'] = '';

            /**
             * Bankname - Name der Bank
             * 
             * max-Länge 27 | alphanumerisch
             */
            $csv_array[$i]['Bankname'] = '';

            if ( strtolower( $daten[3] ) !== "false" )
            {
                $csv_array[$i]["shop"] = getShop( $rechnung[$i]["shops_id"] );
            }
        }
        // ----------------------------

        // Erstellen des Inhalts der CSV-Datei
        $csv_header =
            '"Währung";"VorzBetrag";"RechNr";"Belegdatum";"InterneRechNr";"KundeName";"KundeOrt";"KundeKonto";"BU";"Konto";"Kontobezeichnung";"Ware/Leistung";"Fällig_am";"gezahlt_am";"UStSatz";"USt-IdNr.Lieferant";"Kunden-Nr.";"KOST1";"KOST2";"KOSTmenge";"Kurs";"Skonto";"Nachricht";"Skto_Fällig_am";"BankKonto";"BankBlz";"Bankname";';
        if ( strtolower( $daten[3] ) !== "false" )
        {
            $csv_header .= '"Shop";';
        }

        $datev_csv_export = $csv_header . "\n";

        for ( $i = 0; $i < sizeof( $csv_array ); $i++ )
        {
            $datev_csv_export .= $csv_array[$i]['Währung'] . ';';
            $datev_csv_export .= $csv_array[$i]['VorzBetrag'] . ';';
            $datev_csv_export .= $csv_array[$i]['RechNr'] . ';';
            $datev_csv_export .= $csv_array[$i]['Belegdatum'] . ';';
            $datev_csv_export .= $csv_array[$i]['InterneRechNr'] . ';';
            $datev_csv_export .= $csv_array[$i]['KundeName'] . ';';
            $datev_csv_export .= $csv_array[$i]['KundeOrt'] . ';';
            $datev_csv_export .= $csv_array[$i]['KundeKonto'] . ';';
            $datev_csv_export .= $csv_array[$i]['BU'] . ';';
            $datev_csv_export .= $csv_array[$i]['Konto'] . ';';
            $datev_csv_export .= $csv_array[$i]['Kontobezeichnung'] . ';';
            $datev_csv_export .= $csv_array[$i]['Ware/Leistung'] . ';';
            $datev_csv_export .= $csv_array[$i]['Fällig_am'] . ';';
            $datev_csv_export .= $csv_array[$i]['gezahlt_am'] . ';';
            $datev_csv_export .= $csv_array[$i]['UStSatz'] . ';';
            $datev_csv_export .= $csv_array[$i]['USt_IdNr.Kunde'] . ';';
            $datev_csv_export .= $csv_array[$i]['Kunden-Nr.'] . ';';
            $datev_csv_export .= $csv_array[$i]['KOST1'] . ';';
            $datev_csv_export .= $csv_array[$i]['KOST2'] . ';';
            $datev_csv_export .= $csv_array[$i]['KOSTmenge'] . ';';
            $datev_csv_export .= $csv_array[$i]['Kurs'] . ';';
            $datev_csv_export .= $csv_array[$i]['Skonto'] . ';';
            $datev_csv_export .= $csv_array[$i]['Nachricht'] . ';';
            $datev_csv_export .= $csv_array[$i]['Skto_Fällig_am'] . ';';
            $datev_csv_export .= $csv_array[$i]['BankKonto'] . ';';
            $datev_csv_export .= $csv_array[$i]['BankBlz'] . ';';
            $datev_csv_export .= $csv_array[$i]['Bankname'] . ';';
            $datev_csv_export .= $csv_array[$i]['shop'] . ';';
            $datev_csv_export .= "\n";
        }
        // -----------------------------------

        // CSV-Datei erstellen
        $filename = time() . rand( 0, 9999 ) . ".csv";
        //file_put_contents( $filename, $datev_csv_export );
        // -------------------

        // CSV-Download initialisieren
        header( "Content-Type: text/comma-separated-values" );
        header( "Content-Disposition: attachment; filename=\"$filename\"" );
        //readfile( $filename );
        echo $datev_csv_export;
        // ---------------------------

        // CSV-Datei auf dem Server wieder löschen
        //unlink( $filename );
        // ---------------------------------------
    }
?>