Subversion-Projekte lars-tiefland.content-management

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
1 lars 1
<?php
2
 
3
    //$Id: datev_csv_export.function.php 3884 2011-09-07 08:24:40Z tiefland $
4
 
5
    /**
6
     * @author Patirck Lautsch <lautsch@weban.de>
7
     * @copyright 2010 Webagentur Niewerth
8
     * @package Content-management
9
     * @version $Rev: 3884 $
10
     * @license propietary
11
     * @filesource
12
     *
13
     */
14
 
15
    /**
16
     *
17
     * @author Patirck Lautsch <lautsch@weban.de>
18
     * @copyright 2010 Webagentur Niewerth
19
     * @package Content-management
20
     */
21
 
22
 
23
    /**
24
     * datev_csv_export()
25
     *
26
     * Stellt auf Basis der Tabelle "rechnung" in der Datenbank des jeweiligen Kunden,
27
     * eine CSV-Datei für den Datev-Export bereit.
28
     *
29
     * @param DATETIME $datum
30
     * @param ARRAY $attribute
31
     */
32
    function datev_csv_export( $datum, $zeitraum = "", $shop = "", $attribute )
33
    {
34
 
35
        global $web_rechte;
36
 
37
        $daten = explode( ";", $web_rechte["Warenwirtschaft"]["rechnungsbuch"]["datev_export"] );
38
        if ( !isset( $daten[1] ) )
39
        {
40
            $daten[1] = 4;
41
        }
42
        // ----------------------------------------------
43
 
44
        // SQL: Hole alle Rechnungen des übergebenen Zeitraums
45
        $sql = 'SELECT
46
                *
47
            FROM
48
                rechnung
49
        ';
50
        if ( $shop )
51
        {
52
            $where[] = "
53
                shops_id=$shop
54
            ";
55
        }
56
        if ( $datum )
57
        {
58
            $where[] = "
59
                erstellt_am LIKE '$datum%'
60
            ";
61
        }
62
        if ( $where )
63
        {
64
            $sql .= "
65
                WHERE
66
            ";
67
            $sql .= implode( "AND ", $where );
68
        }
69
        $result = mysql_query( $sql ) or die( mysql_errno() . ': ' .
70
            mysql_error() . '<hr />' . $sql );
71
 
72
        for ( $i = 0; $row = mysql_fetch_assoc( $result ); $i++ )
73
        {
74
            $rechnung[$i] = $row;
75
        }
76
        // ---------------------------------------------------
77
 
78
        // Parsen/korrigieren der Werte
79
        for ( $i = 0; $i < sizeof( $rechnung ); $i++ )
80
        {
81
            /**
82
             * Währung - Währungskennzeichen (Pflichtfeld)
83
             *
84
             * WKZ | zulässige Währungen:
85
             *      EUR, CAD, CHF, CZK, DKK, GBP, HKD, HUF, JPY, NOK, PLN, SEK, TND und USD
86
             */
87
            $csv_array[$i]['Währung'] = 'EUR';
88
 
89
            /**
90
             * VorzBetrag - Vorzeichen und Betrag (Pflichtfeld)
91
             *
92
             * "+"/"-" Betrag | max-Länge 10,2 | Decimalpunkt = ","| keine Tausenderpunkte
93
             */
94
 
95
            if ( $daten[1] == 8 )
96
            {
97
                $csv_array[$i]['VorzBetrag'] = number_format( ( $rechnung[$i]['bruttobetrag'] ),
98
                    2, ",", "" );
99
            }
100
            else
101
            {
102
                $csv_array[$i]['VorzBetrag'] = number_format( ( $rechnung[$i]['bruttobetrag'] *
103
                    -1 ), 2, ",", "" );
104
            }
105
            if ( $csv_array[$i]['VorzBetrag'] > 0 )
106
            {
107
                $csv_array[$i]['VorzBetrag'] = "+" . $csv_array[$i]['VorzBetrag'];
108
            }
109
 
110
            /**
111
             * RechNr - Rechnungsnummer (Pflichtfeld)
112
             *
113
             * max-Länge 12 | alphanumerisch
114
             */
115
            $csv_array[$i]['RechNr'] = "\"" . $rechnung[$i]['bestellung'] .
116
                "\"";
117
 
118
            /**
119
             * Belegdatum - Belegdatum (Pflichtfeld)
120
             *
121
             * ttmm | max-Länge 4 | numerisch | keine Trenner
122
             */
123
            $csv_array[$i]['Belegdatum'] = "\"" . date( "dm", strtotime( $rechnung[$i]['erstellt_am'] ) ) .
124
                "\"";
125
 
126
            /**
127
             * InterneRechNr - Interne Rechnungsnummer
128
             *
129
             * max-Länge 12 | alphanumerisch
130
             */
131
            $csv_array[$i]['InterneRechNr'] = "\"" . $rechnung[$i]['rechnungsnummer'] .
132
                "\"";
133
 
134
            /**
135
             * KundeName - Kunden-Name
136
             *
137
             * max-Länge 40 | alphanumerisch
138
             */
139
            if ( $rechnung[$i]['firma'] )
140
            {
141
                $csv_array[$i]['KundeName'] = "\"" . $rechnung[$i]['firma'] .
142
                    "\"";
143
            }
144
            else
145
            {
146
                $csv_array[$i]['KundeName'] = "\"" . $rechnung[$i]['kunde'] .
147
                    "\"";
148
            }
149
 
150
            /**
151
             * KundeOrt - Ort des Kunden
152
             *
153
             * max-Länge 30 | alphanumerisch
154
             */
155
            $csv_array[$i]['KundeOrt'] = "\"" . $rechnung[$i]['ort'] . "\"";
156
 
157
            /**
158
             * KundeKonto - Kunden-Konto-Nr.
159
             *
160
             * max-Länge 9 (inkl. Blank 10) | numerisch | Länge in Abhängigkeit der Sachkontolänge
161
             */
162
            /**
163
             * Kontobereichnung - Kontobereichnung
164
             *
165
             * max-Länge 30 | alphanumerisch
166
             */
167
            $rechnung[$i]['mwst_19'] = floatval( $rechnung[$i]['mwst_19'] );
168
            $rechnung[$i]['mwst_7'] = floatval( $rechnung[$i]['mwst_7'] );
169
 
170
            if ( $rechnung[$i]['mwst_19'] > 0 && empty( $rechnung[$i]['mwst_7'] ) )
171
            {
172
                $csv_array[$i]['KundeKonto'] = $daten[1] . '400';
173
                $csv_array[$i]['Kontobezeichnung'] = '"19%"';
174
            } elseif ( empty( $rechnung[$i]['mwst_19'] ) && $rechnung[$i]['mwst_7'] > 0 )
175
            {
176
                $csv_array[$i]['KundeKonto'] = $daten[1] . '300';
177
                $csv_array[$i]['Kontobezeichnung'] = '"7%"';
178
            } elseif ( $rechnung[$i]['mwst_19'] > 0 && $rechnung[$i]['mwst_7'] > 0 )
179
            {
180
                $csv_array[$i]['KundeKonto'] = $daten[1] . '400';
181
                $csv_array[$i]['Kontobezeichnung'] = '"19%"';
182
            } elseif ( $rechnung[$i]['mwst_befreiung'] == "on" )
183
            {
184
                if ( empty( $rechnung[$i]['ustid_nr'] ) )
185
                {
186
                    $csv_array[$i]['KundeKonto'] = $daten[1] . '120';
187
                    $csv_array[$i]['Kontobezeichnung'] = '"0% Drittland"';
188
                }
189
                else
190
                {
191
                    $csv_array[$i]['KundeKonto'] = $daten[1] . '125';
192
                    $csv_array[$i]['Kontobezeichnung'] = '"0% EG"';
193
                }
194
            }
195
            else
196
            {
197
                $csv_array[$i]['KundeKonto'] = $daten[1] . '000';
198
                $csv_array[$i]['Kontobezeichnung'] = '"Rest"';
199
            }
200
 
201
            /**
202
             * BU - B(erichtungsschhlüssel) U(msatzstuerschlüssel)
203
             *
204
             * max-Länge 2 | numerisch | zulässige BU-SChlüssel: 1 - 3, 5, 10 - 13, 15, 40, 50 - 59
205
             */
206
            $csv_array[$i]['BU'] = '';
207
 
208
            /**
209
             * Konto - Konto-Nr.
210
             *
211
             * max-Länge 8 (inkl. Blank 9 | numerisch | Länge in Abhängigkeit der Sachkontolänge
212
             */
213
            $csv_array[$i]['Konto'] = $daten[2];
214
 
215
            /**
216
             * Ware/Leistung - Ware/Leistung
217
             *
218
             * max-Länge 30 | alphanumerisch
219
             */
220
            $csv_array[$i]['Ware/Leistung'] = '';
221
 
222
            /**
223
             * Fällig_am - Fälligkeitsdatum
224
             *
225
             * ttmmjjjj | max-Länge 8 | numerisch | keine Trenner
226
             */
227
            $csv_array[$i]['Fällig_am'] = '';
228
 
229
            /**
230
             * gezahlt_am - Datum gezahlt am
231
             *
232
             * ttmm | max-Länge 8 | numerisch | keine Trenner
233
             */
234
            $csv_array[$i]['gezahlt_am'] = '';
235
 
236
            /**
237
             * UStSatz - Umsatzsteuer-Prozentsatz
238
             *
239
             * Max-Länge 5 | numerisch | Decimalpunkt = ","
240
             */
241
            $csv_array[$i]['UStSatz'] = '';
242
 
243
            /**
244
             * USt-IdNr. Kunde - USt-IdNr. Kunde
245
             *
246
             * max-Länge 15 | alphanumerisch
247
             */
248
            $csv_array[$i]['USt_IdNr.Kunde'] = '';
249
 
250
            /**
251
             * Kunden-Nr. - Kunden-Nr.
252
             *
253
             * max-Länge 15 | alphanumerisch
254
             */
255
            $csv_array[$i]['Kunden-Nr.'] = '"' . $rechnung[$i]['kundennr'] .
256
                '"';
257
 
258
            /**
259
             * KOST1- KOST1
260
             *
261
             * max-Länge 8 | alphanumerisch
262
             */
263
            $csv_array[$i]['KOST1'] = '';
264
 
265
            /**
266
             * KOST2- KOST2
267
             *
268
             * max-Länge 8 | alphanumerisch
269
             */
270
            $csv_array[$i]['KOST2'] = '';
271
 
272
            /**
273
             * KOSTmenge - KOST-Mengen-"Betrag"
274
             *
275
             * max-Länge 9,2 | Decimalpunkt = "," | keine Tausenderpunkte
276
             */
277
            $csv_array[$i]['KOSTmenge'] = '';
278
 
279
            /**
280
             * Kurs - Kurs-Umrechnungsbetrag
281
             *
282
             * max-Länge 4,6 | Decimalpunkt = "," | keine Tausenderpunkte
283
             */
284
            $csv_array[$i]['Kurs'] = '';
285
 
286
            /**
287
             * Skonto - Skonto-Betrag
288
             *
289
             * max-Länge 8,2 | Decimalpunkt = "," | keine Tausenderpunkte
290
             */
291
            $csv_array[$i]['Skonto'] = '';
292
 
293
            /**
294
             * Nachricht - Nachricht
295
             *
296
             * max-Länge 120 | alphanummerisch
297
             */
298
            $csv_array[$i]['Nachricht'] = '';
299
 
300
            /**
301
             * Skto_Fällig_am - Skonto-Fälligkeit = Nettofälligkeit
302
             *
303
             * ttmmjjjj | max-Länge 8 | numerisch | keine Trenner | auch tt.mm.jjjj ; Abhängigkeit zum Skontobetrag ->
304
             * Sktontobetrag muss bei Skto_Fällig_am gefüllt sein
305
             */
306
            $csv_array[$i]['Skto_Fällig_am'] = '';
307
 
308
            /**
309
             * BankKonto - Konto-Nr.
310
             *
311
             * Kontonummer
312
             *
313
             * Kontonummer immmer in Verbindung mit Bankleitzahl
314
             */
315
            $csv_array[$i]['BankKonto'] = '';
316
 
317
            /**
318
             * BankBlz - BLZ
319
             *
320
             * Bankleitzahl immer in Verbindung mit Kontonummer
321
             */
322
            $csv_array[$i]['BankBlz'] = '';
323
 
324
            /**
325
             * Bankname - Name der Bank
326
             *
327
             * max-Länge 27 | alphanumerisch
328
             */
329
            $csv_array[$i]['Bankname'] = '';
330
 
331
            if ( strtolower( $daten[3] ) !== "false" )
332
            {
333
                $csv_array[$i]["shop"] = getShop( $rechnung[$i]["shops_id"] );
334
            }
335
        }
336
        // ----------------------------
337
 
338
        // Erstellen des Inhalts der CSV-Datei
339
        $csv_header =
340
            '"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";';
341
        if ( strtolower( $daten[3] ) !== "false" )
342
        {
343
            $csv_header .= '"Shop";';
344
        }
345
 
346
        $datev_csv_export = $csv_header . "\n";
347
 
348
        for ( $i = 0; $i < sizeof( $csv_array ); $i++ )
349
        {
350
            $datev_csv_export .= $csv_array[$i]['Währung'] . ';';
351
            $datev_csv_export .= $csv_array[$i]['VorzBetrag'] . ';';
352
            $datev_csv_export .= $csv_array[$i]['RechNr'] . ';';
353
            $datev_csv_export .= $csv_array[$i]['Belegdatum'] . ';';
354
            $datev_csv_export .= $csv_array[$i]['InterneRechNr'] . ';';
355
            $datev_csv_export .= $csv_array[$i]['KundeName'] . ';';
356
            $datev_csv_export .= $csv_array[$i]['KundeOrt'] . ';';
357
            $datev_csv_export .= $csv_array[$i]['KundeKonto'] . ';';
358
            $datev_csv_export .= $csv_array[$i]['BU'] . ';';
359
            $datev_csv_export .= $csv_array[$i]['Konto'] . ';';
360
            $datev_csv_export .= $csv_array[$i]['Kontobezeichnung'] . ';';
361
            $datev_csv_export .= $csv_array[$i]['Ware/Leistung'] . ';';
362
            $datev_csv_export .= $csv_array[$i]['Fällig_am'] . ';';
363
            $datev_csv_export .= $csv_array[$i]['gezahlt_am'] . ';';
364
            $datev_csv_export .= $csv_array[$i]['UStSatz'] . ';';
365
            $datev_csv_export .= $csv_array[$i]['USt_IdNr.Kunde'] . ';';
366
            $datev_csv_export .= $csv_array[$i]['Kunden-Nr.'] . ';';
367
            $datev_csv_export .= $csv_array[$i]['KOST1'] . ';';
368
            $datev_csv_export .= $csv_array[$i]['KOST2'] . ';';
369
            $datev_csv_export .= $csv_array[$i]['KOSTmenge'] . ';';
370
            $datev_csv_export .= $csv_array[$i]['Kurs'] . ';';
371
            $datev_csv_export .= $csv_array[$i]['Skonto'] . ';';
372
            $datev_csv_export .= $csv_array[$i]['Nachricht'] . ';';
373
            $datev_csv_export .= $csv_array[$i]['Skto_Fällig_am'] . ';';
374
            $datev_csv_export .= $csv_array[$i]['BankKonto'] . ';';
375
            $datev_csv_export .= $csv_array[$i]['BankBlz'] . ';';
376
            $datev_csv_export .= $csv_array[$i]['Bankname'] . ';';
377
            $datev_csv_export .= $csv_array[$i]['shop'] . ';';
378
            $datev_csv_export .= "\n";
379
        }
380
        // -----------------------------------
381
 
382
        // CSV-Datei erstellen
383
        $filename = time() . rand( 0, 9999 ) . ".csv";
384
        //file_put_contents( $filename, $datev_csv_export );
385
        // -------------------
386
 
387
        // CSV-Download initialisieren
388
        header( "Content-Type: text/comma-separated-values" );
389
        header( "Content-Disposition: attachment; filename=\"$filename\"" );
390
        //readfile( $filename );
391
        echo $datev_csv_export;
392
        // ---------------------------
393
 
394
        // CSV-Datei auf dem Server wieder löschen
395
        //unlink( $filename );
396
        // ---------------------------------------
397
    }
398
?>